From 2bdd9dc9692f04276d1809f0917af3342fc45ce7 Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Mon, 19 Aug 2024 23:00:11 -0600
Subject: [PATCH 01/39] WIP: Docs for Test runner with Vitest
- Includes sidebar order updates
- Use non-zero-indexed orders
---
.../portable-stories-jest.mdx | 2 +-
.../portable-stories-playwright.mdx | 2 +-
.../portable-stories-vitest.mdx | 2 +-
docs/writing-tests/accessibility-testing.mdx | 2 +-
docs/writing-tests/addon-vitest.mdx | 346 ++++++++++++++++++
.../import-stories-in-tests/index.mdx | 2 +-
.../stories-in-end-to-end-tests.mdx | 2 +-
.../stories-in-unit-tests.mdx | 2 +-
docs/writing-tests/interaction-testing.mdx | 2 +-
docs/writing-tests/snapshot-testing/index.mdx | 2 +-
.../snapshot-testing/snapshot-testing.mdx | 2 +
.../storyshots-migration-guide.mdx | 2 +
docs/writing-tests/test-coverage.mdx | 2 +-
docs/writing-tests/visual-testing.mdx | 2 +-
14 files changed, 361 insertions(+), 11 deletions(-)
create mode 100644 docs/writing-tests/addon-vitest.mdx
diff --git a/docs/api/portable-stories/portable-stories-jest.mdx b/docs/api/portable-stories/portable-stories-jest.mdx
index 64038d44dd7a..209aa2942e49 100644
--- a/docs/api/portable-stories/portable-stories-jest.mdx
+++ b/docs/api/portable-stories/portable-stories-jest.mdx
@@ -2,7 +2,7 @@
title: 'Portable stories in Jest'
sidebar:
title: Jest
- order: 1
+ order: 2
---
diff --git a/docs/api/portable-stories/portable-stories-playwright.mdx b/docs/api/portable-stories/portable-stories-playwright.mdx
index 2cbae20f3dd9..a2becdc78b74 100644
--- a/docs/api/portable-stories/portable-stories-playwright.mdx
+++ b/docs/api/portable-stories/portable-stories-playwright.mdx
@@ -2,7 +2,7 @@
title: 'Portable stories in Playwright CT'
sidebar:
title: Playwright
- order: 2
+ order: 3
---
(β οΈ **Experimental**)
diff --git a/docs/api/portable-stories/portable-stories-vitest.mdx b/docs/api/portable-stories/portable-stories-vitest.mdx
index 11aa9b99475d..281d18b1adf9 100644
--- a/docs/api/portable-stories/portable-stories-vitest.mdx
+++ b/docs/api/portable-stories/portable-stories-vitest.mdx
@@ -2,7 +2,7 @@
title: 'Portable stories in Vitest'
sidebar:
title: Vitest
- order: 0
+ order: 1
---
diff --git a/docs/writing-tests/accessibility-testing.mdx b/docs/writing-tests/accessibility-testing.mdx
index 5942811bfb27..2c2eebbe506a 100644
--- a/docs/writing-tests/accessibility-testing.mdx
+++ b/docs/writing-tests/accessibility-testing.mdx
@@ -1,7 +1,7 @@
---
title: 'Accessibility tests'
sidebar:
- order: 3
+ order: 4
title: Accessibility tests
---
diff --git a/docs/writing-tests/addon-vitest.mdx b/docs/writing-tests/addon-vitest.mdx
new file mode 100644
index 000000000000..139f9e6d170e
--- /dev/null
+++ b/docs/writing-tests/addon-vitest.mdx
@@ -0,0 +1,346 @@
+---
+title: 'Test runner with Vitest'
+sidebar:
+ order: 2
+ title: Test runner with Vitest
+---
+
+TK - Intro
+
+## Set up
+
+To get started, run the following command to install and configure the addon:
+
+{/* TODO: Snippetize */}
+```sh
+npx storybook@latest add @storybook/experimental-addon-vitest
+```
+
+That command will do the following:
+
+1. Install and register the Vitest addon, which contains the plugin to run your stories as tests
+1. Inspect your project's Vite and Vitest setup
+ 1. If Vite is not installed and you're using the [`nextjs` framework](../get-started/frameworks/nextjs.mdx), it will install and configure Vite for you, as well as `vite-plugin-storybook-nextjs` (necessary to have your Next.js components function in Vitest).
+ 1. Otherwise, if Vite is not installed, it will stop and point you to these instructions to continue setting it up in your project.
+ 1. If Vite is installed, it will then check for Vitest.
+ 1. If Vitest is not installed, it will:
+ 1. Install `vitest`, `@vitest/browser`, and `playwright`
+ 1. Run `npx playwright install chromium` to install the Chromium browser engine
+ 1. Create a Vitest config file (`vitest.config.ts`) and a Vitest setup file (`storybook.setup.ts`)
+ 1. If Vitest is installed, it will stop and point you to these instructions to continue setting it up in your project.
+
+
+
+ If your stories use template-based Vue components, you may need to [alias the `vue` module](https://vuejs.org/guide/scaling-up/tooling#note-on-in-browser-template-compilation) to resolve correctly in the Playwright CT environment. You can do this via the [`ctViteConfig` property](https://playwright.dev/docs/test-components#i-have-a-project-that-already-uses-vite-can-i-reuse-the-config):
+
+
+ Example Playwright configuration
+
+```ts
+// playwright-config.ts
+import { defineConfig } from '@playwright/experimental-ct-vue';
+
+export default defineConfig({
+ ctViteConfig: {
+ resolve: {
+ alias: {
+ vue: 'vue/dist/vue.esm-bundler.js',
+ },
+ },
+ },
+});
+```
+
+
+
+
+The configuration produced by the `add` command will attempt to set some sensible defaults for your project. However, you may need to adjust the configuration to fit your project's needs. The full configuration options can be found in the [API section](#options), below.
+
+### Example configuration files
+
+Here are configuration files generated by the `add` command. You can use these as a reference when setting up your project.
+
+
+ Example Vitest setup file
+
+```ts title="storybook.setup.ts"
+TK
+```
+
+
+
+ Example Vitest config file
+
+```ts title="vitest.config.ts"
+import { defineConfig, mergeConfig } from 'vitest/config'
+import viteConfig from '../vite.config'
+import { storybookTest } from '@storybook/experimental-addon-vitest/plugin'
+
+export default mergeConfig(
+ viteConfig,
+ defineConfig({
+ // ... TK
+ })
+)
+```
+
+
+
+ Example Vitest workspace file
+
+{/* TODO: Nextjs & SvelteKit examples */}
+```ts title="vitest.workspace.ts"
+import { defineWorkspace } from 'vitest/config'
+import { storybookTest } from '@storybook/experimental-addon-vitest/plugin'
+
+export default defineWorkspace([
+ // This is the path to your existing Vitest config files
+ './vitest.config.ts',
+ {
+ name: 'storybook',
+ plugins: [
+ storybookTest({
+ storybookScript: 'yarn storybook --ci',
+ }),
+ ],
+ // Glob pattern to find story files
+ include: ['../src/**/*.stories.?(m)[jt]s?(x)'],
+ // Enable browser mode
+ browser: {
+ enabled: true,
+ name: 'chromium',
+ // Make sure to install Playwright
+ provider: 'playwright',
+ headless: true,
+ },
+ setupFiles: ['./storybook.setup.ts'],
+ }
+])
+```
+
+
+## How it works
+
+Before running tests using the plugin, it's helpful to understand how it works.
+
+First, the plugin does not need to run or build Storybook to test your stories. Instead, it transforms your stories into tests using Vite and [portable stories](../api/portable-stories/portable-stories-vitest.mdx). Portable stories are a mechanism to compose all of a story's configuration ([parameters](../writing-stories/parameters.mdx), [decorators](../writing-stories/decorators.mdx), etc.) with the story itself. This allows you to run your stories as tests without needing to run Storybook.
+
+Those tests are then run using Vitest. We recommend (and configure, by default) running Vitest in browser mode, using Playwright's Chromium browser. Browser mode ensures your components are tested in a real browser environment, which is more accurate than simulations like JSDom or HappyDom. This is especially important for testing components that rely on browser APIs or features.
+
+Stories are tested in two ways: a smoke test to ensure it renders and, if a [play function](../writing-stories/play-function.mdx) is defined, that function is run and any [assertions made](../writing-tests/interaction-testing.mdx#assert-tests-with-vitests-apis) within it are validated.
+
+### Debugging
+
+While the plugin does not require Storybook to run when testing, you may still want to run Storybook to debug your tests. To enable this, provide the [`storybookScript` option](#storybookscript) in the plugin configuration. When you run Vitest in watch mode, the plugin will start Storybook using this script and provide links to the story in the output on test failures. This allows you to quickly jump to the story in Storybook to debug the issue.
+
+You can also provide a [`storybookUrl` option](#storybookurl) to the plugin configuration. When you're not using watch mode and tests fail, the plugin will provide a link to the story using this URL in the output. This is useful when [running tests in CI](#in-ci) or other environments where Storybook is not already running.
+
+TK - Screenshot of test output with links to SB
+
+## Usage
+
+There are three primary ways to run tests using the Vitest plugin:
+
+### CLI
+
+The plugin transforms your stories into real Vitest tests, so you run those tests just like you run any other Vitest tests in your project. Typically, you will have a `test` script in your `package.json` that runs Vitest. When you run that script, the addon will find and run your story-based tests. Here's an example of running your tests (in [watch mode](https://vitest.dev/guide/cli.html#vitest-watch), by default) using the Vitest CLI:
+
+{/* TODO: Snippetize */}
+```sh
+npm run test
+```
+
+### Editor extension
+
+Transforming your stories into Vitest tests with the plugin also enables you to run and debug tests using Vitest [IDE integrations](https://vitest.dev/guide/ide.html). This allows you to run tests directly from your editor, such as VSCode and JetBrains IDE.
+
+TK - Screenshot of VS Code
+
+### In CI
+
+For the most part, running your Storybook tests in CI is done [via the CLI](#cli). However, to have the test output link to your published Storybook on test failures, you need to provide the [`storybookUrl` option](#storybookurl) in the plugin configuration.
+
+Here's an example using GitHub Actions. The steps are similar for other CI providers, though details in the syntax or configuration may vary.
+
+First, we run a command to build and publish Storybook. In this case, we'll use Chromatic. This gives us a URL to the published Storybook instance. We then pass that URL to the plugin configuration using an environment variable. Finally, we update the plugin configuration to use that environment variable in the `storybookUrl` option.
+
+```yaml
+TK
+```
+
+```js title="vitest.workspace.ts"
+process.env.SB_URL
+```
+
+## Configuration
+
+Most of the configuration for the Vitest plugin's behavior is done in the Vitest configuration files. However, you can also define configuration in your stories themselves, using [tags](../writing-stories/tags.mdx), to control how they are tested.
+
+In this example, the Default story will not be tested, and the Primary story will.
+
+{/* TODO: Snippetize */}
+```js title="Button.stories.tsx"
+import { Button } from './Button'
+
+export default {
+ component: Button,
+ // π Apply `test` tag to all stories in this file
+ tags: ['test'],
+}
+
+export const Default = {
+ // π Remove `test` tag from this story
+ tags: ['!test'],
+}
+
+export const Primary = {
+ args: { primary: true }
+}
+```
+
+By default, the plugin will run all stories with the `test` tag. You can adjust this behavior by providing the [`tags` option](#tags) in the plugin configuration. This allows you to include, exclude, or skip stories based on their tags.
+
+Here's an example of how you might configure the plugin to only run stories with the `test` and `spec` tags, while excluding stories with the `docs-only` tag:
+
+{/* TODO: Snippetize */}
+```js title="vitest.workspace.ts"
+{
+ plugins: [
+ storybookTest({
+ tags: {
+ include: ['test', 'spec'],
+ exclude: ['docs-only'],
+ },
+ }),
+ ],
+}
+```
+
+If the same tag is in both the `include` and `exclude` arrays, the `exclude` behavior takes precedence.
+
+## FAQ
+
+### How to ensure my tests can find assets in the public directory?
+
+If your stories use assets in the public directory and you're not using the default public directory location (`public`), you need to adjust the Vitest configuration to include the public directory. You can do this by providing the `publicDir` option in the Vitest configuration file.
+
+```ts
+TK
+```
+
+### How to debug my tests in Storybook?
+
+The plugin will attempt to provide links to the story in Storybook when tests fail, for [debugging](#debugging) purposes.
+
+If the URLs are not working when running tests in watch mode, you should check two configuration options:
+
+- [`storybookUrl`](#storybookurl): Ensure this URL is correct and accessible. For example, the default is `http://localhost:6006`, which may not use the same port number you're using.
+- [`storybookScript`](#storybookscript): Ensure this script is correctly starting Storybook.
+
+If the URLs are not working when running tests in CI, you should ensure the Storybook is built and published before running the tests. You can then provide the URL to the published Storybook using the `storybookUrl` option. See the [In CI](#in-ci) section for an example.
+
+### How to apply custom Vite configuration?
+
+If you have custom operations defined in [`viteFinal`](../api/main-config/main-config-vite-final.mdx) in your `.storybook/main.js|ts` file, you will need to translate those into the Vitest configuration. This is because the plugin does not use the Storybook Vite configuration.
+
+```ts
+TK
+```
+
+### Why do we recommend browser mode?
+
+```
+1. Itβs a real browser environment. JSDom/HappyDom are simulations with shortcomings.
+2. https://vitest.dev/guide/browser/#motivation
+```
+
+### How to use WebDriver instead of Playwright?
+
+```
+https://vitest.dev/config/#browser-provider
+```
+
+### How to use a browser other than Chromium
+
+```
+https://vitest.dev/config/#browser-46-name
+```
+
+### How is this different from the test runner?
+
+```
+1. TR requires an SB instance to be running; this does not (except for debugging)
+2. TR runs SB and listens to results; this transforms stories (using portable stories) into tests
+3. TR is based on Jest; this is based on Vitest
+4. This is more configurable and more simple than TR
+ 1. TR is always a separate command; this is just Vitest (`yarn test`)
+5. This is faster than TR
+ 1. Needs benchmarks
+ 1. a sandbox run in our monorepo
+ 1. Vitest plugin: 1m 6s
+ 2. Test-runner: 1m 14s + SB build & publish time
+```
+
+### Why does the `add` command stop in some cases?
+
+TK
+
+## API
+
+### Exports
+
+`@storybook/experimental-addon-vitest/plugin`
+
+TK
+
+### Options
+
+#### `configDir`
+
+Type: `string`
+
+Default: `.storybook`
+
+The directory where the Storybook configuration is located, relative to CWD. If not provided, the plugin will use `.storybook` in the current working directory.
+
+#### `storybookScript`
+
+Type: `string`
+
+Optional script to run Storybook. If provided, Vitest will start Storybook using this script when run in watch mode. Only runs if the Storybook in `storybookUrl` is not already available.
+
+#### `storybookUrl`
+
+Type: `string`
+
+Default: `http://localhost:6006`
+
+The URL where Storybook is hosted. This is used for internal checks and to provide a link to the story in the test output on failures.
+
+#### `tags`
+
+Type:
+
+```ts
+{
+ include: string[];
+ exclude: string[];
+ skip: string[];
+}
+```
+
+Default:
+
+```ts
+{
+ include: ['test'],
+ exclude: [],
+ skip: [],
+}
+```
+
+Tags to include, exclude, or skip. These tags are defined as annotations in your story, meta, or preview.
+
+- `include`: `string[]` - Tags to include.
+- `exclude`: `string[]` - Tags to exclude.
+- `skip`: `string[]` - Tags to skip.
diff --git a/docs/writing-tests/import-stories-in-tests/index.mdx b/docs/writing-tests/import-stories-in-tests/index.mdx
index c845f373267b..dc51d8da2e83 100644
--- a/docs/writing-tests/import-stories-in-tests/index.mdx
+++ b/docs/writing-tests/import-stories-in-tests/index.mdx
@@ -1,6 +1,6 @@
---
title: Import stories in tests
sidebar:
- order: 7
+ order: 8
title: Import stories in tests
---
\ No newline at end of file
diff --git a/docs/writing-tests/import-stories-in-tests/stories-in-end-to-end-tests.mdx b/docs/writing-tests/import-stories-in-tests/stories-in-end-to-end-tests.mdx
index 77167db0e88a..59997b7a38ee 100644
--- a/docs/writing-tests/import-stories-in-tests/stories-in-end-to-end-tests.mdx
+++ b/docs/writing-tests/import-stories-in-tests/stories-in-end-to-end-tests.mdx
@@ -2,7 +2,7 @@
title: 'Stories in end-to-end tests'
sidebar:
title: End-to-end tests
- order: 1
+ order: 2
---
Storybook seamlessly integrates with additional testing frameworks like [Cypress](https://www.cypress.io/) and [Playwright](https://playwright.dev/) to provide a comprehensive testing solution. By leveraging the Component Story Format (CSF), developers can write test cases that simulate user interactions and verify the behavior of individual components within the Storybook environment. This approach enables developers to thoroughly test their components' functionality, responsiveness, and visual appearance across different scenarios, resulting in more robust and reliable applications.
diff --git a/docs/writing-tests/import-stories-in-tests/stories-in-unit-tests.mdx b/docs/writing-tests/import-stories-in-tests/stories-in-unit-tests.mdx
index 7d16abf31b5f..67ab0e6585b2 100644
--- a/docs/writing-tests/import-stories-in-tests/stories-in-unit-tests.mdx
+++ b/docs/writing-tests/import-stories-in-tests/stories-in-unit-tests.mdx
@@ -2,7 +2,7 @@
title: 'Stories in unit tests'
sidebar:
title: Unit tests
- order: 0
+ order: 1
---
Teams test a variety of UI characteristics using different tools. Each tool requires you to replicate the same component state over and over. Thatβs a maintenance headache. Ideally, youβd set up your tests similarly and reuse that across tools.
diff --git a/docs/writing-tests/interaction-testing.mdx b/docs/writing-tests/interaction-testing.mdx
index a2ee5908316e..dee9c7409b11 100644
--- a/docs/writing-tests/interaction-testing.mdx
+++ b/docs/writing-tests/interaction-testing.mdx
@@ -1,7 +1,7 @@
---
title: 'Interaction tests'
sidebar:
- order: 4
+ order: 5
title: Interaction tests
---
diff --git a/docs/writing-tests/snapshot-testing/index.mdx b/docs/writing-tests/snapshot-testing/index.mdx
index 6ec310332af2..4ce4b3630102 100644
--- a/docs/writing-tests/snapshot-testing/index.mdx
+++ b/docs/writing-tests/snapshot-testing/index.mdx
@@ -1,6 +1,6 @@
---
title: Snapshot testing
sidebar:
- order: 6
+ order: 7
title: Snapshot testing
---
\ No newline at end of file
diff --git a/docs/writing-tests/snapshot-testing/snapshot-testing.mdx b/docs/writing-tests/snapshot-testing/snapshot-testing.mdx
index bc9ca5b12225..7565090aff5a 100644
--- a/docs/writing-tests/snapshot-testing/snapshot-testing.mdx
+++ b/docs/writing-tests/snapshot-testing/snapshot-testing.mdx
@@ -1,5 +1,7 @@
---
title: 'Write snapshot tests'
+sidebar:
+ order: 1
---
Snapshot tests compare the rendered markup of every story against known baselines. Itβs a way to identify markup changes that trigger rendering errors and warnings.
diff --git a/docs/writing-tests/snapshot-testing/storyshots-migration-guide.mdx b/docs/writing-tests/snapshot-testing/storyshots-migration-guide.mdx
index 7c4e5ec96847..18c2b5022be3 100644
--- a/docs/writing-tests/snapshot-testing/storyshots-migration-guide.mdx
+++ b/docs/writing-tests/snapshot-testing/storyshots-migration-guide.mdx
@@ -1,5 +1,7 @@
---
title: 'Storyshots migration guide'
+sidebar:
+ order: 2
---
diff --git a/docs/writing-tests/test-coverage.mdx b/docs/writing-tests/test-coverage.mdx
index 63ae072264eb..0d09d2033565 100644
--- a/docs/writing-tests/test-coverage.mdx
+++ b/docs/writing-tests/test-coverage.mdx
@@ -1,7 +1,7 @@
---
title: 'Test coverage'
sidebar:
- order: 5
+ order: 6
title: Test coverage
---
diff --git a/docs/writing-tests/visual-testing.mdx b/docs/writing-tests/visual-testing.mdx
index 33288d79a7f0..ba061e5f026f 100644
--- a/docs/writing-tests/visual-testing.mdx
+++ b/docs/writing-tests/visual-testing.mdx
@@ -2,7 +2,7 @@
title: Visual tests
hideRendererSelector: true
sidebar:
- order: 2
+ order: 3
title: Visual tests
---
From 89be6a0b45870c4b60d9f5ebb249b2bbb0675623 Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Wed, 21 Aug 2024 14:54:54 -0600
Subject: [PATCH 02/39] More updates
---
docs/writing-tests/addon-vitest.mdx | 205 ++++++++++++++++------------
1 file changed, 120 insertions(+), 85 deletions(-)
diff --git a/docs/writing-tests/addon-vitest.mdx b/docs/writing-tests/addon-vitest.mdx
index 139f9e6d170e..0f472f806364 100644
--- a/docs/writing-tests/addon-vitest.mdx
+++ b/docs/writing-tests/addon-vitest.mdx
@@ -5,47 +5,43 @@ sidebar:
title: Test runner with Vitest
---
-TK - Intro
+(β οΈ **Experimental**)
-## Set up
+Storybook's test runner with Vitest uses a Vitest plugin to transform your [stories](../writing-stories/index.mdx) into tests. You can then run those tests just like any other in Vitest, which will check that the story renders without errors and, if a [play function](../writing-stories/play-function.mdx) is defined, that it runs as expected and any [assertions made](../writing-tests/interaction-testing.mdx#assert-tests-with-vitests-apis) within it are validated.
-To get started, run the following command to install and configure the addon:
+By using Vitest's browser mode, those tests are run in a real browser environment, which gives you more reliable results for UI components that commonly rely on browser APIs or features.
+
+## Setup
+
+Get started by installing and configuring the plugin in your project.
+
+### Automatic
+
+Run the following command to install and configure the addon, which contains the plugin to run your stories as tests using Vitest:
{/* TODO: Snippetize */}
```sh
npx storybook@latest add @storybook/experimental-addon-vitest
```
-That command will do the following:
-
-1. Install and register the Vitest addon, which contains the plugin to run your stories as tests
-1. Inspect your project's Vite and Vitest setup
- 1. If Vite is not installed and you're using the [`nextjs` framework](../get-started/frameworks/nextjs.mdx), it will install and configure Vite for you, as well as `vite-plugin-storybook-nextjs` (necessary to have your Next.js components function in Vitest).
- 1. Otherwise, if Vite is not installed, it will stop and point you to these instructions to continue setting it up in your project.
- 1. If Vite is installed, it will then check for Vitest.
- 1. If Vitest is not installed, it will:
- 1. Install `vitest`, `@vitest/browser`, and `playwright`
- 1. Run `npx playwright install chromium` to install the Chromium browser engine
- 1. Create a Vitest config file (`vitest.config.ts`) and a Vitest setup file (`storybook.setup.ts`)
- 1. If Vitest is installed, it will stop and point you to these instructions to continue setting it up in your project.
+That command will install and register the Vitest addon. It will also inspect your project's Vite and Vitest setup, and install and configure them if necessary.
- If your stories use template-based Vue components, you may need to [alias the `vue` module](https://vuejs.org/guide/scaling-up/tooling#note-on-in-browser-template-compilation) to resolve correctly in the Playwright CT environment. You can do this via the [`ctViteConfig` property](https://playwright.dev/docs/test-components#i-have-a-project-that-already-uses-vite-can-i-reuse-the-config):
+ If your stories use template-based Vue components, you may need to [alias the `vue` module](https://vuejs.org/guide/scaling-up/tooling#note-on-in-browser-template-compilation) to resolve correctly in the test environment:
- Example Playwright configuration
+ Example Vite configuration
```ts
-// playwright-config.ts
-import { defineConfig } from '@playwright/experimental-ct-vue';
+// vite.config.ts
+import { defineConfig } from 'vite/config';
export default defineConfig({
- ctViteConfig: {
- resolve: {
- alias: {
- vue: 'vue/dist/vue.esm-bundler.js',
- },
+ // ...
+ resolve: {
+ alias: {
+ vue: 'vue/dist/vue.esm-bundler.js',
},
},
});
@@ -56,6 +52,47 @@ export default defineConfig({
The configuration produced by the `add` command will attempt to set some sensible defaults for your project. However, you may need to adjust the configuration to fit your project's needs. The full configuration options can be found in the [API section](#options), below.
+### Manual
+
+For some project setups, the `add` command may be unable to automate the plugin setup and ask you to complete additional setup steps. Here's what to do:
+
+1. Install the addon, `@storybook/experimental-addon-vitest`, in your project and [register it in your Storybook configuration](http://storybook.js.org/docs/addons/install-addons#manual-installation).
+1. Make sure Vite and Vitest are configured in your project.
+1. Make sure Vitest is configured to use [browser mode](https://vitest.dev/guide/browser/).
+1. If you're using Next.js, make sure you're using [`vite-plugin-storybook-nextjs`](https://github.com/storybookjs/vite-plugin-storybook-nextjs).
+1. If you're using SvelteKit, make sure you're using `@storybook/sveltekit/vite`.
+1. Create a [test setup file](../api/portable-stories/portable-stories-vitest.mdx#setprojectannotations), `storybook.setup.ts`, in the root of your project.
+1. Adjust your Vitest configuration to include the plugin(s) and reference the setup file. Here's an example:
+
+{/* TODO: Nextjs & SvelteKit examples */}
+```ts title="vitest.config.ts"
+import { defineConfig, mergeConfig } from 'vitest/config'
+import viteConfig from '../vite.config'
+import { storybookTest } from '@storybook/experimental-addon-vitest/plugin'
+
+export default mergeConfig(
+ viteConfig,
+ defineConfig({
+ plugins: [
+ storybookTest({
+ storybookScript: 'yarn storybook --ci',
+ }),
+ ],
+ // Glob pattern to find story files
+ include: ['../src/**/*.stories.?(m)[jt]s?(x)'],
+ // Enable browser mode
+ browser: {
+ enabled: true,
+ name: 'chromium',
+ // Make sure to install Playwright
+ provider: 'playwright',
+ headless: true,
+ },
+ setupFiles: ['./storybook.setup.ts'],
+ })
+)
+```
+
### Example configuration files
Here are configuration files generated by the `add` command. You can use these as a reference when setting up your project.
@@ -162,45 +199,51 @@ For the most part, running your Storybook tests in CI is done [via the CLI](#cli
Here's an example using GitHub Actions. The steps are similar for other CI providers, though details in the syntax or configuration may vary.
-First, we run a command to build and publish Storybook. In this case, we'll use Chromatic. This gives us a URL to the published Storybook instance. We then pass that URL to the plugin configuration using an environment variable. Finally, we update the plugin configuration to use that environment variable in the `storybookUrl` option.
+When actions for services like Vercel, Netlify and others run a deployment job, they follow a pattern of emitting a `deployment_status` event containing the newly generated URL under `deployment_status.target_url`. This is the URL to the published Storybook instance. We then pass that URL to the plugin configuration using an environment variable, `SB_URL`. Finally, we update the plugin configuration to use that environment variable in the `storybookUrl` option.
```yaml
-TK
+name: Storybook Tests
+on: deployment_status
+jobs:
+ test:
+ timeout-minutes: 60
+ runs-on: ubuntu-latest
+ if: github.event.deployment_status.state == 'success'
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: '18.x'
+ - name: Install dependencies
+ run: yarn
+ - name: Run Storybook tests
+ run: yarn test-storybook
+ env:
+ SB_URL: '${{ github.event.deployment_status.target_url }}'
```
```js title="vitest.workspace.ts"
-process.env.SB_URL
+storybookTest({
+ storybookScript: 'yarn storybook --ci',
+ storybookUrl: process.env.SB_URL
+}),
```
## Configuration
Most of the configuration for the Vitest plugin's behavior is done in the Vitest configuration files. However, you can also define configuration in your stories themselves, using [tags](../writing-stories/tags.mdx), to control how they are tested.
-In this example, the Default story will not be tested, and the Primary story will.
+By default, the plugin will run all stories with the `test` tag. You can adjust this behavior by providing the [`tags` option](#tags) in the plugin configuration. This allows you to include, exclude, or skip stories based on their tags.
-{/* TODO: Snippetize */}
-```js title="Button.stories.tsx"
-import { Button } from './Button'
+In this example, we'll apply the `stable` tag to all of the Button component's stories, except for ExperimentalFeatureStory, which will have the `experimental` tag:
-export default {
- component: Button,
- // π Apply `test` tag to all stories in this file
- tags: ['test'],
-}
+{/* prettier-ignore-start */}
-export const Default = {
- // π Remove `test` tag from this story
- tags: ['!test'],
-}
+
-export const Primary = {
- args: { primary: true }
-}
-```
-
-By default, the plugin will run all stories with the `test` tag. You can adjust this behavior by providing the [`tags` option](#tags) in the plugin configuration. This allows you to include, exclude, or skip stories based on their tags.
+{/* prettier-ignore-end */}
-Here's an example of how you might configure the plugin to only run stories with the `test` and `spec` tags, while excluding stories with the `docs-only` tag:
+To connect those tags to our test behavior, we can adjust the plugin configuration to exclude the `experimental` tag:
{/* TODO: Snippetize */}
```js title="vitest.workspace.ts"
@@ -208,8 +251,8 @@ Here's an example of how you might configure the plugin to only run stories with
plugins: [
storybookTest({
tags: {
- include: ['test', 'spec'],
- exclude: ['docs-only'],
+ include: ['test'],
+ exclude: ['experimental'],
},
}),
],
@@ -222,11 +265,7 @@ If the same tag is in both the `include` and `exclude` arrays, the `exclude` beh
### How to ensure my tests can find assets in the public directory?
-If your stories use assets in the public directory and you're not using the default public directory location (`public`), you need to adjust the Vitest configuration to include the public directory. You can do this by providing the `publicDir` option in the Vitest configuration file.
-
-```ts
-TK
-```
+If your stories use assets in the public directory and you're not using the default public directory location (`public`), you need to adjust the Vitest configuration to include the public directory. You can do this by providing the [`publicDir` option in the Vitest configuration file](https://vitejs.dev/config/shared-options.html#publicdir).
### How to debug my tests in Storybook?
@@ -249,59 +288,55 @@ TK
### Why do we recommend browser mode?
-```
-1. Itβs a real browser environment. JSDom/HappyDom are simulations with shortcomings.
-2. https://vitest.dev/guide/browser/#motivation
-```
+Vitest's browser mode runs your tests in a real browser (Chromium, via Playwright, in the default configuration). The alternative is a simulated browser environment, like JSDom or HappyDom, which can have differences in behavior compared to a real browser. For UI components, which can often depend on browser APIs or features, running tests in a real browser is more accurate.
+
+For more, see [Vitest's guide on using browser mode effectively](https://vitest.dev/guide/browser/#motivation).
### How to use WebDriver instead of Playwright?
-```
-https://vitest.dev/config/#browser-provider
-```
+We recommend running tests in a browser using Playwright, but you can use WebDriverIO instead. To do so, you need to adjust the [browser provider in the Vitest configuration file](https://vitest.dev/config/#browser-provider).
### How to use a browser other than Chromium
-```
-https://vitest.dev/config/#browser-46-name
-```
+We recommend using Chromium, because it is most likely to best match the experience of a majority of your users. However, you can use other browsers by adjusting the [browser name in the Vitest configuration file](https://vitest.dev/config/#browser-name). Note that [Playwright and WebDriverIO support different browsers](https://vitest.dev/guide/browser/#browser-option-types).
-### How is this different from the test runner?
+### How is this different from the previous test runner?
-```
-1. TR requires an SB instance to be running; this does not (except for debugging)
-2. TR runs SB and listens to results; this transforms stories (using portable stories) into tests
-3. TR is based on Jest; this is based on Vitest
-4. This is more configurable and more simple than TR
- 1. TR is always a separate command; this is just Vitest (`yarn test`)
-5. This is faster than TR
- 1. Needs benchmarks
- 1. a sandbox run in our monorepo
- 1. Vitest plugin: 1m 6s
- 2. Test-runner: 1m 14s + SB build & publish time
-```
+The [previous test runner](./test-runner.mdx) requires a running Storybook instance to test your stories, because it visits each one, executes the play function, and listens for results. This plugin, however, transforms your stories into tests using Vite and portable stories, so it does not need to run Storybook to test your stories. Beyond that core difference, there are a few other distinctions:
-### Why does the `add` command stop in some cases?
+Additionally, the previous test runner ran your stories as orchestrated tests in Jest, and that orchestration came with some complexity. By comparison, this plugin transforms your stories into real tests and then runs them using Vitest, which is simpler and more configurable.
-TK
+Finally, because of the simpler architecture and the use of Vitest, this plugin should be faster than the previous test runner for most projects. We'll do more benchmarking to quantify this in the future.
## API
### Exports
-`@storybook/experimental-addon-vitest/plugin`
+This addon contributes the following exports to Storybook:
-TK
+```js
+import { storybookTest } from '@storybook/experimental-addon-vitest/plugin'
+```
+
+#### `storybookTest`
+
+Type: `function`
+
+A [Vitest plugin](https://vitejs.dev/guide/api-plugin) that transforms your stories into tests. It accepts an [options object](#options) for configuration.
### Options
+The plugin is configured using an options object. Here are the available properties:
+
#### `configDir`
Type: `string`
Default: `.storybook`
-The directory where the Storybook configuration is located, relative to CWD. If not provided, the plugin will use `.storybook` in the current working directory.
+The directory where the Storybook configuration is located, relative to the current working directory.
+
+If your [Storybook configuration](../configure/index.mdx) is not in the default location, you **must** specify the location here so the plugin can function correctly.
#### `storybookScript`
@@ -341,6 +376,6 @@ Default:
Tags to include, exclude, or skip. These tags are defined as annotations in your story, meta, or preview.
-- `include`: `string[]` - Tags to include.
-- `exclude`: `string[]` - Tags to exclude.
-- `skip`: `string[]` - Tags to skip.
+- **`include`**: Stories with these tags will be tested
+- **`exclude`**: Stories with these tags will not be tested, and will not be counted in the test results
+- **`skip`**: Stories with these tags will not be tested, and will be counted in the test results
From 877e4a335af93d57cf345467fd5aaff40a4ee5d7 Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Wed, 21 Aug 2024 16:32:58 -0600
Subject: [PATCH 03/39] More updates
---
...vitest.mdx => test-runner-with-vitest.mdx} | 65 +++++++++----------
1 file changed, 32 insertions(+), 33 deletions(-)
rename docs/writing-tests/{addon-vitest.mdx => test-runner-with-vitest.mdx} (94%)
diff --git a/docs/writing-tests/addon-vitest.mdx b/docs/writing-tests/test-runner-with-vitest.mdx
similarity index 94%
rename from docs/writing-tests/addon-vitest.mdx
rename to docs/writing-tests/test-runner-with-vitest.mdx
index 0f472f806364..ba8b3f46517d 100644
--- a/docs/writing-tests/addon-vitest.mdx
+++ b/docs/writing-tests/test-runner-with-vitest.mdx
@@ -61,10 +61,31 @@ For some project setups, the `add` command may be unable to automate the plugin
1. Make sure Vitest is configured to use [browser mode](https://vitest.dev/guide/browser/).
1. If you're using Next.js, make sure you're using [`vite-plugin-storybook-nextjs`](https://github.com/storybookjs/vite-plugin-storybook-nextjs).
1. If you're using SvelteKit, make sure you're using `@storybook/sveltekit/vite`.
-1. Create a [test setup file](../api/portable-stories/portable-stories-vitest.mdx#setprojectannotations), `storybook.setup.ts`, in the root of your project.
-1. Adjust your Vitest configuration to include the plugin(s) and reference the setup file. Here's an example:
+1. Create a [test setup file](../api/portable-stories/portable-stories-vitest.mdx#setprojectannotations), `.storybook/vitest.setup.ts`.
+1. Adjust your Vitest configuration to include the plugin(s) and reference the setup file. You can reference examples, below.
+
+### Example configuration files
+
+Here are configuration files generated by the `add` command. You can use these as a reference when setting up your project.
+
+
+ Example Vitest setup file
+
+```ts title=".storybook/vitest.setup.ts"
+import { beforeAll } from 'vitest';
+// Replace your-renderer with the renderer you are using (e.g., react, vue3, svelte, etc.)
+import { setProjectAnnotations } from '@storybook/your-renderer';
+import * as projectAnnotations from './preview';
+
+const project = setProjectAnnotations(projectAnnotations);
+
+beforeAll(project.beforeAll);
+```
+
+
+
+ Example Vitest config file
-{/* TODO: Nextjs & SvelteKit examples */}
```ts title="vitest.config.ts"
import { defineConfig, mergeConfig } from 'vitest/config'
import viteConfig from '../vite.config'
@@ -88,35 +109,10 @@ export default mergeConfig(
provider: 'playwright',
headless: true,
},
- setupFiles: ['./storybook.setup.ts'],
- })
-)
-```
-
-### Example configuration files
-
-Here are configuration files generated by the `add` command. You can use these as a reference when setting up your project.
-
-
- Example Vitest setup file
-
-```ts title="storybook.setup.ts"
-TK
-```
-
-
-
- Example Vitest config file
-
-```ts title="vitest.config.ts"
-import { defineConfig, mergeConfig } from 'vitest/config'
-import viteConfig from '../vite.config'
-import { storybookTest } from '@storybook/experimental-addon-vitest/plugin'
-
-export default mergeConfig(
- viteConfig,
- defineConfig({
- // ... TK
+ // Disabling isolation is faster and similar to how tests are isolated in Storybook itself.
+ // Consider removing this, if you have flaky tests.
+ isolate: false,
+ setupFiles: ['./.storybook/vitest.setup.ts'],
})
)
```
@@ -150,7 +146,10 @@ export default defineWorkspace([
provider: 'playwright',
headless: true,
},
- setupFiles: ['./storybook.setup.ts'],
+ // Disabling isolation is faster and similar to how tests are isolated in Storybook itself.
+ // Consider removing this, if you have flaky tests.
+ isolate: false,
+ setupFiles: ['./.storybook/vitest.setup.ts'],
}
])
```
From 8cdbbaf95adbbff8305fcb0b8127f32823e03533 Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Mon, 26 Aug 2024 12:30:08 -0600
Subject: [PATCH 04/39] More polish
---
docs/_snippets/addon-vitest-install.md | 11 +++
docs/_snippets/addon-vitest-run-tests.md | 11 +++
.../writing-tests/test-runner-with-vitest.mdx | 80 +++++++++++--------
3 files changed, 70 insertions(+), 32 deletions(-)
create mode 100644 docs/_snippets/addon-vitest-install.md
create mode 100644 docs/_snippets/addon-vitest-run-tests.md
diff --git a/docs/_snippets/addon-vitest-install.md b/docs/_snippets/addon-vitest-install.md
new file mode 100644
index 000000000000..d54a74ca17d1
--- /dev/null
+++ b/docs/_snippets/addon-vitest-install.md
@@ -0,0 +1,11 @@
+```shell renderer="common" language="js" packageManager="npx"
+npx storybook@latest add @storybook/experimental-addon-vitest
+```
+
+```shell renderer="common" language="js" packageManager="pnpm"
+pnpm dlx storybook@latest add @storybook/experimental-addon-vitest
+```
+
+```shell renderer="common" language="js" packageManager="yarn"
+yarn dlx storybook@latest add @storybook/experimental-addon-vitest
+```
diff --git a/docs/_snippets/addon-vitest-run-tests.md b/docs/_snippets/addon-vitest-run-tests.md
new file mode 100644
index 000000000000..3b91e2d284ea
--- /dev/null
+++ b/docs/_snippets/addon-vitest-run-tests.md
@@ -0,0 +1,11 @@
+```shell renderer="common" language="js" packageManager="npm"
+npm run test
+```
+
+```shell renderer="common" language="js" packageManager="pnpm"
+pnpm run test
+```
+
+```shell renderer="common" language="js" packageManager="yarn"
+yarn test
+```
diff --git a/docs/writing-tests/test-runner-with-vitest.mdx b/docs/writing-tests/test-runner-with-vitest.mdx
index ba8b3f46517d..343a20555535 100644
--- a/docs/writing-tests/test-runner-with-vitest.mdx
+++ b/docs/writing-tests/test-runner-with-vitest.mdx
@@ -7,22 +7,25 @@ sidebar:
(β οΈ **Experimental**)
+
+ While this feature is experimental, it is published as the `@storybook/experimental-addon-vitest` package.
+
+
Storybook's test runner with Vitest uses a Vitest plugin to transform your [stories](../writing-stories/index.mdx) into tests. You can then run those tests just like any other in Vitest, which will check that the story renders without errors and, if a [play function](../writing-stories/play-function.mdx) is defined, that it runs as expected and any [assertions made](../writing-tests/interaction-testing.mdx#assert-tests-with-vitests-apis) within it are validated.
By using Vitest's browser mode, those tests are run in a real browser environment, which gives you more reliable results for UI components that commonly rely on browser APIs or features.
-## Setup
+## Install and set up
+
+Get started by upgrading to at least Storybook 8.3, then installing and configuring the plugin in your project.
-Get started by installing and configuring the plugin in your project.
+
-### Automatic
+### Automatic setup
Run the following command to install and configure the addon, which contains the plugin to run your stories as tests using Vitest:
-{/* TODO: Snippetize */}
-```sh
-npx storybook@latest add @storybook/experimental-addon-vitest
-```
+
That command will install and register the Vitest addon. It will also inspect your project's Vite and Vitest setup, and install and configure them if necessary.
@@ -52,7 +55,7 @@ export default defineConfig({
The configuration produced by the `add` command will attempt to set some sensible defaults for your project. However, you may need to adjust the configuration to fit your project's needs. The full configuration options can be found in the [API section](#options), below.
-### Manual
+### Manual setup
For some project setups, the `add` command may be unable to automate the plugin setup and ask you to complete additional setup steps. Here's what to do:
@@ -66,7 +69,7 @@ For some project setups, the `add` command may be unable to automate the plugin
### Example configuration files
-Here are configuration files generated by the `add` command. You can use these as a reference when setting up your project.
+Here are example configuration files generated by the `add` command. You can use these as a reference when setting up your project.
Example Vitest setup file
@@ -171,7 +174,7 @@ While the plugin does not require Storybook to run when testing, you may still w
You can also provide a [`storybookUrl` option](#storybookurl) to the plugin configuration. When you're not using watch mode and tests fail, the plugin will provide a link to the story using this URL in the output. This is useful when [running tests in CI](#in-ci) or other environments where Storybook is not already running.
-TK - Screenshot of test output with links to SB
+[TK - Screenshot of test output with links to SB]
## Usage
@@ -181,16 +184,13 @@ There are three primary ways to run tests using the Vitest plugin:
The plugin transforms your stories into real Vitest tests, so you run those tests just like you run any other Vitest tests in your project. Typically, you will have a `test` script in your `package.json` that runs Vitest. When you run that script, the addon will find and run your story-based tests. Here's an example of running your tests (in [watch mode](https://vitest.dev/guide/cli.html#vitest-watch), by default) using the Vitest CLI:
-{/* TODO: Snippetize */}
-```sh
-npm run test
-```
+
### Editor extension
Transforming your stories into Vitest tests with the plugin also enables you to run and debug tests using Vitest [IDE integrations](https://vitest.dev/guide/ide.html). This allows you to run tests directly from your editor, such as VSCode and JetBrains IDE.
-TK - Screenshot of VS Code
+[TK - Screenshot of VS Code]
### In CI
@@ -200,7 +200,7 @@ Here's an example using GitHub Actions. The steps are similar for other CI provi
When actions for services like Vercel, Netlify and others run a deployment job, they follow a pattern of emitting a `deployment_status` event containing the newly generated URL under `deployment_status.target_url`. This is the URL to the published Storybook instance. We then pass that URL to the plugin configuration using an environment variable, `SB_URL`. Finally, we update the plugin configuration to use that environment variable in the `storybookUrl` option.
-```yaml
+```yaml title=".github/workflows/test-storybook.yml"
name: Storybook Tests
on: deployment_status
jobs:
@@ -222,10 +222,20 @@ jobs:
```
```js title="vitest.workspace.ts"
-storybookTest({
- storybookScript: 'yarn storybook --ci',
- storybookUrl: process.env.SB_URL
-}),
+export default defineWorkspace([
+ // ...
+ {
+ // ...
+ {
+ plugins: [
+ storybookTest({
+ storybookScript: 'yarn storybook --ci',
+ storybookUrl: process.env.SB_URL
+ }),
+ ],
+ },
+ },
+])
```
## Configuration
@@ -244,18 +254,24 @@ In this example, we'll apply the `stable` tag to all of the Button component's s
To connect those tags to our test behavior, we can adjust the plugin configuration to exclude the `experimental` tag:
-{/* TODO: Snippetize */}
```js title="vitest.workspace.ts"
-{
- plugins: [
- storybookTest({
- tags: {
- include: ['test'],
- exclude: ['experimental'],
- },
- }),
- ],
-}
+export default defineWorkspace([
+ // ...
+ {
+ // ...
+ {
+ plugins: [
+ storybookTest({
+ // ...
+ tags: {
+ include: ['test'],
+ exclude: ['experimental'],
+ },
+ }),
+ ],
+ },
+ },
+])
```
If the same tag is in both the `include` and `exclude` arrays, the `exclude` behavior takes precedence.
@@ -282,7 +298,7 @@ If the URLs are not working when running tests in CI, you should ensure the Stor
If you have custom operations defined in [`viteFinal`](../api/main-config/main-config-vite-final.mdx) in your `.storybook/main.js|ts` file, you will need to translate those into the Vitest configuration. This is because the plugin does not use the Storybook Vite configuration.
```ts
-TK
+TK - Is there a good example we could offer here?
```
### Why do we recommend browser mode?
From 5d06f4d7507e6a866408efe83228bd2e7017e317 Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Tue, 27 Aug 2024 09:02:09 -0600
Subject: [PATCH 05/39] Apply suggestions from code review
Co-authored-by: Kasper Peulen
---
docs/writing-tests/test-runner-with-vitest.mdx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/writing-tests/test-runner-with-vitest.mdx b/docs/writing-tests/test-runner-with-vitest.mdx
index 343a20555535..aaa24c3b58f8 100644
--- a/docs/writing-tests/test-runner-with-vitest.mdx
+++ b/docs/writing-tests/test-runner-with-vitest.mdx
@@ -91,7 +91,7 @@ beforeAll(project.beforeAll);
```ts title="vitest.config.ts"
import { defineConfig, mergeConfig } from 'vitest/config'
-import viteConfig from '../vite.config'
+import viteConfig from './vite.config'
import { storybookTest } from '@storybook/experimental-addon-vitest/plugin'
export default mergeConfig(
@@ -103,7 +103,7 @@ export default mergeConfig(
}),
],
// Glob pattern to find story files
- include: ['../src/**/*.stories.?(m)[jt]s?(x)'],
+ include: ['src/**/*.stories.?(m)[jt]s?(x)'],
// Enable browser mode
browser: {
enabled: true,
@@ -140,7 +140,7 @@ export default defineWorkspace([
}),
],
// Glob pattern to find story files
- include: ['../src/**/*.stories.?(m)[jt]s?(x)'],
+ include: ['src/**/*.stories.?(m)[jt]s?(x)'],
// Enable browser mode
browser: {
enabled: true,
From 4aeab563118f47f575088ef92f450b88a9be247d Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Tue, 27 Aug 2024 09:52:16 -0600
Subject: [PATCH 06/39] Further updates
---
docs/_snippets/addon-vitest-install.md | 6 ++--
.../writing-tests/test-runner-with-vitest.mdx | 34 +++++++++++++++++--
2 files changed, 35 insertions(+), 5 deletions(-)
diff --git a/docs/_snippets/addon-vitest-install.md b/docs/_snippets/addon-vitest-install.md
index d54a74ca17d1..06a229138d18 100644
--- a/docs/_snippets/addon-vitest-install.md
+++ b/docs/_snippets/addon-vitest-install.md
@@ -1,11 +1,11 @@
```shell renderer="common" language="js" packageManager="npx"
-npx storybook@latest add @storybook/experimental-addon-vitest
+npx storybook add @storybook/experimental-addon-vitest
```
```shell renderer="common" language="js" packageManager="pnpm"
-pnpm dlx storybook@latest add @storybook/experimental-addon-vitest
+pnpm exec storybook add @storybook/experimental-addon-vitest
```
```shell renderer="common" language="js" packageManager="yarn"
-yarn dlx storybook@latest add @storybook/experimental-addon-vitest
+yarn exec storybook add @storybook/experimental-addon-vitest
```
diff --git a/docs/writing-tests/test-runner-with-vitest.mdx b/docs/writing-tests/test-runner-with-vitest.mdx
index aaa24c3b58f8..ee470d740622 100644
--- a/docs/writing-tests/test-runner-with-vitest.mdx
+++ b/docs/writing-tests/test-runner-with-vitest.mdx
@@ -130,10 +130,12 @@ import { defineWorkspace } from 'vitest/config'
import { storybookTest } from '@storybook/experimental-addon-vitest/plugin'
export default defineWorkspace([
- // This is the path to your existing Vitest config files
+ // This is the path to your existing Vitest config file
'./vitest.config.ts',
{
name: 'storybook',
+ // This is the path to your existing Vite config file
+ extends: './vite.config.ts',
plugins: [
storybookTest({
storybookScript: 'yarn storybook --ci',
@@ -182,7 +184,29 @@ There are three primary ways to run tests using the Vitest plugin:
### CLI
-The plugin transforms your stories into real Vitest tests, so you run those tests just like you run any other Vitest tests in your project. Typically, you will have a `test` script in your `package.json` that runs Vitest. When you run that script, the addon will find and run your story-based tests. Here's an example of running your tests (in [watch mode](https://vitest.dev/guide/cli.html#vitest-watch), by default) using the Vitest CLI:
+The plugin transforms your stories into real Vitest tests, so you run those tests just like you run any other Vitest tests in your project. Typically, you will have a `test` script in your `package.json` that runs your tests.
+
+If you don't already have a `test` script, you can add one that runs Vitest:
+
+```json title="package.json"
+{
+ "scripts": {
+ "test": "vitest"
+ }
+}
+```
+
+If you already have a `test` script that runs something other than Vitest, you can either adjust it to run Vitest (as above) or add a new script that runs Vitest:
+
+```json title="package.json"
+{
+ "scripts": {
+ "test-storybook": "vitest"
+ }
+}
+```
+
+When you run that script, the addon will find and run your story-based tests. Here's an example of running your tests (in [watch mode](https://vitest.dev/guide/cli.html#vitest-watch), by default) using the Vitest CLI:
@@ -323,6 +347,12 @@ Additionally, the previous test runner ran your stories as orchestrated tests in
Finally, because of the simpler architecture and the use of Vitest, this plugin should be faster than the previous test runner for most projects. We'll do more benchmarking to quantify this in the future.
+### How to isolate Storybook tests from others?
+
+Some projects might contain a `test` property in their Vite configuration. Because the Vitest configuration used by this plugin extends that Vite config, the `test` properties are merged. This lack of isolation can cause issues with your Storybook tests.
+
+To isolate your Storybook tests from other tests, you need to move the `test` property from your Vite configuration to the Vitest configuration. The Vitest config used by the plugin can then safely extend your Vite config without merging the `test` property.
+
## API
### Exports
From e6d7ac5f56d04e9aac19ef68d8fc7ae7bdb99dc7 Mon Sep 17 00:00:00 2001
From: Valentin Palkovic
Date: Tue, 27 Aug 2024 20:14:51 +0200
Subject: [PATCH 07/39] Builder-Vite: Fix missing source map warning
---
.../src/codegen-modern-iframe-script.ts | 3 ++-
.../src/plugins/code-generator-plugin.ts | 23 +++++++++++--------
.../src/plugins/webpack-stats-plugin.ts | 7 +++++-
.../builder-vite/src/utils/virtual-module.ts | 3 +++
.../src/plugins/vue-component-meta.ts | 2 +-
5 files changed, 26 insertions(+), 12 deletions(-)
create mode 100644 code/builders/builder-vite/src/utils/virtual-module.ts
diff --git a/code/builders/builder-vite/src/codegen-modern-iframe-script.ts b/code/builders/builder-vite/src/codegen-modern-iframe-script.ts
index 2de92617befa..86756b002a27 100644
--- a/code/builders/builder-vite/src/codegen-modern-iframe-script.ts
+++ b/code/builders/builder-vite/src/codegen-modern-iframe-script.ts
@@ -2,6 +2,7 @@ import { getFrameworkName, loadPreviewOrConfigFile } from 'storybook/internal/co
import type { Options, PreviewAnnotation } from 'storybook/internal/types';
import { processPreviewAnnotation } from './utils/process-preview-annotation';
+import { getResolvedVirtualModuleId } from './utils/virtual-module';
import { virtualAddonSetupFile, virtualStoriesFile } from './virtual-file-names';
export async function generateModernIframeScriptCode(options: Options, projectRoot: string) {
@@ -45,7 +46,7 @@ export async function generateModernIframeScriptCode(options: Options, projectRo
return `
if (import.meta.hot) {
- import.meta.hot.accept('${virtualStoriesFile}', (newModule) => {
+ import.meta.hot.accept('${getResolvedVirtualModuleId(virtualStoriesFile)}', (newModule) => {
// importFn has changed so we need to patch the new one in
window.__STORYBOOK_PREVIEW__.onStoriesChanged({ importFn: newModule.importFn });
});
diff --git a/code/builders/builder-vite/src/plugins/code-generator-plugin.ts b/code/builders/builder-vite/src/plugins/code-generator-plugin.ts
index 89f6430f7584..1909ceda0988 100644
--- a/code/builders/builder-vite/src/plugins/code-generator-plugin.ts
+++ b/code/builders/builder-vite/src/plugins/code-generator-plugin.ts
@@ -8,6 +8,7 @@ import { generateImportFnScriptCode } from '../codegen-importfn-script';
import { generateModernIframeScriptCode } from '../codegen-modern-iframe-script';
import { generateAddonSetupCode } from '../codegen-set-addon-channel';
import { transformIframeHtml } from '../transform-iframe-html';
+import { getResolvedVirtualModuleId } from '../utils/virtual-module';
import {
virtualAddonSetupFile,
virtualFileId,
@@ -28,11 +29,15 @@ export function codeGeneratorPlugin(options: Options): Plugin {
// invalidate the whole vite-app.js script on every file change.
// (this might be a little too aggressive?)
server.watcher.on('change', () => {
- const appModule = server.moduleGraph.getModuleById(virtualFileId);
+ const appModule = server.moduleGraph.getModuleById(
+ getResolvedVirtualModuleId(virtualFileId)
+ );
if (appModule) {
server.moduleGraph.invalidateModule(appModule);
}
- const storiesModule = server.moduleGraph.getModuleById(virtualStoriesFile);
+ const storiesModule = server.moduleGraph.getModuleById(
+ getResolvedVirtualModuleId(virtualStoriesFile)
+ );
if (storiesModule) {
server.moduleGraph.invalidateModule(storiesModule);
}
@@ -70,33 +75,33 @@ export function codeGeneratorPlugin(options: Options): Plugin {
},
resolveId(source) {
if (source === virtualFileId) {
- return `${virtualFileId}`;
+ return getResolvedVirtualModuleId(virtualFileId);
}
if (source === iframePath) {
return iframeId;
}
if (source === virtualStoriesFile) {
- return `${virtualStoriesFile}`;
+ return getResolvedVirtualModuleId(virtualStoriesFile);
}
if (source === virtualPreviewFile) {
- return virtualPreviewFile;
+ return getResolvedVirtualModuleId(virtualPreviewFile);
}
if (source === virtualAddonSetupFile) {
- return `${virtualAddonSetupFile}`;
+ return getResolvedVirtualModuleId(virtualAddonSetupFile);
}
return undefined;
},
async load(id, config) {
- if (id === `${virtualStoriesFile}`) {
+ if (id === getResolvedVirtualModuleId(virtualStoriesFile)) {
return generateImportFnScriptCode(options);
}
- if (id === `${virtualAddonSetupFile}`) {
+ if (id === getResolvedVirtualModuleId(virtualAddonSetupFile)) {
return generateAddonSetupCode();
}
- if (id === `${virtualFileId}`) {
+ if (id === getResolvedVirtualModuleId(virtualFileId)) {
return generateModernIframeScriptCode(options, projectRoot);
}
diff --git a/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts b/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
index 3b8deebc8111..9442291df2aa 100644
--- a/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
+++ b/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
@@ -6,6 +6,8 @@ import type { BuilderStats } from 'storybook/internal/types';
import slash from 'slash';
import type { Plugin } from 'vite';
+import { getResolvedVirtualModuleId } from '../utils/virtual-module';
+
/*
* Reason, Module are copied from chromatic types
* https://github.com/chromaui/chromatic-cli/blob/145a5e295dde21042e96396c7e004f250d842182/bin-src/types.ts#L265-L276
@@ -50,7 +52,10 @@ export function pluginWebpackStats({ workingDir }: WebpackStatsPluginOptions): W
/** Convert an absolute path name to a path relative to the vite root, with a starting `./` */
function normalize(filename: string) {
// Do not try to resolve virtual files
- if (filename.startsWith('/virtual:')) {
+ if (
+ filename.startsWith('/virtual:') ||
+ filename.startsWith(getResolvedVirtualModuleId('/virtual:'))
+ ) {
return filename;
}
// Otherwise, we need them in the format `./path/to/file.js`.
diff --git a/code/builders/builder-vite/src/utils/virtual-module.ts b/code/builders/builder-vite/src/utils/virtual-module.ts
new file mode 100644
index 000000000000..6f72ce19d650
--- /dev/null
+++ b/code/builders/builder-vite/src/utils/virtual-module.ts
@@ -0,0 +1,3 @@
+export function getResolvedVirtualModuleId(virtualModuleId: string) {
+ return `\0${virtualModuleId}`;
+}
diff --git a/code/frameworks/vue3-vite/src/plugins/vue-component-meta.ts b/code/frameworks/vue3-vite/src/plugins/vue-component-meta.ts
index bb06a958a771..036ab18945ae 100644
--- a/code/frameworks/vue3-vite/src/plugins/vue-component-meta.ts
+++ b/code/frameworks/vue3-vite/src/plugins/vue-component-meta.ts
@@ -26,7 +26,7 @@ export async function vueComponentMeta(tsconfigPath = 'tsconfig.json'): Promise<
// exclude stories, virtual modules and storybook internals
const exclude =
- /\.stories\.(ts|tsx|js|jsx)$|^\/virtual:|^\/sb-preview\/|\.storybook\/.*\.(ts|js)$/;
+ /\.stories\.(ts|tsx|js|jsx)$|^\0\/virtual:|^\/virtual:|^\/sb-preview\/|\.storybook\/.*\.(ts|js)$/;
const include = /\.(vue|ts|js|tsx|jsx)$/;
const filter = createFilter(include, exclude);
From a92353857292eb83964588c21557b94c78e9dd28 Mon Sep 17 00:00:00 2001
From: Lars Rickert
Date: Wed, 31 Jul 2024 10:19:34 +0200
Subject: [PATCH 08/39] fix: add missing prop controls
---
code/frameworks/vue3-vite/src/plugins/vue-component-meta.ts | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/code/frameworks/vue3-vite/src/plugins/vue-component-meta.ts b/code/frameworks/vue3-vite/src/plugins/vue-component-meta.ts
index bb06a958a771..2696f116ffbd 100644
--- a/code/frameworks/vue3-vite/src/plugins/vue-component-meta.ts
+++ b/code/frameworks/vue3-vite/src/plugins/vue-component-meta.ts
@@ -284,7 +284,11 @@ async function getTsConfigReferences(tsConfigPath: string) {
* HTMLElement, MouseEvent) are used.
*/
function removeNestedSchemas(schema: PropertyMetaSchema) {
- if (typeof schema !== 'object') {
+ if (typeof schema !== 'object') return;
+ if (schema.kind === 'enum') {
+ // for enum types, we do not want to remove the schemas because otherwise the controls will be missing
+ // instead we remove the nested schemas for the enum entries to prevent out of memory errors for types like "HTMLElement | MouseEvent"
+ schema.schema?.forEach((enumSchema) => removeNestedSchemas(enumSchema));
return;
}
delete schema.schema;
From 78b22a96fe36a2331627a19523f9c89674c0be78 Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Wed, 28 Aug 2024 14:35:38 -0600
Subject: [PATCH 09/39] Address feedback
---
.../writing-tests/test-runner-with-vitest.mdx | 86 +++++++++----------
1 file changed, 39 insertions(+), 47 deletions(-)
diff --git a/docs/writing-tests/test-runner-with-vitest.mdx b/docs/writing-tests/test-runner-with-vitest.mdx
index ee470d740622..91244342922f 100644
--- a/docs/writing-tests/test-runner-with-vitest.mdx
+++ b/docs/writing-tests/test-runner-with-vitest.mdx
@@ -11,9 +11,11 @@ sidebar:
While this feature is experimental, it is published as the `@storybook/experimental-addon-vitest` package.
-Storybook's test runner with Vitest uses a Vitest plugin to transform your [stories](../writing-stories/index.mdx) into tests. You can then run those tests just like any other in Vitest, which will check that the story renders without errors and, if a [play function](../writing-stories/play-function.mdx) is defined, that it runs as expected and any [assertions made](../writing-tests/interaction-testing.mdx#assert-tests-with-vitests-apis) within it are validated.
+Storybook's test runner with Vitest transforms your [stories](../writing-stories/index.mdx) into tests using a Vitest plugin and [portable stories](../api/portable-stories/portable-stories-vitest.mdx). Those tests are then run using [Vitest](https://vitest.dev). This approach is faster and more flexible than the [previous test runner](./test-runner.mdx), which required a running Storybook instance to test your stories.
-By using Vitest's browser mode, those tests are run in a real browser environment, which gives you more reliable results for UI components that commonly rely on browser APIs or features.
+We recommend (and configure, by default) running Vitest in [browser mode](https://vitest.dev/guide/browser/), using [Playwright's](https://playwright.dev) Chromium browser. Browser mode ensures your components are tested in a real browser environment, which is more accurate than simulations like JSDom or HappyDom. This is especially important for testing components that rely on browser APIs or features.
+
+Stories are tested in two ways: a smoke test to ensure it renders and, if a [play function](../writing-stories/play-function.mdx) is defined, that function is run and any [assertions made](../writing-tests/interaction-testing.mdx#assert-tests-with-vitests-apis) within it are validated.
## Install and set up
@@ -27,7 +29,7 @@ Run the following command to install and configure the addon, which contains the
-That command will install and register the Vitest addon. It will also inspect your project's Vite and Vitest setup, and install and configure them if necessary.
+That [`add` command](../addons/install-addons.mdx#automatic-installation) will install and register the Vitest addon. It will also inspect your project's Vite and Vitest setup, and install and configure them with sensible defaults, if necessary. You may need to adjust the configuration to fit your project's needs. The full configuration options can be found in the [API section](#options), below.
@@ -53,23 +55,21 @@ export default defineConfig({
-The configuration produced by the `add` command will attempt to set some sensible defaults for your project. However, you may need to adjust the configuration to fit your project's needs. The full configuration options can be found in the [API section](#options), below.
-
### Manual setup
For some project setups, the `add` command may be unable to automate the plugin setup and ask you to complete additional setup steps. Here's what to do:
-1. Install the addon, `@storybook/experimental-addon-vitest`, in your project and [register it in your Storybook configuration](http://storybook.js.org/docs/addons/install-addons#manual-installation).
1. Make sure Vite and Vitest are configured in your project.
-1. Make sure Vitest is configured to use [browser mode](https://vitest.dev/guide/browser/).
+1. Configure Vitest to use [browser mode](https://vitest.dev/guide/browser/).
+1. Install the addon, `@storybook/experimental-addon-vitest`, in your project and [register it in your Storybook configuration](http://storybook.js.org/docs/addons/install-addons#manual-installation).
1. If you're using Next.js, make sure you're using [`vite-plugin-storybook-nextjs`](https://github.com/storybookjs/vite-plugin-storybook-nextjs).
1. If you're using SvelteKit, make sure you're using `@storybook/sveltekit/vite`.
1. Create a [test setup file](../api/portable-stories/portable-stories-vitest.mdx#setprojectannotations), `.storybook/vitest.setup.ts`.
-1. Adjust your Vitest configuration to include the plugin(s) and reference the setup file. You can reference examples, below.
+1. Adjust your Vitest configuration to include the plugin(s) and reference the setup file. You can use the example configuration files, below, as a guide.
### Example configuration files
-Here are example configuration files generated by the `add` command. You can use these as a reference when setting up your project.
+When the addon is set up automatically, it will create or adjust your Vitest configuration files for you. If you're setting up manually, you can use the following examples as a reference when configuring your project.
Example Vitest setup file
@@ -112,8 +112,9 @@ export default mergeConfig(
provider: 'playwright',
headless: true,
},
- // Disabling isolation is faster and similar to how tests are isolated in Storybook itself.
- // Consider removing this, if you have flaky tests.
+ // Speed up tests and better match how they run in Storybook itself
+ // https://vitest.dev/config/#isolate
+ // Consider removing this if you have flaky tests
isolate: false,
setupFiles: ['./.storybook/vitest.setup.ts'],
})
@@ -151,8 +152,9 @@ export default defineWorkspace([
provider: 'playwright',
headless: true,
},
- // Disabling isolation is faster and similar to how tests are isolated in Storybook itself.
- // Consider removing this, if you have flaky tests.
+ // Speed up tests and better match how they run in Storybook itself
+ // https://vitest.dev/config/#isolate
+ // Consider removing this if you have flaky tests
isolate: false,
setupFiles: ['./.storybook/vitest.setup.ts'],
}
@@ -160,24 +162,6 @@ export default defineWorkspace([
```
-## How it works
-
-Before running tests using the plugin, it's helpful to understand how it works.
-
-First, the plugin does not need to run or build Storybook to test your stories. Instead, it transforms your stories into tests using Vite and [portable stories](../api/portable-stories/portable-stories-vitest.mdx). Portable stories are a mechanism to compose all of a story's configuration ([parameters](../writing-stories/parameters.mdx), [decorators](../writing-stories/decorators.mdx), etc.) with the story itself. This allows you to run your stories as tests without needing to run Storybook.
-
-Those tests are then run using Vitest. We recommend (and configure, by default) running Vitest in browser mode, using Playwright's Chromium browser. Browser mode ensures your components are tested in a real browser environment, which is more accurate than simulations like JSDom or HappyDom. This is especially important for testing components that rely on browser APIs or features.
-
-Stories are tested in two ways: a smoke test to ensure it renders and, if a [play function](../writing-stories/play-function.mdx) is defined, that function is run and any [assertions made](../writing-tests/interaction-testing.mdx#assert-tests-with-vitests-apis) within it are validated.
-
-### Debugging
-
-While the plugin does not require Storybook to run when testing, you may still want to run Storybook to debug your tests. To enable this, provide the [`storybookScript` option](#storybookscript) in the plugin configuration. When you run Vitest in watch mode, the plugin will start Storybook using this script and provide links to the story in the output on test failures. This allows you to quickly jump to the story in Storybook to debug the issue.
-
-You can also provide a [`storybookUrl` option](#storybookurl) to the plugin configuration. When you're not using watch mode and tests fail, the plugin will provide a link to the story using this URL in the output. This is useful when [running tests in CI](#in-ci) or other environments where Storybook is not already running.
-
-[TK - Screenshot of test output with links to SB]
-
## Usage
There are three primary ways to run tests using the Vitest plugin:
@@ -262,6 +246,14 @@ export default defineWorkspace([
])
```
+### Debugging
+
+While the plugin does not require Storybook to run when testing, you may still want to run Storybook to debug your tests. To enable this, provide the [`storybookScript` option](#storybookscript) in the plugin configuration. When you run Vitest in watch mode, the plugin will start Storybook using this script and provide links to the story in the output on test failures. This allows you to quickly jump to the story in Storybook to debug the issue.
+
+You can also provide a [`storybookUrl` option](#storybookurl) to the plugin configuration. When you're not using watch mode and tests fail, the plugin will provide a link to the story using this URL in the output. This is useful when [running tests in CI](#in-ci) or other environments where Storybook is not already running.
+
+[TK - Screenshot of test output with links to SB]
+
## Configuration
Most of the configuration for the Vitest plugin's behavior is done in the Vitest configuration files. However, you can also define configuration in your stories themselves, using [tags](../writing-stories/tags.mdx), to control how they are tested.
@@ -302,11 +294,7 @@ If the same tag is in both the `include` and `exclude` arrays, the `exclude` beh
## FAQ
-### How to ensure my tests can find assets in the public directory?
-
-If your stories use assets in the public directory and you're not using the default public directory location (`public`), you need to adjust the Vitest configuration to include the public directory. You can do this by providing the [`publicDir` option in the Vitest configuration file](https://vitejs.dev/config/shared-options.html#publicdir).
-
-### How to debug my tests in Storybook?
+### How do I debug my tests in Storybook?
The plugin will attempt to provide links to the story in Storybook when tests fail, for [debugging](#debugging) purposes.
@@ -317,7 +305,11 @@ If the URLs are not working when running tests in watch mode, you should check t
If the URLs are not working when running tests in CI, you should ensure the Storybook is built and published before running the tests. You can then provide the URL to the published Storybook using the `storybookUrl` option. See the [In CI](#in-ci) section for an example.
-### How to apply custom Vite configuration?
+### How do I ensure my tests can find assets in the public directory?
+
+If your stories use assets in the public directory and you're not using the default public directory location (`public`), you need to adjust the Vitest configuration to include the public directory. You can do this by providing the [`publicDir` option in the Vitest configuration file](https://vitejs.dev/config/shared-options.html#publicdir).
+
+### How do I apply custom Vite configuration?
If you have custom operations defined in [`viteFinal`](../api/main-config/main-config-vite-final.mdx) in your `.storybook/main.js|ts` file, you will need to translate those into the Vitest configuration. This is because the plugin does not use the Storybook Vite configuration.
@@ -325,17 +317,23 @@ If you have custom operations defined in [`viteFinal`](../api/main-config/main-c
TK - Is there a good example we could offer here?
```
+### How do I isolate Storybook tests from others?
+
+Some projects might contain a `test` property in their Vite configuration. Because the Vitest configuration used by this plugin extends that Vite config, the `test` properties are merged. This lack of isolation can cause issues with your Storybook tests.
+
+To isolate your Storybook tests from other tests, you need to move the `test` property from your Vite configuration to the Vitest configuration. The Vitest config used by the plugin can then safely extend your Vite config without merging the `test` property.
+
### Why do we recommend browser mode?
Vitest's browser mode runs your tests in a real browser (Chromium, via Playwright, in the default configuration). The alternative is a simulated browser environment, like JSDom or HappyDom, which can have differences in behavior compared to a real browser. For UI components, which can often depend on browser APIs or features, running tests in a real browser is more accurate.
For more, see [Vitest's guide on using browser mode effectively](https://vitest.dev/guide/browser/#motivation).
-### How to use WebDriver instead of Playwright?
+### How do I use WebDriver instead of Playwright?
We recommend running tests in a browser using Playwright, but you can use WebDriverIO instead. To do so, you need to adjust the [browser provider in the Vitest configuration file](https://vitest.dev/config/#browser-provider).
-### How to use a browser other than Chromium
+### How do I use a browser other than Chromium
We recommend using Chromium, because it is most likely to best match the experience of a majority of your users. However, you can use other browsers by adjusting the [browser name in the Vitest configuration file](https://vitest.dev/config/#browser-name). Note that [Playwright and WebDriverIO support different browsers](https://vitest.dev/guide/browser/#browser-option-types).
@@ -347,12 +345,6 @@ Additionally, the previous test runner ran your stories as orchestrated tests in
Finally, because of the simpler architecture and the use of Vitest, this plugin should be faster than the previous test runner for most projects. We'll do more benchmarking to quantify this in the future.
-### How to isolate Storybook tests from others?
-
-Some projects might contain a `test` property in their Vite configuration. Because the Vitest configuration used by this plugin extends that Vite config, the `test` properties are merged. This lack of isolation can cause issues with your Storybook tests.
-
-To isolate your Storybook tests from other tests, you need to move the `test` property from your Vite configuration to the Vitest configuration. The Vitest config used by the plugin can then safely extend your Vite config without merging the `test` property.
-
## API
### Exports
@@ -395,7 +387,7 @@ Type: `string`
Default: `http://localhost:6006`
-The URL where Storybook is hosted. This is used for internal checks and to provide a link to the story in the test output on failures.
+The URL where Storybook is hosted. This is used for internal checks and to provide a [link to the story in the test output on failures](#debugging).
#### `tags`
@@ -419,7 +411,7 @@ Default:
}
```
-Tags to include, exclude, or skip. These tags are defined as annotations in your story, meta, or preview.
+[Tags](../writing-stories/tags.mdx) to include, exclude, or skip. These tags are defined as annotations in your story, meta, or preview.
- **`include`**: Stories with these tags will be tested
- **`exclude`**: Stories with these tags will not be tested, and will not be counted in the test results
From 1654ac5fa7c65a196fbe7d1d3bc9e7cb1de1cd68 Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Thu, 29 Aug 2024 12:59:41 -0600
Subject: [PATCH 10/39] Fixes
---
docs/writing-tests/index.mdx | 2 +-
.../writing-tests/test-runner-with-vitest.mdx | 60 ++++++++++---------
2 files changed, 33 insertions(+), 29 deletions(-)
diff --git a/docs/writing-tests/index.mdx b/docs/writing-tests/index.mdx
index e5f0524f7f7b..36f3ccefcfa7 100644
--- a/docs/writing-tests/index.mdx
+++ b/docs/writing-tests/index.mdx
@@ -25,4 +25,4 @@ Storybook also comes with tools, [a test runner](./test-runner.mdx), and handy i
* [Test runner](./test-runner.mdx) to automate test execution
* [Test coverage](./test-coverage.mdx) for measuring code coverage
* [End-to-end tests](./import-stories-in-tests/stories-in-end-to-end-tests.mdx) for simulating real user scenarios
-* [**Unit tests**](./import-stories-in-tests/stories-in-unit-tests.mdx) for functionality
+* [Unit tests](./import-stories-in-tests/stories-in-unit-tests.mdx) for functionality
diff --git a/docs/writing-tests/test-runner-with-vitest.mdx b/docs/writing-tests/test-runner-with-vitest.mdx
index 91244342922f..5e2f69230215 100644
--- a/docs/writing-tests/test-runner-with-vitest.mdx
+++ b/docs/writing-tests/test-runner-with-vitest.mdx
@@ -102,21 +102,23 @@ export default mergeConfig(
storybookScript: 'yarn storybook --ci',
}),
],
- // Glob pattern to find story files
- include: ['src/**/*.stories.?(m)[jt]s?(x)'],
- // Enable browser mode
- browser: {
- enabled: true,
- name: 'chromium',
- // Make sure to install Playwright
- provider: 'playwright',
- headless: true,
+ test: {
+ // Glob pattern to find story files
+ include: ['src/**/*.stories.?(m)[jt]s?(x)'],
+ // Enable browser mode
+ browser: {
+ enabled: true,
+ name: 'chromium',
+ // Make sure to install Playwright
+ provider: 'playwright',
+ headless: true,
+ },
+ // Speed up tests and better match how they run in Storybook itself
+ // https://vitest.dev/config/#isolate
+ // Consider removing this if you have flaky tests
+ isolate: false,
+ setupFiles: ['./.storybook/vitest.setup.ts'],
},
- // Speed up tests and better match how they run in Storybook itself
- // https://vitest.dev/config/#isolate
- // Consider removing this if you have flaky tests
- isolate: false,
- setupFiles: ['./.storybook/vitest.setup.ts'],
})
)
```
@@ -142,21 +144,23 @@ export default defineWorkspace([
storybookScript: 'yarn storybook --ci',
}),
],
- // Glob pattern to find story files
- include: ['src/**/*.stories.?(m)[jt]s?(x)'],
- // Enable browser mode
- browser: {
- enabled: true,
- name: 'chromium',
- // Make sure to install Playwright
- provider: 'playwright',
- headless: true,
+ test: {
+ // Glob pattern to find story files
+ include: ['src/**/*.stories.?(m)[jt]s?(x)'],
+ // Enable browser mode
+ browser: {
+ enabled: true,
+ name: 'chromium',
+ // Make sure to install Playwright
+ provider: 'playwright',
+ headless: true,
+ },
+ // Speed up tests and better match how they run in Storybook itself
+ // https://vitest.dev/config/#isolate
+ // Consider removing this if you have flaky tests
+ isolate: false,
+ setupFiles: ['./.storybook/vitest.setup.ts'],
},
- // Speed up tests and better match how they run in Storybook itself
- // https://vitest.dev/config/#isolate
- // Consider removing this if you have flaky tests
- isolate: false,
- setupFiles: ['./.storybook/vitest.setup.ts'],
}
])
```
From 59f926afa6311f95bdbac0ac6ac086fca2f75704 Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Tue, 3 Sep 2024 12:04:12 -0600
Subject: [PATCH 11/39] Address comments and further changes
- Limit to react, vue, and svelte renderers
- `addon-vitest` -> `addon-test`
- `addon-vitest/plugin` -> `addon-test/vite-plugin`
- Add requirements
- Add more details and examples about framework plugins
- Add more detail about test setup file
- Move comparison to previous test runner into its own section
- Format snippets
---
...itest-install.md => addon-test-install.md} | 6 +-
...t-run-tests.md => addon-test-run-tests.md} | 0
.../writing-tests/test-runner-with-vitest.mdx | 178 +++++++++++++-----
3 files changed, 132 insertions(+), 52 deletions(-)
rename docs/_snippets/{addon-vitest-install.md => addon-test-install.md} (53%)
rename docs/_snippets/{addon-vitest-run-tests.md => addon-test-run-tests.md} (100%)
diff --git a/docs/_snippets/addon-vitest-install.md b/docs/_snippets/addon-test-install.md
similarity index 53%
rename from docs/_snippets/addon-vitest-install.md
rename to docs/_snippets/addon-test-install.md
index 06a229138d18..b516f291b85f 100644
--- a/docs/_snippets/addon-vitest-install.md
+++ b/docs/_snippets/addon-test-install.md
@@ -1,11 +1,11 @@
```shell renderer="common" language="js" packageManager="npx"
-npx storybook add @storybook/experimental-addon-vitest
+npx storybook add @storybook/experimental-addon-test
```
```shell renderer="common" language="js" packageManager="pnpm"
-pnpm exec storybook add @storybook/experimental-addon-vitest
+pnpm exec storybook add @storybook/experimental-addon-test
```
```shell renderer="common" language="js" packageManager="yarn"
-yarn exec storybook add @storybook/experimental-addon-vitest
+yarn exec storybook add @storybook/experimental-addon-test
```
diff --git a/docs/_snippets/addon-vitest-run-tests.md b/docs/_snippets/addon-test-run-tests.md
similarity index 100%
rename from docs/_snippets/addon-vitest-run-tests.md
rename to docs/_snippets/addon-test-run-tests.md
diff --git a/docs/writing-tests/test-runner-with-vitest.mdx b/docs/writing-tests/test-runner-with-vitest.mdx
index 5e2f69230215..b1fb80d74a3f 100644
--- a/docs/writing-tests/test-runner-with-vitest.mdx
+++ b/docs/writing-tests/test-runner-with-vitest.mdx
@@ -5,10 +5,22 @@ sidebar:
title: Test runner with Vitest
---
+
+
+ Test runner with Vitest is currently only supported in [React](?renderer=react), [Vue](?renderer=vue) and [Svelte](?renderer=svelte) projects.
+
+ If you are using a different renderer, you can use the [previous test runner](./test-runner.mdx) to test your stories.
+
+
+ {/* End non-supported renderers */}
+
+
+
+
(β οΈ **Experimental**)
- While this feature is experimental, it is published as the `@storybook/experimental-addon-vitest` package.
+ While this feature is experimental, it is published as the `@storybook/experimental-addon-test` package.
Storybook's test runner with Vitest transforms your [stories](../writing-stories/index.mdx) into tests using a Vitest plugin and [portable stories](../api/portable-stories/portable-stories-vitest.mdx). Those tests are then run using [Vitest](https://vitest.dev). This approach is faster and more flexible than the [previous test runner](./test-runner.mdx), which required a running Storybook instance to test your stories.
@@ -19,7 +31,15 @@ Stories are tested in two ways: a smoke test to ensure it renders and, if a [pla
## Install and set up
-Get started by upgrading to at least Storybook 8.3, then installing and configuring the plugin in your project.
+Before installing, make sure your project meets the following requirements:
+
+- Storybook β₯ 8.3
+- A Storybook framework that uses Vite (e.g. [`vue3-vite`](../get-started/frameworks/vue3-vite.mdx)), or the [Storybook Next.js framework](../get-started/frameworks/nextjs.mdx)
+- Vitest β₯ 2.0
+ - If you're not using Vitest, it will be installed and configured for you when you install the addon
+- For Next.js projects, Next.js β₯ 14.0
+
+If you're not yet using Storybook 8.3, you can [upgrade your Storybook](../configure/upgrading.mdx) to the latest version:
@@ -27,45 +47,94 @@ Get started by upgrading to at least Storybook 8.3, then installing and configur
Run the following command to install and configure the addon, which contains the plugin to run your stories as tests using Vitest:
-
+
That [`add` command](../addons/install-addons.mdx#automatic-installation) will install and register the Vitest addon. It will also inspect your project's Vite and Vitest setup, and install and configure them with sensible defaults, if necessary. You may need to adjust the configuration to fit your project's needs. The full configuration options can be found in the [API section](#options), below.
+### Manual setup
+
+For some project setups, the `add` command may be unable to automate the plugin setup and ask you to complete additional setup steps. Here's what to do:
+
+1. Make sure Vite and Vitest are configured in your project.
+1. Configure Vitest to use [browser mode](https://vitest.dev/guide/browser/).
+1. Install the addon, `@storybook/experimental-addon-test`, in your project and [register it in your Storybook configuration](http://storybook.js.org/docs/addons/install-addons#manual-installation).
+1. Create a test setup file, `.storybook/vitest.setup.ts`. You can use the example setup file, below, as a guide
+1. Adjust your Vitest configuration to include the plugin(s) and reference the setup file. You can use the example configuration files, below, as a guide.
+
+#### Framework plugins
+
+Some Storybook frameworks require additional setup to enable the framework's features to work with Vitest. Each of those frameworks exports a Vite plugin that you can use to configure your project correctly:
+
+
+ If you're using Next.js, use `@storybook/experimental-nextjs-vite/vite-plugin`:
+
+ ```js title="vitest.config.ts"
+ import { defineConfig, mergeConfig } from 'vitest/config';
+ import { storybookTest } from '@storybook/experimental-addon-test/vite-plugin';
+ import { storybookNextjsPlugin } from '@storybook/experimental-nextjs-vite/vite-plugin';
+
+ import viteConfig from './vite.config';
+
+ export default mergeConfig(
+ viteConfig,
+ defineConfig({
+ plugins: [
+ storybookTest(),
+ storybookNextjsPlugin(), // π Use the plugin here
+ ],
+ // ...
+ })
+ );
+ ```
+
+
-
- If your stories use template-based Vue components, you may need to [alias the `vue` module](https://vuejs.org/guide/scaling-up/tooling#note-on-in-browser-template-compilation) to resolve correctly in the test environment:
+ Vue projects should use `@storybook/vue3-vite/vite-plugin`:
-
- Example Vite configuration
+ ```js title="vitest.config.ts"
+ import { defineConfig, mergeConfig } from 'vitest/config';
+ import { storybookTest } from '@storybook/experimental-addon-test/vite-plugin';
+ import { storybookVuePlugin } from '@storybook/vue3-vite/vite-plugin';
-```ts
-// vite.config.ts
-import { defineConfig } from 'vite/config';
+ import viteConfig from './vite.config'
-export default defineConfig({
- // ...
- resolve: {
- alias: {
- vue: 'vue/dist/vue.esm-bundler.js',
- },
- },
-});
-```
-
-
+ export default mergeConfig(
+ viteConfig,
+ defineConfig({
+ plugins: [
+ storybookTest(),
+ storybookVuePlugin(), // π Use the plugin here
+ ],
+ // ...
+ })
+ );
+ ```
-### Manual setup
+
+ If you're using SvelteKit, use `@storybook/sveltekit/vite-plugin`:
-For some project setups, the `add` command may be unable to automate the plugin setup and ask you to complete additional setup steps. Here's what to do:
+ ```js title="vitest.config.ts"
+ import { defineConfig, mergeConfig } from 'vitest/config';
+ import { storybookTest } from '@storybook/experimental-addon-test/vite-plugin';
+ import { storybookSveltekitPlugin } from '@storybook/sveltekit/vite-plugin';
-1. Make sure Vite and Vitest are configured in your project.
-1. Configure Vitest to use [browser mode](https://vitest.dev/guide/browser/).
-1. Install the addon, `@storybook/experimental-addon-vitest`, in your project and [register it in your Storybook configuration](http://storybook.js.org/docs/addons/install-addons#manual-installation).
-1. If you're using Next.js, make sure you're using [`vite-plugin-storybook-nextjs`](https://github.com/storybookjs/vite-plugin-storybook-nextjs).
-1. If you're using SvelteKit, make sure you're using `@storybook/sveltekit/vite`.
-1. Create a [test setup file](../api/portable-stories/portable-stories-vitest.mdx#setprojectannotations), `.storybook/vitest.setup.ts`.
-1. Adjust your Vitest configuration to include the plugin(s) and reference the setup file. You can use the example configuration files, below, as a guide.
+ import viteConfig from './vite.config';
+
+ export default mergeConfig(
+ viteConfig,
+ defineConfig({
+ plugins: [
+ storybookTest(),
+ storybookSveltekitPlugin(), // π Use the plugin here
+ ],
+ // ...
+ })
+ );
+ ```
+
+
+The above example uses the framework's plugin in a Vitest configuration file. You can also use it in a Vitest workspace file, if that is how your project is configured.
### Example configuration files
@@ -74,25 +143,33 @@ When the addon is set up automatically, it will create or adjust your Vitest con
Example Vitest setup file
+ Storybook stories contain configuration defined in `.storybook/preview.js|ts`. To ensure that configuration is available to your tests, you can apply it in a Vitest setup file. Here's an example of how to do that:
+
```ts title=".storybook/vitest.setup.ts"
import { beforeAll } from 'vitest';
// Replace your-renderer with the renderer you are using (e.g., react, vue3, svelte, etc.)
import { setProjectAnnotations } from '@storybook/your-renderer';
+
import * as projectAnnotations from './preview';
const project = setProjectAnnotations(projectAnnotations);
beforeAll(project.beforeAll);
```
+
+ The `setProjectAnnotations` function is part of the portable stories API, which is used to transform your stories into tests. For more details, see the [portable stories API documentation](../api/portable-stories/portable-stories-vitest.mdx#setprojectannotations).
Example Vitest config file
+ The most simple application of the plugin is to include it in your Vitest configuration file:
+
```ts title="vitest.config.ts"
-import { defineConfig, mergeConfig } from 'vitest/config'
-import viteConfig from './vite.config'
-import { storybookTest } from '@storybook/experimental-addon-vitest/plugin'
+import { defineConfig, mergeConfig } from 'vitest/config';
+import { storybookTest } from '@storybook/experimental-addon-test/vite-plugin';
+
+import viteConfig from './vite.config';
export default mergeConfig(
viteConfig,
@@ -120,17 +197,18 @@ export default mergeConfig(
setupFiles: ['./.storybook/vitest.setup.ts'],
},
})
-)
+);
```
Example Vitest workspace file
-{/* TODO: Nextjs & SvelteKit examples */}
+ If you're using a [Vitest workspace](https://vitest.dev/guide/workspace), you can define a new workspace project:
+
```ts title="vitest.workspace.ts"
-import { defineWorkspace } from 'vitest/config'
-import { storybookTest } from '@storybook/experimental-addon-vitest/plugin'
+import { defineWorkspace } from 'vitest/config';
+import { storybookTest } from '@storybook/experimental-addon-test/vite-plugin';
export default defineWorkspace([
// This is the path to your existing Vitest config file
@@ -162,7 +240,7 @@ export default defineWorkspace([
setupFiles: ['./.storybook/vitest.setup.ts'],
},
}
-])
+]);
```
@@ -196,7 +274,7 @@ If you already have a `test` script that runs something other than Vitest, you c
When you run that script, the addon will find and run your story-based tests. Here's an example of running your tests (in [watch mode](https://vitest.dev/guide/cli.html#vitest-watch), by default) using the Vitest CLI:
-
+
### Editor extension
@@ -260,7 +338,7 @@ You can also provide a [`storybookUrl` option](#storybookurl) to the plugin conf
## Configuration
-Most of the configuration for the Vitest plugin's behavior is done in the Vitest configuration files. However, you can also define configuration in your stories themselves, using [tags](../writing-stories/tags.mdx), to control how they are tested.
+Most of the configuration for the Vitest plugin's behavior is done in the Vitest configuration and setup files. However, you can also define configuration in your stories themselves, using [tags](../writing-stories/tags.mdx), to control how they are tested.
By default, the plugin will run all stories with the `test` tag. You can adjust this behavior by providing the [`tags` option](#tags) in the plugin configuration. This allows you to include, exclude, or skip stories based on their tags.
@@ -296,6 +374,14 @@ export default defineWorkspace([
If the same tag is in both the `include` and `exclude` arrays, the `exclude` behavior takes precedence.
+## Comparison to the previous test runner
+
+The [previous test runner](./test-runner.mdx) requires a running Storybook instance to test your stories, because it visits each one, executes the play function, and listens for results. This plugin, however, transforms your stories into tests using Vite and portable stories, so it does not need to run Storybook to test your stories. Beyond that core difference, there are a few other distinctions:
+
+Additionally, the previous test runner ran your stories as orchestrated tests in Jest, and that orchestration came with some complexity. By comparison, this plugin transforms your stories into real tests and then runs them using Vitest, which is simpler and more configurable.
+
+Finally, because of the simpler architecture and the use of Vitest, this plugin should be faster than the previous test runner for most projects. We'll do more benchmarking to quantify this in the future.
+
## FAQ
### How do I debug my tests in Storybook?
@@ -341,14 +427,6 @@ We recommend running tests in a browser using Playwright, but you can use WebDri
We recommend using Chromium, because it is most likely to best match the experience of a majority of your users. However, you can use other browsers by adjusting the [browser name in the Vitest configuration file](https://vitest.dev/config/#browser-name). Note that [Playwright and WebDriverIO support different browsers](https://vitest.dev/guide/browser/#browser-option-types).
-### How is this different from the previous test runner?
-
-The [previous test runner](./test-runner.mdx) requires a running Storybook instance to test your stories, because it visits each one, executes the play function, and listens for results. This plugin, however, transforms your stories into tests using Vite and portable stories, so it does not need to run Storybook to test your stories. Beyond that core difference, there are a few other distinctions:
-
-Additionally, the previous test runner ran your stories as orchestrated tests in Jest, and that orchestration came with some complexity. By comparison, this plugin transforms your stories into real tests and then runs them using Vitest, which is simpler and more configurable.
-
-Finally, because of the simpler architecture and the use of Vitest, this plugin should be faster than the previous test runner for most projects. We'll do more benchmarking to quantify this in the future.
-
## API
### Exports
@@ -356,7 +434,7 @@ Finally, because of the simpler architecture and the use of Vitest, this plugin
This addon contributes the following exports to Storybook:
```js
-import { storybookTest } from '@storybook/experimental-addon-vitest/plugin'
+import { storybookTest } from '@storybook/experimental-addon-test/vite-plugin'
```
#### `storybookTest`
@@ -420,3 +498,5 @@ Default:
- **`include`**: Stories with these tags will be tested
- **`exclude`**: Stories with these tags will not be tested, and will not be counted in the test results
- **`skip`**: Stories with these tags will not be tested, and will be counted in the test results
+
+
\ No newline at end of file
From 483325a656e9884d4322d0ed38a9a518b9ea1f8f Mon Sep 17 00:00:00 2001
From: Valentin Palkovic
Date: Wed, 4 Sep 2024 10:20:57 +0200
Subject: [PATCH 12/39] Portable Stories: Improve Handling of React Updates and
Errors
Co-authored-by: Yann Braga
Co-authored-by: Jeppe Reinhold
---
.../modules/store/csf/portable-stories.ts | 4 +
.../react-dom-shim/src/preventActChecks.tsx | 17 --
code/lib/react-dom-shim/src/react-16.tsx | 6 +-
code/lib/react-dom-shim/src/react-18.tsx | 23 +-
code/renderers/react/package.json | 4 +
.../react/src/__test__/Button.stories.tsx | 9 +-
.../__test__/ComponentWithError.stories.tsx | 13 +
.../react/src/__test__/ComponentWithError.tsx | 4 +
.../portable-stories-legacy.test.tsx.snap | 34 +++
.../__test__/portable-stories-legacy.test.tsx | 6 +-
.../src/__test__/portable-stories.test.tsx | 90 +++---
code/renderers/react/src/act-compat.ts | 65 +++++
code/renderers/react/src/portable-stories.tsx | 80 +++++-
code/renderers/react/src/renderToCanvas.tsx | 7 +-
code/vitest-setup.ts | 1 +
code/yarn.lock | 269 +++++++++++++++++-
16 files changed, 557 insertions(+), 75 deletions(-)
delete mode 100644 code/lib/react-dom-shim/src/preventActChecks.tsx
create mode 100644 code/renderers/react/src/__test__/ComponentWithError.stories.tsx
create mode 100644 code/renderers/react/src/__test__/ComponentWithError.tsx
create mode 100644 code/renderers/react/src/act-compat.ts
diff --git a/code/core/src/preview-api/modules/store/csf/portable-stories.ts b/code/core/src/preview-api/modules/store/csf/portable-stories.ts
index 1525b6e3e6d8..7adc83196eb1 100644
--- a/code/core/src/preview-api/modules/store/csf/portable-stories.ts
+++ b/code/core/src/preview-api/modules/store/csf/portable-stories.ts
@@ -74,6 +74,10 @@ export function setProjectAnnotations(
| NamedOrDefaultProjectAnnotations[]
): NormalizedProjectAnnotations {
const annotations = Array.isArray(projectAnnotations) ? projectAnnotations : [projectAnnotations];
+ if (globalThis.defaultProjectAnnotations) {
+ annotations.push(globalThis.defaultProjectAnnotations);
+ }
+
globalThis.globalProjectAnnotations = composeConfigs(annotations.map(extractAnnotation));
return globalThis.globalProjectAnnotations;
diff --git a/code/lib/react-dom-shim/src/preventActChecks.tsx b/code/lib/react-dom-shim/src/preventActChecks.tsx
deleted file mode 100644
index f35e2fb25dc5..000000000000
--- a/code/lib/react-dom-shim/src/preventActChecks.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-export {};
-
-declare const globalThis: {
- IS_REACT_ACT_ENVIRONMENT?: boolean;
-};
-
-// TODO(9.0): We should actually wrap all those lines in `act`, but that might be a breaking change.
-// We should make that breaking change for SB 9.0
-export function preventActChecks(callback: () => void): void {
- const originalActEnvironment = globalThis.IS_REACT_ACT_ENVIRONMENT;
- globalThis.IS_REACT_ACT_ENVIRONMENT = false;
- try {
- callback();
- } finally {
- globalThis.IS_REACT_ACT_ENVIRONMENT = originalActEnvironment;
- }
-}
diff --git a/code/lib/react-dom-shim/src/react-16.tsx b/code/lib/react-dom-shim/src/react-16.tsx
index a1e7b1e97009..8c7b2c8f5a67 100644
--- a/code/lib/react-dom-shim/src/react-16.tsx
+++ b/code/lib/react-dom-shim/src/react-16.tsx
@@ -2,14 +2,12 @@
import type { ReactElement } from 'react';
import * as ReactDOM from 'react-dom';
-import { preventActChecks } from './preventActChecks';
-
export const renderElement = async (node: ReactElement, el: Element) => {
return new Promise((resolve) => {
- preventActChecks(() => void ReactDOM.render(node, el, () => resolve(null)));
+ ReactDOM.render(node, el, () => resolve(null));
});
};
export const unmountElement = (el: Element) => {
- preventActChecks(() => void ReactDOM.unmountComponentAtNode(el));
+ ReactDOM.unmountComponentAtNode(el);
};
diff --git a/code/lib/react-dom-shim/src/react-18.tsx b/code/lib/react-dom-shim/src/react-18.tsx
index 5eb72b20eb17..f3398fc65ff0 100644
--- a/code/lib/react-dom-shim/src/react-18.tsx
+++ b/code/lib/react-dom-shim/src/react-18.tsx
@@ -1,15 +1,21 @@
/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */
-import type { FC, ReactElement } from 'react';
+import type { ReactElement } from 'react';
import * as React from 'react';
import type { Root as ReactRoot, RootOptions } from 'react-dom/client';
import * as ReactDOM from 'react-dom/client';
-import { preventActChecks } from './preventActChecks';
-
// A map of all rendered React 18 nodes
const nodes = new Map();
-const WithCallback: FC<{ callback: () => void; children: ReactElement }> = ({
+declare const globalThis: {
+ IS_REACT_ACT_ENVIRONMENT: boolean;
+};
+
+function getIsReactActEnvironment() {
+ return globalThis.IS_REACT_ACT_ENVIRONMENT;
+}
+
+const WithCallback: React.FC<{ callback: () => void; children: ReactElement }> = ({
callback,
children,
}) => {
@@ -43,8 +49,13 @@ export const renderElement = async (node: ReactElement, el: Element, rootOptions
// Create Root Element conditionally for new React 18 Root Api
const root = await getReactRoot(el, rootOptions);
+ if (getIsReactActEnvironment()) {
+ root.render(node);
+ return;
+ }
+
const { promise, resolve } = Promise.withResolvers();
- preventActChecks(() => root.render({node}));
+ root.render({node});
return promise;
};
@@ -52,7 +63,7 @@ export const unmountElement = (el: Element, shouldUseNewRootApi?: boolean) => {
const root = nodes.get(el);
if (root) {
- preventActChecks(() => root.unmount());
+ root.unmount();
nodes.delete(el);
}
};
diff --git a/code/renderers/react/package.json b/code/renderers/react/package.json
index 4d370bbb8a1e..003466f1b182 100644
--- a/code/renderers/react/package.json
+++ b/code/renderers/react/package.json
@@ -94,12 +94,16 @@
"require-from-string": "^2.0.2"
},
"peerDependencies": {
+ "@storybook/test": "workspace:*",
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
"storybook": "workspace:^",
"typescript": ">= 4.2.x"
},
"peerDependenciesMeta": {
+ "@storybook/test": {
+ "optional": true
+ },
"typescript": {
"optional": true
}
diff --git a/code/renderers/react/src/__test__/Button.stories.tsx b/code/renderers/react/src/__test__/Button.stories.tsx
index bde220fdf469..0e6e0d6e8c67 100644
--- a/code/renderers/react/src/__test__/Button.stories.tsx
+++ b/code/renderers/react/src/__test__/Button.stories.tsx
@@ -103,7 +103,6 @@ export const HooksStory: CSF3Story = {
);
},
play: async ({ canvasElement, step }) => {
- console.log('start of play function');
const canvas = within(canvasElement);
await step('Step label', async () => {
const inputEl = canvas.getByTestId('input');
@@ -112,8 +111,8 @@ export const HooksStory: CSF3Story = {
await userEvent.type(inputEl, 'Hello world!');
await expect(inputEl).toHaveValue('Hello world!');
+ await expect(buttonEl).toHaveTextContent('I am clicked');
});
- console.log('end of play function');
},
};
@@ -182,6 +181,12 @@ export const MountInPlayFunction: CSF3Story<{ mockFn: (val: string) => string }>
},
};
+export const MountInPlayFunctionThrow: CSF3Story<{ mockFn: (val: string) => string }> = {
+ play: async () => {
+ throw new Error('Error thrown in play');
+ },
+};
+
export const WithActionArg: CSF3Story<{ someActionArg: HandlerFunction }> = {
args: {
someActionArg: action('some-action-arg'),
diff --git a/code/renderers/react/src/__test__/ComponentWithError.stories.tsx b/code/renderers/react/src/__test__/ComponentWithError.stories.tsx
new file mode 100644
index 000000000000..627055e2d965
--- /dev/null
+++ b/code/renderers/react/src/__test__/ComponentWithError.stories.tsx
@@ -0,0 +1,13 @@
+import type { Meta, StoryObj } from '..';
+import { ComponentWithError } from './ComponentWithError';
+
+const meta = {
+ title: 'Example/ComponentWithError',
+ component: ComponentWithError as any,
+} satisfies Meta;
+
+export default meta;
+
+type Story = StoryObj;
+
+export const ThrowsError: Story = {};
diff --git a/code/renderers/react/src/__test__/ComponentWithError.tsx b/code/renderers/react/src/__test__/ComponentWithError.tsx
new file mode 100644
index 000000000000..37f667cb4f2c
--- /dev/null
+++ b/code/renderers/react/src/__test__/ComponentWithError.tsx
@@ -0,0 +1,4 @@
+export function ComponentWithError() {
+ // eslint-disable-next-line local-rules/no-uncategorized-errors
+ throw new Error('Error in render');
+}
diff --git a/code/renderers/react/src/__test__/__snapshots__/portable-stories-legacy.test.tsx.snap b/code/renderers/react/src/__test__/__snapshots__/portable-stories-legacy.test.tsx.snap
index b4753327aaf1..b690349bed8d 100644
--- a/code/renderers/react/src/__test__/__snapshots__/portable-stories-legacy.test.tsx.snap
+++ b/code/renderers/react/src/__test__/__snapshots__/portable-stories-legacy.test.tsx.snap
@@ -147,6 +147,40 @@ exports[`Legacy Portable Stories API > Renders Modal story 1`] = `
+
+
+ loaded data
+
+
+ mockFn return value
+
+
+
+
+
+ loaded data
+
+
+ mockFn return value
+
+
+
diff --git a/code/renderers/react/src/__test__/portable-stories-legacy.test.tsx b/code/renderers/react/src/__test__/portable-stories-legacy.test.tsx
index 3c7321cdfe63..5567b1fd9fbc 100644
--- a/code/renderers/react/src/__test__/portable-stories-legacy.test.tsx
+++ b/code/renderers/react/src/__test__/portable-stories-legacy.test.tsx
@@ -200,7 +200,11 @@ describe('Legacy Portable Stories API', () => {
it.each(testCases)('Renders %s story', async (_storyName, Story) => {
cleanup();
- if (_storyName === 'CSF2StoryWithLocale' || _storyName === 'MountInPlayFunction') {
+ if (
+ _storyName === 'CSF2StoryWithLocale' ||
+ _storyName === 'MountInPlayFunction' ||
+ _storyName === 'MountInPlayFunctionThrow'
+ ) {
return;
}
diff --git a/code/renderers/react/src/__test__/portable-stories.test.tsx b/code/renderers/react/src/__test__/portable-stories.test.tsx
index 90346edff991..94de89e093a5 100644
--- a/code/renderers/react/src/__test__/portable-stories.test.tsx
+++ b/code/renderers/react/src/__test__/portable-stories.test.tsx
@@ -2,7 +2,7 @@
/* eslint-disable import/namespace */
import { cleanup, render, screen } from '@testing-library/react';
-import { afterEach, describe, expect, it, vi } from 'vitest';
+import { afterEach, beforeAll, describe, expect, it, vi } from 'vitest';
import React from 'react';
@@ -16,23 +16,28 @@ import { expectTypeOf } from 'expect-type';
import { composeStories, composeStory, setProjectAnnotations } from '..';
import type { Button } from './Button';
-import * as stories from './Button.stories';
+import * as ButtonStories from './Button.stories';
+import * as ComponentWithErrorStories from './ComponentWithError.stories';
-setProjectAnnotations([]);
+const HooksStory = composeStory(ButtonStories.HooksStory, ButtonStories.default);
+
+const projectAnnotations = setProjectAnnotations([]);
// example with composeStories, returns an object with all stories composed with args/decorators
-const { CSF3Primary, LoaderStory, MountInPlayFunction } = composeStories(stories);
+const { CSF3Primary, LoaderStory, MountInPlayFunction, MountInPlayFunctionThrow } =
+ composeStories(ButtonStories);
+const { ThrowsError } = composeStories(ComponentWithErrorStories);
+
+beforeAll(async () => {
+ await projectAnnotations.beforeAll?.();
+});
afterEach(() => {
cleanup();
});
-declare const globalThis: {
- IS_REACT_ACT_ENVIRONMENT?: boolean;
-};
-
// example with composeStory, returns a single story composed with args/decorators
-const Secondary = composeStory(stories.CSF2Secondary, stories.default);
+const Secondary = composeStory(ButtonStories.CSF2Secondary, ButtonStories.default);
describe('renders', () => {
it('renders primary button', () => {
render(
Hello world);
@@ -60,6 +65,10 @@ describe('renders', () => {
expect(buttonElement).not.toBeNull();
});
+ it('should throw error when rendering a component with a render error', async () => {
+ await expect(() => ThrowsError.run()).rejects.toThrowError('Error in render');
+ });
+
it('should render component mounted in play function', async () => {
await MountInPlayFunction.run();
@@ -67,6 +76,10 @@ describe('renders', () => {
expect(screen.getByTestId('loaded-data').textContent).toEqual('loaded data');
});
+ it('should throw an error in play function', () => {
+ expect(() => MountInPlayFunctionThrow.run()).rejects.toThrowError('Error thrown in play');
+ });
+
it('should call and compose loaders data', async () => {
await LoaderStory.load();
const { getByTestId } = render(
);
@@ -78,10 +91,6 @@ describe('renders', () => {
});
describe('projectAnnotations', () => {
- afterEach(() => {
- cleanup();
- });
-
it('renders with default projectAnnotations', () => {
setProjectAnnotations([
{
@@ -91,7 +100,7 @@ describe('projectAnnotations', () => {
},
},
]);
- const WithEnglishText = composeStory(stories.CSF2StoryWithLocale, stories.default);
+ const WithEnglishText = composeStory(ButtonStories.CSF2StoryWithLocale, ButtonStories.default);
const { getByText } = render(
);
const buttonElement = getByText('Hello!');
expect(buttonElement).not.toBeNull();
@@ -99,24 +108,31 @@ describe('projectAnnotations', () => {
});
it('renders with custom projectAnnotations via composeStory params', () => {
- const WithPortugueseText = composeStory(stories.CSF2StoryWithLocale, stories.default, {
- initialGlobals: { locale: 'pt' },
- });
+ const WithPortugueseText = composeStory(
+ ButtonStories.CSF2StoryWithLocale,
+ ButtonStories.default,
+ {
+ initialGlobals: { locale: 'pt' },
+ }
+ );
const { getByText } = render(
);
const buttonElement = getByText('OlΓ‘!');
expect(buttonElement).not.toBeNull();
});
it('has action arg from argTypes when addon-actions annotations are added', () => {
- //@ts-expect-error our tsconfig.jsn#moduleResulution is set to 'node', which doesn't support this import
- const Story = composeStory(stories.WithActionArgType, stories.default, addonActionsPreview);
+ const Story = composeStory(
+ ButtonStories.WithActionArgType,
+ ButtonStories.default,
+ addonActionsPreview
+ );
expect(Story.args.someActionArg).toHaveProperty('isAction', true);
});
});
describe('CSF3', () => {
it('renders with inferred globalRender', () => {
- const Primary = composeStory(stories.CSF3Button, stories.default);
+ const Primary = composeStory(ButtonStories.CSF3Button, ButtonStories.default);
render(
Hello world);
const buttonElement = screen.getByText(/Hello world/i);
@@ -124,14 +140,17 @@ describe('CSF3', () => {
});
it('renders with custom render function', () => {
- const Primary = composeStory(stories.CSF3ButtonWithRender, stories.default);
+ const Primary = composeStory(ButtonStories.CSF3ButtonWithRender, ButtonStories.default);
render(
);
expect(screen.getByTestId('custom-render')).not.toBeNull();
});
it('renders with play function without canvas element', async () => {
- const CSF3InputFieldFilled = composeStory(stories.CSF3InputFieldFilled, stories.default);
+ const CSF3InputFieldFilled = composeStory(
+ ButtonStories.CSF3InputFieldFilled,
+ ButtonStories.default
+ );
await CSF3InputFieldFilled.run();
const input = screen.getByTestId('input') as HTMLInputElement;
@@ -139,7 +158,10 @@ describe('CSF3', () => {
});
it('renders with play function with canvas element', async () => {
- const CSF3InputFieldFilled = composeStory(stories.CSF3InputFieldFilled, stories.default);
+ const CSF3InputFieldFilled = composeStory(
+ ButtonStories.CSF3InputFieldFilled,
+ ButtonStories.default
+ );
const div = document.createElement('div');
document.body.appendChild(div);
@@ -153,21 +175,16 @@ describe('CSF3', () => {
});
it('renders with hooks', async () => {
- // TODO find out why act is not working here
- globalThis.IS_REACT_ACT_ENVIRONMENT = false;
- const HooksStory = composeStory(stories.HooksStory, stories.default);
-
await HooksStory.run();
const input = screen.getByTestId('input') as HTMLInputElement;
expect(input.value).toEqual('Hello world!');
- globalThis.IS_REACT_ACT_ENVIRONMENT = true;
});
});
// common in addons that need to communicate between manager and preview
it('should pass with decorators that need addons channel', () => {
- const PrimaryWithChannels = composeStory(stories.CSF3Primary, stories.default, {
+ const PrimaryWithChannels = composeStory(ButtonStories.CSF3Primary, ButtonStories.default, {
decorators: [
(StoryFn: any) => {
addons.getChannel();
@@ -186,27 +203,24 @@ describe('ComposeStories types', () => {
type ComposeStoriesParam = Parameters
[0];
expectTypeOf({
- ...stories,
- default: stories.default as Meta,
+ ...ButtonStories,
+ default: ButtonStories.default as Meta,
}).toMatchTypeOf();
expectTypeOf({
- ...stories,
- default: stories.default satisfies Meta,
+ ...ButtonStories,
+ default: ButtonStories.default satisfies Meta,
}).toMatchTypeOf();
});
});
-// Batch snapshot testing
-const testCases = Object.values(composeStories(stories)).map(
+const testCases = Object.values(composeStories(ButtonStories)).map(
(Story) => [Story.storyName, Story] as [string, typeof Story]
);
it.each(testCases)('Renders %s story', async (_storyName, Story) => {
- if (_storyName === 'CSF2StoryWithLocale') {
+ if (_storyName === 'CSF2StoryWithLocale' || _storyName === 'MountInPlayFunctionThrow') {
return;
}
- globalThis.IS_REACT_ACT_ENVIRONMENT = false;
await Story.run();
- globalThis.IS_REACT_ACT_ENVIRONMENT = true;
expect(document.body).toMatchSnapshot();
});
diff --git a/code/renderers/react/src/act-compat.ts b/code/renderers/react/src/act-compat.ts
new file mode 100644
index 000000000000..afe1cc902316
--- /dev/null
+++ b/code/renderers/react/src/act-compat.ts
@@ -0,0 +1,65 @@
+// Copied from
+// https://github.com/testing-library/react-testing-library/blob/3dcd8a9649e25054c0e650d95fca2317b7008576/src/act-compat.js
+import * as React from 'react';
+
+import * as DeprecatedReactTestUtils from 'react-dom/test-utils';
+
+declare const globalThis: {
+ IS_REACT_ACT_ENVIRONMENT: boolean;
+};
+
+// @ts-expect-error act might not be available in some versions of React
+const reactAct = typeof React.act === 'function' ? React.act : DeprecatedReactTestUtils.act;
+
+export function setReactActEnvironment(isReactActEnvironment: boolean) {
+ globalThis.IS_REACT_ACT_ENVIRONMENT = isReactActEnvironment;
+}
+
+export function getReactActEnvironment() {
+ return globalThis.IS_REACT_ACT_ENVIRONMENT;
+}
+
+function withGlobalActEnvironment(actImplementation: (callback: () => void) => Promise) {
+ return (callback: () => any) => {
+ const previousActEnvironment = getReactActEnvironment();
+ setReactActEnvironment(true);
+ try {
+ // The return value of `act` is always a thenable.
+ let callbackNeedsToBeAwaited = false;
+ const actResult = actImplementation(() => {
+ const result = callback();
+ if (result !== null && typeof result === 'object' && typeof result.then === 'function') {
+ callbackNeedsToBeAwaited = true;
+ }
+ return result;
+ });
+ if (callbackNeedsToBeAwaited) {
+ const thenable: Promise = actResult;
+ return {
+ then: (resolve: (param: any) => void, reject: (param: any) => void) => {
+ thenable.then(
+ (returnValue) => {
+ setReactActEnvironment(previousActEnvironment);
+ resolve(returnValue);
+ },
+ (error) => {
+ setReactActEnvironment(previousActEnvironment);
+ reject(error);
+ }
+ );
+ },
+ };
+ } else {
+ setReactActEnvironment(previousActEnvironment);
+ return actResult;
+ }
+ } catch (error) {
+ // Can't be a `finally {}` block since we don't know if we have to immediately restore IS_REACT_ACT_ENVIRONMENT
+ // or if we have to await the callback first.
+ setReactActEnvironment(previousActEnvironment);
+ throw error;
+ }
+ };
+}
+
+export const act = withGlobalActEnvironment(reactAct);
diff --git a/code/renderers/react/src/portable-stories.tsx b/code/renderers/react/src/portable-stories.tsx
index 2ea196e85b4b..ced0bbd289e3 100644
--- a/code/renderers/react/src/portable-stories.tsx
+++ b/code/renderers/react/src/portable-stories.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import * as React from 'react';
import {
composeStories as originalComposeStories,
@@ -17,6 +17,7 @@ import type {
StoryAnnotationsOrFn,
} from 'storybook/internal/types';
+import { act, getReactActEnvironment, setReactActEnvironment } from './act-compat';
import * as reactProjectAnnotations from './entry-preview';
import type { Meta } from './public-types';
import type { ReactRenderer } from './types';
@@ -54,9 +55,66 @@ export function setProjectAnnotations(
// This will not be necessary once we have auto preset loading
export const INTERNAL_DEFAULT_PROJECT_ANNOTATIONS: ProjectAnnotations = {
...reactProjectAnnotations,
- renderToCanvas: (renderContext, canvasElement) => {
+ beforeAll: async function reactBeforeAll() {
+ try {
+ // copied from
+ // https://github.com/testing-library/react-testing-library/blob/3dcd8a9649e25054c0e650d95fca2317b7008576/src/pure.js
+ const { configure } = await import('@storybook/test');
+
+ configure({
+ unstable_advanceTimersWrapper: (cb) => {
+ return act(cb);
+ },
+ asyncWrapper: async (cb) => {
+ const previousActEnvironment = getReactActEnvironment();
+ setReactActEnvironment(false);
+ try {
+ const result = await cb();
+ // Drain microtask queue.
+ // Otherwise we'll restore the previous act() environment, before we resolve the `waitFor` call.
+ // The caller would have no chance to wrap the in-flight Promises in `act()`
+ await new Promise((resolve) => {
+ setTimeout(() => {
+ resolve();
+ }, 0);
+
+ if (jestFakeTimersAreEnabled()) {
+ // @ts-expect-error global jest
+ jest.advanceTimersByTime(0);
+ }
+ });
+
+ return result;
+ } finally {
+ setReactActEnvironment(previousActEnvironment);
+ }
+ },
+ eventWrapper: (cb) => {
+ let result;
+ act(() => {
+ result = cb();
+ });
+ return result;
+ },
+ });
+ } catch (e) {
+ console.log(e);
+ // @storybook/test might not be available
+ }
+ },
+ renderToCanvas: async (renderContext, canvasElement) => {
if (renderContext.storyContext.testingLibraryRender == null) {
- return reactProjectAnnotations.renderToCanvas(renderContext, canvasElement);
+ let unmount: () => void;
+
+ await act(async () => {
+ unmount = await reactProjectAnnotations.renderToCanvas(renderContext, canvasElement);
+ });
+
+ return async () => {
+ await act(() => {
+ unmount();
+ });
+ };
}
const {
storyContext: { context, unboundStoryFn: Story, testingLibraryRender: render },
@@ -149,3 +207,19 @@ export function composeStories;
}
+
+/** The function is used to configure jest's fake timers in environments where React's act is enabled */
+function jestFakeTimersAreEnabled() {
+ // @ts-expect-error global jest
+ if (typeof jest !== 'undefined' && jest !== null) {
+ return (
+ // legacy timers
+
+ // eslint-disable-next-line no-underscore-dangle
+ (setTimeout as any)._isMockFunction === true || // modern timers
+ Object.prototype.hasOwnProperty.call(setTimeout, 'clock')
+ );
+ }
+
+ return false;
+}
diff --git a/code/renderers/react/src/renderToCanvas.tsx b/code/renderers/react/src/renderToCanvas.tsx
index f3a4231d078c..3ae6136f9582 100644
--- a/code/renderers/react/src/renderToCanvas.tsx
+++ b/code/renderers/react/src/renderToCanvas.tsx
@@ -5,6 +5,7 @@ import type { RenderContext } from 'storybook/internal/types';
import { global } from '@storybook/global';
+import { getReactActEnvironment } from './act-compat';
import type { ReactRenderer, StoryContext } from './types';
const { FRAMEWORK_OPTIONS } = global;
@@ -57,7 +58,11 @@ export async function renderToCanvas(
const { renderElement, unmountElement } = await import('@storybook/react-dom-shim');
const Story = unboundStoryFn as FC>;
- const content = (
+ const isActEnabled = getReactActEnvironment();
+
+ const content = isActEnabled ? (
+
+ ) : (
diff --git a/code/vitest-setup.ts b/code/vitest-setup.ts
index 8edd64c36314..5eba16740d1d 100644
--- a/code/vitest-setup.ts
+++ b/code/vitest-setup.ts
@@ -7,6 +7,7 @@ const ignoreList = [
(error: any) => error.message.includes('":nth-child" is potentially unsafe'),
(error: any) => error.message.includes('":first-child" is potentially unsafe'),
(error: any) => error.message.match(/Browserslist: .* is outdated. Please run:/),
+ (error: any) => error.message.includes('Consider adding an error boundary'),
(error: any) =>
error.message.includes('react-async-component-lifecycle-hooks') &&
error.stack.includes('addons/knobs/src/components/__tests__/Options.js'),
diff --git a/code/yarn.lock b/code/yarn.lock
index 9b8a426f6016..397b6cd54ff5 100644
--- a/code/yarn.lock
+++ b/code/yarn.lock
@@ -2490,7 +2490,7 @@ __metadata:
languageName: node
linkType: hard
-"@emnapi/runtime@npm:^1.1.1":
+"@emnapi/runtime@npm:^1.1.1, @emnapi/runtime@npm:^1.2.0":
version: 1.2.0
resolution: "@emnapi/runtime@npm:1.2.0"
dependencies:
@@ -3424,6 +3424,18 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-darwin-arm64@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-darwin-arm64@npm:0.33.5"
+ dependencies:
+ "@img/sharp-libvips-darwin-arm64": "npm:1.0.4"
+ dependenciesMeta:
+ "@img/sharp-libvips-darwin-arm64":
+ optional: true
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@img/sharp-darwin-x64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-darwin-x64@npm:0.33.4"
@@ -3436,6 +3448,18 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-darwin-x64@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-darwin-x64@npm:0.33.5"
+ dependencies:
+ "@img/sharp-libvips-darwin-x64": "npm:1.0.4"
+ dependenciesMeta:
+ "@img/sharp-libvips-darwin-x64":
+ optional: true
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
"@img/sharp-libvips-darwin-arm64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.2"
@@ -3443,6 +3467,13 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-libvips-darwin-arm64@npm:1.0.4":
+ version: 1.0.4
+ resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.4"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@img/sharp-libvips-darwin-x64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.2"
@@ -3450,6 +3481,13 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-libvips-darwin-x64@npm:1.0.4":
+ version: 1.0.4
+ resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.4"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
"@img/sharp-libvips-linux-arm64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.2"
@@ -3457,6 +3495,13 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-libvips-linux-arm64@npm:1.0.4":
+ version: 1.0.4
+ resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.4"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
"@img/sharp-libvips-linux-arm@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-arm@npm:1.0.2"
@@ -3464,6 +3509,13 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-libvips-linux-arm@npm:1.0.5":
+ version: 1.0.5
+ resolution: "@img/sharp-libvips-linux-arm@npm:1.0.5"
+ conditions: os=linux & cpu=arm & libc=glibc
+ languageName: node
+ linkType: hard
+
"@img/sharp-libvips-linux-s390x@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.2"
@@ -3471,6 +3523,13 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-libvips-linux-s390x@npm:1.0.4":
+ version: 1.0.4
+ resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.4"
+ conditions: os=linux & cpu=s390x & libc=glibc
+ languageName: node
+ linkType: hard
+
"@img/sharp-libvips-linux-x64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-x64@npm:1.0.2"
@@ -3478,6 +3537,13 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-libvips-linux-x64@npm:1.0.4":
+ version: 1.0.4
+ resolution: "@img/sharp-libvips-linux-x64@npm:1.0.4"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.2"
@@ -3485,6 +3551,13 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.4":
+ version: 1.0.4
+ resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.4"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
"@img/sharp-libvips-linuxmusl-x64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.2"
@@ -3492,6 +3565,13 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-libvips-linuxmusl-x64@npm:1.0.4":
+ version: 1.0.4
+ resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.4"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
"@img/sharp-linux-arm64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linux-arm64@npm:0.33.4"
@@ -3504,6 +3584,18 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-linux-arm64@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-linux-arm64@npm:0.33.5"
+ dependencies:
+ "@img/sharp-libvips-linux-arm64": "npm:1.0.4"
+ dependenciesMeta:
+ "@img/sharp-libvips-linux-arm64":
+ optional: true
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
"@img/sharp-linux-arm@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linux-arm@npm:0.33.4"
@@ -3516,6 +3608,18 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-linux-arm@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-linux-arm@npm:0.33.5"
+ dependencies:
+ "@img/sharp-libvips-linux-arm": "npm:1.0.5"
+ dependenciesMeta:
+ "@img/sharp-libvips-linux-arm":
+ optional: true
+ conditions: os=linux & cpu=arm & libc=glibc
+ languageName: node
+ linkType: hard
+
"@img/sharp-linux-s390x@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linux-s390x@npm:0.33.4"
@@ -3528,6 +3632,18 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-linux-s390x@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-linux-s390x@npm:0.33.5"
+ dependencies:
+ "@img/sharp-libvips-linux-s390x": "npm:1.0.4"
+ dependenciesMeta:
+ "@img/sharp-libvips-linux-s390x":
+ optional: true
+ conditions: os=linux & cpu=s390x & libc=glibc
+ languageName: node
+ linkType: hard
+
"@img/sharp-linux-x64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linux-x64@npm:0.33.4"
@@ -3540,6 +3656,18 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-linux-x64@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-linux-x64@npm:0.33.5"
+ dependencies:
+ "@img/sharp-libvips-linux-x64": "npm:1.0.4"
+ dependenciesMeta:
+ "@img/sharp-libvips-linux-x64":
+ optional: true
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
"@img/sharp-linuxmusl-arm64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.4"
@@ -3552,6 +3680,18 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-linuxmusl-arm64@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.5"
+ dependencies:
+ "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.4"
+ dependenciesMeta:
+ "@img/sharp-libvips-linuxmusl-arm64":
+ optional: true
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
"@img/sharp-linuxmusl-x64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linuxmusl-x64@npm:0.33.4"
@@ -3564,6 +3704,18 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-linuxmusl-x64@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-linuxmusl-x64@npm:0.33.5"
+ dependencies:
+ "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.4"
+ dependenciesMeta:
+ "@img/sharp-libvips-linuxmusl-x64":
+ optional: true
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
"@img/sharp-wasm32@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-wasm32@npm:0.33.4"
@@ -3573,6 +3725,15 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-wasm32@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-wasm32@npm:0.33.5"
+ dependencies:
+ "@emnapi/runtime": "npm:^1.2.0"
+ conditions: cpu=wasm32
+ languageName: node
+ linkType: hard
+
"@img/sharp-win32-ia32@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-win32-ia32@npm:0.33.4"
@@ -3580,6 +3741,13 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-win32-ia32@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-win32-ia32@npm:0.33.5"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
"@img/sharp-win32-x64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-win32-x64@npm:0.33.4"
@@ -3587,6 +3755,13 @@ __metadata:
languageName: node
linkType: hard
+"@img/sharp-win32-x64@npm:0.33.5":
+ version: 0.33.5
+ resolution: "@img/sharp-win32-x64@npm:0.33.5"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
"@inquirer/confirm@npm:^3.0.0":
version: 3.1.20
resolution: "@inquirer/confirm@npm:3.1.20"
@@ -3903,13 +4078,20 @@ __metadata:
languageName: node
linkType: hard
-"@next/env@npm:14.2.5, @next/env@npm:^14.2.5":
+"@next/env@npm:14.2.5":
version: 14.2.5
resolution: "@next/env@npm:14.2.5"
checksum: 10c0/63d8b88ac450b3c37940a9e2119a63a1074aca89908574ade6157a8aa295275dcb3ac5f69e00883fc55d0f12963b73b74e87ba32a5768a489f9609c6be57b699
languageName: node
linkType: hard
+"@next/env@npm:^14.2.5":
+ version: 14.2.7
+ resolution: "@next/env@npm:14.2.7"
+ checksum: 10c0/1cda023007acda4d47036a25fba0e039d9b2df9c3770651dc289207e0537506675546c02b5b574fe92bb1adc1c887d948d5cb630673aa572754278b82d150b7e
+ languageName: node
+ linkType: hard
+
"@next/swc-darwin-arm64@npm:14.2.5":
version: 14.2.5
resolution: "@next/swc-darwin-arm64@npm:14.2.5"
@@ -6668,11 +6850,14 @@ __metadata:
type-fest: "npm:~2.19"
util-deprecate: "npm:^1.0.2"
peerDependencies:
+ "@storybook/test": "workspace:*"
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
storybook: "workspace:^"
typescript: ">= 4.2.x"
peerDependenciesMeta:
+ "@storybook/test":
+ optional: true
typescript:
optional: true
languageName: unknown
@@ -25319,6 +25504,15 @@ __metadata:
languageName: node
linkType: hard
+"semver@npm:^7.6.3":
+ version: 7.6.3
+ resolution: "semver@npm:7.6.3"
+ bin:
+ semver: bin/semver.js
+ checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf
+ languageName: node
+ linkType: hard
+
"send@npm:0.18.0":
version: 0.18.0
resolution: "send@npm:0.18.0"
@@ -25470,7 +25664,7 @@ __metadata:
languageName: node
linkType: hard
-"sharp@npm:^0.33.3, sharp@npm:^0.33.4":
+"sharp@npm:^0.33.3":
version: 0.33.4
resolution: "sharp@npm:0.33.4"
dependencies:
@@ -25539,6 +25733,75 @@ __metadata:
languageName: node
linkType: hard
+"sharp@npm:^0.33.4":
+ version: 0.33.5
+ resolution: "sharp@npm:0.33.5"
+ dependencies:
+ "@img/sharp-darwin-arm64": "npm:0.33.5"
+ "@img/sharp-darwin-x64": "npm:0.33.5"
+ "@img/sharp-libvips-darwin-arm64": "npm:1.0.4"
+ "@img/sharp-libvips-darwin-x64": "npm:1.0.4"
+ "@img/sharp-libvips-linux-arm": "npm:1.0.5"
+ "@img/sharp-libvips-linux-arm64": "npm:1.0.4"
+ "@img/sharp-libvips-linux-s390x": "npm:1.0.4"
+ "@img/sharp-libvips-linux-x64": "npm:1.0.4"
+ "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.4"
+ "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.4"
+ "@img/sharp-linux-arm": "npm:0.33.5"
+ "@img/sharp-linux-arm64": "npm:0.33.5"
+ "@img/sharp-linux-s390x": "npm:0.33.5"
+ "@img/sharp-linux-x64": "npm:0.33.5"
+ "@img/sharp-linuxmusl-arm64": "npm:0.33.5"
+ "@img/sharp-linuxmusl-x64": "npm:0.33.5"
+ "@img/sharp-wasm32": "npm:0.33.5"
+ "@img/sharp-win32-ia32": "npm:0.33.5"
+ "@img/sharp-win32-x64": "npm:0.33.5"
+ color: "npm:^4.2.3"
+ detect-libc: "npm:^2.0.3"
+ semver: "npm:^7.6.3"
+ dependenciesMeta:
+ "@img/sharp-darwin-arm64":
+ optional: true
+ "@img/sharp-darwin-x64":
+ optional: true
+ "@img/sharp-libvips-darwin-arm64":
+ optional: true
+ "@img/sharp-libvips-darwin-x64":
+ optional: true
+ "@img/sharp-libvips-linux-arm":
+ optional: true
+ "@img/sharp-libvips-linux-arm64":
+ optional: true
+ "@img/sharp-libvips-linux-s390x":
+ optional: true
+ "@img/sharp-libvips-linux-x64":
+ optional: true
+ "@img/sharp-libvips-linuxmusl-arm64":
+ optional: true
+ "@img/sharp-libvips-linuxmusl-x64":
+ optional: true
+ "@img/sharp-linux-arm":
+ optional: true
+ "@img/sharp-linux-arm64":
+ optional: true
+ "@img/sharp-linux-s390x":
+ optional: true
+ "@img/sharp-linux-x64":
+ optional: true
+ "@img/sharp-linuxmusl-arm64":
+ optional: true
+ "@img/sharp-linuxmusl-x64":
+ optional: true
+ "@img/sharp-wasm32":
+ optional: true
+ "@img/sharp-win32-ia32":
+ optional: true
+ "@img/sharp-win32-x64":
+ optional: true
+ checksum: 10c0/6b81421ddfe6ee524d8d77e325c5e147fef22884e1c7b1656dfd89a88d7025894115da02d5f984261bf2e6daa16f98cadd1721c4ba408b4212b1d2a60f233484
+ languageName: node
+ linkType: hard
+
"shebang-command@npm:^1.2.0":
version: 1.2.0
resolution: "shebang-command@npm:1.2.0"
From da21bfecb75a64abeb40a23fa01ec32daccbb40d Mon Sep 17 00:00:00 2001
From: Valentin Palkovic
Date: Wed, 4 Sep 2024 13:00:05 +0200
Subject: [PATCH 13/39] Next.js: Update webpack configuration to support
react-dom/test-utils
---
code/frameworks/nextjs/src/config/webpack.ts | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/code/frameworks/nextjs/src/config/webpack.ts b/code/frameworks/nextjs/src/config/webpack.ts
index 3860207e124e..3e0d758c1514 100644
--- a/code/frameworks/nextjs/src/config/webpack.ts
+++ b/code/frameworks/nextjs/src/config/webpack.ts
@@ -25,9 +25,17 @@ export const configureConfig = async ({
if (tryResolve('next/dist/compiled/react')) {
addScopedAlias(baseConfig, 'react', 'next/dist/compiled/react');
}
+ if (tryResolve('next/dist/compiled/react-dom/cjs/react-dom-test-utils.production.js')) {
+ addScopedAlias(
+ baseConfig,
+ 'react-dom/test-utils',
+ 'next/dist/compiled/react-dom/cjs/react-dom-test-utils.production.js'
+ );
+ }
if (tryResolve('next/dist/compiled/react-dom')) {
- addScopedAlias(baseConfig, 'react-dom', 'next/dist/compiled/react-dom');
+ addScopedAlias(baseConfig, 'react-dom$', 'next/dist/compiled/react-dom');
}
+
setupRuntimeConfig(baseConfig, nextConfig);
return nextConfig;
From e76df5823098a27f57f593f34c826023a2608f9e Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Wed, 4 Sep 2024 11:05:39 -0600
Subject: [PATCH 14/39] Update heading
---
docs/writing-tests/test-runner-with-vitest.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/writing-tests/test-runner-with-vitest.mdx b/docs/writing-tests/test-runner-with-vitest.mdx
index b1fb80d74a3f..c57c4cfde3f1 100644
--- a/docs/writing-tests/test-runner-with-vitest.mdx
+++ b/docs/writing-tests/test-runner-with-vitest.mdx
@@ -336,7 +336,7 @@ You can also provide a [`storybookUrl` option](#storybookurl) to the plugin conf
[TK - Screenshot of test output with links to SB]
-## Configuration
+## Configuring tests
Most of the configuration for the Vitest plugin's behavior is done in the Vitest configuration and setup files. However, you can also define configuration in your stories themselves, using [tags](../writing-stories/tags.mdx), to control how they are tested.
From 7a32c16cfd49ad25185ee216d36530d5ed775f5c Mon Sep 17 00:00:00 2001
From: Shota FUJI
Date: Thu, 5 Sep 2024 15:30:37 +0900
Subject: [PATCH 15/39] Docs: Fix broken links ending with ".mdx"
When I checked "How to contribute" page on storybook.js.org, a link
titled "Continue reading our contributor covenant" pointed to GitHub's
404 page. The last item of the URL path was "CODE_OF_CONDUCT.mdx", which
is not common filename people uses, therefore I suspected this is not
the only broken link in the docs.
And I was right. I ran the below command (rg = RipGrep) then found
several 404 links.
```
$ cd docs
$ rg "https?:[\S)]+mdx\)" --sort path
```
Git blame told me that some of ".md" to ".mdx" migration works
accidentally changed non-docs URLs ending with ".md" too.
StackBlitz URL in docs/api/main-config/main-config-indexers.mdx is not
actually a dead link, as the service redirects to the `README.md`.
However, the redirection takes loooong so I replaced that as well.
There are still two links that match to the above regexp:
*
at docs/contribute/documentation/new-snippets.mdx L42
*
at docs/writing-docs/mdx.mdx
but those two are both valid (alive) URLs.
---
docs/api/main-config/main-config-indexers.mdx | 2 +-
docs/configure/upgrading.mdx | 2 +-
docs/contribute/framework.mdx | 2 +-
docs/contribute/index.mdx | 2 +-
docs/faq.mdx | 6 +++---
docs/migration-guide/from-older-version.mdx | 2 +-
docs/migration-guide/index.mdx | 2 +-
7 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/docs/api/main-config/main-config-indexers.mdx b/docs/api/main-config/main-config-indexers.mdx
index 9d31b0c169cc..67a6cf5c45b1 100644
--- a/docs/api/main-config/main-config-indexers.mdx
+++ b/docs/api/main-config/main-config-indexers.mdx
@@ -341,7 +341,7 @@ Some example usages of custom indexers include:
Generating stories with an alternative API
- You can use a custom indexer and builder plugin to create your API to define stories extending the CSF format. To learn more, see the following [proof of concept](https://stackblitz.com/edit/github-h2rgfk?file=README.mdx) to set up a custom indexer to generate stories dynamically. It contains everything needed to support such a feature, including the indexer, a Vite plugin, and a Webpack loader.
+ You can use a custom indexer and builder plugin to create your API to define stories extending the CSF format. To learn more, see the following [proof of concept](https://stackblitz.com/edit/github-h2rgfk?file=README.md) to set up a custom indexer to generate stories dynamically. It contains everything needed to support such a feature, including the indexer, a Vite plugin, and a Webpack loader.
diff --git a/docs/configure/upgrading.mdx b/docs/configure/upgrading.mdx
index ac75aff8a701..918182b7e931 100644
--- a/docs/configure/upgrading.mdx
+++ b/docs/configure/upgrading.mdx
@@ -31,7 +31,7 @@ After running the command, the script will:
* Run the relevant [automigrations](../migration-guide/index.mdx#automatic-upgrade) factoring in the [breaking changes](../migration-guide/index.mdx#major-breaking-changes) between your current version and the specified version
- In addition to running the command, we also recommend checking the [MIGRATION.md file](https://github.com/storybookjs/storybook/blob/next/MIGRATION.mdx), for the detailed log of relevant changes and deprecations that might affect your upgrade.
+ In addition to running the command, we also recommend checking the [MIGRATION.md file](https://github.com/storybookjs/storybook/blob/next/MIGRATION.md), for the detailed log of relevant changes and deprecations that might affect your upgrade.
### Verifying the upgrade
diff --git a/docs/contribute/framework.mdx b/docs/contribute/framework.mdx
index 71ef9f1328cd..2b6cce765192 100644
--- a/docs/contribute/framework.mdx
+++ b/docs/contribute/framework.mdx
@@ -27,7 +27,7 @@ The library or libraries your framework supports may have different major versio
### 3. Write the documentation
-Before writing any code, write a helpful README that contains installation instructions and a list of available features. Use the [README for `@storybook/nextjs`](https://github.com/storybookjs/storybook/blob/next/code/frameworks/nextjs/README.mdx) as a template. Writing the documentation first helps guide your other work.
+Before writing any code, write a helpful README that contains installation instructions and a list of available features. Use the [README for `@storybook/nextjs`](https://github.com/storybookjs/storybook/blob/next/code/frameworks/nextjs/README.md) as a template. Writing the documentation first helps guide your other work.
### 4. Author the framework itself
diff --git a/docs/contribute/index.mdx b/docs/contribute/index.mdx
index dd27c951753b..db8d512ca179 100644
--- a/docs/contribute/index.mdx
+++ b/docs/contribute/index.mdx
@@ -10,7 +10,7 @@ Storybook is a community-oriented open source project that welcomes contribution
## Contributor covenant
-In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. [Continue reading our contributor covenant Β»](https://github.com/storybookjs/storybook/blob/next/CODE_OF_CONDUCT.mdx)
+In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. [Continue reading our contributor covenant Β»](https://github.com/storybookjs/storybook/blob/next/CODE_OF_CONDUCT.md)
## Ways to contribute
diff --git a/docs/faq.mdx b/docs/faq.mdx
index 57c010639e1d..5bfab8ad93d1 100644
--- a/docs/faq.mdx
+++ b/docs/faq.mdx
@@ -195,7 +195,7 @@ We're actively working to provide a better way to address this situation, but in
## Is it possible to browse the documentation for past versions of Storybook?
-With the release of version 6.0, we updated our documentation as well. That doesn't mean that the old documentation was removed. We kept it to help you with your Storybook migration process. Use the content from the table below in conjunction with our [migration guide](https://github.com/storybookjs/storybook/blob/next/MIGRATION.mdx).
+With the release of version 6.0, we updated our documentation as well. That doesn't mean that the old documentation was removed. We kept it to help you with your Storybook migration process. Use the content from the table below in conjunction with our [migration guide](https://github.com/storybookjs/storybook/blob/next/MIGRATION.md).
We're only covering versions 5.3 and 5.0 as they were important milestones for Storybook. If you want to go back in time a little more, you'll have to check the specific release in the monorepo.
@@ -246,7 +246,7 @@ We're only covering versions 5.3 and 5.0 as they were important milestones for S
| | Environment variables | [See current documentation](./configure/environment-variables.mdx) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.3/docs/src/pages/configurations/env-vars) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.0/docs/src/pages/configurations/env-vars) |
| Builders | Introduction | [See current documentation](./builders/index.mdx) | Non existing feature or undocumented | Non existing feature or undocumented |
| | Vite | [See current documentation](./builders/vite.mdx) | Non existing feature or undocumented | Non existing feature or undocumented |
-| | Webpack | [See current documentation](./builders/webpack.mdx) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.3/docs/src/pages/configurations/custom-webpack-config/index.mdx) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.0/docs/src/pages/configurations/custom-webpack-config/index.mdx) |
+| | Webpack | [See current documentation](./builders/webpack.mdx) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.3/docs/src/pages/configurations/custom-webpack-config/index.md) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.0/docs/src/pages/configurations/custom-webpack-config/index.md) |
| | Builder API | [See current documentation](./builders/builder-api.mdx) | Non existing feature or undocumented | Non existing feature or undocumented |
| Addons | Introduction | [See current documentation](./addons/index.mdx) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.3/docs/src/pages/addons/writing-addons) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.0/docs/src/pages/addons/writing-addons) |
| | Install addons | [See current documentation](./addons/install-addons.mdx) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.3/docs/src/pages/addons/using-addons/) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.0/docs/src/pages/addons/using-addons/) |
@@ -301,7 +301,7 @@ We're only covering versions 5.3 and 5.0 as they were important milestones for S
| | CLI options | [See current documentation](./api/cli-options.mdx) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.3/docs/src/pages/configurations/cli-options) | [See versioned documentation](https://github.com/storybookjs/storybook/tree/release/5.0/docs/src/pages/configurations/cli-options) |
- If you have stories written with the older `storiesOf` format, it was removed in Storybook 8.0 and is no longer maintained. We recommend that you migrate your stories to CSF. See the [migration guide](./migration-guide/index.mdx#storiesof-to-csf) for more information. However, if you need, you can still access the old `storiesOf` [documentation](https://github.com/storybookjs/storybook/blob/release/5.3/docs/src/pages/formats/storiesof-api/index.mdx) for reference.
+ If you have stories written with the older `storiesOf` format, it was removed in Storybook 8.0 and is no longer maintained. We recommend that you migrate your stories to CSF. See the [migration guide](./migration-guide/index.mdx#storiesof-to-csf) for more information. However, if you need, you can still access the old `storiesOf` [documentation](https://github.com/storybookjs/storybook/blob/release/5.3/docs/src/pages/formats/storiesof-api/index.md) for reference.
## What icons are available for my toolbar or my addon?
diff --git a/docs/migration-guide/from-older-version.mdx b/docs/migration-guide/from-older-version.mdx
index a5fb7e4cfc6c..ae1f484c7988 100644
--- a/docs/migration-guide/from-older-version.mdx
+++ b/docs/migration-guide/from-older-version.mdx
@@ -119,7 +119,7 @@ The automatic upgrade should get your Storybook into a working state. If you enc
If you prefer to debug yourself, here are a few useful things you can do to help narrow down the problem:
1. Try removing all addons that are not in the `@storybook` npm namespace (make sure you don't remove the `storybook` package). Community addons that work well with 7.x might not yet be compatible with 8.0, and this is the fastest way to isolate that possibility. If you find an addon that needs to be upgraded to work with Storybook 8, please post an issue on the addonβs repository, or better yet, a pull request to upgrade it!
-2. Another debugging technique is to bisect to older prerelease versions of Storybook to figure out which release broke your Storybook. For example, assuming that the current prerelease of Storybook is `8.0.0-beta.56`, you could set the version to `8.0.0-alpha.0` in your `package.json` and reinstall to verify that it still works (`alpha.0` should be nearly identical to `7.6.x`). If it works, you could then try `8.0.0-beta.0`, then `8.0.0-beta.28` and so forth. Once youβve isolated the bad release, read through its [CHANGELOG](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.mdx) entry and perhaps thereβs a change that jumps out as the culprit. If you find the problem, please submit an issue or pull request to the Storybook monorepo and weβll do our best to take care of it quickly.
+2. Another debugging technique is to bisect to older prerelease versions of Storybook to figure out which release broke your Storybook. For example, assuming that the current prerelease of Storybook is `8.0.0-beta.56`, you could set the version to `8.0.0-alpha.0` in your `package.json` and reinstall to verify that it still works (`alpha.0` should be nearly identical to `7.6.x`). If it works, you could then try `8.0.0-beta.0`, then `8.0.0-beta.28` and so forth. Once youβve isolated the bad release, read through its [CHANGELOG](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) entry and perhaps thereβs a change that jumps out as the culprit. If you find the problem, please submit an issue or pull request to the Storybook monorepo and weβll do our best to take care of it quickly.
## Optional migrations
diff --git a/docs/migration-guide/index.mdx b/docs/migration-guide/index.mdx
index 560d61b94cef..93e91a901910 100644
--- a/docs/migration-guide/index.mdx
+++ b/docs/migration-guide/index.mdx
@@ -133,7 +133,7 @@ The automatic upgrade should get your Storybook into a working state. If you enc
If you prefer to debug yourself, here are a few useful things you can do to help narrow down the problem:
1. Try removing all addons that are not in the `@storybook` npm namespace (make sure you don't remove the `storybook` package). Community addons that work well with 7.x might not yet be compatible with 8.0, and this is the fastest way to isolate that possibility. If you find an addon that needs to be upgraded to work with Storybook 8, please post an issue on the addonβs repository, or better yet, a pull request to upgrade it!
-2. Another debugging technique is to bisect to older prerelease versions of Storybook to figure out which release broke your Storybook. For example, assuming that the current prerelease of Storybook is `8.0.0-beta.56`, you could set the version to `8.0.0-alpha.0` in your `package.json` and reinstall to verify that it still works (`alpha.0` should be nearly identical to `7.6.x`). If it works, you could then try `8.0.0-beta.0`, then `8.0.0-beta.28` and so forth. Once youβve isolated the bad release, read through its [CHANGELOG](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.mdx) entry and perhaps thereβs a change that jumps out as the culprit. If you find the problem, please submit an issue or pull request to the Storybook monorepo and weβll do our best to take care of it quickly.
+2. Another debugging technique is to bisect to older prerelease versions of Storybook to figure out which release broke your Storybook. For example, assuming that the current prerelease of Storybook is `8.0.0-beta.56`, you could set the version to `8.0.0-alpha.0` in your `package.json` and reinstall to verify that it still works (`alpha.0` should be nearly identical to `7.6.x`). If it works, you could then try `8.0.0-beta.0`, then `8.0.0-beta.28` and so forth. Once youβve isolated the bad release, read through its [CHANGELOG](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) entry and perhaps thereβs a change that jumps out as the culprit. If you find the problem, please submit an issue or pull request to the Storybook monorepo and weβll do our best to take care of it quickly.
## Package structure changes
From da2aee4928b7cc5ba104df99ec9a62873a4b3b3b Mon Sep 17 00:00:00 2001
From: Jeppe Reinhold
Date: Thu, 5 Sep 2024 09:12:51 +0200
Subject: [PATCH 16/39] name decorators for easier debugging
---
code/core/template/stories/preview.ts | 16 +-
code/frameworks/sveltekit/src/preview.ts | 222 +++++++++++------------
2 files changed, 119 insertions(+), 119 deletions(-)
diff --git a/code/core/template/stories/preview.ts b/code/core/template/stories/preview.ts
index 4cd4c64abff5..bba2716864bc 100644
--- a/code/core/template/stories/preview.ts
+++ b/code/core/template/stories/preview.ts
@@ -30,14 +30,14 @@ export const parameters = {
export const loaders = [async () => ({ projectValue: 2 })];
-export const decorators = [
- (storyFn: PartialStoryFn, context: StoryContext) => {
- if (context.parameters.useProjectDecorator) {
- return storyFn({ args: { ...context.args, text: `project ${context.args.text}` } });
- }
- return storyFn();
- },
-];
+const testProjectDecorator = (storyFn: PartialStoryFn, context: StoryContext) => {
+ if (context.parameters.useProjectDecorator) {
+ return storyFn({ args: { ...context.args, text: `project ${context.args.text}` } });
+ }
+ return storyFn();
+};
+
+export const decorators = [testProjectDecorator];
export const initialGlobals = {
foo: 'fooValue',
diff --git a/code/frameworks/sveltekit/src/preview.ts b/code/frameworks/sveltekit/src/preview.ts
index f93c06862c29..c93cbde37a55 100644
--- a/code/frameworks/sveltekit/src/preview.ts
+++ b/code/frameworks/sveltekit/src/preview.ts
@@ -15,125 +15,125 @@ const normalizeHrefConfig = (hrefConfig: HrefConfig): NormalizedHrefConfig => {
return hrefConfig;
};
-export const decorators: Decorator[] = [
- (Story, ctx) => {
- const svelteKitParameters: SvelteKitParameters = ctx.parameters?.sveltekit_experimental ?? {};
- setPage(svelteKitParameters?.stores?.page);
- setNavigating(svelteKitParameters?.stores?.navigating);
- setUpdated(svelteKitParameters?.stores?.updated);
- setAfterNavigateArgument(svelteKitParameters?.navigation?.afterNavigate);
+const svelteKitMocksDecorator = (Story, ctx) => {
+ const svelteKitParameters: SvelteKitParameters = ctx.parameters?.sveltekit_experimental ?? {};
+ setPage(svelteKitParameters?.stores?.page);
+ setNavigating(svelteKitParameters?.stores?.navigating);
+ setUpdated(svelteKitParameters?.stores?.updated);
+ setAfterNavigateArgument(svelteKitParameters?.navigation?.afterNavigate);
- onMount(() => {
- const globalClickListener = (e: MouseEvent) => {
- // we add a global click event listener and we check if there's a link in the composedPath
- const path = e.composedPath();
- const element = path.findLast((el) => el instanceof HTMLElement && el.tagName === 'A');
- if (element && element instanceof HTMLAnchorElement) {
- // if the element is an a-tag we get the href of the element
- // and compare it to the hrefs-parameter set by the user
- const to = element.getAttribute('href');
- if (!to) {
- return;
- }
- e.preventDefault();
- const defaultActionCallback = () => action('navigate')(to, e);
- if (!svelteKitParameters.hrefs) {
- defaultActionCallback();
- return;
- }
-
- let callDefaultCallback = true;
- // we loop over every href set by the user and check if the href matches
- // if it does we call the callback provided by the user and disable the default callback
- Object.entries(svelteKitParameters.hrefs).forEach(([href, hrefConfig]) => {
- const { callback, asRegex } = normalizeHrefConfig(hrefConfig);
- const isMatch = asRegex ? new RegExp(href).test(to) : to === href;
- if (isMatch) {
- callDefaultCallback = false;
- callback?.(to, e);
- }
- });
- if (callDefaultCallback) {
- defaultActionCallback();
- }
+ onMount(() => {
+ const globalClickListener = (e: MouseEvent) => {
+ // we add a global click event listener and we check if there's a link in the composedPath
+ const path = e.composedPath();
+ const element = path.findLast((el) => el instanceof HTMLElement && el.tagName === 'A');
+ if (element && element instanceof HTMLAnchorElement) {
+ // if the element is an a-tag we get the href of the element
+ // and compare it to the hrefs-parameter set by the user
+ const to = element.getAttribute('href');
+ if (!to) {
+ return;
+ }
+ e.preventDefault();
+ const defaultActionCallback = () => action('navigate')(to, e);
+ if (!svelteKitParameters.hrefs) {
+ defaultActionCallback();
+ return;
}
- };
-
- /**
- * Function that create and add listeners for the event that are emitted by the mocked
- * functions. The event name is based on the function name
- *
- * Eg. storybook:goto, storybook:invalidateAll
- *
- * @param baseModule The base module where the function lives (navigation|forms)
- * @param functions The list of functions in that module that emit events
- * @param {boolean} [defaultToAction] The list of functions in that module that emit events
- * @returns A function to remove all the listener added
- */
- function createListeners(
- baseModule: keyof SvelteKitParameters,
- functions: string[],
- defaultToAction?: boolean
- ) {
- // the array of every added listener, we can use this in the return function
- // to clean them
- const toRemove: Array<{
- eventType: string;
- listener: (event: { detail: any[] }) => void;
- }> = [];
- functions.forEach((func) => {
- // we loop over every function and check if the user actually passed
- // a function in sveltekit_experimental[baseModule][func] eg. sveltekit_experimental.navigation.goto
- const hasFunction =
- (svelteKitParameters as any)[baseModule]?.[func] &&
- (svelteKitParameters as any)[baseModule][func] instanceof Function;
- // if we default to an action we still add the listener (this will be the case for goto, invalidate, invalidateAll)
- if (hasFunction || defaultToAction) {
- // we create the listener that will just get the detail array from the custom element
- // and call the user provided function spreading this args in...this will basically call
- // the function that the user provide with the same arguments the function is invoked to
- // eg. if it calls goto("/my-route") inside the component the function sveltekit_experimental.navigation.goto
- // it provided to storybook will be called with "/my-route"
- const listener = ({ detail = [] as any[] }) => {
- const args = Array.isArray(detail) ? detail : [];
- // if it has a function in the parameters we call that function
- // otherwise we invoke the action
- const fnToCall = hasFunction
- ? (svelteKitParameters as any)[baseModule][func]
- : action(func);
- fnToCall(...args);
- };
- const eventType = `storybook:${func}`;
- toRemove.push({ eventType, listener });
- // add the listener to window
- (window.addEventListener as any)(eventType, listener);
+ let callDefaultCallback = true;
+ // we loop over every href set by the user and check if the href matches
+ // if it does we call the callback provided by the user and disable the default callback
+ Object.entries(svelteKitParameters.hrefs).forEach(([href, hrefConfig]) => {
+ const { callback, asRegex } = normalizeHrefConfig(hrefConfig);
+ const isMatch = asRegex ? new RegExp(href).test(to) : to === href;
+ if (isMatch) {
+ callDefaultCallback = false;
+ callback?.(to, e);
}
});
- return () => {
- // loop over every listener added and remove them
- toRemove.forEach(({ eventType, listener }) => {
- // @ts-expect-error apparently you can't remove a custom listener to the window with TS
- window.removeEventListener(eventType, listener);
- });
- };
+ if (callDefaultCallback) {
+ defaultActionCallback();
+ }
}
+ };
- const removeNavigationListeners = createListeners(
- 'navigation',
- ['goto', 'invalidate', 'invalidateAll', 'pushState', 'replaceState'],
- true
- );
- const removeFormsListeners = createListeners('forms', ['enhance']);
- window.addEventListener('click', globalClickListener);
+ /**
+ * Function that create and add listeners for the event that are emitted by the mocked
+ * functions. The event name is based on the function name
+ *
+ * Eg. storybook:goto, storybook:invalidateAll
+ *
+ * @param baseModule The base module where the function lives (navigation|forms)
+ * @param functions The list of functions in that module that emit events
+ * @param {boolean} [defaultToAction] The list of functions in that module that emit events
+ * @returns A function to remove all the listener added
+ */
+ function createListeners(
+ baseModule: keyof SvelteKitParameters,
+ functions: string[],
+ defaultToAction?: boolean
+ ) {
+ // the array of every added listener, we can use this in the return function
+ // to clean them
+ const toRemove: Array<{
+ eventType: string;
+ listener: (event: { detail: any[] }) => void;
+ }> = [];
+ functions.forEach((func) => {
+ // we loop over every function and check if the user actually passed
+ // a function in sveltekit_experimental[baseModule][func] eg. sveltekit_experimental.navigation.goto
+ const hasFunction =
+ (svelteKitParameters as any)[baseModule]?.[func] &&
+ (svelteKitParameters as any)[baseModule][func] instanceof Function;
+ // if we default to an action we still add the listener (this will be the case for goto, invalidate, invalidateAll)
+ if (hasFunction || defaultToAction) {
+ // we create the listener that will just get the detail array from the custom element
+ // and call the user provided function spreading this args in...this will basically call
+ // the function that the user provide with the same arguments the function is invoked to
+ // eg. if it calls goto("/my-route") inside the component the function sveltekit_experimental.navigation.goto
+ // it provided to storybook will be called with "/my-route"
+ const listener = ({ detail = [] as any[] }) => {
+ const args = Array.isArray(detail) ? detail : [];
+ // if it has a function in the parameters we call that function
+ // otherwise we invoke the action
+ const fnToCall = hasFunction
+ ? (svelteKitParameters as any)[baseModule][func]
+ : action(func);
+ fnToCall(...args);
+ };
+ const eventType = `storybook:${func}`;
+ toRemove.push({ eventType, listener });
+ // add the listener to window
+ (window.addEventListener as any)(eventType, listener);
+ }
+ });
return () => {
- window.removeEventListener('click', globalClickListener);
- removeNavigationListeners();
- removeFormsListeners();
+ // loop over every listener added and remove them
+ toRemove.forEach(({ eventType, listener }) => {
+ // @ts-expect-error apparently you can't remove a custom listener to the window with TS
+ window.removeEventListener(eventType, listener);
+ });
};
- });
+ }
+
+ const removeNavigationListeners = createListeners(
+ 'navigation',
+ ['goto', 'invalidate', 'invalidateAll', 'pushState', 'replaceState'],
+ true
+ );
+ const removeFormsListeners = createListeners('forms', ['enhance']);
+ window.addEventListener('click', globalClickListener);
+
+ return () => {
+ window.removeEventListener('click', globalClickListener);
+ removeNavigationListeners();
+ removeFormsListeners();
+ };
+ });
+
+ return Story();
+};
- return Story();
- },
-];
+export const decorators: Decorator[] = [svelteKitMocksDecorator];
From 4f1b73d8ff7c5c49323912b9e420385cce45946c Mon Sep 17 00:00:00 2001
From: Jeppe Reinhold
Date: Thu, 5 Sep 2024 09:13:27 +0200
Subject: [PATCH 17/39] fix duplicate default annotations
---
.../modules/store/csf/portable-stories.ts | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/code/core/src/preview-api/modules/store/csf/portable-stories.ts b/code/core/src/preview-api/modules/store/csf/portable-stories.ts
index 7adc83196eb1..1133e2e87a84 100644
--- a/code/core/src/preview-api/modules/store/csf/portable-stories.ts
+++ b/code/core/src/preview-api/modules/store/csf/portable-stories.ts
@@ -74,13 +74,19 @@ export function setProjectAnnotations(
| NamedOrDefaultProjectAnnotations[]
): NormalizedProjectAnnotations {
const annotations = Array.isArray(projectAnnotations) ? projectAnnotations : [projectAnnotations];
- if (globalThis.defaultProjectAnnotations) {
- annotations.push(globalThis.defaultProjectAnnotations);
- }
-
globalThis.globalProjectAnnotations = composeConfigs(annotations.map(extractAnnotation));
- return globalThis.globalProjectAnnotations;
+ /*
+ We must return the composition of default and global annotations here
+ To ensure that the user has the full project annotations, eg. when running
+
+ const projectAnnotations = setProjectAnnotations(...);
+ beforeAll(projectAnnotations.beforeAll)
+ */
+ return composeConfigs([
+ globalThis.defaultProjectAnnotations,
+ globalThis.globalProjectAnnotations,
+ ]);
}
const cleanups: CleanupCallback[] = [];
From 8a7d8eee7ce16030111e009779b9fb15a70099c0 Mon Sep 17 00:00:00 2001
From: Jeppe Reinhold
Date: Thu, 5 Sep 2024 10:53:11 +0200
Subject: [PATCH 18/39] fix decorator type
---
code/frameworks/sveltekit/src/preview.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/frameworks/sveltekit/src/preview.ts b/code/frameworks/sveltekit/src/preview.ts
index c93cbde37a55..6eb8a816dd12 100644
--- a/code/frameworks/sveltekit/src/preview.ts
+++ b/code/frameworks/sveltekit/src/preview.ts
@@ -15,7 +15,7 @@ const normalizeHrefConfig = (hrefConfig: HrefConfig): NormalizedHrefConfig => {
return hrefConfig;
};
-const svelteKitMocksDecorator = (Story, ctx) => {
+const svelteKitMocksDecorator: Decorator = (Story, ctx) => {
const svelteKitParameters: SvelteKitParameters = ctx.parameters?.sveltekit_experimental ?? {};
setPage(svelteKitParameters?.stores?.page);
setNavigating(svelteKitParameters?.stores?.navigating);
From e4697f9d782700879ed2b4706965fcba8ff7a988 Mon Sep 17 00:00:00 2001
From: Jeppe Reinhold
Date: Thu, 5 Sep 2024 13:25:27 +0200
Subject: [PATCH 19/39] fix composing undefined defaultProjectAnnotations
---
.../src/preview-api/modules/store/csf/portable-stories.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/core/src/preview-api/modules/store/csf/portable-stories.ts b/code/core/src/preview-api/modules/store/csf/portable-stories.ts
index 1133e2e87a84..fd50bd57c2dd 100644
--- a/code/core/src/preview-api/modules/store/csf/portable-stories.ts
+++ b/code/core/src/preview-api/modules/store/csf/portable-stories.ts
@@ -84,8 +84,8 @@ export function setProjectAnnotations(
beforeAll(projectAnnotations.beforeAll)
*/
return composeConfigs([
- globalThis.defaultProjectAnnotations,
- globalThis.globalProjectAnnotations,
+ globalThis.defaultProjectAnnotations ?? {},
+ globalThis.globalProjectAnnotations ?? {},
]);
}
From 758aaa1497d8ded23bc2f1c2e3662cf597ced881 Mon Sep 17 00:00:00 2001
From: Valentin Palkovic
Date: Thu, 5 Sep 2024 13:29:09 +0200
Subject: [PATCH 20/39] Next.js-Vite: Update vite-plugin-storybook-nextjs
---
code/frameworks/experimental-nextjs-vite/package.json | 2 +-
code/yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/code/frameworks/experimental-nextjs-vite/package.json b/code/frameworks/experimental-nextjs-vite/package.json
index c0a70eaecffd..83e8bfc35993 100644
--- a/code/frameworks/experimental-nextjs-vite/package.json
+++ b/code/frameworks/experimental-nextjs-vite/package.json
@@ -99,7 +99,7 @@
"@storybook/react": "workspace:*",
"@storybook/test": "workspace:*",
"styled-jsx": "5.1.6",
- "vite-plugin-storybook-nextjs": "^1.0.10"
+ "vite-plugin-storybook-nextjs": "^1.0.11"
},
"devDependencies": {
"@types/node": "^18.0.0",
diff --git a/code/yarn.lock b/code/yarn.lock
index c3b25a45ce54..b7dcbf2eaa77 100644
--- a/code/yarn.lock
+++ b/code/yarn.lock
@@ -6340,7 +6340,7 @@ __metadata:
sharp: "npm:^0.33.3"
styled-jsx: "npm:5.1.6"
typescript: "npm:^5.3.2"
- vite-plugin-storybook-nextjs: "npm:^1.0.10"
+ vite-plugin-storybook-nextjs: "npm:^1.0.11"
peerDependencies:
"@storybook/test": "workspace:*"
next: ^14.1.0
@@ -28697,9 +28697,9 @@ __metadata:
languageName: node
linkType: hard
-"vite-plugin-storybook-nextjs@npm:^1.0.10":
- version: 1.0.10
- resolution: "vite-plugin-storybook-nextjs@npm:1.0.10"
+"vite-plugin-storybook-nextjs@npm:^1.0.11":
+ version: 1.0.11
+ resolution: "vite-plugin-storybook-nextjs@npm:1.0.11"
dependencies:
"@next/env": "npm:^14.2.5"
image-size: "npm:^1.1.1"
@@ -28715,7 +28715,7 @@ __metadata:
dependenciesMeta:
sharp:
optional: true
- checksum: 10c0/e0e373ef94e1761b871b2cc846c205a846901d93c7e61f9d9ee3c69740681e42e6403a7d61109c59f2d98d5829476c3e6d4e9d5a329c4bd51e758b763fa8ea9e
+ checksum: 10c0/9652b76c13a682b688d9a4f617b1a66263f25f395a99af8e258bedef4f3b3ce1c856ec1ff66cc0359d6aedc96adee9750fd6b0432514dd575ad7896cd1de70df
languageName: node
linkType: hard
From 714913d6443c524666ef81de37d4e59709712b33 Mon Sep 17 00:00:00 2001
From: Valentin Palkovic
Date: Thu, 5 Sep 2024 15:33:36 +0200
Subject: [PATCH 21/39] Next.js: Fix react-dom/test-utils aliasing
---
code/frameworks/nextjs/src/config/webpack.ts | 15 ++++++++++++++-
code/renderers/react/src/act-compat.ts | 8 ++++++--
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/code/frameworks/nextjs/src/config/webpack.ts b/code/frameworks/nextjs/src/config/webpack.ts
index 3e0d758c1514..57e7caa47bbe 100644
--- a/code/frameworks/nextjs/src/config/webpack.ts
+++ b/code/frameworks/nextjs/src/config/webpack.ts
@@ -20,6 +20,9 @@ export const configureConfig = async ({
nextConfigPath?: string;
}): Promise => {
const nextConfig = await resolveNextConfig({ nextConfigPath });
+ baseConfig.resolve ??= {};
+ baseConfig.resolve.alias ??= {};
+ const aliasConfig = baseConfig.resolve.alias;
addScopedAlias(baseConfig, 'next/config');
if (tryResolve('next/dist/compiled/react')) {
@@ -31,9 +34,19 @@ export const configureConfig = async ({
'react-dom/test-utils',
'next/dist/compiled/react-dom/cjs/react-dom-test-utils.production.js'
);
+ } else {
+ const name = 'react-dom/test-utils';
+ if (Array.isArray(aliasConfig)) {
+ aliasConfig.push({
+ name,
+ alias: name,
+ });
+ } else {
+ aliasConfig[name] = name;
+ }
}
if (tryResolve('next/dist/compiled/react-dom')) {
- addScopedAlias(baseConfig, 'react-dom$', 'next/dist/compiled/react-dom');
+ addScopedAlias(baseConfig, 'react-dom', 'next/dist/compiled/react-dom');
}
setupRuntimeConfig(baseConfig, nextConfig);
diff --git a/code/renderers/react/src/act-compat.ts b/code/renderers/react/src/act-compat.ts
index afe1cc902316..31b4fb72e54f 100644
--- a/code/renderers/react/src/act-compat.ts
+++ b/code/renderers/react/src/act-compat.ts
@@ -8,8 +8,12 @@ declare const globalThis: {
IS_REACT_ACT_ENVIRONMENT: boolean;
};
-// @ts-expect-error act might not be available in some versions of React
-const reactAct = typeof React.act === 'function' ? React.act : DeprecatedReactTestUtils.act;
+const reactAct =
+ // @ts-expect-error act might not be available in some versions of React
+ typeof React.act === 'function'
+ ? // @ts-expect-error act might not be available in some versions of React
+ React.act
+ : DeprecatedReactTestUtils.act ?? (async (cb: () => Promise | void) => cb());
export function setReactActEnvironment(isReactActEnvironment: boolean) {
globalThis.IS_REACT_ACT_ENVIRONMENT = isReactActEnvironment;
From e6fdccdad3b31e954fb2dcdb6fcaa58e3dddcfdb Mon Sep 17 00:00:00 2001
From: Jeppe Reinhold
Date: Fri, 6 Sep 2024 14:27:32 +0200
Subject: [PATCH 22/39] skip source map generation for external globals
---
.../builder-vite/src/plugins/external-globals-plugin.ts | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/code/builders/builder-vite/src/plugins/external-globals-plugin.ts b/code/builders/builder-vite/src/plugins/external-globals-plugin.ts
index 1c7ada46b7be..a71f9f3b0fe8 100644
--- a/code/builders/builder-vite/src/plugins/external-globals-plugin.ts
+++ b/code/builders/builder-vite/src/plugins/external-globals-plugin.ts
@@ -91,10 +91,7 @@ export async function externalGlobalsPlugin(externals: Record) {
return {
code: src.toString(),
- map: src.generateMap({
- source: id,
- hires: true,
- }),
+ map: null,
};
},
} satisfies Plugin;
From 55d2ac1bdedff231b57a9b6895ece475e607bb88 Mon Sep 17 00:00:00 2001
From: Jeppe Reinhold
Date: Fri, 6 Sep 2024 14:28:28 +0200
Subject: [PATCH 23/39] add test case for multi-line imports in external
globals replacements
---
.../src/plugins/external-globals-plugin.test.ts | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/code/builders/builder-vite/src/plugins/external-globals-plugin.test.ts b/code/builders/builder-vite/src/plugins/external-globals-plugin.test.ts
index 9555a4dd6b86..67b62690da43 100644
--- a/code/builders/builder-vite/src/plugins/external-globals-plugin.test.ts
+++ b/code/builders/builder-vite/src/plugins/external-globals-plugin.test.ts
@@ -12,6 +12,22 @@ const cases = [
input: `import { Rain, Jour as Day, Nuit as Night, Sun } from "${packageName}"`,
output: `const { Rain, Jour: Day, Nuit: Night, Sun } = ${globals[packageName]}`,
},
+ {
+ globals,
+ packageName,
+ input: `import {
+ Rain,
+ Jour as Day,
+ Nuit as Night,
+ Sun
+ } from "${packageName}"`,
+ output: `const {
+ Rain,
+ Jour: Day,
+ Nuit: Night,
+ Sun
+ } = ${globals[packageName]}`,
+ },
{
globals,
packageName,
From ea1a533a4b4e0017fb1a93baaf76c51be25fe66b Mon Sep 17 00:00:00 2001
From: Valentin Palkovic
Date: Fri, 6 Sep 2024 11:46:32 +0200
Subject: [PATCH 24/39] Fix Webpack aliasing
---
code/frameworks/nextjs/src/config/webpack.ts | 31 ++++++++++----------
code/frameworks/nextjs/src/utils.ts | 20 ++++++++-----
code/renderers/react/src/act-compat.ts | 5 +---
3 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/code/frameworks/nextjs/src/config/webpack.ts b/code/frameworks/nextjs/src/config/webpack.ts
index 57e7caa47bbe..a0ea2d47bded 100644
--- a/code/frameworks/nextjs/src/config/webpack.ts
+++ b/code/frameworks/nextjs/src/config/webpack.ts
@@ -2,7 +2,7 @@ import type { NextConfig } from 'next';
import type { Configuration as WebpackConfig } from 'webpack';
import { DefinePlugin } from 'webpack';
-import { addScopedAlias, resolveNextConfig } from '../utils';
+import { addScopedAlias, resolveNextConfig, setAlias } from '../utils';
const tryResolve = (path: string) => {
try {
@@ -20,33 +20,32 @@ export const configureConfig = async ({
nextConfigPath?: string;
}): Promise => {
const nextConfig = await resolveNextConfig({ nextConfigPath });
- baseConfig.resolve ??= {};
- baseConfig.resolve.alias ??= {};
- const aliasConfig = baseConfig.resolve.alias;
addScopedAlias(baseConfig, 'next/config');
+
+ // @ts-expect-error We know that alias is an object
+ if (baseConfig.resolve?.alias?.['react-dom']) {
+ // Removing the alias to react-dom to avoid conflicts with the alias we are setting
+ // because the react-dom alias is an exact match and we need to alias separate parts of react-dom
+ // in different places
+ // @ts-expect-error We know that alias is an object
+ delete baseConfig.resolve.alias?.['react-dom'];
+ }
+
if (tryResolve('next/dist/compiled/react')) {
addScopedAlias(baseConfig, 'react', 'next/dist/compiled/react');
}
if (tryResolve('next/dist/compiled/react-dom/cjs/react-dom-test-utils.production.js')) {
- addScopedAlias(
+ setAlias(
baseConfig,
'react-dom/test-utils',
'next/dist/compiled/react-dom/cjs/react-dom-test-utils.production.js'
);
- } else {
- const name = 'react-dom/test-utils';
- if (Array.isArray(aliasConfig)) {
- aliasConfig.push({
- name,
- alias: name,
- });
- } else {
- aliasConfig[name] = name;
- }
}
if (tryResolve('next/dist/compiled/react-dom')) {
- addScopedAlias(baseConfig, 'react-dom', 'next/dist/compiled/react-dom');
+ setAlias(baseConfig, 'react-dom$', 'next/dist/compiled/react-dom');
+ setAlias(baseConfig, 'react-dom/client', 'next/dist/compiled/react-dom/client');
+ setAlias(baseConfig, 'react-dom/server', 'next/dist/compiled/react-dom/server');
}
setupRuntimeConfig(baseConfig, nextConfig);
diff --git a/code/frameworks/nextjs/src/utils.ts b/code/frameworks/nextjs/src/utils.ts
index 9c8abc6c88c8..198917513166 100644
--- a/code/frameworks/nextjs/src/utils.ts
+++ b/code/frameworks/nextjs/src/utils.ts
@@ -27,23 +27,27 @@ export const resolveNextConfig = async ({
return loadConfig(PHASE_DEVELOPMENT_SERVER, dir, undefined);
};
-// This is to help the addon in development
-// Without it, webpack resolves packages in its node_modules instead of the example's node_modules
-export const addScopedAlias = (baseConfig: WebpackConfig, name: string, alias?: string): void => {
+export function setAlias(baseConfig: WebpackConfig, name: string, alias: string) {
baseConfig.resolve ??= {};
baseConfig.resolve.alias ??= {};
const aliasConfig = baseConfig.resolve.alias;
- const scopedAlias = scopedResolve(`${alias ?? name}`);
-
if (Array.isArray(aliasConfig)) {
aliasConfig.push({
name,
- alias: scopedAlias,
+ alias,
});
} else {
- aliasConfig[name] = scopedAlias;
+ aliasConfig[name] = alias;
}
+}
+
+// This is to help the addon in development
+// Without it, webpack resolves packages in its node_modules instead of the example's node_modules
+export const addScopedAlias = (baseConfig: WebpackConfig, name: string, alias?: string): void => {
+ const scopedAlias = scopedResolve(`${alias ?? name}`);
+
+ setAlias(baseConfig, name, scopedAlias);
};
/**
@@ -64,7 +68,7 @@ export const scopedResolve = (id: string): string => {
let scopedModulePath;
try {
- // TODO: Remove in next major release (SB 8.0) and use the statement in the catch block per default instead
+ // TODO: Remove in next major release (SB 9.0) and use the statement in the catch block per default instead
scopedModulePath = require.resolve(id, { paths: [resolve()] });
} catch (e) {
scopedModulePath = require.resolve(id);
diff --git a/code/renderers/react/src/act-compat.ts b/code/renderers/react/src/act-compat.ts
index 31b4fb72e54f..3eab722d3bb1 100644
--- a/code/renderers/react/src/act-compat.ts
+++ b/code/renderers/react/src/act-compat.ts
@@ -10,10 +10,7 @@ declare const globalThis: {
const reactAct =
// @ts-expect-error act might not be available in some versions of React
- typeof React.act === 'function'
- ? // @ts-expect-error act might not be available in some versions of React
- React.act
- : DeprecatedReactTestUtils.act ?? (async (cb: () => Promise | void) => cb());
+ typeof React.act === 'function' ? React.act : DeprecatedReactTestUtils.act;
export function setReactActEnvironment(isReactActEnvironment: boolean) {
globalThis.IS_REACT_ACT_ENVIRONMENT = isReactActEnvironment;
From 0a1d9e8dfb769054740e626e86f79fe4dde45ce5 Mon Sep 17 00:00:00 2001
From: Jeppe Reinhold
Date: Fri, 6 Sep 2024 14:53:42 +0200
Subject: [PATCH 25/39] exclude sb-preview/runtime.js from stats-json
---
.../src/plugins/webpack-stats-plugin.ts | 41 +-
preview-stats-new-ids.json | 2914 +++++++++++++++++
2 files changed, 2936 insertions(+), 19 deletions(-)
create mode 100644 preview-stats-new-ids.json
diff --git a/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts b/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
index 9442291df2aa..658f8ea9c31e 100644
--- a/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
+++ b/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
@@ -42,7 +42,8 @@ function isUserCode(moduleName: string) {
!moduleName.startsWith('\x00') &&
!moduleName.startsWith('\u0000') &&
moduleName !== 'react/jsx-runtime' &&
- !moduleName.match(/node_modules\//)
+ !moduleName.match(/node_modules\//) &&
+ !moduleName.includes('sb-preview/runtime.js')
);
}
@@ -87,25 +88,27 @@ export function pluginWebpackStats({ workingDir }: WebpackStatsPluginOptions): W
// We want this to run after the vite build plugins (https://vitejs.dev/guide/api-plugin.html#plugin-ordering)
enforce: 'post',
moduleParsed: function (mod) {
- if (isUserCode(mod.id)) {
- mod.importedIds
- .concat(mod.dynamicallyImportedIds)
- .filter((name) => isUserCode(name))
- .forEach((depIdUnsafe) => {
- const depId = normalize(depIdUnsafe);
- if (statsMap.has(depId)) {
- const m = statsMap.get(depId);
- if (m) {
- m.reasons = (m.reasons ?? [])
- .concat(createReasons([mod.id]))
- .filter((r) => r.moduleName !== depId);
- statsMap.set(depId, m);
- }
- } else {
- statsMap.set(depId, createStatsMapModule(depId, [mod.id]));
- }
- });
+ if (!isUserCode(mod.id)) {
+ return;
}
+ mod.importedIds
+ .concat(mod.dynamicallyImportedIds)
+ .filter((name) => isUserCode(name))
+ .forEach((depIdUnsafe) => {
+ const depId = normalize(depIdUnsafe);
+ if (!statsMap.has(depId)) {
+ statsMap.set(depId, createStatsMapModule(depId, [mod.id]));
+ return;
+ }
+ const m = statsMap.get(depId);
+ if (!m) {
+ return;
+ }
+ m.reasons = (m.reasons ?? [])
+ .concat(createReasons([mod.id]))
+ .filter((r) => r.moduleName !== depId);
+ statsMap.set(depId, m);
+ });
},
storybookGetStats() {
diff --git a/preview-stats-new-ids.json b/preview-stats-new-ids.json
new file mode 100644
index 000000000000..9bc467c67f5b
--- /dev/null
+++ b/preview-stats-new-ids.json
@@ -0,0 +1,2914 @@
+{
+ "modules": [
+ {
+ "id": "./iframe.html",
+ "name": "./iframe.html",
+ "reasons": [
+ {
+ "moduleName": "./iframe.html"
+ }
+ ]
+ },
+ {
+ "id": "./sb-preview/runtime.js",
+ "name": "./sb-preview/runtime.js",
+ "reasons": [
+ {
+ "moduleName": "./iframe.html"
+ }
+ ]
+ },
+ {
+ "id": "./renderers/react/template/components/Button.jsx",
+ "name": "./renderers/react/template/components/Button.jsx",
+ "reasons": [
+ {
+ "moduleName": "./renderers/react/template/components/index.js"
+ }
+ ]
+ },
+ {
+ "id": "./renderers/react/template/components/Form.jsx",
+ "name": "./renderers/react/template/components/Form.jsx",
+ "reasons": [
+ {
+ "moduleName": "./renderers/react/template/components/index.js"
+ }
+ ]
+ },
+ {
+ "id": "./renderers/react/template/components/Html.jsx",
+ "name": "./renderers/react/template/components/Html.jsx",
+ "reasons": [
+ {
+ "moduleName": "./renderers/react/template/components/index.js"
+ }
+ ]
+ },
+ {
+ "id": "./renderers/react/template/components/Pre.jsx",
+ "name": "./renderers/react/template/components/Pre.jsx",
+ "reasons": [
+ {
+ "moduleName": "./renderers/react/template/components/index.js"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/mocks/index.ts",
+ "name": "./addons/interactions/src/mocks/index.ts",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/Interaction.tsx",
+ "name": "./addons/interactions/src/components/Interaction.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/Subnav.stories.tsx",
+ "name": "./addons/interactions/src/components/Subnav.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/brand/StorybookIcon.tsx",
+ "name": "./core/src/components/brand/StorybookIcon.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/brand/StorybookIcon.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/controls/src/SaveStory.tsx",
+ "name": "./addons/controls/src/SaveStory.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/controls/src/SaveStory.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/brand/StorybookLogo.tsx",
+ "name": "./core/src/components/brand/StorybookLogo.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/brand/StorybookLogo.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/index.ts",
+ "name": "./lib/blocks/src/components/index.ts",
+ "reasons": [
+ {
+ "moduleName": "./.storybook/preview.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Title.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/mdx.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./.storybook/isChromatic.ts",
+ "name": "./.storybook/isChromatic.ts",
+ "reasons": [
+ {
+ "moduleName": "./.storybook/preview.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/InteractionsPanel.tsx",
+ "name": "./addons/interactions/src/components/InteractionsPanel.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/MatcherResult.tsx",
+ "name": "./addons/interactions/src/components/MatcherResult.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/MatcherResult.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/StatusIcon.tsx",
+ "name": "./addons/interactions/src/components/StatusIcon.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/StatusIcon.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/MethodCall.tsx",
+ "name": "./addons/interactions/src/components/MethodCall.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/MethodCall.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/MatcherResult.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/StatusBadge.tsx",
+ "name": "./addons/interactions/src/components/StatusBadge.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/StatusBadge.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/Subnav.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/ActionBar/ActionBar.tsx",
+ "name": "./core/src/components/components/ActionBar/ActionBar.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/ActionBar/ActionBar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/Subnav.tsx",
+ "name": "./addons/interactions/src/components/Subnav.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/Subnav.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/form/index.tsx",
+ "name": "./core/src/components/components/form/index.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Button/Button.deprecated.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Button/Button.tsx",
+ "name": "./core/src/components/components/Button/Button.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Button/Button.deprecated.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/Button/Button.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/Modal/Modal.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/form/index.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/IconButton/IconButton.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/Button/Button.tsx",
+ "name": "./addons/onboarding/src/components/Button/Button.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/Button/Button.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/onboarding/src/features/GuidedTour/Tooltip.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Badge/Badge.tsx",
+ "name": "./core/src/components/components/Badge/Badge.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Badge/Badge.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/Confetti/Confetti.tsx",
+ "name": "./addons/onboarding/src/components/Confetti/Confetti.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/Confetti/Confetti.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/docs/template/stories/docs2/button.stories.ts",
+ "name": "./addons/docs/template/stories/docs2/button.stories.ts",
+ "reasons": [
+ {
+ "moduleName": "./addons/docs/template/stories/docs2/MetaOf.mdx"
+ },
+ {
+ "moduleName": "./addons/docs/template/stories/docs2/MetaOfNamed.mdx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/brand/SideBySide.tsx",
+ "name": "./core/src/components/brand/SideBySide.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/brand/colorpalette.mdx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Button/Button.stories.tsx",
+ "name": "./core/src/components/components/Button/Button.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Button/Docs.mdx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Unstyled.tsx",
+ "name": "./lib/blocks/src/blocks/Unstyled.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Unstyled.mdx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/ErrorFormatter/ErrorFormatter.tsx",
+ "name": "./core/src/components/components/ErrorFormatter/ErrorFormatter.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/ErrorFormatter/ErrorFormatter.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/HighlightElement/HighlightElement.tsx",
+ "name": "./addons/onboarding/src/components/HighlightElement/HighlightElement.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/HighlightElement/HighlightElement.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/features/GuidedTour/GuidedTour.tsx",
+ "name": "./addons/onboarding/src/features/GuidedTour/GuidedTour.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/features/GuidedTour/GuidedTour.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/IconButton/IconButton.tsx",
+ "name": "./core/src/components/components/IconButton/IconButton.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/IconButton/IconButton.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/Modal/Modal.styled.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Loader/Loader.tsx",
+ "name": "./core/src/components/components/Loader/Loader.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Loader/Loader.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/List/List.tsx",
+ "name": "./addons/onboarding/src/components/List/List.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/List/List.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/List/ListItem/ListItem.tsx",
+ "name": "./addons/onboarding/src/components/List/ListItem/ListItem.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/List/List.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/features/SplashScreen/SplashScreen.tsx",
+ "name": "./addons/onboarding/src/features/SplashScreen/SplashScreen.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/features/SplashScreen/SplashScreen.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Modal/Modal.tsx",
+ "name": "./core/src/components/components/Modal/Modal.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Modal/Modal.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/ScrollArea/ScrollArea.tsx",
+ "name": "./core/src/components/components/ScrollArea/ScrollArea.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/ScrollArea/ScrollArea.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/bar/bar.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/docs/template/stories/docs2/ResolvedReact.jsx",
+ "name": "./addons/docs/template/stories/docs2/ResolvedReact.jsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/docs/template/stories/docs2/ResolvedReact.mdx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/form/field/field.tsx",
+ "name": "./core/src/components/components/form/field/field.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/form/form.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/form/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/form/input/input.tsx",
+ "name": "./core/src/components/components/form/input/input.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/form/form.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/form/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Zoom/Zoom.tsx",
+ "name": "./core/src/components/components/Zoom/Zoom.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Zoom/Zoom.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/icon/icon.tsx",
+ "name": "./core/src/components/components/icon/icon.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/icon/icon.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/typography/link/link.tsx",
+ "name": "./core/src/components/components/typography/link/link.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/placeholder/placeholder.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/typography/link/link.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipMessage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/placeholder/placeholder.tsx",
+ "name": "./core/src/components/components/placeholder/placeholder.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/placeholder/placeholder.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/spaced/Spaced.tsx",
+ "name": "./core/src/components/components/spaced/Spaced.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/spaced/Spaced.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tabs/EmptyTabContent.tsx",
+ "name": "./core/src/components/components/tabs/EmptyTabContent.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/EmptyTabContent.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tabs/tabs.tsx",
+ "name": "./core/src/components/components/tabs/tabs.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/Tooltip.tsx",
+ "name": "./core/src/components/components/tooltip/Tooltip.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/Tooltip.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/WithTooltip.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/ListItem.tsx",
+ "name": "./core/src/components/components/tooltip/ListItem.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/ListItem.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/TooltipLinkList.tsx",
+ "name": "./core/src/components/components/tooltip/TooltipLinkList.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.hooks.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/WithTooltip.tsx",
+ "name": "./core/src/components/components/tooltip/WithTooltip.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipNote.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipMessage.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/WithTooltip.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.hooks.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/assets/ellipse.png",
+ "name": "./core/src/components/components/tooltip/assets/ellipse.png",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/TooltipNote.tsx",
+ "name": "./core/src/components/components/tooltip/TooltipNote.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipNote.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/TooltipMessage.tsx",
+ "name": "./core/src/components/components/tooltip/TooltipMessage.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipMessage.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/WithTooltip.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx",
+ "name": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/typography/DocumentWrapper.tsx",
+ "name": "./core/src/components/components/typography/DocumentWrapper.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/typography/DocumentWrapper.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx",
+ "name": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/layout/Layout.tsx",
+ "name": "./core/src/manager/components/layout/Layout.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/layout/LayoutProvider.tsx",
+ "name": "./core/src/manager/components/layout/LayoutProvider.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Menu.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/panel/Panel.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Menu.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/mobile/about/MobileAbout.tsx",
+ "name": "./core/src/manager/components/mobile/about/MobileAbout.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/notifications/NotificationItem.tsx",
+ "name": "./core/src/manager/components/notifications/NotificationItem.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/notifications/NotificationItem.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/notifications/NotificationList.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/notifications/NotificationItem.stories.tsx",
+ "name": "./core/src/manager/components/notifications/NotificationItem.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/notifications/NotificationList.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/notifications/NotificationList.tsx",
+ "name": "./core/src/manager/components/notifications/NotificationList.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/notifications/NotificationList.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/container/Notifications.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx",
+ "name": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/preview/Iframe.tsx",
+ "name": "./core/src/manager/components/preview/Iframe.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/preview/Iframe.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/settings/defaultShortcuts.tsx",
+ "name": "./core/src/manager/settings/defaultShortcuts.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/panel/Panel.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/settings/shortcuts.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/panel/Panel.tsx",
+ "name": "./core/src/manager/components/panel/Panel.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/panel/Panel.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileSearchListSkeleton.tsx",
+ "name": "./core/src/manager/components/sidebar/FileSearchListSkeleton.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchListSkeleton.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchList.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Explorer.tsx",
+ "name": "./core/src/manager/components/sidebar/Explorer.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/IconSymbols.tsx",
+ "name": "./core/src/manager/components/sidebar/IconSymbols.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/IconSymbols.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/utils/status.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Refs.stories.tsx",
+ "name": "./core/src/manager/components/sidebar/Refs.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/mockdata.ts",
+ "name": "./core/src/manager/components/sidebar/mockdata.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileSearchList.tsx",
+ "name": "./core/src/manager/components/sidebar/FileSearchList.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchList.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FilterToggle.tsx",
+ "name": "./core/src/manager/components/sidebar/FilterToggle.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FilterToggle.stories.ts"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SidebarBottom.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileSearchList.stories.tsx",
+ "name": "./core/src/manager/components/sidebar/FileSearchList.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileSearchModal.tsx",
+ "name": "./core/src/manager/components/sidebar/FileSearchModal.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Heading.tsx",
+ "name": "./core/src/manager/components/sidebar/Heading.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Heading.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Search.tsx",
+ "name": "./core/src/manager/components/sidebar/Search.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/SearchResults.tsx",
+ "name": "./core/src/manager/components/sidebar/SearchResults.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/SearchResults.stories.tsx",
+ "name": "./core/src/manager/components/sidebar/SearchResults.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Sidebar.tsx",
+ "name": "./core/src/manager/components/sidebar/Sidebar.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/utils/tree.ts"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/mockdata.large.ts",
+ "name": "./core/src/manager/components/sidebar/mockdata.large.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/container/Menu.tsx",
+ "name": "./core/src/manager/container/Menu.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Menu.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/container/Menu.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Menu.tsx",
+ "name": "./core/src/manager/components/sidebar/Menu.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Menu.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Heading.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/utils/tree.ts",
+ "name": "./core/src/manager/utils/tree.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/useHighlighted.ts"
+ },
+ {
+ "moduleName": "./core/src/manager/utils/status.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/StatusContext.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/useExpanded.ts"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Heading.stories.tsx",
+ "name": "./core/src/manager/components/sidebar/Heading.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Refs.tsx",
+ "name": "./core/src/manager/components/sidebar/Refs.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/SidebarBottom.tsx",
+ "name": "./core/src/manager/components/sidebar/SidebarBottom.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SidebarBottom.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Tree.tsx",
+ "name": "./core/src/manager/components/sidebar/Tree.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/upgrade/UpgradeBlock.tsx",
+ "name": "./core/src/manager/components/upgrade/UpgradeBlock.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/upgrade/UpgradeBlock.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/settings/About.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/HighlightStyles.tsx",
+ "name": "./core/src/manager/components/sidebar/HighlightStyles.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/TreeNode.tsx",
+ "name": "./core/src/manager/components/sidebar/TreeNode.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/settings/shortcuts.tsx",
+ "name": "./core/src/manager/settings/shortcuts.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/settings/shortcuts.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/settings/whats_new.tsx",
+ "name": "./core/src/manager/settings/whats_new.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/settings/whats_new_footer.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/upgrade/UpgradeBlock.stories.tsx",
+ "name": "./core/src/manager/components/upgrade/UpgradeBlock.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/settings/about.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/settings/About.tsx",
+ "name": "./core/src/manager/settings/About.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/settings/about.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/settings/SettingsFooter.tsx",
+ "name": "./core/src/manager/settings/SettingsFooter.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/settings/SettingsFooter.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/settings/shortcuts.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/template/stories/import.js",
+ "name": "./core/template/stories/import.js",
+ "reasons": [
+ {
+ "moduleName": "./core/template/stories/interleavedExports.stories.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Anchor.tsx",
+ "name": "./lib/blocks/src/blocks/Anchor.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Anchor.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/EmptyBlock.tsx",
+ "name": "./lib/blocks/src/components/EmptyBlock.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/EmptyBlock.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Source.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ArgTypesParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/ArgTypesParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ArgTypesWithSubcomponentsParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/ArgTypesWithSubcomponentsParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/ArgTypes.tsx",
+ "name": "./lib/blocks/src/blocks/ArgTypes.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/Button.stories.tsx",
+ "name": "./lib/blocks/src/examples/Button.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Story.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Title.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/CanvasParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/CanvasParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/SourceParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/SourceParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Canvas.tsx",
+ "name": "./lib/blocks/src/blocks/Canvas.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Source.stories.tsx",
+ "name": "./lib/blocks/src/blocks/Source.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/IconGallery.tsx",
+ "name": "./lib/blocks/src/components/IconGallery.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/IconGallery.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Markdown.tsx",
+ "name": "./lib/blocks/src/blocks/Markdown.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Markdown.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Markdown.stories.tsx",
+ "name": "./lib/blocks/src/blocks/Markdown.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/DocsPage.tsx",
+ "name": "./lib/blocks/src/components/DocsPage.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Preview.stories.tsx",
+ "name": "./lib/blocks/src/components/Preview.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Source.stories.tsx",
+ "name": "./lib/blocks/src/components/Source.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ControlsParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/ControlsParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ControlsWithSubcomponentsParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/ControlsWithSubcomponentsParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/EmptyArgTypes.stories.tsx",
+ "name": "./lib/blocks/src/examples/EmptyArgTypes.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Controls.tsx",
+ "name": "./lib/blocks/src/blocks/Controls.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/Button.tsx",
+ "name": "./lib/blocks/src/examples/Button.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonNoAutodocs.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonReadonly.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsComponentSubtitle.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsParameter.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonSomeAutodocs.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsComment.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/Button.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsDocsSubtitle.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsBoth.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsBoth.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsBoth.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsBoth.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsComment.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsComment.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsParameter.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsParameter.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Description.tsx",
+ "name": "./lib/blocks/src/blocks/Description.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Source.tsx",
+ "name": "./lib/blocks/src/components/Source.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Source.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/Markdown-content.md",
+ "name": "./lib/blocks/src/examples/Markdown-content.md",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Markdown.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Title.tsx",
+ "name": "./lib/blocks/src/components/Title.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Title.stories.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/DocsPage.tsx",
+ "name": "./lib/blocks/src/blocks/DocsPage.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Preview.tsx",
+ "name": "./lib/blocks/src/components/Preview.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Story.tsx",
+ "name": "./lib/blocks/src/components/Story.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Story.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Typeset.tsx",
+ "name": "./lib/blocks/src/components/Typeset.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Typeset.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/StoriesParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/StoriesParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Primary.tsx",
+ "name": "./lib/blocks/src/blocks/Primary.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Source.tsx",
+ "name": "./lib/blocks/src/blocks/Source.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/SourceContainer.tsx",
+ "name": "./lib/blocks/src/blocks/SourceContainer.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Stories.tsx",
+ "name": "./lib/blocks/src/blocks/Stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Stories.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Boolean.tsx",
+ "name": "./lib/blocks/src/controls/Boolean.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Boolean.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Color.tsx",
+ "name": "./lib/blocks/src/controls/Color.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Color.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Files.tsx",
+ "name": "./lib/blocks/src/controls/Files.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Files.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Story.stories.tsx",
+ "name": "./lib/blocks/src/components/Story.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/StoryParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/StoryParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Story.tsx",
+ "name": "./lib/blocks/src/blocks/Story.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Date.tsx",
+ "name": "./lib/blocks/src/controls/Date.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Date.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsBoth.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsBoth.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsComponentSubtitle.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsComponentSubtitle.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsDocsSubtitle.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsDocsSubtitle.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Subtitle.tsx",
+ "name": "./lib/blocks/src/blocks/Subtitle.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Number.tsx",
+ "name": "./lib/blocks/src/controls/Number.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Number.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Range.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Title.tsx",
+ "name": "./lib/blocks/src/blocks/Title.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Title.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Object.tsx",
+ "name": "./lib/blocks/src/controls/Object.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Object.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Range.tsx",
+ "name": "./lib/blocks/src/controls/Range.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Range.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/SectionRow.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/SectionRow.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/SectionRow.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/SectionRow.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Text.tsx",
+ "name": "./lib/blocks/src/controls/Text.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Text.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/Options.tsx",
+ "name": "./lib/blocks/src/controls/options/Options.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/options/CheckOptions.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/RadioOptions.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/SelectOptions.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ArgTypesParameters.tsx",
+ "name": "./lib/blocks/src/examples/ArgTypesParameters.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/examples/ArgTypesWithSubcomponentsParameters.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ArgTypesParameters.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ColorPalette.tsx",
+ "name": "./lib/blocks/src/components/ColorPalette.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ColorPalette.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ControlsParameters.tsx",
+ "name": "./lib/blocks/src/examples/ControlsParameters.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/examples/ControlsParameters.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ControlsWithSubcomponentsParameters.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/EmptyExample.tsx",
+ "name": "./lib/blocks/src/examples/EmptyExample.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/examples/CanvasParameters.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/DocsPageParameters.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/SourceParameters.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/StoriesParameters.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/SimpleSizeTest.tsx",
+ "name": "./lib/blocks/src/examples/SimpleSizeTest.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/examples/StoryParameters.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/index.ts",
+ "name": "./lib/blocks/src/components/ArgsTable/index.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/IFrame.tsx",
+ "name": "./lib/blocks/src/components/IFrame.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Story.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/utils.ts",
+ "name": "./addons/interactions/src/utils.ts",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/EmptyState.tsx",
+ "name": "./addons/interactions/src/components/EmptyState.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/shared/animation.ts",
+ "name": "./core/src/components/components/shared/animation.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Loader/Loader.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/features/GuidedTour/Tooltip.tsx",
+ "name": "./addons/onboarding/src/features/GuidedTour/Tooltip.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/features/GuidedTour/GuidedTour.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/List/List.styled.tsx",
+ "name": "./addons/onboarding/src/components/List/List.styled.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/List/List.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/List/ListItem/ListItem.styled.tsx",
+ "name": "./addons/onboarding/src/components/List/ListItem/ListItem.styled.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/List/ListItem/ListItem.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Modal/Modal.styled.tsx",
+ "name": "./core/src/components/components/Modal/Modal.styled.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Modal/Modal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Zoom/ZoomElement.tsx",
+ "name": "./core/src/components/components/Zoom/ZoomElement.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Zoom/Zoom.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Zoom/ZoomIFrame.tsx",
+ "name": "./core/src/components/components/Zoom/ZoomIFrame.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Zoom/Zoom.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx",
+ "name": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/syntaxhighlighter/formatter.ts",
+ "name": "./core/src/components/components/syntaxhighlighter/formatter.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/bar/bar.tsx",
+ "name": "./core/src/components/components/bar/bar.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/bar/button.tsx",
+ "name": "./core/src/components/components/bar/button.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.hooks.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tabs/tabs.helpers.tsx",
+ "name": "./core/src/components/components/tabs/tabs.helpers.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tabs/tabs.hooks.tsx",
+ "name": "./core/src/components/components/tabs/tabs.hooks.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/constants.ts",
+ "name": "./core/src/manager/constants.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/LayoutProvider.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/notifications/NotificationList.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/upgrade/UpgradeBlock.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/hooks/useMedia.tsx",
+ "name": "./core/src/manager/components/hooks/useMedia.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/LayoutProvider.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/mobile/navigation/MobileAddonsDrawer.tsx",
+ "name": "./core/src/manager/components/mobile/navigation/MobileAddonsDrawer.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx",
+ "name": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/container/Notifications.tsx",
+ "name": "./core/src/manager/container/Notifications.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/layout/useDragging.ts",
+ "name": "./core/src/manager/components/layout/useDragging.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileList.tsx",
+ "name": "./core/src/manager/components/sidebar/FileList.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchListSkeleton.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchList.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/useHighlighted.ts",
+ "name": "./core/src/manager/components/sidebar/useHighlighted.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/hooks/useMeasure.tsx",
+ "name": "./core/src/manager/hooks/useMeasure.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FIleSearchList.utils.tsx",
+ "name": "./core/src/manager/components/sidebar/FIleSearchList.utils.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchList.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Brand.tsx",
+ "name": "./core/src/manager/components/sidebar/Brand.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Heading.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/useLastViewed.ts",
+ "name": "./core/src/manager/components/sidebar/useLastViewed.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/keybinding.ts",
+ "name": "./core/src/manager/keybinding.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/useHighlighted.ts"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/useExpanded.ts"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/utils/status.tsx",
+ "name": "./core/src/manager/utils/status.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/StatusButton.tsx",
+ "name": "./core/src/manager/components/sidebar/StatusButton.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/types.ts",
+ "name": "./core/src/manager/components/sidebar/types.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx",
+ "name": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/RefBlocks.tsx",
+ "name": "./core/src/manager/components/sidebar/RefBlocks.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/RefIndicator.tsx",
+ "name": "./core/src/manager/components/sidebar/RefIndicator.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/components/CollapseIcon.tsx",
+ "name": "./core/src/manager/components/sidebar/components/CollapseIcon.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/StatusContext.tsx",
+ "name": "./core/src/manager/components/sidebar/StatusContext.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/useExpanded.ts",
+ "name": "./core/src/manager/components/sidebar/useExpanded.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/useOf.ts",
+ "name": "./lib/blocks/src/blocks/useOf.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Title.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/utils.ts",
+ "name": "./lib/blocks/src/blocks/utils.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/BlockBackgroundStyles.tsx",
+ "name": "./lib/blocks/src/components/BlockBackgroundStyles.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/IconGallery.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Typeset.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ColorPalette.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/mdx.tsx",
+ "name": "./lib/blocks/src/blocks/mdx.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Markdown.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Heading.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subheading.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/DocsContext.ts",
+ "name": "./lib/blocks/src/blocks/DocsContext.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/useOf.ts"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/mdx.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/useArgs.ts",
+ "name": "./lib/blocks/src/blocks/useArgs.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/useGlobals.ts",
+ "name": "./lib/blocks/src/blocks/useGlobals.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Toolbar.tsx",
+ "name": "./lib/blocks/src/components/Toolbar.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ZoomContext.tsx",
+ "name": "./lib/blocks/src/components/ZoomContext.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Story.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/DocsStory.tsx",
+ "name": "./lib/blocks/src/blocks/DocsStory.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Heading.tsx",
+ "name": "./lib/blocks/src/blocks/Heading.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/helpers.ts",
+ "name": "./lib/blocks/src/controls/helpers.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Boolean.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Files.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Color.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Number.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Date.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Object.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Range.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Text.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Checkbox.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Radio.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Select.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/useStory.ts",
+ "name": "./lib/blocks/src/blocks/useStory.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Object.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgControl.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgControl.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgJsDoc.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgJsDoc.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgValue.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgValue.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/Empty.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/Empty.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/Skeleton.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/Skeleton.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/Checkbox.tsx",
+ "name": "./lib/blocks/src/controls/options/Checkbox.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Options.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/Radio.tsx",
+ "name": "./lib/blocks/src/controls/options/Radio.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Options.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/Select.tsx",
+ "name": "./lib/blocks/src/controls/options/Select.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Options.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/types.ts",
+ "name": "./lib/blocks/src/components/ArgsTable/types.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/constants.ts",
+ "name": "./addons/interactions/src/constants.ts",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/EmptyState.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Loader.tsx",
+ "name": "./core/src/manager/components/sidebar/Loader.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/RefBlocks.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/hooks/useDebounce.ts",
+ "name": "./core/src/manager/hooks/useDebounce.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileSearchModal.utils.tsx",
+ "name": "./core/src/manager/components/sidebar/FileSearchModal.utils.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Subheading.tsx",
+ "name": "./lib/blocks/src/blocks/Subheading.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/index.tsx",
+ "name": "./lib/blocks/src/controls/index.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgControl.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/types/dataTypes.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/types/dataTypes.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/types/deltaTypes.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/types/deltaTypes.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/types/inputUsageTypes.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/types/inputUsageTypes.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/utils/objectTypes.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/utils/objectTypes.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/utils/parse.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/utils/parse.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/utils/styles.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/utils/styles.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/helpers.ts",
+ "name": "./lib/blocks/src/controls/options/helpers.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Checkbox.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Radio.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Select.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/types.ts",
+ "name": "./lib/blocks/src/controls/types.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/index.ts",
+ "name": "./lib/blocks/src/controls/options/index.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
From c24f22182edb47bf7da8fa4230b0b37cc054db62 Mon Sep 17 00:00:00 2001
From: Valentin Palkovic
Date: Fri, 6 Sep 2024 15:21:04 +0200
Subject: [PATCH 26/39] Remove console.log
---
code/renderers/react/src/portable-stories.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/renderers/react/src/portable-stories.tsx b/code/renderers/react/src/portable-stories.tsx
index ced0bbd289e3..bc031a04717e 100644
--- a/code/renderers/react/src/portable-stories.tsx
+++ b/code/renderers/react/src/portable-stories.tsx
@@ -98,7 +98,7 @@ export const INTERNAL_DEFAULT_PROJECT_ANNOTATIONS: ProjectAnnotations
Date: Fri, 6 Sep 2024 15:56:46 +0200
Subject: [PATCH 27/39] keep virtual files backwards compatible in stats-json
also cleanup code slightly
---
.../src/codegen-modern-iframe-script.ts | 9 +-
.../src/plugins/code-generator-plugin.ts | 36 +-
.../src/plugins/webpack-stats-plugin.ts | 71 +-
.../builder-vite/src/utils/virtual-module.ts | 3 -
.../builder-vite/src/virtual-file-names.ts | 18 +-
preview-stats-new-ids.json | 2914 +++++++++++++++++
6 files changed, 2989 insertions(+), 62 deletions(-)
delete mode 100644 code/builders/builder-vite/src/utils/virtual-module.ts
create mode 100644 preview-stats-new-ids.json
diff --git a/code/builders/builder-vite/src/codegen-modern-iframe-script.ts b/code/builders/builder-vite/src/codegen-modern-iframe-script.ts
index 86756b002a27..7ad50afec12f 100644
--- a/code/builders/builder-vite/src/codegen-modern-iframe-script.ts
+++ b/code/builders/builder-vite/src/codegen-modern-iframe-script.ts
@@ -2,8 +2,7 @@ import { getFrameworkName, loadPreviewOrConfigFile } from 'storybook/internal/co
import type { Options, PreviewAnnotation } from 'storybook/internal/types';
import { processPreviewAnnotation } from './utils/process-preview-annotation';
-import { getResolvedVirtualModuleId } from './utils/virtual-module';
-import { virtualAddonSetupFile, virtualStoriesFile } from './virtual-file-names';
+import { SB_VIRTUAL_FILES, getResolvedVirtualModuleId } from './virtual-file-names';
export async function generateModernIframeScriptCode(options: Options, projectRoot: string) {
const { presets, configDir } = options;
@@ -46,7 +45,7 @@ export async function generateModernIframeScriptCode(options: Options, projectRo
return `
if (import.meta.hot) {
- import.meta.hot.accept('${getResolvedVirtualModuleId(virtualStoriesFile)}', (newModule) => {
+ import.meta.hot.accept('${getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE)}', (newModule) => {
// importFn has changed so we need to patch the new one in
window.__STORYBOOK_PREVIEW__.onStoriesChanged({ importFn: newModule.importFn });
});
@@ -69,8 +68,8 @@ export async function generateModernIframeScriptCode(options: Options, projectRo
*/
const code = `
import { composeConfigs, PreviewWeb, ClientApi } from 'storybook/internal/preview-api';
- import '${virtualAddonSetupFile}';
- import { importFn } from '${virtualStoriesFile}';
+ import '${SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE}';
+ import { importFn } from '${SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE}';
${getPreviewAnnotationsFunction}
diff --git a/code/builders/builder-vite/src/plugins/code-generator-plugin.ts b/code/builders/builder-vite/src/plugins/code-generator-plugin.ts
index 1909ceda0988..77509b97cf93 100644
--- a/code/builders/builder-vite/src/plugins/code-generator-plugin.ts
+++ b/code/builders/builder-vite/src/plugins/code-generator-plugin.ts
@@ -8,13 +8,7 @@ import { generateImportFnScriptCode } from '../codegen-importfn-script';
import { generateModernIframeScriptCode } from '../codegen-modern-iframe-script';
import { generateAddonSetupCode } from '../codegen-set-addon-channel';
import { transformIframeHtml } from '../transform-iframe-html';
-import { getResolvedVirtualModuleId } from '../utils/virtual-module';
-import {
- virtualAddonSetupFile,
- virtualFileId,
- virtualPreviewFile,
- virtualStoriesFile,
-} from '../virtual-file-names';
+import { SB_VIRTUAL_FILES, getResolvedVirtualModuleId } from '../virtual-file-names';
export function codeGeneratorPlugin(options: Options): Plugin {
const iframePath = require.resolve('@storybook/builder-vite/input/iframe.html');
@@ -30,13 +24,13 @@ export function codeGeneratorPlugin(options: Options): Plugin {
// (this might be a little too aggressive?)
server.watcher.on('change', () => {
const appModule = server.moduleGraph.getModuleById(
- getResolvedVirtualModuleId(virtualFileId)
+ getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE)
);
if (appModule) {
server.moduleGraph.invalidateModule(appModule);
}
const storiesModule = server.moduleGraph.getModuleById(
- getResolvedVirtualModuleId(virtualStoriesFile)
+ getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE)
);
if (storiesModule) {
server.moduleGraph.invalidateModule(storiesModule);
@@ -50,7 +44,7 @@ export function codeGeneratorPlugin(options: Options): Plugin {
// TODO maybe use the stories declaration in main
if (/\.stories\.([tj])sx?$/.test(path) || /\.mdx$/.test(path)) {
// We need to emit a change event to trigger HMR
- server.watcher.emit('change', virtualStoriesFile);
+ server.watcher.emit('change', SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE);
}
});
},
@@ -74,34 +68,34 @@ export function codeGeneratorPlugin(options: Options): Plugin {
iframeId = `${config.root}/iframe.html`;
},
resolveId(source) {
- if (source === virtualFileId) {
- return getResolvedVirtualModuleId(virtualFileId);
+ if (source === SB_VIRTUAL_FILES.VIRTUAL_APP_FILE) {
+ return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE);
}
if (source === iframePath) {
return iframeId;
}
- if (source === virtualStoriesFile) {
- return getResolvedVirtualModuleId(virtualStoriesFile);
+ if (source === SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE) {
+ return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE);
}
- if (source === virtualPreviewFile) {
- return getResolvedVirtualModuleId(virtualPreviewFile);
+ if (source === SB_VIRTUAL_FILES.VIRTUAL_PREVIEW_FILE) {
+ return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_PREVIEW_FILE);
}
- if (source === virtualAddonSetupFile) {
- return getResolvedVirtualModuleId(virtualAddonSetupFile);
+ if (source === SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE) {
+ return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE);
}
return undefined;
},
async load(id, config) {
- if (id === getResolvedVirtualModuleId(virtualStoriesFile)) {
+ if (id === getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE)) {
return generateImportFnScriptCode(options);
}
- if (id === getResolvedVirtualModuleId(virtualAddonSetupFile)) {
+ if (id === getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE)) {
return generateAddonSetupCode();
}
- if (id === getResolvedVirtualModuleId(virtualFileId)) {
+ if (id === getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE)) {
return generateModernIframeScriptCode(options, projectRoot);
}
diff --git a/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts b/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
index 9442291df2aa..cacea74ccaf2 100644
--- a/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
+++ b/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
@@ -6,7 +6,11 @@ import type { BuilderStats } from 'storybook/internal/types';
import slash from 'slash';
import type { Plugin } from 'vite';
-import { getResolvedVirtualModuleId } from '../utils/virtual-module';
+import {
+ SB_VIRTUAL_FILES,
+ getOriginalVirtualModuleId,
+ getResolvedVirtualModuleId,
+} from '../virtual-file-names';
/*
* Reason, Module are copied from chromatic types
@@ -37,12 +41,13 @@ function stripQueryParams(filePath: string): string {
/** We only care about user code, not node_modules, vite files, or (most) virtual files. */
function isUserCode(moduleName: string) {
return Boolean(
- moduleName &&
- !moduleName.startsWith('vite/') &&
- !moduleName.startsWith('\x00') &&
- !moduleName.startsWith('\u0000') &&
- moduleName !== 'react/jsx-runtime' &&
- !moduleName.match(/node_modules\//)
+ (moduleName &&
+ // keep Storybook's virtual files because they import the story files, so they are essential to the module graph
+ Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(moduleName))) ||
+ (!moduleName.startsWith('vite/') &&
+ !moduleName.startsWith('\0') &&
+ moduleName !== 'react/jsx-runtime' &&
+ !moduleName.match(/node_modules\//))
);
}
@@ -52,12 +57,17 @@ export function pluginWebpackStats({ workingDir }: WebpackStatsPluginOptions): W
/** Convert an absolute path name to a path relative to the vite root, with a starting `./` */
function normalize(filename: string) {
// Do not try to resolve virtual files
- if (
- filename.startsWith('/virtual:') ||
- filename.startsWith(getResolvedVirtualModuleId('/virtual:'))
- ) {
+ if (filename.startsWith('/virtual:')) {
return filename;
}
+ // ! Maintain backwards compatibility with the old virtual file names
+ // ! to ensure that the stats file doesn't change between the versions
+ // ! Turbosnap is also only compatible with the old virtual file names
+ // ! the old virtual file names did not start with the obligatory \0 character
+ if (Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(filename))) {
+ return getOriginalVirtualModuleId(filename);
+ }
+
// Otherwise, we need them in the format `./path/to/file.js`.
else {
const relativePath = relative(workingDir, stripQueryParams(filename));
@@ -87,25 +97,28 @@ export function pluginWebpackStats({ workingDir }: WebpackStatsPluginOptions): W
// We want this to run after the vite build plugins (https://vitejs.dev/guide/api-plugin.html#plugin-ordering)
enforce: 'post',
moduleParsed: function (mod) {
- if (isUserCode(mod.id)) {
- mod.importedIds
- .concat(mod.dynamicallyImportedIds)
- .filter((name) => isUserCode(name))
- .forEach((depIdUnsafe) => {
- const depId = normalize(depIdUnsafe);
- if (statsMap.has(depId)) {
- const m = statsMap.get(depId);
- if (m) {
- m.reasons = (m.reasons ?? [])
- .concat(createReasons([mod.id]))
- .filter((r) => r.moduleName !== depId);
- statsMap.set(depId, m);
- }
- } else {
- statsMap.set(depId, createStatsMapModule(depId, [mod.id]));
- }
- });
+ if (!isUserCode(mod.id)) {
+ return;
}
+ mod.importedIds
+ .concat(mod.dynamicallyImportedIds)
+ .filter((name) => isUserCode(name))
+ .forEach((depIdUnsafe) => {
+ const depId = normalize(depIdUnsafe);
+ console.log('LOG: normalization', { depIdUnsafe, depId });
+ if (!statsMap.has(depId)) {
+ statsMap.set(depId, createStatsMapModule(depId, [mod.id]));
+ return;
+ }
+ const m = statsMap.get(depId);
+ if (!m) {
+ return;
+ }
+ m.reasons = (m.reasons ?? [])
+ .concat(createReasons([mod.id]))
+ .filter((r) => r.moduleName !== depId);
+ statsMap.set(depId, m);
+ });
},
storybookGetStats() {
diff --git a/code/builders/builder-vite/src/utils/virtual-module.ts b/code/builders/builder-vite/src/utils/virtual-module.ts
deleted file mode 100644
index 6f72ce19d650..000000000000
--- a/code/builders/builder-vite/src/utils/virtual-module.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export function getResolvedVirtualModuleId(virtualModuleId: string) {
- return `\0${virtualModuleId}`;
-}
diff --git a/code/builders/builder-vite/src/virtual-file-names.ts b/code/builders/builder-vite/src/virtual-file-names.ts
index 0da0c5517dec..c38cb7322db6 100644
--- a/code/builders/builder-vite/src/virtual-file-names.ts
+++ b/code/builders/builder-vite/src/virtual-file-names.ts
@@ -1,4 +1,14 @@
-export const virtualFileId = '/virtual:/@storybook/builder-vite/vite-app.js';
-export const virtualStoriesFile = '/virtual:/@storybook/builder-vite/storybook-stories.js';
-export const virtualPreviewFile = '/virtual:/@storybook/builder-vite/preview-entry.js';
-export const virtualAddonSetupFile = '/virtual:/@storybook/builder-vite/setup-addons.js';
+export const SB_VIRTUAL_FILES = {
+ VIRTUAL_APP_FILE: '/virtual:/@storybook/builder-vite/vite-app.js',
+ VIRTUAL_STORIES_FILE: '/virtual:/@storybook/builder-vite/storybook-stories.js',
+ VIRTUAL_PREVIEW_FILE: '/virtual:/@storybook/builder-vite/preview-entry.js',
+ VIRTUAL_ADDON_SETUP_FILE: '/virtual:/@storybook/builder-vite/setup-addons.js',
+};
+
+export function getResolvedVirtualModuleId(virtualModuleId: string) {
+ return `\0${virtualModuleId}`;
+}
+
+export function getOriginalVirtualModuleId(resolvedVirtualModuleId: string) {
+ return resolvedVirtualModuleId.slice(1);
+}
diff --git a/preview-stats-new-ids.json b/preview-stats-new-ids.json
new file mode 100644
index 000000000000..9bc467c67f5b
--- /dev/null
+++ b/preview-stats-new-ids.json
@@ -0,0 +1,2914 @@
+{
+ "modules": [
+ {
+ "id": "./iframe.html",
+ "name": "./iframe.html",
+ "reasons": [
+ {
+ "moduleName": "./iframe.html"
+ }
+ ]
+ },
+ {
+ "id": "./sb-preview/runtime.js",
+ "name": "./sb-preview/runtime.js",
+ "reasons": [
+ {
+ "moduleName": "./iframe.html"
+ }
+ ]
+ },
+ {
+ "id": "./renderers/react/template/components/Button.jsx",
+ "name": "./renderers/react/template/components/Button.jsx",
+ "reasons": [
+ {
+ "moduleName": "./renderers/react/template/components/index.js"
+ }
+ ]
+ },
+ {
+ "id": "./renderers/react/template/components/Form.jsx",
+ "name": "./renderers/react/template/components/Form.jsx",
+ "reasons": [
+ {
+ "moduleName": "./renderers/react/template/components/index.js"
+ }
+ ]
+ },
+ {
+ "id": "./renderers/react/template/components/Html.jsx",
+ "name": "./renderers/react/template/components/Html.jsx",
+ "reasons": [
+ {
+ "moduleName": "./renderers/react/template/components/index.js"
+ }
+ ]
+ },
+ {
+ "id": "./renderers/react/template/components/Pre.jsx",
+ "name": "./renderers/react/template/components/Pre.jsx",
+ "reasons": [
+ {
+ "moduleName": "./renderers/react/template/components/index.js"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/mocks/index.ts",
+ "name": "./addons/interactions/src/mocks/index.ts",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/Interaction.tsx",
+ "name": "./addons/interactions/src/components/Interaction.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/Subnav.stories.tsx",
+ "name": "./addons/interactions/src/components/Subnav.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/brand/StorybookIcon.tsx",
+ "name": "./core/src/components/brand/StorybookIcon.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/brand/StorybookIcon.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/controls/src/SaveStory.tsx",
+ "name": "./addons/controls/src/SaveStory.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/controls/src/SaveStory.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/brand/StorybookLogo.tsx",
+ "name": "./core/src/components/brand/StorybookLogo.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/brand/StorybookLogo.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/index.ts",
+ "name": "./lib/blocks/src/components/index.ts",
+ "reasons": [
+ {
+ "moduleName": "./.storybook/preview.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Title.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/mdx.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./.storybook/isChromatic.ts",
+ "name": "./.storybook/isChromatic.ts",
+ "reasons": [
+ {
+ "moduleName": "./.storybook/preview.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/InteractionsPanel.tsx",
+ "name": "./addons/interactions/src/components/InteractionsPanel.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/MatcherResult.tsx",
+ "name": "./addons/interactions/src/components/MatcherResult.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/MatcherResult.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/StatusIcon.tsx",
+ "name": "./addons/interactions/src/components/StatusIcon.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/StatusIcon.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/MethodCall.tsx",
+ "name": "./addons/interactions/src/components/MethodCall.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/MethodCall.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/MatcherResult.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/StatusBadge.tsx",
+ "name": "./addons/interactions/src/components/StatusBadge.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/StatusBadge.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/Subnav.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/ActionBar/ActionBar.tsx",
+ "name": "./core/src/components/components/ActionBar/ActionBar.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/ActionBar/ActionBar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/Subnav.tsx",
+ "name": "./addons/interactions/src/components/Subnav.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/Subnav.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/form/index.tsx",
+ "name": "./core/src/components/components/form/index.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Button/Button.deprecated.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Button/Button.tsx",
+ "name": "./core/src/components/components/Button/Button.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Button/Button.deprecated.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/Button/Button.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/Modal/Modal.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/form/index.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/IconButton/IconButton.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/Button/Button.tsx",
+ "name": "./addons/onboarding/src/components/Button/Button.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/Button/Button.stories.tsx"
+ },
+ {
+ "moduleName": "./addons/onboarding/src/features/GuidedTour/Tooltip.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Badge/Badge.tsx",
+ "name": "./core/src/components/components/Badge/Badge.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Badge/Badge.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/Confetti/Confetti.tsx",
+ "name": "./addons/onboarding/src/components/Confetti/Confetti.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/Confetti/Confetti.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/docs/template/stories/docs2/button.stories.ts",
+ "name": "./addons/docs/template/stories/docs2/button.stories.ts",
+ "reasons": [
+ {
+ "moduleName": "./addons/docs/template/stories/docs2/MetaOf.mdx"
+ },
+ {
+ "moduleName": "./addons/docs/template/stories/docs2/MetaOfNamed.mdx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/brand/SideBySide.tsx",
+ "name": "./core/src/components/brand/SideBySide.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/brand/colorpalette.mdx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Button/Button.stories.tsx",
+ "name": "./core/src/components/components/Button/Button.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Button/Docs.mdx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Unstyled.tsx",
+ "name": "./lib/blocks/src/blocks/Unstyled.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Unstyled.mdx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/ErrorFormatter/ErrorFormatter.tsx",
+ "name": "./core/src/components/components/ErrorFormatter/ErrorFormatter.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/ErrorFormatter/ErrorFormatter.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/HighlightElement/HighlightElement.tsx",
+ "name": "./addons/onboarding/src/components/HighlightElement/HighlightElement.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/HighlightElement/HighlightElement.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/features/GuidedTour/GuidedTour.tsx",
+ "name": "./addons/onboarding/src/features/GuidedTour/GuidedTour.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/features/GuidedTour/GuidedTour.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/IconButton/IconButton.tsx",
+ "name": "./core/src/components/components/IconButton/IconButton.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/IconButton/IconButton.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/Modal/Modal.styled.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Loader/Loader.tsx",
+ "name": "./core/src/components/components/Loader/Loader.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Loader/Loader.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/List/List.tsx",
+ "name": "./addons/onboarding/src/components/List/List.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/List/List.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/List/ListItem/ListItem.tsx",
+ "name": "./addons/onboarding/src/components/List/ListItem/ListItem.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/List/List.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/features/SplashScreen/SplashScreen.tsx",
+ "name": "./addons/onboarding/src/features/SplashScreen/SplashScreen.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/features/SplashScreen/SplashScreen.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Modal/Modal.tsx",
+ "name": "./core/src/components/components/Modal/Modal.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Modal/Modal.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/ScrollArea/ScrollArea.tsx",
+ "name": "./core/src/components/components/ScrollArea/ScrollArea.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/ScrollArea/ScrollArea.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/bar/bar.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/docs/template/stories/docs2/ResolvedReact.jsx",
+ "name": "./addons/docs/template/stories/docs2/ResolvedReact.jsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/docs/template/stories/docs2/ResolvedReact.mdx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/form/field/field.tsx",
+ "name": "./core/src/components/components/form/field/field.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/form/form.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/form/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/form/input/input.tsx",
+ "name": "./core/src/components/components/form/input/input.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/form/form.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/form/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Zoom/Zoom.tsx",
+ "name": "./core/src/components/components/Zoom/Zoom.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Zoom/Zoom.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/icon/icon.tsx",
+ "name": "./core/src/components/components/icon/icon.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/icon/icon.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/typography/link/link.tsx",
+ "name": "./core/src/components/components/typography/link/link.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/placeholder/placeholder.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/typography/link/link.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipMessage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/placeholder/placeholder.tsx",
+ "name": "./core/src/components/components/placeholder/placeholder.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/placeholder/placeholder.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/spaced/Spaced.tsx",
+ "name": "./core/src/components/components/spaced/Spaced.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/spaced/Spaced.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tabs/EmptyTabContent.tsx",
+ "name": "./core/src/components/components/tabs/EmptyTabContent.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/EmptyTabContent.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tabs/tabs.tsx",
+ "name": "./core/src/components/components/tabs/tabs.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/Tooltip.tsx",
+ "name": "./core/src/components/components/tooltip/Tooltip.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/Tooltip.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/WithTooltip.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/ListItem.tsx",
+ "name": "./core/src/components/components/tooltip/ListItem.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/ListItem.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/TooltipLinkList.tsx",
+ "name": "./core/src/components/components/tooltip/TooltipLinkList.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.hooks.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/WithTooltip.tsx",
+ "name": "./core/src/components/components/tooltip/WithTooltip.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipNote.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipMessage.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/WithTooltip.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.hooks.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/assets/ellipse.png",
+ "name": "./core/src/components/components/tooltip/assets/ellipse.png",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/TooltipNote.tsx",
+ "name": "./core/src/components/components/tooltip/TooltipNote.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipNote.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tooltip/TooltipMessage.tsx",
+ "name": "./core/src/components/components/tooltip/TooltipMessage.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tooltip/TooltipMessage.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tooltip/WithTooltip.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx",
+ "name": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/typography/DocumentWrapper.tsx",
+ "name": "./core/src/components/components/typography/DocumentWrapper.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/typography/DocumentWrapper.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx",
+ "name": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/layout/Layout.tsx",
+ "name": "./core/src/manager/components/layout/Layout.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/layout/LayoutProvider.tsx",
+ "name": "./core/src/manager/components/layout/LayoutProvider.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Menu.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/panel/Panel.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Menu.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/mobile/about/MobileAbout.tsx",
+ "name": "./core/src/manager/components/mobile/about/MobileAbout.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/notifications/NotificationItem.tsx",
+ "name": "./core/src/manager/components/notifications/NotificationItem.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/notifications/NotificationItem.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/notifications/NotificationList.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/notifications/NotificationItem.stories.tsx",
+ "name": "./core/src/manager/components/notifications/NotificationItem.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/notifications/NotificationList.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/notifications/NotificationList.tsx",
+ "name": "./core/src/manager/components/notifications/NotificationList.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/notifications/NotificationList.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/container/Notifications.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx",
+ "name": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/preview/Iframe.tsx",
+ "name": "./core/src/manager/components/preview/Iframe.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/preview/Iframe.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/settings/defaultShortcuts.tsx",
+ "name": "./core/src/manager/settings/defaultShortcuts.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/panel/Panel.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/settings/shortcuts.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/panel/Panel.tsx",
+ "name": "./core/src/manager/components/panel/Panel.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/panel/Panel.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileSearchListSkeleton.tsx",
+ "name": "./core/src/manager/components/sidebar/FileSearchListSkeleton.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchListSkeleton.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchList.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Explorer.tsx",
+ "name": "./core/src/manager/components/sidebar/Explorer.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/IconSymbols.tsx",
+ "name": "./core/src/manager/components/sidebar/IconSymbols.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/IconSymbols.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/utils/status.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Refs.stories.tsx",
+ "name": "./core/src/manager/components/sidebar/Refs.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/mockdata.ts",
+ "name": "./core/src/manager/components/sidebar/mockdata.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileSearchList.tsx",
+ "name": "./core/src/manager/components/sidebar/FileSearchList.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchList.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FilterToggle.tsx",
+ "name": "./core/src/manager/components/sidebar/FilterToggle.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FilterToggle.stories.ts"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SidebarBottom.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileSearchList.stories.tsx",
+ "name": "./core/src/manager/components/sidebar/FileSearchList.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileSearchModal.tsx",
+ "name": "./core/src/manager/components/sidebar/FileSearchModal.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Heading.tsx",
+ "name": "./core/src/manager/components/sidebar/Heading.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Heading.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Search.tsx",
+ "name": "./core/src/manager/components/sidebar/Search.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/SearchResults.tsx",
+ "name": "./core/src/manager/components/sidebar/SearchResults.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/SearchResults.stories.tsx",
+ "name": "./core/src/manager/components/sidebar/SearchResults.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Sidebar.tsx",
+ "name": "./core/src/manager/components/sidebar/Sidebar.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/utils/tree.ts"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/mockdata.large.ts",
+ "name": "./core/src/manager/components/sidebar/mockdata.large.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/container/Menu.tsx",
+ "name": "./core/src/manager/container/Menu.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Menu.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/container/Menu.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Menu.tsx",
+ "name": "./core/src/manager/components/sidebar/Menu.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Menu.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Heading.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/utils/tree.ts",
+ "name": "./core/src/manager/utils/tree.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/useHighlighted.ts"
+ },
+ {
+ "moduleName": "./core/src/manager/utils/status.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/StatusContext.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/useExpanded.ts"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Heading.stories.tsx",
+ "name": "./core/src/manager/components/sidebar/Heading.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Refs.tsx",
+ "name": "./core/src/manager/components/sidebar/Refs.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/SidebarBottom.tsx",
+ "name": "./core/src/manager/components/sidebar/SidebarBottom.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SidebarBottom.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Tree.tsx",
+ "name": "./core/src/manager/components/sidebar/Tree.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/upgrade/UpgradeBlock.tsx",
+ "name": "./core/src/manager/components/upgrade/UpgradeBlock.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/upgrade/UpgradeBlock.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/settings/About.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/HighlightStyles.tsx",
+ "name": "./core/src/manager/components/sidebar/HighlightStyles.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/TreeNode.tsx",
+ "name": "./core/src/manager/components/sidebar/TreeNode.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/settings/shortcuts.tsx",
+ "name": "./core/src/manager/settings/shortcuts.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/settings/shortcuts.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/settings/whats_new.tsx",
+ "name": "./core/src/manager/settings/whats_new.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/settings/whats_new_footer.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/upgrade/UpgradeBlock.stories.tsx",
+ "name": "./core/src/manager/components/upgrade/UpgradeBlock.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/settings/about.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/settings/About.tsx",
+ "name": "./core/src/manager/settings/About.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/settings/about.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/settings/SettingsFooter.tsx",
+ "name": "./core/src/manager/settings/SettingsFooter.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/settings/SettingsFooter.stories.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/settings/shortcuts.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/template/stories/import.js",
+ "name": "./core/template/stories/import.js",
+ "reasons": [
+ {
+ "moduleName": "./core/template/stories/interleavedExports.stories.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Anchor.tsx",
+ "name": "./lib/blocks/src/blocks/Anchor.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Anchor.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/EmptyBlock.tsx",
+ "name": "./lib/blocks/src/components/EmptyBlock.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/EmptyBlock.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Source.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ArgTypesParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/ArgTypesParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ArgTypesWithSubcomponentsParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/ArgTypesWithSubcomponentsParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/ArgTypes.tsx",
+ "name": "./lib/blocks/src/blocks/ArgTypes.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/Button.stories.tsx",
+ "name": "./lib/blocks/src/examples/Button.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Story.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Title.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/CanvasParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/CanvasParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/SourceParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/SourceParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Canvas.tsx",
+ "name": "./lib/blocks/src/blocks/Canvas.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Source.stories.tsx",
+ "name": "./lib/blocks/src/blocks/Source.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/IconGallery.tsx",
+ "name": "./lib/blocks/src/components/IconGallery.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/IconGallery.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Markdown.tsx",
+ "name": "./lib/blocks/src/blocks/Markdown.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Markdown.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Markdown.stories.tsx",
+ "name": "./lib/blocks/src/blocks/Markdown.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/DocsPage.tsx",
+ "name": "./lib/blocks/src/components/DocsPage.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Preview.stories.tsx",
+ "name": "./lib/blocks/src/components/Preview.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Source.stories.tsx",
+ "name": "./lib/blocks/src/components/Source.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ControlsParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/ControlsParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ControlsWithSubcomponentsParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/ControlsWithSubcomponentsParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/EmptyArgTypes.stories.tsx",
+ "name": "./lib/blocks/src/examples/EmptyArgTypes.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Controls.tsx",
+ "name": "./lib/blocks/src/blocks/Controls.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/Button.tsx",
+ "name": "./lib/blocks/src/examples/Button.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonNoAutodocs.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonReadonly.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsComponentSubtitle.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsParameter.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonSomeAutodocs.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsComment.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/Button.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsDocsSubtitle.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsBoth.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsBoth.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsBoth.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsBoth.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsComment.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsComment.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsParameter.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsParameter.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Description.tsx",
+ "name": "./lib/blocks/src/blocks/Description.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Source.tsx",
+ "name": "./lib/blocks/src/components/Source.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Source.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/Markdown-content.md",
+ "name": "./lib/blocks/src/examples/Markdown-content.md",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Markdown.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Title.tsx",
+ "name": "./lib/blocks/src/components/Title.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Title.stories.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/DocsPage.tsx",
+ "name": "./lib/blocks/src/blocks/DocsPage.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Preview.tsx",
+ "name": "./lib/blocks/src/components/Preview.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Story.tsx",
+ "name": "./lib/blocks/src/components/Story.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Story.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Typeset.tsx",
+ "name": "./lib/blocks/src/components/Typeset.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Typeset.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/StoriesParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/StoriesParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Primary.tsx",
+ "name": "./lib/blocks/src/blocks/Primary.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Source.tsx",
+ "name": "./lib/blocks/src/blocks/Source.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/SourceContainer.tsx",
+ "name": "./lib/blocks/src/blocks/SourceContainer.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Stories.tsx",
+ "name": "./lib/blocks/src/blocks/Stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Stories.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Boolean.tsx",
+ "name": "./lib/blocks/src/controls/Boolean.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Boolean.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Color.tsx",
+ "name": "./lib/blocks/src/controls/Color.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Color.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Files.tsx",
+ "name": "./lib/blocks/src/controls/Files.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Files.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Story.stories.tsx",
+ "name": "./lib/blocks/src/components/Story.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/StoryParameters.stories.tsx",
+ "name": "./lib/blocks/src/examples/StoryParameters.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Story.tsx",
+ "name": "./lib/blocks/src/blocks/Story.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Date.tsx",
+ "name": "./lib/blocks/src/controls/Date.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Date.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsBoth.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsBoth.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsComponentSubtitle.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsComponentSubtitle.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsDocsSubtitle.stories.tsx",
+ "name": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsDocsSubtitle.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Subtitle.tsx",
+ "name": "./lib/blocks/src/blocks/Subtitle.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Number.tsx",
+ "name": "./lib/blocks/src/controls/Number.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Number.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Range.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Title.tsx",
+ "name": "./lib/blocks/src/blocks/Title.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Title.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Object.tsx",
+ "name": "./lib/blocks/src/controls/Object.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Object.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Range.tsx",
+ "name": "./lib/blocks/src/controls/Range.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Range.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/SectionRow.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/SectionRow.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/SectionRow.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/SectionRow.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/Text.tsx",
+ "name": "./lib/blocks/src/controls/Text.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Text.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/Options.tsx",
+ "name": "./lib/blocks/src/controls/options/Options.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/options/CheckOptions.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/RadioOptions.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/SelectOptions.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ArgTypesParameters.tsx",
+ "name": "./lib/blocks/src/examples/ArgTypesParameters.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/examples/ArgTypesWithSubcomponentsParameters.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ArgTypesParameters.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ColorPalette.tsx",
+ "name": "./lib/blocks/src/components/ColorPalette.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ColorPalette.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/ControlsParameters.tsx",
+ "name": "./lib/blocks/src/examples/ControlsParameters.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/examples/ControlsParameters.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/ControlsWithSubcomponentsParameters.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/EmptyExample.tsx",
+ "name": "./lib/blocks/src/examples/EmptyExample.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/examples/CanvasParameters.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/DocsPageParameters.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/SourceParameters.stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/examples/StoriesParameters.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/examples/SimpleSizeTest.tsx",
+ "name": "./lib/blocks/src/examples/SimpleSizeTest.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/examples/StoryParameters.stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/index.ts",
+ "name": "./lib/blocks/src/components/ArgsTable/index.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/IFrame.tsx",
+ "name": "./lib/blocks/src/components/IFrame.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/index.ts"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Story.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/utils.ts",
+ "name": "./addons/interactions/src/utils.ts",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/Interaction.tsx"
+ },
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/components/EmptyState.tsx",
+ "name": "./addons/interactions/src/components/EmptyState.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/shared/animation.ts",
+ "name": "./core/src/components/components/shared/animation.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Loader/Loader.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/features/GuidedTour/Tooltip.tsx",
+ "name": "./addons/onboarding/src/features/GuidedTour/Tooltip.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/features/GuidedTour/GuidedTour.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/List/List.styled.tsx",
+ "name": "./addons/onboarding/src/components/List/List.styled.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/List/List.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./addons/onboarding/src/components/List/ListItem/ListItem.styled.tsx",
+ "name": "./addons/onboarding/src/components/List/ListItem/ListItem.styled.tsx",
+ "reasons": [
+ {
+ "moduleName": "./addons/onboarding/src/components/List/ListItem/ListItem.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Modal/Modal.styled.tsx",
+ "name": "./core/src/components/components/Modal/Modal.styled.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Modal/Modal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Zoom/ZoomElement.tsx",
+ "name": "./core/src/components/components/Zoom/ZoomElement.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Zoom/Zoom.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/Zoom/ZoomIFrame.tsx",
+ "name": "./core/src/components/components/Zoom/ZoomIFrame.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/Zoom/Zoom.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx",
+ "name": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/syntaxhighlighter/formatter.ts",
+ "name": "./core/src/components/components/syntaxhighlighter/formatter.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/bar/bar.tsx",
+ "name": "./core/src/components/components/bar/bar.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/bar/button.tsx",
+ "name": "./core/src/components/components/bar/button.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.tsx"
+ },
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.hooks.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tabs/tabs.helpers.tsx",
+ "name": "./core/src/components/components/tabs/tabs.helpers.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/components/components/tabs/tabs.hooks.tsx",
+ "name": "./core/src/components/components/tabs/tabs.hooks.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/components/components/tabs/tabs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/constants.ts",
+ "name": "./core/src/manager/constants.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/LayoutProvider.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/notifications/NotificationList.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/upgrade/UpgradeBlock.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/hooks/useMedia.tsx",
+ "name": "./core/src/manager/components/hooks/useMedia.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/LayoutProvider.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/mobile/navigation/MobileAddonsDrawer.tsx",
+ "name": "./core/src/manager/components/mobile/navigation/MobileAddonsDrawer.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx",
+ "name": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/container/Notifications.tsx",
+ "name": "./core/src/manager/container/Notifications.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/layout/useDragging.ts",
+ "name": "./core/src/manager/components/layout/useDragging.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/layout/Layout.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileList.tsx",
+ "name": "./core/src/manager/components/sidebar/FileList.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchListSkeleton.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchList.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/useHighlighted.ts",
+ "name": "./core/src/manager/components/sidebar/useHighlighted.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Explorer.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/hooks/useMeasure.tsx",
+ "name": "./core/src/manager/hooks/useMeasure.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FIleSearchList.utils.tsx",
+ "name": "./core/src/manager/components/sidebar/FIleSearchList.utils.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/FileSearchList.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Brand.tsx",
+ "name": "./core/src/manager/components/sidebar/Brand.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Heading.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/useLastViewed.ts",
+ "name": "./core/src/manager/components/sidebar/useLastViewed.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/keybinding.ts",
+ "name": "./core/src/manager/keybinding.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/useHighlighted.ts"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/useExpanded.ts"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/utils/status.tsx",
+ "name": "./core/src/manager/utils/status.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/StatusButton.tsx",
+ "name": "./core/src/manager/components/sidebar/StatusButton.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/types.ts",
+ "name": "./core/src/manager/components/sidebar/types.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx",
+ "name": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/RefBlocks.tsx",
+ "name": "./core/src/manager/components/sidebar/RefBlocks.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/RefIndicator.tsx",
+ "name": "./core/src/manager/components/sidebar/RefIndicator.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/components/CollapseIcon.tsx",
+ "name": "./core/src/manager/components/sidebar/components/CollapseIcon.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/TreeNode.tsx"
+ },
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/StatusContext.tsx",
+ "name": "./core/src/manager/components/sidebar/StatusContext.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/useExpanded.ts",
+ "name": "./core/src/manager/components/sidebar/useExpanded.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/useOf.ts",
+ "name": "./lib/blocks/src/blocks/useOf.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Description.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subtitle.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Title.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/utils.ts",
+ "name": "./lib/blocks/src/blocks/utils.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/ArgTypes.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/BlockBackgroundStyles.tsx",
+ "name": "./lib/blocks/src/components/BlockBackgroundStyles.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/IconGallery.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Typeset.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/ColorPalette.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/mdx.tsx",
+ "name": "./lib/blocks/src/blocks/mdx.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Markdown.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Heading.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Subheading.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/DocsContext.ts",
+ "name": "./lib/blocks/src/blocks/DocsContext.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Source.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/useOf.ts"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/mdx.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/useArgs.ts",
+ "name": "./lib/blocks/src/blocks/useArgs.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/useGlobals.ts",
+ "name": "./lib/blocks/src/blocks/useGlobals.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/Toolbar.tsx",
+ "name": "./lib/blocks/src/components/Toolbar.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ZoomContext.tsx",
+ "name": "./lib/blocks/src/components/ZoomContext.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/Preview.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/components/Story.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/DocsStory.tsx",
+ "name": "./lib/blocks/src/blocks/DocsStory.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Stories.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/blocks/Primary.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Heading.tsx",
+ "name": "./lib/blocks/src/blocks/Heading.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Stories.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/helpers.ts",
+ "name": "./lib/blocks/src/controls/helpers.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Boolean.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Files.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Color.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Number.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Date.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Object.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Range.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/Text.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Checkbox.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Radio.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Select.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/useStory.ts",
+ "name": "./lib/blocks/src/blocks/useStory.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/Story.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/Object.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgControl.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgControl.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgJsDoc.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgJsDoc.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/ArgValue.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/ArgValue.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/Empty.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/Empty.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/Skeleton.tsx",
+ "name": "./lib/blocks/src/components/ArgsTable/Skeleton.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/Checkbox.tsx",
+ "name": "./lib/blocks/src/controls/options/Checkbox.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Options.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/Radio.tsx",
+ "name": "./lib/blocks/src/controls/options/Radio.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Options.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/Select.tsx",
+ "name": "./lib/blocks/src/controls/options/Select.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Options.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/components/ArgsTable/types.ts",
+ "name": "./lib/blocks/src/components/ArgsTable/types.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/index.ts"
+ }
+ ]
+ },
+ {
+ "id": "./addons/interactions/src/constants.ts",
+ "name": "./addons/interactions/src/constants.ts",
+ "reasons": [
+ {
+ "moduleName": "./addons/interactions/src/components/EmptyState.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/Loader.tsx",
+ "name": "./core/src/manager/components/sidebar/Loader.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/RefBlocks.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/hooks/useDebounce.ts",
+ "name": "./core/src/manager/hooks/useDebounce.ts",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./core/src/manager/components/sidebar/FileSearchModal.utils.tsx",
+ "name": "./core/src/manager/components/sidebar/FileSearchModal.utils.tsx",
+ "reasons": [
+ {
+ "moduleName": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/blocks/Subheading.tsx",
+ "name": "./lib/blocks/src/blocks/Subheading.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/index.tsx",
+ "name": "./lib/blocks/src/controls/index.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/components/ArgsTable/ArgControl.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/types/dataTypes.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/types/dataTypes.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/types/deltaTypes.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/types/deltaTypes.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/types/inputUsageTypes.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/types/inputUsageTypes.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/utils/objectTypes.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/utils/objectTypes.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/utils/parse.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/utils/parse.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/react-editable-json-tree/utils/styles.ts",
+ "name": "./lib/blocks/src/controls/react-editable-json-tree/utils/styles.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/helpers.ts",
+ "name": "./lib/blocks/src/controls/options/helpers.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Checkbox.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Radio.tsx"
+ },
+ {
+ "moduleName": "./lib/blocks/src/controls/options/Select.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/types.ts",
+ "name": "./lib/blocks/src/controls/types.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ },
+ {
+ "id": "./lib/blocks/src/controls/options/index.ts",
+ "name": "./lib/blocks/src/controls/options/index.ts",
+ "reasons": [
+ {
+ "moduleName": "./lib/blocks/src/controls/index.tsx"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
From 298399351af83b00a90b72b3fd8d63cfcbfa6b4a Mon Sep 17 00:00:00 2001
From: Jeppe Reinhold
Date: Fri, 6 Sep 2024 16:00:21 +0200
Subject: [PATCH 28/39] cleanup
---
preview-stats-new-ids.json | 2914 ------------------------------------
1 file changed, 2914 deletions(-)
delete mode 100644 preview-stats-new-ids.json
diff --git a/preview-stats-new-ids.json b/preview-stats-new-ids.json
deleted file mode 100644
index 9bc467c67f5b..000000000000
--- a/preview-stats-new-ids.json
+++ /dev/null
@@ -1,2914 +0,0 @@
-{
- "modules": [
- {
- "id": "./iframe.html",
- "name": "./iframe.html",
- "reasons": [
- {
- "moduleName": "./iframe.html"
- }
- ]
- },
- {
- "id": "./sb-preview/runtime.js",
- "name": "./sb-preview/runtime.js",
- "reasons": [
- {
- "moduleName": "./iframe.html"
- }
- ]
- },
- {
- "id": "./renderers/react/template/components/Button.jsx",
- "name": "./renderers/react/template/components/Button.jsx",
- "reasons": [
- {
- "moduleName": "./renderers/react/template/components/index.js"
- }
- ]
- },
- {
- "id": "./renderers/react/template/components/Form.jsx",
- "name": "./renderers/react/template/components/Form.jsx",
- "reasons": [
- {
- "moduleName": "./renderers/react/template/components/index.js"
- }
- ]
- },
- {
- "id": "./renderers/react/template/components/Html.jsx",
- "name": "./renderers/react/template/components/Html.jsx",
- "reasons": [
- {
- "moduleName": "./renderers/react/template/components/index.js"
- }
- ]
- },
- {
- "id": "./renderers/react/template/components/Pre.jsx",
- "name": "./renderers/react/template/components/Pre.jsx",
- "reasons": [
- {
- "moduleName": "./renderers/react/template/components/index.js"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/mocks/index.ts",
- "name": "./addons/interactions/src/mocks/index.ts",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/Interaction.stories.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/components/Interaction.tsx",
- "name": "./addons/interactions/src/components/Interaction.tsx",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/Interaction.stories.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/components/Subnav.stories.tsx",
- "name": "./addons/interactions/src/components/Subnav.stories.tsx",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/Interaction.stories.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/brand/StorybookIcon.tsx",
- "name": "./core/src/components/brand/StorybookIcon.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/brand/StorybookIcon.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/controls/src/SaveStory.tsx",
- "name": "./addons/controls/src/SaveStory.tsx",
- "reasons": [
- {
- "moduleName": "./addons/controls/src/SaveStory.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/brand/StorybookLogo.tsx",
- "name": "./core/src/components/brand/StorybookLogo.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/brand/StorybookLogo.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/index.ts",
- "name": "./lib/blocks/src/components/index.ts",
- "reasons": [
- {
- "moduleName": "./.storybook/preview.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/ArgTypes.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/Preview.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Subtitle.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Story.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Title.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/mdx.tsx"
- }
- ]
- },
- {
- "id": "./.storybook/isChromatic.ts",
- "name": "./.storybook/isChromatic.ts",
- "reasons": [
- {
- "moduleName": "./.storybook/preview.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/components/InteractionsPanel.tsx",
- "name": "./addons/interactions/src/components/InteractionsPanel.tsx",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/InteractionsPanel.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/components/MatcherResult.tsx",
- "name": "./addons/interactions/src/components/MatcherResult.tsx",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/MatcherResult.stories.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/Interaction.tsx"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/components/StatusIcon.tsx",
- "name": "./addons/interactions/src/components/StatusIcon.tsx",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/StatusIcon.stories.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/Interaction.tsx"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/components/MethodCall.tsx",
- "name": "./addons/interactions/src/components/MethodCall.tsx",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/MethodCall.stories.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/Interaction.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/MatcherResult.tsx"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/components/StatusBadge.tsx",
- "name": "./addons/interactions/src/components/StatusBadge.tsx",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/StatusBadge.stories.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/Subnav.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/ActionBar/ActionBar.tsx",
- "name": "./core/src/components/components/ActionBar/ActionBar.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/ActionBar/ActionBar.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/components/Subnav.tsx",
- "name": "./addons/interactions/src/components/Subnav.tsx",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/Subnav.stories.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/form/index.tsx",
- "name": "./core/src/components/components/form/index.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Button/Button.deprecated.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/Button/Button.tsx",
- "name": "./core/src/components/components/Button/Button.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Button/Button.deprecated.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/Button/Button.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/Modal/Modal.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/form/index.tsx"
- },
- {
- "moduleName": "./core/src/components/components/IconButton/IconButton.tsx"
- }
- ]
- },
- {
- "id": "./addons/onboarding/src/components/Button/Button.tsx",
- "name": "./addons/onboarding/src/components/Button/Button.tsx",
- "reasons": [
- {
- "moduleName": "./addons/onboarding/src/components/Button/Button.stories.tsx"
- },
- {
- "moduleName": "./addons/onboarding/src/features/GuidedTour/Tooltip.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/Badge/Badge.tsx",
- "name": "./core/src/components/components/Badge/Badge.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Badge/Badge.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/onboarding/src/components/Confetti/Confetti.tsx",
- "name": "./addons/onboarding/src/components/Confetti/Confetti.tsx",
- "reasons": [
- {
- "moduleName": "./addons/onboarding/src/components/Confetti/Confetti.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/docs/template/stories/docs2/button.stories.ts",
- "name": "./addons/docs/template/stories/docs2/button.stories.ts",
- "reasons": [
- {
- "moduleName": "./addons/docs/template/stories/docs2/MetaOf.mdx"
- },
- {
- "moduleName": "./addons/docs/template/stories/docs2/MetaOfNamed.mdx"
- }
- ]
- },
- {
- "id": "./core/src/components/brand/SideBySide.tsx",
- "name": "./core/src/components/brand/SideBySide.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/brand/colorpalette.mdx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/Button/Button.stories.tsx",
- "name": "./core/src/components/components/Button/Button.stories.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Button/Docs.mdx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Unstyled.tsx",
- "name": "./lib/blocks/src/blocks/Unstyled.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Unstyled.mdx"
- },
- {
- "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/ErrorFormatter/ErrorFormatter.tsx",
- "name": "./core/src/components/components/ErrorFormatter/ErrorFormatter.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/ErrorFormatter/ErrorFormatter.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/onboarding/src/components/HighlightElement/HighlightElement.tsx",
- "name": "./addons/onboarding/src/components/HighlightElement/HighlightElement.tsx",
- "reasons": [
- {
- "moduleName": "./addons/onboarding/src/components/HighlightElement/HighlightElement.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/onboarding/src/features/GuidedTour/GuidedTour.tsx",
- "name": "./addons/onboarding/src/features/GuidedTour/GuidedTour.tsx",
- "reasons": [
- {
- "moduleName": "./addons/onboarding/src/features/GuidedTour/GuidedTour.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/IconButton/IconButton.tsx",
- "name": "./core/src/components/components/IconButton/IconButton.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/IconButton/IconButton.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tabs/tabs.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/Modal/Modal.styled.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/Loader/Loader.tsx",
- "name": "./core/src/components/components/Loader/Loader.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Loader/Loader.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/onboarding/src/components/List/List.tsx",
- "name": "./addons/onboarding/src/components/List/List.tsx",
- "reasons": [
- {
- "moduleName": "./addons/onboarding/src/components/List/List.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/onboarding/src/components/List/ListItem/ListItem.tsx",
- "name": "./addons/onboarding/src/components/List/ListItem/ListItem.tsx",
- "reasons": [
- {
- "moduleName": "./addons/onboarding/src/components/List/List.stories.tsx"
- }
- ]
- },
- {
- "id": "./addons/onboarding/src/features/SplashScreen/SplashScreen.tsx",
- "name": "./addons/onboarding/src/features/SplashScreen/SplashScreen.tsx",
- "reasons": [
- {
- "moduleName": "./addons/onboarding/src/features/SplashScreen/SplashScreen.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/Modal/Modal.tsx",
- "name": "./core/src/components/components/Modal/Modal.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Modal/Modal.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/ScrollArea/ScrollArea.tsx",
- "name": "./core/src/components/components/ScrollArea/ScrollArea.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/ScrollArea/ScrollArea.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/bar/bar.tsx"
- },
- {
- "moduleName": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx"
- }
- ]
- },
- {
- "id": "./addons/docs/template/stories/docs2/ResolvedReact.jsx",
- "name": "./addons/docs/template/stories/docs2/ResolvedReact.jsx",
- "reasons": [
- {
- "moduleName": "./addons/docs/template/stories/docs2/ResolvedReact.mdx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/form/field/field.tsx",
- "name": "./core/src/components/components/form/field/field.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/form/form.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/form/index.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/form/input/input.tsx",
- "name": "./core/src/components/components/form/input/input.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/form/form.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/form/index.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/Zoom/Zoom.tsx",
- "name": "./core/src/components/components/Zoom/Zoom.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Zoom/Zoom.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/icon/icon.tsx",
- "name": "./core/src/components/components/icon/icon.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/icon/icon.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/typography/link/link.tsx",
- "name": "./core/src/components/components/typography/link/link.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/placeholder/placeholder.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/typography/link/link.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tooltip/TooltipMessage.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/placeholder/placeholder.tsx",
- "name": "./core/src/components/components/placeholder/placeholder.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/placeholder/placeholder.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/spaced/Spaced.tsx",
- "name": "./core/src/components/components/spaced/Spaced.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/spaced/Spaced.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tabs/EmptyTabContent.tsx",
- "name": "./core/src/components/components/tabs/EmptyTabContent.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tabs/EmptyTabContent.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tabs/tabs.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tabs/tabs.tsx",
- "name": "./core/src/components/components/tabs/tabs.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tabs/tabs.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tooltip/Tooltip.tsx",
- "name": "./core/src/components/components/tooltip/Tooltip.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tooltip/Tooltip.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tooltip/WithTooltip.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tooltip/ListItem.tsx",
- "name": "./core/src/components/components/tooltip/ListItem.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tooltip/ListItem.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tooltip/TooltipLinkList.tsx",
- "name": "./core/src/components/components/tooltip/TooltipLinkList.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tabs/tabs.hooks.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tooltip/WithTooltip.tsx",
- "name": "./core/src/components/components/tooltip/WithTooltip.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tooltip/TooltipNote.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tooltip/TooltipMessage.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tooltip/WithTooltip.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tabs/tabs.hooks.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tooltip/assets/ellipse.png",
- "name": "./core/src/components/components/tooltip/assets/ellipse.png",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tooltip/TooltipLinkList.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tooltip/TooltipNote.tsx",
- "name": "./core/src/components/components/tooltip/TooltipNote.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tooltip/TooltipNote.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tooltip/TooltipMessage.tsx",
- "name": "./core/src/components/components/tooltip/TooltipMessage.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tooltip/TooltipMessage.stories.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tooltip/WithTooltip.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx",
- "name": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/typography/DocumentWrapper.tsx",
- "name": "./core/src/components/components/typography/DocumentWrapper.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/typography/DocumentWrapper.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx",
- "name": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/layout/Layout.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/layout/Layout.tsx",
- "name": "./core/src/manager/components/layout/Layout.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/layout/Layout.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/layout/LayoutProvider.tsx",
- "name": "./core/src/manager/components/layout/LayoutProvider.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/layout/Layout.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Menu.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/layout/Layout.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/panel/Panel.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Menu.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/mobile/about/MobileAbout.tsx",
- "name": "./core/src/manager/components/mobile/about/MobileAbout.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/notifications/NotificationItem.tsx",
- "name": "./core/src/manager/components/notifications/NotificationItem.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/notifications/NotificationItem.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/notifications/NotificationList.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/notifications/NotificationItem.stories.tsx",
- "name": "./core/src/manager/components/notifications/NotificationItem.stories.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/notifications/NotificationList.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/notifications/NotificationList.tsx",
- "name": "./core/src/manager/components/notifications/NotificationList.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/notifications/NotificationList.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/container/Notifications.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx",
- "name": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/layout/Layout.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/preview/Iframe.tsx",
- "name": "./core/src/manager/components/preview/Iframe.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/preview/Iframe.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/settings/defaultShortcuts.tsx",
- "name": "./core/src/manager/settings/defaultShortcuts.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/panel/Panel.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/settings/shortcuts.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/panel/Panel.tsx",
- "name": "./core/src/manager/components/panel/Panel.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/panel/Panel.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/FileSearchListSkeleton.tsx",
- "name": "./core/src/manager/components/sidebar/FileSearchListSkeleton.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/FileSearchListSkeleton.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/FileSearchList.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Explorer.tsx",
- "name": "./core/src/manager/components/sidebar/Explorer.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/IconSymbols.tsx",
- "name": "./core/src/manager/components/sidebar/IconSymbols.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/IconSymbols.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/TreeNode.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
- },
- {
- "moduleName": "./core/src/manager/utils/status.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Refs.stories.tsx",
- "name": "./core/src/manager/components/sidebar/Refs.stories.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/mockdata.ts",
- "name": "./core/src/manager/components/sidebar/mockdata.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Explorer.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/FileSearchList.tsx",
- "name": "./core/src/manager/components/sidebar/FileSearchList.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/FileSearchList.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/FilterToggle.tsx",
- "name": "./core/src/manager/components/sidebar/FilterToggle.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/FilterToggle.stories.ts"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/SidebarBottom.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/FileSearchList.stories.tsx",
- "name": "./core/src/manager/components/sidebar/FileSearchList.stories.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/FileSearchModal.tsx",
- "name": "./core/src/manager/components/sidebar/FileSearchModal.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Heading.tsx",
- "name": "./core/src/manager/components/sidebar/Heading.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Heading.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Search.tsx",
- "name": "./core/src/manager/components/sidebar/Search.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/SearchResults.tsx",
- "name": "./core/src/manager/components/sidebar/SearchResults.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/SearchResults.stories.tsx",
- "name": "./core/src/manager/components/sidebar/SearchResults.stories.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Sidebar.tsx",
- "name": "./core/src/manager/components/sidebar/Sidebar.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/utils/tree.ts"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/mockdata.large.ts",
- "name": "./core/src/manager/components/sidebar/mockdata.large.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/container/Menu.tsx",
- "name": "./core/src/manager/container/Menu.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Menu.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/container/Menu.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Menu.tsx",
- "name": "./core/src/manager/components/sidebar/Menu.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Menu.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Heading.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/utils/tree.ts",
- "name": "./core/src/manager/utils/tree.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/SearchResults.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/useHighlighted.ts"
- },
- {
- "moduleName": "./core/src/manager/utils/status.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/StatusContext.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/useExpanded.ts"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Heading.stories.tsx",
- "name": "./core/src/manager/components/sidebar/Heading.stories.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Refs.tsx",
- "name": "./core/src/manager/components/sidebar/Refs.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Refs.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Explorer.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/SidebarBottom.tsx",
- "name": "./core/src/manager/components/sidebar/SidebarBottom.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/SidebarBottom.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Tree.tsx",
- "name": "./core/src/manager/components/sidebar/Tree.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/upgrade/UpgradeBlock.tsx",
- "name": "./core/src/manager/components/upgrade/UpgradeBlock.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/upgrade/UpgradeBlock.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.tsx"
- },
- {
- "moduleName": "./core/src/manager/settings/About.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/HighlightStyles.tsx",
- "name": "./core/src/manager/components/sidebar/HighlightStyles.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Explorer.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/TreeNode.tsx",
- "name": "./core/src/manager/components/sidebar/TreeNode.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/TreeNode.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/settings/shortcuts.tsx",
- "name": "./core/src/manager/settings/shortcuts.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/settings/shortcuts.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/settings/whats_new.tsx",
- "name": "./core/src/manager/settings/whats_new.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/settings/whats_new_footer.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/upgrade/UpgradeBlock.stories.tsx",
- "name": "./core/src/manager/components/upgrade/UpgradeBlock.stories.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/settings/about.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/settings/About.tsx",
- "name": "./core/src/manager/settings/About.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/settings/about.stories.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/settings/SettingsFooter.tsx",
- "name": "./core/src/manager/settings/SettingsFooter.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/settings/SettingsFooter.stories.tsx"
- },
- {
- "moduleName": "./core/src/manager/settings/shortcuts.tsx"
- }
- ]
- },
- {
- "id": "./core/template/stories/import.js",
- "name": "./core/template/stories/import.js",
- "reasons": [
- {
- "moduleName": "./core/template/stories/interleavedExports.stories.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Anchor.tsx",
- "name": "./lib/blocks/src/blocks/Anchor.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Anchor.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/EmptyBlock.tsx",
- "name": "./lib/blocks/src/components/EmptyBlock.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/EmptyBlock.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/index.ts"
- },
- {
- "moduleName": "./lib/blocks/src/components/Source.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ArgTypesParameters.stories.tsx",
- "name": "./lib/blocks/src/examples/ArgTypesParameters.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/ArgTypes.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ArgTypesWithSubcomponentsParameters.stories.tsx",
- "name": "./lib/blocks/src/examples/ArgTypesWithSubcomponentsParameters.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/ArgTypes.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/ArgTypes.tsx",
- "name": "./lib/blocks/src/blocks/ArgTypes.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/ArgTypes.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/Button.stories.tsx",
- "name": "./lib/blocks/src/examples/Button.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/Story.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Primary.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Title.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/CanvasParameters.stories.tsx",
- "name": "./lib/blocks/src/examples/CanvasParameters.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/SourceParameters.stories.tsx",
- "name": "./lib/blocks/src/examples/SourceParameters.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Source.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Canvas.tsx",
- "name": "./lib/blocks/src/blocks/Canvas.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Source.stories.tsx",
- "name": "./lib/blocks/src/blocks/Source.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/IconGallery.tsx",
- "name": "./lib/blocks/src/components/IconGallery.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/IconGallery.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/index.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Markdown.tsx",
- "name": "./lib/blocks/src/blocks/Markdown.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Markdown.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Description.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Markdown.stories.tsx",
- "name": "./lib/blocks/src/blocks/Markdown.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/DocsPage.tsx",
- "name": "./lib/blocks/src/components/DocsPage.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/index.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/Preview.stories.tsx",
- "name": "./lib/blocks/src/components/Preview.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/Source.stories.tsx",
- "name": "./lib/blocks/src/components/Source.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/DocsPage.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ControlsParameters.stories.tsx",
- "name": "./lib/blocks/src/examples/ControlsParameters.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ControlsWithSubcomponentsParameters.stories.tsx",
- "name": "./lib/blocks/src/examples/ControlsWithSubcomponentsParameters.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/EmptyArgTypes.stories.tsx",
- "name": "./lib/blocks/src/examples/EmptyArgTypes.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Controls.tsx",
- "name": "./lib/blocks/src/blocks/Controls.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Controls.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/Button.tsx",
- "name": "./lib/blocks/src/examples/Button.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ButtonNoAutodocs.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ButtonReadonly.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsComponentSubtitle.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsParameter.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ButtonSomeAutodocs.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsComment.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/Button.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsDocsSubtitle.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsBoth.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsBoth.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsBoth.stories.tsx",
- "name": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsBoth.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsComment.stories.tsx",
- "name": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsComment.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsParameter.stories.tsx",
- "name": "./lib/blocks/src/examples/ButtonWithMetaDescriptionAsParameter.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Description.tsx",
- "name": "./lib/blocks/src/blocks/Description.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Description.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/Source.tsx",
- "name": "./lib/blocks/src/components/Source.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/Source.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/index.ts"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Source.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/Markdown-content.md",
- "name": "./lib/blocks/src/examples/Markdown-content.md",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Markdown.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/Title.tsx",
- "name": "./lib/blocks/src/components/Title.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/Title.stories.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/DocsPage.tsx",
- "name": "./lib/blocks/src/blocks/DocsPage.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/DocsPage.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/Preview.tsx",
- "name": "./lib/blocks/src/components/Preview.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/index.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/Story.tsx",
- "name": "./lib/blocks/src/components/Story.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/Preview.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/Story.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/index.ts"
- },
- {
- "moduleName": "./lib/blocks/src/components/Preview.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/Typeset.tsx",
- "name": "./lib/blocks/src/components/Typeset.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/Typeset.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/index.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/StoriesParameters.stories.tsx",
- "name": "./lib/blocks/src/examples/StoriesParameters.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Primary.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Primary.tsx",
- "name": "./lib/blocks/src/blocks/Primary.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Primary.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Source.tsx",
- "name": "./lib/blocks/src/blocks/Source.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Source.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/SourceContainer.tsx",
- "name": "./lib/blocks/src/blocks/SourceContainer.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Source.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Source.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Stories.tsx",
- "name": "./lib/blocks/src/blocks/Stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Stories.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/Boolean.tsx",
- "name": "./lib/blocks/src/controls/Boolean.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/Boolean.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/Color.tsx",
- "name": "./lib/blocks/src/controls/Color.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/Color.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/Files.tsx",
- "name": "./lib/blocks/src/controls/Files.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/Files.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/Story.stories.tsx",
- "name": "./lib/blocks/src/components/Story.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/StoryParameters.stories.tsx",
- "name": "./lib/blocks/src/examples/StoryParameters.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Story.tsx",
- "name": "./lib/blocks/src/blocks/Story.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Story.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/Date.tsx",
- "name": "./lib/blocks/src/controls/Date.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/Date.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsBoth.stories.tsx",
- "name": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsBoth.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsComponentSubtitle.stories.tsx",
- "name": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsComponentSubtitle.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsDocsSubtitle.stories.tsx",
- "name": "./lib/blocks/src/examples/ButtonWithMetaSubtitleAsDocsSubtitle.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Subtitle.tsx",
- "name": "./lib/blocks/src/blocks/Subtitle.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Subtitle.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/Number.tsx",
- "name": "./lib/blocks/src/controls/Number.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/Number.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/Range.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Title.tsx",
- "name": "./lib/blocks/src/blocks/Title.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Title.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/Object.tsx",
- "name": "./lib/blocks/src/controls/Object.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/Object.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/Range.tsx",
- "name": "./lib/blocks/src/controls/Range.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/Range.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/SectionRow.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/index.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/SectionRow.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/SectionRow.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/SectionRow.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/Text.tsx",
- "name": "./lib/blocks/src/controls/Text.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/Text.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/ArgRow.stories.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/TabbedArgsTable.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/index.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/options/Options.tsx",
- "name": "./lib/blocks/src/controls/options/Options.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/options/CheckOptions.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/options/RadioOptions.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/options/SelectOptions.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/options/index.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ArgTypesParameters.tsx",
- "name": "./lib/blocks/src/examples/ArgTypesParameters.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/examples/ArgTypesWithSubcomponentsParameters.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ArgTypesParameters.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ColorPalette.tsx",
- "name": "./lib/blocks/src/components/ColorPalette.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ColorPalette.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/index.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/ControlsParameters.tsx",
- "name": "./lib/blocks/src/examples/ControlsParameters.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/examples/ControlsParameters.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/ControlsWithSubcomponentsParameters.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/EmptyExample.tsx",
- "name": "./lib/blocks/src/examples/EmptyExample.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/examples/CanvasParameters.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/DocsPageParameters.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/SourceParameters.stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/examples/StoriesParameters.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/examples/SimpleSizeTest.tsx",
- "name": "./lib/blocks/src/examples/SimpleSizeTest.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/examples/StoryParameters.stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/index.ts",
- "name": "./lib/blocks/src/components/ArgsTable/index.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/index.ts"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/IFrame.tsx",
- "name": "./lib/blocks/src/components/IFrame.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/index.ts"
- },
- {
- "moduleName": "./lib/blocks/src/components/Story.tsx"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/utils.ts",
- "name": "./addons/interactions/src/utils.ts",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/Interaction.tsx"
- },
- {
- "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/components/EmptyState.tsx",
- "name": "./addons/interactions/src/components/EmptyState.tsx",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/InteractionsPanel.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/shared/animation.ts",
- "name": "./core/src/components/components/shared/animation.ts",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Loader/Loader.tsx"
- }
- ]
- },
- {
- "id": "./addons/onboarding/src/features/GuidedTour/Tooltip.tsx",
- "name": "./addons/onboarding/src/features/GuidedTour/Tooltip.tsx",
- "reasons": [
- {
- "moduleName": "./addons/onboarding/src/features/GuidedTour/GuidedTour.tsx"
- }
- ]
- },
- {
- "id": "./addons/onboarding/src/components/List/List.styled.tsx",
- "name": "./addons/onboarding/src/components/List/List.styled.tsx",
- "reasons": [
- {
- "moduleName": "./addons/onboarding/src/components/List/List.tsx"
- }
- ]
- },
- {
- "id": "./addons/onboarding/src/components/List/ListItem/ListItem.styled.tsx",
- "name": "./addons/onboarding/src/components/List/ListItem/ListItem.styled.tsx",
- "reasons": [
- {
- "moduleName": "./addons/onboarding/src/components/List/ListItem/ListItem.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/Modal/Modal.styled.tsx",
- "name": "./core/src/components/components/Modal/Modal.styled.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Modal/Modal.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/Zoom/ZoomElement.tsx",
- "name": "./core/src/components/components/Zoom/ZoomElement.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Zoom/Zoom.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/Zoom/ZoomIFrame.tsx",
- "name": "./core/src/components/components/Zoom/ZoomIFrame.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/Zoom/Zoom.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx",
- "name": "./core/src/components/components/syntaxhighlighter/syntaxhighlighter.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx"
- },
- {
- "moduleName": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/syntaxhighlighter/formatter.ts",
- "name": "./core/src/components/components/syntaxhighlighter/formatter.ts",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/syntaxhighlighter/lazy-syntaxhighlighter.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/bar/bar.tsx",
- "name": "./core/src/components/components/bar/bar.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tabs/tabs.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/bar/button.tsx",
- "name": "./core/src/components/components/bar/button.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tabs/tabs.tsx"
- },
- {
- "moduleName": "./core/src/components/components/tabs/tabs.hooks.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tabs/tabs.helpers.tsx",
- "name": "./core/src/components/components/tabs/tabs.helpers.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tabs/tabs.tsx"
- }
- ]
- },
- {
- "id": "./core/src/components/components/tabs/tabs.hooks.tsx",
- "name": "./core/src/components/components/tabs/tabs.hooks.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/components/components/tabs/tabs.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/constants.ts",
- "name": "./core/src/manager/constants.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/layout/LayoutProvider.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/layout/Layout.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/notifications/NotificationList.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/mobile/about/MobileAbout.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/upgrade/UpgradeBlock.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/hooks/useMedia.tsx",
- "name": "./core/src/manager/components/hooks/useMedia.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/layout/LayoutProvider.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/mobile/navigation/MobileAddonsDrawer.tsx",
- "name": "./core/src/manager/components/mobile/navigation/MobileAddonsDrawer.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx",
- "name": "./core/src/manager/components/mobile/navigation/MobileMenuDrawer.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/mobile/navigation/MobileNavigation.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/container/Notifications.tsx",
- "name": "./core/src/manager/container/Notifications.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/layout/Layout.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/layout/useDragging.ts",
- "name": "./core/src/manager/components/layout/useDragging.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/layout/Layout.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/FileList.tsx",
- "name": "./core/src/manager/components/sidebar/FileList.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/FileSearchListSkeleton.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/FileSearchList.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/useHighlighted.ts",
- "name": "./core/src/manager/components/sidebar/useHighlighted.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Explorer.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/hooks/useMeasure.tsx",
- "name": "./core/src/manager/hooks/useMeasure.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/FileSearchModal.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/FIleSearchList.utils.tsx",
- "name": "./core/src/manager/components/sidebar/FIleSearchList.utils.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/FileSearchList.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Brand.tsx",
- "name": "./core/src/manager/components/sidebar/Brand.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Heading.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/useLastViewed.ts",
- "name": "./core/src/manager/components/sidebar/useLastViewed.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Sidebar.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/keybinding.ts",
- "name": "./core/src/manager/keybinding.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/useHighlighted.ts"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/useExpanded.ts"
- }
- ]
- },
- {
- "id": "./core/src/manager/utils/status.tsx",
- "name": "./core/src/manager/utils/status.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/StatusButton.tsx",
- "name": "./core/src/manager/components/sidebar/StatusButton.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/types.ts",
- "name": "./core/src/manager/components/sidebar/types.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/SearchResults.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx",
- "name": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Search.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/RefBlocks.tsx",
- "name": "./core/src/manager/components/sidebar/RefBlocks.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/RefIndicator.tsx",
- "name": "./core/src/manager/components/sidebar/RefIndicator.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/components/CollapseIcon.tsx",
- "name": "./core/src/manager/components/sidebar/components/CollapseIcon.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Refs.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/TreeNode.tsx"
- },
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/StatusContext.tsx",
- "name": "./core/src/manager/components/sidebar/StatusContext.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/useExpanded.ts",
- "name": "./core/src/manager/components/sidebar/useExpanded.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/Tree.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/useOf.ts",
- "name": "./lib/blocks/src/blocks/useOf.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/ArgTypes.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Description.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsPage.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Primary.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Subtitle.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Title.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/utils.ts",
- "name": "./lib/blocks/src/blocks/utils.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/ArgTypes.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/BlockBackgroundStyles.tsx",
- "name": "./lib/blocks/src/components/BlockBackgroundStyles.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/IconGallery.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/Typeset.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/Preview.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/ColorPalette.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/mdx.tsx",
- "name": "./lib/blocks/src/blocks/mdx.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Markdown.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Heading.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Subheading.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/DocsContext.ts",
- "name": "./lib/blocks/src/blocks/DocsContext.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Canvas.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Primary.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Source.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Story.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/useOf.ts"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/mdx.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/useArgs.ts",
- "name": "./lib/blocks/src/blocks/useArgs.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/useGlobals.ts",
- "name": "./lib/blocks/src/blocks/useGlobals.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Controls.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/Toolbar.tsx",
- "name": "./lib/blocks/src/components/Toolbar.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/Preview.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ZoomContext.tsx",
- "name": "./lib/blocks/src/components/ZoomContext.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/Preview.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/components/Story.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/DocsStory.tsx",
- "name": "./lib/blocks/src/blocks/DocsStory.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Stories.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/blocks/Primary.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Heading.tsx",
- "name": "./lib/blocks/src/blocks/Heading.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Stories.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/helpers.ts",
- "name": "./lib/blocks/src/controls/helpers.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/Boolean.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/Files.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/Color.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/Number.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/Date.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/Object.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/Range.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/Text.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/options/Checkbox.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/options/Radio.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/options/Select.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/useStory.ts",
- "name": "./lib/blocks/src/blocks/useStory.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/Story.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx",
- "name": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/Object.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/ArgControl.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/ArgControl.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/ArgJsDoc.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/ArgJsDoc.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/ArgValue.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/ArgValue.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgRow.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/Empty.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/Empty.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/Skeleton.tsx",
- "name": "./lib/blocks/src/components/ArgsTable/Skeleton.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgsTable.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/options/Checkbox.tsx",
- "name": "./lib/blocks/src/controls/options/Checkbox.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/options/Options.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/options/Radio.tsx",
- "name": "./lib/blocks/src/controls/options/Radio.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/options/Options.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/options/Select.tsx",
- "name": "./lib/blocks/src/controls/options/Select.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/options/Options.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/components/ArgsTable/types.ts",
- "name": "./lib/blocks/src/components/ArgsTable/types.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/index.ts"
- }
- ]
- },
- {
- "id": "./addons/interactions/src/constants.ts",
- "name": "./addons/interactions/src/constants.ts",
- "reasons": [
- {
- "moduleName": "./addons/interactions/src/components/EmptyState.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/Loader.tsx",
- "name": "./core/src/manager/components/sidebar/Loader.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/RefBlocks.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/hooks/useDebounce.ts",
- "name": "./core/src/manager/hooks/useDebounce.ts",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx"
- }
- ]
- },
- {
- "id": "./core/src/manager/components/sidebar/FileSearchModal.utils.tsx",
- "name": "./core/src/manager/components/sidebar/FileSearchModal.utils.tsx",
- "reasons": [
- {
- "moduleName": "./core/src/manager/components/sidebar/CreateNewStoryFileModal.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/blocks/Subheading.tsx",
- "name": "./lib/blocks/src/blocks/Subheading.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/blocks/DocsStory.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/index.tsx",
- "name": "./lib/blocks/src/controls/index.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/components/ArgsTable/ArgControl.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx",
- "name": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/react-editable-json-tree/types/dataTypes.ts",
- "name": "./lib/blocks/src/controls/react-editable-json-tree/types/dataTypes.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/react-editable-json-tree/types/deltaTypes.ts",
- "name": "./lib/blocks/src/controls/react-editable-json-tree/types/deltaTypes.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/react-editable-json-tree/types/inputUsageTypes.ts",
- "name": "./lib/blocks/src/controls/react-editable-json-tree/types/inputUsageTypes.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/react-editable-json-tree/utils/objectTypes.ts",
- "name": "./lib/blocks/src/controls/react-editable-json-tree/utils/objectTypes.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/JsonNodes.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/react-editable-json-tree/utils/parse.ts",
- "name": "./lib/blocks/src/controls/react-editable-json-tree/utils/parse.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/react-editable-json-tree/utils/styles.ts",
- "name": "./lib/blocks/src/controls/react-editable-json-tree/utils/styles.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/react-editable-json-tree/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/options/helpers.ts",
- "name": "./lib/blocks/src/controls/options/helpers.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/options/Checkbox.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/options/Radio.tsx"
- },
- {
- "moduleName": "./lib/blocks/src/controls/options/Select.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/types.ts",
- "name": "./lib/blocks/src/controls/types.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/index.tsx"
- }
- ]
- },
- {
- "id": "./lib/blocks/src/controls/options/index.ts",
- "name": "./lib/blocks/src/controls/options/index.ts",
- "reasons": [
- {
- "moduleName": "./lib/blocks/src/controls/index.tsx"
- }
- ]
- }
- ]
-}
\ No newline at end of file
From d982babd5571d163856cf7e80babca6a835bb564 Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Fri, 6 Sep 2024 10:13:38 -0600
Subject: [PATCH 29/39] Apply suggestions from code review
Co-authored-by: Yann Braga
---
docs/writing-tests/test-runner-with-vitest.mdx | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/docs/writing-tests/test-runner-with-vitest.mdx b/docs/writing-tests/test-runner-with-vitest.mdx
index c57c4cfde3f1..2b636ffd4a64 100644
--- a/docs/writing-tests/test-runner-with-vitest.mdx
+++ b/docs/writing-tests/test-runner-with-vitest.mdx
@@ -37,7 +37,7 @@ Before installing, make sure your project meets the following requirements:
- A Storybook framework that uses Vite (e.g. [`vue3-vite`](../get-started/frameworks/vue3-vite.mdx)), or the [Storybook Next.js framework](../get-started/frameworks/nextjs.mdx)
- Vitest β₯ 2.0
- If you're not using Vitest, it will be installed and configured for you when you install the addon
-- For Next.js projects, Next.js β₯ 14.0
+- For Next.js projects, Next.js β₯ 14.1
If you're not yet using Storybook 8.3, you can [upgrade your Storybook](../configure/upgrading.mdx) to the latest version:
@@ -152,7 +152,7 @@ import { setProjectAnnotations } from '@storybook/your-renderer';
import * as projectAnnotations from './preview';
-const project = setProjectAnnotations(projectAnnotations);
+const project = setProjectAnnotations([projectAnnotations]);
beforeAll(project.beforeAll);
```
@@ -222,6 +222,7 @@ export default defineWorkspace([
storybookScript: 'yarn storybook --ci',
}),
],
+ name: 'storybook',
test: {
// Glob pattern to find story files
include: ['src/**/*.stories.?(m)[jt]s?(x)'],
From bdfd3a5246fd90900236c920477491149944b736 Mon Sep 17 00:00:00 2001
From: Lucas Bancroft-Baer <1879691+elbeezi@users.noreply.github.com>
Date: Fri, 6 Sep 2024 19:42:14 -0400
Subject: [PATCH 30/39] Fix typo in setup.mdx
---
docs/get-started/setup.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/get-started/setup.mdx b/docs/get-started/setup.mdx
index 6794e694e35c..be35c28e11a2 100644
--- a/docs/get-started/setup.mdx
+++ b/docs/get-started/setup.mdx
@@ -77,4 +77,4 @@ Your project may have additional requirements before components can be rendered
## Load assets and resources
-We recommend serving external resources and assets requested in your components statically with Storybook. It ensures that assets are always available to your stories. Read our [documentation](../configure/integration/images-and-assets.mdx) to learn how to hosting static files with Storybook.
+We recommend serving external resources and assets requested in your components statically with Storybook. It ensures that assets are always available to your stories. Read our [documentation](../configure/integration/images-and-assets.mdx) to learn how to host static files with Storybook.
From 06b30567926ebe7c09eb9901b1081800e4e715ad Mon Sep 17 00:00:00 2001
From: Jeppe Reinhold
Date: Mon, 9 Sep 2024 09:48:26 +0200
Subject: [PATCH 31/39] improve readability of case when matching internal
virtual files.
---
.../src/plugins/webpack-stats-plugin.ts | 20 ++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts b/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
index 701f7bd15b96..7e6f596e022f 100644
--- a/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
+++ b/code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
@@ -40,14 +40,20 @@ function stripQueryParams(filePath: string): string {
/** We only care about user code, not node_modules, vite files, or (most) virtual files. */
function isUserCode(moduleName: string) {
+ if (!moduleName) {
+ return false;
+ }
+
+ // keep Storybook's virtual files because they import the story files, so they are essential to the module graph
+ if (Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(moduleName))) {
+ return true;
+ }
+
return Boolean(
- (moduleName &&
- // keep Storybook's virtual files because they import the story files, so they are essential to the module graph
- Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(moduleName))) ||
- (!moduleName.startsWith('vite/') &&
- !moduleName.startsWith('\0') &&
- moduleName !== 'react/jsx-runtime' &&
- !moduleName.match(/node_modules\//))
+ !moduleName.startsWith('vite/') &&
+ !moduleName.startsWith('\0') &&
+ moduleName !== 'react/jsx-runtime' &&
+ !moduleName.match(/node_modules\//)
);
}
From e672f1f2204d0f7769bab2d9270f30440ba5b170 Mon Sep 17 00:00:00 2001
From: Jeppe Reinhold
Date: Mon, 9 Sep 2024 10:10:56 +0200
Subject: [PATCH 32/39] fix lock-file changes
---
code/yarn.lock | 257 +------------------------------------------------
1 file changed, 3 insertions(+), 254 deletions(-)
diff --git a/code/yarn.lock b/code/yarn.lock
index 2e596fc708a3..52f251440bb3 100644
--- a/code/yarn.lock
+++ b/code/yarn.lock
@@ -2490,7 +2490,7 @@ __metadata:
languageName: node
linkType: hard
-"@emnapi/runtime@npm:^1.1.1, @emnapi/runtime@npm:^1.2.0":
+"@emnapi/runtime@npm:^1.1.1":
version: 1.2.0
resolution: "@emnapi/runtime@npm:1.2.0"
dependencies:
@@ -3424,18 +3424,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-darwin-arm64@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-darwin-arm64@npm:0.33.5"
- dependencies:
- "@img/sharp-libvips-darwin-arm64": "npm:1.0.4"
- dependenciesMeta:
- "@img/sharp-libvips-darwin-arm64":
- optional: true
- conditions: os=darwin & cpu=arm64
- languageName: node
- linkType: hard
-
"@img/sharp-darwin-x64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-darwin-x64@npm:0.33.4"
@@ -3448,18 +3436,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-darwin-x64@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-darwin-x64@npm:0.33.5"
- dependencies:
- "@img/sharp-libvips-darwin-x64": "npm:1.0.4"
- dependenciesMeta:
- "@img/sharp-libvips-darwin-x64":
- optional: true
- conditions: os=darwin & cpu=x64
- languageName: node
- linkType: hard
-
"@img/sharp-libvips-darwin-arm64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.2"
@@ -3467,13 +3443,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-libvips-darwin-arm64@npm:1.0.4":
- version: 1.0.4
- resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.4"
- conditions: os=darwin & cpu=arm64
- languageName: node
- linkType: hard
-
"@img/sharp-libvips-darwin-x64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.2"
@@ -3481,13 +3450,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-libvips-darwin-x64@npm:1.0.4":
- version: 1.0.4
- resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.4"
- conditions: os=darwin & cpu=x64
- languageName: node
- linkType: hard
-
"@img/sharp-libvips-linux-arm64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.2"
@@ -3495,13 +3457,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-libvips-linux-arm64@npm:1.0.4":
- version: 1.0.4
- resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.4"
- conditions: os=linux & cpu=arm64 & libc=glibc
- languageName: node
- linkType: hard
-
"@img/sharp-libvips-linux-arm@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-arm@npm:1.0.2"
@@ -3509,13 +3464,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-libvips-linux-arm@npm:1.0.5":
- version: 1.0.5
- resolution: "@img/sharp-libvips-linux-arm@npm:1.0.5"
- conditions: os=linux & cpu=arm & libc=glibc
- languageName: node
- linkType: hard
-
"@img/sharp-libvips-linux-s390x@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.2"
@@ -3523,13 +3471,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-libvips-linux-s390x@npm:1.0.4":
- version: 1.0.4
- resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.4"
- conditions: os=linux & cpu=s390x & libc=glibc
- languageName: node
- linkType: hard
-
"@img/sharp-libvips-linux-x64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-x64@npm:1.0.2"
@@ -3537,13 +3478,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-libvips-linux-x64@npm:1.0.4":
- version: 1.0.4
- resolution: "@img/sharp-libvips-linux-x64@npm:1.0.4"
- conditions: os=linux & cpu=x64 & libc=glibc
- languageName: node
- linkType: hard
-
"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.2"
@@ -3551,13 +3485,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.4":
- version: 1.0.4
- resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.4"
- conditions: os=linux & cpu=arm64 & libc=musl
- languageName: node
- linkType: hard
-
"@img/sharp-libvips-linuxmusl-x64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.2"
@@ -3565,13 +3492,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-libvips-linuxmusl-x64@npm:1.0.4":
- version: 1.0.4
- resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.4"
- conditions: os=linux & cpu=x64 & libc=musl
- languageName: node
- linkType: hard
-
"@img/sharp-linux-arm64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linux-arm64@npm:0.33.4"
@@ -3584,18 +3504,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-linux-arm64@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-linux-arm64@npm:0.33.5"
- dependencies:
- "@img/sharp-libvips-linux-arm64": "npm:1.0.4"
- dependenciesMeta:
- "@img/sharp-libvips-linux-arm64":
- optional: true
- conditions: os=linux & cpu=arm64 & libc=glibc
- languageName: node
- linkType: hard
-
"@img/sharp-linux-arm@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linux-arm@npm:0.33.4"
@@ -3608,18 +3516,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-linux-arm@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-linux-arm@npm:0.33.5"
- dependencies:
- "@img/sharp-libvips-linux-arm": "npm:1.0.5"
- dependenciesMeta:
- "@img/sharp-libvips-linux-arm":
- optional: true
- conditions: os=linux & cpu=arm & libc=glibc
- languageName: node
- linkType: hard
-
"@img/sharp-linux-s390x@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linux-s390x@npm:0.33.4"
@@ -3632,18 +3528,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-linux-s390x@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-linux-s390x@npm:0.33.5"
- dependencies:
- "@img/sharp-libvips-linux-s390x": "npm:1.0.4"
- dependenciesMeta:
- "@img/sharp-libvips-linux-s390x":
- optional: true
- conditions: os=linux & cpu=s390x & libc=glibc
- languageName: node
- linkType: hard
-
"@img/sharp-linux-x64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linux-x64@npm:0.33.4"
@@ -3656,18 +3540,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-linux-x64@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-linux-x64@npm:0.33.5"
- dependencies:
- "@img/sharp-libvips-linux-x64": "npm:1.0.4"
- dependenciesMeta:
- "@img/sharp-libvips-linux-x64":
- optional: true
- conditions: os=linux & cpu=x64 & libc=glibc
- languageName: node
- linkType: hard
-
"@img/sharp-linuxmusl-arm64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.4"
@@ -3680,18 +3552,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-linuxmusl-arm64@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.5"
- dependencies:
- "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.4"
- dependenciesMeta:
- "@img/sharp-libvips-linuxmusl-arm64":
- optional: true
- conditions: os=linux & cpu=arm64 & libc=musl
- languageName: node
- linkType: hard
-
"@img/sharp-linuxmusl-x64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-linuxmusl-x64@npm:0.33.4"
@@ -3704,18 +3564,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-linuxmusl-x64@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-linuxmusl-x64@npm:0.33.5"
- dependencies:
- "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.4"
- dependenciesMeta:
- "@img/sharp-libvips-linuxmusl-x64":
- optional: true
- conditions: os=linux & cpu=x64 & libc=musl
- languageName: node
- linkType: hard
-
"@img/sharp-wasm32@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-wasm32@npm:0.33.4"
@@ -3725,15 +3573,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-wasm32@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-wasm32@npm:0.33.5"
- dependencies:
- "@emnapi/runtime": "npm:^1.2.0"
- conditions: cpu=wasm32
- languageName: node
- linkType: hard
-
"@img/sharp-win32-ia32@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-win32-ia32@npm:0.33.4"
@@ -3741,13 +3580,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-win32-ia32@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-win32-ia32@npm:0.33.5"
- conditions: os=win32 & cpu=ia32
- languageName: node
- linkType: hard
-
"@img/sharp-win32-x64@npm:0.33.4":
version: 0.33.4
resolution: "@img/sharp-win32-x64@npm:0.33.4"
@@ -3755,13 +3587,6 @@ __metadata:
languageName: node
linkType: hard
-"@img/sharp-win32-x64@npm:0.33.5":
- version: 0.33.5
- resolution: "@img/sharp-win32-x64@npm:0.33.5"
- conditions: os=win32 & cpu=x64
- languageName: node
- linkType: hard
-
"@inquirer/confirm@npm:^3.0.0":
version: 3.1.20
resolution: "@inquirer/confirm@npm:3.1.20"
@@ -4078,20 +3903,13 @@ __metadata:
languageName: node
linkType: hard
-"@next/env@npm:14.2.5":
+"@next/env@npm:14.2.5, @next/env@npm:^14.2.5":
version: 14.2.5
resolution: "@next/env@npm:14.2.5"
checksum: 10c0/63d8b88ac450b3c37940a9e2119a63a1074aca89908574ade6157a8aa295275dcb3ac5f69e00883fc55d0f12963b73b74e87ba32a5768a489f9609c6be57b699
languageName: node
linkType: hard
-"@next/env@npm:^14.2.5":
- version: 14.2.7
- resolution: "@next/env@npm:14.2.7"
- checksum: 10c0/1cda023007acda4d47036a25fba0e039d9b2df9c3770651dc289207e0537506675546c02b5b574fe92bb1adc1c887d948d5cb630673aa572754278b82d150b7e
- languageName: node
- linkType: hard
-
"@next/swc-darwin-arm64@npm:14.2.5":
version: 14.2.5
resolution: "@next/swc-darwin-arm64@npm:14.2.5"
@@ -25822,7 +25640,7 @@ __metadata:
languageName: node
linkType: hard
-"sharp@npm:^0.33.3":
+"sharp@npm:^0.33.3, sharp@npm:^0.33.4":
version: 0.33.4
resolution: "sharp@npm:0.33.4"
dependencies:
@@ -25891,75 +25709,6 @@ __metadata:
languageName: node
linkType: hard
-"sharp@npm:^0.33.4":
- version: 0.33.5
- resolution: "sharp@npm:0.33.5"
- dependencies:
- "@img/sharp-darwin-arm64": "npm:0.33.5"
- "@img/sharp-darwin-x64": "npm:0.33.5"
- "@img/sharp-libvips-darwin-arm64": "npm:1.0.4"
- "@img/sharp-libvips-darwin-x64": "npm:1.0.4"
- "@img/sharp-libvips-linux-arm": "npm:1.0.5"
- "@img/sharp-libvips-linux-arm64": "npm:1.0.4"
- "@img/sharp-libvips-linux-s390x": "npm:1.0.4"
- "@img/sharp-libvips-linux-x64": "npm:1.0.4"
- "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.4"
- "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.4"
- "@img/sharp-linux-arm": "npm:0.33.5"
- "@img/sharp-linux-arm64": "npm:0.33.5"
- "@img/sharp-linux-s390x": "npm:0.33.5"
- "@img/sharp-linux-x64": "npm:0.33.5"
- "@img/sharp-linuxmusl-arm64": "npm:0.33.5"
- "@img/sharp-linuxmusl-x64": "npm:0.33.5"
- "@img/sharp-wasm32": "npm:0.33.5"
- "@img/sharp-win32-ia32": "npm:0.33.5"
- "@img/sharp-win32-x64": "npm:0.33.5"
- color: "npm:^4.2.3"
- detect-libc: "npm:^2.0.3"
- semver: "npm:^7.6.3"
- dependenciesMeta:
- "@img/sharp-darwin-arm64":
- optional: true
- "@img/sharp-darwin-x64":
- optional: true
- "@img/sharp-libvips-darwin-arm64":
- optional: true
- "@img/sharp-libvips-darwin-x64":
- optional: true
- "@img/sharp-libvips-linux-arm":
- optional: true
- "@img/sharp-libvips-linux-arm64":
- optional: true
- "@img/sharp-libvips-linux-s390x":
- optional: true
- "@img/sharp-libvips-linux-x64":
- optional: true
- "@img/sharp-libvips-linuxmusl-arm64":
- optional: true
- "@img/sharp-libvips-linuxmusl-x64":
- optional: true
- "@img/sharp-linux-arm":
- optional: true
- "@img/sharp-linux-arm64":
- optional: true
- "@img/sharp-linux-s390x":
- optional: true
- "@img/sharp-linux-x64":
- optional: true
- "@img/sharp-linuxmusl-arm64":
- optional: true
- "@img/sharp-linuxmusl-x64":
- optional: true
- "@img/sharp-wasm32":
- optional: true
- "@img/sharp-win32-ia32":
- optional: true
- "@img/sharp-win32-x64":
- optional: true
- checksum: 10c0/6b81421ddfe6ee524d8d77e325c5e147fef22884e1c7b1656dfd89a88d7025894115da02d5f984261bf2e6daa16f98cadd1721c4ba408b4212b1d2a60f233484
- languageName: node
- linkType: hard
-
"shebang-command@npm:^1.2.0":
version: 1.2.0
resolution: "shebang-command@npm:1.2.0"
From 63e46fa47b3e5a98f331f335f6a9c4052e09ad90 Mon Sep 17 00:00:00 2001
From: Kyle Gach
Date: Mon, 9 Sep 2024 13:31:16 -0600
Subject: [PATCH 33/39] Rename to 'Storybook Vitest plugin', and more
---
.../vitest-plugin-test-failure.png | Bin 0 -> 213655 bytes
.../writing-tests/vitest-plugin-vscode.png | Bin 0 -> 332373 bytes
...s-vitest-set-project-annotations-simple.md | 35 ++++
...-stories-vitest-set-project-annotations.md | 18 +-
...un-tests.md => vitest-plugin-run-tests.md} | 0
.../vitest-plugin-vitest-config-alias.md | 29 +++
docs/_snippets/vitest-plugin-vitest-config.md | 118 ++++++++++++
.../vitest-plugin-vitest-workspace.md | 128 +++++++++++++
...nner-with-vitest.mdx => vitest-plugin.mdx} | 181 +++++++-----------
9 files changed, 382 insertions(+), 127 deletions(-)
create mode 100644 docs/_assets/writing-tests/vitest-plugin-test-failure.png
create mode 100644 docs/_assets/writing-tests/vitest-plugin-vscode.png
create mode 100644 docs/_snippets/portable-stories-vitest-set-project-annotations-simple.md
rename docs/_snippets/{addon-test-run-tests.md => vitest-plugin-run-tests.md} (100%)
create mode 100644 docs/_snippets/vitest-plugin-vitest-config-alias.md
create mode 100644 docs/_snippets/vitest-plugin-vitest-config.md
create mode 100644 docs/_snippets/vitest-plugin-vitest-workspace.md
rename docs/writing-tests/{test-runner-with-vitest.mdx => vitest-plugin.mdx} (71%)
diff --git a/docs/_assets/writing-tests/vitest-plugin-test-failure.png b/docs/_assets/writing-tests/vitest-plugin-test-failure.png
new file mode 100644
index 0000000000000000000000000000000000000000..6c2277c9e54729e6726acd28140c2ef2d846068d
GIT binary patch
literal 213655
zcmZ^LWmsHWwk;N1LvXhc+`aJN5C{Z!hv4q+?yf;YaCdjt;O_2LNbxFtPWSD1Z}$(r
zV%OSx`5JS~Ip(e~g)b5)i1>&Q5D+L*lAjeJAfWHSe^BtS;BP+B@2f#TK!%uqQ*%_4
zljSwEv0~IWvN14bbhWYtmqS1R1YK?Q4K0ivNezrm&8_*#FIqdvNzIM;$yGVznB{Cm
zjm^v@-R+H)+`oJ?bhj|%F(MZfKm@q*f-A5xcGM?zwX(E!;C1CE|3|&N;Q#-8%|uT6
zk6Roq_{r7e6i7vF?2Sn|8JQWG$psKe0ro~Fyo#U2|9%*J#ZPYL=xEE!#N^`Q!sx=r
zXk%~6#KObF!^F(W#LCJ5zJtNR&Dv4lmBHG9;!hQS)$!Tb!O-5^*3sO?n)FYd`UW;m
zj{M~0;BwNxD>rsE|DW2e9sV9Zcp{kolrXU{GBf?-_CHs=3g)iHmTI5Pt&FW5z;*JI
zvoN!;{jXy6e=FwVVkT$$Ga#nFM+BZ4rhm;1_~Ku)YitdkQhV^+MI{&OgO^0lTvSv+
zN>r3o!QRHi+|n4lR&iFbf-=2&=mR-((j`Sx!j4DiA*dor=>x;U-?8W%;eY4-rjfHy
zJj_XRFZ}~P)e>*T~V2h-Ty)W_naSQ{h|n{Y06c(H5>Gz)KVetUmgr}
z@g@}yr_wA22~(Yn*+Y)TF=BUi4@p)qg4mKO@zy3;iG4jqaip>ymn<`{d`>kK?wLI?LME`($XX^lDud53JLCQ;RA``Pr{_we65Xlmv#J~9Ay$dm
z8WSpie}-RUF>?L%dN4`i0~+BQKTqo6f5+*3QFV7v+4<(?Y~Q}fHdlev{^gXHTwrN|
zd-z~-W3ib1^yPKug2d;o%;$n6+a*DL`Qr-p*{yLxyY2GwPHJG#5({-;RYL=(7e;jw
zG=D=v|G1<(@zfa+(G^v4``FBmfk0`5eVG7Kt>Jc?_uxjQVCUN{&(5DdJUtI?bOPX5
zuRtLWoo#PNuQmrH2@yU^Hy-3R)bu6tQY;YIVLV&`{2$2HY4K6wQvO
z>P4E((d@D_{%L17nKU{|dNNJnx<1}-OZ7XGIUMI$KA^{&!JJMI=<4A@!SLrj)2^5P
zEBk@q__J>H4o5ZU3$CIKPCN!h`&B`JqBArU*%3oDprLYWW>{{Ng8wRTDM%)DkM0E5
z!Y#;N%4Yix&A^&lT#{<_YQaLTGU+t^>SXdl@J}NP8-jMs>)BCHTJ(6S*AJDBZS8L?
z1-b{XOcy@xZ+zsNFNOx!XsrSZd(I-U?u-hURDnS$06X#U+wN@jvS7#98mO`z0A&oJ
znFhVa%lqMzT4wl?IeBh_7IkV-n~z~TY7!vh3`F2qOOf?Uomhb&ozkcjtLrPq1>yU@
zR^SD=GpXxE`SeU(n|_&{US2+BxEb=~^^=$bMPa*_yOw`U-#MHQ=<@}t4@i7LvI4>9t?$m}<@Mwh
z?ZU@+fce5_|JD4$hwn`-z-RbX|7G$~Mc2k=)0A+!=d9ge5_`|4N2aL){fT^Fiymbq
zadL^n>?+-k0i<42ccWs|NiJ`J@UG;@J(KN1R1F+W~x@@|+YZZZW=-g=Q{1***c&>cwP
z3V8U}wp#%Xx?V9o6~VuvofVtBL|2i&X$8FDsZY96UCrmr+Hd{(Kxr^p@5sQGW(6nBOO&HZbDs_A~
zHcA!dgiE^i@+k%qdZ_JG9N6cX(9=<7w^r4+j5Hzvf=iXqt
z{5*nxo!~y8Iq>^chd`9V?9*rdS{1zRYQt^G(TMEwETa`TW+{y2AU(|BRO1jY-Z07Z
znA^yNf|cm|=&|_hLirIoIqK%&-Y|(l&Y4j`n3*qp==CF*AI+!bec~%>yv;3^i7S23
zD_;OSAn#Y;U!eLAKwE#i1f@I(w!f8U_5vlKK}q~fks*6+P)z56K6n>(RwEQk3nilV
zYuyX7>~aHQQE=~rKS@wA?zA_^0V@jYuLtb;tP6-q>sY9kp@{SJq;~54@Pq;h>_X@r
zuD+{@=MI-rYC@eE?P+#n*dssgQnh^&sr164gG7wF9QeIE!$rt8`+xlt)BB(PXmo
zsa(samu0bBZR*Zibe*`oyguDLPv!`MUhWAWyW>$qX>sYyu0|b6wj)-&0I?#S~1PLBXl
zG()9q&S+Q-3OT!XLBZkZ#T6)=)MQAbHwd40mFSwAc6YFa388+ZEKYq4d2KogAOaer
z`z4GIE7;ZwLtG0j+Lcc-!6NJ|5~mi#Nv>VO#mnubPKaAs;@gA!g>w;7EO
ztFtV}G2pOg?v;|kp#OY_qr13@=KTh|k*I|J18n~~dDo!gKPVQN>{Iv>IPRzLwk7RaQ9{Oob0jq#jwk_TXaZZ&=SLg
z_{b{+L-jMzG8;~vZ**&ir)>d2adBy&G_Z{orhfqvZ1^mB^!^1tV6$)Vw(tiVok9AmGoh@SducN<{vH(h~Lej4tf>=dWFJ`gwqJeE4Ca
zFckEVdl*!u>Uj7j(#D!yzx&TA`NI>$dyVFL@qI^oA@WJ%;c%W0_ZfF}x|CQMx8@8P
z(ROQ}O47ZC+AvI`Mvwg*AIjo?Uj>B@Vq%|A1NO158DZLUT#ql3o@%{DD6;ly0r8em
zPgFuHg+a?CCFp0W-Z+K)lszcF4
zBUpuXOpu~xE=Bo!KDp&rEh!gR*$$?W5-g%pH_qa2{LpoD*KsD4-{La8D7aB6*K^@P
z{VSBv@7_nJCS~hMx_h*qD(GO#H>10T^5uKbBHFJ~bsp2{hyI?N-?m-SJNLwoId{eA
z>kjQcf*c!V)|O-{R@%2`jv{ps{z$JP=Gf6ia)drI$8aY@)B>OTj{}&pfphx!Zy0#1
z+xGV3wZ5!#_qB2nXP^J*RsO<9o)gsFZuvsz&XRn|v=h8Ee-12qk(a`M2toZQ_GSL#
zYMeVp!w3=5>iD&JdgPmacL?->*0=j45}CXq!Tf~=_5EQBgO{b~a&JECnltW$ogBVK
zDG`|f#gfJ9D52Cm@riPM!USw8KPdv5L3AVOZ%A$I#KEQJtO{kG$8&MmkjuUoy)%qy
z;3G_
zC06bI4f&U-;*SPGl2R5D||85K@
zAa6krM*AcIFAzEm)Wy9=
z`w2+>#FdR39`@`E^+{f&FkLbmflGKWH5-7TrbXuXgVz2lP8e1669D_8-M*z2m@0yx3}5njS0bl2%oRk
zyFsj2EyWVWezQ0stq5{T9dK(Q60{+sk0j=iF5=dME3`ZD>iCZ|vjcE&gp^T)y>NHU
zA9Esm&OHmgbCAsvUmT7iPPSH%7;3HesRE^1$1WxamJ1ROVoLLsYaQoW
zR&HE9{Kf10AeFLH{@B%+cIwwx3opvQ=}Mf8>)XoX_7knW
zfnHBb4UfEABc0d%C#lvbrcrLZMu?5!_H|7pKvVW}|JL6mm?pzPDT)<#Iy^(+VMZi6
zGMRR(WNx)}=4wmc*FO$x4slIJifDd*W4Ni|c*lcn#EzGb;jTaI0>TZ^BZ1^L5?ao~
zmcgserQdJL_}oE4qCl6-gjT9r9zUJ*`+Ied|6VQ?li7%qLQnPRp|%SnhHX
zg-?JLD0d0dl>J6dMOgDXxjeSJ63J9ZYaEC{{G6n;d3o>SIal!D51#%Ezw=bRn{D7P
zS`pLfbJXejMuG44$D05je7-kadC3#||5Lw4Bp}M=Tp-Ik16kR3jMmH}(hAQn_PfX;dy2S$)VuZ%8m0_TJ1iGuu
z`5LZLs8nj;B{ON_pFfYHY{j+OAWbr9;Oe+-HBZ&LE2~w%D39;>{4e+ZZ=c_+
z|2Ho2r{iYf5Pj(+lthi5^f$9ba!8t%t)zrE$!~n84vQ@M`vVShD;cbI!y(uwAMB%l
z$CL2Sv$$iLZ`4w^yStluCiAjK1=9UUDaRW=O9gy1)^}UI$k7tu{-*b%#!4i;#4&WV
z`BSI@*=`0m)!p)pIZj~N>mx_PISiC>4zSU&US_2mvAgP_V$nW
zg8wBJq9Fot&F}T(NcA9*`IKyX&2yn-5YtaweYd)JkZ@#j%8BN@okUX0m~mQK+*RY$!-&|RepXm8T^={FuY}TU?C%Q6DlKDS0IG4xmMI2
zI6FQseiCM>#&A{oJS%)E#sec}n{zR%yedWmG)02c3o~T_>=UU01I0?cbk*AJ#hT8R
z>3ZsM-ewTIFkA(l|5FFmOyTuxO*FVY@8&HS(Mkh5MLN`P$|bO!R9)PsQ7zihb?!c^
zT4$EirO;MDL%buFYrEQIw@P^Bkn}PZR%9`_IsEM;^x=yH7JR^1X_AgOrCDwiYit%4
z6oyKjsjV-`uJ^D^MDOoTPzk2H*x=iL44uhR!bC2l5oKT9t7>OS{AX*60+X^pSO6b8GM(j`q(Q-(~)!4U+E7mSV+=)6>)6sRy>j8QdSEw&hK4jf!{3k
zEr&SXoB1z?jp#
z<8gPXTU4?_3Nh|4L06o7J5oX==*ID-VW5*E_mX<=0^FwpJo}%?u3ts8_t`|`{SBy8
zY$>m+&G1L4Pe^YiDPOkzy9CWM%_<{y89dzVvc)l3b`H3lvA&Hw`>s*RSVPM^q&rkEzC!Bs95_)
z3zCSP?x5VvMI!!lrV5jmsT_>z*jG8*;+lALBEqx?h?bKYqWIu%K`#
zm&BKm5F@(Ihm8FASrziD8c01gX)qqtL_I|ga*~AhP^Xv2?|L}q(As{a^i8sH^E&w}
zjLdw6VV2;xg2%@MUwgk!BfIh4+brP#^y@$uQRdw96MgeZ_f)6-U7t;$#o@mNo`pnV
zHp?$nhxk{Md2WcbFAc~pSYHWiHl~*f3$O0DX6XDv#(H!1NM`5xY=2MoZ1&rlKe9fD
zRy)e&lZn15Fxu58yUYA!gpk@o_dwJ;@=p9d`SERq*1HLB(;2NqmCK`qWE8N6a){^~
zU=7>QCTPd_Hy$Uz`IX%42bOO*i==vOX8$nkHQ)Y~#6M`vkmN>9h@ZT6BdPYdBhzCM
z!}#8%W*(`dY!usNWONoVI$ubPS#n-c!Kl4!N`AE4@-M8wd3>!A_f928GXE)%8MbRa7Z-wkZ_S>20cD=Q=g#pawe3MQY-*WY`ztq99Kq|M)z>8
zSYkG;+K*OEixZe%tLl1j0Pg0L^tXC~dY#WEM_0a=R&50nj8uuikEV3uV>94uyJ?1b
z6GZ!YJGrU>a9|Vxlh``gTn_uPXPb<=9a=Zn#iA2LTY4kkqs1WeX~2A?P$uR3xGbK$#)sg3)j{5CzmYbkzs{XX?W@0N=6cxb-II7#T=CZ**-_J!`+1koy*|21?
zbu~zWHYxCInGZ0GGmBtonCj@;?vLmdMdPm%kHg%0sr-=$_xDtor@O#o448g4sLiU??i+*X@G*u8vKz$e=zUAg5a=m{|
zuk&MfeCdMOYMYWW_JuCvTr$E$Ihb^q%qGH_h>?qv-FZhymnf;a_q;ZU#VW
zmZ|HRXPGj4_Y$n<+U;(=2)tbOrl%OIlbjwtM%(UUD
zdZ-Ob2h8oTc^{i(1QQ83e@Sfsu2$VGQ3r-}0%xagwlBk6u>6s*>EQ`%+U#7Pj*4#%
z6qTP02q{tg$8xCxnpdnEwT<1Bioc+=p4LR5T2~+`PCBIe!4=gvh7H~2awkQOlkM2>wDC6G4;!ig@G1Dzf_TZ$L;qMRpN@_$%
zUZLW=bS&wQ?p}5)ekzAY8@ze+@JM>~A}Ql-H(3Cgh}mlZ7Ypdc5@HpRH-%G_Z+}^&
zMmF%+^n;_#b=oW5ySi41rNZ1}Nzyx>GuK~-AE7|ob26F5fE~@?rGGuXmETEW(8Nxr
zSI-k%4!V0sG-JD6-9h1Kee}8gvIl9IM~5`a_*%aiLPApDzy&-%zi)%F>|$RIa(r}l
zTvqJ{g$9TInE82K7?aZ`t5h0?!@X)ov>|l&WCpZS93}(;XB#X|0lk>2D?g9GG>C>^I@gD>MW_uBj88O1-CIv%&1jz&o@
zuvE2JJ_f+HvEkD14{l0fZmk(yps&;Y69%KZ`ou`_Yuq-vFK$b1M0V>PCWWJIf
zrK>zL`}+}yHU}dJGVW}oS8dB%U4&EJVU%k%Nbic7f4pRqAQl6zw*Qo3m0MuidR3=j
zSGcdH6#^NnVtvd6sKuIhNxn<*kmT#DQHv(Rlz{WAi;1AqO;U4J_3#_3I{kpvEV
z;?B`*aVb`KG}iq4GClb7yTG((eig!Kybn!R0|Zz;u=4w3Y58u4j(@PZ>nW^jY^@=}
z;qVT~(A)CF2(KT(7K2oKza|&Gcl7Zh29#8~+fFt)!I;)lyK=v^r+JQ5S^i^P9UyT@
zzbswE$I>)ZyEDOefjkMgiS!>7+5#WFqWRk-I@RMkTCHBCg`07%4XrSW^ILRbKzJ%D
zOj_R)s0$h`(Br&WBFC^e(>^@eV_FO+2#?Jquosn&zD%QDI?U_J@(RR#m>b~Om0-Go
zDG&H6TcZ*aH8(rJf4@j^S~vUU*h;L`jj8?Rdi0p}Z8t&w*x@nNFnYRyS=(i;
zkefbMSTp;=)r#deVp%t`4gKZE^XfrjC8mm&o8HzgKyMQ&w@({p*IX5B!Jh^up$~c{
zxGo4LF!fy%$l6446R9(Aym}C*4-?_nH`cCEDbSuHuo)1aFFHGkckGKDF0@p`#U
z?(q9cK%E)u9Rw3tD-eG3+m&Af9=xgrUwJ*O;oPse=(ZO%4~%7PXg!t7>B(js!cD>2
zddR6LIsffzq!Pk+MPbliYg^3#F*KXLYVNPF1vT>%%mqJh_ebL{nU>BjvH4H31lxew
z*bNkiDKJMvhQCh@Y3zeaif?2nK^#|UtH$L~pD}}9m4roGoxIM}r(*Ie&rUSeAhYHe
zXt+IEl@QjD?37LfB7EL}mqjiz6!R0KD!`B@<*gYJ2M%k+o4>|tmWhfV?{?_D0wg)?VkMV{CVn!xw58eRqf~%fN0-UZSQ2
z3a0j3#mCnRACijJbKY@LiP7sVlz#~ACrnWEv4gE-DUS+Blc4*UEf%|4pVOC|U{fC#
zuS3H~gzf;x9pcH_kZy@k`aqf_@X{)W
zVHgYP45Kv%oW|qK1YX()ja}_zeRkg--vcltyynLU@Y1VQ3Ed4e@u1oT^@)DL$Ob0La4R}_OCqVm
zIYNjb*5m4;2=kEyL%E*}uZqVHM}?3M
z(s;+mJEe7x$w{C|+a{Z`r?NO;Mhebf8hdbwa2>0KX_xz)#@vL;iyzD2#Dnd%&GN0BI%u&qCpIKNvg;%WNFERsQ%Z~%MHfCV?8EKl_u)Q+a{bo9pdDZA5qey
z)-{t6aVcb*WNOr7+m^|Q$CObR6Tj@?MrBrLWVP@=j!!Y9x_~1XY@FeJjU8S*d|vY7m$*8CRqNK>si~JGS
ztzi9|s|qXp^k=mVO0O^1$U(QlAktrbhEe-#uzs(zIiP}FEY@&6?EyZ>ZcW5W=yj*!
zEa!Aoh0VKIM&^gsjaSCXi$%kj->5LjcJyY6a`8^>c?UEleE>He
zbu7e(3oz;0y&h#kJIHj1#vTN2y|Cu`rY;0!DPo=M
z?JmNy{;HtH20Skk5l0v+znCnhrLYVcFW|(JKfhptBK>O>CnUyST5MQMoT%
zIdb6^e0ae+`5#gOb}{|J!XOB7%`u_ITE)Z~khu-}Os?9#9LWpqBFx?z#TDRoZY_Ix
zxpqpVys(0@QV3+2UNxnT@vxY0dFey9B6Y7v4?Q-sJzARTDjn={+HS4BCVsd{NLchiuryAa(67FS6Mp9Wwh
zKMy>ayHPy%X1bQ)shu1_;PCY)N)P6NdFGoxgmtmwbrXEG(Uf0r`3CHlq22{p(%XW3
z=n2m;akYe{KL-6H6_jU4_JdFcU`4s+VbLEg6U*eRnS!qWuvRXo@F~+`)@ETPkujF`bZiH2q7!@sCH(h@xgf8$@g6R*loVpX(^HR
znhZIaSwUn8+thd=i^OAcTgN&8)YP4!VDeRs8BGz@&D0lCxYMGdS^Obtj?FeMoMGzw
z`O!Xx$zVbGERGj0gq~2JBeibJBnxZiO^!h%Y8x9y?_z_P=UGc$d8R1rdv2dE$5;Yy
zJAcl1SD*w0F+p*`sDo~*)0eq^3hiOffsk^tv$D#MuhdP7s>Qh8EVeR6yQwo?@ed#N
zj-J^Fn3;*KjT5aj6Wk?Bofo$w!p78)=j@p@l}RHcFvQ8{J~KUkS|SU~VYe4j8P1Rc
znbH9zXG2<{C_bd#OMG%XuIe(x$dwgeOEV48D-m*47Zn*t%=Kdc(QA|Mh4p)yNl?~S
zKy&>Xsg&3cWSqoKwfLF{Tk4%i{X~PUc6KTR1XvZb{(DYMw^P*yL9
zoJdfz#VI{BA5*#*D>IELbjqz8N*Iu(yk
zU>m3H9vf5eL{!me#~21CT7kLd1d0_PXKznD8>CE6%=U?fWpLSYlDMoBQ0u0nQfWWJx(^-M|xDAI;+(Y7C^;w6pjkZs@0WG(j>Hk=>>&d@lfS9j;|
zdNq6F0`$@SE8&E4(fDttX5y8QPbPfAS$KV+U44-PJ_d6<7WLfqIYkod1sB{Eng26D
ztG7*-`-*&K@%f~!Wn`3P>vF?vF`4K3?9%Yc00%Y9aj2);*0{;mv{>!>NOt&bC@TLq
z@p9PWvohiyDJ(Xq;p3gU2m{P}G`|#)pYZz1kKT3_F^H1yM8?bmDH9jR`UNZ$EI(iq
zNzK~ibR+=C6V3CV@tMa2(WQ8y=hZj+&6y_aK1sH#+s|BXcO=0fETq&>hTa1s7om&j
zkwY{3^2S)d(NpkGj3$WX4dLMoM^MFo>D^sr|INhULHTS_eu1qhZyLZk)7rs-%twxNmQhB^-TZM&W3nh|?Q)cJr+75oSSBQ%-Zl=_J9!5CS(y2#3+Dhyn1HY>8qachsL?#8;qGT
zLa&h>uUY9(5(JDwK-sv7T~QRE6j*2gjVPvwMrJeu*&{INH2=|zDpoR-&nUecHG|c+
z9(Pr-gilZwLr8a>dUMnRdIs6q)yht`)m4ztY3}P*G~fADiFUyc0Y@?vsI+=c?DE@^
zFUrqOPZ~P6Tj@Wq%W%(ujWyGdFXj{uyXHs%N0Pkg{Va??EhWxF7}%pO81p|?@ejg(
zWQLl7^A{xZV*RZp+xh*+LFz+>mlTQ!YS@Jt&XZiH)OMnBxH0i{+wv#6|H}x!N_coFYFewLsn~l+e;};>3VYvOKIR|gj!eBve;d8Q~HUcwfC2DT!
z&9GvegGh(5O?!2M2(=ZSMysy}v|i?X6(G+3Zu*0M-c#3tgAK>7o$}UJP3;rBsm=5+
zL7V|d3pfE=oBMy~nlihg`??-@a_;osqi(I0UC_GW^!!L`vG!bYr8Odn|Cv)4py@#G
z@6r}8vBU)`$53xOr}kN9)O`FtmIm{EYpFUKT~aI=UQEG1JWR>OGpzrC1S9*`3`KC*9h*Muq6ZDY~wVo(D)d3KmhYs5fXtP|qs-M1r-;(9D9oMomk?
zvKgUCgT;p}166I!4qVC)h_}%4t4!|iVz!PK3Q+Q;3@b`Y`e8?Lhy)?t2{%$2iYzYg_cDvMYcosW5sM
zx&BUjZ!JROsmdhjHQQ8ZVcnly@4$u+o#fC-lGHs0D#xus7?y
z%hnO)SLffKvTN{5yijRmexLJVA8y7oIo6GL*m&${-pU>
zQk?yZZdTWM$v9~pcDFKt*6WVH%q#xTOHFlNa#E1jSLUj%?XKKL+2#ZGf}wAKV|m31
z?;2qJ55EGBYmKx^=-#9A(nf!Fyb)PxmngC-)jb4XAYat8xM|5SNHzXTTN|dDDe8mA
zx>p;4I%TD3Jl-L#*fX!+<59YQA>+S5aFDMY**I3;2sdk>EydO0R8Wv*%N{hwJ~i+X
z+g6KY;$z&7;^Pj?zQ^v22m3ysT2XhlTZ!LiyjO=c`kCQ~>>Q)=>sIc>N^$bfWX@&b
z%v?JB(|z@Xzns{{Tc^Glub@%7BP!BwT1HA6+(q#jz+I;a)QzVjDJr})aOGUTu>D@Y
zJt_cD-;tbCn5Vp(Ga^sIMUa605V@OqaUn+H6MrAUQPfUBz%Nu?hP)!}A}fxU$|tX(
z(vyN=&NG#gT0j($f@ch1Jl}p95c%ltW;iX*)cX&HTrC8F1c=zYa=;^jsoKAGt8-+4
zbf6*`e!FP>
zALWx2ev?M|HrYU+X&ixsE*2M{rYe$?JG{(wBHdYCwjf~4m2B*;{`dVBB#=LuUep#V
zueTEyA4a~NpkC>m##chp6bD1fXsEP?u-&-vt$TTLR8$Ijml97{%`Q7_Ifto&7*<=Q
zX$@&0-pvdH(Vh1DDT?aedjrKudI;@4Yr|7AnOo`u#6Kv^z{2A?>7fei=L+9E|2GAP
zoFX?+o4bCWr5=8SY{MkO+DHnDp9$!W=4x`1hF_i`_t8F_OcDN99qT9j
zW-~EOy~ZioW}5!$P)EzW=`m*U`h`gA?{|Vb-L^(M(><{ZW|rTL7KWgFh^3E_mN;s^
z>0x_hbjjCrK-%@E^eE)&4)b8Yj%n+Lw#2)stD3ja3H#@+{@=>pM@*_%0WH#R(iRp3DSx-^UjHd
zBJ~sbFxW1jEo{;x7F7uSI$_mb3E?m$RSoJu-fR>O+dk!0M{^`iZ0S|4r4Thu13`
z=!)vHvvgE)~<^W^BXrM&=6EJn6X9{frZjlU*k9zNk+?Gjd&}OSOZ+d{~nzsUTbA
z6XABnJ7dJ3ifS8Vr;3mfo71=|UBwtfo2$Un=ezinX$0k|8Oi)Yv%me!zsShnoa7HG
zDw4&vjP*tYT_G|>!)Qfq_r&NA*)i~tJ;&ZeDm{e7@vSI}auH@Y?hcAn?inL&PAjuY
z9@8yyVC}*P(xKQ-NPc#t2yM|XQN@7*+Y=xqHPcLMdR%0azjx8!J(L@Tl&{X9oV1A^2ep7pd6y6&99Afs?am?Lubrf%LC)
z|NoEN4RX=zQthRmsQ3*=?@om8sRv9M-_1ZIKmNB2gO5m1
zxRqOdSJbdJz>uwFSNmmD4wHxlUUBQJhUiA#s1$8W&6|5FkPUvxokx
z#gID9Hs#O#?d|QnHpDnk(Oo3k-2wXkGP3{seVJ5Wcq6T3
zvF)w;V{04T;NEea`P`F}FuRg_@l_>a6yXNj8T_|-KR@#eTI=Ar13VjUjw3}
zzd*62_^Pp-!${8+8i>=X;rg;is#KjFo*I>j5c~`ZzmBwS`j_tbKREm6WuJt1kfDte
zX*fYk2hZ2&o>*mf25uLJ??H5#jjGt=Y<_HL-iS7~-}#Q1ed&BYR$pC4`e=f-Rn(e8
zjlT5LUvkpsdTJro?A9t!N7nQARhClW+_n&Bmda`TPs_C%XTIln?~Xmw{8QwcLH`2H!S|Qw
zOk7aJG~v0dcm3i?viwH>yTf|+rur+RmG@uC!3c93iM=>aD-1~_rN{n50g~3BoGWiK
z^XZ<`dxo^^Y1><#2g8?}yQ?GOKfln#oQB?2gBlkyd)@opCggA8lrrV05~>X>XrdZI8E5*914KnY{Z#ELpHTvk17O!chy
z%(w1om=C_4J-QA)T=cQL8vpRWrH)Aj3h55mjVEQBAB^M_qTDk)ABIngxLH8B65DjrN0F=PGYk)3-7IdvN<6-&}+&6
z=8P3WuWiwl%`Gh_#%~q*EU^Cl*tzKTkWpUg;}5-o7Cau`y20{Kv|H`hYy2a6j1X=V
zOQxW<@eHo*i4kAc4WU(xxnJ_ccI~FVz8K*P5wbY~{A1}H7BieKH7A1WU3>yNQB^5|
z+3>Piyd1VDTuETb=Vz<>>}~eMzpa$t9Rg(JI&L)>7KRx=6GcaM{Xhsfp&eAwVNh|U
zdaYUJ*NshJUgWwOD5RNvY{dV)ms%c{Yz$|)_4~-qPLPPE3m;8iRTV?ig3mC=Gvo1e4i0KwK3
zO^$rpY12;hj?yFLrzAH$I6_+??z6hto;J4|e2X@)_8u}TFUWsdGs+ls<0|s+R%9Lr
zCUUUHCFu?E>tH*v-`jf)r2(Juii=X1n1?$_{QPeLy!F<~zgGIfR_6
zwxZ>wsui965jY`Wk)5OM>A2LQ5L6e>>e=zUb`cELuUR|~_%@~s-maP6@{-5p!F8L@
z+btceKdnD>q<93E>9q3#F1w)d@4>2Dv`p5{*TWa!P4AyH3+oQx{?#X)(N(L)H7Jz>
z2@)@M#&aHPj&k+OWwVX+dQ=pi)2iNE-mRtE+gbU8I4x1Wi#CTvuugW@(E%2PZ@8V$
z!C4GdmP<8N;9P~D7E6E97%11#{)dx*Rr(wZU%C_O)s_Amt<_TuSsWjI|=tj>Uj2*Agdn
zbQE5N4{SdPg-nW7IZ>noU_S{*@JF#v1EIgyr=ZgbQamJ^$Tkd)!RzNI%Mm2diYpE^
ztXLC}s(|&*G0B?B8-VeX1L#gfQ)2n+12~)F17qilJ=NrxI?wUX{P{3W<45q2QGvP8
z(kyodR&t#X8D|YEj9?{+T+8XV@;}ltVjC-cUQhfWLx;%;tm?ildfto=Dr;XhKW>BV
z|BvFY7WrPvn^xc?4nMzlu-l3v^28M>e`K)U(Q}8QZ!ACInnPaD2Aw*ksbd`eE#XOz
zl@#Ku=~n>7sfb;@pn0-W+iH@k=_(#-rh_rr`EBJ~Xm<00=porXFEgp#K-$(`362*=
zMz?;T0rH??topRFI?F<-ga=h=WL%`?#RMdg`jaS#$taO-)C%+90I0toQqH1Q~BAmvO+@KFeyx)ny94gav}
z5c9Er9LH0xix|hOZ1`crrxSMJNIq{t$Ah5_tT;dAM}yB8>sTg_(&V)3j%iCR5rRPG
zjlAbJrhd2oJNI#+Xwo%)e*Uc}8&AW>U24ISgG^^TZ?Z27S`KoLF>jA(<>@E;N;yx7
z@h;c4)}8nDl}GgkEq44~I|Lh3y$@{%{9Bn06JJMZRn#55pI0`B|KtGG*ZIGyc0T=n
zdD{2%JT)Yly@7MvaTktZ^4vm-I^p6UX;5AusaQjohW*~s($e!MA|kdKWCzybPP~8L
ziTSrYKY(@jv9)o$m!|D-x;m|AC6`y_BOBwoWlnQlWgz;YVKk3;JJPB55B}Ze>k+ye
z)6b<(41^bC*%si0iM)4vniVCZjIFXc^0HsesE~2>%QuV?mCkGDf37S
zam3$VUnj(2an(tYYiy2;B(`_R-J5XDn)a#aHIA(W{PunTURhFvKv7|qWQ@opnFKvp
zqxcx^$Ey~V?Q{0w7EFPN7IZM9Mk9$d_^|37JJEblgGZ~H*RxArk6R&0q1M&?*vGV%
zKr0zjoCw0Kjc=q`==I#8-8nWk)vDivBKD^~;Zba8^pkGYt;StMLev~S>T@N<4DMaNz00&AbW^P&CXH>DO6
z@+X!;-y3Iecj@%qM>W^qbFMim$=v`aeFTJd&s#4#E>|5U-xZ0ry}e$@m*Upg=s?AC
z@3Q3pBTFBNd@RTRx^ra~R-bDJhhOzLEH?fO6KZwqsbJ|(sr1ULJjc#hl{lo*jZ
z*m^fg{t!jD*h6|U;=y`unC!(7DDwvPTy-GOJur3#-ljnR{4Ic8_t+P_5$1UKY4Idc
zJgxKbU)IUb0CN>c#FFyx-
zz6C?PSu){1p+edx6iyIx=m&z6U(gnG7+02LzyriOlBRXD@t2osd{Gm!{p5xuP@*tC
zIJmO9=zdau=ehmcH91Il7yg~|I0
z>F&JiNgh9%>^`x#e#{qgLBImS_DmO?4COYBzW?#=08jeQj=1U2Lk~Z}zSd4`If=Mc
zeyCh~SiM1R`A~TNR65hCrgGIJ^?W>H${cbBi|eU(8G7JfU!ta4YM9-7Z)u%WB*krP
zi_-k>uGXcyFa&6{=gQXPbBnSaow%JV8>|iex%h+B>1_cS}E7#71(Ze_36Ykr
z85)t4ZbVAyZWy`+327L*yM~&X_vYDqe}B(@_uhYc9C*ykTI*ixTGx4g&iiL`x$R?a
z#_yJsn%|F!+ax|xd?>Ed?SB0myG4bAb6;2P{s-DC;sFs(kzSQq;{s4J_1CstCi0!o
z=43x|tdayWT+N-c0=hn`?Y7{na}ht;d5={^de_TuBd$}1iervF)K*)GAj<};M%)fW
zV0ZJSD^}k_&}?ihFOCw^q6rvzwP{10zDwqS!JMxPquy#exh`?=eKp7uB>+2)a{m!7
z-AfQ5yGU}=Ox;DY+-RDGPL^wpNUiVAVxKY&FQ%DayH-BrEkWx6N7r{Yj80iJ%1ksl=jgs
zX0{F