Merge branch 'next' into docs-csf-factories-fixes

This commit is contained in:
Kyle Gach 2025-02-20 07:51:30 -07:00 committed by GitHub
commit efbb06018a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
110 changed files with 482 additions and 457 deletions

View File

@ -1,3 +1,7 @@
## 8.5.8
- Core: Support `esbuild@^0.25` - [#30574](https://github.com/storybookjs/storybook/pull/30574), thanks @JReinhold!
## 8.5.7
- Tags: Add story/meta usage telemetry - [#30555](https://github.com/storybookjs/storybook/pull/30555), thanks @shilman!

View File

@ -1,3 +1,9 @@
## 8.6.0-beta.4
- Addon-Test: Add telemetry data for Focused Tests - [#30568](https://github.com/storybookjs/storybook/pull/30568), thanks @JReinhold!
- Core: Allow empty render functions in CSF factories - [#30565](https://github.com/storybookjs/storybook/pull/30565), thanks @kasperpeulen!
- Core: Fix undeclared internal dependencies - [#30566](https://github.com/storybookjs/storybook/pull/30566), thanks @kasperpeulen!
## 8.6.0-beta.3
- Addon-A11y: Fix preset loading when loaded via getAbsolutePath - [#30563](https://github.com/storybookjs/storybook/pull/30563), thanks @valentinpalkovic!

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-a11y",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Test component compliance with web accessibility standards",
"keywords": [
"a11y",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-actions",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Get UI feedback when an action is performed on an interactive element",
"keywords": [
"storybook",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-backgrounds",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Switch backgrounds to view components in different settings",
"keywords": [
"addon",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-controls",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Interact with component inputs dynamically in the Storybook UI",
"keywords": [
"addon",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-docs",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Document component usage and properties in Markdown",
"keywords": [
"addon",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-essentials",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Curated addons to bring out the best of Storybook",
"keywords": [
"addon",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-mdx-gfm",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "GitHub Flavored Markdown in Storybook",
"keywords": [
"addon",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-highlight",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Highlight DOM nodes within your stories",
"keywords": [
"storybook-addons",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-interactions",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Automate, test and debug user interactions",
"keywords": [
"storybook-addons",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-jest",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "React storybook addon that show component jest report",
"keywords": [
"addon",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-links",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Link stories together to build demos and prototypes with your UI components",
"keywords": [
"storybook-addons",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-measure",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Inspect layouts by visualizing the box model",
"keywords": [
"storybook-addons",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-onboarding",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook Addon Onboarding - Introduces a new onboarding experience",
"keywords": [
"storybook-addons",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-outline",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Outline all elements with CSS to help with layout placement and alignment",
"keywords": [
"storybook-addons",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-storysource",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "View a storys source code to see how it works and paste into your app",
"keywords": [
"addon",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/experimental-addon-test",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Integrate Vitest with Storybook",
"keywords": [
"storybook-addons",

View File

@ -405,9 +405,9 @@ export default async function postInstall(options: PostinstallOptions) {
);
}
// If there's an existing workspace file, we update that file to include the Storybook test plugin.
// We assume the existing workspaces include the Vite(st) config, so we won't add it.
if (vitestWorkspaceFile) {
// If there's an existing workspace file, we update that file to include the Storybook test plugin.
// We assume the existing workspaces include the Vite(st) config, so we won't add it.
const workspaceTemplate = await loadTemplate('vitest.workspace.template.ts', {
EXTENDS_WORKSPACE: viteConfigFile
? relative(dirname(vitestWorkspaceFile), viteConfigFile)
@ -445,21 +445,26 @@ export default async function postInstall(options: PostinstallOptions) {
logger.line(1);
return;
}
} else if (rootConfig) {
// If there's an existing Vite/Vitest config, we update it to include the Storybook test plugin.
}
// If there's an existing Vite/Vitest config with workspaces, we update it to include the Storybook test plugin.
else if (rootConfig) {
let target, updated;
// For Vitest 3+, we extend the config file, otherwise we fall back to creating a workspace file.
if (isVitest3OrLater) {
const configFile = await fs.readFile(rootConfig, 'utf8');
const hasWorkspaceConfig = configFile.includes('workspace:');
// For Vitest 3+ with an existing workspace option in the config file, we extend the workspace array,
// otherwise we fall back to creating a workspace file.
if (isVitest3OrLater && hasWorkspaceConfig) {
const configTemplate = await loadTemplate('vitest.config.template.ts', {
CONFIG_DIR: options.configDir,
BROWSER_CONFIG: browserConfig,
SETUP_FILE: relative(dirname(rootConfig), vitestSetupFile),
});
const configFile = await fs.readFile(rootConfig, 'utf8');
const source = babelParse(configTemplate);
target = babelParse(configFile);
updated = updateConfigFile(source, target);
}
if (target && updated) {
logger.line(1);
logger.plain(`${step} Updating your ${vitestConfigFile ? 'Vitest' : 'Vite'} config file:`);
@ -502,8 +507,9 @@ export default async function postInstall(options: PostinstallOptions) {
const formattedContent = await formatFileContent(newWorkspaceFile, workspaceTemplate);
await writeFile(newWorkspaceFile, formattedContent);
}
} else {
// If there's no existing Vitest/Vite config, we create a new Vitest config file.
}
// If there's no existing Vitest/Vite config, we create a new Vitest config file.
else {
const newConfigFile = resolve(`vitest.config.${fileExtension}`);
const configTemplate = await loadTemplate('vitest.config.template.ts', {
CONFIG_DIR: options.configDir,

View File

@ -35,4 +35,11 @@ export const modifyErrorMessage = ({ task }: { task: Task }) => {
}
};
// Enable this in 9.0
// beforeAll(() => {
// if (globalThis.globalProjectAnnotations) {
// return globalThis.globalProjectAnnotations.beforeAll();
// }
// });
afterEach(modifyErrorMessage);

View File

@ -5,6 +5,7 @@ import { type RunnerTask, type TaskMeta, type TestContext } from 'vitest';
import {
type Report,
composeConfigs,
composeStory,
getCsfFactoryAnnotations,
} from 'storybook/internal/preview-api';
@ -34,7 +35,7 @@ export const testStory = (
annotations.story,
annotations.meta!,
{ initialGlobals: (await getInitialGlobals?.()) ?? {} },
annotations.preview,
annotations.preview ?? globalThis.globalProjectAnnotations,
exportName
);

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-themes",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Switch between multiple themes for you components in Storybook",
"keywords": [
"css",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-toolbars",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Create your own toolbar items that control story rendering",
"keywords": [
"addon",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/addon-viewport",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Build responsive components by adjusting Storybooks viewport size and orientation",
"keywords": [
"addon",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/builder-vite",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "A plugin to run and build Storybooks with Vite",
"homepage": "https://github.com/storybookjs/storybook/tree/next/code/builders/builder-vite/#readme",
"bugs": {

View File

@ -4,7 +4,7 @@ import type { Options, PreviewAnnotation } from 'storybook/internal/types';
import { dedent } from 'ts-dedent';
import { processPreviewAnnotation } from './utils/process-preview-annotation';
import { SB_VIRTUAL_FILES, getResolvedVirtualModuleId } from './virtual-file-names';
import { SB_VIRTUAL_FILES } from './virtual-file-names';
export async function generateModernIframeScriptCode(options: Options, projectRoot: string) {
const { presets, configDir } = options;

View File

@ -7,7 +7,6 @@ import type { Middleware, Options } from 'storybook/internal/types';
import type { ViteDevServer } from 'vite';
import { build as viteBuild } from './build';
import { transformIframeHtml } from './transform-iframe-html';
import type { ViteBuilder } from './types';
import { createViteServer } from './vite-server';
@ -16,22 +15,8 @@ export { hasVitePlugins } from './utils/has-vite-plugins';
export * from './types';
function iframeMiddleware(options: Options, server: ViteDevServer): Middleware {
return async (req, res, next) => {
if (!req.url || !req.url.match(/^\/iframe\.html($|\?)/)) {
next();
return;
}
// the base isn't used for anything, but it's required by the URL constructor
const url = new URL(req.url, 'http://localhost:6006');
// We need to handle `html-proxy` params for style tag HMR https://github.com/storybookjs/builder-vite/issues/266#issuecomment-1055677865
// e.g. /iframe.html?html-proxy&index=0.css
if (url.searchParams.has('html-proxy')) {
next();
return;
}
function iframeHandler(options: Options, server: ViteDevServer): Middleware {
return async (req, res) => {
const indexHtml = await readFile(require.resolve('@storybook/builder-vite/input/iframe.html'), {
encoding: 'utf8',
});
@ -57,7 +42,7 @@ export const start: ViteBuilder['start'] = async ({
}) => {
server = await createViteServer(options as Options, devServer);
router.use(iframeMiddleware(options as Options, server));
router.get('/iframe.html', iframeHandler(options as Options, server));
router.use(server.middlewares);
return {

View File

@ -27,6 +27,7 @@ const INCLUDE_CANDIDATES = [
'@storybook/addon-essentials/outline/preview',
'@storybook/addon-essentials/viewport/preview',
'@storybook/addon-highlight/preview',
'@storybook/addon-interactions/preview',
'@storybook/addon-links/preview',
'@storybook/addon-measure/preview',
'@storybook/addon-outline/preview',
@ -132,6 +133,7 @@ const INCLUDE_CANDIDATES = [
'react-textarea-autosize',
'react',
'react/jsx-runtime',
'react/jsx-dev-runtime',
'refractor/core',
'refractor/lang/bash.js',
'refractor/lang/css.js',
@ -150,6 +152,7 @@ const INCLUDE_CANDIDATES = [
'slash',
'store2',
'storybook/internal/preview/runtime',
'storybook/internal/csf',
'synchronous-promise',
'telejson',
'ts-dedent',

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/builder-webpack5",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook framework-agnostic API",
"keywords": [
"storybook"

View File

@ -83,9 +83,5 @@
import './sb-manager/runtime.js';
</script>
<% if (!ignorePreview) { %>
<link href="./sb-preview/runtime.js" rel="prefetch" as="script" />
<% } %>
</body>
</html>
</html>

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/core",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook framework-agnostic API",
"keywords": [
"storybook"
@ -285,7 +285,7 @@
"@storybook/theming": "workspace:*",
"better-opn": "^3.0.2",
"browser-assert": "^1.2.1",
"esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0",
"esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0",
"esbuild-register": "^3.5.0",
"jsdoc-type-pratt-parser": "^4.0.0",
"process": "^0.11.10",
@ -361,7 +361,7 @@
"downshift": "^9.0.4",
"ejs": "^3.1.10",
"es-toolkit": "^1.22.0",
"esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0",
"esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0",
"esbuild-plugin-alias": "^0.2.1",
"execa": "^8.0.1",
"fd-package-json": "^1.2.0",

View File

@ -1,88 +1,88 @@
// auto generated file, do not edit
export default {
'@storybook/addon-a11y': '8.6.0-beta.3',
'@storybook/addon-actions': '8.6.0-beta.3',
'@storybook/addon-backgrounds': '8.6.0-beta.3',
'@storybook/addon-controls': '8.6.0-beta.3',
'@storybook/addon-docs': '8.6.0-beta.3',
'@storybook/addon-essentials': '8.6.0-beta.3',
'@storybook/addon-mdx-gfm': '8.6.0-beta.3',
'@storybook/addon-highlight': '8.6.0-beta.3',
'@storybook/addon-interactions': '8.6.0-beta.3',
'@storybook/addon-jest': '8.6.0-beta.3',
'@storybook/addon-links': '8.6.0-beta.3',
'@storybook/addon-measure': '8.6.0-beta.3',
'@storybook/addon-onboarding': '8.6.0-beta.3',
'@storybook/addon-outline': '8.6.0-beta.3',
'@storybook/addon-storysource': '8.6.0-beta.3',
'@storybook/experimental-addon-test': '8.6.0-beta.3',
'@storybook/addon-themes': '8.6.0-beta.3',
'@storybook/addon-toolbars': '8.6.0-beta.3',
'@storybook/addon-viewport': '8.6.0-beta.3',
'@storybook/builder-vite': '8.6.0-beta.3',
'@storybook/builder-webpack5': '8.6.0-beta.3',
'@storybook/core': '8.6.0-beta.3',
'@storybook/builder-manager': '8.6.0-beta.3',
'@storybook/channels': '8.6.0-beta.3',
'@storybook/client-logger': '8.6.0-beta.3',
'@storybook/components': '8.6.0-beta.3',
'@storybook/core-common': '8.6.0-beta.3',
'@storybook/core-events': '8.6.0-beta.3',
'@storybook/core-server': '8.6.0-beta.3',
'@storybook/csf-tools': '8.6.0-beta.3',
'@storybook/docs-tools': '8.6.0-beta.3',
'@storybook/manager': '8.6.0-beta.3',
'@storybook/manager-api': '8.6.0-beta.3',
'@storybook/node-logger': '8.6.0-beta.3',
'@storybook/preview': '8.6.0-beta.3',
'@storybook/preview-api': '8.6.0-beta.3',
'@storybook/router': '8.6.0-beta.3',
'@storybook/telemetry': '8.6.0-beta.3',
'@storybook/theming': '8.6.0-beta.3',
'@storybook/types': '8.6.0-beta.3',
'@storybook/angular': '8.6.0-beta.3',
'@storybook/ember': '8.6.0-beta.3',
'@storybook/experimental-nextjs-vite': '8.6.0-beta.3',
'@storybook/html-vite': '8.6.0-beta.3',
'@storybook/html-webpack5': '8.6.0-beta.3',
'@storybook/nextjs': '8.6.0-beta.3',
'@storybook/preact-vite': '8.6.0-beta.3',
'@storybook/preact-webpack5': '8.6.0-beta.3',
'@storybook/react-native-web-vite': '8.6.0-beta.3',
'@storybook/react-vite': '8.6.0-beta.3',
'@storybook/react-webpack5': '8.6.0-beta.3',
'@storybook/server-webpack5': '8.6.0-beta.3',
'@storybook/svelte-vite': '8.6.0-beta.3',
'@storybook/svelte-webpack5': '8.6.0-beta.3',
'@storybook/sveltekit': '8.6.0-beta.3',
'@storybook/vue3-vite': '8.6.0-beta.3',
'@storybook/vue3-webpack5': '8.6.0-beta.3',
'@storybook/web-components-vite': '8.6.0-beta.3',
'@storybook/web-components-webpack5': '8.6.0-beta.3',
'@storybook/blocks': '8.6.0-beta.3',
storybook: '8.6.0-beta.3',
sb: '8.6.0-beta.3',
'@storybook/cli': '8.6.0-beta.3',
'@storybook/codemod': '8.6.0-beta.3',
'@storybook/core-webpack': '8.6.0-beta.3',
'create-storybook': '8.6.0-beta.3',
'@storybook/csf-plugin': '8.6.0-beta.3',
'@storybook/instrumenter': '8.6.0-beta.3',
'@storybook/react-dom-shim': '8.6.0-beta.3',
'@storybook/source-loader': '8.6.0-beta.3',
'@storybook/test': '8.6.0-beta.3',
'@storybook/preset-create-react-app': '8.6.0-beta.3',
'@storybook/preset-html-webpack': '8.6.0-beta.3',
'@storybook/preset-preact-webpack': '8.6.0-beta.3',
'@storybook/preset-react-webpack': '8.6.0-beta.3',
'@storybook/preset-server-webpack': '8.6.0-beta.3',
'@storybook/preset-svelte-webpack': '8.6.0-beta.3',
'@storybook/preset-vue3-webpack': '8.6.0-beta.3',
'@storybook/html': '8.6.0-beta.3',
'@storybook/preact': '8.6.0-beta.3',
'@storybook/react': '8.6.0-beta.3',
'@storybook/server': '8.6.0-beta.3',
'@storybook/svelte': '8.6.0-beta.3',
'@storybook/vue3': '8.6.0-beta.3',
'@storybook/web-components': '8.6.0-beta.3',
'@storybook/addon-a11y': '8.6.0-beta.4',
'@storybook/addon-actions': '8.6.0-beta.4',
'@storybook/addon-backgrounds': '8.6.0-beta.4',
'@storybook/addon-controls': '8.6.0-beta.4',
'@storybook/addon-docs': '8.6.0-beta.4',
'@storybook/addon-essentials': '8.6.0-beta.4',
'@storybook/addon-mdx-gfm': '8.6.0-beta.4',
'@storybook/addon-highlight': '8.6.0-beta.4',
'@storybook/addon-interactions': '8.6.0-beta.4',
'@storybook/addon-jest': '8.6.0-beta.4',
'@storybook/addon-links': '8.6.0-beta.4',
'@storybook/addon-measure': '8.6.0-beta.4',
'@storybook/addon-onboarding': '8.6.0-beta.4',
'@storybook/addon-outline': '8.6.0-beta.4',
'@storybook/addon-storysource': '8.6.0-beta.4',
'@storybook/experimental-addon-test': '8.6.0-beta.4',
'@storybook/addon-themes': '8.6.0-beta.4',
'@storybook/addon-toolbars': '8.6.0-beta.4',
'@storybook/addon-viewport': '8.6.0-beta.4',
'@storybook/builder-vite': '8.6.0-beta.4',
'@storybook/builder-webpack5': '8.6.0-beta.4',
'@storybook/core': '8.6.0-beta.4',
'@storybook/builder-manager': '8.6.0-beta.4',
'@storybook/channels': '8.6.0-beta.4',
'@storybook/client-logger': '8.6.0-beta.4',
'@storybook/components': '8.6.0-beta.4',
'@storybook/core-common': '8.6.0-beta.4',
'@storybook/core-events': '8.6.0-beta.4',
'@storybook/core-server': '8.6.0-beta.4',
'@storybook/csf-tools': '8.6.0-beta.4',
'@storybook/docs-tools': '8.6.0-beta.4',
'@storybook/manager': '8.6.0-beta.4',
'@storybook/manager-api': '8.6.0-beta.4',
'@storybook/node-logger': '8.6.0-beta.4',
'@storybook/preview': '8.6.0-beta.4',
'@storybook/preview-api': '8.6.0-beta.4',
'@storybook/router': '8.6.0-beta.4',
'@storybook/telemetry': '8.6.0-beta.4',
'@storybook/theming': '8.6.0-beta.4',
'@storybook/types': '8.6.0-beta.4',
'@storybook/angular': '8.6.0-beta.4',
'@storybook/ember': '8.6.0-beta.4',
'@storybook/experimental-nextjs-vite': '8.6.0-beta.4',
'@storybook/html-vite': '8.6.0-beta.4',
'@storybook/html-webpack5': '8.6.0-beta.4',
'@storybook/nextjs': '8.6.0-beta.4',
'@storybook/preact-vite': '8.6.0-beta.4',
'@storybook/preact-webpack5': '8.6.0-beta.4',
'@storybook/react-native-web-vite': '8.6.0-beta.4',
'@storybook/react-vite': '8.6.0-beta.4',
'@storybook/react-webpack5': '8.6.0-beta.4',
'@storybook/server-webpack5': '8.6.0-beta.4',
'@storybook/svelte-vite': '8.6.0-beta.4',
'@storybook/svelte-webpack5': '8.6.0-beta.4',
'@storybook/sveltekit': '8.6.0-beta.4',
'@storybook/vue3-vite': '8.6.0-beta.4',
'@storybook/vue3-webpack5': '8.6.0-beta.4',
'@storybook/web-components-vite': '8.6.0-beta.4',
'@storybook/web-components-webpack5': '8.6.0-beta.4',
'@storybook/blocks': '8.6.0-beta.4',
storybook: '8.6.0-beta.4',
sb: '8.6.0-beta.4',
'@storybook/cli': '8.6.0-beta.4',
'@storybook/codemod': '8.6.0-beta.4',
'@storybook/core-webpack': '8.6.0-beta.4',
'create-storybook': '8.6.0-beta.4',
'@storybook/csf-plugin': '8.6.0-beta.4',
'@storybook/instrumenter': '8.6.0-beta.4',
'@storybook/react-dom-shim': '8.6.0-beta.4',
'@storybook/source-loader': '8.6.0-beta.4',
'@storybook/test': '8.6.0-beta.4',
'@storybook/preset-create-react-app': '8.6.0-beta.4',
'@storybook/preset-html-webpack': '8.6.0-beta.4',
'@storybook/preset-preact-webpack': '8.6.0-beta.4',
'@storybook/preset-react-webpack': '8.6.0-beta.4',
'@storybook/preset-server-webpack': '8.6.0-beta.4',
'@storybook/preset-svelte-webpack': '8.6.0-beta.4',
'@storybook/preset-vue3-webpack': '8.6.0-beta.4',
'@storybook/html': '8.6.0-beta.4',
'@storybook/preact': '8.6.0-beta.4',
'@storybook/react': '8.6.0-beta.4',
'@storybook/server': '8.6.0-beta.4',
'@storybook/svelte': '8.6.0-beta.4',
'@storybook/vue3': '8.6.0-beta.4',
'@storybook/web-components': '8.6.0-beta.4',
};

View File

@ -78,13 +78,14 @@ export async function storybookDevServer(options: Options) {
channel: serverChannel,
});
let previewStarted: Promise<any> = Promise.resolve();
let previewResult: Awaited<ReturnType<(typeof previewBuilder)['start']>> =
await Promise.resolve();
if (!options.ignorePreview) {
if (!options.quiet) {
logger.info('=> Starting preview..');
}
previewStarted = previewBuilder
previewResult = await previewBuilder
.start({
startTime: process.hrtime(),
options,
@ -108,14 +109,6 @@ export async function storybookDevServer(options: Options) {
});
}
// this is a preview route, the builder has to be started before we can serve it
// this handler keeps request to that route pending until the builder is ready to serve it, preventing a 404
app.use('/iframe.html', (req, res, next) => {
// We need to catch here or node will treat any errors thrown by `previewStarted` as
// unhandled and exit (even though they are very much handled below)
previewStarted.catch(() => {}).then(() => next());
});
const listening = new Promise<void>((resolve, reject) => {
server.once('error', reject);
app.listen({ port, host }, resolve);
@ -132,8 +125,6 @@ export async function storybookDevServer(options: Options) {
throw indexError;
}
const previewResult = await previewStarted;
// Now the preview has successfully started, we can count this as a 'dev' event.
doTelemetry(app, core, initializedStoryIndexGenerator, options);

View File

@ -21,19 +21,26 @@ export interface Preview<TRenderer extends Renderer = Renderer> {
}
export function definePreview<TRenderer extends Renderer>(
preview: Preview<TRenderer>['input']
input: Preview<TRenderer>['input']
): Preview<TRenderer> {
return {
let composed: NormalizedProjectAnnotations<TRenderer>;
const preview: Preview<TRenderer> = {
_tag: 'Preview',
input: preview,
input,
get composed() {
const { addons, ...rest } = preview;
return normalizeProjectAnnotations<TRenderer>(composeConfigs([...(addons ?? []), rest]));
if (composed) {
return composed;
}
const { addons, ...rest } = input;
composed = normalizeProjectAnnotations<TRenderer>(composeConfigs([...(addons ?? []), rest]));
return composed;
},
meta(meta: ComponentAnnotations<TRenderer>) {
return defineMeta(meta, this);
},
};
globalThis.globalProjectAnnotations = preview.composed;
return preview;
}
export function isPreview(input: unknown): input is Preview<Renderer> {

View File

@ -1 +1 @@
export const version = '8.6.0-beta.3';
export const version = '8.6.0-beta.4';

View File

@ -1,7 +1,7 @@
/* eslint-disable no-underscore-dangle */
/* eslint-disable @typescript-eslint/naming-convention */
import { type CleanupCallback, isExportStory } from '@storybook/core/csf';
import { type CleanupCallback, type Preview, isExportStory } from '@storybook/core/csf';
import type {
Args,
Canvas,
@ -73,7 +73,10 @@ export function setProjectAnnotations<TRenderer extends Renderer = Renderer>(
| NamedOrDefaultProjectAnnotations<TRenderer>[]
): NormalizedProjectAnnotations<TRenderer> {
const annotations = Array.isArray(projectAnnotations) ? projectAnnotations : [projectAnnotations];
globalThis.globalProjectAnnotations = composeConfigs(annotations.map(extractAnnotation));
globalThis.globalProjectAnnotations = composeConfigs([
globalThis.defaultProjectAnnotations ?? {},
composeConfigs(annotations.map(extractAnnotation)),
]);
/*
We must return the composition of default and global annotations here
@ -82,10 +85,7 @@ export function setProjectAnnotations<TRenderer extends Renderer = Renderer>(
const projectAnnotations = setProjectAnnotations(...);
beforeAll(projectAnnotations.beforeAll)
*/
return composeConfigs([
globalThis.defaultProjectAnnotations ?? {},
globalThis.globalProjectAnnotations ?? {},
]);
return globalThis.globalProjectAnnotations ?? {};
}
const cleanups: CleanupCallback[] = [];
@ -123,10 +123,7 @@ export function composeStory<TRenderer extends Renderer = Renderer, TArgs extend
const normalizedProjectAnnotations = normalizeProjectAnnotations<TRenderer>(
composeConfigs([
defaultConfig && Object.keys(defaultConfig).length > 0
? defaultConfig
: (globalThis.defaultProjectAnnotations ?? {}),
globalThis.globalProjectAnnotations ?? {},
defaultConfig ?? globalThis.globalProjectAnnotations ?? {},
projectAnnotations ?? {},
])
);
@ -165,6 +162,8 @@ export function composeStory<TRenderer extends Renderer = Renderer, TArgs extend
mount: null!,
});
context.parameters.__isPortableStory = true;
context.context = context;
if (story.renderToCanvas) {

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/builder-manager",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook manager builder",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/channels",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/client-logger",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/components",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Core Storybook Components",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/core-common",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook framework-agnostic API",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/core-events",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Event names used in storybook core",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/core-server",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook framework-agnostic API",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/csf-tools",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Parse and manipulate CSF and Storybook config files",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/docs-tools",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Shared utility functions for frameworks to implement docs",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/manager-api",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Core Storybook Manager API & Context",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/manager",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Core Storybook UI",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/node-logger",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preview-api",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preview",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/router",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Core Storybook Router",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/telemetry",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Telemetry logging for crash reports and usage statistics",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/theming",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Core Storybook Components",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/types",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Core Storybook TS Types",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/angular",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Angular: Develop Angular components in isolation with hot reloading.",
"keywords": [
"storybook",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/ember",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Ember: Develop Ember Component in isolation with Hot Reloading.",
"homepage": "https://github.com/storybookjs/storybook/tree/next/code/frameworks/ember",
"bugs": {

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/experimental-nextjs-vite",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Next.js and Vite",
"keywords": [
"storybook",

View File

@ -96,7 +96,7 @@ export function composeStory<TArgs extends Args = Args>(
story as StoryAnnotationsOrFn<ReactRenderer, Args>,
componentAnnotations,
projectAnnotations,
INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,
globalThis.globalProjectAnnotations ?? INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,
exportsName
);
}

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/html-vite",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for HTML and Vite: Develop HTML in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/html-webpack5",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for HTML: View HTML snippets in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/nextjs",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Next.js",
"keywords": [
"storybook",

View File

@ -96,7 +96,7 @@ export function composeStory<TArgs extends Args = Args>(
story as StoryAnnotationsOrFn<ReactRenderer, Args>,
componentAnnotations,
projectAnnotations,
INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,
globalThis.globalProjectAnnotations ?? INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,
exportsName
);
}

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preact-vite",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Preact and Vite: Develop Preact components in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preact-webpack5",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Preact: Develop Preact Component in isolation.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/react-native-web-vite",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Develop react-native components an isolated web environment with hot reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/react-vite",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for React and Vite: Develop React components in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/react-webpack5",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for React: Develop React Component in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/server-webpack5",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Server: View HTML snippets from a server in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/svelte-vite",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Svelte and Vite: Develop Svelte components in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/svelte-webpack5",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Svelte: Develop Svelte Component in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/sveltekit",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for SvelteKit",
"keywords": [
"storybook",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/vue3-vite",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Vue3 and Vite: Develop Vue3 components in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/vue3-webpack5",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Vue 3: Develop Vue 3 Components in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/web-components-vite",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for web-components and Vite: Develop Web Components in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/web-components-webpack5",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for web-components: View web components snippets in isolation with Hot Reloading.",
"keywords": [
"lit",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/blocks",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook Doc Blocks",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "sb",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook CLI",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/cli",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook CLI",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "storybook",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook's CLI - install, dev, build, upgrade, and more",
"keywords": [
"cli",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/codemod",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "A collection of codemod scripts written with JSCodeshift",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/core-webpack",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook framework-agnostic API",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "create-storybook",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Initialize Storybook into your project",
"homepage": "https://github.com/storybookjs/storybook/tree/next/code/lib/create-storybook",
"bugs": {

View File

@ -331,13 +331,16 @@ export async function doInitiate(options: CommandOptions): Promise<
choices: Object.entries(selectableFeatures).map(([value, { name, description }]) => ({
title: `${name}: ${description}`,
value,
selected: true,
})),
});
selectedFeatures = new Set(out.features);
}
const telemetryFeatures = ['dev', ...selectedFeatures];
const telemetryFeatures = {
dev: true,
docs: selectedFeatures.has('docs'),
test: selectedFeatures.has('test'),
};
// Check if the current directory is empty.
if (options.force !== true && currentDirectoryIsEmpty(packageManager.type)) {

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/csf-plugin",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Enrich CSF files via static analysis",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/instrumenter",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/react-dom-shim",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/source-loader",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Source loader",
"keywords": [
"lib",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/test",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/root",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"private": true,
"description": "Storybook root",
"homepage": "https://storybook.js.org/",
@ -85,7 +85,7 @@
"@types/node": "^22.0.0",
"@types/react": "^18.0.0",
"@vitest/expect@npm:2.0.5": "patch:@vitest/expect@npm%3A2.0.5#~/.yarn/patches/@vitest-expect-npm-2.0.5-8933466cce.patch",
"esbuild": "^0.24.0",
"esbuild": "^0.25.0",
"playwright": "1.48.1",
"playwright-core": "1.48.1",
"react": "^18.2.0",
@ -188,7 +188,7 @@
"cross-env": "^7.0.3",
"danger": "^12.3.3",
"es-toolkit": "^1.22.0",
"esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0",
"esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0",
"esbuild-loader": "^4.2.0",
"esbuild-plugin-alias": "^0.2.1",
"eslint": "8.57.1",

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preset-create-react-app",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Create React App preset",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preset-html-webpack",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for HTML: View HTML snippets in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preset-preact-webpack",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Preact: Develop Preact Component in isolation.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preset-react-webpack",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for React: Develop React Component in isolation with Hot Reloading",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preset-server-webpack",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Server: View HTML snippets from a server in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preset-svelte-webpack",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Svelte: Develop Svelte Component in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preset-vue3-webpack",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook for Vue 3: Develop Vue 3 Components in isolation with Hot Reloading.",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/html",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook HTML renderer",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/preact",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook Preact renderer",
"keywords": [
"storybook"

View File

@ -1,6 +1,6 @@
{
"name": "@storybook/react",
"version": "8.6.0-beta.3",
"version": "8.6.0-beta.4",
"description": "Storybook React renderer",
"keywords": [
"storybook"

View File

@ -54,15 +54,10 @@ export function setProjectAnnotations(
// This will not be necessary once we have auto preset loading
export const INTERNAL_DEFAULT_PROJECT_ANNOTATIONS: ProjectAnnotations<ReactRenderer> = {
...reactProjectAnnotations,
/** @deprecated */
renderToCanvas: async (renderContext, canvasElement) => {
if (renderContext.storyContext.testingLibraryRender == null) {
// eslint-disable-next-line no-underscore-dangle
renderContext.storyContext.parameters.__isPortableStory = true;
const unmount = await reactProjectAnnotations.renderToCanvas(renderContext, canvasElement);
return async () => {
await unmount();
};
return reactProjectAnnotations.renderToCanvas(renderContext, canvasElement);
}
const {
storyContext: { context, unboundStoryFn: Story, testingLibraryRender: render },
@ -111,7 +106,7 @@ export function composeStory<TArgs extends Args = Args>(
story as StoryAnnotationsOrFn<ReactRenderer, Args>,
componentAnnotations,
projectAnnotations,
INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,
globalThis.globalProjectAnnotations ?? INTERNAL_DEFAULT_PROJECT_ANNOTATIONS,
exportsName
);
}

Some files were not shown because too many files have changed in this diff Show More