From 2528064a2f9457aa2b835c40b93b6c6b7de6ecb4 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Sun, 4 Aug 2024 00:25:58 +0200 Subject: [PATCH 01/17] Add @storybook/nextjs-vite package --- .../src/common/utils/framework-to-renderer.ts | 1 + code/core/src/common/versions.ts | 1 + code/core/src/types/modules/frameworks.ts | 1 + code/frameworks/nextjs-vite/.eslintrc.json | 23 + code/frameworks/nextjs-vite/README.md | 10 + code/frameworks/nextjs-vite/package.json | 143 ++++++ code/frameworks/nextjs-vite/preset.js | 1 + code/frameworks/nextjs-vite/project.json | 8 + .../nextjs-vite/src/config/preview.ts | 4 + .../src/export-mocks/cache/index.ts | 23 + .../src/export-mocks/headers/cookies.ts | 38 ++ .../src/export-mocks/headers/headers.ts | 39 ++ .../src/export-mocks/headers/index.ts | 13 + .../src/export-mocks/navigation/index.ts | 94 ++++ .../src/export-mocks/router/index.ts | 115 +++++ .../src/head-manager/decorator.tsx | 10 + .../head-manager/head-manager-provider.tsx | 23 + .../nextjs-vite/src/images/decorator.tsx | 19 + code/frameworks/nextjs-vite/src/index.ts | 2 + .../nextjs-vite/src/portable-stories.ts | 132 ++++++ code/frameworks/nextjs-vite/src/preset.ts | 43 ++ code/frameworks/nextjs-vite/src/preview.tsx | 83 ++++ .../src/routing/app-router-provider.tsx | 112 +++++ .../nextjs-vite/src/routing/decorator.tsx | 48 ++ .../src/routing/page-router-provider.tsx | 13 + .../nextjs-vite/src/routing/types.tsx | 7 + .../nextjs-vite/src/styledJsx/decorator.tsx | 8 + code/frameworks/nextjs-vite/src/types.ts | 44 ++ code/frameworks/nextjs-vite/src/typings.d.ts | 32 ++ .../nextjs-vite/template/cli/.eslintrc.json | 7 + .../nextjs-vite/template/cli/js/Button.jsx | 54 +++ .../template/cli/js/Button.stories.js | 48 ++ .../nextjs-vite/template/cli/js/Configure.mdx | 446 ++++++++++++++++++ .../nextjs-vite/template/cli/js/Header.jsx | 59 +++ .../template/cli/js/Header.stories.js | 29 ++ .../nextjs-vite/template/cli/js/Page.jsx | 68 +++ .../template/cli/js/Page.stories.js | 27 ++ .../template/cli/ts-3-8/Button.stories.ts | 52 ++ .../template/cli/ts-3-8/Button.tsx | 52 ++ .../template/cli/ts-3-8/Configure.mdx | 446 ++++++++++++++++++ .../template/cli/ts-3-8/Header.stories.ts | 33 ++ .../template/cli/ts-3-8/Header.tsx | 56 +++ .../template/cli/ts-3-8/Page.stories.ts | 32 ++ .../nextjs-vite/template/cli/ts-3-8/Page.tsx | 73 +++ .../template/cli/ts-4-9/Button.stories.ts | 52 ++ .../template/cli/ts-4-9/Button.tsx | 52 ++ .../template/cli/ts-4-9/Configure.mdx | 446 ++++++++++++++++++ .../template/cli/ts-4-9/Header.stories.ts | 32 ++ .../template/cli/ts-4-9/Header.tsx | 56 +++ .../template/cli/ts-4-9/Page.stories.ts | 32 ++ .../nextjs-vite/template/cli/ts-4-9/Page.tsx | 73 +++ .../nextjs-vite/template/next-env.d.ts | 7 + .../stories/DynamicImport.stories.tsx | 25 + .../template/stories/DynamicImport.tsx | 5 + .../template/stories/Font.stories.tsx | 28 ++ .../nextjs-vite/template/stories/Font.tsx | 67 +++ .../stories/GetImageProps.stories.tsx | 38 ++ .../template/stories/Head.stories.tsx | 38 ++ .../template/stories/Image.stories.tsx | 108 +++++ .../template/stories/ImageLegacy.stories.tsx | 36 ++ .../template/stories/Link.stories.module.css | 3 + .../template/stories/Link.stories.tsx | 85 ++++ .../template/stories/Navigation.stories.tsx | 151 ++++++ .../template/stories/NextHeader.stories.tsx | 46 ++ .../template/stories/NextHeader.tsx | 39 ++ .../nextjs-vite/template/stories/RSC.jsx | 6 + .../template/stories/RSC.stories.jsx | 35 ++ .../template/stories/Redirect.stories.tsx | 55 +++ .../template/stories/Router.stories.tsx | 108 +++++ .../stories/ServerActions.stories.tsx | 115 +++++ .../template/stories/ServerActions.tsx | 28 ++ .../template/stories/StyledJsx.stories.jsx | 20 + .../template/stories/fonts/OFL.txt | 93 ++++ .../stories/fonts/RubikStorm-Regular.ttf | Bin 0 -> 795576 bytes code/frameworks/nextjs-vite/tsconfig.json | 8 + code/frameworks/nextjs-vite/vitest.config.ts | 10 + code/lib/cli/src/sandbox-templates.ts | 24 +- code/yarn.lock | 426 +++++++++++++++++ 78 files changed, 4918 insertions(+), 1 deletion(-) create mode 100644 code/frameworks/nextjs-vite/.eslintrc.json create mode 100644 code/frameworks/nextjs-vite/README.md create mode 100644 code/frameworks/nextjs-vite/package.json create mode 100644 code/frameworks/nextjs-vite/preset.js create mode 100644 code/frameworks/nextjs-vite/project.json create mode 100644 code/frameworks/nextjs-vite/src/config/preview.ts create mode 100644 code/frameworks/nextjs-vite/src/export-mocks/cache/index.ts create mode 100644 code/frameworks/nextjs-vite/src/export-mocks/headers/cookies.ts create mode 100644 code/frameworks/nextjs-vite/src/export-mocks/headers/headers.ts create mode 100644 code/frameworks/nextjs-vite/src/export-mocks/headers/index.ts create mode 100644 code/frameworks/nextjs-vite/src/export-mocks/navigation/index.ts create mode 100644 code/frameworks/nextjs-vite/src/export-mocks/router/index.ts create mode 100644 code/frameworks/nextjs-vite/src/head-manager/decorator.tsx create mode 100644 code/frameworks/nextjs-vite/src/head-manager/head-manager-provider.tsx create mode 100644 code/frameworks/nextjs-vite/src/images/decorator.tsx create mode 100644 code/frameworks/nextjs-vite/src/index.ts create mode 100644 code/frameworks/nextjs-vite/src/portable-stories.ts create mode 100644 code/frameworks/nextjs-vite/src/preset.ts create mode 100644 code/frameworks/nextjs-vite/src/preview.tsx create mode 100644 code/frameworks/nextjs-vite/src/routing/app-router-provider.tsx create mode 100644 code/frameworks/nextjs-vite/src/routing/decorator.tsx create mode 100644 code/frameworks/nextjs-vite/src/routing/page-router-provider.tsx create mode 100644 code/frameworks/nextjs-vite/src/routing/types.tsx create mode 100644 code/frameworks/nextjs-vite/src/styledJsx/decorator.tsx create mode 100644 code/frameworks/nextjs-vite/src/types.ts create mode 100644 code/frameworks/nextjs-vite/src/typings.d.ts create mode 100644 code/frameworks/nextjs-vite/template/cli/.eslintrc.json create mode 100644 code/frameworks/nextjs-vite/template/cli/js/Button.jsx create mode 100644 code/frameworks/nextjs-vite/template/cli/js/Button.stories.js create mode 100644 code/frameworks/nextjs-vite/template/cli/js/Configure.mdx create mode 100644 code/frameworks/nextjs-vite/template/cli/js/Header.jsx create mode 100644 code/frameworks/nextjs-vite/template/cli/js/Header.stories.js create mode 100644 code/frameworks/nextjs-vite/template/cli/js/Page.jsx create mode 100644 code/frameworks/nextjs-vite/template/cli/js/Page.stories.js create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.stories.ts create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.tsx create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-3-8/Configure.mdx create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.stories.ts create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.tsx create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.stories.ts create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.tsx create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.stories.ts create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.tsx create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-4-9/Configure.mdx create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.stories.ts create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.tsx create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.stories.ts create mode 100644 code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.tsx create mode 100644 code/frameworks/nextjs-vite/template/next-env.d.ts create mode 100644 code/frameworks/nextjs-vite/template/stories/DynamicImport.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/DynamicImport.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/Font.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/Font.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/GetImageProps.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/Head.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/Image.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/ImageLegacy.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/Link.stories.module.css create mode 100644 code/frameworks/nextjs-vite/template/stories/Link.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/Navigation.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/NextHeader.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/NextHeader.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/RSC.jsx create mode 100644 code/frameworks/nextjs-vite/template/stories/RSC.stories.jsx create mode 100644 code/frameworks/nextjs-vite/template/stories/Redirect.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/Router.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/ServerActions.stories.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/ServerActions.tsx create mode 100644 code/frameworks/nextjs-vite/template/stories/StyledJsx.stories.jsx create mode 100644 code/frameworks/nextjs-vite/template/stories/fonts/OFL.txt create mode 100644 code/frameworks/nextjs-vite/template/stories/fonts/RubikStorm-Regular.ttf create mode 100644 code/frameworks/nextjs-vite/tsconfig.json create mode 100644 code/frameworks/nextjs-vite/vitest.config.ts diff --git a/code/core/src/common/utils/framework-to-renderer.ts b/code/core/src/common/utils/framework-to-renderer.ts index a34ac765c2c7..6169237b12cd 100644 --- a/code/core/src/common/utils/framework-to-renderer.ts +++ b/code/core/src/common/utils/framework-to-renderer.ts @@ -11,6 +11,7 @@ export const frameworkToRenderer: Record< 'html-vite': 'html', 'html-webpack5': 'html', nextjs: 'react', + 'nextjs-vite': 'react', 'preact-vite': 'preact', 'preact-webpack5': 'preact', qwik: 'qwik', diff --git a/code/core/src/common/versions.ts b/code/core/src/common/versions.ts index 192f2dbea6fc..c312baaa8b57 100644 --- a/code/core/src/common/versions.ts +++ b/code/core/src/common/versions.ts @@ -44,6 +44,7 @@ export default { '@storybook/html-vite': '8.3.0-alpha.3', '@storybook/html-webpack5': '8.3.0-alpha.3', '@storybook/nextjs': '8.3.0-alpha.3', + '@storybook/nextjs-vite': '8.3.0-alpha.3', '@storybook/preact-vite': '8.3.0-alpha.3', '@storybook/preact-webpack5': '8.3.0-alpha.3', '@storybook/react-vite': '8.3.0-alpha.3', diff --git a/code/core/src/types/modules/frameworks.ts b/code/core/src/types/modules/frameworks.ts index 9ae2cc538b51..a8487124c6d6 100644 --- a/code/core/src/types/modules/frameworks.ts +++ b/code/core/src/types/modules/frameworks.ts @@ -5,6 +5,7 @@ export type SupportedFrameworks = | 'html-vite' | 'html-webpack5' | 'nextjs' + | 'nextjs-vite' | 'preact-vite' | 'preact-webpack5' | 'react-vite' diff --git a/code/frameworks/nextjs-vite/.eslintrc.json b/code/frameworks/nextjs-vite/.eslintrc.json new file mode 100644 index 000000000000..d76f64f6803d --- /dev/null +++ b/code/frameworks/nextjs-vite/.eslintrc.json @@ -0,0 +1,23 @@ +{ + "rules": { + "global-require": "off", + "no-param-reassign": "off", + "import/no-dynamic-require": "off", + "import/no-unresolved": "off" + }, + "overrides": [ + { + "files": ["**/*.stories.@(jsx|tsx)"], + "rules": { + "react/no-unknown-property": "off", + "jsx-a11y/anchor-is-valid": "off" + } + }, + { + "files": ["**/*.compat.@(tsx|ts)"], + "rules": { + "local-rules/no-uncategorized-errors": "off" + } + } + ] +} diff --git a/code/frameworks/nextjs-vite/README.md b/code/frameworks/nextjs-vite/README.md new file mode 100644 index 000000000000..2ed6aeca8721 --- /dev/null +++ b/code/frameworks/nextjs-vite/README.md @@ -0,0 +1,10 @@ +# Storybook for Next.js with Vite Builder + +See [documentation](https://storybook.js.org/docs/get-started/frameworks/nextjs?renderer=react) for installation instructions, usage examples, APIs, and more. + +## Acknowledgements + +This framework borrows heavily from these Storybook addons: + +- [storybook-addon-next](https://github.com/RyanClementsHax/storybook-addon-next) by [RyanClementsHax](https://github.com/RyanClementsHax/) +- [storybook-addon-next-router](https://github.com/lifeiscontent/storybook-addon-next-router) by [lifeiscontent](https://github.com/lifeiscontent) diff --git a/code/frameworks/nextjs-vite/package.json b/code/frameworks/nextjs-vite/package.json new file mode 100644 index 000000000000..3818f5c40848 --- /dev/null +++ b/code/frameworks/nextjs-vite/package.json @@ -0,0 +1,143 @@ +{ + "name": "@storybook/nextjs-vite", + "version": "8.3.0-alpha.3", + "description": "Storybook for Next.js and Vite", + "keywords": [ + "storybook", + "nextjs", + "vite" + ], + "homepage": "https://github.com/storybookjs/storybook/tree/next/code/frameworks/nextjs-vite", + "bugs": { + "url": "https://github.com/storybookjs/storybook/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/storybookjs/storybook.git", + "directory": "code/frameworks/nextjs" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "license": "MIT", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "node": "./dist/index.js", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./preset": { + "types": "./dist/preset.d.ts", + "require": "./dist/preset.js" + }, + "./dist/preview.mjs": "./dist/preview.mjs", + "./cache.mock": { + "types": "./dist/export-mocks/cache/index.d.ts", + "import": "./dist/export-mocks/cache/index.mjs", + "require": "./dist/export-mocks/cache/index.js" + }, + "./headers.mock": { + "types": "./dist/export-mocks/headers/index.d.ts", + "import": "./dist/export-mocks/headers/index.mjs", + "require": "./dist/export-mocks/headers/index.js" + }, + "./navigation.mock": { + "types": "./dist/export-mocks/navigation/index.d.ts", + "import": "./dist/export-mocks/navigation/index.mjs", + "require": "./dist/export-mocks/navigation/index.js" + }, + "./router.mock": { + "types": "./dist/export-mocks/router/index.d.ts", + "import": "./dist/export-mocks/router/index.mjs", + "require": "./dist/export-mocks/router/index.js" + }, + "./package.json": "./package.json" + }, + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "typesVersions": { + "*": { + "*": [ + "dist/index.d.ts" + ], + "cache.mock": [ + "dist/export-mocks/cache/index.d.ts" + ], + "headers.mock": [ + "dist/export-mocks/headers/index.d.ts" + ], + "router.mock": [ + "dist/export-mocks/router/index.d.ts" + ], + "navigation.mock": [ + "dist/export-mocks/navigation/index.d.ts" + ] + } + }, + "files": [ + "dist/**/*", + "template/cli/**/*", + "README.md", + "*.js", + "*.d.ts", + "!src/**/*" + ], + "scripts": { + "check": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/check.ts", + "prep": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/bundle.ts" + }, + "dependencies": { + "@storybook/builder-vite": "workspace:*", + "@storybook/react": "workspace:*", + "@storybook/test": "workspace:*", + "styled-jsx": "5.1.6" + }, + "devDependencies": { + "@types/node": "^18.0.0", + "next": "^14.2.5", + "typescript": "^5.3.2", + "vite-plugin-storybook-nextjs": "^0.0.13" + }, + "peerDependencies": { + "next": "^14.2.5", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "storybook": "workspace:^", + "vite": "^5.0.0", + "vite-plugin-storybook-nextjs": "^0.0.13" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + }, + "optionalDependencies": { + "sharp": "^0.33.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "bundler": { + "entries": [ + "./src/index.ts", + "./src/preset.ts", + "./src/preview.tsx", + "./src/export-mocks/cache/index.ts", + "./src/export-mocks/headers/index.ts", + "./src/export-mocks/router/index.ts", + "./src/export-mocks/navigation/index.ts", + "./src/images/decorator.tsx" + ], + "externals": [ + "sb-original/image-context" + ], + "platform": "node" + }, + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16" +} diff --git a/code/frameworks/nextjs-vite/preset.js b/code/frameworks/nextjs-vite/preset.js new file mode 100644 index 000000000000..a83f95279e7f --- /dev/null +++ b/code/frameworks/nextjs-vite/preset.js @@ -0,0 +1 @@ +module.exports = require('./dist/preset'); diff --git a/code/frameworks/nextjs-vite/project.json b/code/frameworks/nextjs-vite/project.json new file mode 100644 index 000000000000..049a16e3417f --- /dev/null +++ b/code/frameworks/nextjs-vite/project.json @@ -0,0 +1,8 @@ +{ + "name": "nextjs-vite", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "targets": { + "build": {} + } +} diff --git a/code/frameworks/nextjs-vite/src/config/preview.ts b/code/frameworks/nextjs-vite/src/config/preview.ts new file mode 100644 index 000000000000..4766f590bcaf --- /dev/null +++ b/code/frameworks/nextjs-vite/src/config/preview.ts @@ -0,0 +1,4 @@ +import { setConfig } from 'next/config'; + +// eslint-disable-next-line no-underscore-dangle +setConfig(process.env.__NEXT_RUNTIME_CONFIG); diff --git a/code/frameworks/nextjs-vite/src/export-mocks/cache/index.ts b/code/frameworks/nextjs-vite/src/export-mocks/cache/index.ts new file mode 100644 index 000000000000..35b74b8cb02f --- /dev/null +++ b/code/frameworks/nextjs-vite/src/export-mocks/cache/index.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { fn } from '@storybook/test'; + +// biome-ignore lint/suspicious/noExplicitAny: +type Callback = (...args: any[]) => Promise; + +// mock utilities/overrides (as of Next v14.2.0) +const revalidatePath = fn().mockName('next/cache::revalidatePath'); +const revalidateTag = fn().mockName('next/cache::revalidateTag'); +const unstable_cache = fn() + .mockName('next/cache::unstable_cache') + .mockImplementation((cb: Callback) => cb); +const unstable_noStore = fn().mockName('next/cache::unstable_noStore'); + +const cacheExports = { + unstable_cache, + revalidateTag, + revalidatePath, + unstable_noStore, +}; + +export default cacheExports; +export { unstable_cache, revalidateTag, revalidatePath, unstable_noStore }; diff --git a/code/frameworks/nextjs-vite/src/export-mocks/headers/cookies.ts b/code/frameworks/nextjs-vite/src/export-mocks/headers/cookies.ts new file mode 100644 index 000000000000..3d84ecba3885 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/export-mocks/headers/cookies.ts @@ -0,0 +1,38 @@ +import { fn } from '@storybook/test'; +import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies'; +// We need this import to be a singleton, and because it's used in multiple entrypoints +// both in ESM and CJS, importing it via the package name instead of having a local import +// is the only way to achieve it actually being a singleton +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore we must ignore types here as during compilation they are not generated yet +import { headers } from '@storybook/nextjs/headers.mock'; + +class RequestCookiesMock extends RequestCookies { + get = fn(super.get.bind(this)).mockName('next/headers::cookies().get'); + + getAll = fn(super.getAll.bind(this)).mockName('next/headers::cookies().getAll'); + + has = fn(super.has.bind(this)).mockName('next/headers::cookies().has'); + + set = fn(super.set.bind(this)).mockName('next/headers::cookies().set'); + + delete = fn(super.delete.bind(this)).mockName('next/headers::cookies().delete'); +} + +let requestCookiesMock: RequestCookiesMock; + +export const cookies = fn(() => { + if (!requestCookiesMock) { + requestCookiesMock = new RequestCookiesMock(headers()); + } + return requestCookiesMock; +}).mockName('next/headers::cookies()'); + +const originalRestore = cookies.mockRestore.bind(null); + +// will be called automatically by the test loader +cookies.mockRestore = () => { + originalRestore(); + headers.mockRestore(); + requestCookiesMock = new RequestCookiesMock(headers()); +}; diff --git a/code/frameworks/nextjs-vite/src/export-mocks/headers/headers.ts b/code/frameworks/nextjs-vite/src/export-mocks/headers/headers.ts new file mode 100644 index 000000000000..d9eb5177b447 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/export-mocks/headers/headers.ts @@ -0,0 +1,39 @@ +import { fn } from '@storybook/test'; + +import { HeadersAdapter } from 'next/dist/server/web/spec-extension/adapters/headers'; + +class HeadersAdapterMock extends HeadersAdapter { + constructor() { + super({}); + } + + append = fn(super.append.bind(this)).mockName('next/headers::headers().append'); + + delete = fn(super.delete.bind(this)).mockName('next/headers::headers().delete'); + + get = fn(super.get.bind(this)).mockName('next/headers::headers().get'); + + has = fn(super.has.bind(this)).mockName('next/headers::headers().has'); + + set = fn(super.set.bind(this)).mockName('next/headers::headers().set'); + + forEach = fn(super.forEach.bind(this)).mockName('next/headers::headers().forEach'); + + entries = fn(super.entries.bind(this)).mockName('next/headers::headers().entries'); + + keys = fn(super.keys.bind(this)).mockName('next/headers::headers().keys'); + + values = fn(super.values.bind(this)).mockName('next/headers::headers().values'); +} + +let headersAdapterMock: HeadersAdapterMock; + +export const headers = () => { + if (!headersAdapterMock) headersAdapterMock = new HeadersAdapterMock(); + return headersAdapterMock; +}; + +// This fn is called by ./cookies to restore the headers in the right order +headers.mockRestore = () => { + headersAdapterMock = new HeadersAdapterMock(); +}; diff --git a/code/frameworks/nextjs-vite/src/export-mocks/headers/index.ts b/code/frameworks/nextjs-vite/src/export-mocks/headers/index.ts new file mode 100644 index 000000000000..1ec2cbd2915f --- /dev/null +++ b/code/frameworks/nextjs-vite/src/export-mocks/headers/index.ts @@ -0,0 +1,13 @@ +import { fn } from '@storybook/test'; +import * as originalHeaders from 'next/dist/client/components/headers'; + +// re-exports of the actual module +export * from 'next/dist/client/components/headers'; + +// mock utilities/overrides (as of Next v14.2.0) +export { headers } from './headers'; +export { cookies } from './cookies'; + +// passthrough mocks - keep original implementation but allow for spying +const draftMode = fn(originalHeaders.draftMode).mockName('draftMode'); +export { draftMode }; diff --git a/code/frameworks/nextjs-vite/src/export-mocks/navigation/index.ts b/code/frameworks/nextjs-vite/src/export-mocks/navigation/index.ts new file mode 100644 index 000000000000..09a013578250 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/export-mocks/navigation/index.ts @@ -0,0 +1,94 @@ +import type { Mock } from '@storybook/test'; +import { fn } from '@storybook/test'; +import * as actual from 'next/dist/client/components/navigation'; +import { NextjsRouterMocksNotAvailable } from 'storybook/internal/preview-errors'; +import { RedirectStatusCode } from 'next/dist/client/components/redirect-status-code'; +import { getRedirectError } from 'next/dist/client/components/redirect'; + +let navigationAPI: { + push: Mock; + replace: Mock; + forward: Mock; + back: Mock; + prefetch: Mock; + refresh: Mock; +}; + +/** + * Creates a next/navigation router API mock. Used internally. + * @ignore + * @internal + * */ +export const createNavigation = (overrides: any) => { + const navigationActions = { + push: fn().mockName('next/navigation::useRouter().push'), + replace: fn().mockName('next/navigation::useRouter().replace'), + forward: fn().mockName('next/navigation::useRouter().forward'), + back: fn().mockName('next/navigation::useRouter().back'), + prefetch: fn().mockName('next/navigation::useRouter().prefetch'), + refresh: fn().mockName('next/navigation::useRouter().refresh'), + }; + + if (overrides) { + Object.keys(navigationActions).forEach((key) => { + if (key in overrides) { + (navigationActions as any)[key] = fn((...args: any[]) => { + return (overrides as any)[key](...args); + }).mockName(`useRouter().${key}`); + } + }); + } + + navigationAPI = navigationActions; + + return navigationAPI; +}; + +export const getRouter = () => { + if (!navigationAPI) { + throw new NextjsRouterMocksNotAvailable({ + importType: 'next/navigation', + }); + } + + return navigationAPI; +}; + +// re-exports of the actual module +export * from 'next/dist/client/components/navigation'; + +// mock utilities/overrides (as of Next v14.2.0) +export const redirect = fn( + (url: string, type: actual.RedirectType = actual.RedirectType.push): never => { + throw getRedirectError(url, type, RedirectStatusCode.SeeOther); + } +).mockName('next/navigation::redirect'); + +export const permanentRedirect = fn( + (url: string, type: actual.RedirectType = actual.RedirectType.push): never => { + throw getRedirectError(url, type, RedirectStatusCode.SeeOther); + } +).mockName('next/navigation::permanentRedirect'); + +// passthrough mocks - keep original implementation but allow for spying +export const useSearchParams = fn(actual.useSearchParams).mockName( + 'next/navigation::useSearchParams' +); +export const usePathname = fn(actual.usePathname).mockName('next/navigation::usePathname'); +export const useSelectedLayoutSegment = fn(actual.useSelectedLayoutSegment).mockName( + 'next/navigation::useSelectedLayoutSegment' +); +export const useSelectedLayoutSegments = fn(actual.useSelectedLayoutSegments).mockName( + 'next/navigation::useSelectedLayoutSegments' +); +export const useRouter = fn(actual.useRouter).mockName('next/navigation::useRouter'); +export const useServerInsertedHTML = fn(actual.useServerInsertedHTML).mockName( + 'next/navigation::useServerInsertedHTML' +); +export const notFound = fn(actual.notFound).mockName('next/navigation::notFound'); + +// Params, not exported by Next.js, is manually declared to avoid inference issues. +interface Params { + [key: string]: string | string[]; +} +export const useParams = fn<[], Params>(actual.useParams).mockName('next/navigation::useParams'); diff --git a/code/frameworks/nextjs-vite/src/export-mocks/router/index.ts b/code/frameworks/nextjs-vite/src/export-mocks/router/index.ts new file mode 100644 index 000000000000..e776674c5cef --- /dev/null +++ b/code/frameworks/nextjs-vite/src/export-mocks/router/index.ts @@ -0,0 +1,115 @@ +import type { Mock } from '@storybook/test'; +import { fn } from '@storybook/test'; +import { NextjsRouterMocksNotAvailable } from 'storybook/internal/preview-errors'; +import type { NextRouter, SingletonRouter } from 'next/router'; +import singletonRouter, * as originalRouter from 'next/dist/client/router'; + +const defaultRouterState = { + route: '/', + asPath: '/', + basePath: '/', + pathname: '/', + query: {}, + isFallback: false, + isLocaleDomain: false, + isReady: true, + isPreview: false, +}; + +let routerAPI: { + push: Mock; + replace: Mock; + reload: Mock; + back: Mock; + forward: Mock; + prefetch: Mock; + beforePopState: Mock; + events: { + on: Mock; + off: Mock; + emit: Mock; + }; +} & typeof defaultRouterState; + +/** + * Creates a next/router router API mock. Used internally. + * @ignore + * @internal + * */ +export const createRouter = (overrides: Partial) => { + const routerActions: Partial = { + push: fn((..._args: any[]) => { + return Promise.resolve(true); + }).mockName('next/router::useRouter().push'), + replace: fn((..._args: any[]) => { + return Promise.resolve(true); + }).mockName('next/router::useRouter().replace'), + reload: fn((..._args: any[]) => {}).mockName('next/router::useRouter().reload'), + back: fn((..._args: any[]) => {}).mockName('next/router::useRouter().back'), + forward: fn(() => {}).mockName('next/router::useRouter().forward'), + prefetch: fn((..._args: any[]) => { + return Promise.resolve(); + }).mockName('next/router::useRouter().prefetch'), + beforePopState: fn((..._args: any[]) => {}).mockName('next/router::useRouter().beforePopState'), + }; + + const routerEvents: NextRouter['events'] = { + on: fn((..._args: any[]) => {}).mockName('next/router::useRouter().events.on'), + off: fn((..._args: any[]) => {}).mockName('next/router::useRouter().events.off'), + emit: fn((..._args: any[]) => {}).mockName('next/router::useRouter().events.emit'), + }; + + if (overrides) { + Object.keys(routerActions).forEach((key) => { + if (key in overrides) { + (routerActions as any)[key] = fn((...args: any[]) => { + return (overrides as any)[key](...args); + }).mockName(`useRouter().${key}`); + } + }); + } + + if (overrides?.events) { + Object.keys(routerEvents).forEach((key) => { + if (key in routerEvents) { + (routerEvents as any)[key] = fn((...args: any[]) => { + return (overrides.events as any)[key](...args); + }).mockName(`useRouter().events.${key}`); + } + }); + } + + routerAPI = { + ...defaultRouterState, + ...overrides, + ...routerActions, + // @ts-expect-error TODO improve typings + events: routerEvents, + }; + + // overwrite the singleton router from next/router + (singletonRouter as unknown as SingletonRouter).router = routerAPI as any; + (singletonRouter as unknown as SingletonRouter).readyCallbacks.forEach((cb) => cb()); + (singletonRouter as unknown as SingletonRouter).readyCallbacks = []; + + return routerAPI as unknown as NextRouter; +}; + +export const getRouter = () => { + if (!routerAPI) { + throw new NextjsRouterMocksNotAvailable({ + importType: 'next/router', + }); + } + + return routerAPI; +}; + +// re-exports of the actual module +export * from 'next/dist/client/router'; +export default singletonRouter; + +// mock utilities/overrides (as of Next v14.2.0) +// passthrough mocks - keep original implementation but allow for spying +export const useRouter = fn(originalRouter.useRouter).mockName('next/router::useRouter'); +export const withRouter = fn(originalRouter.withRouter).mockName('next/router::withRouter'); diff --git a/code/frameworks/nextjs-vite/src/head-manager/decorator.tsx b/code/frameworks/nextjs-vite/src/head-manager/decorator.tsx new file mode 100644 index 000000000000..794ad9c77cb9 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/head-manager/decorator.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import HeadManagerProvider from './head-manager-provider'; + +export const HeadManagerDecorator = (Story: React.FC): React.ReactNode => { + return ( + + + + ); +}; diff --git a/code/frameworks/nextjs-vite/src/head-manager/head-manager-provider.tsx b/code/frameworks/nextjs-vite/src/head-manager/head-manager-provider.tsx new file mode 100644 index 000000000000..ee62063351ea --- /dev/null +++ b/code/frameworks/nextjs-vite/src/head-manager/head-manager-provider.tsx @@ -0,0 +1,23 @@ +import type { PropsWithChildren } from 'react'; +import React, { useMemo } from 'react'; +import { HeadManagerContext } from 'next/dist/shared/lib/head-manager-context.shared-runtime'; +import initHeadManager from 'next/dist/client/head-manager'; + +type HeadManagerValue = { + updateHead?: ((state: JSX.Element[]) => void) | undefined; + mountedInstances?: Set; + updateScripts?: ((state: any) => void) | undefined; + scripts?: any; + getIsSsr?: () => boolean; + appDir?: boolean | undefined; + nonce?: string | undefined; +}; + +const HeadManagerProvider: React.FC = ({ children }) => { + const headManager: HeadManagerValue = useMemo(initHeadManager, []); + headManager.getIsSsr = () => false; + + return {children}; +}; + +export default HeadManagerProvider; diff --git a/code/frameworks/nextjs-vite/src/images/decorator.tsx b/code/frameworks/nextjs-vite/src/images/decorator.tsx new file mode 100644 index 000000000000..2e0bc929d0f3 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/images/decorator.tsx @@ -0,0 +1,19 @@ +import * as React from 'react'; +import type { Addon_StoryContext } from 'storybook/internal/types'; + +import { ImageContext } from 'sb-original/image-context'; + +export const ImageDecorator = ( + Story: React.FC, + { parameters }: Addon_StoryContext +): React.ReactNode => { + if (!parameters.nextjs?.image) { + return ; + } + + return ( + + + + ); +}; diff --git a/code/frameworks/nextjs-vite/src/index.ts b/code/frameworks/nextjs-vite/src/index.ts new file mode 100644 index 000000000000..a904f93ec89d --- /dev/null +++ b/code/frameworks/nextjs-vite/src/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './portable-stories'; diff --git a/code/frameworks/nextjs-vite/src/portable-stories.ts b/code/frameworks/nextjs-vite/src/portable-stories.ts new file mode 100644 index 000000000000..e682a103ef24 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/portable-stories.ts @@ -0,0 +1,132 @@ +import { + composeStory as originalComposeStory, + composeStories as originalComposeStories, + setProjectAnnotations as originalSetProjectAnnotations, + composeConfigs, +} from 'storybook/internal/preview-api'; +import type { + Args, + ProjectAnnotations, + StoryAnnotationsOrFn, + Store_CSFExports, + StoriesWithPartialProps, + NamedOrDefaultProjectAnnotations, + ComposedStoryFn, +} from 'storybook/internal/types'; + +// ! ATTENTION: This needs to be a relative import so it gets prebundled. This is to avoid ESM issues in Nextjs + Jest setups +import { INTERNAL_DEFAULT_PROJECT_ANNOTATIONS as reactAnnotations } from '../../../renderers/react/src/portable-stories'; +import * as rscAnnotations from '../../../renderers/react/src/entry-preview-rsc'; +import * as nextJsAnnotations from './preview'; + +import type { ReactRenderer, Meta } from '@storybook/react'; + +/** Function that sets the globalConfig of your storybook. The global config is the preview module of your .storybook folder. + * + * It should be run a single time, so that your global config (e.g. decorators) is applied to your stories when using `composeStories` or `composeStory`. + * + * Example: + *```jsx + * // setup.js (for jest) + * import { setProjectAnnotations } from '@storybook/nextjs'; + * import projectAnnotations from './.storybook/preview'; + * + * setProjectAnnotations(projectAnnotations); + *``` + * + * @param projectAnnotations - e.g. (import projectAnnotations from '../.storybook/preview') + */ +export function setProjectAnnotations( + projectAnnotations: + | NamedOrDefaultProjectAnnotations + | NamedOrDefaultProjectAnnotations[] +): ProjectAnnotations { + return originalSetProjectAnnotations(projectAnnotations); +} + +// This will not be necessary once we have auto preset loading +const defaultProjectAnnotations: ProjectAnnotations = composeConfigs([ + reactAnnotations, + rscAnnotations, + nextJsAnnotations, +]); + +/** + * Function that will receive a story along with meta (e.g. a default export from a .stories file) + * and optionally projectAnnotations e.g. (import * from '../.storybook/preview) + * and will return a composed component that has all args/parameters/decorators/etc combined and applied to it. + * + * + * It's very useful for reusing a story in scenarios outside of Storybook like unit testing. + * + * Example: + *```jsx + * import { render } from '@testing-library/react'; + * import { composeStory } from '@storybook/nextjs'; + * import Meta, { Primary as PrimaryStory } from './Button.stories'; + * + * const Primary = composeStory(PrimaryStory, Meta); + * + * test('renders primary button with Hello World', () => { + * const { getByText } = render(Hello world); + * expect(getByText(/Hello world/i)).not.toBeNull(); + * }); + *``` + * + * @param story + * @param componentAnnotations - e.g. (import Meta from './Button.stories') + * @param [projectAnnotations] - e.g. (import * as projectAnnotations from '../.storybook/preview') this can be applied automatically if you use `setProjectAnnotations` in your setup files. + * @param [exportsName] - in case your story does not contain a name and you want it to have a name. + */ +export function composeStory( + story: StoryAnnotationsOrFn, + componentAnnotations: Meta, + projectAnnotations?: ProjectAnnotations, + exportsName?: string +): ComposedStoryFn> { + return originalComposeStory( + story as StoryAnnotationsOrFn, + componentAnnotations, + projectAnnotations, + defaultProjectAnnotations, + exportsName + ); +} + +/** + * Function that will receive a stories import (e.g. `import * as stories from './Button.stories'`) + * and optionally projectAnnotations (e.g. `import * from '../.storybook/preview`) + * and will return an object containing all the stories passed, but now as a composed component that has all args/parameters/decorators/etc combined and applied to it. + * + * + * It's very useful for reusing stories in scenarios outside of Storybook like unit testing. + * + * Example: + *```jsx + * import { render } from '@testing-library/react'; + * import { composeStories } from '@storybook/nextjs'; + * import * as stories from './Button.stories'; + * + * const { Primary, Secondary } = composeStories(stories); + * + * test('renders primary button with Hello World', () => { + * const { getByText } = render(Hello world); + * expect(getByText(/Hello world/i)).not.toBeNull(); + * }); + *``` + * + * @param csfExports - e.g. (import * as stories from './Button.stories') + * @param [projectAnnotations] - e.g. (import * as projectAnnotations from '../.storybook/preview') this can be applied automatically if you use `setProjectAnnotations` in your setup files. + */ +export function composeStories>( + csfExports: TModule, + projectAnnotations?: ProjectAnnotations +) { + // @ts-expect-error (Converted from ts-ignore) + const composedStories = originalComposeStories(csfExports, projectAnnotations, composeStory); + + return composedStories as unknown as Omit< + StoriesWithPartialProps, + keyof Store_CSFExports + >; +} diff --git a/code/frameworks/nextjs-vite/src/preset.ts b/code/frameworks/nextjs-vite/src/preset.ts new file mode 100644 index 000000000000..090970b664fd --- /dev/null +++ b/code/frameworks/nextjs-vite/src/preset.ts @@ -0,0 +1,43 @@ +// https://storybook.js.org/docs/react/addons/writing-presets +import type { StorybookConfigVite } from '@storybook/builder-vite'; +import { dirname, join } from 'path'; +import type { PresetProperty } from 'storybook/internal/types'; +import vitePluginStorybookNextjs from 'vite-plugin-storybook-nextjs'; +import type { StorybookConfig } from './types'; + +export const core: PresetProperty<'core'> = async (config, options) => { + const framework = await options.presets.apply('framework'); + + return { + ...config, + builder: { + name: dirname( + require.resolve(join('@storybook/builder-vite', 'package.json')) + ) as '@storybook/builder-vite', + options: { + ...(typeof framework === 'string' ? {} : framework.options.builder || {}), + }, + }, + renderer: dirname(require.resolve(join('@storybook/react', 'package.json'))), + }; +}; + +export const previewAnnotations: PresetProperty<'previewAnnotations'> = (entry = []) => { + const nextDir = dirname(require.resolve('@storybook/nextjs-vite/package.json')); + const result = [...entry, join(nextDir, 'dist/preview.mjs')]; + return result; +}; + +export const viteFinal: StorybookConfigVite['viteFinal'] = async (config, options) => { + config.plugins = config.plugins || []; + const framework = (await options.presets.apply( + 'framework', + {}, + options + )) as StorybookConfig['framework']; + + const nextAppDir = typeof framework !== 'string' ? framework.options.nextAppDir : undefined; + config.plugins.push(vitePluginStorybookNextjs({ dir: nextAppDir })); + + return config; +}; diff --git a/code/frameworks/nextjs-vite/src/preview.tsx b/code/frameworks/nextjs-vite/src/preview.tsx new file mode 100644 index 000000000000..9b1207330728 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/preview.tsx @@ -0,0 +1,83 @@ +import type { Addon_DecoratorFunction, Addon_LoaderFunction } from 'storybook/internal/types'; +import './config/preview'; +import { ImageDecorator } from './images/decorator'; +import { RouterDecorator } from './routing/decorator'; +import { StyledJsxDecorator } from './styledJsx/decorator'; +import { HeadManagerDecorator } from './head-manager/decorator'; + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore we must ignore types here as during compilation they are not generated yet +import { createRouter } from '@storybook/nextjs-vite/router.mock'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore we must ignore types here as during compilation they are not generated yet +import { createNavigation } from '@storybook/nextjs-vite/navigation.mock'; +import { isNextRouterError } from 'next/dist/client/components/is-next-router-error'; + +function addNextHeadCount() { + const meta = document.createElement('meta'); + meta.name = 'next-head-count'; + meta.content = '0'; + document.head.appendChild(meta); +} + +function isAsyncClientComponentError(error: unknown) { + return ( + typeof error === 'string' && + (error.includes('A component was suspended by an uncached promise.') || + error.includes('async/await is not yet supported in Client Components')) + ); +} +addNextHeadCount(); + +// Copying Next patch of console.error: +// https://github.com/vercel/next.js/blob/a74deb63e310df473583ab6f7c1783bc609ca236/packages/next/src/client/app-index.tsx#L15 +const origConsoleError = globalThis.console.error; +globalThis.console.error = (...args: unknown[]) => { + const error = args[0]; + if (isNextRouterError(error) || isAsyncClientComponentError(error)) { + return; + } + origConsoleError.apply(globalThis.console, args); +}; + +globalThis.addEventListener('error', (ev: WindowEventMap['error']): void => { + if (isNextRouterError(ev.error) || isAsyncClientComponentError(ev.error)) { + ev.preventDefault(); + return; + } +}); + +export const decorators: Addon_DecoratorFunction[] = [ + StyledJsxDecorator, + ImageDecorator, + RouterDecorator, + HeadManagerDecorator, +]; + +export const loaders: Addon_LoaderFunction = async ({ globals, parameters }) => { + const { router, appDirectory } = parameters.nextjs ?? {}; + if (appDirectory) { + createNavigation(router); + } else { + createRouter({ + locale: globals.locale, + ...router, + }); + } +}; + +export const parameters = { + docs: { + source: { + excludeDecorators: true, + }, + }, + react: { + rootOptions: { + onCaughtError(error: unknown) { + if (isNextRouterError(error)) return; + console.error(error); + }, + }, + }, +}; diff --git a/code/frameworks/nextjs-vite/src/routing/app-router-provider.tsx b/code/frameworks/nextjs-vite/src/routing/app-router-provider.tsx new file mode 100644 index 000000000000..8528bdbbf82c --- /dev/null +++ b/code/frameworks/nextjs-vite/src/routing/app-router-provider.tsx @@ -0,0 +1,112 @@ +import React, { useMemo } from 'react'; +import { + LayoutRouterContext, + AppRouterContext, + GlobalLayoutRouterContext, +} from 'next/dist/shared/lib/app-router-context.shared-runtime'; +import { + PathnameContext, + SearchParamsContext, + PathParamsContext, +} from 'next/dist/shared/lib/hooks-client-context.shared-runtime'; +import { type Params } from 'next/dist/shared/lib/router/utils/route-matcher'; +import { PAGE_SEGMENT_KEY } from 'next/dist/shared/lib/segment'; +import type { FlightRouterState } from 'next/dist/server/app-render/types'; +import type { RouteParams } from './types'; +// We need this import to be a singleton, and because it's used in multiple entrypoints +// both in ESM and CJS, importing it via the package name instead of having a local import +// is the only way to achieve it actually being a singleton +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore we must ignore types here as during compilation they are not generated yet +import { getRouter } from '@storybook/nextjs-vite/navigation.mock'; + +type AppRouterProviderProps = { + routeParams: RouteParams; +}; + +// Since Next 14.2.x +// https://github.com/vercel/next.js/pull/60708/files#diff-7b6239af735eba0c401e1a0db1a04dd4575c19a031934f02d128cf3ac813757bR106 +function getSelectedParams(currentTree: FlightRouterState, params: Params = {}): Params { + const parallelRoutes = currentTree[1]; + + for (const parallelRoute of Object.values(parallelRoutes)) { + const segment = parallelRoute[0]; + const isDynamicParameter = Array.isArray(segment); + const segmentValue = isDynamicParameter ? segment[1] : segment; + if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) continue; + + // Ensure catchAll and optional catchall are turned into an array + const isCatchAll = isDynamicParameter && (segment[2] === 'c' || segment[2] === 'oc'); + + if (isCatchAll) { + params[segment[0]] = segment[1].split('/'); + } else if (isDynamicParameter) { + params[segment[0]] = segment[1]; + } + + params = getSelectedParams(parallelRoute, params); + } + + return params; +} + +const getParallelRoutes = (segmentsList: Array): FlightRouterState => { + const segment = segmentsList.shift(); + + if (segment) { + return [segment, { children: getParallelRoutes(segmentsList) }]; + } + + return [] as any; +}; + +export const AppRouterProvider: React.FC> = ({ + children, + routeParams, +}) => { + const { pathname, query, segments = [] } = routeParams; + + const tree: FlightRouterState = [pathname, { children: getParallelRoutes([...segments]) }]; + const pathParams = useMemo(() => { + return getSelectedParams(tree); + }, [tree]); + + // https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/app-router.tsx#L436 + return ( + + + + + + + {children} + + + + + + + ); +}; diff --git a/code/frameworks/nextjs-vite/src/routing/decorator.tsx b/code/frameworks/nextjs-vite/src/routing/decorator.tsx new file mode 100644 index 000000000000..2bb4211bd86c --- /dev/null +++ b/code/frameworks/nextjs-vite/src/routing/decorator.tsx @@ -0,0 +1,48 @@ +import * as React from 'react'; +import type { Addon_StoryContext } from 'storybook/internal/types'; +import { AppRouterProvider } from './app-router-provider'; +import { PageRouterProvider } from './page-router-provider'; +import type { RouteParams, NextAppDirectory } from './types'; +import { RedirectBoundary } from 'next/dist/client/components/redirect-boundary'; + +const defaultRouterParams: RouteParams = { + pathname: '/', + query: {}, +}; + +export const RouterDecorator = ( + Story: React.FC, + { parameters }: Addon_StoryContext +): React.ReactNode => { + const nextAppDirectory = + (parameters.nextjs?.appDirectory as NextAppDirectory | undefined) ?? false; + + if (nextAppDirectory) { + if (!AppRouterProvider) { + return null; + } + return ( + + {/* + The next.js RedirectBoundary causes flashing UI when used client side. + Possible use the implementation of the PR: https://github.com/vercel/next.js/pull/49439 + Or wait for next to solve this on their side. + */} + + + + + ); + } + + return ( + + + + ); +}; diff --git a/code/frameworks/nextjs-vite/src/routing/page-router-provider.tsx b/code/frameworks/nextjs-vite/src/routing/page-router-provider.tsx new file mode 100644 index 000000000000..91fa47cfc199 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/routing/page-router-provider.tsx @@ -0,0 +1,13 @@ +import { RouterContext } from 'next/dist/shared/lib/router-context.shared-runtime'; +import type { PropsWithChildren } from 'react'; +import React from 'react'; +// We need this import to be a singleton, and because it's used in multiple entrypoints +// both in ESM and CJS, importing it via the package name instead of having a local import +// is the only way to achieve it actually being a singleton +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore we must ignore types here as during compilation they are not generated yet +import { getRouter } from '@storybook/nextjs-vite/router.mock'; + +export const PageRouterProvider: React.FC = ({ children }) => ( + {children} +); diff --git a/code/frameworks/nextjs-vite/src/routing/types.tsx b/code/frameworks/nextjs-vite/src/routing/types.tsx new file mode 100644 index 000000000000..e80b0413260f --- /dev/null +++ b/code/frameworks/nextjs-vite/src/routing/types.tsx @@ -0,0 +1,7 @@ +export type RouteParams = { + pathname: string; + query: Record; + [key: string]: any; +}; + +export type NextAppDirectory = boolean; diff --git a/code/frameworks/nextjs-vite/src/styledJsx/decorator.tsx b/code/frameworks/nextjs-vite/src/styledJsx/decorator.tsx new file mode 100644 index 000000000000..5e18664c9659 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/styledJsx/decorator.tsx @@ -0,0 +1,8 @@ +import * as React from 'react'; +import { StyleRegistry } from 'styled-jsx'; + +export const StyledJsxDecorator = (Story: React.FC): React.ReactNode => ( + + + +); diff --git a/code/frameworks/nextjs-vite/src/types.ts b/code/frameworks/nextjs-vite/src/types.ts new file mode 100644 index 000000000000..d33f91d1ccc2 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/types.ts @@ -0,0 +1,44 @@ +import type { + CompatibleString, + StorybookConfig as StorybookConfigBase, +} from 'storybook/internal/types'; +import type { StorybookConfigVite, BuilderOptions } from '@storybook/builder-vite'; + +type FrameworkName = CompatibleString<'@storybook/nextjs-vite'>; +type BuilderName = CompatibleString<'@storybook/builder-vite'>; + +export type FrameworkOptions = { + /** + * The directory where the Next.js app is located. + * @default process.cwd() + */ + nextAppDir?: string; + builder?: BuilderOptions; +}; + +type StorybookConfigFramework = { + framework: + | FrameworkName + | { + name: FrameworkName; + options: FrameworkOptions; + }; + core?: StorybookConfigBase['core'] & { + builder?: + | BuilderName + | { + name: BuilderName; + options: BuilderOptions; + }; + }; +} + +/** + * The interface for Storybook configuration in `main.ts` files. + */ +export type StorybookConfig = Omit< + StorybookConfigBase, + keyof StorybookConfigVite | keyof StorybookConfigFramework +> & + StorybookConfigVite & + StorybookConfigFramework & {} diff --git a/code/frameworks/nextjs-vite/src/typings.d.ts b/code/frameworks/nextjs-vite/src/typings.d.ts new file mode 100644 index 000000000000..090a63a18725 --- /dev/null +++ b/code/frameworks/nextjs-vite/src/typings.d.ts @@ -0,0 +1,32 @@ +declare module 'sb-original/image-context' { + import type { StaticImport } from 'next/dist/shared/lib/get-img-props'; + import type { Context } from 'next/dist/compiled/react'; + import type { ImageProps } from 'next/image'; + import type { ImageProps as LegacyImageProps } from 'next/legacy/image'; + + export const ImageContext: Context< + Partial< + Omit & { + src: string | StaticImport; + } + > & + Omit + >; +} + +declare module 'sb-original/default-loader' { + import type { ImageLoaderProps } from 'next/image'; + + export const defaultLoader: (props: ImageLoaderProps) => string; +} + +declare module 'next/dist/compiled/react' { + import * as React from 'react'; + export default React; + export type Context = React.Context; + export function createContext( + // If you thought this should be optional, see + // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/24509#issuecomment-382213106 + defaultValue: T + ): Context; +} diff --git a/code/frameworks/nextjs-vite/template/cli/.eslintrc.json b/code/frameworks/nextjs-vite/template/cli/.eslintrc.json new file mode 100644 index 000000000000..2ce44cb74ab3 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/.eslintrc.json @@ -0,0 +1,7 @@ +{ + "rules": { + "import/no-extraneous-dependencies": "off", + "import/extensions": "off", + "react/no-unknown-property": "off" + } +} diff --git a/code/frameworks/nextjs-vite/template/cli/js/Button.jsx b/code/frameworks/nextjs-vite/template/cli/js/Button.jsx new file mode 100644 index 000000000000..7c613bbf2599 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/js/Button.jsx @@ -0,0 +1,54 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import './button.css'; + +/** + * Primary UI component for user interaction + */ +export const Button = ({ primary, backgroundColor, size, label, ...props }) => { + const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary'; + return ( + + ); +}; + +Button.propTypes = { + /** + * Is this the principal call to action on the page? + */ + primary: PropTypes.bool, + /** + * What background color to use + */ + backgroundColor: PropTypes.string, + /** + * How large should the button be? + */ + size: PropTypes.oneOf(['small', 'medium', 'large']), + /** + * Button contents + */ + label: PropTypes.string.isRequired, + /** + * Optional click handler + */ + onClick: PropTypes.func, +}; + +Button.defaultProps = { + backgroundColor: null, + primary: false, + size: 'medium', + onClick: undefined, +}; diff --git a/code/frameworks/nextjs-vite/template/cli/js/Button.stories.js b/code/frameworks/nextjs-vite/template/cli/js/Button.stories.js new file mode 100644 index 000000000000..97b9ec0ed85d --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/js/Button.stories.js @@ -0,0 +1,48 @@ +import { fn } from '@storybook/test'; +import { Button } from './Button'; + +// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export +export default { + title: 'Example/Button', + component: Button, + parameters: { + // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout + layout: 'centered', + }, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs + tags: ['autodocs'], + // More on argTypes: https://storybook.js.org/docs/api/argtypes + argTypes: { + backgroundColor: { control: 'color' }, + }, + // Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#action-args + args: { onClick: fn() }, +}; + +// More on writing stories with args: https://storybook.js.org/docs/writing-stories/args +export const Primary = { + args: { + primary: true, + label: 'Button', + }, +}; + +export const Secondary = { + args: { + label: 'Button', + }, +}; + +export const Large = { + args: { + size: 'large', + label: 'Button', + }, +}; + +export const Small = { + args: { + size: 'small', + label: 'Button', + }, +}; diff --git a/code/frameworks/nextjs-vite/template/cli/js/Configure.mdx b/code/frameworks/nextjs-vite/template/cli/js/Configure.mdx new file mode 100644 index 000000000000..cc3292373f73 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/js/Configure.mdx @@ -0,0 +1,446 @@ +import { Meta } from "@storybook/blocks"; +import Image from "next/image"; + +import Github from "./assets/github.svg"; +import Discord from "./assets/discord.svg"; +import Youtube from "./assets/youtube.svg"; +import Tutorials from "./assets/tutorials.svg"; +import Styling from "./assets/styling.png"; +import Context from "./assets/context.png"; +import Assets from "./assets/assets.png"; +import Docs from "./assets/docs.png"; +import Share from "./assets/share.png"; +import FigmaPlugin from "./assets/figma-plugin.png"; +import Testing from "./assets/testing.png"; +import Accessibility from "./assets/accessibility.png"; +import Theming from "./assets/theming.png"; +import AddonLibrary from "./assets/addon-library.png"; + +export const RightArrow = () => + + + + + +
+
+ # Configure your project + + Because Storybook works separately from your app, you'll need to configure it for your specific stack and setup. Below, explore guides for configuring Storybook with popular frameworks and tools. If you get stuck, learn how you can ask for help from our community. +
+
+
+ A wall of logos representing different styling technologies +

Add styling and CSS

+

Like with web applications, there are many ways to include CSS within Storybook. Learn more about setting up styling within Storybook.

+ Learn more +
+
+ An abstraction representing the composition of data for a component +

Provide context and mocking

+

Often when a story doesn't render, it's because your component is expecting a specific environment or context (like a theme provider) to be available.

+ Learn more +
+
+ A representation of typography and image assets +
+

Load assets and resources

+

To link static files (like fonts) to your projects and stories, use the + `staticDirs` configuration option to specify folders to load when + starting Storybook.

+ Learn more +
+
+
+
+
+
+ # Do more with Storybook + + Now that you know the basics, let's explore other parts of Storybook that will improve your experience. This list is just to get you started. You can customise Storybook in many ways to fit your needs. +
+ +
+
+
+ A screenshot showing the autodocs tag being set, pointing a docs page being generated +

Autodocs

+

Auto-generate living, + interactive reference documentation from your components and stories.

+ Learn more +
+
+ A browser window showing a Storybook being published to a chromatic.com URL +

Publish to Chromatic

+

Publish your Storybook to review and collaborate with your entire team.

+ Learn more +
+
+ Windows showing the Storybook plugin in Figma +

Figma Plugin

+

Embed your stories into Figma to cross-reference the design and live + implementation in one place.

+ Learn more +
+
+ Screenshot of tests passing and failing +

Testing

+

Use stories to test a component in all its variations, no matter how + complex.

+ Learn more +
+
+ Screenshot of accessibility tests passing and failing +

Accessibility

+

Automatically test your components for a11y issues as you develop.

+ Learn more +
+
+ Screenshot of Storybook in light and dark mode +

Theming

+

Theme Storybook's UI to personalize it to your project.

+ Learn more +
+
+
+
+
+
+

Addons

+

Integrate your tools with Storybook to connect workflows.

+ Discover all addons +
+
+ Integrate your tools with Storybook to connect workflows. +
+
+ +
+
+ Github logo + Join our contributors building the future of UI development. + + Star on GitHub +
+
+ Discord logo +
+ Get support and chat with frontend developers. + + Join Discord server +
+
+
+ Youtube logo +
+ Watch tutorials, feature previews and interviews. + + Watch on YouTube +
+
+
+ A book +

Follow guided walkthroughs on for key workflows.

+ + Discover tutorials +
+
+ + diff --git a/code/frameworks/nextjs-vite/template/cli/js/Header.jsx b/code/frameworks/nextjs-vite/template/cli/js/Header.jsx new file mode 100644 index 000000000000..39e5226cffc1 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/js/Header.jsx @@ -0,0 +1,59 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import { Button } from './Button'; +import './header.css'; + +export const Header = ({ user, onLogin, onLogout, onCreateAccount }) => ( +
+
+
+ + + + + + + +

Acme

+
+
+ {user ? ( + <> + + Welcome, {user.name}! + +
+
+
+); + +Header.propTypes = { + user: PropTypes.shape({ + name: PropTypes.string.isRequired, + }), + onLogin: PropTypes.func.isRequired, + onLogout: PropTypes.func.isRequired, + onCreateAccount: PropTypes.func.isRequired, +}; + +Header.defaultProps = { + user: null, +}; diff --git a/code/frameworks/nextjs-vite/template/cli/js/Header.stories.js b/code/frameworks/nextjs-vite/template/cli/js/Header.stories.js new file mode 100644 index 000000000000..982cd970fb5c --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/js/Header.stories.js @@ -0,0 +1,29 @@ +import { fn } from '@storybook/test'; +import { Header } from './Header'; + +export default { + title: 'Example/Header', + component: Header, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs + tags: ['autodocs'], + parameters: { + // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout + layout: 'fullscreen', + }, + args: { + onLogin: fn(), + onLogout: fn(), + onCreateAccount: fn(), + }, +}; +export const LoggedIn = { + args: { + user: { + name: 'Jane Doe', + }, + }, +}; + +export const LoggedOut = { + args: {}, +}; diff --git a/code/frameworks/nextjs-vite/template/cli/js/Page.jsx b/code/frameworks/nextjs-vite/template/cli/js/Page.jsx new file mode 100644 index 000000000000..6db1e0ac3f36 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/js/Page.jsx @@ -0,0 +1,68 @@ +import React from 'react'; + +import { Header } from './Header'; +import './page.css'; + +export const Page = () => { + const [user, setUser] = React.useState(); + + return ( +
+
setUser({ name: 'Jane Doe' })} + onLogout={() => setUser(undefined)} + onCreateAccount={() => setUser({ name: 'Jane Doe' })} + /> +
+

Pages in Storybook

+

+ We recommend building UIs with a{' '} + + component-driven + {' '} + process starting with atomic components and ending with pages. +

+

+ Render pages with mock data. This makes it easy to build and review page states without + needing to navigate to them in your app. Here are some handy patterns for managing page + data in Storybook: +

+
    +
  • + Use a higher-level connected component. Storybook helps you compose such data from the + "args" of child component stories +
  • +
  • + Assemble data in the page component from your services. You can mock these services out + using Storybook. +
  • +
+

+ Get a guided tutorial on component-driven development at{' '} + + Storybook tutorials + + . Read more in the{' '} + + docs + + . +

+
+ Tip Adjust the width of the canvas with the{' '} + + + + + + Viewports addon in the toolbar +
+
+
+ ); +}; diff --git a/code/frameworks/nextjs-vite/template/cli/js/Page.stories.js b/code/frameworks/nextjs-vite/template/cli/js/Page.stories.js new file mode 100644 index 000000000000..53362f140e61 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/js/Page.stories.js @@ -0,0 +1,27 @@ +import { within, userEvent, expect } from '@storybook/test'; +import { Page } from './Page'; + +export default { + title: 'Example/Page', + component: Page, + parameters: { + // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout + layout: 'fullscreen', + }, +}; + +export const LoggedOut = {}; + +// More on interaction testing: https://storybook.js.org/docs/writing-tests/interaction-testing +export const LoggedIn = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const loginButton = canvas.getByRole('button', { name: /Log in/i }); + await expect(loginButton).toBeInTheDocument(); + await userEvent.click(loginButton); + await expect(loginButton).not.toBeInTheDocument(); + + const logoutButton = canvas.getByRole('button', { name: /Log out/i }); + await expect(logoutButton).toBeInTheDocument(); + }, +}; diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.stories.ts b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.stories.ts new file mode 100644 index 000000000000..2054fc59231e --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.stories.ts @@ -0,0 +1,52 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { fn } from '@storybook/test'; +import { Button } from './Button'; + +// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export +const meta: Meta = { + title: 'Example/Button', + component: Button, + parameters: { + // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout + layout: 'centered', + }, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs + tags: ['autodocs'], + // More on argTypes: https://storybook.js.org/docs/api/argtypes + argTypes: { + backgroundColor: { control: 'color' }, + }, + // Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#action-args + args: { onClick: fn() }, +}; + +export default meta; +type Story = StoryObj; + +// More on writing stories with args: https://storybook.js.org/docs/writing-stories/args +export const Primary: Story = { + args: { + primary: true, + label: 'Button', + }, +}; + +export const Secondary: Story = { + args: { + label: 'Button', + }, +}; + +export const Large: Story = { + args: { + size: 'large', + label: 'Button', + }, +}; + +export const Small: Story = { + args: { + size: 'small', + label: 'Button', + }, +}; diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.tsx b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.tsx new file mode 100644 index 000000000000..30a6bcb96e49 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import './button.css'; + +export interface ButtonProps { + /** + * Is this the principal call to action on the page? + */ + primary?: boolean; + /** + * What background color to use + */ + backgroundColor?: string; + /** + * How large should the button be? + */ + size?: 'small' | 'medium' | 'large'; + /** + * Button contents + */ + label: string; + /** + * Optional click handler + */ + onClick?: () => void; +} + +/** + * Primary UI component for user interaction + */ +export const Button = ({ + primary = false, + size = 'medium', + backgroundColor, + label, + ...props +}: ButtonProps) => { + const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary'; + return ( + + ); +}; diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Configure.mdx b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Configure.mdx new file mode 100644 index 000000000000..cc3292373f73 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Configure.mdx @@ -0,0 +1,446 @@ +import { Meta } from "@storybook/blocks"; +import Image from "next/image"; + +import Github from "./assets/github.svg"; +import Discord from "./assets/discord.svg"; +import Youtube from "./assets/youtube.svg"; +import Tutorials from "./assets/tutorials.svg"; +import Styling from "./assets/styling.png"; +import Context from "./assets/context.png"; +import Assets from "./assets/assets.png"; +import Docs from "./assets/docs.png"; +import Share from "./assets/share.png"; +import FigmaPlugin from "./assets/figma-plugin.png"; +import Testing from "./assets/testing.png"; +import Accessibility from "./assets/accessibility.png"; +import Theming from "./assets/theming.png"; +import AddonLibrary from "./assets/addon-library.png"; + +export const RightArrow = () => + + + + + +
+
+ # Configure your project + + Because Storybook works separately from your app, you'll need to configure it for your specific stack and setup. Below, explore guides for configuring Storybook with popular frameworks and tools. If you get stuck, learn how you can ask for help from our community. +
+
+
+ A wall of logos representing different styling technologies +

Add styling and CSS

+

Like with web applications, there are many ways to include CSS within Storybook. Learn more about setting up styling within Storybook.

+ Learn more +
+
+ An abstraction representing the composition of data for a component +

Provide context and mocking

+

Often when a story doesn't render, it's because your component is expecting a specific environment or context (like a theme provider) to be available.

+ Learn more +
+
+ A representation of typography and image assets +
+

Load assets and resources

+

To link static files (like fonts) to your projects and stories, use the + `staticDirs` configuration option to specify folders to load when + starting Storybook.

+ Learn more +
+
+
+
+
+
+ # Do more with Storybook + + Now that you know the basics, let's explore other parts of Storybook that will improve your experience. This list is just to get you started. You can customise Storybook in many ways to fit your needs. +
+ +
+
+
+ A screenshot showing the autodocs tag being set, pointing a docs page being generated +

Autodocs

+

Auto-generate living, + interactive reference documentation from your components and stories.

+ Learn more +
+
+ A browser window showing a Storybook being published to a chromatic.com URL +

Publish to Chromatic

+

Publish your Storybook to review and collaborate with your entire team.

+ Learn more +
+
+ Windows showing the Storybook plugin in Figma +

Figma Plugin

+

Embed your stories into Figma to cross-reference the design and live + implementation in one place.

+ Learn more +
+
+ Screenshot of tests passing and failing +

Testing

+

Use stories to test a component in all its variations, no matter how + complex.

+ Learn more +
+
+ Screenshot of accessibility tests passing and failing +

Accessibility

+

Automatically test your components for a11y issues as you develop.

+ Learn more +
+
+ Screenshot of Storybook in light and dark mode +

Theming

+

Theme Storybook's UI to personalize it to your project.

+ Learn more +
+
+
+
+
+
+

Addons

+

Integrate your tools with Storybook to connect workflows.

+ Discover all addons +
+
+ Integrate your tools with Storybook to connect workflows. +
+
+ +
+
+ Github logo + Join our contributors building the future of UI development. + + Star on GitHub +
+
+ Discord logo +
+ Get support and chat with frontend developers. + + Join Discord server +
+
+
+ Youtube logo +
+ Watch tutorials, feature previews and interviews. + + Watch on YouTube +
+
+
+ A book +

Follow guided walkthroughs on for key workflows.

+ + Discover tutorials +
+
+ + diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.stories.ts b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.stories.ts new file mode 100644 index 000000000000..feddeae98faf --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.stories.ts @@ -0,0 +1,33 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { fn } from '@storybook/test'; + +import { Header } from './Header'; + +const meta: Meta = { + title: 'Example/Header', + component: Header, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs + tags: ['autodocs'], + parameters: { + // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout + layout: 'fullscreen', + }, + args: { + onLogin: fn(), + onLogout: fn(), + onCreateAccount: fn(), + }, +}; + +export default meta; +type Story = StoryObj; + +export const LoggedIn: Story = { + args: { + user: { + name: 'Jane Doe', + }, + }, +}; + +export const LoggedOut: Story = {}; diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.tsx b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.tsx new file mode 100644 index 000000000000..1bf981a4251f --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.tsx @@ -0,0 +1,56 @@ +import React from 'react'; + +import { Button } from './Button'; +import './header.css'; + +type User = { + name: string; +}; + +export interface HeaderProps { + user?: User; + onLogin?: () => void; + onLogout?: () => void; + onCreateAccount?: () => void; +} + +export const Header = ({ user, onLogin, onLogout, onCreateAccount }: HeaderProps) => ( +
+
+
+ + + + + + + +

Acme

+
+
+ {user ? ( + <> + + Welcome, {user.name}! + +
+
+
+); diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.stories.ts b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.stories.ts new file mode 100644 index 000000000000..4bcf593cafa7 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.stories.ts @@ -0,0 +1,32 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { within, userEvent, expect } from '@storybook/test'; + +import { Page } from './Page'; + +const meta: Meta = { + title: 'Example/Page', + component: Page, + parameters: { + // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout + layout: 'fullscreen', + }, +}; + +export default meta; +type Story = StoryObj; + +export const LoggedOut: Story = {}; + +// More on interaction testing: https://storybook.js.org/docs/writing-tests/interaction-testing +export const LoggedIn: Story = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const loginButton = canvas.getByRole('button', { name: /Log in/i }); + await expect(loginButton).toBeInTheDocument(); + await userEvent.click(loginButton); + await expect(loginButton).not.toBeInTheDocument(); + + const logoutButton = canvas.getByRole('button', { name: /Log out/i }); + await expect(logoutButton).toBeInTheDocument(); + }, +}; diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.tsx b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.tsx new file mode 100644 index 000000000000..e11748301390 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.tsx @@ -0,0 +1,73 @@ +import React from 'react'; + +import { Header } from './Header'; +import './page.css'; + +type User = { + name: string; +}; + +export const Page: React.FC = () => { + const [user, setUser] = React.useState(); + + return ( +
+
setUser({ name: 'Jane Doe' })} + onLogout={() => setUser(undefined)} + onCreateAccount={() => setUser({ name: 'Jane Doe' })} + /> + +
+

Pages in Storybook

+

+ We recommend building UIs with a{' '} + + component-driven + {' '} + process starting with atomic components and ending with pages. +

+

+ Render pages with mock data. This makes it easy to build and review page states without + needing to navigate to them in your app. Here are some handy patterns for managing page + data in Storybook: +

+
    +
  • + Use a higher-level connected component. Storybook helps you compose such data from the + "args" of child component stories +
  • +
  • + Assemble data in the page component from your services. You can mock these services out + using Storybook. +
  • +
+

+ Get a guided tutorial on component-driven development at{' '} + + Storybook tutorials + + . Read more in the{' '} + + docs + + . +

+
+ Tip Adjust the width of the canvas with the{' '} + + + + + + Viewports addon in the toolbar +
+
+
+ ); +}; diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.stories.ts b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.stories.ts new file mode 100644 index 000000000000..455a9d8601c9 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.stories.ts @@ -0,0 +1,52 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { fn } from '@storybook/test'; +import { Button } from './Button'; + +// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export +const meta = { + title: 'Example/Button', + component: Button, + parameters: { + // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout + layout: 'centered', + }, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs + tags: ['autodocs'], + // More on argTypes: https://storybook.js.org/docs/api/argtypes + argTypes: { + backgroundColor: { control: 'color' }, + }, + // Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#action-args + args: { onClick: fn() }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +// More on writing stories with args: https://storybook.js.org/docs/writing-stories/args +export const Primary: Story = { + args: { + primary: true, + label: 'Button', + }, +}; + +export const Secondary: Story = { + args: { + label: 'Button', + }, +}; + +export const Large: Story = { + args: { + size: 'large', + label: 'Button', + }, +}; + +export const Small: Story = { + args: { + size: 'small', + label: 'Button', + }, +}; diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.tsx b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.tsx new file mode 100644 index 000000000000..30a6bcb96e49 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import './button.css'; + +export interface ButtonProps { + /** + * Is this the principal call to action on the page? + */ + primary?: boolean; + /** + * What background color to use + */ + backgroundColor?: string; + /** + * How large should the button be? + */ + size?: 'small' | 'medium' | 'large'; + /** + * Button contents + */ + label: string; + /** + * Optional click handler + */ + onClick?: () => void; +} + +/** + * Primary UI component for user interaction + */ +export const Button = ({ + primary = false, + size = 'medium', + backgroundColor, + label, + ...props +}: ButtonProps) => { + const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary'; + return ( + + ); +}; diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Configure.mdx b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Configure.mdx new file mode 100644 index 000000000000..cc3292373f73 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Configure.mdx @@ -0,0 +1,446 @@ +import { Meta } from "@storybook/blocks"; +import Image from "next/image"; + +import Github from "./assets/github.svg"; +import Discord from "./assets/discord.svg"; +import Youtube from "./assets/youtube.svg"; +import Tutorials from "./assets/tutorials.svg"; +import Styling from "./assets/styling.png"; +import Context from "./assets/context.png"; +import Assets from "./assets/assets.png"; +import Docs from "./assets/docs.png"; +import Share from "./assets/share.png"; +import FigmaPlugin from "./assets/figma-plugin.png"; +import Testing from "./assets/testing.png"; +import Accessibility from "./assets/accessibility.png"; +import Theming from "./assets/theming.png"; +import AddonLibrary from "./assets/addon-library.png"; + +export const RightArrow = () => + + + + + +
+
+ # Configure your project + + Because Storybook works separately from your app, you'll need to configure it for your specific stack and setup. Below, explore guides for configuring Storybook with popular frameworks and tools. If you get stuck, learn how you can ask for help from our community. +
+
+
+ A wall of logos representing different styling technologies +

Add styling and CSS

+

Like with web applications, there are many ways to include CSS within Storybook. Learn more about setting up styling within Storybook.

+ Learn more +
+
+ An abstraction representing the composition of data for a component +

Provide context and mocking

+

Often when a story doesn't render, it's because your component is expecting a specific environment or context (like a theme provider) to be available.

+ Learn more +
+
+ A representation of typography and image assets +
+

Load assets and resources

+

To link static files (like fonts) to your projects and stories, use the + `staticDirs` configuration option to specify folders to load when + starting Storybook.

+ Learn more +
+
+
+
+
+
+ # Do more with Storybook + + Now that you know the basics, let's explore other parts of Storybook that will improve your experience. This list is just to get you started. You can customise Storybook in many ways to fit your needs. +
+ +
+
+
+ A screenshot showing the autodocs tag being set, pointing a docs page being generated +

Autodocs

+

Auto-generate living, + interactive reference documentation from your components and stories.

+ Learn more +
+
+ A browser window showing a Storybook being published to a chromatic.com URL +

Publish to Chromatic

+

Publish your Storybook to review and collaborate with your entire team.

+ Learn more +
+
+ Windows showing the Storybook plugin in Figma +

Figma Plugin

+

Embed your stories into Figma to cross-reference the design and live + implementation in one place.

+ Learn more +
+
+ Screenshot of tests passing and failing +

Testing

+

Use stories to test a component in all its variations, no matter how + complex.

+ Learn more +
+
+ Screenshot of accessibility tests passing and failing +

Accessibility

+

Automatically test your components for a11y issues as you develop.

+ Learn more +
+
+ Screenshot of Storybook in light and dark mode +

Theming

+

Theme Storybook's UI to personalize it to your project.

+ Learn more +
+
+
+
+
+
+

Addons

+

Integrate your tools with Storybook to connect workflows.

+ Discover all addons +
+
+ Integrate your tools with Storybook to connect workflows. +
+
+ +
+
+ Github logo + Join our contributors building the future of UI development. + + Star on GitHub +
+
+ Discord logo +
+ Get support and chat with frontend developers. + + Join Discord server +
+
+
+ Youtube logo +
+ Watch tutorials, feature previews and interviews. + + Watch on YouTube +
+
+
+ A book +

Follow guided walkthroughs on for key workflows.

+ + Discover tutorials +
+
+ + diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.stories.ts b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.stories.ts new file mode 100644 index 000000000000..39d15874f4c1 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.stories.ts @@ -0,0 +1,32 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { fn } from '@storybook/test'; +import { Header } from './Header'; + +const meta = { + title: 'Example/Header', + component: Header, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs + tags: ['autodocs'], + parameters: { + // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout + layout: 'fullscreen', + }, + args: { + onLogin: fn(), + onLogout: fn(), + onCreateAccount: fn(), + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const LoggedIn: Story = { + args: { + user: { + name: 'Jane Doe', + }, + }, +}; + +export const LoggedOut: Story = {}; diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.tsx b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.tsx new file mode 100644 index 000000000000..1bf981a4251f --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.tsx @@ -0,0 +1,56 @@ +import React from 'react'; + +import { Button } from './Button'; +import './header.css'; + +type User = { + name: string; +}; + +export interface HeaderProps { + user?: User; + onLogin?: () => void; + onLogout?: () => void; + onCreateAccount?: () => void; +} + +export const Header = ({ user, onLogin, onLogout, onCreateAccount }: HeaderProps) => ( +
+
+
+ + + + + + + +

Acme

+
+
+ {user ? ( + <> + + Welcome, {user.name}! + +
+
+
+); diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.stories.ts b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.stories.ts new file mode 100644 index 000000000000..f7a06817f85a --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.stories.ts @@ -0,0 +1,32 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { within, userEvent, expect } from '@storybook/test'; + +import { Page } from './Page'; + +const meta = { + title: 'Example/Page', + component: Page, + parameters: { + // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout + layout: 'fullscreen', + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const LoggedOut: Story = {}; + +// More on interaction testing: https://storybook.js.org/docs/writing-tests/interaction-testing +export const LoggedIn: Story = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const loginButton = canvas.getByRole('button', { name: /Log in/i }); + await expect(loginButton).toBeInTheDocument(); + await userEvent.click(loginButton); + await expect(loginButton).not.toBeInTheDocument(); + + const logoutButton = canvas.getByRole('button', { name: /Log out/i }); + await expect(logoutButton).toBeInTheDocument(); + }, +}; diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.tsx b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.tsx new file mode 100644 index 000000000000..e11748301390 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.tsx @@ -0,0 +1,73 @@ +import React from 'react'; + +import { Header } from './Header'; +import './page.css'; + +type User = { + name: string; +}; + +export const Page: React.FC = () => { + const [user, setUser] = React.useState(); + + return ( +
+
setUser({ name: 'Jane Doe' })} + onLogout={() => setUser(undefined)} + onCreateAccount={() => setUser({ name: 'Jane Doe' })} + /> + +
+

Pages in Storybook

+

+ We recommend building UIs with a{' '} + + component-driven + {' '} + process starting with atomic components and ending with pages. +

+

+ Render pages with mock data. This makes it easy to build and review page states without + needing to navigate to them in your app. Here are some handy patterns for managing page + data in Storybook: +

+
    +
  • + Use a higher-level connected component. Storybook helps you compose such data from the + "args" of child component stories +
  • +
  • + Assemble data in the page component from your services. You can mock these services out + using Storybook. +
  • +
+

+ Get a guided tutorial on component-driven development at{' '} + + Storybook tutorials + + . Read more in the{' '} + + docs + + . +

+
+ Tip Adjust the width of the canvas with the{' '} + + + + + + Viewports addon in the toolbar +
+
+
+ ); +}; diff --git a/code/frameworks/nextjs-vite/template/next-env.d.ts b/code/frameworks/nextjs-vite/template/next-env.d.ts new file mode 100644 index 000000000000..77e567dab0a2 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/next-env.d.ts @@ -0,0 +1,7 @@ +// Reference necessary since Next.js 13.2.0, because types in `next/navigation` are not exported per default, but +// type references are dynamically created during Next.js start up. +// See https://github.com/vercel/next.js/commit/cdf1d52d9aed42d01a46539886a4bda14cb77a99 +// for more insights. + +/// +/// diff --git a/code/frameworks/nextjs-vite/template/stories/DynamicImport.stories.tsx b/code/frameworks/nextjs-vite/template/stories/DynamicImport.stories.tsx new file mode 100644 index 000000000000..47d1fd3e0af4 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/DynamicImport.stories.tsx @@ -0,0 +1,25 @@ +import dynamic from 'next/dynamic'; +import React, { Suspense } from 'react'; +import type { Meta, StoryObj } from '@storybook/react'; + +const DynamicComponent = dynamic(() => import('./DynamicImport'), { + ssr: false, +}); + +function Component() { + return ( + + + + ); +} + +const meta = { + component: Component, +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/code/frameworks/nextjs-vite/template/stories/DynamicImport.tsx b/code/frameworks/nextjs-vite/template/stories/DynamicImport.tsx new file mode 100644 index 000000000000..4863633033f3 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/DynamicImport.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export default function DynamicComponent() { + return
I am a dynamically loaded component
; +} diff --git a/code/frameworks/nextjs-vite/template/stories/Font.stories.tsx b/code/frameworks/nextjs-vite/template/stories/Font.stories.tsx new file mode 100644 index 000000000000..b91247b1392b --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/Font.stories.tsx @@ -0,0 +1,28 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import Font from './Font'; + +const meta = { + component: Font, +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const WithClassName: Story = { + args: { + variant: 'className', + }, +}; + +export const WithStyle: Story = { + args: { + variant: 'style', + }, +}; + +export const WithVariable: Story = { + args: { + variant: 'variable', + }, +}; diff --git a/code/frameworks/nextjs-vite/template/stories/Font.tsx b/code/frameworks/nextjs-vite/template/stories/Font.tsx new file mode 100644 index 000000000000..cdfde7def069 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/Font.tsx @@ -0,0 +1,67 @@ +import { Rubik_Puddles } from 'next/font/google'; +import localFont from 'next/font/local'; + +import React from 'react'; + +const rubik = Rubik_Puddles({ + subsets: ['latin'], + variable: '--font-latin-rubik', + weight: '400', +}); + +export const localRubikStorm = localFont({ + src: '/fonts/RubikStorm-Regular.ttf', + variable: '--font-rubik-storm', +}); + +type FontProps = { + variant: 'className' | 'style' | 'variable'; +}; + +export default function Font({ variant }: FontProps) { + switch (variant) { + case 'className': + return ( +
+

Google Rubik Puddles

+

Google Local Rubik Storm

+
+ ); + case 'style': + return ( +
+

Google Rubik Puddles

+

Google Local Rubik Storm

+
+ ); + case 'variable': + return ( +
+
+

+ Google Rubik Puddles +

+
+
+

+ Google Local Rubik Storm +

+
+
+ ); + default: + return null; + } +} diff --git a/code/frameworks/nextjs-vite/template/stories/GetImageProps.stories.tsx b/code/frameworks/nextjs-vite/template/stories/GetImageProps.stories.tsx new file mode 100644 index 000000000000..e955ed2e6b2b --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/GetImageProps.stories.tsx @@ -0,0 +1,38 @@ +import { type ImageProps, getImageProps } from 'next/image'; +import React from 'react'; +import type { Meta, StoryObj } from '@storybook/nextjs-vite'; + +import Accessibility from '../../assets/accessibility.svg'; +import Testing from '../../assets/testing.png'; + +// referenced from https://nextjs.org/docs/pages/api-reference/components/image#theme-detection-picture +const Component = (props: Omit) => { + const { + props: { srcSet: dark }, + } = getImageProps({ src: Accessibility, ...props }); + const { + // capture rest on one to spread to img as default; it doesn't matter which barring art direction + props: { srcSet: light, ...rest }, + } = getImageProps({ src: Testing, ...props }); + + return ( + + + + + + ); +}; + +const meta = { + component: Component, + args: { + alt: 'getImageProps Example', + }, +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/code/frameworks/nextjs-vite/template/stories/Head.stories.tsx b/code/frameworks/nextjs-vite/template/stories/Head.stories.tsx new file mode 100644 index 000000000000..23ae3526055a --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/Head.stories.tsx @@ -0,0 +1,38 @@ +import Head from 'next/head'; +import React from 'react'; +import { waitFor, expect } from '@storybook/test'; +import type { Meta } from '@storybook/react'; +import type { StoryObj } from '@storybook/react'; + +function Component() { + return ( +
+ + Next.js Head Title + + + + + +

Hello world!

+
+ ); +} + +const meta = { + component: Component, +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + play: async () => { + await waitFor(() => expect(document.title).toEqual('Next.js Head Title')); + await expect(document.querySelectorAll('meta[property="og:title"]')).toHaveLength(1); + await expect(document.querySelector('meta[property="og:title"]').content).toEqual( + 'My new title' + ); + }, +}; diff --git a/code/frameworks/nextjs-vite/template/stories/Image.stories.tsx b/code/frameworks/nextjs-vite/template/stories/Image.stories.tsx new file mode 100644 index 000000000000..ad18f125b523 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/Image.stories.tsx @@ -0,0 +1,108 @@ +import React, { useRef, useState } from 'react'; +import Image from 'next/image'; + +import Accessibility from '../../assets/accessibility.svg'; +import AvifImage from '../../assets/avif-test-image.avif'; +import type { Meta, StoryObj } from '@storybook/react'; + +const meta = { + component: Image, + args: { + src: Accessibility, + alt: 'Accessibility', + }, +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = {}; + +export const Avif: Story = { + args: { + src: AvifImage, + alt: 'Avif Test Image', + }, +}; + +export const BlurredPlaceholder: Story = { + args: { + placeholder: 'blur', + }, +}; + +export const BlurredAbsolutePlaceholder: Story = { + args: { + src: 'https://storybook.js.org/images/placeholders/50x50.png', + width: 50, + height: 50, + blurDataURL: + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABP5JREFUWEeNlwtz2zgMhEGKsv/k9XFp82xe11763yOJVGcXC4m2czM3GYa0E2s/LACSTi+vv1czM/7CvPpqxY/ejPeS3khmFiPHOiVLHKaZi4ux4j18GpMlS6cALupEQBCKQM4BdnGzjIcJgs//QBxAPQAem55f3yL4PWJIdyCyhlMfPdYZot0cwj3Ayg/5JwHA13paen7pADphxr/n5VI8JQsHCCGQ3gVGLLsxQ3h/LYSn5383B05rwNOws3Z576LOTOduvwfrOd5FtVat4akx0uPTrw8BNuUz23vLsY7hmg7i4ipqM2saiAdruNuirh4ff0bNdb3Qy3vkvfAQwrkHoDxTTZtDCOKrC1bMEkdnsQh/PLyetOGHkXeRAgQAQ84efQcBdUhvFofoulpdm9WGGTA+AJEe7l+i37a2c371tCFKs5zzJjxQNBMi1im7OCudP2aNghJuzZaGdSMEZjpwf/t0UgNdg9DOyLGLnY0BUHlzwVtNDkgEQhBeKkb1tUDgQrq7frwAiIJi5BKAeIFgHk5mOpPzvgltOfcoK0Rrs7lWHwsgqtXarK3N0u23h5Ne8+3Cqxn5RYSMfHCAMgDAx4CBWlA9RAGw0GA/ol0gvFB4WjAvBAFUa83SzdUdAbYMqp28uHpxCRefxwAYhksAFBlthxCiXig+zT4TYqkC+Hq7OdAfJv8lPpZiZShWBBIuRP+jspDb2lwcDkzz7OLzbO/zvAHAoXTz5eYMQL0t2yHAiCFcfPY1QDwNFylA5bPoFpsV9fsEiMl8dhcc4PP1CYD3drYcBYdIKQrx0cbRxd2JHSDcQ297/vvoZ5smRC+AyV2AQ+nm03evge08Tyy4jGqXzWWEoIvTgXHU38pWiNgH4ixB/ukAcy/xycXfp4kwdAAAt399W+OCgMjxILQacxvRQ3gEwHgKUIr/rz53CuDFNyP/Eob4+/vEWkBq6AAA/HIi62n/Lk67Q7wDYQ0UpQB7hc54T4E6gACLTYxeAwB0YKZL6U4ATEGIBwCs7qPfQJCCHkCnoK50noJKcXcAojsEAJZZKXhgCoziGKxqWV8IMNp4kP2aC+oB0TMFvhGxDQHQfIPhDrilwKOm/YCZASAHfgBABQjr3f7CyAkA0cPB03AQULRhKd4xAIjzHymo2Gp7gN0FAMAVOoA2fPz03a9ssh/RM7Iz8QKIzYF9HyB0XEZ1xJ4DzNoDOAfAslhDDTyjDfv8A2AcBeCiu/jBHQEgxnYW6Kp6BlCVAkQM8VnieF2Xyr0ivXy+XvsCzKOihwNHCCryw8HrQXVB8dgFeRfAVQiXjMbIIgXINQYB2H7Kf5wF/2Ar7h0AgKKGuAP4zOjhzlkLbpcRXKRZhNUjxG6HIQDOjN47gCn4+fWW3xVS9urPESEEwwHMo9IhAGxS2ISiA1iEnQOoA4hXRAwItp7WzL9Ow18ESJaw/ar4NgeOR49cAHCAnaH8swBhv+6CBGjeBSxEOUAI7HyKHkD4O9xKb3/feQouAI4uLBciHRRHmgbfA7h/xFc9AngNBADthvii1sMOiPwDAFeyt6s7FSFS4PmnA1v0vQvqDqQKAAPE/weAUuEgsj8c+H11Twdw/AKANXA82EDr5cJBEEzB3oI4Mb0AdR3nNw8vQnegWuvqAABwJFJEBwDgNdA7IOs3gL0LhuJdwBY8c4BfNnDdVgooHiOqn/b7JoSW/QODjTHXhU7hMQAAAABJRU5ErkJggg==', + placeholder: 'blur', + }, + parameters: { + // ignoring in Chromatic to avoid inconsistent snapshots + // given that the switch from blur to image is quite fast + chromatic: { disableSnapshot: true }, + }, +}; + +export const FilledParent: Story = { + args: { + fill: true, + }, + decorators: [ + (Story) =>
{Story()}
, + ], +}; + +export const Sized: Story = { + args: { + fill: true, + sizes: '(max-width: 600px) 100vw, 600px', + }, + decorators: [ + (Story) =>
{Story()}
, + ], +}; + +export const Lazy: Story = { + args: { + src: 'https://storybook.js.org/images/placeholders/50x50.png', + width: 50, + height: 50, + }, + decorators: [ + (Story) => ( + <> +
+ {Story()} + + ), + ], +}; + +export const Eager: Story = { + ...Lazy, + parameters: { + nextjs: { + image: { + loading: 'eager', + }, + }, + }, +}; + +export const WithRef: Story = { + render() { + const [ref, setRef] = useState(null); + + return ( +
+ Accessibility +

Alt attribute of image: {ref?.alt}

+
+ ); + }, +}; diff --git a/code/frameworks/nextjs-vite/template/stories/ImageLegacy.stories.tsx b/code/frameworks/nextjs-vite/template/stories/ImageLegacy.stories.tsx new file mode 100644 index 000000000000..b8a781499bd1 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/ImageLegacy.stories.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import Image from 'next/legacy/image'; + +import Accessibility from '../../assets/accessibility.svg'; + +export default { + component: Image, + args: { + src: Accessibility, + alt: 'Accessibility', + }, +}; + +export const Default = {}; + +export const BlurredPlaceholder = { + args: { + placeholder: 'blur', + }, +}; + +export const BlurredAbsolutePlaceholder = { + args: { + src: 'https://storybook.js.org/images/placeholders/50x50.png', + width: 50, + height: 50, + blurDataURL: + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABP5JREFUWEeNlwtz2zgMhEGKsv/k9XFp82xe11763yOJVGcXC4m2czM3GYa0E2s/LACSTi+vv1czM/7CvPpqxY/ejPeS3khmFiPHOiVLHKaZi4ux4j18GpMlS6cALupEQBCKQM4BdnGzjIcJgs//QBxAPQAem55f3yL4PWJIdyCyhlMfPdYZot0cwj3Ayg/5JwHA13paen7pADphxr/n5VI8JQsHCCGQ3gVGLLsxQ3h/LYSn5383B05rwNOws3Z576LOTOduvwfrOd5FtVat4akx0uPTrw8BNuUz23vLsY7hmg7i4ipqM2saiAdruNuirh4ff0bNdb3Qy3vkvfAQwrkHoDxTTZtDCOKrC1bMEkdnsQh/PLyetOGHkXeRAgQAQ84efQcBdUhvFofoulpdm9WGGTA+AJEe7l+i37a2c371tCFKs5zzJjxQNBMi1im7OCudP2aNghJuzZaGdSMEZjpwf/t0UgNdg9DOyLGLnY0BUHlzwVtNDkgEQhBeKkb1tUDgQrq7frwAiIJi5BKAeIFgHk5mOpPzvgltOfcoK0Rrs7lWHwsgqtXarK3N0u23h5Ne8+3Cqxn5RYSMfHCAMgDAx4CBWlA9RAGw0GA/ol0gvFB4WjAvBAFUa83SzdUdAbYMqp28uHpxCRefxwAYhksAFBlthxCiXig+zT4TYqkC+Hq7OdAfJv8lPpZiZShWBBIuRP+jspDb2lwcDkzz7OLzbO/zvAHAoXTz5eYMQL0t2yHAiCFcfPY1QDwNFylA5bPoFpsV9fsEiMl8dhcc4PP1CYD3drYcBYdIKQrx0cbRxd2JHSDcQ297/vvoZ5smRC+AyV2AQ+nm03evge08Tyy4jGqXzWWEoIvTgXHU38pWiNgH4ixB/ukAcy/xycXfp4kwdAAAt399W+OCgMjxILQacxvRQ3gEwHgKUIr/rz53CuDFNyP/Eob4+/vEWkBq6AAA/HIi62n/Lk67Q7wDYQ0UpQB7hc54T4E6gACLTYxeAwB0YKZL6U4ATEGIBwCs7qPfQJCCHkCnoK50noJKcXcAojsEAJZZKXhgCoziGKxqWV8IMNp4kP2aC+oB0TMFvhGxDQHQfIPhDrilwKOm/YCZASAHfgBABQjr3f7CyAkA0cPB03AQULRhKd4xAIjzHymo2Gp7gN0FAMAVOoA2fPz03a9ssh/RM7Iz8QKIzYF9HyB0XEZ1xJ4DzNoDOAfAslhDDTyjDfv8A2AcBeCiu/jBHQEgxnYW6Kp6BlCVAkQM8VnieF2Xyr0ivXy+XvsCzKOihwNHCCryw8HrQXVB8dgFeRfAVQiXjMbIIgXINQYB2H7Kf5wF/2Ar7h0AgKKGuAP4zOjhzlkLbpcRXKRZhNUjxG6HIQDOjN47gCn4+fWW3xVS9urPESEEwwHMo9IhAGxS2ISiA1iEnQOoA4hXRAwItp7WzL9Ow18ESJaw/ar4NgeOR49cAHCAnaH8swBhv+6CBGjeBSxEOUAI7HyKHkD4O9xKb3/feQouAI4uLBciHRRHmgbfA7h/xFc9AngNBADthvii1sMOiPwDAFeyt6s7FSFS4PmnA1v0vQvqDqQKAAPE/weAUuEgsj8c+H11Twdw/AKANXA82EDr5cJBEEzB3oI4Mb0AdR3nNw8vQnegWuvqAABwJFJEBwDgNdA7IOs3gL0LhuJdwBY8c4BfNnDdVgooHiOqn/b7JoSW/QODjTHXhU7hMQAAAABJRU5ErkJggg==', + placeholder: 'blur', + }, + parameters: { + // ignoring in Chromatic to avoid inconsistent snapshots + // given that the switch from blur to image is quite fast + chromatic: { disableSnapshot: true }, + }, +}; diff --git a/code/frameworks/nextjs-vite/template/stories/Link.stories.module.css b/code/frameworks/nextjs-vite/template/stories/Link.stories.module.css new file mode 100644 index 000000000000..9edb616226d0 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/Link.stories.module.css @@ -0,0 +1,3 @@ +.link { + color: green; +} diff --git a/code/frameworks/nextjs-vite/template/stories/Link.stories.tsx b/code/frameworks/nextjs-vite/template/stories/Link.stories.tsx new file mode 100644 index 000000000000..1bc99d187e3d --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/Link.stories.tsx @@ -0,0 +1,85 @@ +import React from 'react'; +import Link from 'next/link'; +import type { Meta, StoryObj } from '@storybook/react'; + +import style from './Link.stories.module.css'; + +// `onClick`, `href`, and `ref` need to be passed to the DOM element +// for proper handling +const MyButton = React.forwardRef< + HTMLAnchorElement, + React.DetailedHTMLProps, HTMLAnchorElement> +>(function Button({ onClick, href, children }, ref) { + return ( + + {children} + + ); +}); + +const Component = () => ( +
    +
  • + Normal Link +
  • +
  • + + With URL Object + +
  • +
  • + + Replace the URL instead of push + +
  • +
  • + + Legacy behavior + +
  • +
  • + + child is a functional component + +
  • +
  • + + Disables scrolling to the top + +
  • +
  • + + No Prefetching + +
  • +
  • + + With style + +
  • +
  • + + With className + +
  • +
+); + +export default { + component: Component, +} as Meta; + +export const Default: StoryObj = {}; + +export const InAppDir: StoryObj = { + parameters: { + nextjs: { + appDirectory: true, + }, + }, +}; diff --git a/code/frameworks/nextjs-vite/template/stories/Navigation.stories.tsx b/code/frameworks/nextjs-vite/template/stories/Navigation.stories.tsx new file mode 100644 index 000000000000..ebedcf962a45 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/Navigation.stories.tsx @@ -0,0 +1,151 @@ +import { + useRouter, + usePathname, + useSearchParams, + useParams, + useSelectedLayoutSegment, + useSelectedLayoutSegments, +} from 'next/navigation'; +import React from 'react'; +import type { Meta, StoryObj } from '@storybook/react'; +import { expect, userEvent, within } from '@storybook/test'; +import { getRouter } from '@storybook/nextjs-vite/navigation.mock'; + +function Component() { + const router = useRouter(); + const pathname = usePathname(); + const searchParams = useSearchParams(); + const params = useParams(); + const segment = useSelectedLayoutSegment(); + const segments = useSelectedLayoutSegments(); + + const searchParamsList = searchParams ? Array.from(searchParams.entries()) : []; + + const routerActions = [ + { + cb: () => router.back(), + name: 'Go back', + }, + { + cb: () => router.forward(), + name: 'Go forward', + }, + { + cb: () => router.prefetch('/prefetched-html'), + name: 'Prefetch', + }, + { + // @ts-expect-error (old API) + cb: () => router.push('/push-html', { forceOptimisticNavigation: true }), + name: 'Push HTML', + }, + { + cb: () => router.refresh(), + name: 'Refresh', + }, + { + // @ts-expect-error (old API) + cb: () => router.replace('/replaced-html', { forceOptimisticNavigation: true }), + name: 'Replace', + }, + ]; + + return ( +
+
pathname: {pathname}
+
segment: {segment}
+
segments: {segments.join(',')}
+
+ searchparams:{' '} +
    + {searchParamsList.map(([key, value]) => ( +
  • + {key}: {value} +
  • + ))} +
+
+
+ params:{' '} +
    + {Object.entries(params).map(([key, value]) => ( +
  • + {key}: {value} +
  • + ))} +
+
+ {routerActions.map(({ cb, name }) => ( +
+ +
+ ))} +
+ ); +} + +type Story = StoryObj; + +export default { + component: Component, + parameters: { + nextjs: { + appDirectory: true, + navigation: { + pathname: '/hello', + query: { + foo: 'bar', + }, + prefetch: () => { + console.log('custom prefetch'); + }, + }, + }, + }, +} as Meta; + +export const Default: StoryObj = { + play: async ({ canvasElement, step }) => { + const canvas = within(canvasElement); + const routerMock = getRouter(); + + await step('Asserts whether forward hook is called', async () => { + const forwardBtn = await canvas.findByText('Go forward'); + await userEvent.click(forwardBtn); + await expect(routerMock.forward).toHaveBeenCalled(); + }); + + await step('Asserts whether custom prefetch hook is called', async () => { + const prefetchBtn = await canvas.findByText('Prefetch'); + await userEvent.click(prefetchBtn); + await expect(routerMock.prefetch).toHaveBeenCalledWith('/prefetched-html'); + }); + }, +}; + +export const WithSegmentDefined: Story = { + parameters: { + nextjs: { + appDirectory: true, + navigation: { + segments: ['dashboard', 'settings'], + }, + }, + }, +}; + +export const WithSegmentDefinedForParams: Story = { + parameters: { + nextjs: { + appDirectory: true, + navigation: { + segments: [ + ['slug', 'hello'], + ['framework', 'nextjs'], + ], + }, + }, + }, +}; diff --git a/code/frameworks/nextjs-vite/template/stories/NextHeader.stories.tsx b/code/frameworks/nextjs-vite/template/stories/NextHeader.stories.tsx new file mode 100644 index 000000000000..8fbecc3fffc5 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/NextHeader.stories.tsx @@ -0,0 +1,46 @@ +import NextHeader from './NextHeader'; +import type { Meta } from '@storybook/react'; +import type { StoryObj } from '@storybook/react'; +import { expect, userEvent, within } from '@storybook/test'; +import { cookies, headers } from '@storybook/nextjs-vite/headers.mock'; + +export default { + component: NextHeader, +} as Meta; + +type Story = StoryObj; + +export const Default: Story = { + loaders: async () => { + cookies().set('firstName', 'Jane'); + cookies().set({ + name: 'lastName', + value: 'Doe', + }); + headers().set('timezone', 'Central European Summer Time'); + }, + play: async ({ canvasElement, step }) => { + const canvas = within(canvasElement); + const headersMock = headers(); + const cookiesMock = cookies(); + await step('Cookie and header store apis are called upon rendering', async () => { + await expect(cookiesMock.getAll).toHaveBeenCalled(); + await expect(headersMock.entries).toHaveBeenCalled(); + }); + + await step('Upon clicking on submit, the user-id cookie is set', async () => { + const submitButton = await canvas.findByRole('button'); + await userEvent.click(submitButton); + + await expect(cookiesMock.set).toHaveBeenCalledWith('user-id', 'encrypted-id'); + }); + + await step('The user-id cookie is available in cookie and header stores', async () => { + await expect(headersMock.get('cookie')).toContain('user-id=encrypted-id'); + await expect(cookiesMock.get('user-id')).toEqual({ + name: 'user-id', + value: 'encrypted-id', + }); + }); + }, +}; diff --git a/code/frameworks/nextjs-vite/template/stories/NextHeader.tsx b/code/frameworks/nextjs-vite/template/stories/NextHeader.tsx new file mode 100644 index 000000000000..b93c9611c774 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/NextHeader.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { cookies, headers } from 'next/headers'; + +export default async function Component() { + async function handleClick() { + 'use server'; + cookies().set('user-id', 'encrypted-id'); + } + + return ( + <> +

Cookies:

+ {cookies() + .getAll() + .map(({ name, value }) => { + return ( +

+ Name: {name} + Value: {value} +

+ ); + })} + +

Headers:

+ {Array.from(headers().entries()).map(([name, value]: [string, string]) => { + return ( +

+ Name: {name} + Value: {value} +

+ ); + })} + +
+ +
+ + ); +} diff --git a/code/frameworks/nextjs-vite/template/stories/RSC.jsx b/code/frameworks/nextjs-vite/template/stories/RSC.jsx new file mode 100644 index 000000000000..9c894710b439 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/RSC.jsx @@ -0,0 +1,6 @@ +import React from 'react'; +import 'server-only'; + +export const RSC = async ({ label }) => <>RSC {label}; + +export const Nested = async ({ children }) => <>Nested {children}; diff --git a/code/frameworks/nextjs-vite/template/stories/RSC.stories.jsx b/code/frameworks/nextjs-vite/template/stories/RSC.stories.jsx new file mode 100644 index 000000000000..505c6a3acab4 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/RSC.stories.jsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { RSC, Nested } from './RSC'; + +export default { + component: RSC, + args: { label: 'label' }, +}; + +export const Default = {}; + +export const DisableRSC = { + tags: ['!test'], + parameters: { + chromatic: { disable: true }, + nextjs: { rsc: false }, + }, +}; + +export const Error = { + tags: ['!test'], + parameters: { + chromatic: { disable: true }, + }, + render: () => { + throw new Error('RSC Error'); + }, +}; + +export const NestedRSC = { + render: (args) => ( + + + + ), +}; diff --git a/code/frameworks/nextjs-vite/template/stories/Redirect.stories.tsx b/code/frameworks/nextjs-vite/template/stories/Redirect.stories.tsx new file mode 100644 index 000000000000..05f4d5a68eab --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/Redirect.stories.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import type { Meta, StoryObj } from '@storybook/react'; +import { userEvent, within } from '@storybook/test'; +import { redirect } from 'next/navigation'; + +let state = 'Bug! Not invalidated'; + +export default { + render() { + return ( +
+
{state}
+
{ + state = 'State is invalidated successfully.'; + redirect('/'); + }} + > + +
+
+ ); + }, + parameters: { + test: { + // This is needed until Next will update to the React 19 beta: https://github.com/vercel/next.js/pull/65058 + // In the React 19 beta ErrorBoundary errors (such as redirect) are only logged, and not thrown. + // We will also suspress console.error logs for re the console.error logs for redirect in the next framework. + // Using the onCaughtError react root option: + // react: { + // rootOptions: { + // onCaughtError(error: unknown) { + // if (isNextRouterError(error)) return; + // console.error(error); + // }, + // }, + // See: code/frameworks/nextjs/src/preview.tsx + dangerouslyIgnoreUnhandledErrors: true, + }, + nextjs: { + appDirectory: true, + navigation: { + pathname: '/', + }, + }, + }, + tags: ['!test'], +} as Meta; + +export const SingletonStateGetsInvalidatedAfterRedirecting: StoryObj = { + play: async ({ canvasElement, step }) => { + const canvas = within(canvasElement); + await userEvent.click(canvas.getByRole('button')); + }, +}; diff --git a/code/frameworks/nextjs-vite/template/stories/Router.stories.tsx b/code/frameworks/nextjs-vite/template/stories/Router.stories.tsx new file mode 100644 index 000000000000..cfdb761b2210 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/Router.stories.tsx @@ -0,0 +1,108 @@ +import React from 'react'; +import type { Meta, StoryObj } from '@storybook/react'; +import { expect, within, userEvent } from '@storybook/test'; +import { getRouter } from '@storybook/nextjs-vite/router.mock'; +import Router, { useRouter } from 'next/router'; + +function Component() { + const router = useRouter(); + const searchParams = router.query; + + const routerActions = [ + { + cb: () => router.back(), + name: 'Go back', + }, + { + cb: () => router.forward(), + name: 'Go forward', + }, + { + cb: () => router.prefetch('/prefetched-html'), + name: 'Prefetch', + }, + { + // @ts-expect-error (old API) + cb: () => router.push('/push-html', { forceOptimisticNavigation: true }), + name: 'Push HTML', + }, + { + // @ts-expect-error (old API) + cb: () => router.replace('/replaced-html', { forceOptimisticNavigation: true }), + name: 'Replace', + }, + ]; + + return ( +
+
Router pathname: {Router.pathname}
+
pathname: {router.pathname}
+
+ searchparams:{' '} +
    + {Object.entries(searchParams).map(([key, value]) => ( +
  • + {key}: {value} +
  • + ))} +
+
+ {routerActions.map(({ cb, name }) => ( +
+ +
+ ))} +
+ ); +} + +export default { + component: Component, + parameters: { + nextjs: { + router: { + pathname: '/hello', + query: { + foo: 'bar', + }, + prefetch: () => { + console.log('custom prefetch'); + }, + }, + }, + }, +} as Meta; + +export const Default: StoryObj = { + play: async ({ canvasElement, step }) => { + const canvas = within(canvasElement); + const routerMock = getRouter(); + + await step('Router property overrides should be available in useRouter fn', async () => { + await expect(Router.pathname).toBe('/hello'); + await expect(Router.query).toEqual({ foo: 'bar' }); + }); + + await step( + 'Router property overrides should be available in default export from next/router', + async () => { + await expect(Router.pathname).toBe('/hello'); + await expect(Router.query).toEqual({ foo: 'bar' }); + } + ); + + await step('Asserts whether forward hook is called', async () => { + const forwardBtn = await canvas.findByText('Go forward'); + await userEvent.click(forwardBtn); + await expect(routerMock.forward).toHaveBeenCalled(); + }); + + await step('Asserts whether custom prefetch hook is called', async () => { + const prefetchBtn = await canvas.findByText('Prefetch'); + await userEvent.click(prefetchBtn); + await expect(routerMock.prefetch).toHaveBeenCalledWith('/prefetched-html'); + }); + }, +}; diff --git a/code/frameworks/nextjs-vite/template/stories/ServerActions.stories.tsx b/code/frameworks/nextjs-vite/template/stories/ServerActions.stories.tsx new file mode 100644 index 000000000000..893a0e2009f4 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/ServerActions.stories.tsx @@ -0,0 +1,115 @@ +import React from 'react'; +import type { Meta, StoryObj } from '@storybook/react'; +import { expect, within, userEvent, waitFor } from '@storybook/test'; +import { cookies } from '@storybook/nextjs-vite/headers.mock'; +import { revalidatePath } from '@storybook/nextjs-vite/cache.mock'; +import { redirect, getRouter } from '@storybook/nextjs-vite/navigation.mock'; + +import { accessRoute, login, logout } from './ServerActions'; + +function Component() { + return ( +
+
+ +
+
+ +
+
+ +
+
+ ); +} + +export default { + component: Component, + tags: ['!test'], + parameters: { + nextjs: { + appDirectory: true, + navigation: { + pathname: '/', + }, + }, + test: { + // This is needed until Next will update to the React 19 beta: https://github.com/vercel/next.js/pull/65058 + // In the React 19 beta ErrorBoundary errors (such as redirect) are only logged, and not thrown. + // We will also suspress console.error logs for re the console.error logs for redirect in the next framework. + // Using the onCaughtError react root option: + // react: { + // rootOptions: { + // onCaughtError(error: unknown) { + // if (isNextRouterError(error)) return; + // console.error(error); + // }, + // }, + // See: code/frameworks/nextjs/src/preview.tsx + dangerouslyIgnoreUnhandledErrors: true, + }, + }, +} as Meta; + +export const ProtectedWhileLoggedOut: StoryObj = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await userEvent.click(canvas.getByText('Access protected route')); + + await expect(cookies().get).toHaveBeenCalledWith('user'); + await expect(redirect).toHaveBeenCalledWith('/'); + + await waitFor(() => expect(getRouter().push).toHaveBeenCalled()); + }, +}; + +export const ProtectedWhileLoggedIn: StoryObj = { + beforeEach() { + cookies().set('user', 'storybookjs'); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await userEvent.click(canvas.getByText('Access protected route')); + + await expect(cookies().get).toHaveBeenLastCalledWith('user'); + await expect(revalidatePath).toHaveBeenLastCalledWith('/'); + await expect(redirect).toHaveBeenLastCalledWith('/protected'); + + await waitFor(() => expect(getRouter().push).toHaveBeenCalled()); + }, +}; + +export const Logout: StoryObj = { + beforeEach() { + cookies().set('user', 'storybookjs'); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + + await userEvent.click(canvas.getByText('Logout')); + await expect(cookies().delete).toHaveBeenCalled(); + await expect(revalidatePath).toHaveBeenCalledWith('/'); + await expect(redirect).toHaveBeenCalledWith('/'); + + await waitFor(() => expect(getRouter().push).toHaveBeenCalled()); + }, +}; + +export const Login: StoryObj = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await userEvent.click(canvas.getByText('Login')); + + await expect(cookies().set).toHaveBeenCalledWith('user', 'storybookjs'); + await expect(revalidatePath).toHaveBeenCalledWith('/'); + await expect(redirect).toHaveBeenCalledWith('/'); + + await waitFor(() => expect(getRouter().push).toHaveBeenCalled()); + }, +}; diff --git a/code/frameworks/nextjs-vite/template/stories/ServerActions.tsx b/code/frameworks/nextjs-vite/template/stories/ServerActions.tsx new file mode 100644 index 000000000000..ffeba72ab848 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/ServerActions.tsx @@ -0,0 +1,28 @@ +'use server'; + +import { cookies } from 'next/headers'; +import { revalidatePath } from 'next/cache'; +import { redirect } from 'next/navigation'; + +export async function accessRoute() { + const user = cookies().get('user'); + + if (!user) { + redirect('/'); + } + + revalidatePath('/'); + redirect(`/protected`); +} + +export async function logout() { + cookies().delete('user'); + revalidatePath('/'); + redirect('/'); +} + +export async function login() { + cookies().set('user', 'storybookjs'); + revalidatePath('/'); + redirect('/'); +} diff --git a/code/frameworks/nextjs-vite/template/stories/StyledJsx.stories.jsx b/code/frameworks/nextjs-vite/template/stories/StyledJsx.stories.jsx new file mode 100644 index 000000000000..5a0c586e232c --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/StyledJsx.stories.jsx @@ -0,0 +1,20 @@ +import React from 'react'; + +const Component = () => ( +
+ +
+

This is styled using Styled JSX

+
+
+); + +export default { + component: Component, +}; + +export const Default = {}; diff --git a/code/frameworks/nextjs-vite/template/stories/fonts/OFL.txt b/code/frameworks/nextjs-vite/template/stories/fonts/OFL.txt new file mode 100644 index 000000000000..36d2f6f3febb --- /dev/null +++ b/code/frameworks/nextjs-vite/template/stories/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Rubik Filtered Project Authors (https://https://github.com/NaN-xyz/Rubik-Filtered) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/code/frameworks/nextjs-vite/template/stories/fonts/RubikStorm-Regular.ttf b/code/frameworks/nextjs-vite/template/stories/fonts/RubikStorm-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2304ee84a07b741577f5ed3d9cd288c4c60f4936 GIT binary patch literal 795576 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 c= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + peerDependenciesMeta: + "@babel/core": + optional: true + babel-plugin-macros: + optional: true + checksum: 10c0/ace50e7ea5ae5ae6a3b65a50994c51fca6ae7df9c7ecfd0104c36be0b4b3a9c5c1a2374d16e2a11e256d0b20be6d47256d768ecb4f91ab390f60752a075780f5 + languageName: node + linkType: hard + "stylis@npm:4.2.0": version: 4.2.0 resolution: "stylis@npm:4.2.0" @@ -27742,6 +28147,27 @@ __metadata: languageName: node linkType: hard +"vite-plugin-storybook-nextjs@npm:^0.0.13": + version: 0.0.13 + resolution: "vite-plugin-storybook-nextjs@npm:0.0.13" + dependencies: + "@next/env": "npm:^14.2.5" + image-size: "npm:^1.1.1" + module-alias: "npm:^2.2.3" + sharp: "npm:^0.33.4" + ts-dedent: "npm:^2.2.0" + peerDependencies: + "@storybook/test": ^8.3.0-alpha.3 + next: ^14.2.5 + storybook: ^8.3.0-alpha.3 + vite: ^5.0.0 + dependenciesMeta: + sharp: + optional: true + checksum: 10c0/331e43c91f6c395e3ed87b6a2f372f1372fa7dfc00d0cb8e0a9daad129d779f6f56b5d01fb4b1ab6c231917c458189c02535ecbe2d9d447bc8bf4c3939cc42aa + languageName: node + linkType: hard + "vite@npm:5.1.5, vite@npm:^5.0.0": version: 5.1.5 resolution: "vite@npm:5.1.5" From c2d9ae3146899eec6d909db3e5e805302fce8e53 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Sun, 4 Aug 2024 00:48:06 +0200 Subject: [PATCH 02/17] Formatting --- code/frameworks/nextjs-vite/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/frameworks/nextjs-vite/package.json b/code/frameworks/nextjs-vite/package.json index 3818f5c40848..da82787bf001 100644 --- a/code/frameworks/nextjs-vite/package.json +++ b/code/frameworks/nextjs-vite/package.json @@ -136,7 +136,7 @@ ], "externals": [ "sb-original/image-context" - ], + ], "platform": "node" }, "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16" From ed2586d3a96941615341831b1c303084db09e2c3 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Sun, 4 Aug 2024 20:13:10 +0200 Subject: [PATCH 03/17] Add 'nextjs-vite' as a supported framework in helpers.ts --- code/lib/cli/src/helpers.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/code/lib/cli/src/helpers.ts b/code/lib/cli/src/helpers.ts index f2256e11c2b8..8f87539e5aa3 100644 --- a/code/lib/cli/src/helpers.ts +++ b/code/lib/cli/src/helpers.ts @@ -143,6 +143,7 @@ export const frameworkToDefaultBuilder: Record 'html-vite': CoreBuilder.Vite, 'html-webpack5': CoreBuilder.Webpack5, nextjs: CoreBuilder.Webpack5, + 'nextjs-vite': CoreBuilder.Vite, 'preact-vite': CoreBuilder.Vite, 'preact-webpack5': CoreBuilder.Webpack5, qwik: CoreBuilder.Vite, From b10f944ec9019f858fb00786c6d670b043590597 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Sun, 4 Aug 2024 20:22:35 +0200 Subject: [PATCH 04/17] Fix check step --- code/frameworks/nextjs-vite/src/preset.ts | 1 + .../template/stories/GetImageProps.stories.tsx | 2 +- .../nextjs-vite/template/stories/Head.stories.tsx | 2 +- code/frameworks/nextjs-vite/template/typings.d.ts | 9 +++++++++ code/frameworks/nextjs-vite/tsconfig.json | 4 ++-- scripts/prepare/check.ts | 5 ++++- 6 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 code/frameworks/nextjs-vite/template/typings.d.ts diff --git a/code/frameworks/nextjs-vite/src/preset.ts b/code/frameworks/nextjs-vite/src/preset.ts index 090970b664fd..d4b9ce4ba972 100644 --- a/code/frameworks/nextjs-vite/src/preset.ts +++ b/code/frameworks/nextjs-vite/src/preset.ts @@ -2,6 +2,7 @@ import type { StorybookConfigVite } from '@storybook/builder-vite'; import { dirname, join } from 'path'; import type { PresetProperty } from 'storybook/internal/types'; +// @ts-expect-error - tsconfig settings have to be moduleResolution=Bundler and module=Preserve import vitePluginStorybookNextjs from 'vite-plugin-storybook-nextjs'; import type { StorybookConfig } from './types'; diff --git a/code/frameworks/nextjs-vite/template/stories/GetImageProps.stories.tsx b/code/frameworks/nextjs-vite/template/stories/GetImageProps.stories.tsx index e955ed2e6b2b..cb8eefedc9f4 100644 --- a/code/frameworks/nextjs-vite/template/stories/GetImageProps.stories.tsx +++ b/code/frameworks/nextjs-vite/template/stories/GetImageProps.stories.tsx @@ -1,6 +1,6 @@ import { type ImageProps, getImageProps } from 'next/image'; import React from 'react'; -import type { Meta, StoryObj } from '@storybook/nextjs-vite'; +import type { Meta, StoryObj } from '@storybook/react'; import Accessibility from '../../assets/accessibility.svg'; import Testing from '../../assets/testing.png'; diff --git a/code/frameworks/nextjs-vite/template/stories/Head.stories.tsx b/code/frameworks/nextjs-vite/template/stories/Head.stories.tsx index 23ae3526055a..031e0860e50a 100644 --- a/code/frameworks/nextjs-vite/template/stories/Head.stories.tsx +++ b/code/frameworks/nextjs-vite/template/stories/Head.stories.tsx @@ -31,7 +31,7 @@ export const Default: Story = { play: async () => { await waitFor(() => expect(document.title).toEqual('Next.js Head Title')); await expect(document.querySelectorAll('meta[property="og:title"]')).toHaveLength(1); - await expect(document.querySelector('meta[property="og:title"]').content).toEqual( + await expect((document.querySelector('meta[property="og:title"]') as any).content).toEqual( 'My new title' ); }, diff --git a/code/frameworks/nextjs-vite/template/typings.d.ts b/code/frameworks/nextjs-vite/template/typings.d.ts new file mode 100644 index 000000000000..78a4a1ddc610 --- /dev/null +++ b/code/frameworks/nextjs-vite/template/typings.d.ts @@ -0,0 +1,9 @@ +declare module '*.svg' { + const content: string; + export default content; +} + +declare module '*.avif' { + const content: string; + export default content; +} diff --git a/code/frameworks/nextjs-vite/tsconfig.json b/code/frameworks/nextjs-vite/tsconfig.json index a444d30c7af1..dfc156d3c128 100644 --- a/code/frameworks/nextjs-vite/tsconfig.json +++ b/code/frameworks/nextjs-vite/tsconfig.json @@ -1,8 +1,8 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "module": "Preserve", - "moduleResolution": "Bundler" + // "module": "Preserve", + // "moduleResolution": "Bundler" }, "include": ["src/**/*", "template/**/*"] } diff --git a/scripts/prepare/check.ts b/scripts/prepare/check.ts index 1e10c1024afe..ca971da46910 100755 --- a/scripts/prepare/check.ts +++ b/scripts/prepare/check.ts @@ -39,7 +39,10 @@ run({ cwd: process.cwd() }).catch((err: unknown) => { function getTSDiagnostics(program: ts.Program, cwd: string, host: ts.CompilerHost): any { return ts.formatDiagnosticsWithColorAndContext( - ts.getPreEmitDiagnostics(program).filter((d) => d.file.fileName.startsWith(cwd)), + ts.getPreEmitDiagnostics(program).filter((d) => { + // console.log(d); + return d.file.fileName.startsWith(cwd); + }), host ); } From 33999ee73752c536f62c578e87fd6eb5f8ce62b4 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Mon, 5 Aug 2024 06:56:58 +0200 Subject: [PATCH 05/17] Cleanup --- code/frameworks/nextjs-vite/src/types.ts | 4 ++-- code/frameworks/nextjs-vite/template/typings.d.ts | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/code/frameworks/nextjs-vite/src/types.ts b/code/frameworks/nextjs-vite/src/types.ts index d33f91d1ccc2..98af894da463 100644 --- a/code/frameworks/nextjs-vite/src/types.ts +++ b/code/frameworks/nextjs-vite/src/types.ts @@ -31,7 +31,7 @@ type StorybookConfigFramework = { options: BuilderOptions; }; }; -} +}; /** * The interface for Storybook configuration in `main.ts` files. @@ -41,4 +41,4 @@ export type StorybookConfig = Omit< keyof StorybookConfigVite | keyof StorybookConfigFramework > & StorybookConfigVite & - StorybookConfigFramework & {} + StorybookConfigFramework & {}; diff --git a/code/frameworks/nextjs-vite/template/typings.d.ts b/code/frameworks/nextjs-vite/template/typings.d.ts index 78a4a1ddc610..b8b55169fef8 100644 --- a/code/frameworks/nextjs-vite/template/typings.d.ts +++ b/code/frameworks/nextjs-vite/template/typings.d.ts @@ -7,3 +7,8 @@ declare module '*.avif' { const content: string; export default content; } + +declare module '*.png' { + const content: string; + export default content; +} From 93b2e3c3891347a598294e69bef0013e27bbce82 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Mon, 5 Aug 2024 09:41:54 +0200 Subject: [PATCH 06/17] Upgrade vite-plugin-storybook-nextjs --- code/frameworks/nextjs-vite/package.json | 4 ++-- code/yarn.lock | 29 +++++++++++++++++++----- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/code/frameworks/nextjs-vite/package.json b/code/frameworks/nextjs-vite/package.json index da82787bf001..2be69a522ffb 100644 --- a/code/frameworks/nextjs-vite/package.json +++ b/code/frameworks/nextjs-vite/package.json @@ -99,7 +99,7 @@ "@types/node": "^18.0.0", "next": "^14.2.5", "typescript": "^5.3.2", - "vite-plugin-storybook-nextjs": "^0.0.13" + "vite-plugin-storybook-nextjs": "^1.0.0" }, "peerDependencies": { "next": "^14.2.5", @@ -107,7 +107,7 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "storybook": "workspace:^", "vite": "^5.0.0", - "vite-plugin-storybook-nextjs": "^0.0.13" + "vite-plugin-storybook-nextjs": "^1.0.0" }, "peerDependenciesMeta": { "typescript": { diff --git a/code/yarn.lock b/code/yarn.lock index 78f36e3a9493..b7d68f237ad4 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -3776,6 +3776,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:0.3.9": version: 0.3.9 resolution: "@jridgewell/trace-mapping@npm:0.3.9" @@ -6294,14 +6301,14 @@ __metadata: sharp: "npm:^0.33.3" styled-jsx: "npm:5.1.6" typescript: "npm:^5.3.2" - vite-plugin-storybook-nextjs: "npm:^0.0.13" + vite-plugin-storybook-nextjs: "npm:^1.0.0" peerDependencies: next: ^14.2.5 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta storybook: "workspace:^" vite: ^5.0.0 - vite-plugin-storybook-nextjs: ^0.0.13 + vite-plugin-storybook-nextjs: ^1.0.0 dependenciesMeta: sharp: optional: true @@ -19111,6 +19118,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.11": + version: 0.30.11 + resolution: "magic-string@npm:0.30.11" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10c0/b9eb370773d0bd90ca11a848753409d8e5309b1ad56d2a1aa49d6649da710a6d2fe7237ad1a643c5a5d3800de2b9946ed9690acdfc00e6cc1aeafff3ab1752c4 + languageName: node + linkType: hard + "magicast@npm:^0.3.3": version: 0.3.3 resolution: "magicast@npm:0.3.3" @@ -28147,12 +28163,13 @@ __metadata: languageName: node linkType: hard -"vite-plugin-storybook-nextjs@npm:^0.0.13": - version: 0.0.13 - resolution: "vite-plugin-storybook-nextjs@npm:0.0.13" +"vite-plugin-storybook-nextjs@npm:^1.0.0": + version: 1.0.0 + resolution: "vite-plugin-storybook-nextjs@npm:1.0.0" dependencies: "@next/env": "npm:^14.2.5" image-size: "npm:^1.1.1" + magic-string: "npm:^0.30.11" module-alias: "npm:^2.2.3" sharp: "npm:^0.33.4" ts-dedent: "npm:^2.2.0" @@ -28164,7 +28181,7 @@ __metadata: dependenciesMeta: sharp: optional: true - checksum: 10c0/331e43c91f6c395e3ed87b6a2f372f1372fa7dfc00d0cb8e0a9daad129d779f6f56b5d01fb4b1ab6c231917c458189c02535ecbe2d9d447bc8bf4c3939cc42aa + checksum: 10c0/6ca17326e0387044d7bfa4373e6ccb64e8bb5bec1f19898ba9b8338c7817d8bea0fb01169adfb623f652fded5e6f59170129f7c8c4d4c3c54ca3764727e5a195 languageName: node linkType: hard From 7bd22d4deafdb17e0fdb24592f397590331dd4d7 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Mon, 5 Aug 2024 10:40:35 +0200 Subject: [PATCH 07/17] Edit Next.js documentation --- docs/_snippets/nextjs-vite-add-framework.md | 19 ++++++++++ docs/_snippets/nextjs-vite-install.md | 11 ++++++ docs/_snippets/nextjs-vite-remove-addons.md | 27 ++++++++++++++ docs/get-started/frameworks/nextjs.mdx | 39 ++++++++++++++++++++- 4 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 docs/_snippets/nextjs-vite-add-framework.md create mode 100644 docs/_snippets/nextjs-vite-install.md create mode 100644 docs/_snippets/nextjs-vite-remove-addons.md diff --git a/docs/_snippets/nextjs-vite-add-framework.md b/docs/_snippets/nextjs-vite-add-framework.md new file mode 100644 index 000000000000..8ee1e090f4b7 --- /dev/null +++ b/docs/_snippets/nextjs-vite-add-framework.md @@ -0,0 +1,19 @@ +```js filename=".storybook/main.js" renderer="react" language="js" +export default { + // ... + // framework: '@storybook/react-webpack5', 👈 Remove this + framework: '@storybook/nextjs-vite', // 👈 Add this +}; +``` + +```ts filename=".storybook/main.ts" renderer="react" language="ts" +import { StorybookConfig } from '@storybook/nextjs-vite'; + +const config: StorybookConfig = { + // ... + // framework: '@storybook/react-webpack5', 👈 Remove this + framework: '@storybook/nextjs-vite', // 👈 Add this +}; + +export default config; +``` diff --git a/docs/_snippets/nextjs-vite-install.md b/docs/_snippets/nextjs-vite-install.md new file mode 100644 index 000000000000..8b81c9d3b13e --- /dev/null +++ b/docs/_snippets/nextjs-vite-install.md @@ -0,0 +1,11 @@ +```shell renderer="react" language="js" packageManager="npm" +npm install --save-dev @storybook/nextjs-vite +``` + +```shell renderer="react" language="js" packageManager="pnpm" +pnpm add --save-dev @storybook/nextjs-vite +``` + +```shell renderer="react" language="js" packageManager="yarn" +yarn add --dev @storybook/nextjs-vite +``` diff --git a/docs/_snippets/nextjs-vite-remove-addons.md b/docs/_snippets/nextjs-vite-remove-addons.md new file mode 100644 index 000000000000..fecfa0240fa0 --- /dev/null +++ b/docs/_snippets/nextjs-vite-remove-addons.md @@ -0,0 +1,27 @@ +```js filename=".storybook/main.js" renderer="react" language="js" +export default { + // ... + addons: [ + // ... + // 👇 These can both be removed + // 'storybook-addon-next', + // 'storybook-addon-next-router', + ], +}; +``` + +```ts filename=".storybook/main.ts" renderer="react" language="ts" +import { StorybookConfig } from '@storybook/nextjs-vite'; + +const config: StorybookConfig = { + // ... + addons: [ + // ... + // 👇 These can both be removed + // 'storybook-addon-next', + // 'storybook-addon-next-router', + ], +}; + +export default config; +``` diff --git a/docs/get-started/frameworks/nextjs.mdx b/docs/get-started/frameworks/nextjs.mdx index e6322452d6a2..f220194ae44e 100644 --- a/docs/get-started/frameworks/nextjs.mdx +++ b/docs/get-started/frameworks/nextjs.mdx @@ -82,6 +82,32 @@ Storybook for Next.js is a [framework](../../contribute/framework.mdx) that make {/* prettier-ignore-end */} + #### @storybook/nextjs-vite - Experimental Vite support + + You can use our freshly baked experimental `@storybook/nextjs-vite` framework, which is based on Vite and removes the bloat of Webpack and Babel. + + {/* prettier-ignore-start */} + + + + {/* prettier-ignore-end */} + + Then, update your `.storybook/main.js|ts` to change the framework property: + + {/* prettier-ignore-start */} + + + + {/* prettier-ignore-end */} + + Finally, if you were using Storybook plugins to integrate with Next.js, those are no longer necessary when using this framework and can be removed: + + {/* prettier-ignore-start */} + + + + {/* prettier-ignore-end */} + ## Run the Setup Wizard If all goes well, you should see a setup wizard that will help you get started with Storybook introducing you to the main concepts and features, including how the UI is organized, how to write your first story, and how to test your components' response to various inputs utilizing [controls](../../essentials/controls.mdx). @@ -162,6 +188,12 @@ Storybook for Next.js is a [framework](../../contribute/framework.mdx) that make const localRubikStorm = localFont({ src: './fonts/RubikStorm-Regular.ttf' }); ``` + #### `staticDir` mapping + + + You can safely skip this section if you are using `@storybook/nextjs-vite` instead of `@storybook/nextjs`. The vite-based framework takes care of the mapping automatically. + + You have to tell Storybook where the `fonts` directory is located, via the [`staticDirs` configuration](../../api/main-config/main-config-static-dirs.mdx#with-configuration-objects). The `from` value is relative to the `.storybook` directory. The `to` value is relative to the execution context of Storybook. Very likely it is the root of your project. {/* prettier-ignore-start */} @@ -714,6 +746,11 @@ Storybook for Next.js is a [framework](../../contribute/framework.mdx) that make ## Custom Webpack config + + You can safely skip this section if you are using `@storybook/nextjs-vite` instead of `@storybook/nextjs`. + The Vite-based Next.js framework does not support Webpack settings. + + Next.js comes with a lot of things for free out of the box like Sass support, but sometimes you add [custom Webpack config modifications to Next.js](https://nextjs.org/docs/pages/api-reference/next-config-js/webpack). This framework takes care of most of the Webpack modifications you would want to add. If Next.js supports a feature out of the box, then that feature will work out of the box in Storybook. If Next.js doesn't support something out of the box, but makes it easy to configure, then this framework will do the same for that thing for Storybook. Any Webpack modifications desired for Storybook should be made in [`.storybook/main.js|ts`](../../builders/webpack.mdx#extending-storybooks-webpack-config). @@ -860,7 +897,7 @@ Storybook for Next.js is a [framework](../../contribute/framework.mdx) that make ### What if I'm using the Vite builder? - The `@storybook/nextjs` package abstracts the Webpack 5 builder and provides all the necessary Webpack configuration needed (and used internally) by Next.js. Webpack is currently the official builder in Next.js, and Next.js does not support Vite, therefore it is not possible to use Vite with `@storybook/nextjs`. You can use `@storybook/react-vite` framework instead, but at the cost of having a degraded experience, and we won't be able to provide you official support. + We have introduced experimental Vite builder support. Just install the experimental framework package `@storybook/nextjs-vite` and replace all instances of `@storybook/nextjs` with `@storybook/nextjs-vite`. ### Error: You are importing avif images, but you don't have sharp installed. You have to install sharp in order to use image optimization features in Next.js. From a25f79a6825be25ff3c78e8d28ebb86ca9fd4d8d Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Mon, 5 Aug 2024 11:44:43 +0200 Subject: [PATCH 08/17] Cleanup --- code/frameworks/nextjs-vite/tsconfig.json | 5 +---- scripts/prepare/check.ts | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/code/frameworks/nextjs-vite/tsconfig.json b/code/frameworks/nextjs-vite/tsconfig.json index dfc156d3c128..3b01f80f2c32 100644 --- a/code/frameworks/nextjs-vite/tsconfig.json +++ b/code/frameworks/nextjs-vite/tsconfig.json @@ -1,8 +1,5 @@ { "extends": "../../tsconfig.json", - "compilerOptions": { - // "module": "Preserve", - // "moduleResolution": "Bundler" - }, + "compilerOptions": {}, "include": ["src/**/*", "template/**/*"] } diff --git a/scripts/prepare/check.ts b/scripts/prepare/check.ts index ca971da46910..1e10c1024afe 100755 --- a/scripts/prepare/check.ts +++ b/scripts/prepare/check.ts @@ -39,10 +39,7 @@ run({ cwd: process.cwd() }).catch((err: unknown) => { function getTSDiagnostics(program: ts.Program, cwd: string, host: ts.CompilerHost): any { return ts.formatDiagnosticsWithColorAndContext( - ts.getPreEmitDiagnostics(program).filter((d) => { - // console.log(d); - return d.file.fileName.startsWith(cwd); - }), + ts.getPreEmitDiagnostics(program).filter((d) => d.file.fileName.startsWith(cwd)), host ); } From a983514588275b852affb0bb2e20a2be54c3dab5 Mon Sep 17 00:00:00 2001 From: Kyle Gach Date: Mon, 5 Aug 2024 14:46:58 -0600 Subject: [PATCH 09/17] Docs updates - Use a more stable heading - "Experimental" is temporary - Update package names --- docs/_snippets/nextjs-vite-add-framework.md | 6 +++--- docs/_snippets/nextjs-vite-install.md | 6 +++--- docs/_snippets/nextjs-vite-remove-addons.md | 2 +- docs/get-started/frameworks/nextjs.mdx | 8 +++++--- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/_snippets/nextjs-vite-add-framework.md b/docs/_snippets/nextjs-vite-add-framework.md index 8ee1e090f4b7..ac874f278550 100644 --- a/docs/_snippets/nextjs-vite-add-framework.md +++ b/docs/_snippets/nextjs-vite-add-framework.md @@ -2,17 +2,17 @@ export default { // ... // framework: '@storybook/react-webpack5', 👈 Remove this - framework: '@storybook/nextjs-vite', // 👈 Add this + framework: '@storybook/experimental-nextjs-vite', // 👈 Add this }; ``` ```ts filename=".storybook/main.ts" renderer="react" language="ts" -import { StorybookConfig } from '@storybook/nextjs-vite'; +import { StorybookConfig } from '@storybook/experimental-nextjs-vite'; const config: StorybookConfig = { // ... // framework: '@storybook/react-webpack5', 👈 Remove this - framework: '@storybook/nextjs-vite', // 👈 Add this + framework: '@storybook/experimental-nextjs-vite', // 👈 Add this }; export default config; diff --git a/docs/_snippets/nextjs-vite-install.md b/docs/_snippets/nextjs-vite-install.md index 8b81c9d3b13e..83568e30cfa4 100644 --- a/docs/_snippets/nextjs-vite-install.md +++ b/docs/_snippets/nextjs-vite-install.md @@ -1,11 +1,11 @@ ```shell renderer="react" language="js" packageManager="npm" -npm install --save-dev @storybook/nextjs-vite +npm install --save-dev @storybook/experimental-nextjs-vite ``` ```shell renderer="react" language="js" packageManager="pnpm" -pnpm add --save-dev @storybook/nextjs-vite +pnpm add --save-dev @storybook/experimental-nextjs-vite ``` ```shell renderer="react" language="js" packageManager="yarn" -yarn add --dev @storybook/nextjs-vite +yarn add --dev @storybook/experimental-nextjs-vite ``` diff --git a/docs/_snippets/nextjs-vite-remove-addons.md b/docs/_snippets/nextjs-vite-remove-addons.md index fecfa0240fa0..85a01de7df21 100644 --- a/docs/_snippets/nextjs-vite-remove-addons.md +++ b/docs/_snippets/nextjs-vite-remove-addons.md @@ -11,7 +11,7 @@ export default { ``` ```ts filename=".storybook/main.ts" renderer="react" language="ts" -import { StorybookConfig } from '@storybook/nextjs-vite'; +import { StorybookConfig } from '@storybook/experimental-nextjs-vite'; const config: StorybookConfig = { // ... diff --git a/docs/get-started/frameworks/nextjs.mdx b/docs/get-started/frameworks/nextjs.mdx index f220194ae44e..fce453548bad 100644 --- a/docs/get-started/frameworks/nextjs.mdx +++ b/docs/get-started/frameworks/nextjs.mdx @@ -82,9 +82,11 @@ Storybook for Next.js is a [framework](../../contribute/framework.mdx) that make {/* prettier-ignore-end */} - #### @storybook/nextjs-vite - Experimental Vite support + #### With Vite - You can use our freshly baked experimental `@storybook/nextjs-vite` framework, which is based on Vite and removes the bloat of Webpack and Babel. + (⚠️ **Experimental**) + + You can use our freshly baked, experimental `@storybook/experimental-nextjs-vite` framework, which is based on Vite and removes the need for Webpack and Babel. It supports all of the features documented here. {/* prettier-ignore-start */} @@ -191,7 +193,7 @@ Storybook for Next.js is a [framework](../../contribute/framework.mdx) that make #### `staticDir` mapping - You can safely skip this section if you are using `@storybook/nextjs-vite` instead of `@storybook/nextjs`. The vite-based framework takes care of the mapping automatically. + You can safely skip this section if you are using [`@storybook/experimental-nextjs-vite`](#with-vite) instead of `@storybook/nextjs`. The Vite-based framework takes care of the mapping automatically. You have to tell Storybook where the `fonts` directory is located, via the [`staticDirs` configuration](../../api/main-config/main-config-static-dirs.mdx#with-configuration-objects). The `from` value is relative to the `.storybook` directory. The `to` value is relative to the execution context of Storybook. Very likely it is the root of your project. From d57bba5be0092bb2c542856438150c1c2c5f59b6 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Tue, 6 Aug 2024 09:22:08 +0200 Subject: [PATCH 10/17] Rename nextjs-vite to experimental-nextjs-vite --- .../src/common/utils/framework-to-renderer.ts | 2 +- code/core/src/common/versions.ts | 2 +- code/core/src/types/modules/frameworks.ts | 2 +- .../.eslintrc.json | 0 .../README.md | 0 .../package.json | 4 +- .../preset.js | 0 .../project.json | 2 +- .../src/config/preview.ts | 0 .../src/export-mocks/cache/index.ts | 0 .../src/export-mocks/headers/cookies.ts | 0 .../src/export-mocks/headers/headers.ts | 0 .../src/export-mocks/headers/index.ts | 0 .../src/export-mocks/navigation/index.ts | 0 .../src/export-mocks/router/index.ts | 0 .../src/head-manager/decorator.tsx | 0 .../head-manager/head-manager-provider.tsx | 0 .../src/images/decorator.tsx | 0 .../src/index.ts | 0 .../src/portable-stories.ts | 0 .../src/preset.ts | 2 +- .../src/preview.tsx | 4 +- .../src/routing/app-router-provider.tsx | 2 +- .../src/routing/decorator.tsx | 0 .../src/routing/page-router-provider.tsx | 2 +- .../src/routing/types.tsx | 0 .../src/styledJsx/decorator.tsx | 0 .../src/types.ts | 2 +- .../src/typings.d.ts | 0 .../template/cli/.eslintrc.json | 0 .../template/cli/js/Button.jsx | 0 .../template/cli/js/Button.stories.js | 0 .../template/cli/js/Configure.mdx | 0 .../template/cli/js/Header.jsx | 0 .../template/cli/js/Header.stories.js | 0 .../template/cli/js/Page.jsx | 0 .../template/cli/js/Page.stories.js | 0 .../template/cli/ts-3-8/Button.stories.ts | 0 .../template/cli/ts-3-8/Button.tsx | 0 .../template/cli/ts-3-8/Configure.mdx | 0 .../template/cli/ts-3-8/Header.stories.ts | 0 .../template/cli/ts-3-8/Header.tsx | 0 .../template/cli/ts-3-8/Page.stories.ts | 0 .../template/cli/ts-3-8/Page.tsx | 0 .../template/cli/ts-4-9/Button.stories.ts | 0 .../template/cli/ts-4-9/Button.tsx | 0 .../template/cli/ts-4-9/Configure.mdx | 0 .../template/cli/ts-4-9/Header.stories.ts | 0 .../template/cli/ts-4-9/Header.tsx | 0 .../template/cli/ts-4-9/Page.stories.ts | 0 .../template/cli/ts-4-9/Page.tsx | 0 .../template/next-env.d.ts | 0 .../stories/DynamicImport.stories.tsx | 0 .../template/stories/DynamicImport.tsx | 0 .../template/stories/Font.stories.tsx | 0 .../template/stories/Font.tsx | 0 .../stories/GetImageProps.stories.tsx | 0 .../template/stories/Head.stories.tsx | 0 .../template/stories/Image.stories.tsx | 0 .../template/stories/ImageLegacy.stories.tsx | 0 .../template/stories/Link.stories.module.css | 0 .../template/stories/Link.stories.tsx | 0 .../template/stories/Navigation.stories.tsx | 2 +- .../template/stories/NextHeader.stories.tsx | 2 +- .../template/stories/NextHeader.tsx | 0 .../template/stories/RSC.jsx | 0 .../template/stories/RSC.stories.jsx | 0 .../template/stories/Redirect.stories.tsx | 0 .../template/stories/Router.stories.tsx | 2 +- .../stories/ServerActions.stories.tsx | 6 +- .../template/stories/ServerActions.tsx | 0 .../template/stories/StyledJsx.stories.jsx | 0 .../template/stories/fonts/OFL.txt | 0 .../stories/fonts/RubikStorm-Regular.ttf | Bin .../template/typings.d.ts | 0 .../tsconfig.json | 0 .../vitest.config.ts | 0 code/lib/cli/src/helpers.ts | 2 +- code/lib/cli/src/sandbox-templates.ts | 8 +-- code/yarn.lock | 58 +++++++++--------- docs/get-started/frameworks/nextjs.mdx | 4 +- 81 files changed, 54 insertions(+), 54 deletions(-) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/.eslintrc.json (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/README.md (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/package.json (97%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/preset.js (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/project.json (77%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/config/preview.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/export-mocks/cache/index.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/export-mocks/headers/cookies.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/export-mocks/headers/headers.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/export-mocks/headers/index.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/export-mocks/navigation/index.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/export-mocks/router/index.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/head-manager/decorator.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/head-manager/head-manager-provider.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/images/decorator.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/index.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/portable-stories.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/preset.ts (94%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/preview.tsx (93%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/routing/app-router-provider.tsx (97%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/routing/decorator.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/routing/page-router-provider.tsx (90%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/routing/types.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/styledJsx/decorator.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/types.ts (92%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/src/typings.d.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/.eslintrc.json (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/js/Button.jsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/js/Button.stories.js (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/js/Configure.mdx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/js/Header.jsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/js/Header.stories.js (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/js/Page.jsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/js/Page.stories.js (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-3-8/Button.stories.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-3-8/Button.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-3-8/Configure.mdx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-3-8/Header.stories.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-3-8/Header.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-3-8/Page.stories.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-3-8/Page.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-4-9/Button.stories.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-4-9/Button.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-4-9/Configure.mdx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-4-9/Header.stories.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-4-9/Header.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-4-9/Page.stories.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/cli/ts-4-9/Page.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/next-env.d.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/DynamicImport.stories.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/DynamicImport.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/Font.stories.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/Font.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/GetImageProps.stories.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/Head.stories.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/Image.stories.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/ImageLegacy.stories.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/Link.stories.module.css (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/Link.stories.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/Navigation.stories.tsx (97%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/NextHeader.stories.tsx (94%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/NextHeader.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/RSC.jsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/RSC.stories.jsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/Redirect.stories.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/Router.stories.tsx (97%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/ServerActions.stories.tsx (93%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/ServerActions.tsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/StyledJsx.stories.jsx (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/fonts/OFL.txt (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/stories/fonts/RubikStorm-Regular.ttf (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/template/typings.d.ts (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/tsconfig.json (100%) rename code/frameworks/{nextjs-vite => experimental-nextjs-vite}/vitest.config.ts (100%) diff --git a/code/core/src/common/utils/framework-to-renderer.ts b/code/core/src/common/utils/framework-to-renderer.ts index 6169237b12cd..63107ad8313b 100644 --- a/code/core/src/common/utils/framework-to-renderer.ts +++ b/code/core/src/common/utils/framework-to-renderer.ts @@ -11,7 +11,7 @@ export const frameworkToRenderer: Record< 'html-vite': 'html', 'html-webpack5': 'html', nextjs: 'react', - 'nextjs-vite': 'react', + 'experimental-nextjs-vite': 'react', 'preact-vite': 'preact', 'preact-webpack5': 'preact', qwik: 'qwik', diff --git a/code/core/src/common/versions.ts b/code/core/src/common/versions.ts index c312baaa8b57..e5138fca48ca 100644 --- a/code/core/src/common/versions.ts +++ b/code/core/src/common/versions.ts @@ -41,10 +41,10 @@ export default { '@storybook/types': '8.3.0-alpha.3', '@storybook/angular': '8.3.0-alpha.3', '@storybook/ember': '8.3.0-alpha.3', + '@storybook/experimental-nextjs-vite': '8.3.0-alpha.3', '@storybook/html-vite': '8.3.0-alpha.3', '@storybook/html-webpack5': '8.3.0-alpha.3', '@storybook/nextjs': '8.3.0-alpha.3', - '@storybook/nextjs-vite': '8.3.0-alpha.3', '@storybook/preact-vite': '8.3.0-alpha.3', '@storybook/preact-webpack5': '8.3.0-alpha.3', '@storybook/react-vite': '8.3.0-alpha.3', diff --git a/code/core/src/types/modules/frameworks.ts b/code/core/src/types/modules/frameworks.ts index a8487124c6d6..246cea20ff9a 100644 --- a/code/core/src/types/modules/frameworks.ts +++ b/code/core/src/types/modules/frameworks.ts @@ -2,10 +2,10 @@ export type SupportedFrameworks = | 'angular' | 'ember' + | 'experimental-nextjs-vite' | 'html-vite' | 'html-webpack5' | 'nextjs' - | 'nextjs-vite' | 'preact-vite' | 'preact-webpack5' | 'react-vite' diff --git a/code/frameworks/nextjs-vite/.eslintrc.json b/code/frameworks/experimental-nextjs-vite/.eslintrc.json similarity index 100% rename from code/frameworks/nextjs-vite/.eslintrc.json rename to code/frameworks/experimental-nextjs-vite/.eslintrc.json diff --git a/code/frameworks/nextjs-vite/README.md b/code/frameworks/experimental-nextjs-vite/README.md similarity index 100% rename from code/frameworks/nextjs-vite/README.md rename to code/frameworks/experimental-nextjs-vite/README.md diff --git a/code/frameworks/nextjs-vite/package.json b/code/frameworks/experimental-nextjs-vite/package.json similarity index 97% rename from code/frameworks/nextjs-vite/package.json rename to code/frameworks/experimental-nextjs-vite/package.json index 2be69a522ffb..07485c47af1a 100644 --- a/code/frameworks/nextjs-vite/package.json +++ b/code/frameworks/experimental-nextjs-vite/package.json @@ -1,5 +1,5 @@ { - "name": "@storybook/nextjs-vite", + "name": "@storybook/experimental-nextjs-vite", "version": "8.3.0-alpha.3", "description": "Storybook for Next.js and Vite", "keywords": [ @@ -7,7 +7,7 @@ "nextjs", "vite" ], - "homepage": "https://github.com/storybookjs/storybook/tree/next/code/frameworks/nextjs-vite", + "homepage": "https://github.com/storybookjs/storybook/tree/next/code/frameworks/experimental-nextjs-vite", "bugs": { "url": "https://github.com/storybookjs/storybook/issues" }, diff --git a/code/frameworks/nextjs-vite/preset.js b/code/frameworks/experimental-nextjs-vite/preset.js similarity index 100% rename from code/frameworks/nextjs-vite/preset.js rename to code/frameworks/experimental-nextjs-vite/preset.js diff --git a/code/frameworks/nextjs-vite/project.json b/code/frameworks/experimental-nextjs-vite/project.json similarity index 77% rename from code/frameworks/nextjs-vite/project.json rename to code/frameworks/experimental-nextjs-vite/project.json index 049a16e3417f..f10ef7bdacfb 100644 --- a/code/frameworks/nextjs-vite/project.json +++ b/code/frameworks/experimental-nextjs-vite/project.json @@ -1,5 +1,5 @@ { - "name": "nextjs-vite", + "name": "experimental-nextjs-vite", "$schema": "../../node_modules/nx/schemas/project-schema.json", "projectType": "library", "targets": { diff --git a/code/frameworks/nextjs-vite/src/config/preview.ts b/code/frameworks/experimental-nextjs-vite/src/config/preview.ts similarity index 100% rename from code/frameworks/nextjs-vite/src/config/preview.ts rename to code/frameworks/experimental-nextjs-vite/src/config/preview.ts diff --git a/code/frameworks/nextjs-vite/src/export-mocks/cache/index.ts b/code/frameworks/experimental-nextjs-vite/src/export-mocks/cache/index.ts similarity index 100% rename from code/frameworks/nextjs-vite/src/export-mocks/cache/index.ts rename to code/frameworks/experimental-nextjs-vite/src/export-mocks/cache/index.ts diff --git a/code/frameworks/nextjs-vite/src/export-mocks/headers/cookies.ts b/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/cookies.ts similarity index 100% rename from code/frameworks/nextjs-vite/src/export-mocks/headers/cookies.ts rename to code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/cookies.ts diff --git a/code/frameworks/nextjs-vite/src/export-mocks/headers/headers.ts b/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/headers.ts similarity index 100% rename from code/frameworks/nextjs-vite/src/export-mocks/headers/headers.ts rename to code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/headers.ts diff --git a/code/frameworks/nextjs-vite/src/export-mocks/headers/index.ts b/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/index.ts similarity index 100% rename from code/frameworks/nextjs-vite/src/export-mocks/headers/index.ts rename to code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/index.ts diff --git a/code/frameworks/nextjs-vite/src/export-mocks/navigation/index.ts b/code/frameworks/experimental-nextjs-vite/src/export-mocks/navigation/index.ts similarity index 100% rename from code/frameworks/nextjs-vite/src/export-mocks/navigation/index.ts rename to code/frameworks/experimental-nextjs-vite/src/export-mocks/navigation/index.ts diff --git a/code/frameworks/nextjs-vite/src/export-mocks/router/index.ts b/code/frameworks/experimental-nextjs-vite/src/export-mocks/router/index.ts similarity index 100% rename from code/frameworks/nextjs-vite/src/export-mocks/router/index.ts rename to code/frameworks/experimental-nextjs-vite/src/export-mocks/router/index.ts diff --git a/code/frameworks/nextjs-vite/src/head-manager/decorator.tsx b/code/frameworks/experimental-nextjs-vite/src/head-manager/decorator.tsx similarity index 100% rename from code/frameworks/nextjs-vite/src/head-manager/decorator.tsx rename to code/frameworks/experimental-nextjs-vite/src/head-manager/decorator.tsx diff --git a/code/frameworks/nextjs-vite/src/head-manager/head-manager-provider.tsx b/code/frameworks/experimental-nextjs-vite/src/head-manager/head-manager-provider.tsx similarity index 100% rename from code/frameworks/nextjs-vite/src/head-manager/head-manager-provider.tsx rename to code/frameworks/experimental-nextjs-vite/src/head-manager/head-manager-provider.tsx diff --git a/code/frameworks/nextjs-vite/src/images/decorator.tsx b/code/frameworks/experimental-nextjs-vite/src/images/decorator.tsx similarity index 100% rename from code/frameworks/nextjs-vite/src/images/decorator.tsx rename to code/frameworks/experimental-nextjs-vite/src/images/decorator.tsx diff --git a/code/frameworks/nextjs-vite/src/index.ts b/code/frameworks/experimental-nextjs-vite/src/index.ts similarity index 100% rename from code/frameworks/nextjs-vite/src/index.ts rename to code/frameworks/experimental-nextjs-vite/src/index.ts diff --git a/code/frameworks/nextjs-vite/src/portable-stories.ts b/code/frameworks/experimental-nextjs-vite/src/portable-stories.ts similarity index 100% rename from code/frameworks/nextjs-vite/src/portable-stories.ts rename to code/frameworks/experimental-nextjs-vite/src/portable-stories.ts diff --git a/code/frameworks/nextjs-vite/src/preset.ts b/code/frameworks/experimental-nextjs-vite/src/preset.ts similarity index 94% rename from code/frameworks/nextjs-vite/src/preset.ts rename to code/frameworks/experimental-nextjs-vite/src/preset.ts index d4b9ce4ba972..95fa81009575 100644 --- a/code/frameworks/nextjs-vite/src/preset.ts +++ b/code/frameworks/experimental-nextjs-vite/src/preset.ts @@ -24,7 +24,7 @@ export const core: PresetProperty<'core'> = async (config, options) => { }; export const previewAnnotations: PresetProperty<'previewAnnotations'> = (entry = []) => { - const nextDir = dirname(require.resolve('@storybook/nextjs-vite/package.json')); + const nextDir = dirname(require.resolve('@storybook/experimental-nextjs-vite/package.json')); const result = [...entry, join(nextDir, 'dist/preview.mjs')]; return result; }; diff --git a/code/frameworks/nextjs-vite/src/preview.tsx b/code/frameworks/experimental-nextjs-vite/src/preview.tsx similarity index 93% rename from code/frameworks/nextjs-vite/src/preview.tsx rename to code/frameworks/experimental-nextjs-vite/src/preview.tsx index 9b1207330728..9248514b0ccd 100644 --- a/code/frameworks/nextjs-vite/src/preview.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/preview.tsx @@ -7,10 +7,10 @@ import { HeadManagerDecorator } from './head-manager/decorator'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore we must ignore types here as during compilation they are not generated yet -import { createRouter } from '@storybook/nextjs-vite/router.mock'; +import { createRouter } from '@storybook/experimental-nextjs-vite/router.mock'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore we must ignore types here as during compilation they are not generated yet -import { createNavigation } from '@storybook/nextjs-vite/navigation.mock'; +import { createNavigation } from '@storybook/experimental-nextjs-vite/navigation.mock'; import { isNextRouterError } from 'next/dist/client/components/is-next-router-error'; function addNextHeadCount() { diff --git a/code/frameworks/nextjs-vite/src/routing/app-router-provider.tsx b/code/frameworks/experimental-nextjs-vite/src/routing/app-router-provider.tsx similarity index 97% rename from code/frameworks/nextjs-vite/src/routing/app-router-provider.tsx rename to code/frameworks/experimental-nextjs-vite/src/routing/app-router-provider.tsx index 8528bdbbf82c..ea1c44a860fa 100644 --- a/code/frameworks/nextjs-vite/src/routing/app-router-provider.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/routing/app-router-provider.tsx @@ -18,7 +18,7 @@ import type { RouteParams } from './types'; // is the only way to achieve it actually being a singleton // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore we must ignore types here as during compilation they are not generated yet -import { getRouter } from '@storybook/nextjs-vite/navigation.mock'; +import { getRouter } from '@storybook/experimental-nextjs-vite/navigation.mock'; type AppRouterProviderProps = { routeParams: RouteParams; diff --git a/code/frameworks/nextjs-vite/src/routing/decorator.tsx b/code/frameworks/experimental-nextjs-vite/src/routing/decorator.tsx similarity index 100% rename from code/frameworks/nextjs-vite/src/routing/decorator.tsx rename to code/frameworks/experimental-nextjs-vite/src/routing/decorator.tsx diff --git a/code/frameworks/nextjs-vite/src/routing/page-router-provider.tsx b/code/frameworks/experimental-nextjs-vite/src/routing/page-router-provider.tsx similarity index 90% rename from code/frameworks/nextjs-vite/src/routing/page-router-provider.tsx rename to code/frameworks/experimental-nextjs-vite/src/routing/page-router-provider.tsx index 91fa47cfc199..e8f8b56b8c99 100644 --- a/code/frameworks/nextjs-vite/src/routing/page-router-provider.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/routing/page-router-provider.tsx @@ -6,7 +6,7 @@ import React from 'react'; // is the only way to achieve it actually being a singleton // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore we must ignore types here as during compilation they are not generated yet -import { getRouter } from '@storybook/nextjs-vite/router.mock'; +import { getRouter } from '@storybook/experimental-nextjs-vite/router.mock'; export const PageRouterProvider: React.FC = ({ children }) => ( {children} diff --git a/code/frameworks/nextjs-vite/src/routing/types.tsx b/code/frameworks/experimental-nextjs-vite/src/routing/types.tsx similarity index 100% rename from code/frameworks/nextjs-vite/src/routing/types.tsx rename to code/frameworks/experimental-nextjs-vite/src/routing/types.tsx diff --git a/code/frameworks/nextjs-vite/src/styledJsx/decorator.tsx b/code/frameworks/experimental-nextjs-vite/src/styledJsx/decorator.tsx similarity index 100% rename from code/frameworks/nextjs-vite/src/styledJsx/decorator.tsx rename to code/frameworks/experimental-nextjs-vite/src/styledJsx/decorator.tsx diff --git a/code/frameworks/nextjs-vite/src/types.ts b/code/frameworks/experimental-nextjs-vite/src/types.ts similarity index 92% rename from code/frameworks/nextjs-vite/src/types.ts rename to code/frameworks/experimental-nextjs-vite/src/types.ts index 98af894da463..00eb5a895129 100644 --- a/code/frameworks/nextjs-vite/src/types.ts +++ b/code/frameworks/experimental-nextjs-vite/src/types.ts @@ -4,7 +4,7 @@ import type { } from 'storybook/internal/types'; import type { StorybookConfigVite, BuilderOptions } from '@storybook/builder-vite'; -type FrameworkName = CompatibleString<'@storybook/nextjs-vite'>; +type FrameworkName = CompatibleString<'@storybook/experimental-nextjs-vite'>; type BuilderName = CompatibleString<'@storybook/builder-vite'>; export type FrameworkOptions = { diff --git a/code/frameworks/nextjs-vite/src/typings.d.ts b/code/frameworks/experimental-nextjs-vite/src/typings.d.ts similarity index 100% rename from code/frameworks/nextjs-vite/src/typings.d.ts rename to code/frameworks/experimental-nextjs-vite/src/typings.d.ts diff --git a/code/frameworks/nextjs-vite/template/cli/.eslintrc.json b/code/frameworks/experimental-nextjs-vite/template/cli/.eslintrc.json similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/.eslintrc.json rename to code/frameworks/experimental-nextjs-vite/template/cli/.eslintrc.json diff --git a/code/frameworks/nextjs-vite/template/cli/js/Button.jsx b/code/frameworks/experimental-nextjs-vite/template/cli/js/Button.jsx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/js/Button.jsx rename to code/frameworks/experimental-nextjs-vite/template/cli/js/Button.jsx diff --git a/code/frameworks/nextjs-vite/template/cli/js/Button.stories.js b/code/frameworks/experimental-nextjs-vite/template/cli/js/Button.stories.js similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/js/Button.stories.js rename to code/frameworks/experimental-nextjs-vite/template/cli/js/Button.stories.js diff --git a/code/frameworks/nextjs-vite/template/cli/js/Configure.mdx b/code/frameworks/experimental-nextjs-vite/template/cli/js/Configure.mdx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/js/Configure.mdx rename to code/frameworks/experimental-nextjs-vite/template/cli/js/Configure.mdx diff --git a/code/frameworks/nextjs-vite/template/cli/js/Header.jsx b/code/frameworks/experimental-nextjs-vite/template/cli/js/Header.jsx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/js/Header.jsx rename to code/frameworks/experimental-nextjs-vite/template/cli/js/Header.jsx diff --git a/code/frameworks/nextjs-vite/template/cli/js/Header.stories.js b/code/frameworks/experimental-nextjs-vite/template/cli/js/Header.stories.js similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/js/Header.stories.js rename to code/frameworks/experimental-nextjs-vite/template/cli/js/Header.stories.js diff --git a/code/frameworks/nextjs-vite/template/cli/js/Page.jsx b/code/frameworks/experimental-nextjs-vite/template/cli/js/Page.jsx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/js/Page.jsx rename to code/frameworks/experimental-nextjs-vite/template/cli/js/Page.jsx diff --git a/code/frameworks/nextjs-vite/template/cli/js/Page.stories.js b/code/frameworks/experimental-nextjs-vite/template/cli/js/Page.stories.js similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/js/Page.stories.js rename to code/frameworks/experimental-nextjs-vite/template/cli/js/Page.stories.js diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.stories.ts similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.stories.ts rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.stories.ts diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.tsx b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-3-8/Button.tsx rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.tsx diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Configure.mdx b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Configure.mdx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-3-8/Configure.mdx rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Configure.mdx diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Header.stories.ts similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.stories.ts rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Header.stories.ts diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.tsx b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Header.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-3-8/Header.tsx rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Header.tsx diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Page.stories.ts similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.stories.ts rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Page.stories.ts diff --git a/code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.tsx b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Page.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-3-8/Page.tsx rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Page.tsx diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.stories.ts similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.stories.ts rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.stories.ts diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.tsx b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-4-9/Button.tsx rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.tsx diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Configure.mdx b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Configure.mdx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-4-9/Configure.mdx rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Configure.mdx diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Header.stories.ts similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.stories.ts rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Header.stories.ts diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.tsx b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Header.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-4-9/Header.tsx rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Header.tsx diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Page.stories.ts similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.stories.ts rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Page.stories.ts diff --git a/code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.tsx b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Page.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/cli/ts-4-9/Page.tsx rename to code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Page.tsx diff --git a/code/frameworks/nextjs-vite/template/next-env.d.ts b/code/frameworks/experimental-nextjs-vite/template/next-env.d.ts similarity index 100% rename from code/frameworks/nextjs-vite/template/next-env.d.ts rename to code/frameworks/experimental-nextjs-vite/template/next-env.d.ts diff --git a/code/frameworks/nextjs-vite/template/stories/DynamicImport.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/DynamicImport.stories.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/DynamicImport.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/DynamicImport.stories.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/DynamicImport.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/DynamicImport.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/DynamicImport.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/DynamicImport.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/Font.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Font.stories.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/Font.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/Font.stories.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/Font.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Font.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/Font.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/Font.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/GetImageProps.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/GetImageProps.stories.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/GetImageProps.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/GetImageProps.stories.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/Head.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Head.stories.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/Head.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/Head.stories.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/Image.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Image.stories.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/Image.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/Image.stories.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/ImageLegacy.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/ImageLegacy.stories.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/ImageLegacy.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/ImageLegacy.stories.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/Link.stories.module.css b/code/frameworks/experimental-nextjs-vite/template/stories/Link.stories.module.css similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/Link.stories.module.css rename to code/frameworks/experimental-nextjs-vite/template/stories/Link.stories.module.css diff --git a/code/frameworks/nextjs-vite/template/stories/Link.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Link.stories.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/Link.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/Link.stories.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/Navigation.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Navigation.stories.tsx similarity index 97% rename from code/frameworks/nextjs-vite/template/stories/Navigation.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/Navigation.stories.tsx index ebedcf962a45..fc107015517b 100644 --- a/code/frameworks/nextjs-vite/template/stories/Navigation.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/Navigation.stories.tsx @@ -9,7 +9,7 @@ import { import React from 'react'; import type { Meta, StoryObj } from '@storybook/react'; import { expect, userEvent, within } from '@storybook/test'; -import { getRouter } from '@storybook/nextjs-vite/navigation.mock'; +import { getRouter } from '@storybook/experimental-nextjs-vite/navigation.mock'; function Component() { const router = useRouter(); diff --git a/code/frameworks/nextjs-vite/template/stories/NextHeader.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.stories.tsx similarity index 94% rename from code/frameworks/nextjs-vite/template/stories/NextHeader.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.stories.tsx index 8fbecc3fffc5..cd79a14ad750 100644 --- a/code/frameworks/nextjs-vite/template/stories/NextHeader.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.stories.tsx @@ -2,7 +2,7 @@ import NextHeader from './NextHeader'; import type { Meta } from '@storybook/react'; import type { StoryObj } from '@storybook/react'; import { expect, userEvent, within } from '@storybook/test'; -import { cookies, headers } from '@storybook/nextjs-vite/headers.mock'; +import { cookies, headers } from '@storybook/experimental-nextjs-vite/headers.mock'; export default { component: NextHeader, diff --git a/code/frameworks/nextjs-vite/template/stories/NextHeader.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/NextHeader.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/RSC.jsx b/code/frameworks/experimental-nextjs-vite/template/stories/RSC.jsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/RSC.jsx rename to code/frameworks/experimental-nextjs-vite/template/stories/RSC.jsx diff --git a/code/frameworks/nextjs-vite/template/stories/RSC.stories.jsx b/code/frameworks/experimental-nextjs-vite/template/stories/RSC.stories.jsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/RSC.stories.jsx rename to code/frameworks/experimental-nextjs-vite/template/stories/RSC.stories.jsx diff --git a/code/frameworks/nextjs-vite/template/stories/Redirect.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Redirect.stories.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/Redirect.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/Redirect.stories.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/Router.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Router.stories.tsx similarity index 97% rename from code/frameworks/nextjs-vite/template/stories/Router.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/Router.stories.tsx index cfdb761b2210..e64221ea8a48 100644 --- a/code/frameworks/nextjs-vite/template/stories/Router.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/Router.stories.tsx @@ -1,7 +1,7 @@ import React from 'react'; import type { Meta, StoryObj } from '@storybook/react'; import { expect, within, userEvent } from '@storybook/test'; -import { getRouter } from '@storybook/nextjs-vite/router.mock'; +import { getRouter } from '@storybook/experimental-nextjs-vite/router.mock'; import Router, { useRouter } from 'next/router'; function Component() { diff --git a/code/frameworks/nextjs-vite/template/stories/ServerActions.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.stories.tsx similarity index 93% rename from code/frameworks/nextjs-vite/template/stories/ServerActions.stories.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.stories.tsx index 893a0e2009f4..941ffb2d3166 100644 --- a/code/frameworks/nextjs-vite/template/stories/ServerActions.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.stories.tsx @@ -1,9 +1,9 @@ import React from 'react'; import type { Meta, StoryObj } from '@storybook/react'; import { expect, within, userEvent, waitFor } from '@storybook/test'; -import { cookies } from '@storybook/nextjs-vite/headers.mock'; -import { revalidatePath } from '@storybook/nextjs-vite/cache.mock'; -import { redirect, getRouter } from '@storybook/nextjs-vite/navigation.mock'; +import { cookies } from '@storybook/experimental-nextjs-vite/headers.mock'; +import { revalidatePath } from '@storybook/experimental-nextjs-vite/cache.mock'; +import { redirect, getRouter } from '@storybook/experimental-nextjs-vite/navigation.mock'; import { accessRoute, login, logout } from './ServerActions'; diff --git a/code/frameworks/nextjs-vite/template/stories/ServerActions.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.tsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/ServerActions.tsx rename to code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.tsx diff --git a/code/frameworks/nextjs-vite/template/stories/StyledJsx.stories.jsx b/code/frameworks/experimental-nextjs-vite/template/stories/StyledJsx.stories.jsx similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/StyledJsx.stories.jsx rename to code/frameworks/experimental-nextjs-vite/template/stories/StyledJsx.stories.jsx diff --git a/code/frameworks/nextjs-vite/template/stories/fonts/OFL.txt b/code/frameworks/experimental-nextjs-vite/template/stories/fonts/OFL.txt similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/fonts/OFL.txt rename to code/frameworks/experimental-nextjs-vite/template/stories/fonts/OFL.txt diff --git a/code/frameworks/nextjs-vite/template/stories/fonts/RubikStorm-Regular.ttf b/code/frameworks/experimental-nextjs-vite/template/stories/fonts/RubikStorm-Regular.ttf similarity index 100% rename from code/frameworks/nextjs-vite/template/stories/fonts/RubikStorm-Regular.ttf rename to code/frameworks/experimental-nextjs-vite/template/stories/fonts/RubikStorm-Regular.ttf diff --git a/code/frameworks/nextjs-vite/template/typings.d.ts b/code/frameworks/experimental-nextjs-vite/template/typings.d.ts similarity index 100% rename from code/frameworks/nextjs-vite/template/typings.d.ts rename to code/frameworks/experimental-nextjs-vite/template/typings.d.ts diff --git a/code/frameworks/nextjs-vite/tsconfig.json b/code/frameworks/experimental-nextjs-vite/tsconfig.json similarity index 100% rename from code/frameworks/nextjs-vite/tsconfig.json rename to code/frameworks/experimental-nextjs-vite/tsconfig.json diff --git a/code/frameworks/nextjs-vite/vitest.config.ts b/code/frameworks/experimental-nextjs-vite/vitest.config.ts similarity index 100% rename from code/frameworks/nextjs-vite/vitest.config.ts rename to code/frameworks/experimental-nextjs-vite/vitest.config.ts diff --git a/code/lib/cli/src/helpers.ts b/code/lib/cli/src/helpers.ts index 8f87539e5aa3..29a2453ea8b5 100644 --- a/code/lib/cli/src/helpers.ts +++ b/code/lib/cli/src/helpers.ts @@ -143,7 +143,7 @@ export const frameworkToDefaultBuilder: Record 'html-vite': CoreBuilder.Vite, 'html-webpack5': CoreBuilder.Webpack5, nextjs: CoreBuilder.Webpack5, - 'nextjs-vite': CoreBuilder.Vite, + 'experimental-nextjs-vite': CoreBuilder.Vite, 'preact-vite': CoreBuilder.Vite, 'preact-webpack5': CoreBuilder.Webpack5, qwik: CoreBuilder.Vite, diff --git a/code/lib/cli/src/sandbox-templates.ts b/code/lib/cli/src/sandbox-templates.ts index b93d859736e8..d9348c3b192b 100644 --- a/code/lib/cli/src/sandbox-templates.ts +++ b/code/lib/cli/src/sandbox-templates.ts @@ -201,26 +201,26 @@ const baseTemplates = { }, skipTasks: ['e2e-tests-dev', 'bench'], }, - 'nextjs-vite/default-ts': { + 'experimental-nextjs-vite/default-ts': { name: 'Next.js Latest (Vite | TypeScript)', script: 'yarn create next-app {{beforeDir}} --typescript --eslint --tailwind --app --import-alias="@/*" --src-dir', inDevelopment: true, expected: { - framework: '@storybook/nextjs-vite', + framework: '@storybook/experimental-nextjs-vite', renderer: '@storybook/react', builder: '@storybook/builder-vite', }, modifications: { mainConfig: { - framework: '@storybook/nextjs-vite', + framework: '@storybook/experimental-nextjs-vite', features: { experimentalRSC: true }, }, extraDependencies: [ 'server-only', 'vite-plugin-storybook-nextjs', - '@storybook/nextjs-vite', + '@storybook/experimental-nextjs-vite', 'vite', ], }, diff --git a/code/yarn.lock b/code/yarn.lock index b7d68f237ad4..c890992ba541 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -6171,6 +6171,35 @@ __metadata: languageName: node linkType: hard +"@storybook/experimental-nextjs-vite@workspace:frameworks/experimental-nextjs-vite": + version: 0.0.0-use.local + resolution: "@storybook/experimental-nextjs-vite@workspace:frameworks/experimental-nextjs-vite" + dependencies: + "@storybook/builder-vite": "workspace:*" + "@storybook/react": "workspace:*" + "@storybook/test": "workspace:*" + "@types/node": "npm:^18.0.0" + next: "npm:^14.2.5" + sharp: "npm:^0.33.3" + styled-jsx: "npm:5.1.6" + typescript: "npm:^5.3.2" + vite-plugin-storybook-nextjs: "npm:^1.0.0" + peerDependencies: + next: ^14.2.5 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: "workspace:^" + vite: ^5.0.0 + vite-plugin-storybook-nextjs: ^1.0.0 + dependenciesMeta: + sharp: + optional: true + peerDependenciesMeta: + typescript: + optional: true + languageName: unknown + linkType: soft + "@storybook/global@npm:^5.0.0": version: 5.0.0 resolution: "@storybook/global@npm:5.0.0" @@ -6289,35 +6318,6 @@ __metadata: languageName: unknown linkType: soft -"@storybook/nextjs-vite@workspace:frameworks/nextjs-vite": - version: 0.0.0-use.local - resolution: "@storybook/nextjs-vite@workspace:frameworks/nextjs-vite" - dependencies: - "@storybook/builder-vite": "workspace:*" - "@storybook/react": "workspace:*" - "@storybook/test": "workspace:*" - "@types/node": "npm:^18.0.0" - next: "npm:^14.2.5" - sharp: "npm:^0.33.3" - styled-jsx: "npm:5.1.6" - typescript: "npm:^5.3.2" - vite-plugin-storybook-nextjs: "npm:^1.0.0" - peerDependencies: - next: ^14.2.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: "workspace:^" - vite: ^5.0.0 - vite-plugin-storybook-nextjs: ^1.0.0 - dependenciesMeta: - sharp: - optional: true - peerDependenciesMeta: - typescript: - optional: true - languageName: unknown - linkType: soft - "@storybook/nextjs@workspace:*, @storybook/nextjs@workspace:frameworks/nextjs": version: 0.0.0-use.local resolution: "@storybook/nextjs@workspace:frameworks/nextjs" diff --git a/docs/get-started/frameworks/nextjs.mdx b/docs/get-started/frameworks/nextjs.mdx index fce453548bad..ec286414e285 100644 --- a/docs/get-started/frameworks/nextjs.mdx +++ b/docs/get-started/frameworks/nextjs.mdx @@ -749,7 +749,7 @@ Storybook for Next.js is a [framework](../../contribute/framework.mdx) that make ## Custom Webpack config - You can safely skip this section if you are using `@storybook/nextjs-vite` instead of `@storybook/nextjs`. + You can safely skip this section if you are using `@storybook/experimental-nextjs-vite` instead of `@storybook/nextjs`. The Vite-based Next.js framework does not support Webpack settings. @@ -899,7 +899,7 @@ Storybook for Next.js is a [framework](../../contribute/framework.mdx) that make ### What if I'm using the Vite builder? - We have introduced experimental Vite builder support. Just install the experimental framework package `@storybook/nextjs-vite` and replace all instances of `@storybook/nextjs` with `@storybook/nextjs-vite`. + We have introduced experimental Vite builder support. Just install the experimental framework package `@storybook/experimental-nextjs-vite` and replace all instances of `@storybook/nextjs` with `@storybook/experimental-nextjs-vite`. ### Error: You are importing avif images, but you don't have sharp installed. You have to install sharp in order to use image optimization features in Next.js. From 9f289c122af3d1bf02d5a51d3cf2e7cbe225b376 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Wed, 7 Aug 2024 08:05:11 +0200 Subject: [PATCH 11/17] Bump version of @storybook/experimental-nextjs-vite --- code/frameworks/experimental-nextjs-vite/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/frameworks/experimental-nextjs-vite/package.json b/code/frameworks/experimental-nextjs-vite/package.json index 07485c47af1a..c73bb6cd9686 100644 --- a/code/frameworks/experimental-nextjs-vite/package.json +++ b/code/frameworks/experimental-nextjs-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/experimental-nextjs-vite", - "version": "8.3.0-alpha.3", + "version": "8.3.0-alpha.4", "description": "Storybook for Next.js and Vite", "keywords": [ "storybook", From 3257177554579066c2037b43f19e588c91221531 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Thu, 8 Aug 2024 10:29:39 +0200 Subject: [PATCH 12/17] Fix test --- code/core/src/telemetry/get-portable-stories-usage.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/core/src/telemetry/get-portable-stories-usage.test.ts b/code/core/src/telemetry/get-portable-stories-usage.test.ts index b07eaec0a2e2..32d2c9fd154d 100644 --- a/code/core/src/telemetry/get-portable-stories-usage.test.ts +++ b/code/core/src/telemetry/get-portable-stories-usage.test.ts @@ -6,6 +6,6 @@ describe('getPortableStoriesFileCountUncached', () => { it('should ignores node_modules, non-source files', async () => { const usage = await getPortableStoriesFileCountUncached(); // you can verify with: `git grep -m1 -c composeStor | wc -l` - expect(usage).toMatchInlineSnapshot(`14`); + expect(usage).toMatchInlineSnapshot(`15`); }); }); From 23448ff828b2f6a79dddc77be5950e1aca0a9738 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Thu, 8 Aug 2024 12:37:16 +0200 Subject: [PATCH 13/17] Use jiti instead of esbuild-register --- code/frameworks/experimental-nextjs-vite/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/frameworks/experimental-nextjs-vite/package.json b/code/frameworks/experimental-nextjs-vite/package.json index c73bb6cd9686..69325c74045c 100644 --- a/code/frameworks/experimental-nextjs-vite/package.json +++ b/code/frameworks/experimental-nextjs-vite/package.json @@ -86,8 +86,8 @@ "!src/**/*" ], "scripts": { - "check": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/check.ts", - "prep": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/bundle.ts" + "check": "jiti ../../../scripts/prepare/check.ts", + "prep": "jiti ../../../scripts/prepare/bundle.ts" }, "dependencies": { "@storybook/builder-vite": "workspace:*", From 3a3a4807af795fd5578d5a3621ba6849f31f95d6 Mon Sep 17 00:00:00 2001 From: Kyle Gach Date: Thu, 8 Aug 2024 11:27:25 -0600 Subject: [PATCH 14/17] Add webpackFinal -> viteFinal callout --- docs/get-started/frameworks/nextjs.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/get-started/frameworks/nextjs.mdx b/docs/get-started/frameworks/nextjs.mdx index ec286414e285..5a1efc07fc29 100644 --- a/docs/get-started/frameworks/nextjs.mdx +++ b/docs/get-started/frameworks/nextjs.mdx @@ -102,6 +102,10 @@ Storybook for Next.js is a [framework](../../contribute/framework.mdx) that make {/* prettier-ignore-end */} + + If your Storybook configuration contains custom Webpack operations in [`webpackFinal`](../../api/main-config/main-config-webpack-final.mdx), you will likely need to create equivalents in [`viteFinal`]((../../api/main-config/main-config-vite-final.mdx)). + + Finally, if you were using Storybook plugins to integrate with Next.js, those are no longer necessary when using this framework and can be removed: {/* prettier-ignore-start */} From f6ad2e9c23529447f6b99938b80cf6f240469cea Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Fri, 9 Aug 2024 12:38:53 +0200 Subject: [PATCH 15/17] Add experimental-nextjs-vite/default-ts to daily set of sandboxes --- code/lib/cli-storybook/src/sandbox-templates.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/code/lib/cli-storybook/src/sandbox-templates.ts b/code/lib/cli-storybook/src/sandbox-templates.ts index d8769e927fa3..a408bc7a9213 100644 --- a/code/lib/cli-storybook/src/sandbox-templates.ts +++ b/code/lib/cli-storybook/src/sandbox-templates.ts @@ -714,6 +714,7 @@ export const daily: TemplateKey[] = [ ...merged, 'angular-cli/prerelease', 'cra/default-js', + 'experimental-nextjs-vite/default-ts', 'react-vite/default-js', 'react-vite/prerelease-ts', 'react-webpack/prerelease-ts', From 0d222ab531f44034dfb6becec1357ebf74236d84 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Mon, 12 Aug 2024 09:39:09 +0200 Subject: [PATCH 16/17] Lint fixes --- .../src/export-mocks/headers/cookies.ts | 5 +++-- .../src/export-mocks/headers/index.ts | 1 + .../src/export-mocks/navigation/index.ts | 6 ++++-- .../src/export-mocks/router/index.ts | 6 ++++-- .../src/head-manager/decorator.tsx | 1 + .../head-manager/head-manager-provider.tsx | 3 ++- .../src/images/decorator.tsx | 1 + .../src/portable-stories.ts | 16 +++++++------- .../experimental-nextjs-vite/src/preset.ts | 5 ++++- .../experimental-nextjs-vite/src/preview.tsx | 16 +++++++------- .../src/routing/app-router-provider.tsx | 21 +++++++++++-------- .../src/routing/decorator.tsx | 7 +++++-- .../src/routing/page-router-provider.tsx | 4 +++- .../src/styledJsx/decorator.tsx | 1 + .../experimental-nextjs-vite/src/types.ts | 3 ++- .../template/cli/js/Button.jsx | 2 ++ .../template/cli/js/Button.stories.js | 1 + .../template/cli/js/Header.jsx | 1 + .../template/cli/js/Header.stories.js | 1 + .../template/cli/js/Page.stories.js | 3 ++- .../template/cli/ts-3-8/Button.stories.ts | 1 + .../template/cli/ts-3-8/Button.tsx | 1 + .../template/cli/ts-3-8/Page.stories.ts | 2 +- .../template/cli/ts-4-9/Button.stories.ts | 1 + .../template/cli/ts-4-9/Button.tsx | 1 + .../template/cli/ts-4-9/Header.stories.ts | 1 + .../template/cli/ts-4-9/Page.stories.ts | 2 +- .../stories/DynamicImport.stories.tsx | 4 +++- .../template/stories/Font.stories.tsx | 1 + .../template/stories/Font.tsx | 4 ++-- .../stories/GetImageProps.stories.tsx | 4 +++- .../template/stories/Head.stories.tsx | 6 ++++-- .../template/stories/Image.stories.tsx | 4 +++- .../template/stories/ImageLegacy.stories.tsx | 1 + .../template/stories/Link.stories.tsx | 4 +++- .../template/stories/Navigation.stories.tsx | 15 +++++++------ .../template/stories/NextHeader.stories.tsx | 4 +++- .../template/stories/NextHeader.tsx | 1 + .../template/stories/RSC.jsx | 1 + .../template/stories/RSC.stories.jsx | 3 ++- .../template/stories/Redirect.stories.tsx | 2 ++ .../template/stories/Router.stories.tsx | 5 ++++- .../stories/ServerActions.stories.tsx | 8 ++++--- .../template/stories/ServerActions.tsx | 2 +- .../experimental-nextjs-vite/vitest.config.ts | 1 + 45 files changed, 123 insertions(+), 60 deletions(-) diff --git a/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/cookies.ts b/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/cookies.ts index 3d84ecba3885..02e335834b8a 100644 --- a/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/cookies.ts +++ b/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/cookies.ts @@ -1,11 +1,12 @@ -import { fn } from '@storybook/test'; -import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies'; // We need this import to be a singleton, and because it's used in multiple entrypoints // both in ESM and CJS, importing it via the package name instead of having a local import // is the only way to achieve it actually being a singleton // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore we must ignore types here as during compilation they are not generated yet import { headers } from '@storybook/nextjs/headers.mock'; +import { fn } from '@storybook/test'; + +import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies'; class RequestCookiesMock extends RequestCookies { get = fn(super.get.bind(this)).mockName('next/headers::cookies().get'); diff --git a/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/index.ts b/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/index.ts index 1ec2cbd2915f..1797d4ccaf57 100644 --- a/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/index.ts +++ b/code/frameworks/experimental-nextjs-vite/src/export-mocks/headers/index.ts @@ -1,4 +1,5 @@ import { fn } from '@storybook/test'; + import * as originalHeaders from 'next/dist/client/components/headers'; // re-exports of the actual module diff --git a/code/frameworks/experimental-nextjs-vite/src/export-mocks/navigation/index.ts b/code/frameworks/experimental-nextjs-vite/src/export-mocks/navigation/index.ts index 09a013578250..60d964147dbb 100644 --- a/code/frameworks/experimental-nextjs-vite/src/export-mocks/navigation/index.ts +++ b/code/frameworks/experimental-nextjs-vite/src/export-mocks/navigation/index.ts @@ -1,9 +1,11 @@ +import { NextjsRouterMocksNotAvailable } from 'storybook/internal/preview-errors'; + import type { Mock } from '@storybook/test'; import { fn } from '@storybook/test'; + import * as actual from 'next/dist/client/components/navigation'; -import { NextjsRouterMocksNotAvailable } from 'storybook/internal/preview-errors'; -import { RedirectStatusCode } from 'next/dist/client/components/redirect-status-code'; import { getRedirectError } from 'next/dist/client/components/redirect'; +import { RedirectStatusCode } from 'next/dist/client/components/redirect-status-code'; let navigationAPI: { push: Mock; diff --git a/code/frameworks/experimental-nextjs-vite/src/export-mocks/router/index.ts b/code/frameworks/experimental-nextjs-vite/src/export-mocks/router/index.ts index e776674c5cef..6d7dac5ef3bc 100644 --- a/code/frameworks/experimental-nextjs-vite/src/export-mocks/router/index.ts +++ b/code/frameworks/experimental-nextjs-vite/src/export-mocks/router/index.ts @@ -1,8 +1,10 @@ +import { NextjsRouterMocksNotAvailable } from 'storybook/internal/preview-errors'; + import type { Mock } from '@storybook/test'; import { fn } from '@storybook/test'; -import { NextjsRouterMocksNotAvailable } from 'storybook/internal/preview-errors'; -import type { NextRouter, SingletonRouter } from 'next/router'; + import singletonRouter, * as originalRouter from 'next/dist/client/router'; +import type { NextRouter, SingletonRouter } from 'next/router'; const defaultRouterState = { route: '/', diff --git a/code/frameworks/experimental-nextjs-vite/src/head-manager/decorator.tsx b/code/frameworks/experimental-nextjs-vite/src/head-manager/decorator.tsx index 794ad9c77cb9..84fd0215df4b 100644 --- a/code/frameworks/experimental-nextjs-vite/src/head-manager/decorator.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/head-manager/decorator.tsx @@ -1,4 +1,5 @@ import * as React from 'react'; + import HeadManagerProvider from './head-manager-provider'; export const HeadManagerDecorator = (Story: React.FC): React.ReactNode => { diff --git a/code/frameworks/experimental-nextjs-vite/src/head-manager/head-manager-provider.tsx b/code/frameworks/experimental-nextjs-vite/src/head-manager/head-manager-provider.tsx index ee62063351ea..69b58866c510 100644 --- a/code/frameworks/experimental-nextjs-vite/src/head-manager/head-manager-provider.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/head-manager/head-manager-provider.tsx @@ -1,7 +1,8 @@ import type { PropsWithChildren } from 'react'; import React, { useMemo } from 'react'; -import { HeadManagerContext } from 'next/dist/shared/lib/head-manager-context.shared-runtime'; + import initHeadManager from 'next/dist/client/head-manager'; +import { HeadManagerContext } from 'next/dist/shared/lib/head-manager-context.shared-runtime'; type HeadManagerValue = { updateHead?: ((state: JSX.Element[]) => void) | undefined; diff --git a/code/frameworks/experimental-nextjs-vite/src/images/decorator.tsx b/code/frameworks/experimental-nextjs-vite/src/images/decorator.tsx index 2e0bc929d0f3..6dc34310a95c 100644 --- a/code/frameworks/experimental-nextjs-vite/src/images/decorator.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/images/decorator.tsx @@ -1,4 +1,5 @@ import * as React from 'react'; + import type { Addon_StoryContext } from 'storybook/internal/types'; import { ImageContext } from 'sb-original/image-context'; diff --git a/code/frameworks/experimental-nextjs-vite/src/portable-stories.ts b/code/frameworks/experimental-nextjs-vite/src/portable-stories.ts index e682a103ef24..7ad73e7ce778 100644 --- a/code/frameworks/experimental-nextjs-vite/src/portable-stories.ts +++ b/code/frameworks/experimental-nextjs-vite/src/portable-stories.ts @@ -1,26 +1,26 @@ import { - composeStory as originalComposeStory, + composeConfigs, composeStories as originalComposeStories, + composeStory as originalComposeStory, setProjectAnnotations as originalSetProjectAnnotations, - composeConfigs, } from 'storybook/internal/preview-api'; import type { Args, + ComposedStoryFn, + NamedOrDefaultProjectAnnotations, ProjectAnnotations, - StoryAnnotationsOrFn, Store_CSFExports, StoriesWithPartialProps, - NamedOrDefaultProjectAnnotations, - ComposedStoryFn, + StoryAnnotationsOrFn, } from 'storybook/internal/types'; +import type { Meta, ReactRenderer } from '@storybook/react'; + +import * as rscAnnotations from '../../../renderers/react/src/entry-preview-rsc'; // ! ATTENTION: This needs to be a relative import so it gets prebundled. This is to avoid ESM issues in Nextjs + Jest setups import { INTERNAL_DEFAULT_PROJECT_ANNOTATIONS as reactAnnotations } from '../../../renderers/react/src/portable-stories'; -import * as rscAnnotations from '../../../renderers/react/src/entry-preview-rsc'; import * as nextJsAnnotations from './preview'; -import type { ReactRenderer, Meta } from '@storybook/react'; - /** Function that sets the globalConfig of your storybook. The global config is the preview module of your .storybook folder. * * It should be run a single time, so that your global config (e.g. decorators) is applied to your stories when using `composeStories` or `composeStory`. diff --git a/code/frameworks/experimental-nextjs-vite/src/preset.ts b/code/frameworks/experimental-nextjs-vite/src/preset.ts index 95fa81009575..af5deabf2b87 100644 --- a/code/frameworks/experimental-nextjs-vite/src/preset.ts +++ b/code/frameworks/experimental-nextjs-vite/src/preset.ts @@ -1,9 +1,12 @@ // https://storybook.js.org/docs/react/addons/writing-presets +import type { PresetProperty } from 'storybook/internal/types'; + import type { StorybookConfigVite } from '@storybook/builder-vite'; + import { dirname, join } from 'path'; -import type { PresetProperty } from 'storybook/internal/types'; // @ts-expect-error - tsconfig settings have to be moduleResolution=Bundler and module=Preserve import vitePluginStorybookNextjs from 'vite-plugin-storybook-nextjs'; + import type { StorybookConfig } from './types'; export const core: PresetProperty<'core'> = async (config, options) => { diff --git a/code/frameworks/experimental-nextjs-vite/src/preview.tsx b/code/frameworks/experimental-nextjs-vite/src/preview.tsx index 9248514b0ccd..9bc6df0f8bfb 100644 --- a/code/frameworks/experimental-nextjs-vite/src/preview.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/preview.tsx @@ -1,18 +1,20 @@ import type { Addon_DecoratorFunction, Addon_LoaderFunction } from 'storybook/internal/types'; -import './config/preview'; -import { ImageDecorator } from './images/decorator'; -import { RouterDecorator } from './routing/decorator'; -import { StyledJsxDecorator } from './styledJsx/decorator'; -import { HeadManagerDecorator } from './head-manager/decorator'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore we must ignore types here as during compilation they are not generated yet -import { createRouter } from '@storybook/experimental-nextjs-vite/router.mock'; +import { createNavigation } from '@storybook/experimental-nextjs-vite/navigation.mock'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore we must ignore types here as during compilation they are not generated yet -import { createNavigation } from '@storybook/experimental-nextjs-vite/navigation.mock'; +import { createRouter } from '@storybook/experimental-nextjs-vite/router.mock'; + import { isNextRouterError } from 'next/dist/client/components/is-next-router-error'; +import './config/preview'; +import { HeadManagerDecorator } from './head-manager/decorator'; +import { ImageDecorator } from './images/decorator'; +import { RouterDecorator } from './routing/decorator'; +import { StyledJsxDecorator } from './styledJsx/decorator'; + function addNextHeadCount() { const meta = document.createElement('meta'); meta.name = 'next-head-count'; diff --git a/code/frameworks/experimental-nextjs-vite/src/routing/app-router-provider.tsx b/code/frameworks/experimental-nextjs-vite/src/routing/app-router-provider.tsx index ea1c44a860fa..807d34920ab1 100644 --- a/code/frameworks/experimental-nextjs-vite/src/routing/app-router-provider.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/routing/app-router-provider.tsx @@ -1,24 +1,27 @@ import React, { useMemo } from 'react'; + +// We need this import to be a singleton, and because it's used in multiple entrypoints +// both in ESM and CJS, importing it via the package name instead of having a local import +// is the only way to achieve it actually being a singleton +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore we must ignore types here as during compilation they are not generated yet +import { getRouter } from '@storybook/experimental-nextjs-vite/navigation.mock'; + +import type { FlightRouterState } from 'next/dist/server/app-render/types'; import { - LayoutRouterContext, AppRouterContext, GlobalLayoutRouterContext, + LayoutRouterContext, } from 'next/dist/shared/lib/app-router-context.shared-runtime'; import { + PathParamsContext, PathnameContext, SearchParamsContext, - PathParamsContext, } from 'next/dist/shared/lib/hooks-client-context.shared-runtime'; import { type Params } from 'next/dist/shared/lib/router/utils/route-matcher'; import { PAGE_SEGMENT_KEY } from 'next/dist/shared/lib/segment'; -import type { FlightRouterState } from 'next/dist/server/app-render/types'; + import type { RouteParams } from './types'; -// We need this import to be a singleton, and because it's used in multiple entrypoints -// both in ESM and CJS, importing it via the package name instead of having a local import -// is the only way to achieve it actually being a singleton -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore we must ignore types here as during compilation they are not generated yet -import { getRouter } from '@storybook/experimental-nextjs-vite/navigation.mock'; type AppRouterProviderProps = { routeParams: RouteParams; diff --git a/code/frameworks/experimental-nextjs-vite/src/routing/decorator.tsx b/code/frameworks/experimental-nextjs-vite/src/routing/decorator.tsx index 2bb4211bd86c..f21819f373a4 100644 --- a/code/frameworks/experimental-nextjs-vite/src/routing/decorator.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/routing/decorator.tsx @@ -1,9 +1,12 @@ import * as React from 'react'; + import type { Addon_StoryContext } from 'storybook/internal/types'; + +import { RedirectBoundary } from 'next/dist/client/components/redirect-boundary'; + import { AppRouterProvider } from './app-router-provider'; import { PageRouterProvider } from './page-router-provider'; -import type { RouteParams, NextAppDirectory } from './types'; -import { RedirectBoundary } from 'next/dist/client/components/redirect-boundary'; +import type { NextAppDirectory, RouteParams } from './types'; const defaultRouterParams: RouteParams = { pathname: '/', diff --git a/code/frameworks/experimental-nextjs-vite/src/routing/page-router-provider.tsx b/code/frameworks/experimental-nextjs-vite/src/routing/page-router-provider.tsx index e8f8b56b8c99..92fb7fe54826 100644 --- a/code/frameworks/experimental-nextjs-vite/src/routing/page-router-provider.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/routing/page-router-provider.tsx @@ -1,6 +1,6 @@ -import { RouterContext } from 'next/dist/shared/lib/router-context.shared-runtime'; import type { PropsWithChildren } from 'react'; import React from 'react'; + // We need this import to be a singleton, and because it's used in multiple entrypoints // both in ESM and CJS, importing it via the package name instead of having a local import // is the only way to achieve it actually being a singleton @@ -8,6 +8,8 @@ import React from 'react'; // @ts-ignore we must ignore types here as during compilation they are not generated yet import { getRouter } from '@storybook/experimental-nextjs-vite/router.mock'; +import { RouterContext } from 'next/dist/shared/lib/router-context.shared-runtime'; + export const PageRouterProvider: React.FC = ({ children }) => ( {children} ); diff --git a/code/frameworks/experimental-nextjs-vite/src/styledJsx/decorator.tsx b/code/frameworks/experimental-nextjs-vite/src/styledJsx/decorator.tsx index 5e18664c9659..69d5496283bd 100644 --- a/code/frameworks/experimental-nextjs-vite/src/styledJsx/decorator.tsx +++ b/code/frameworks/experimental-nextjs-vite/src/styledJsx/decorator.tsx @@ -1,4 +1,5 @@ import * as React from 'react'; + import { StyleRegistry } from 'styled-jsx'; export const StyledJsxDecorator = (Story: React.FC): React.ReactNode => ( diff --git a/code/frameworks/experimental-nextjs-vite/src/types.ts b/code/frameworks/experimental-nextjs-vite/src/types.ts index 00eb5a895129..8e72784e169c 100644 --- a/code/frameworks/experimental-nextjs-vite/src/types.ts +++ b/code/frameworks/experimental-nextjs-vite/src/types.ts @@ -2,7 +2,8 @@ import type { CompatibleString, StorybookConfig as StorybookConfigBase, } from 'storybook/internal/types'; -import type { StorybookConfigVite, BuilderOptions } from '@storybook/builder-vite'; + +import type { BuilderOptions, StorybookConfigVite } from '@storybook/builder-vite'; type FrameworkName = CompatibleString<'@storybook/experimental-nextjs-vite'>; type BuilderName = CompatibleString<'@storybook/builder-vite'>; diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/js/Button.jsx b/code/frameworks/experimental-nextjs-vite/template/cli/js/Button.jsx index 7c613bbf2599..8231c774f03b 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/js/Button.jsx +++ b/code/frameworks/experimental-nextjs-vite/template/cli/js/Button.jsx @@ -1,5 +1,7 @@ import React from 'react'; + import PropTypes from 'prop-types'; + import './button.css'; /** diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/js/Button.stories.js b/code/frameworks/experimental-nextjs-vite/template/cli/js/Button.stories.js index 97b9ec0ed85d..045d9c477ab1 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/js/Button.stories.js +++ b/code/frameworks/experimental-nextjs-vite/template/cli/js/Button.stories.js @@ -1,4 +1,5 @@ import { fn } from '@storybook/test'; + import { Button } from './Button'; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/js/Header.jsx b/code/frameworks/experimental-nextjs-vite/template/cli/js/Header.jsx index 39e5226cffc1..38aa4d89af8b 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/js/Header.jsx +++ b/code/frameworks/experimental-nextjs-vite/template/cli/js/Header.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import PropTypes from 'prop-types'; import { Button } from './Button'; diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/js/Header.stories.js b/code/frameworks/experimental-nextjs-vite/template/cli/js/Header.stories.js index 982cd970fb5c..699abab07946 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/js/Header.stories.js +++ b/code/frameworks/experimental-nextjs-vite/template/cli/js/Header.stories.js @@ -1,4 +1,5 @@ import { fn } from '@storybook/test'; + import { Header } from './Header'; export default { diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/js/Page.stories.js b/code/frameworks/experimental-nextjs-vite/template/cli/js/Page.stories.js index 53362f140e61..383fd1ab44e3 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/js/Page.stories.js +++ b/code/frameworks/experimental-nextjs-vite/template/cli/js/Page.stories.js @@ -1,4 +1,5 @@ -import { within, userEvent, expect } from '@storybook/test'; +import { expect, userEvent, within } from '@storybook/test'; + import { Page } from './Page'; export default { diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.stories.ts index 2054fc59231e..18be3ab1aa1d 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.stories.ts +++ b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.stories.ts @@ -1,5 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react'; import { fn } from '@storybook/test'; + import { Button } from './Button'; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.tsx b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.tsx index 30a6bcb96e49..34d8bcdf1fd8 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Button.tsx @@ -1,4 +1,5 @@ import React from 'react'; + import './button.css'; export interface ButtonProps { diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Page.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Page.stories.ts index 4bcf593cafa7..7581ed2bee30 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Page.stories.ts +++ b/code/frameworks/experimental-nextjs-vite/template/cli/ts-3-8/Page.stories.ts @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from '@storybook/react'; -import { within, userEvent, expect } from '@storybook/test'; +import { expect, userEvent, within } from '@storybook/test'; import { Page } from './Page'; diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.stories.ts index 455a9d8601c9..2a05e01b06fe 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.stories.ts +++ b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.stories.ts @@ -1,5 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react'; import { fn } from '@storybook/test'; + import { Button } from './Button'; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.tsx b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.tsx index 30a6bcb96e49..34d8bcdf1fd8 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Button.tsx @@ -1,4 +1,5 @@ import React from 'react'; + import './button.css'; export interface ButtonProps { diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Header.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Header.stories.ts index 39d15874f4c1..80c71d0f520e 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Header.stories.ts +++ b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Header.stories.ts @@ -1,5 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react'; import { fn } from '@storybook/test'; + import { Header } from './Header'; const meta = { diff --git a/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Page.stories.ts b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Page.stories.ts index f7a06817f85a..53b9f8fdf9c9 100644 --- a/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Page.stories.ts +++ b/code/frameworks/experimental-nextjs-vite/template/cli/ts-4-9/Page.stories.ts @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from '@storybook/react'; -import { within, userEvent, expect } from '@storybook/test'; +import { expect, userEvent, within } from '@storybook/test'; import { Page } from './Page'; diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/DynamicImport.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/DynamicImport.stories.tsx index 47d1fd3e0af4..f6b5e2c99f3b 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/DynamicImport.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/DynamicImport.stories.tsx @@ -1,7 +1,9 @@ -import dynamic from 'next/dynamic'; import React, { Suspense } from 'react'; + import type { Meta, StoryObj } from '@storybook/react'; +import dynamic from 'next/dynamic'; + const DynamicComponent = dynamic(() => import('./DynamicImport'), { ssr: false, }); diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/Font.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Font.stories.tsx index b91247b1392b..32db81dcb67d 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/Font.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/Font.stories.tsx @@ -1,4 +1,5 @@ import type { Meta, StoryObj } from '@storybook/react'; + import Font from './Font'; const meta = { diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/Font.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Font.tsx index cdfde7def069..cd8e83ef3dc5 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/Font.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/Font.tsx @@ -1,8 +1,8 @@ +import React from 'react'; + import { Rubik_Puddles } from 'next/font/google'; import localFont from 'next/font/local'; -import React from 'react'; - const rubik = Rubik_Puddles({ subsets: ['latin'], variable: '--font-latin-rubik', diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/GetImageProps.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/GetImageProps.stories.tsx index cb8eefedc9f4..d4ad15ab240f 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/GetImageProps.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/GetImageProps.stories.tsx @@ -1,7 +1,9 @@ -import { type ImageProps, getImageProps } from 'next/image'; import React from 'react'; + import type { Meta, StoryObj } from '@storybook/react'; +import { type ImageProps, getImageProps } from 'next/image'; + import Accessibility from '../../assets/accessibility.svg'; import Testing from '../../assets/testing.png'; diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/Head.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Head.stories.tsx index 031e0860e50a..db1b747bf78d 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/Head.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/Head.stories.tsx @@ -1,8 +1,10 @@ -import Head from 'next/head'; import React from 'react'; -import { waitFor, expect } from '@storybook/test'; + import type { Meta } from '@storybook/react'; import type { StoryObj } from '@storybook/react'; +import { expect, waitFor } from '@storybook/test'; + +import Head from 'next/head'; function Component() { return ( diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/Image.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Image.stories.tsx index ad18f125b523..d9efdacdae80 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/Image.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/Image.stories.tsx @@ -1,9 +1,11 @@ import React, { useRef, useState } from 'react'; + +import type { Meta, StoryObj } from '@storybook/react'; + import Image from 'next/image'; import Accessibility from '../../assets/accessibility.svg'; import AvifImage from '../../assets/avif-test-image.avif'; -import type { Meta, StoryObj } from '@storybook/react'; const meta = { component: Image, diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/ImageLegacy.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/ImageLegacy.stories.tsx index b8a781499bd1..61e61b916cbe 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/ImageLegacy.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/ImageLegacy.stories.tsx @@ -1,4 +1,5 @@ import React from 'react'; + import Image from 'next/legacy/image'; import Accessibility from '../../assets/accessibility.svg'; diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/Link.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Link.stories.tsx index 1bc99d187e3d..7c1aa2073ab6 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/Link.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/Link.stories.tsx @@ -1,7 +1,9 @@ import React from 'react'; -import Link from 'next/link'; + import type { Meta, StoryObj } from '@storybook/react'; +import Link from 'next/link'; + import style from './Link.stories.module.css'; // `onClick`, `href`, and `ref` need to be passed to the DOM element diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/Navigation.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Navigation.stories.tsx index fc107015517b..d50ed5174d25 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/Navigation.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/Navigation.stories.tsx @@ -1,15 +1,18 @@ +import React from 'react'; + +import type { Meta, StoryObj } from '@storybook/react'; +import { expect, userEvent, within } from '@storybook/test'; + +import { getRouter } from '@storybook/experimental-nextjs-vite/navigation.mock'; + import { - useRouter, + useParams, usePathname, + useRouter, useSearchParams, - useParams, useSelectedLayoutSegment, useSelectedLayoutSegments, } from 'next/navigation'; -import React from 'react'; -import type { Meta, StoryObj } from '@storybook/react'; -import { expect, userEvent, within } from '@storybook/test'; -import { getRouter } from '@storybook/experimental-nextjs-vite/navigation.mock'; function Component() { const router = useRouter(); diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.stories.tsx index cd79a14ad750..c0ec7f1bbba9 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.stories.tsx @@ -1,9 +1,11 @@ -import NextHeader from './NextHeader'; import type { Meta } from '@storybook/react'; import type { StoryObj } from '@storybook/react'; import { expect, userEvent, within } from '@storybook/test'; + import { cookies, headers } from '@storybook/experimental-nextjs-vite/headers.mock'; +import NextHeader from './NextHeader'; + export default { component: NextHeader, } as Meta; diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.tsx index b93c9611c774..6189f84baa62 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/NextHeader.tsx @@ -1,4 +1,5 @@ import React from 'react'; + import { cookies, headers } from 'next/headers'; export default async function Component() { diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/RSC.jsx b/code/frameworks/experimental-nextjs-vite/template/stories/RSC.jsx index 9c894710b439..a5771a6a9202 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/RSC.jsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/RSC.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import 'server-only'; export const RSC = async ({ label }) => <>RSC {label}; diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/RSC.stories.jsx b/code/frameworks/experimental-nextjs-vite/template/stories/RSC.stories.jsx index 505c6a3acab4..1847c024379c 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/RSC.stories.jsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/RSC.stories.jsx @@ -1,5 +1,6 @@ import React from 'react'; -import { RSC, Nested } from './RSC'; + +import { Nested, RSC } from './RSC'; export default { component: RSC, diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/Redirect.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Redirect.stories.tsx index 05f4d5a68eab..3c5980b79757 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/Redirect.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/Redirect.stories.tsx @@ -1,6 +1,8 @@ import React from 'react'; + import type { Meta, StoryObj } from '@storybook/react'; import { userEvent, within } from '@storybook/test'; + import { redirect } from 'next/navigation'; let state = 'Bug! Not invalidated'; diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/Router.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/Router.stories.tsx index e64221ea8a48..7b1d5b0ec0c9 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/Router.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/Router.stories.tsx @@ -1,7 +1,10 @@ import React from 'react'; + import type { Meta, StoryObj } from '@storybook/react'; -import { expect, within, userEvent } from '@storybook/test'; +import { expect, userEvent, within } from '@storybook/test'; + import { getRouter } from '@storybook/experimental-nextjs-vite/router.mock'; + import Router, { useRouter } from 'next/router'; function Component() { diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.stories.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.stories.tsx index 941ffb2d3166..944bc42d8667 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.stories.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.stories.tsx @@ -1,9 +1,11 @@ import React from 'react'; + import type { Meta, StoryObj } from '@storybook/react'; -import { expect, within, userEvent, waitFor } from '@storybook/test'; -import { cookies } from '@storybook/experimental-nextjs-vite/headers.mock'; +import { expect, userEvent, waitFor, within } from '@storybook/test'; + import { revalidatePath } from '@storybook/experimental-nextjs-vite/cache.mock'; -import { redirect, getRouter } from '@storybook/experimental-nextjs-vite/navigation.mock'; +import { cookies } from '@storybook/experimental-nextjs-vite/headers.mock'; +import { getRouter, redirect } from '@storybook/experimental-nextjs-vite/navigation.mock'; import { accessRoute, login, logout } from './ServerActions'; diff --git a/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.tsx b/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.tsx index ffeba72ab848..5e1b3c7227dc 100644 --- a/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.tsx +++ b/code/frameworks/experimental-nextjs-vite/template/stories/ServerActions.tsx @@ -1,7 +1,7 @@ 'use server'; -import { cookies } from 'next/headers'; import { revalidatePath } from 'next/cache'; +import { cookies } from 'next/headers'; import { redirect } from 'next/navigation'; export async function accessRoute() { diff --git a/code/frameworks/experimental-nextjs-vite/vitest.config.ts b/code/frameworks/experimental-nextjs-vite/vitest.config.ts index ea8b4ef14350..edf3cc3ea035 100644 --- a/code/frameworks/experimental-nextjs-vite/vitest.config.ts +++ b/code/frameworks/experimental-nextjs-vite/vitest.config.ts @@ -1,5 +1,6 @@ // eslint-disable-next-line import/no-extraneous-dependencies import { defineConfig, mergeConfig } from 'vitest/config'; + import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( From d1ed7baf30bfdfc9f680fe85e4d9d046ac8bc0dd Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Mon, 12 Aug 2024 10:25:32 +0200 Subject: [PATCH 17/17] Fix nextjs/prerelease sandbox --- code/lib/cli-storybook/src/sandbox-templates.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/lib/cli-storybook/src/sandbox-templates.ts b/code/lib/cli-storybook/src/sandbox-templates.ts index 7b15a7111e37..e69ccedb2a0a 100644 --- a/code/lib/cli-storybook/src/sandbox-templates.ts +++ b/code/lib/cli-storybook/src/sandbox-templates.ts @@ -198,6 +198,9 @@ const baseTemplates = { }, modifications: { extraDependencies: ['server-only'], + mainConfig: { + features: { experimentalRSC: true }, + }, }, skipTasks: ['e2e-tests-dev', 'bench'], },