diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cc88ce6182fd..8aa7928748bc 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -154,18 +154,6 @@ jobs: git merge ${{ github.ref_name }} git push origin ${{ steps.target.outputs.target }} - - name: Ensure `next` is a minor version ahead of `main` - if: steps.target.outputs.target == 'main' - run: | - git checkout next - git pull - - yarn release:ensure-next-ahead --main-version "${{ steps.version.outputs.current-version }}" - - git add .. - git diff --staged --quiet || git commit -m "Bump next to be one minor ahead of main [skip ci]" - git push origin next - - name: Sync CHANGELOG.md from `main` to `next` if: steps.target.outputs.target == 'main' working-directory: . diff --git a/CHANGELOG.prerelease.md b/CHANGELOG.prerelease.md index c2e3945449d7..9fd08c30bb5d 100644 --- a/CHANGELOG.prerelease.md +++ b/CHANGELOG.prerelease.md @@ -1,3 +1,16 @@ +## 8.2.0-alpha.1 + +- CLI: Add optional `--dev` and `--no-dev` options to `storybook init` CLI - [#26918](https://github.com/storybookjs/storybook/pull/26918), thanks @fastfrwrd! +- CLI: Include `@storybook/addon-svelte-csf` when initializing new projects - [#27070](https://github.com/storybookjs/storybook/pull/27070), thanks @benmccann! +- Dependency: Upgrade `webpack-virtual-modules` to 0.6.0 - [#27102](https://github.com/storybookjs/storybook/pull/27102), thanks @fyodorovandrei! +- Dependency: bump `markdown-to-jsx` to v7.4.5 - [#26694](https://github.com/storybookjs/storybook/pull/26694), thanks @xyy94813! +- Docgen: Only add react-docgen info when a component is defined in the file - [#26967](https://github.com/storybookjs/storybook/pull/26967), thanks @glenjamin! +- Docs: Fix MDX Stories block tag-filtering behavior - [#27144](https://github.com/storybookjs/storybook/pull/27144), thanks @shilman! +- Docs: Fix Subtitle block when no `of` prop passed - [#27147](https://github.com/storybookjs/storybook/pull/27147), thanks @JReinhold! +- Next.js: Add typing for NextImage to main framework options type - [#27105](https://github.com/storybookjs/storybook/pull/27105), thanks @valentinpalkovic! +- Next.js: Avoid conflicts with the raw loader - [#27093](https://github.com/storybookjs/storybook/pull/27093), thanks @seanparmelee! +- Types: Fix typing for main.framework/builder fields - [#27088](https://github.com/storybookjs/storybook/pull/27088), thanks @valentinpalkovic! + ## 8.2.0-alpha.0 diff --git a/CONTRIBUTING/prerelease-workflow-inputs.png b/CONTRIBUTING/prerelease-workflow-inputs.png index 55bb79e2b09c..b12f1225f593 100644 Binary files a/CONTRIBUTING/prerelease-workflow-inputs.png and b/CONTRIBUTING/prerelease-workflow-inputs.png differ diff --git a/code/addons/docs/docs/docspage.md b/code/addons/docs/docs/docspage.md index 5e89251c2ede..603652331eb6 100644 --- a/code/addons/docs/docs/docspage.md +++ b/code/addons/docs/docs/docspage.md @@ -165,10 +165,10 @@ You can override this default behavior in `.storybook/preview.js` (or in any of ```js export const parameters = { docs: { - source: { - state: 'open', - }, - }, + canvas: { + sourceState: 'shown' + } + } }; ``` diff --git a/code/addons/docs/src/preview.ts b/code/addons/docs/src/preview.ts index 7a352b15b0a6..991a7811b472 100644 --- a/code/addons/docs/src/preview.ts +++ b/code/addons/docs/src/preview.ts @@ -22,9 +22,7 @@ export const parameters: any = { filter: (story: PreparedStory) => { const tags = story.tags || []; return ( - tags.includes('autodocs') && - tags.filter((tag) => excludeTags[tag]).length === 0 && - !story.parameters.docs?.disable + tags.filter((tag) => excludeTags[tag]).length === 0 && !story.parameters.docs?.disable ); }, }, diff --git a/code/builders/builder-webpack5/package.json b/code/builders/builder-webpack5/package.json index 41ed49934b46..f70129c94c12 100644 --- a/code/builders/builder-webpack5/package.json +++ b/code/builders/builder-webpack5/package.json @@ -96,13 +96,12 @@ "webpack": "5", "webpack-dev-middleware": "^6.1.2", "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.5.0" + "webpack-virtual-modules": "^0.6.0" }, "devDependencies": { "@types/pretty-hrtime": "^1.0.0", "@types/terser-webpack-plugin": "^5.2.0", "@types/webpack-hot-middleware": "^2.25.6", - "@types/webpack-virtual-modules": "^0.1.1", "pretty-hrtime": "^1.0.3", "slash": "^5.0.0", "typescript": "^5.3.2" diff --git a/code/frameworks/angular/src/types.ts b/code/frameworks/angular/src/types.ts index 926213e222b6..a965368eaf94 100644 --- a/code/frameworks/angular/src/types.ts +++ b/code/frameworks/angular/src/types.ts @@ -7,9 +7,10 @@ import { BuilderOptions, TypescriptOptions as TypescriptOptionsBuilder, } from '@storybook/builder-webpack5'; +import { CompatibleString } from '@storybook/types'; -type FrameworkName = '@storybook/angular'; -type BuilderName = '@storybook/builder-webpack5'; +type FrameworkName = CompatibleString<'@storybook/angular'>; +type BuilderName = CompatibleString<'@storybook/builder-webpack5'>; export type FrameworkOptions = AngularOptions & { builder?: BuilderOptions; diff --git a/code/frameworks/ember/src/types.ts b/code/frameworks/ember/src/types.ts index 2c2605f286af..6106e1391199 100644 --- a/code/frameworks/ember/src/types.ts +++ b/code/frameworks/ember/src/types.ts @@ -7,9 +7,10 @@ import type { BuilderOptions, TypescriptOptions as TypescriptOptionsBuilder, } from '@storybook/builder-webpack5'; +import type { CompatibleString } from '@storybook/types'; -type FrameworkName = '@storybook/ember-webpack5'; -type BuilderName = '@storybook/builder-webpack5'; +type FrameworkName = CompatibleString<'@storybook/ember-webpack5'>; +type BuilderName = CompatibleString<'@storybook/builder-webpack5'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/html-vite/package.json b/code/frameworks/html-vite/package.json index 9e73018e56f4..6d5f50f5efc4 100644 --- a/code/frameworks/html-vite/package.json +++ b/code/frameworks/html-vite/package.json @@ -51,6 +51,7 @@ "@storybook/core-server": "workspace:*", "@storybook/html": "workspace:*", "@storybook/node-logger": "workspace:*", + "@storybook/types": "workspace:*", "magic-string": "^0.30.0" }, "devDependencies": { diff --git a/code/frameworks/html-vite/src/types.ts b/code/frameworks/html-vite/src/types.ts index db508a143b53..d25f61997d14 100644 --- a/code/frameworks/html-vite/src/types.ts +++ b/code/frameworks/html-vite/src/types.ts @@ -1,8 +1,8 @@ -import type { StorybookConfig as StorybookConfigBase } from '@storybook/types'; +import type { StorybookConfig as StorybookConfigBase, CompatibleString } from '@storybook/types'; import type { StorybookConfigVite, BuilderOptions } from '@storybook/builder-vite'; -type FrameworkName = '@storybook/html-vite'; -type BuilderName = '@storybook/builder-vite'; +type FrameworkName = CompatibleString<'@storybook/html-vite'>; +type BuilderName = CompatibleString<'@storybook/builder-vite'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/html-webpack5/package.json b/code/frameworks/html-webpack5/package.json index 87bf31e2d235..e2256056d09f 100644 --- a/code/frameworks/html-webpack5/package.json +++ b/code/frameworks/html-webpack5/package.json @@ -52,6 +52,7 @@ "@storybook/global": "^5.0.0", "@storybook/html": "workspace:*", "@storybook/preset-html-webpack": "workspace:*", + "@storybook/types": "workspace:*", "@types/node": "^18.0.0" }, "devDependencies": { diff --git a/code/frameworks/html-webpack5/src/types.ts b/code/frameworks/html-webpack5/src/types.ts index 2360ef4ac9e6..eb0fa25b9ebd 100644 --- a/code/frameworks/html-webpack5/src/types.ts +++ b/code/frameworks/html-webpack5/src/types.ts @@ -7,9 +7,10 @@ import type { BuilderOptions, TypescriptOptions as TypescriptOptionsBuilder, } from '@storybook/builder-webpack5'; +import type { CompatibleString } from '@storybook/types'; -type FrameworkName = '@storybook/html-webpack5'; -type BuilderName = '@storybook/builder-webpack5'; +type FrameworkName = CompatibleString<'@storybook/html-webpack5'>; +type BuilderName = CompatibleString<'@storybook/builder-webpack5'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/nextjs/src/swc/loader.ts b/code/frameworks/nextjs/src/swc/loader.ts index d1b5c6e7ab98..c9ca896d533b 100644 --- a/code/frameworks/nextjs/src/swc/loader.ts +++ b/code/frameworks/nextjs/src/swc/loader.ts @@ -4,9 +4,10 @@ import type { Options } from '@storybook/types'; import type { NextConfig } from 'next'; import path from 'path'; import loadJsConfig from 'next/dist/build/load-jsconfig'; +import type { Configuration as WebpackConfig } from 'webpack'; export const configureSWCLoader = async ( - baseConfig: any, + baseConfig: WebpackConfig, options: Options, nextConfig: NextConfig ) => { @@ -18,33 +19,38 @@ export const configureSWCLoader = async ( const { jsConfig } = await loadJsConfig(dir, nextConfig as any); - baseConfig.module.rules = [ - ...baseConfig.module.rules, - { - test: /\.((c|m)?(j|t)sx?)$/, - include: [getProjectRoot()], - exclude: [/(node_modules)/, ...Object.keys(virtualModules)], - enforce: 'post', - use: { - // we use our own patch because we need to remove tracing from the original code - // which is not possible otherwise - loader: require.resolve('./swc/next-swc-loader-patch.js'), - options: { - isServer: false, - rootDir: dir, - pagesDir: `${dir}/pages`, - appDir: `${dir}/apps`, - hasReactRefresh: isDevelopment, - jsConfig, - nextConfig, - supportedBrowsers: require('next/dist/build/utils').getSupportedBrowsers( - dir, - isDevelopment - ), - swcCacheDir: path.join(dir, nextConfig?.distDir ?? '.next', 'cache', 'swc'), - bundleTarget: 'default', - }, + const rawRule = baseConfig.module?.rules?.find( + (rule) => typeof rule === 'object' && rule?.resourceQuery?.toString() === '/raw/' + ); + + if (rawRule && typeof rawRule === 'object') { + rawRule.test = /^(?!__barrel_optimize__)/; + } + + baseConfig.module?.rules?.push({ + test: /\.((c|m)?(j|t)sx?)$/, + include: [getProjectRoot()], + exclude: [/(node_modules)/, ...Object.keys(virtualModules)], + enforce: 'post', + use: { + // we use our own patch because we need to remove tracing from the original code + // which is not possible otherwise + loader: require.resolve('./swc/next-swc-loader-patch.js'), + options: { + isServer: false, + rootDir: dir, + pagesDir: `${dir}/pages`, + appDir: `${dir}/apps`, + hasReactRefresh: isDevelopment, + jsConfig, + nextConfig, + supportedBrowsers: require('next/dist/build/utils').getSupportedBrowsers( + dir, + isDevelopment + ), + swcCacheDir: path.join(dir, nextConfig?.distDir ?? '.next', 'cache', 'swc'), + bundleTarget: 'default', }, }, - ]; + }); }; diff --git a/code/frameworks/nextjs/src/types.ts b/code/frameworks/nextjs/src/types.ts index 4707d03d27e8..9c7fcd9efd7d 100644 --- a/code/frameworks/nextjs/src/types.ts +++ b/code/frameworks/nextjs/src/types.ts @@ -8,13 +8,15 @@ import type { BuilderOptions, TypescriptOptions as TypescriptOptionsBuilder, } from '@storybook/builder-webpack5'; +import type { CompatibleString } from '@storybook/types'; +import type * as NextImage from 'next/image'; -type FrameworkName = '@storybook/nextjs'; -type BuilderName = '@storybook/builder-webpack5'; +type FrameworkName = CompatibleString<'@storybook/nextjs'>; +type BuilderName = CompatibleString<'@storybook/builder-webpack5'>; export type FrameworkOptions = ReactOptions & { nextConfigPath?: string; - + image?: Partial; builder?: BuilderOptions; }; diff --git a/code/frameworks/preact-vite/package.json b/code/frameworks/preact-vite/package.json index a3e73f638dc8..cc183ee6c7e1 100644 --- a/code/frameworks/preact-vite/package.json +++ b/code/frameworks/preact-vite/package.json @@ -48,7 +48,8 @@ }, "dependencies": { "@storybook/builder-vite": "workspace:*", - "@storybook/preact": "workspace:*" + "@storybook/preact": "workspace:*", + "@storybook/types": "workspace:*" }, "devDependencies": { "@types/node": "^18.0.0", diff --git a/code/frameworks/preact-vite/src/types.ts b/code/frameworks/preact-vite/src/types.ts index d654f5e13bbc..36481753d4e5 100644 --- a/code/frameworks/preact-vite/src/types.ts +++ b/code/frameworks/preact-vite/src/types.ts @@ -1,8 +1,8 @@ -import type { StorybookConfig as StorybookConfigBase } from '@storybook/types'; +import type { CompatibleString, StorybookConfig as StorybookConfigBase } from '@storybook/types'; import type { StorybookConfigVite, BuilderOptions } from '@storybook/builder-vite'; -type FrameworkName = '@storybook/preact-vite'; -type BuilderName = '@storybook/builder-vite'; +type FrameworkName = CompatibleString<'@storybook/preact-vite'>; +type BuilderName = CompatibleString<'@storybook/builder-vite'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/preact-webpack5/package.json b/code/frameworks/preact-webpack5/package.json index d17d4ad1b7fb..527aa31175c7 100644 --- a/code/frameworks/preact-webpack5/package.json +++ b/code/frameworks/preact-webpack5/package.json @@ -51,6 +51,7 @@ "@storybook/core-common": "workspace:*", "@storybook/preact": "workspace:*", "@storybook/preset-preact-webpack": "workspace:*", + "@storybook/types": "workspace:*", "@types/node": "^18.0.0" }, "devDependencies": { diff --git a/code/frameworks/preact-webpack5/src/types.ts b/code/frameworks/preact-webpack5/src/types.ts index 2d66b8576166..cad7d38ac6c2 100644 --- a/code/frameworks/preact-webpack5/src/types.ts +++ b/code/frameworks/preact-webpack5/src/types.ts @@ -7,9 +7,10 @@ import type { BuilderOptions, TypescriptOptions as TypescriptOptionsBuilder, } from '@storybook/builder-webpack5'; +import type { CompatibleString } from '@storybook/types'; -type FrameworkName = '@storybook/preact-webpack5'; -type BuilderName = '@storybook/builder-webpack5'; +type FrameworkName = CompatibleString<'@storybook/preact-webpack5'>; +type BuilderName = CompatibleString<'@storybook/builder-webpack5'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/react-vite/package.json b/code/frameworks/react-vite/package.json index af59651beb5a..3d21f2ef800d 100644 --- a/code/frameworks/react-vite/package.json +++ b/code/frameworks/react-vite/package.json @@ -52,6 +52,7 @@ "@storybook/builder-vite": "workspace:*", "@storybook/node-logger": "workspace:*", "@storybook/react": "workspace:*", + "@storybook/types": "workspace:*", "find-up": "^5.0.0", "magic-string": "^0.30.0", "react-docgen": "^7.0.0", diff --git a/code/frameworks/react-vite/src/plugins/docgen-handlers/actualNameHandler.ts b/code/frameworks/react-vite/src/plugins/docgen-handlers/actualNameHandler.ts index 01889ddf9dcf..7fe133be6bb9 100644 --- a/code/frameworks/react-vite/src/plugins/docgen-handlers/actualNameHandler.ts +++ b/code/frameworks/react-vite/src/plugins/docgen-handlers/actualNameHandler.ts @@ -15,6 +15,8 @@ import { utils } from 'react-docgen'; const { getNameOrValue, isReactForwardRefCall } = utils; const actualNameHandler: Handler = function actualNameHandler(documentation, componentDefinition) { + documentation.set('definedInFile', componentDefinition.hub.file.opts.filename); + if ( (componentDefinition.isClassDeclaration() || componentDefinition.isFunctionDeclaration()) && componentDefinition.has('id') diff --git a/code/frameworks/react-vite/src/plugins/react-docgen.ts b/code/frameworks/react-vite/src/plugins/react-docgen.ts index c59861e4ff43..f41191dc0024 100644 --- a/code/frameworks/react-vite/src/plugins/react-docgen.ts +++ b/code/frameworks/react-vite/src/plugins/react-docgen.ts @@ -20,7 +20,7 @@ import { } from './docgen-resolver'; import { logger } from '@storybook/node-logger'; -type DocObj = Documentation & { actualName: string }; +type DocObj = Documentation & { actualName: string; definedInFile: string }; // TODO: None of these are able to be overridden, so `default` is aspirational here. const defaultHandlers = Object.values(docgenHandlers).map((handler) => handler); @@ -71,8 +71,8 @@ export async function reactDocgen({ const s = new MagicString(src); docgenResults.forEach((info) => { - const { actualName, ...docgenInfo } = info; - if (actualName) { + const { actualName, definedInFile, ...docgenInfo } = info; + if (actualName && definedInFile == id) { const docNode = JSON.stringify(docgenInfo); s.append(`;${actualName}.__docgenInfo=${docNode}`); } diff --git a/code/frameworks/react-vite/src/types.ts b/code/frameworks/react-vite/src/types.ts index 2499ae4bf93a..79c704f1e914 100644 --- a/code/frameworks/react-vite/src/types.ts +++ b/code/frameworks/react-vite/src/types.ts @@ -1,12 +1,13 @@ import type { + CompatibleString, StorybookConfig as StorybookConfigBase, TypescriptOptions as TypescriptOptionsBase, } from '@storybook/types'; import type { StorybookConfigVite, BuilderOptions } from '@storybook/builder-vite'; import type docgenTypescript from '@joshwooding/vite-plugin-react-docgen-typescript'; -type FrameworkName = '@storybook/react-vite'; -type BuilderName = '@storybook/builder-vite'; +type FrameworkName = CompatibleString<'@storybook/react-vite'>; +type BuilderName = CompatibleString<'@storybook/builder-vite'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/react-webpack5/package.json b/code/frameworks/react-webpack5/package.json index 9430f243625e..a76d2d007aa1 100644 --- a/code/frameworks/react-webpack5/package.json +++ b/code/frameworks/react-webpack5/package.json @@ -50,6 +50,7 @@ "@storybook/builder-webpack5": "workspace:*", "@storybook/preset-react-webpack": "workspace:*", "@storybook/react": "workspace:*", + "@storybook/types": "workspace:*", "@types/node": "^18.0.0" }, "peerDependencies": { diff --git a/code/frameworks/react-webpack5/src/types.ts b/code/frameworks/react-webpack5/src/types.ts index 7e50ef23aba4..fa5a70f8f444 100644 --- a/code/frameworks/react-webpack5/src/types.ts +++ b/code/frameworks/react-webpack5/src/types.ts @@ -8,9 +8,10 @@ import type { BuilderOptions, TypescriptOptions as TypescriptOptionsBuilder, } from '@storybook/builder-webpack5'; +import type { CompatibleString } from '@storybook/types'; -type FrameworkName = '@storybook/react-webpack5'; -type BuilderName = '@storybook/builder-webpack5'; +type FrameworkName = CompatibleString<'@storybook/react-webpack5'>; +type BuilderName = CompatibleString<'@storybook/builder-webpack5'>; export type FrameworkOptions = ReactOptions & { builder?: BuilderOptions; diff --git a/code/frameworks/server-webpack5/package.json b/code/frameworks/server-webpack5/package.json index 4d48bb64a8f4..8e0c63729a9e 100644 --- a/code/frameworks/server-webpack5/package.json +++ b/code/frameworks/server-webpack5/package.json @@ -51,6 +51,7 @@ "@storybook/core-common": "workspace:*", "@storybook/preset-server-webpack": "workspace:*", "@storybook/server": "workspace:*", + "@storybook/types": "workspace:*", "@types/node": "^18.0.0" }, "devDependencies": { diff --git a/code/frameworks/server-webpack5/src/types.ts b/code/frameworks/server-webpack5/src/types.ts index 63ecb28ab897..1374b9788c61 100644 --- a/code/frameworks/server-webpack5/src/types.ts +++ b/code/frameworks/server-webpack5/src/types.ts @@ -7,9 +7,10 @@ import type { BuilderOptions, TypescriptOptions as TypescriptOptionsBuilder, } from '@storybook/builder-webpack5'; +import type { CompatibleString } from '@storybook/types'; -type FrameworkName = '@storybook/server-webpack5'; -type BuilderName = '@storybook/builder-webpack5'; +type FrameworkName = CompatibleString<'@storybook/server-webpack5'>; +type BuilderName = CompatibleString<'@storybook/builder-webpack5'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/svelte-vite/package.json b/code/frameworks/svelte-vite/package.json index 315c4d1d132a..cc7d0b1efd9f 100644 --- a/code/frameworks/svelte-vite/package.json +++ b/code/frameworks/svelte-vite/package.json @@ -50,6 +50,7 @@ "@storybook/builder-vite": "workspace:*", "@storybook/node-logger": "workspace:*", "@storybook/svelte": "workspace:*", + "@storybook/types": "workspace:*", "magic-string": "^0.30.0", "svelte-preprocess": "^5.1.1", "sveltedoc-parser": "^4.2.1", diff --git a/code/frameworks/svelte-vite/src/types.ts b/code/frameworks/svelte-vite/src/types.ts index 8d4ccb8cc9cb..6fe0c01de2c3 100644 --- a/code/frameworks/svelte-vite/src/types.ts +++ b/code/frameworks/svelte-vite/src/types.ts @@ -1,8 +1,8 @@ -import type { StorybookConfig as StorybookConfigBase } from '@storybook/types'; +import type { CompatibleString, StorybookConfig as StorybookConfigBase } from '@storybook/types'; import type { StorybookConfigVite, BuilderOptions } from '@storybook/builder-vite'; -type FrameworkName = '@storybook/svelte-vite'; -type BuilderName = '@storybook/builder-vite'; +type FrameworkName = CompatibleString<'@storybook/svelte-vite'>; +type BuilderName = CompatibleString<'@storybook/builder-vite'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/svelte-webpack5/package.json b/code/frameworks/svelte-webpack5/package.json index 14aed9c8297c..e8f91e470712 100644 --- a/code/frameworks/svelte-webpack5/package.json +++ b/code/frameworks/svelte-webpack5/package.json @@ -50,7 +50,8 @@ "@storybook/builder-webpack5": "workspace:*", "@storybook/core-common": "workspace:*", "@storybook/preset-svelte-webpack": "workspace:*", - "@storybook/svelte": "workspace:*" + "@storybook/svelte": "workspace:*", + "@storybook/types": "workspace:*" }, "devDependencies": { "svelte": "^4.0.0", diff --git a/code/frameworks/svelte-webpack5/src/types.ts b/code/frameworks/svelte-webpack5/src/types.ts index d5c0578faa32..6c285d94caa9 100644 --- a/code/frameworks/svelte-webpack5/src/types.ts +++ b/code/frameworks/svelte-webpack5/src/types.ts @@ -8,9 +8,10 @@ import type { BuilderOptions, TypescriptOptions as TypescriptOptionsBuilder, } from '@storybook/builder-webpack5'; +import type { CompatibleString } from '@storybook/types'; -type FrameworkName = '@storybook/svelte-webpack5'; -type BuilderName = '@storybook/builder-webpack5'; +type FrameworkName = CompatibleString<'@storybook/svelte-webpack5'>; +type BuilderName = CompatibleString<'@storybook/builder-webpack5'>; export type FrameworkOptions = SvelteOptions & { builder?: BuilderOptions; diff --git a/code/frameworks/sveltekit/package.json b/code/frameworks/sveltekit/package.json index e29336eee840..c8be3504bf78 100644 --- a/code/frameworks/sveltekit/package.json +++ b/code/frameworks/sveltekit/package.json @@ -56,7 +56,8 @@ "@storybook/addon-actions": "workspace:*", "@storybook/builder-vite": "workspace:*", "@storybook/svelte": "workspace:*", - "@storybook/svelte-vite": "workspace:*" + "@storybook/svelte-vite": "workspace:*", + "@storybook/types": "workspace:*" }, "devDependencies": { "@types/node": "^18.0.0", diff --git a/code/frameworks/sveltekit/src/types.ts b/code/frameworks/sveltekit/src/types.ts index c3f04a22bc82..a41c333ccc5f 100644 --- a/code/frameworks/sveltekit/src/types.ts +++ b/code/frameworks/sveltekit/src/types.ts @@ -1,10 +1,10 @@ import type { BuilderOptions, StorybookConfigVite } from '@storybook/builder-vite'; -import type { StorybookConfig as StorybookConfigBase } from '@storybook/types'; +import type { CompatibleString, StorybookConfig as StorybookConfigBase } from '@storybook/types'; import type { enhance } from './mocks/app/forms'; import type { goto, invalidate, invalidateAll } from './mocks/app/navigation'; -type FrameworkName = '@storybook/sveltekit'; -type BuilderName = '@storybook/builder-vite'; +type FrameworkName = CompatibleString<'@storybook/sveltekit'>; +type BuilderName = CompatibleString<'@storybook/builder-vite'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/vue3-vite/package.json b/code/frameworks/vue3-vite/package.json index 100c41e97ac9..b16576240272 100644 --- a/code/frameworks/vue3-vite/package.json +++ b/code/frameworks/vue3-vite/package.json @@ -49,6 +49,7 @@ "dependencies": { "@storybook/builder-vite": "workspace:*", "@storybook/core-server": "workspace:*", + "@storybook/types": "workspace:*", "@storybook/vue3": "workspace:*", "find-package-json": "^1.2.0", "magic-string": "^0.30.0", diff --git a/code/frameworks/vue3-vite/src/types.ts b/code/frameworks/vue3-vite/src/types.ts index c75fee101de8..09806828a421 100644 --- a/code/frameworks/vue3-vite/src/types.ts +++ b/code/frameworks/vue3-vite/src/types.ts @@ -1,10 +1,10 @@ import type { BuilderOptions, StorybookConfigVite } from '@storybook/builder-vite'; -import type { StorybookConfig as StorybookConfigBase } from '@storybook/types'; +import type { CompatibleString, StorybookConfig as StorybookConfigBase } from '@storybook/types'; import type { ComponentMeta } from 'vue-component-meta'; import type { ComponentDoc } from 'vue-docgen-api'; -type FrameworkName = '@storybook/vue3-vite'; -type BuilderName = '@storybook/builder-vite'; +type FrameworkName = CompatibleString<'@storybook/vue3-vite'>; +type BuilderName = CompatibleString<'@storybook/builder-vite'>; /** * Available docgen plugins for vue. diff --git a/code/frameworks/vue3-webpack5/package.json b/code/frameworks/vue3-webpack5/package.json index 79db6fa68c33..635760a472ee 100644 --- a/code/frameworks/vue3-webpack5/package.json +++ b/code/frameworks/vue3-webpack5/package.json @@ -50,6 +50,7 @@ "@storybook/builder-webpack5": "workspace:*", "@storybook/core-common": "workspace:*", "@storybook/preset-vue3-webpack": "workspace:*", + "@storybook/types": "workspace:*", "@storybook/vue3": "workspace:*", "@types/node": "^18.0.0" }, diff --git a/code/frameworks/vue3-webpack5/src/types.ts b/code/frameworks/vue3-webpack5/src/types.ts index bdae08526600..9c9352eabfda 100644 --- a/code/frameworks/vue3-webpack5/src/types.ts +++ b/code/frameworks/vue3-webpack5/src/types.ts @@ -7,9 +7,10 @@ import type { BuilderOptions, TypescriptOptions as TypescriptOptionsBuilder, } from '@storybook/builder-webpack5'; +import type { CompatibleString } from '@storybook/types'; -type FrameworkName = '@storybook/vue3-webpack5'; -type BuilderName = '@storybook/builder-webpack5'; +type FrameworkName = CompatibleString<'@storybook/vue3-webpack5'>; +type BuilderName = CompatibleString<'@storybook/builder-webpack5'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/web-components-vite/package.json b/code/frameworks/web-components-vite/package.json index 0e33bfa708be..2e50f81ccf89 100644 --- a/code/frameworks/web-components-vite/package.json +++ b/code/frameworks/web-components-vite/package.json @@ -50,6 +50,7 @@ "@storybook/builder-vite": "workspace:*", "@storybook/core-server": "workspace:*", "@storybook/node-logger": "workspace:*", + "@storybook/types": "workspace:*", "@storybook/web-components": "workspace:*", "magic-string": "^0.30.0" }, diff --git a/code/frameworks/web-components-vite/src/types.ts b/code/frameworks/web-components-vite/src/types.ts index 25fd697cb4b3..a43eaabd3161 100644 --- a/code/frameworks/web-components-vite/src/types.ts +++ b/code/frameworks/web-components-vite/src/types.ts @@ -1,8 +1,8 @@ -import type { StorybookConfig as StorybookConfigBase } from '@storybook/types'; +import type { CompatibleString, StorybookConfig as StorybookConfigBase } from '@storybook/types'; import type { StorybookConfigVite, BuilderOptions } from '@storybook/builder-vite'; -type FrameworkName = '@storybook/web-components-vite'; -type BuilderName = '@storybook/builder-vite'; +type FrameworkName = CompatibleString<'@storybook/web-components-vite'>; +type BuilderName = CompatibleString<'@storybook/builder-vite'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/frameworks/web-components-webpack5/package.json b/code/frameworks/web-components-webpack5/package.json index a0787c7fc2f1..352c3614b40c 100644 --- a/code/frameworks/web-components-webpack5/package.json +++ b/code/frameworks/web-components-webpack5/package.json @@ -52,6 +52,7 @@ "dependencies": { "@storybook/builder-webpack5": "workspace:*", "@storybook/core-common": "workspace:*", + "@storybook/types": "workspace:*", "@storybook/web-components": "workspace:*", "@types/node": "^18.0.0" }, diff --git a/code/frameworks/web-components-webpack5/src/types.ts b/code/frameworks/web-components-webpack5/src/types.ts index 01442d08f08a..265b605772c8 100644 --- a/code/frameworks/web-components-webpack5/src/types.ts +++ b/code/frameworks/web-components-webpack5/src/types.ts @@ -1,4 +1,5 @@ import type { + CompatibleString, StorybookConfig as StorybookConfigBase, TypescriptOptions as TypescriptOptionsWebComponents, } from '@storybook/types'; @@ -8,8 +9,8 @@ import type { TypescriptOptions as TypescriptOptionsBuilder, } from '@storybook/builder-webpack5'; -type FrameworkName = '@storybook/web-components-webpack5'; -type BuilderName = '@storybook/builder-webpack5'; +type FrameworkName = CompatibleString<'@storybook/web-components-webpack5'>; +type BuilderName = CompatibleString<'@storybook/builder-webpack5'>; export type FrameworkOptions = { builder?: BuilderOptions; diff --git a/code/lib/cli/rendererAssets/common/assets/accessibility.svg b/code/lib/cli/rendererAssets/common/assets/accessibility.svg index a3288830e348..107e93f83840 100644 --- a/code/lib/cli/rendererAssets/common/assets/accessibility.svg +++ b/code/lib/cli/rendererAssets/common/assets/accessibility.svg @@ -1,5 +1 @@ - - Accessibility - - - \ No newline at end of file +Accessibility \ No newline at end of file diff --git a/code/lib/cli/rendererAssets/common/assets/discord.svg b/code/lib/cli/rendererAssets/common/assets/discord.svg index 1204df998d0e..d638958b66de 100644 --- a/code/lib/cli/rendererAssets/common/assets/discord.svg +++ b/code/lib/cli/rendererAssets/common/assets/discord.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/code/lib/cli/rendererAssets/common/assets/github.svg b/code/lib/cli/rendererAssets/common/assets/github.svg index 158e0268a343..dc513528ca89 100644 --- a/code/lib/cli/rendererAssets/common/assets/github.svg +++ b/code/lib/cli/rendererAssets/common/assets/github.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/code/lib/cli/rendererAssets/common/assets/tutorials.svg b/code/lib/cli/rendererAssets/common/assets/tutorials.svg index 4b2fc7c44b80..b492a9c66f7f 100644 --- a/code/lib/cli/rendererAssets/common/assets/tutorials.svg +++ b/code/lib/cli/rendererAssets/common/assets/tutorials.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/code/lib/cli/rendererAssets/common/assets/youtube.svg b/code/lib/cli/rendererAssets/common/assets/youtube.svg index 33a3a61f611e..a7515d7e9b37 100644 --- a/code/lib/cli/rendererAssets/common/assets/youtube.svg +++ b/code/lib/cli/rendererAssets/common/assets/youtube.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/code/lib/cli/src/generate.ts b/code/lib/cli/src/generate.ts index b5aa64f7f77d..a1a3d83ddfbb 100644 --- a/code/lib/cli/src/generate.ts +++ b/code/lib/cli/src/generate.ts @@ -58,6 +58,17 @@ command('init') .option('-y --yes', 'Answer yes to all prompts') .option('-b --builder ', 'Builder library') .option('-l --linkable', 'Prepare installation for link (contributor helper)') + // due to how Commander handles default values and negated options, we have to elevate the default into Commander, and we have to specify `--dev` + // alongside `--no-dev` even if we are unlikely to directly use `--dev`. https://github.com/tj/commander.js/issues/2068#issuecomment-1804524585 + .option( + '--dev', + 'Launch the development server after completing initialization. Enabled by default', + process.env.CI !== 'true' && process.env.IN_STORYBOOK_SANDBOX !== 'true' + ) + .option( + '--no-dev', + 'Complete the initialization of Storybook without launching the Storybook development server' + ) .action((options: CommandOptions) => { initiate(options).catch(() => process.exit(1)); }); diff --git a/code/lib/cli/src/generators/SVELTE/index.ts b/code/lib/cli/src/generators/SVELTE/index.ts index 136dedfb9c08..d3b4a89a7351 100644 --- a/code/lib/cli/src/generators/SVELTE/index.ts +++ b/code/lib/cli/src/generators/SVELTE/index.ts @@ -3,7 +3,8 @@ import type { Generator } from '../types'; const generator: Generator = async (packageManager, npmOptions, options) => { await baseGenerator(packageManager, npmOptions, options, 'svelte', { - extensions: ['js', 'jsx', 'ts', 'tsx', 'svelte'], + extensions: ['js', 'ts', 'svelte'], + extraAddons: ['@storybook/addon-svelte-csf'], }); }; diff --git a/code/lib/cli/src/generators/SVELTEKIT/index.ts b/code/lib/cli/src/generators/SVELTEKIT/index.ts index 856d1d04c76b..50c440a7922d 100644 --- a/code/lib/cli/src/generators/SVELTEKIT/index.ts +++ b/code/lib/cli/src/generators/SVELTEKIT/index.ts @@ -8,7 +8,10 @@ const generator: Generator = async (packageManager, npmOptions, options) => { npmOptions, { ...options, builder: CoreBuilder.Vite }, 'svelte', - undefined, + { + extensions: ['js', 'ts', 'svelte'], + extraAddons: ['@storybook/addon-svelte-csf'], + }, 'sveltekit' ); }; diff --git a/code/lib/cli/src/generators/types.ts b/code/lib/cli/src/generators/types.ts index 763df2c4d1a6..5a8f7350f9bf 100644 --- a/code/lib/cli/src/generators/types.ts +++ b/code/lib/cli/src/generators/types.ts @@ -53,4 +53,5 @@ export type CommandOptions = { disableTelemetry?: boolean; enableCrashReports?: boolean; debug?: boolean; + dev?: boolean; }; diff --git a/code/lib/cli/src/initiate.ts b/code/lib/cli/src/initiate.ts index 4d83666780b2..9d54c099f19b 100644 --- a/code/lib/cli/src/initiate.ts +++ b/code/lib/cli/src/initiate.ts @@ -405,7 +405,7 @@ export async function doInitiate(options: CommandOptions): Promise< ); return { - shouldRunDev: process.env.CI !== 'true' && process.env.IN_STORYBOOK_SANDBOX !== 'true', + shouldRunDev: !!options.dev, projectType, packageManager, storybookCommand, diff --git a/code/lib/cli/src/sandbox.ts b/code/lib/cli/src/sandbox.ts index d06c633c1a4d..621d62976c10 100644 --- a/code/lib/cli/src/sandbox.ts +++ b/code/lib/cli/src/sandbox.ts @@ -225,6 +225,7 @@ export const sandbox = async ({ process.chdir(templateDestination); // we run doInitiate, instead of initiate, to avoid sending this init event to telemetry, because it's not a real world project await doInitiate({ + dev: process.env.CI !== 'true' && process.env.IN_STORYBOOK_SANBOX !== 'true', ...options, }); process.chdir(before); diff --git a/code/lib/core-events/src/errors/message-reference.png b/code/lib/core-events/src/errors/message-reference.png index b829f93689ea..67590fb408e2 100644 Binary files a/code/lib/core-events/src/errors/message-reference.png and b/code/lib/core-events/src/errors/message-reference.png differ diff --git a/code/lib/core-server/public/favicon.svg b/code/lib/core-server/public/favicon.svg index 684ddb274574..571f90fe99aa 100644 --- a/code/lib/core-server/public/favicon.svg +++ b/code/lib/core-server/public/favicon.svg @@ -1,7 +1 @@ - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/code/lib/types/src/modules/core-common.ts b/code/lib/types/src/modules/core-common.ts index 9a3106931053..f16ef638cbf4 100644 --- a/code/lib/types/src/modules/core-common.ts +++ b/code/lib/types/src/modules/core-common.ts @@ -571,3 +571,15 @@ export interface CoreCommon_StorybookInfo { previewConfig?: string; managerConfig?: string; } + +/** + * Given a generic string type, returns that type but ensures that a string in general is compatible with it. + * We use this construct to ensure that IDEs can provide better autocompletion for string types. + * This is, for example, needed for main config fields, where we want to ensure that the user can provide + * a custom string, but also a string that is compatible with the type. + * @example + * type Framework = CompatibleString<'@storybook/nextjs'> + * const framework: Framework = '@storybook/nextjs'; // valid and will be autocompleted + * const framework: Framework = path.dirname(require.resolve(path.join("@storybook/nextjs", "package.json"))) // valid + */ +export type CompatibleString = T | (string & Record); diff --git a/code/package.json b/code/package.json index ce93ab365302..564f63def713 100644 --- a/code/package.json +++ b/code/package.json @@ -299,5 +299,6 @@ "Dependency Upgrades" ] ] - } + }, + "deferredNextVersion": "8.2.0-alpha.1" } diff --git a/code/presets/react-webpack/src/loaders/react-docgen-loader.ts b/code/presets/react-webpack/src/loaders/react-docgen-loader.ts index ac83e37982de..ba3dd1805999 100644 --- a/code/presets/react-webpack/src/loaders/react-docgen-loader.ts +++ b/code/presets/react-webpack/src/loaders/react-docgen-loader.ts @@ -22,6 +22,7 @@ import { const { getNameOrValue, isReactForwardRefCall } = utils; const actualNameHandler: Handler = function actualNameHandler(documentation, componentDefinition) { + documentation.set('definedInFile', componentDefinition.hub.file.opts.filename); if ( (componentDefinition.isClassDeclaration() || componentDefinition.isFunctionDeclaration()) && componentDefinition.has('id') @@ -58,7 +59,7 @@ const actualNameHandler: Handler = function actualNameHandler(documentation, com } }; -type DocObj = Documentation & { actualName: string }; +type DocObj = Documentation & { actualName: string; definedInFile: string }; const defaultHandlers = Object.values(docgenHandlers).map((handler) => handler); const defaultResolver = new docgenResolver.FindExportedDefinitionsResolver(); @@ -107,8 +108,8 @@ export default async function reactDocgenLoader( const magicString = new MagicString(source); docgenResults.forEach((info) => { - const { actualName, ...docgenInfo } = info; - if (actualName) { + const { actualName, definedInFile, ...docgenInfo } = info; + if (actualName && definedInFile == this.resourcePath) { const docNode = JSON.stringify(docgenInfo); magicString.append(`;${actualName}.__docgenInfo=${docNode}`); } diff --git a/code/renderers/react/src/docs/extractArgTypes.test.ts b/code/renderers/react/src/docs/extractArgTypes.test.ts index 96b750f26525..a51b7aa54382 100644 --- a/code/renderers/react/src/docs/extractArgTypes.test.ts +++ b/code/renderers/react/src/docs/extractArgTypes.test.ts @@ -50,6 +50,7 @@ const annotateWithDocgen = (inputPath: string) => { const skippedTests = [ 'js-class-component', 'js-function-component', + 'js-re-exported-component', 'js-function-component-inline-defaults', 'js-function-component-inline-defaults-no-propTypes', 'ts-function-component', diff --git a/code/renderers/react/template/stories/docgen-components/js-re-exported-component/docgen.snapshot b/code/renderers/react/template/stories/docgen-components/js-re-exported-component/docgen.snapshot new file mode 100644 index 000000000000..c3ad6f276316 --- /dev/null +++ b/code/renderers/react/template/stories/docgen-components/js-re-exported-component/docgen.snapshot @@ -0,0 +1 @@ +export { component } from '../js-function-component/input.jsx'; \ No newline at end of file diff --git a/code/renderers/react/template/stories/docgen-components/js-re-exported-component/input.jsx b/code/renderers/react/template/stories/docgen-components/js-re-exported-component/input.jsx new file mode 100644 index 000000000000..7b7ce9d3c8e9 --- /dev/null +++ b/code/renderers/react/template/stories/docgen-components/js-re-exported-component/input.jsx @@ -0,0 +1,3 @@ +import { component } from '../js-function-component/input.jsx'; + +export { component }; diff --git a/code/renderers/react/template/stories/js-argtypes.stories.jsx b/code/renderers/react/template/stories/js-argtypes.stories.jsx index a72d6771dbeb..2101e61979f3 100644 --- a/code/renderers/react/template/stories/js-argtypes.stories.jsx +++ b/code/renderers/react/template/stories/js-argtypes.stories.jsx @@ -7,6 +7,7 @@ import { ThemeProvider, themes, convert } from '@storybook/theming'; import { component as JsClassComponentComponent } from './docgen-components/js-class-component/input.jsx'; import { component as JsFunctionComponentComponent } from './docgen-components/js-function-component/input.jsx'; +import { component as JsRexportedComponentComponent } from './docgen-components/js-re-exported-component/input.jsx'; import { component as JsFunctionComponentInlineDefaultsComponent } from './docgen-components/js-function-component-inline-defaults/input.jsx'; import { component as JsFunctionComponentInlineDefaultsNoPropTypesComponent } from './docgen-components/js-function-component-inline-defaults-no-propTypes/input.jsx'; import { component as JsProptypesShapeComponent } from './docgen-components/9399-js-proptypes-shape/input.jsx'; @@ -60,6 +61,10 @@ export const JsClassComponent = { parameters: { component: JsClassComponentCompo export const JsFunctionComponent = { parameters: { component: JsFunctionComponentComponent } }; +export const JsRexportedComponent = { + parameters: { component: JsRexportedComponentComponent }, +}; + export const JsFunctionComponentInlineDefaults = { parameters: { component: JsFunctionComponentInlineDefaultsComponent }, }; diff --git a/code/ui/blocks/package.json b/code/ui/blocks/package.json index 75c39a5fcdd3..a0b784fe1e02 100644 --- a/code/ui/blocks/package.json +++ b/code/ui/blocks/package.json @@ -60,7 +60,7 @@ "color-convert": "^2.0.1", "dequal": "^2.0.2", "lodash": "^4.17.21", - "markdown-to-jsx": "7.3.2", + "markdown-to-jsx": "^7.4.5", "memoizerific": "^1.11.3", "polished": "^4.2.2", "react-colorful": "^5.1.2", diff --git a/code/ui/blocks/src/blocks/Stories.stories.tsx b/code/ui/blocks/src/blocks/Stories.stories.tsx index 9462f5f2a2dd..0c91aec638e6 100644 --- a/code/ui/blocks/src/blocks/Stories.stories.tsx +++ b/code/ui/blocks/src/blocks/Stories.stories.tsx @@ -26,3 +26,13 @@ export const DifferentToolbars: Story = { relativeCsfPaths: ['../examples/StoriesParameters.stories'], }, }; +export const NoAutodocs: Story = { + parameters: { + relativeCsfPaths: ['../examples/ButtonNoAutodocs.stories'], + }, +}; +export const SomeAutodocs: Story = { + parameters: { + relativeCsfPaths: ['../examples/ButtonSomeAutodocs.stories'], + }, +}; diff --git a/code/ui/blocks/src/blocks/Stories.tsx b/code/ui/blocks/src/blocks/Stories.tsx index 8681e4151c4d..c2b5c53dc729 100644 --- a/code/ui/blocks/src/blocks/Stories.tsx +++ b/code/ui/blocks/src/blocks/Stories.tsx @@ -34,6 +34,17 @@ export const Stories: FC = ({ title = 'Stories', includePrimary = if (filter) { stories = stories.filter((story) => filter(story, getStoryContext(story))); } + // NOTE: this should be part of the default filter function. However, there is currently + // no way to distinguish a Stories block in an autodocs page from Stories in an MDX file + // making https://github.com/storybookjs/storybook/pull/26634 an unintentional breaking change. + // + // The new behavior here is that if NONE of the stories in the autodocs page are tagged + // with 'autodocs', we show all stories. If ANY of the stories have autodocs then we use + // the new behavior. + const hasAutodocsTaggedStory = stories.some((story) => story.tags?.includes('autodocs')); + if (hasAutodocsTaggedStory) { + stories = stories.filter((story) => story.tags?.includes('autodocs')); + } if (!includePrimary) stories = stories.slice(1); diff --git a/code/ui/blocks/src/blocks/Subtitle.stories.tsx b/code/ui/blocks/src/blocks/Subtitle.stories.tsx index 4fe4a2ef6a19..6ee1e865baba 100644 --- a/code/ui/blocks/src/blocks/Subtitle.stories.tsx +++ b/code/ui/blocks/src/blocks/Subtitle.stories.tsx @@ -99,6 +99,6 @@ export const OfStringMetaAttached: Story = { parameters: { relativeCsfPaths: ['../examples/Button.stories'], attached: true }, }; export const Children: Story = { - parameters: { relativeCsfPaths: ['../examples/Button.stories'], attached: true }, + parameters: { relativeCsfPaths: ['../examples/Button.stories'], attached: false }, render: () => This subtitle is a string passed as a children, }; diff --git a/code/ui/blocks/src/blocks/Subtitle.tsx b/code/ui/blocks/src/blocks/Subtitle.tsx index 9b7556e9c7c6..055ed047cc12 100644 --- a/code/ui/blocks/src/blocks/Subtitle.tsx +++ b/code/ui/blocks/src/blocks/Subtitle.tsx @@ -25,8 +25,17 @@ export const Subtitle: FunctionComponent = (props) => { throw new Error('Unexpected `of={undefined}`, did you mistype a CSF file reference?'); } - const { preparedMeta } = useOf(of || 'meta', ['meta']); - const { componentSubtitle, docs } = preparedMeta.parameters || {}; + let preparedMeta; + try { + preparedMeta = useOf(of || 'meta', ['meta']).preparedMeta; + } catch (error) { + if (children && !error.message.includes('did you forget to use ?')) { + // ignore error about unattached CSF since we can still render children + throw error; + } + } + + const { componentSubtitle, docs } = preparedMeta?.parameters || {}; if (componentSubtitle) { deprecate( diff --git a/code/ui/blocks/src/blocks/Title.tsx b/code/ui/blocks/src/blocks/Title.tsx index 55b85ebad717..28ac06136ef1 100644 --- a/code/ui/blocks/src/blocks/Title.tsx +++ b/code/ui/blocks/src/blocks/Title.tsx @@ -42,7 +42,7 @@ export const Title: FunctionComponent = (props) => { } } - const content = children || extractTitle(preparedMeta.title); + const content = children || extractTitle(preparedMeta?.title); return content ? {content} : null; }; diff --git a/code/ui/blocks/src/examples/ButtonNoAutodocs.stories.tsx b/code/ui/blocks/src/examples/ButtonNoAutodocs.stories.tsx new file mode 100644 index 000000000000..c934e70753f2 --- /dev/null +++ b/code/ui/blocks/src/examples/ButtonNoAutodocs.stories.tsx @@ -0,0 +1,29 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { Button } from './Button'; + +const meta = { + title: 'examples/ButtonNoAutodocs', + component: Button, + argTypes: { + backgroundColor: { control: 'color' }, + }, + parameters: { + chromatic: { disable: true }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Primary: Story = { + args: { + primary: true, + label: 'Button', + }, +}; + +export const Secondary: Story = { + args: { + label: 'Button', + }, +}; diff --git a/code/ui/blocks/src/examples/ButtonSomeAutodocs.stories.tsx b/code/ui/blocks/src/examples/ButtonSomeAutodocs.stories.tsx new file mode 100644 index 000000000000..dd5f7d227f49 --- /dev/null +++ b/code/ui/blocks/src/examples/ButtonSomeAutodocs.stories.tsx @@ -0,0 +1,30 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { Button } from './Button'; + +const meta = { + title: 'examples/ButtonSomeAutodocs', + component: Button, + argTypes: { + backgroundColor: { control: 'color' }, + }, + parameters: { + chromatic: { disable: true }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Primary: Story = { + args: { + primary: true, + label: 'Button', + }, +}; + +export const Secondary: Story = { + tags: ['autodocs'], + args: { + label: 'Button', + }, +}; diff --git a/code/ui/manager/package.json b/code/ui/manager/package.json index 246245d3fcfc..c9e4c1004161 100644 --- a/code/ui/manager/package.json +++ b/code/ui/manager/package.json @@ -95,7 +95,7 @@ "fs-extra": "^11.1.0", "fuse.js": "^3.6.1", "lodash": "^4.17.21", - "markdown-to-jsx": "7.3.2", + "markdown-to-jsx": "^7.4.5", "memoizerific": "^1.11.3", "polished": "^4.2.2", "qs": "^6.10.0", diff --git a/code/yarn.lock b/code/yarn.lock index 2168bf13fdaa..f12c511b2380 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -5605,7 +5605,7 @@ __metadata: color-convert: "npm:^2.0.1" dequal: "npm:^2.0.2" lodash: "npm:^4.17.21" - markdown-to-jsx: "npm:7.3.2" + markdown-to-jsx: "npm:^7.4.5" memoizerific: "npm:^1.11.3" polished: "npm:^4.2.2" react-colorful: "npm:^5.1.2" @@ -5706,7 +5706,6 @@ __metadata: "@types/semver": "npm:^7.3.4" "@types/terser-webpack-plugin": "npm:^5.2.0" "@types/webpack-hot-middleware": "npm:^2.25.6" - "@types/webpack-virtual-modules": "npm:^0.1.1" browser-assert: "npm:^1.2.1" case-sensitive-paths-webpack-plugin: "npm:^2.4.0" cjs-module-lexer: "npm:^1.2.3" @@ -5733,7 +5732,7 @@ __metadata: webpack: "npm:5" webpack-dev-middleware: "npm:^6.1.2" webpack-hot-middleware: "npm:^2.25.1" - webpack-virtual-modules: "npm:^0.5.0" + webpack-virtual-modules: "npm:^0.6.0" peerDependenciesMeta: typescript: optional: true @@ -6152,6 +6151,7 @@ __metadata: "@storybook/core-server": "workspace:*" "@storybook/html": "workspace:*" "@storybook/node-logger": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" magic-string: "npm:^0.30.0" typescript: "npm:^5.3.2" @@ -6167,6 +6167,7 @@ __metadata: "@storybook/global": "npm:^5.0.0" "@storybook/html": "workspace:*" "@storybook/preset-html-webpack": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" typescript: "npm:^5.3.2" languageName: unknown @@ -6294,7 +6295,7 @@ __metadata: fs-extra: "npm:^11.1.0" fuse.js: "npm:^3.6.1" lodash: "npm:^4.17.21" - markdown-to-jsx: "npm:7.3.2" + markdown-to-jsx: "npm:^7.4.5" memoizerific: "npm:^1.11.3" polished: "npm:^4.2.2" qs: "npm:^6.10.0" @@ -6406,6 +6407,7 @@ __metadata: dependencies: "@storybook/builder-vite": "workspace:*" "@storybook/preact": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" typescript: "npm:^5.3.2" vite: "npm:^4.0.0" @@ -6423,6 +6425,7 @@ __metadata: "@storybook/core-common": "workspace:*" "@storybook/preact": "workspace:*" "@storybook/preset-preact-webpack": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" preact: "npm:^10.5.13" typescript: "npm:^5.3.2" @@ -6651,6 +6654,7 @@ __metadata: "@storybook/builder-vite": "workspace:*" "@storybook/node-logger": "workspace:*" "@storybook/react": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" find-up: "npm:^5.0.0" magic-string: "npm:^0.30.0" @@ -6673,6 +6677,7 @@ __metadata: "@storybook/builder-webpack5": "workspace:*" "@storybook/preset-react-webpack": "workspace:*" "@storybook/react": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -6913,6 +6918,7 @@ __metadata: "@storybook/core-common": "workspace:*" "@storybook/preset-server-webpack": "workspace:*" "@storybook/server": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" typescript: "npm:^5.3.2" languageName: unknown @@ -6955,6 +6961,7 @@ __metadata: "@storybook/builder-vite": "workspace:*" "@storybook/node-logger": "workspace:*" "@storybook/svelte": "workspace:*" + "@storybook/types": "workspace:*" "@sveltejs/vite-plugin-svelte": "npm:^3.0.1" "@types/node": "npm:^18.0.0" magic-string: "npm:^0.30.0" @@ -6979,6 +6986,7 @@ __metadata: "@storybook/core-common": "workspace:*" "@storybook/preset-svelte-webpack": "workspace:*" "@storybook/svelte": "workspace:*" + "@storybook/types": "workspace:*" svelte: "npm:^4.0.0" svelte-loader: "npm:^3.1.9" typescript: "npm:^5.3.2" @@ -7023,6 +7031,7 @@ __metadata: "@storybook/builder-vite": "workspace:*" "@storybook/svelte": "workspace:*" "@storybook/svelte-vite": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" typescript: "npm:^5.3.2" vite: "npm:^4.0.0" @@ -7133,6 +7142,7 @@ __metadata: dependencies: "@storybook/builder-vite": "workspace:*" "@storybook/core-server": "workspace:*" + "@storybook/types": "workspace:*" "@storybook/vue3": "workspace:*" "@types/find-package-json": "npm:^1.2.6" "@types/node": "npm:^18.0.0" @@ -7154,6 +7164,7 @@ __metadata: "@storybook/builder-webpack5": "workspace:*" "@storybook/core-common": "workspace:*" "@storybook/preset-vue3-webpack": "workspace:*" + "@storybook/types": "workspace:*" "@storybook/vue3": "workspace:*" "@types/node": "npm:^18.0.0" "@vue/compiler-sfc": "npm:3.0.0" @@ -7197,6 +7208,7 @@ __metadata: "@storybook/builder-vite": "workspace:*" "@storybook/core-server": "workspace:*" "@storybook/node-logger": "workspace:*" + "@storybook/types": "workspace:*" "@storybook/web-components": "workspace:*" "@types/node": "npm:^18.0.0" magic-string: "npm:^0.30.0" @@ -7210,6 +7222,7 @@ __metadata: dependencies: "@storybook/builder-webpack5": "workspace:*" "@storybook/core-common": "workspace:*" + "@storybook/types": "workspace:*" "@storybook/web-components": "workspace:*" "@types/node": "npm:^18.0.0" lit: "npm:2.3.1" @@ -8523,15 +8536,6 @@ __metadata: languageName: node linkType: hard -"@types/webpack-virtual-modules@npm:^0.1.1": - version: 0.1.3 - resolution: "@types/webpack-virtual-modules@npm:0.1.3" - dependencies: - "@types/webpack": "npm:^4" - checksum: 10c0/3ead19e20df409433de7f5244d3c581ba050c691fe0aee0014fac4d9307366791e07c1db5c8beee0bd5010d4e06fd9b600dc9efc27e0aaf7d8daa9ec0714abf6 - languageName: node - linkType: hard - "@types/webpack@npm:^4": version: 4.41.34 resolution: "@types/webpack@npm:4.41.34" @@ -19715,12 +19719,12 @@ __metadata: languageName: node linkType: hard -"markdown-to-jsx@npm:7.3.2": - version: 7.3.2 - resolution: "markdown-to-jsx@npm:7.3.2" +"markdown-to-jsx@npm:^7.4.5": + version: 7.4.5 + resolution: "markdown-to-jsx@npm:7.4.5" peerDependencies: react: ">= 0.14.0" - checksum: 10c0/191b9a9defeed02e12dd340cebf279f577266dac7b34574fa44ce4d64ee8536f9967d455b8303c853f84413feb473118290a6160d8221eeaf3b9e4961b8980e3 + checksum: 10c0/1c917be129a2d7091715cca7230c7adfa457ed3069fb243d6df4f22721749ee1a5a6d7be5d88d8ccbb422cc8c7f12fb87112e24c70da9ea45d9a3b9b62ffbb76 languageName: node linkType: hard @@ -29492,13 +29496,6 @@ __metadata: languageName: node linkType: hard -"webpack-virtual-modules@npm:^0.5.0": - version: 0.5.0 - resolution: "webpack-virtual-modules@npm:0.5.0" - checksum: 10c0/0742e069cd49d91ccd0b59431b3666903d321582c1b1062fa6bdae005c3538af55ff8787ea5eafbf72662f3496d3a879e2c705d55ca0af8283548a925be18484 - languageName: node - linkType: hard - "webpack-virtual-modules@npm:^0.6.0": version: 0.6.1 resolution: "webpack-virtual-modules@npm:0.6.1" diff --git a/docs/api/cli-options.md b/docs/api/cli-options.md index 7177cce8caef..ae2cb3d779f1 100644 --- a/docs/api/cli-options.md +++ b/docs/api/cli-options.md @@ -119,6 +119,7 @@ Options include: | `--debug` | Outputs more logs in the CLI to assist debugging
`storybook init --debug` | | `--disable-telemetry` | Disables Storybook's telemetry. Learn more about it [here](../configure/telemetry.md#how-to-opt-out)
`storybook init --disable-telemetry` | | `--enable-crash-reports` | Enables sending crash reports to Storybook's telemetry. Learn more about it [here](../configure/telemetry.md#crash-reports-disabled-by-default)
`storybook init --enable-crash-reports` | +| `--no-dev` | Complete the initialization of Storybook without running the Storybook dev server
`storybook init --no-dev` | ### `add` diff --git a/docs/api/story-pipeline-playwright-ct.png b/docs/api/story-pipeline-playwright-ct.png index 3f34ef61eb28..615af79387b9 100644 Binary files a/docs/api/story-pipeline-playwright-ct.png and b/docs/api/story-pipeline-playwright-ct.png differ diff --git a/docs/api/story-pipeline.png b/docs/api/story-pipeline.png index 4bfbd1a44e82..21d059741855 100644 Binary files a/docs/api/story-pipeline.png and b/docs/api/story-pipeline.png differ diff --git a/docs/assets/mdx-vs-code-extension-errors.gif b/docs/assets/mdx-vs-code-extension-errors.gif index 834c00436823..f90494df029d 100644 Binary files a/docs/assets/mdx-vs-code-extension-errors.gif and b/docs/assets/mdx-vs-code-extension-errors.gif differ diff --git a/docs/contribute/storybook-reproduction-generator-location.png b/docs/contribute/storybook-reproduction-generator-location.png index d33bd52e2850..516221fc9017 100644 Binary files a/docs/contribute/storybook-reproduction-generator-location.png and b/docs/contribute/storybook-reproduction-generator-location.png differ diff --git a/docs/contribute/storybook-reproduction-generator-template.png b/docs/contribute/storybook-reproduction-generator-template.png index 95a8052eeda9..8065c179ef19 100644 Binary files a/docs/contribute/storybook-reproduction-generator-template.png and b/docs/contribute/storybook-reproduction-generator-template.png differ diff --git a/docs/essentials/addon-themes-example.gif b/docs/essentials/addon-themes-example.gif index f4fc95ef5919..f50bd0d6dab9 100644 Binary files a/docs/essentials/addon-themes-example.gif and b/docs/essentials/addon-themes-example.gif differ diff --git a/docs/snippets/common/test-runner-image-snapshot-testing.js.mdx b/docs/snippets/common/test-runner-image-snapshot-testing.js.mdx index d3fd40334eb1..4056d2a3cded 100644 --- a/docs/snippets/common/test-runner-image-snapshot-testing.js.mdx +++ b/docs/snippets/common/test-runner-image-snapshot-testing.js.mdx @@ -16,7 +16,7 @@ module.exports = { // Waits for the page to be ready before taking a screenshot to ensure consistent results await waitForPageReady(page); - // To capture a screenshot for for different browsers, add page.context().browser().browserType().name() to get the browser name to prefix the file name + // To capture a screenshot for different browsers, add page.context().browser().browserType().name() to get the browser name to prefix the file name const image = await page.screenshot(); expect(image).toMatchImageSnapshot({ customSnapshotsDir, diff --git a/docs/versions/next.json b/docs/versions/next.json index 3062aa7a1fea..697ac1cd38e6 100644 --- a/docs/versions/next.json +++ b/docs/versions/next.json @@ -1 +1 @@ -{"version":"8.2.0-alpha.0","info":{"plain":""}} +{"version":"8.2.0-alpha.1","info":{"plain":"- CLI: Add optional `--dev` and `--no-dev` options to `storybook init` CLI - [#26918](https://github.com/storybookjs/storybook/pull/26918), thanks @fastfrwrd!\n- CLI: Include `@storybook/addon-svelte-csf` when initializing new projects - [#27070](https://github.com/storybookjs/storybook/pull/27070), thanks @benmccann!\n- Dependency: Upgrade `webpack-virtual-modules` to 0.6.0 - [#27102](https://github.com/storybookjs/storybook/pull/27102), thanks @fyodorovandrei!\n- Dependency: bump `markdown-to-jsx` to v7.4.5 - [#26694](https://github.com/storybookjs/storybook/pull/26694), thanks @xyy94813!\n- Docgen: Only add react-docgen info when a component is defined in the file - [#26967](https://github.com/storybookjs/storybook/pull/26967), thanks @glenjamin!\n- Docs: Fix MDX Stories block tag-filtering behavior - [#27144](https://github.com/storybookjs/storybook/pull/27144), thanks @shilman!\n- Docs: Fix Subtitle block when no `of` prop passed - [#27147](https://github.com/storybookjs/storybook/pull/27147), thanks @JReinhold!\n- Next.js: Add typing for NextImage to main framework options type - [#27105](https://github.com/storybookjs/storybook/pull/27105), thanks @valentinpalkovic!\n- Next.js: Avoid conflicts with the raw loader - [#27093](https://github.com/storybookjs/storybook/pull/27093), thanks @seanparmelee!\n- Types: Fix typing for main.framework/builder fields - [#27088](https://github.com/storybookjs/storybook/pull/27088), thanks @valentinpalkovic!"}} diff --git a/docs/writing-tests/test-coverage-storybook.gif b/docs/writing-tests/test-coverage-storybook.gif index 0c155b67d054..060eecb12df3 100644 Binary files a/docs/writing-tests/test-coverage-storybook.gif and b/docs/writing-tests/test-coverage-storybook.gif differ diff --git a/scripts/package.json b/scripts/package.json index 33f76813a950..5c1d6ec3f774 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -19,7 +19,6 @@ "local-registry": "node --loader esbuild-register/loader -r esbuild-register ./run-registry.ts", "publish": "node --loader esbuild-register/loader -r esbuild-register ./sandbox/publish.ts", "release:cancel-preparation-runs": "node --loader esbuild-register/loader -r esbuild-register ./release/cancel-preparation-runs.ts", - "release:ensure-next-ahead": "node --loader esbuild-register/loader -r esbuild-register ./release/ensure-next-ahead.ts", "release:generate-pr-description": "node --loader esbuild-register/loader -r esbuild-register ./release/generate-pr-description.ts", "release:get-changelog-from-file": "node --loader esbuild-register/loader -r esbuild-register ./release/get-changelog-from-file.ts", "release:get-current-version": "node --loader esbuild-register/loader -r esbuild-register ./release/get-current-version.ts", diff --git a/scripts/release/__tests__/ensure-next-ahead.test.ts b/scripts/release/__tests__/ensure-next-ahead.test.ts deleted file mode 100644 index 0b21ebee8447..000000000000 --- a/scripts/release/__tests__/ensure-next-ahead.test.ts +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable no-underscore-dangle */ -import path from 'path'; -import { vi, describe, it, expect, beforeEach } from 'vitest'; -import * as fsExtraOriginal from 'fs-extra'; -import { run as ensureNextAhead } from '../ensure-next-ahead'; -import * as gitClient_ from '../utils/git-client'; -import * as bumpVersion_ from '../version'; - -vi.mock('../utils/git-client'); -vi.mock('../version'); -vi.mock('fs-extra', async () => import('../../../code/__mocks__/fs-extra')); - -const fsExtra = vi.mocked( - fsExtraOriginal as any -); - -const bumpVersion = vi.mocked(bumpVersion_, true); -const gitClient = vi.mocked(gitClient_, true); - -vi.spyOn(console, 'log').mockImplementation(() => {}); -vi.spyOn(console, 'warn').mockImplementation(() => {}); -vi.spyOn(console, 'error').mockImplementation(() => {}); - -const CODE_PACKAGE_JSON_PATH = path.join(__dirname, '..', '..', '..', 'code', 'package.json'); - -describe('Ensure next ahead', () => { - beforeEach(() => { - vi.clearAllMocks(); - gitClient.git.status.mockResolvedValue({ current: 'next' } as any); - fsExtra.__setMockFiles({ - [CODE_PACKAGE_JSON_PATH]: JSON.stringify({ version: '2.0.0' }), - }); - }); - - it('should throw when main-version is missing', async () => { - await expect(ensureNextAhead({})).rejects.toThrowErrorMatchingInlineSnapshot(` - [ZodError: [ - { - "code": "invalid_type", - "expected": "string", - "received": "undefined", - "path": [ - "mainVersion" - ], - "message": "Required" - } -]] - `); - }); - - it('should throw when main-version is not a semver string', async () => { - await expect(ensureNextAhead({ mainVersion: '200' })).rejects - .toThrowErrorMatchingInlineSnapshot(` - [ZodError: [ - { - "code": "custom", - "message": "main-version must be a valid semver version string like '7.4.2'.", - "path": [] - } -]] - `); - }); - - it('should not bump version when next is already ahead of main', async () => { - await expect(ensureNextAhead({ mainVersion: '1.0.0' })).resolves.toBeUndefined(); - expect(bumpVersion.run).not.toHaveBeenCalled(); - }); - - it('should bump version to 3.1.0-alpha.0 when main is 3.0.0 and next is 2.0.0', async () => { - await expect(ensureNextAhead({ mainVersion: '3.0.0' })).resolves.toBeUndefined(); - expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '3.1.0-alpha.0' }); - }); - - it('should bump version to 2.1.0-alpha.0 when main and next are both 2.0.0', async () => { - await expect(ensureNextAhead({ mainVersion: '2.0.0' })).resolves.toBeUndefined(); - expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '2.1.0-alpha.0' }); - }); - - it('should bump version to 2.1.0-alpha.0 when main is 2.0.0 and next is 2.0.0-rc.10', async () => { - fsExtra.__setMockFiles({ - [CODE_PACKAGE_JSON_PATH]: JSON.stringify({ version: '2.0.0-rc.10' }), - }); - - await expect(ensureNextAhead({ mainVersion: '2.0.0' })).resolves.toBeUndefined(); - expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '2.1.0-alpha.0' }); - }); -}); diff --git a/scripts/release/ensure-next-ahead.ts b/scripts/release/ensure-next-ahead.ts deleted file mode 100644 index 308004f031cf..000000000000 --- a/scripts/release/ensure-next-ahead.ts +++ /dev/null @@ -1,102 +0,0 @@ -/** - * This script ensures that next is always one minor ahead of main. - * This is needed when releasing a stable from next. - * Next will be at eg. 7.4.0-alpha.4, and main will be at 7.3.0. - * Then we release 7.4.0 by merging next to latest-release to main. - * We then ensure here that next is bumped to 7.5.0-alpha.0 - without releasing it. - * If this is a patch release bumping main to 7.3.1, next will not be touched because it's already ahead. - */ - -/* eslint-disable no-console */ -import chalk from 'chalk'; -import path from 'path'; -import program from 'commander'; -import semver from 'semver'; -import { z } from 'zod'; -import { readJson } from 'fs-extra'; -import { esMain } from '../utils/esmain'; -import { run as bumpVersion } from './version'; -import { git } from './utils/git-client'; - -program - .name('ensure-next-ahead') - .description('ensure the "next" branch is always a minor version ahead of "main"') - .requiredOption('-M, --main-version ', 'The version currently on the "main" branch'); - -const optionsSchema = z - .object({ - mainVersion: z.string(), - }) - .refine((schema) => semver.valid(schema.mainVersion), { - message: "main-version must be a valid semver version string like '7.4.2'.", - }); - -type Options = { - mainVersion: string; -}; - -const CODE_DIR_PATH = path.join(__dirname, '..', '..', 'code'); -const CODE_PACKAGE_JSON_PATH = path.join(CODE_DIR_PATH, 'package.json'); - -const validateOptions = (options: { [key: string]: any }): options is Options => { - optionsSchema.parse(options); - return true; -}; - -const getCurrentVersion = async () => { - const { version } = await readJson(CODE_PACKAGE_JSON_PATH); - console.log(`📐 Current version of Storybook is ${chalk.green(version)}`); - return version; -}; - -export const run = async (options: unknown) => { - if (!validateOptions(options)) { - return; - } - const { mainVersion } = options; - - const { current: currentGitBranch } = await git.status(); - - if (currentGitBranch !== 'next') { - console.warn( - `🚧 The current branch is not "next" but "${currentGitBranch}", this only really makes sense to run on the "next" branch.` - ); - } - - // Get the current version from code/package.json - const currentNextVersion = await getCurrentVersion(); - if (semver.gt(currentNextVersion, mainVersion)) { - console.log( - `✅ The version on next (${chalk.green( - currentNextVersion - )}) is already ahead of the version on main (${chalk.green(mainVersion)}), no action needed.` - ); - return; - } - - const nextNextVersion = `${semver.inc(mainVersion, 'minor')}-alpha.0`; - - console.log( - `🤜 The version on next (${chalk.green( - currentNextVersion - )}) is behind the version on main (${chalk.green(mainVersion)}), bumping to ${chalk.blue( - nextNextVersion - )}...` - ); - - await bumpVersion({ exact: nextNextVersion }); - - console.log( - `✅ bumped all versions to ${chalk.green( - nextNextVersion - )}, remember to commit and push to next.` - ); -}; - -if (esMain(import.meta.url)) { - const parsed = program.parse(); - run(parsed.opts()).catch((err) => { - console.error(err); - process.exit(1); - }); -} diff --git a/test-storybooks/portable-stories-kitchen-sink/nextjs/public/vercel.svg b/test-storybooks/portable-stories-kitchen-sink/nextjs/public/vercel.svg index d2f84222734f..a7a91feef7e2 100644 --- a/test-storybooks/portable-stories-kitchen-sink/nextjs/public/vercel.svg +++ b/test-storybooks/portable-stories-kitchen-sink/nextjs/public/vercel.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/test-storybooks/portable-stories-kitchen-sink/nextjs/stories/assets/accessibility.svg b/test-storybooks/portable-stories-kitchen-sink/nextjs/stories/assets/accessibility.svg index a3288830e348..107e93f83840 100644 --- a/test-storybooks/portable-stories-kitchen-sink/nextjs/stories/assets/accessibility.svg +++ b/test-storybooks/portable-stories-kitchen-sink/nextjs/stories/assets/accessibility.svg @@ -1,5 +1 @@ - - Accessibility - - - \ No newline at end of file +Accessibility \ No newline at end of file