diff --git a/CHANGELOG.md b/CHANGELOG.md index 06520612a48a..eb9f0de30cd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## 8.4.4 + +- Addon Test: Only optimize react deps if applicable in vitest-plugin - [#29617](https://github.com/storybookjs/storybook/pull/29617), thanks @yannbf! + +## 8.4.3 + +- Addon Test: Optimize internal dependencies - [#29595](https://github.com/storybookjs/storybook/pull/29595), thanks @yannbf! +- Next.js: Add support for Next 15 - [#29587](https://github.com/storybookjs/storybook/pull/29587), thanks @yannbf! + ## 8.4.2 - Addon Test: Fix post-install logic for Next.js Vite framework support - [#29524](https://github.com/storybookjs/storybook/pull/29524), thanks @valentinpalkovic! diff --git a/CHANGELOG.prerelease.md b/CHANGELOG.prerelease.md index 29827f7c8cf0..0b09a2a6f710 100644 --- a/CHANGELOG.prerelease.md +++ b/CHANGELOG.prerelease.md @@ -1,3 +1,10 @@ +## 8.5.0-alpha.5 + +- Addon Test: Only optimize react deps if applicable in vitest-plugin - [#29617](https://github.com/storybookjs/storybook/pull/29617), thanks @yannbf! +- Addon Test: Optimize internal dependencies - [#29595](https://github.com/storybookjs/storybook/pull/29595), thanks @yannbf! +- CLI: Fix init help for `storybook` command - [#29480](https://github.com/storybookjs/storybook/pull/29480), thanks @toothlessdev! +- Composition: Fix composed story search - [#29453](https://github.com/storybookjs/storybook/pull/29453), thanks @jsingh0026! + ## 8.5.0-alpha.4 - Next.js: Add support for Next 15 - [#29587](https://github.com/storybookjs/storybook/pull/29587), thanks @yannbf! diff --git a/code/addons/test/src/vitest-plugin/index.ts b/code/addons/test/src/vitest-plugin/index.ts index 458d0292e295..968b0e656141 100644 --- a/code/addons/test/src/vitest-plugin/index.ts +++ b/code/addons/test/src/vitest-plugin/index.ts @@ -131,6 +131,16 @@ export const storybookTest = (options?: UserOptions): Plugin => { config.test.server.deps.inline.push('@storybook/experimental-addon-test'); } + config.optimizeDeps ??= {}; + config.optimizeDeps = { + ...config.optimizeDeps, + include: [...(config.optimizeDeps.include ?? []), '@storybook/experimental-addon-test/**'], + }; + + if (frameworkName?.includes('react') || frameworkName?.includes('nextjs')) { + config.optimizeDeps.include.push('react-dom/test-utils'); + } + if (frameworkName?.includes('vue3')) { config.define ??= {}; config.define.__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ = 'false'; diff --git a/code/core/src/manager/components/mobile/navigation/MobileNavigation.tsx b/code/core/src/manager/components/mobile/navigation/MobileNavigation.tsx index fdc7de9651db..ddef2c0f2de4 100644 --- a/code/core/src/manager/components/mobile/navigation/MobileNavigation.tsx +++ b/code/core/src/manager/components/mobile/navigation/MobileNavigation.tsx @@ -4,6 +4,7 @@ import React from 'react'; import { IconButton } from '@storybook/core/components'; import { styled } from '@storybook/core/theming'; import { BottomBarToggleIcon, MenuIcon } from '@storybook/icons'; +import type { API_IndexHash, API_Refs } from '@storybook/types'; import { useStorybookApi, useStorybookState } from '@storybook/core/manager-api'; @@ -17,27 +18,46 @@ interface MobileNavigationProps { showPanel: boolean; } +// Function to combine all indexes +function combineIndexes(rootIndex: API_IndexHash | undefined, refs: API_Refs) { + // Create a copy of the root index to avoid mutation + const combinedIndex = { ...(rootIndex || {}) }; // Use an empty object as fallback + + // Traverse refs and merge each nested index with the root index + Object.values(refs).forEach((ref) => { + if (ref.index) { + Object.assign(combinedIndex, ref.index); + } + }); + + return combinedIndex; +} + /** * Walks the tree from the current story to combine story+component+folder names into a single * string */ const useFullStoryName = () => { - const { index } = useStorybookState(); + const { index, refs } = useStorybookState(); const api = useStorybookApi(); const currentStory = api.getCurrentStoryData(); if (!currentStory) { return ''; } - + const combinedIndex = combineIndexes(index, refs || {}); let fullStoryName = currentStory.renderLabel?.(currentStory, api) || currentStory.name; - // @ts-expect-error (non strict) - let node = index[currentStory.id]; - // @ts-expect-error (non strict) - while ('parent' in node && node.parent && index[node.parent] && fullStoryName.length < 24) { - // @ts-expect-error (non strict) - node = index[node.parent]; + let node = combinedIndex[currentStory.id]; + + while ( + node && + 'parent' in node && + node.parent && + combinedIndex[node.parent] && + fullStoryName.length < 24 + ) { + node = combinedIndex[node.parent]; const parentName = node.renderLabel?.(node, api) || node.name; fullStoryName = `${parentName}/${fullStoryName}`; } diff --git a/code/core/src/manager/components/sidebar/TestingModule.tsx b/code/core/src/manager/components/sidebar/TestingModule.tsx index c020ebe53f09..510fdc24212c 100644 --- a/code/core/src/manager/components/sidebar/TestingModule.tsx +++ b/code/core/src/manager/components/sidebar/TestingModule.tsx @@ -175,10 +175,10 @@ const DynamicInfo = ({ state }: { state: TestProviders[keyof TestProviders] }) = const Title = state.title; return ( - + </TitleWrapper> - <DescriptionWrapper> + <DescriptionWrapper id="testing-module-description"> <Description {...state} /> </DescriptionWrapper> </Info> @@ -244,7 +244,7 @@ export const TestingModule = ({ > <Content ref={contentRef}> {testProviders.map((state) => ( - <TestProvider key={state.id}> + <TestProvider key={state.id} data-module-id={state.id}> <DynamicInfo state={state} /> <Actions> {state.watchable && ( diff --git a/code/e2e-tests/composition.spec.ts b/code/e2e-tests/composition.spec.ts index 8e50987675b5..15bc6c4c4ed9 100644 --- a/code/e2e-tests/composition.spec.ts +++ b/code/e2e-tests/composition.spec.ts @@ -11,12 +11,10 @@ test.describe('composition', () => { 'Slow, framework independent test, so only run it on in react-vite/default-ts' ); - test.beforeEach(async ({ page }) => { + test('should filter and render composed stories', async ({ page }) => { await page.goto(storybookUrl); await new SbPage(page, expect).waitUntilLoaded(); - }); - test('should correctly filter composed stories', async ({ page }) => { // Expect that composed Storybooks are visible await expect(page.getByTitle('Storybook 8.0.0')).toBeVisible(); await expect(page.getByTitle('Storybook 7.6.18')).toBeVisible(); @@ -35,10 +33,64 @@ test.describe('composition', () => { // Expect composed stories `to be available in the search await page.getByPlaceholder('Find components').fill('Button'); await expect( - page.getByRole('option', { name: 'Button Storybook 8.0.0 / @blocks / examples' }) + page.getByRole('option', { name: 'Button Storybook 7.6.18 / @blocks / examples' }) ).toBeVisible(); + + const buttonStory = page.getByRole('option', { + name: 'Button Storybook 8.0.0 / @blocks / examples', + }); + await expect(buttonStory).toBeVisible(); + await buttonStory.click(); + + // Note: this could potentially be flaky due to it accessing a hosted Storybook + await expect( + page + .locator('iframe[title="storybook-ref-storybook\\@8\\.0\\.0"]') + .contentFrame() + .getByRole('heading', { name: 'Example button component' }) + ).toBeVisible({ timeout: 15000 }); + }); + + test('should filter and render composed stories on mobile', async ({ page }) => { + page.setViewportSize({ width: 320, height: 800 }); + await page.goto(storybookUrl); + await new SbPage(page, expect).waitUntilLoaded(); + + await page.click('button[title="Open navigation menu"]'); + + // Expect that composed Storybooks are visible + await expect(page.getByTitle('Storybook 8.0.0')).toBeVisible(); + await expect(page.getByTitle('Storybook 7.6.18')).toBeVisible(); + + // Expect composed stories to be available in the sidebar + await page.locator('[id="storybook\\@8\\.0\\.0_components-badge"]').click(); + await expect( + page.locator('[id="storybook\\@8\\.0\\.0_components-badge--default"]') + ).toBeVisible(); + + await page.locator('[id="storybook\\@7\\.6\\.18_components-badge"]').click(); + await expect( + page.locator('[id="storybook\\@7\\.6\\.18_components-badge--default"]') + ).toBeVisible(); + + // Expect composed stories `to be available in the search + await page.getByPlaceholder('Find components').fill('Button'); await expect( page.getByRole('option', { name: 'Button Storybook 7.6.18 / @blocks / examples' }) ).toBeVisible(); + + const buttonStory = page.getByRole('option', { + name: 'Button Storybook 8.0.0 / @blocks / examples', + }); + await expect(buttonStory).toBeVisible(); + await buttonStory.click(); + + // Note: this could potentially be flaky due to it accessing a hosted Storybook + await expect( + page + .locator('iframe[title="storybook-ref-storybook\\@8\\.0\\.0"]') + .contentFrame() + .getByRole('heading', { name: 'Example button component' }) + ).toBeVisible({ timeout: 15000 }); }); }); diff --git a/code/lib/cli-storybook/src/bin/index.ts b/code/lib/cli-storybook/src/bin/index.ts index 2eaa769e4186..165b3f9dd999 100644 --- a/code/lib/cli-storybook/src/bin/index.ts +++ b/code/lib/cli-storybook/src/bin/index.ts @@ -40,6 +40,27 @@ const command = (name: string) => .option('--debug', 'Get more logs in debug mode', false) .option('--enable-crash-reports', 'Enable sending crash reports to telemetry data'); +command('init') + .description('Initialize Storybook into your project') + .option('-f --force', 'Force add Storybook') + .option('-s --skip-install', 'Skip installing deps') + .option('--package-manager <npm|pnpm|yarn1|yarn2>', 'Force package manager for installing deps') + .option('--use-pnp', 'Enable PnP mode for Yarn 2+') + .option('-p --parser <babel | babylon | flow | ts | tsx>', 'jscodeshift parser') + .option('-t --type <type>', 'Add Storybook for a specific project type') + .option('-y --yes', 'Answer yes to all prompts') + .option('-b --builder <webpack5 | vite>', 'Builder library') + .option('-l --linkable', 'Prepare installation for link (contributor helper)') + .option( + '--dev', + 'Launch the development server after completing initialization. Enabled by default (default: true)', + process.env.CI !== 'true' && process.env.IN_STORYBOOK_SANDBOX !== 'true' + ) + .option( + '--no-dev', + 'Complete the initialization of Storybook without launching the Storybook development server' + ); + command('add <addon>') .description('Add an addon to your Storybook') .option( diff --git a/code/lib/cli-storybook/test/default/cli.test.cjs b/code/lib/cli-storybook/test/default/cli.test.cjs index b569fa4dc5c6..f55fa0ef9a61 100755 --- a/code/lib/cli-storybook/test/default/cli.test.cjs +++ b/code/lib/cli-storybook/test/default/cli.test.cjs @@ -1,4 +1,4 @@ -import { describe, it, expect } from 'vitest'; +import { describe, expect, it } from 'vitest'; const run = require('../helpers.cjs'); @@ -12,3 +12,92 @@ describe('Default behavior', () => { expect(stdout.toString()).toContain('Did you mean upgrade?'); }); }); + +describe('Help command', () => { + it('should prints out "init" command', () => { + const { status, stdout, stderr } = run(['help']); + + expect(status).toBe(0); + expect(stderr.toString()).toBe(''); + expect(stdout.toString()).toContain('init'); + expect(stdout.toString()).toContain('Initialize Storybook into your project'); + }); + + it('should prints out "add" command', () => { + const { status, stdout, stderr } = run(['help']); + + expect(status).toBe(0); + expect(stderr.toString()).toBe(''); + expect(stdout.toString()).toContain('add'); + expect(stdout.toString()).toContain('Add an addon to your Storybook'); + }); + + it('should prints out "remove" command', () => { + const { status, stdout, stderr } = run(['help']); + + expect(status).toBe(0); + expect(stderr.toString()).toBe(''); + expect(stdout.toString()).toContain('remove'); + expect(stdout.toString()).toContain('Remove an addon from your Storybook'); + }); + + it('should prints out "upgrade" command', () => { + const { status, stdout, stderr } = run(['help']); + + expect(status).toBe(0); + expect(stderr.toString()).toBe(''); + expect(stdout.toString()).toContain('upgrade'); + expect(stdout.toString()).toContain('Upgrade your Storybook packages to'); + }); + + it('should prints out "migrate" command', () => { + const { status, stdout, stderr } = run(['help']); + + expect(status).toBe(0); + expect(stderr.toString()).toBe(''); + expect(stdout.toString()).toContain('migrate'); + expect(stdout.toString()).toContain('Run a Storybook codemod migration on your source files'); + }); + + it('should prints out "sandbox" command', () => { + const { status, stdout, stderr } = run(['help']); + + expect(status).toBe(0); + expect(stderr.toString()).toBe(''); + expect(stdout.toString()).toContain('sandbox'); + expect(stdout.toString()).toContain('Create a sandbox from a set of possible templates'); + }); + + it('should prints out "link" command', () => { + const { status, stdout, stderr } = run(['help']); + + expect(status).toBe(0); + expect(stderr.toString()).toBe(''); + expect(stdout.toString()).toContain('link'); + expect(stdout.toString()).toContain( + 'Pull down a repro from a URL (or a local directory), link it, and run storybook' + ); + }); + + it('should prints out "automigrate" command', () => { + const { status, stdout, stderr } = run(['help']); + + expect(status).toBe(0); + expect(stderr.toString()).toBe(''); + expect(stdout.toString()).toContain('automigrate'); + expect(stdout.toString()).toContain( + 'Check storybook for incompatibilities or migrations and apply fixes' + ); + }); + + it('should prints out "doctor" command', () => { + const { status, stdout, stderr } = run(['help']); + + expect(status).toBe(0); + expect(stderr.toString()).toBe(''); + expect(stdout.toString()).toContain('doctor'); + expect(stdout.toString()).toContain( + 'Check Storybook for known problems and provide suggestions or fixes' + ); + }); +}); diff --git a/code/package.json b/code/package.json index 9d90dce863a8..e10802edfb6e 100644 --- a/code/package.json +++ b/code/package.json @@ -293,5 +293,6 @@ "Dependency Upgrades" ] ] - } + }, + "deferredNextVersion": "8.5.0-alpha.5" } diff --git a/code/playwright.config.ts b/code/playwright.config.ts index dee882693c80..5b29fa4cce32 100644 --- a/code/playwright.config.ts +++ b/code/playwright.config.ts @@ -3,6 +3,10 @@ import { defineConfig, devices } from '@playwright/test'; /** Read environment variables from file. https://github.com/motdotla/dotenv */ // require('dotenv').config(); +// Comment this out and fill in the values to run E2E tests locally using the Playwright extension easily +// process.env.STORYBOOK_URL = 'http://localhost:6006'; +// process.env.STORYBOOK_TEMPLATE_NAME = 'react-vite/default-ts'; + /** See https://playwright.dev/docs/test-configuration. */ export default defineConfig({ testDir: './e2e-tests', diff --git a/docs/_snippets/addon-viewport-options-in-preview.md b/docs/_snippets/addon-viewport-options-in-preview.md index 332b1e171235..c342682af443 100644 --- a/docs/_snippets/addon-viewport-options-in-preview.md +++ b/docs/_snippets/addon-viewport-options-in-preview.md @@ -4,7 +4,7 @@ import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'; export default { parameters: { viewport: { - viewports: INITIAL_VIEWPORTS, + options: INITIAL_VIEWPORTS, }, }, initialGlobals: { @@ -20,7 +20,7 @@ import { Preview } from '@storybook/your-renderer'; const preview: Preview = { parameters: { viewport: { - viewports: INITIAL_VIEWPORTS, + options: INITIAL_VIEWPORTS, }, }, initialGlobals: { diff --git a/docs/versions/next.json b/docs/versions/next.json index 61e79e389a3b..13e6d855b1e8 100644 --- a/docs/versions/next.json +++ b/docs/versions/next.json @@ -1 +1 @@ -{"version":"8.5.0-alpha.4","info":{"plain":"- Next.js: Add support for Next 15 - [#29587](https://github.com/storybookjs/storybook/pull/29587), thanks @yannbf!\n- UI: Add Yarn to About Section - [#29225](https://github.com/storybookjs/storybook/pull/29225), thanks @grantwforsythe!"}} +{"version":"8.5.0-alpha.5","info":{"plain":"- Addon Test: Only optimize react deps if applicable in vitest-plugin - [#29617](https://github.com/storybookjs/storybook/pull/29617), thanks @yannbf!\n- Addon Test: Optimize internal dependencies - [#29595](https://github.com/storybookjs/storybook/pull/29595), thanks @yannbf!\n- CLI: Fix init help for `storybook` command - [#29480](https://github.com/storybookjs/storybook/pull/29480), thanks @toothlessdev!\n- Composition: Fix composed story search - [#29453](https://github.com/storybookjs/storybook/pull/29453), thanks @jsingh0026!"}} diff --git a/test-storybooks/portable-stories-kitchen-sink/react/.storybook/main.ts b/test-storybooks/portable-stories-kitchen-sink/react/.storybook/main.ts index fe2baa61d4a6..9a2664c6e951 100644 --- a/test-storybooks/portable-stories-kitchen-sink/react/.storybook/main.ts +++ b/test-storybooks/portable-stories-kitchen-sink/react/.storybook/main.ts @@ -3,8 +3,8 @@ import type { StorybookConfig } from "@storybook/react-vite"; const config: StorybookConfig = { stories: ["../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)"], addons: [ + "@storybook/addon-controls", "@storybook/experimental-addon-test", - "@storybook/addon-controls" ], framework: { name: "@storybook/react-vite", diff --git a/test-storybooks/portable-stories-kitchen-sink/react/e2e-tests/component-testing.spec.ts b/test-storybooks/portable-stories-kitchen-sink/react/e2e-tests/component-testing.spec.ts index f14478f0cbea..1882070794ac 100644 --- a/test-storybooks/portable-stories-kitchen-sink/react/e2e-tests/component-testing.spec.ts +++ b/test-storybooks/portable-stories-kitchen-sink/react/e2e-tests/component-testing.spec.ts @@ -65,12 +65,22 @@ test.describe("component testing", () => { if ((await testStoryElement.getAttribute("aria-expanded")) !== "true") { testStoryElement.click(); } + + const testingModuleDescription = await page.locator('[data-module-id="storybook/test/test-provider"]').locator('#testing-module-description'); - await page.getByRole('button', { name: 'Run tests' }).click(); + await expect(testingModuleDescription).toContainText('Not run'); + + const runTestsButton = await page.getByLabel('Start component tests') + + await runTestsButton.click(); + + await expect(testingModuleDescription).toContainText('Testing', { timeout: 60000 }); // Wait for test results to appear + await expect(testingModuleDescription).toHaveText(/Ran \d+ tests/, { timeout: 60000 }); + const errorFilter = page.getByLabel("Toggle errors"); - await expect(errorFilter).toBeVisible({ timeout: 30000 }); + await expect(errorFilter).toBeVisible(); // Assert discrepancy: CLI pass + Browser fail const failingStoryElement = page.locator( @@ -107,18 +117,39 @@ test.describe("component testing", () => { const sbPage = new SbPage(page, expect); await sbPage.navigateToStory("addons/test", "Expected Failure"); - + // For whatever reason, sometimes it takes longer for the story to load const storyElement = sbPage .getCanvasBodyElement() .getByRole("button", { name: "test" }); await expect(storyElement).toBeVisible({ timeout: 10000 }); - await page.getByRole('button', { name: 'Run tests' }).click(); + await expect(page.locator('#testing-module-title')).toHaveText('Component tests'); + + const testingModuleDescription = await page.locator('[data-module-id="storybook/test/test-provider"]').locator('#testing-module-description'); + + await expect(testingModuleDescription).toContainText('Not run'); + + const runTestsButton = await page.getByLabel('Start component tests') + const watchModeButton = await page.getByLabel('Enable watch mode for Component tests') + await expect(runTestsButton).toBeEnabled(); + await expect(watchModeButton).toBeEnabled(); + + await runTestsButton.click(); + + await expect(runTestsButton).toBeDisabled(); + await expect(watchModeButton).toBeDisabled(); + + await expect(testingModuleDescription).toContainText('Testing'); // Wait for test results to appear + await expect(testingModuleDescription).toHaveText(/Ran \d+ tests/, { timeout: 30000 }); + + await expect(runTestsButton).toBeEnabled(); + await expect(watchModeButton).toBeEnabled(); + const errorFilter = page.getByLabel("Toggle errors"); - await expect(errorFilter).toBeVisible({ timeout: 30000 }); + await expect(errorFilter).toBeVisible(); // Assert for expected success const successfulStoryElement = page.locator( @@ -147,7 +178,7 @@ test.describe("component testing", () => { await expect(sidebarItems).toHaveCount(1); }); - test("should execute tests via testing module UI watch mode", async ({ + test("should execute watch mode tests via testing module UI", async ({ page, browserName, }) => { diff --git a/test-storybooks/portable-stories-kitchen-sink/react/stories/AddonTest.stories.tsx b/test-storybooks/portable-stories-kitchen-sink/react/stories/AddonTest.stories.tsx index 8670debe5e45..365ed4da0e6b 100644 --- a/test-storybooks/portable-stories-kitchen-sink/react/stories/AddonTest.stories.tsx +++ b/test-storybooks/portable-stories-kitchen-sink/react/stories/AddonTest.stories.tsx @@ -1,3 +1,4 @@ +import { Meta } from '@storybook/react' import { instrument } from '@storybook/instrumenter' import type { StoryAnnotations } from 'storybook/internal/types'; diff --git a/test-storybooks/portable-stories-kitchen-sink/react/yarn.lock b/test-storybooks/portable-stories-kitchen-sink/react/yarn.lock index 958dd6072e37..2041ffe4ec1a 100644 --- a/test-storybooks/portable-stories-kitchen-sink/react/yarn.lock +++ b/test-storybooks/portable-stories-kitchen-sink/react/yarn.lock @@ -1769,11 +1769,11 @@ __metadata: linkType: soft "@storybook/components@file:../../../code/deprecated/components::locator=portable-stories-react%40workspace%3A.": - version: 8.4.0-alpha.7 - resolution: "@storybook/components@file:../../../code/deprecated/components#../../../code/deprecated/components::hash=a9048b&locator=portable-stories-react%40workspace%3A." + version: 8.5.0-alpha.4 + resolution: "@storybook/components@file:../../../code/deprecated/components#../../../code/deprecated/components::hash=60237a&locator=portable-stories-react%40workspace%3A." peerDependencies: - storybook: "workspace:^" - checksum: 10/2e10c1adea642a4c1245d18d97ef20aa6a5aae7b0ef0dda10db113e31a76231e68aa263fe62ee966061d2a6841abe069df21be14fb5141dc7df73d17a94ff154 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10/0366ac53c8eed65b69aaa174337d27ec2283c446b328811f92ffc9de0a219860afd2e3bdc5f11c30485c43c21d246ff036bca74429ba307dc557917d14a9beba languageName: node linkType: hard @@ -1829,8 +1829,8 @@ __metadata: linkType: hard "@storybook/experimental-addon-test@file:../../../code/addons/test::locator=portable-stories-react%40workspace%3A.": - version: 8.4.0-alpha.7 - resolution: "@storybook/experimental-addon-test@file:../../../code/addons/test#../../../code/addons/test::hash=82a764&locator=portable-stories-react%40workspace%3A." + version: 8.5.0-alpha.4 + resolution: "@storybook/experimental-addon-test@file:../../../code/addons/test#../../../code/addons/test::hash=6bed1d&locator=portable-stories-react%40workspace%3A." dependencies: "@storybook/csf": "npm:^0.1.11" "@storybook/global": "npm:^5.0.0" @@ -1853,7 +1853,7 @@ __metadata: optional: true vitest: optional: true - checksum: 10/e3092244dbfd410cd43a3561d84aa05fe158264e624bc4cb500f2c8efc425f01ec5ead5e25e322a6ebb9cad5f704a52bbd15bf2abc9b7f6e99db89c08f37382e + checksum: 10/9d842f824d9891bd19e508d654ce7f9f7cf8c73090588b84f29b2649e68338d13d7cd85a6d4bd92fe6beef276eb12783445bed4a4249563a5986f6f537ccc6d8 languageName: node linkType: hard @@ -1886,20 +1886,20 @@ __metadata: linkType: soft "@storybook/manager-api@file:../../../code/deprecated/manager-api::locator=portable-stories-react%40workspace%3A.": - version: 8.4.0-alpha.7 - resolution: "@storybook/manager-api@file:../../../code/deprecated/manager-api#../../../code/deprecated/manager-api::hash=3b0337&locator=portable-stories-react%40workspace%3A." + version: 8.5.0-alpha.4 + resolution: "@storybook/manager-api@file:../../../code/deprecated/manager-api#../../../code/deprecated/manager-api::hash=8c9581&locator=portable-stories-react%40workspace%3A." peerDependencies: - storybook: "workspace:^" - checksum: 10/ad5bff1af09421670ff6b60df46231c737d7d3530c0930995fb4b39060781f7d6f276c0f941d8e534accc5dbae66f564d246e0da018b9c5ca3ee1e811b04f325 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10/20f439e660e49c2bba2ce4fc73ddb9306c04cea9e6eaa0ddc23fc2047e135b7df4cc0b742dc662cee71013051b0d7e9e9e7a4f28323c1734fc6ad024ac47b9db languageName: node linkType: hard "@storybook/preview-api@file:../../../code/deprecated/preview-api::locator=portable-stories-react%40workspace%3A.": - version: 8.4.0-alpha.7 - resolution: "@storybook/preview-api@file:../../../code/deprecated/preview-api#../../../code/deprecated/preview-api::hash=56e670&locator=portable-stories-react%40workspace%3A." + version: 8.5.0-alpha.4 + resolution: "@storybook/preview-api@file:../../../code/deprecated/preview-api#../../../code/deprecated/preview-api::hash=a7858a&locator=portable-stories-react%40workspace%3A." peerDependencies: - storybook: "workspace:^" - checksum: 10/0242d50ab4d165b926bc389791a3deb76fd0148dc1f39b31ec2ae7e77f017613b87cf0efc89ec8b6ae72128b9cc84b3289e921eaa1940180fc3482d158339fbd + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10/29559a5fd2698758e0bcf5442421fb583da5d95344f9740dcdc3615b3bec3dfb105f134fba08423a1fd1a68fbfa2615c91408271c4ef8926d43c0b5c6f8d0bb8 languageName: node linkType: hard @@ -1938,12 +1938,12 @@ __metadata: version: 0.0.0-use.local resolution: "@storybook/react@portal:../../../code/renderers/react::locator=portable-stories-react%40workspace%3A." dependencies: - "@storybook/components": "workspace:^" + "@storybook/components": "workspace:*" "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "workspace:^" - "@storybook/preview-api": "workspace:^" + "@storybook/manager-api": "workspace:*" + "@storybook/preview-api": "workspace:*" "@storybook/react-dom-shim": "workspace:*" - "@storybook/theming": "workspace:^" + "@storybook/theming": "workspace:*" peerDependencies: "@storybook/test": "workspace:*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -1976,11 +1976,11 @@ __metadata: linkType: soft "@storybook/theming@file:../../../code/deprecated/theming::locator=portable-stories-react%40workspace%3A.": - version: 8.4.0-alpha.7 - resolution: "@storybook/theming@file:../../../code/deprecated/theming#../../../code/deprecated/theming::hash=3f019a&locator=portable-stories-react%40workspace%3A." + version: 8.5.0-alpha.4 + resolution: "@storybook/theming@file:../../../code/deprecated/theming#../../../code/deprecated/theming::hash=74a1c8&locator=portable-stories-react%40workspace%3A." peerDependencies: - storybook: "workspace:^" - checksum: 10/80024449814b032a9156fe2c70ff481fcfd04f5812c818b162dadadad36b9e642e1577ec51fd1330937d30853538c216662aad8f002cc75d088dc73e019afc2d + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10/387dd03f4a10a4a1f6381a9e150a3c4a96a5ce3f6aec4557a954fa3c629630e667a5e60003fed6a5ed31a7844dcd3507bcf996614e1ddb0cda8ad74b6922f3b4 languageName: node linkType: hard