From 81e9c7732a193e11a480d28a73c0aa4e9281f37d Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Thu, 22 May 2025 19:50:10 +0200 Subject: [PATCH 001/199] wip prototype for test fn plugin --- code/core/src/csf-tools/index.ts | 1 + .../csf-tools/test-syntax/transformer.test.ts | 91 +++++++++ .../src/csf-tools/test-syntax/transformer.ts | 192 ++++++++++++++++++ 3 files changed, 284 insertions(+) create mode 100644 code/core/src/csf-tools/test-syntax/transformer.test.ts create mode 100644 code/core/src/csf-tools/test-syntax/transformer.ts diff --git a/code/core/src/csf-tools/index.ts b/code/core/src/csf-tools/index.ts index a2dcddb3cc0e..9d5f784798ed 100644 --- a/code/core/src/csf-tools/index.ts +++ b/code/core/src/csf-tools/index.ts @@ -3,4 +3,5 @@ export * from './ConfigFile'; export * from './getStorySortParameter'; export * from './enrichCsf'; export { babelParse } from 'storybook/internal/babel'; +export { testTransform } from './test-syntax/transformer'; export { vitestTransform } from './vitest-plugin/transformer'; diff --git a/code/core/src/csf-tools/test-syntax/transformer.test.ts b/code/core/src/csf-tools/test-syntax/transformer.test.ts new file mode 100644 index 000000000000..45abf7c8142f --- /dev/null +++ b/code/core/src/csf-tools/test-syntax/transformer.test.ts @@ -0,0 +1,91 @@ +import { describe, expect, it, vi } from 'vitest'; + +import { testTransform as originalTransform } from './transformer'; + +vi.mock('storybook/internal/common', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + getStoryTitle: vi.fn(() => 'automatic/calculated/title'), + }; +}); + +expect.addSnapshotSerializer({ + serialize: (val: any) => (typeof val === 'string' ? val : val.toString()), + test: (val) => true, +}); + +const transform = async ({ + code = '', + fileName = 'src/components/Button.stories.js', + configDir = '.storybook', + stories = [], +}) => { + const transformed = await originalTransform({ + code, + fileName, + configDir, + stories, + }); + if (typeof transformed === 'string') { + return { code: transformed, map: null }; + } + + return transformed; +}; + +describe('transformer', () => { + describe('test syntax', () => { + it('should add test statement to const declared exported stories', async () => { + const code = ` + import { config } from '#.storybook/preview'; + const meta = config.meta({ component: Button }); + export const Primary = meta.story({ + args: { + label: 'Primary Button', + } + }); + + Primary.test('some test name here', () => { + console.log('test'); + }); + Primary.test('something else here too', () => { + console.log('test'); + }); + `; + + const result = await transform({ code }); + + expect(result.code).toMatchInlineSnapshot(` + import { config } from '#.storybook/preview'; + const meta = config.meta({ + component: Button, + title: "automatic/calculated/title" + }); + export const Primary = meta.story({ + args: { + label: 'Primary Button' + } + }); + export const _test = { + ...Primary, + tags: [...Primary?.tags, "test-fn"], + play: async context => { + await (Primary?.play)(); + console.log('test'); + }, + storyName: "Primary: some test name here" + }; + export const _test2 = { + ...Primary, + tags: [...Primary?.tags, "test-fn"], + play: async context => { + await (Primary?.play)(); + console.log('test'); + }, + storyName: "Primary: something else here too" + }; + `); + }); + }); +}); diff --git a/code/core/src/csf-tools/test-syntax/transformer.ts b/code/core/src/csf-tools/test-syntax/transformer.ts new file mode 100644 index 000000000000..a8f16e71aad2 --- /dev/null +++ b/code/core/src/csf-tools/test-syntax/transformer.ts @@ -0,0 +1,192 @@ +/* eslint-disable local-rules/no-uncategorized-errors */ +import { types as t } from 'storybook/internal/babel'; +import { getStoryTitle } from 'storybook/internal/common'; +import type { StoriesEntry } from 'storybook/internal/types'; + +import { dedent } from 'ts-dedent'; + +import { formatCsf, loadCsf } from '../CsfFile'; + +const logger = console; + +export async function testTransform({ + code, + fileName, + configDir, + stories, +}: { + code: string; + fileName: string; + configDir: string; + stories: StoriesEntry[]; +}): Promise> { + const isStoryFile = /\.stor(y|ies)\./.test(fileName); + if (!isStoryFile) { + return code; + } + + const parsed = loadCsf(code, { + fileName, + transformInlineMeta: true, + makeTitle: (title) => { + const result = + getStoryTitle({ + storyFilePath: fileName, + configDir, + stories, + userTitle: title, + }) || 'unknown'; + + if (result === 'unknown') { + logger.warn( + dedent` + [Storybook]: Could not calculate story title for "${fileName}". + Please make sure that this file matches the globs included in the "stories" field in your Storybook configuration at "${configDir}". + ` + ); + } + return result; + }, + }).parse(); + + const ast = parsed._ast; + + const metaNode = parsed._metaNode as t.ObjectExpression; + + const metaTitleProperty = metaNode.properties.find( + (prop) => t.isObjectProperty(prop) && t.isIdentifier(prop.key) && prop.key.name === 'title' + ); + + const metaTitle = t.stringLiteral(parsed._meta?.title || 'unknown'); + if (!metaTitleProperty) { + metaNode.properties.push(t.objectProperty(t.identifier('title'), metaTitle)); + } else if (t.isObjectProperty(metaTitleProperty)) { + // If the title is present in meta, overwrite it because autotitle can still affect existing titles + metaTitleProperty.value = metaTitle; + } + + if (!metaNode || !parsed._meta) { + throw new Error( + 'Storybook could not detect the meta (default export) object in the story file. \n\nPlease make sure you have a default export with the meta object. If you are using a different export format that is not supported, please file an issue with details about your use case.' + ); + } + + // Generate new story exports from tests attached to stories + const newExports: t.ExportNamedDeclaration[] = []; + let testCounter = 1; + + // Track nodes to remove from the AST + const nodesToRemove: t.Node[] = []; + + // Process each story to find attached tests + Object.entries(parsed._stories).forEach(([storyExportName, storyInfo]) => { + // Find all test calls on this story in the AST + ast.program.body.forEach((node) => { + if (!t.isExpressionStatement(node)) { + return; + } + + const { expression } = node; + + if (!t.isCallExpression(expression)) { + return; + } + + const { callee, arguments: args } = expression; + + // Check if it's a call like StoryName.test() + if ( + t.isMemberExpression(callee) && + t.isIdentifier(callee.object) && + callee.object.name === storyExportName && + t.isIdentifier(callee.property) && + callee.property.name === 'test' && + args.length >= 2 && + t.isStringLiteral(args[0]) && + (t.isFunctionExpression(args[1]) || t.isArrowFunctionExpression(args[1])) + ) { + // Get test name and body + const testName = (args[0] as t.StringLiteral).value; + const testFunction = args[1] as t.FunctionExpression | t.ArrowFunctionExpression; + + // Create unique export name for the test story + const testExportName = `_test${testCounter > 1 ? testCounter : ''}`; + testCounter++; + + // Create a new story object with the test function integrated as play function + const newStoryObject = t.objectExpression([ + t.spreadElement(t.identifier(storyExportName)), + // Add tags property that preserves existing tags and adds 'test-fn' + t.objectProperty( + t.identifier('tags'), + t.arrayExpression([ + // Spread existing tags if they exist + t.spreadElement( + t.optionalMemberExpression( + t.identifier(storyExportName), + t.identifier('tags'), + false, + true + ) + ), + // Add the test-fn tag + t.stringLiteral('test-fn'), + ]) + ), + t.objectProperty( + t.identifier('play'), + t.arrowFunctionExpression( + [t.identifier('context')], + t.blockStatement([ + // Add code to call the original story's play function if it exists + t.expressionStatement( + t.awaitExpression( + t.callExpression( + t.optionalMemberExpression( + t.identifier(storyExportName), + t.identifier('play'), + false, + true + ), + [] + ) + ) + ), + // Then add the test function body + ...(t.isBlockStatement(testFunction.body) + ? testFunction.body.body + : [t.expressionStatement(testFunction.body)]), + ]), + true // async + ) + ), + t.objectProperty( + t.identifier('storyName'), + t.stringLiteral(`${storyInfo.name || storyExportName}: ${testName}`) + ), + ]); + + // Create export statement + const exportDeclaration = t.exportNamedDeclaration( + t.variableDeclaration('const', [ + t.variableDeclarator(t.identifier(testExportName), newStoryObject), + ]), + [] + ); + + newExports.push(exportDeclaration); + + // Mark the original test call for removal + nodesToRemove.push(node); + } + }); + }); + + // Remove the test calls from the AST + ast.program.body = ast.program.body.filter((node) => !nodesToRemove.includes(node)); + + // Add new exports to the AST + ast.program.body.push(...newExports); + + return formatCsf(parsed, { sourceMaps: true, sourceFileName: fileName }, code); +} From 1803fb02dc00900ddf1b735060cf41bfbec1d286 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Sun, 25 May 2025 12:19:04 +0200 Subject: [PATCH 002/199] continue prototype --- .gitignore | 2 +- code/addons/vitest/src/vitest-plugin/index.ts | 2 + .../builder-vite/src/plugins/index.ts | 1 + .../src/plugins/test-fn-plugin.ts | 24 +++ code/builders/builder-vite/src/vite-config.ts | 3 +- code/builders/builder-webpack5/package.json | 8 +- .../src/loaders/test-fn-loader.ts | 34 ++++ .../src/preview/iframe-webpack.config.ts | 10 ++ .../components/test-fn.stories.tsx | 27 +++ code/core/src/csf-tools/CsfFile.ts | 101 ++++++++++- code/core/src/csf-tools/storyIndexer.test.ts | 60 +++++++ .../csf-tools/test-syntax/transformer.test.ts | 67 ++++---- .../src/csf-tools/test-syntax/transformer.ts | 158 +++++++----------- code/core/src/csf/csf-factories.ts | 6 + code/core/src/shared/preview/csf4.ts | 30 +++- code/core/src/types/modules/indexer.ts | 1 + .../react/template/stories/preview.ts | 4 + .../template/stories/test-fn.stories.tsx | 27 +++ 18 files changed, 421 insertions(+), 144 deletions(-) create mode 100644 code/builders/builder-vite/src/plugins/test-fn-plugin.ts create mode 100644 code/builders/builder-webpack5/src/loaders/test-fn-loader.ts create mode 100644 code/core/src/component-testing/components/test-fn.stories.tsx create mode 100644 code/core/src/csf-tools/storyIndexer.test.ts create mode 100644 code/renderers/react/template/stories/preview.ts create mode 100644 code/renderers/react/template/stories/test-fn.stories.tsx diff --git a/.gitignore b/.gitignore index 9bf3c7eb5332..d9481a41fbb1 100644 --- a/.gitignore +++ b/.gitignore @@ -57,7 +57,7 @@ code/bench-results/ /packs code/.nx/cache code/.nx/workspace-data -code/.vite-inspect +.vite-inspect .nx/cache .nx/workspace-data !**/fixtures/**/yarn.lock diff --git a/code/addons/vitest/src/vitest-plugin/index.ts b/code/addons/vitest/src/vitest-plugin/index.ts index 0cc23041db86..d6f676621c0f 100644 --- a/code/addons/vitest/src/vitest-plugin/index.ts +++ b/code/addons/vitest/src/vitest-plugin/index.ts @@ -27,6 +27,7 @@ import picocolors from 'picocolors'; import sirv from 'sirv'; import { dedent } from 'ts-dedent'; +import { storybookTestFn } from '../../../../builders/builder-vite/src/plugins/test-fn-plugin'; // ! Relative import to prebundle it without needing to depend on the Vite builder import { withoutVitePlugins } from '../../../../builders/builder-vite/src/utils/without-vite-plugins'; import type { InternalOptions, UserOptions } from './types'; @@ -401,6 +402,7 @@ export const storybookTest = async (options?: UserOptions): Promise => }, }; + plugins.push(await storybookTestFn()); plugins.push(storybookTestPlugin); // When running tests via the Storybook UI, we need diff --git a/code/builders/builder-vite/src/plugins/index.ts b/code/builders/builder-vite/src/plugins/index.ts index bc72dc8755d5..97d9b04b8bae 100644 --- a/code/builders/builder-vite/src/plugins/index.ts +++ b/code/builders/builder-vite/src/plugins/index.ts @@ -2,5 +2,6 @@ export * from './inject-export-order-plugin'; export * from './strip-story-hmr-boundaries'; export * from './code-generator-plugin'; export * from './csf-plugin'; +export * from './test-fn-plugin'; export * from './external-globals-plugin'; export * from './webpack-stats-plugin'; diff --git a/code/builders/builder-vite/src/plugins/test-fn-plugin.ts b/code/builders/builder-vite/src/plugins/test-fn-plugin.ts new file mode 100644 index 000000000000..7aa8f2d06bb9 --- /dev/null +++ b/code/builders/builder-vite/src/plugins/test-fn-plugin.ts @@ -0,0 +1,24 @@ +import { testTransform } from 'storybook/internal/csf-tools'; + +import type { Plugin } from 'vite'; + +/** This transforms the test function of a story into another story */ +export async function storybookTestFn(): Promise { + const storiesRegex = /\.stories\.(tsx?|jsx?|svelte|vue)$/; + + return { + name: 'storybook:test-function', + enforce: 'pre', + async transform(src, id) { + if (!storiesRegex.test(id)) { + return undefined; + } + + const result = await testTransform({ + code: src, + fileName: id, + }); + return result; + }, + }; +} diff --git a/code/builders/builder-vite/src/vite-config.ts b/code/builders/builder-vite/src/vite-config.ts index 147f6419dac9..da8d15948181 100644 --- a/code/builders/builder-vite/src/vite-config.ts +++ b/code/builders/builder-vite/src/vite-config.ts @@ -25,6 +25,7 @@ import { pluginWebpackStats, stripStoryHMRBoundary, } from './plugins'; +import { storybookTestFn } from './plugins/test-fn-plugin'; import type { BuilderOptions } from './types'; export type PluginConfigType = 'build' | 'development'; @@ -85,7 +86,6 @@ export async function commonConfig( } export async function pluginConfig(options: Options) { - const frameworkName = await getFrameworkName(options); const build = await options.presets.apply('build'); const externals: Record = globalsNameReferenceMap; @@ -99,6 +99,7 @@ export async function pluginConfig(options: Options) { await csfPlugin(options), await injectExportOrderPlugin(), await stripStoryHMRBoundary(), + await storybookTestFn(), { name: 'storybook:allow-storybook-dir', enforce: 'post', diff --git a/code/builders/builder-webpack5/package.json b/code/builders/builder-webpack5/package.json index 171f66d93eed..a69781b9028d 100644 --- a/code/builders/builder-webpack5/package.json +++ b/code/builders/builder-webpack5/package.json @@ -41,6 +41,11 @@ "node": "./dist/loaders/export-order-loader.js", "require": "./dist/loaders/export-order-loader.js" }, + "./loaders/test-fn-loader": { + "types": "./dist/loaders/test-fn-loader.d.ts", + "node": "./dist/loaders/test-fn-loader.js", + "require": "./dist/loaders/test-fn-loader.js" + }, "./templates/virtualModuleModernEntry.js": "./templates/virtualModuleModernEntry.js", "./templates/preview.ejs": "./templates/preview.ejs", "./templates/virtualModuleEntry.template.js": "./templates/virtualModuleEntry.template.js", @@ -104,7 +109,8 @@ "./src/index.ts", "./src/presets/custom-webpack-preset.ts", "./src/presets/preview-preset.ts", - "./src/loaders/export-order-loader.ts" + "./src/loaders/export-order-loader.ts", + "./src/loaders/test-fn-loader.ts" ], "platform": "node" }, diff --git a/code/builders/builder-webpack5/src/loaders/test-fn-loader.ts b/code/builders/builder-webpack5/src/loaders/test-fn-loader.ts new file mode 100644 index 000000000000..523cafce14b7 --- /dev/null +++ b/code/builders/builder-webpack5/src/loaders/test-fn-loader.ts @@ -0,0 +1,34 @@ +import { testTransform } from 'storybook/internal/csf-tools'; + +import type { LoaderContext } from 'webpack'; + +/** This transforms the test function of a story into another story */ +export default async function loader( + this: LoaderContext, + source: string, + map: any, + meta: any +) { + const callback = this.async(); + const storiesRegex = /\.stories\.(tsx?|jsx?|svelte|vue)$/; + + try { + // Only process story files + if (!storiesRegex.test(this.resourcePath)) { + return callback(null, source, map, meta); + } + + const result = await testTransform({ + code: source, + fileName: this.resourcePath, + }); + + // Handle both string and GeneratorResult types + const transformedCode = typeof result === 'string' ? result : result.code; + + return callback(null, transformedCode, map, meta); + } catch (err) { + // If transformation fails, return original source + return callback(null, source, map, meta); + } +} diff --git a/code/builders/builder-webpack5/src/preview/iframe-webpack.config.ts b/code/builders/builder-webpack5/src/preview/iframe-webpack.config.ts index 545fa159695f..805b4f623f8c 100644 --- a/code/builders/builder-webpack5/src/preview/iframe-webpack.config.ts +++ b/code/builders/builder-webpack5/src/preview/iframe-webpack.config.ts @@ -218,6 +218,16 @@ export default async ( }, ], }, + { + test: /\.stories\.(tsx?|jsx?|svelte|vue)$/, + exclude: /node_modules/, + enforce: 'post', + use: [ + { + loader: require.resolve('@storybook/builder-webpack5/loaders/test-fn-loader'), + }, + ], + }, { test: /\.m?js$/, type: 'javascript/auto', diff --git a/code/core/src/component-testing/components/test-fn.stories.tsx b/code/core/src/component-testing/components/test-fn.stories.tsx new file mode 100644 index 000000000000..4c62680e87f1 --- /dev/null +++ b/code/core/src/component-testing/components/test-fn.stories.tsx @@ -0,0 +1,27 @@ +import React from 'react'; + +import { expect, fn } from 'storybook/test'; + +import preview from '../../../../.storybook/preview'; + +const Button = (args: React.ComponentProps<'button'>) => + + ), + }; + }; + const groups = [ allTags.size === 0 ? [noTags] : [], - userEntries - .sort((a, b) => a[0].localeCompare(b[0])) - .map(([tag, count]) => { - const checked = selectedTags.includes(tag); - const id = `tag-${tag}`; - return { - id, - title: tag, - right: count, - input: toggleTag(tag)} data-tag={tag} />, - }; - }), - builtInEntries - .sort((a, b) => a[0].localeCompare(b[0])) - .map(([tag, count]) => { - const checked = selectedTags.includes(tag); - const id = `tag-${tag}`; - return { - id, - title: tag, - right: count, - input: toggleTag(tag)} data-tag={tag} />, - }; - }), + userEntries.sort((a, b) => a[0].localeCompare(b[0])).map(renderTag), + builtInEntries.sort((a, b) => a[0].localeCompare(b[0])).map(renderTag), ] as Link[][]; if (userEntries.length === 0 && isDevelopment) { @@ -160,15 +170,6 @@ export const TagsFilterPanel = ({ Reset filters )} - setInverted(!inverted)} - active={inverted} - > - {inverted ? : } - Invert - )} From 54ecd3a23cb0e6391b970e2c6176da28eb8c2861 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Thu, 4 Sep 2025 18:35:15 +0200 Subject: [PATCH 151/199] Enhance codemod tests and support for non-conventional story formats in Storybook. --- .../helpers/config-to-csf-factory.test.ts | 25 ++++-- .../codemod/helpers/config-to-csf-factory.ts | 48 ++++++++++- .../helpers/story-to-csf-factory.test.ts | 84 ++++++++++++++++++- .../codemod/helpers/story-to-csf-factory.ts | 30 ++++++- 4 files changed, 176 insertions(+), 11 deletions(-) diff --git a/code/lib/cli-storybook/src/codemod/helpers/config-to-csf-factory.test.ts b/code/lib/cli-storybook/src/codemod/helpers/config-to-csf-factory.test.ts index e19a8b4475c6..f0405236345a 100644 --- a/code/lib/cli-storybook/src/codemod/helpers/config-to-csf-factory.test.ts +++ b/code/lib/cli-storybook/src/codemod/helpers/config-to-csf-factory.test.ts @@ -73,15 +73,13 @@ describe('main/preview codemod: general parsing functionality', () => { ).resolves.toMatchInlineSnapshot(` import { defineMain } from '@storybook/react-vite/node'; - const config = { - framework: '@storybook/react-vite', + export default defineMain({ tags: [], viteFinal: () => { return config; }, - }; - - export default config; + framework: '@storybook/react-vite', + }); `); }); it('should wrap defineMain call from named exports format', async () => { @@ -244,4 +242,21 @@ describe('preview specific functionality', () => { }); `); }); + it('should work', async () => { + await expect( + transform(dedent` + export const decorators = [1] + export default { + parameters: {}, + } + `) + ).resolves.toMatchInlineSnapshot(` + import { definePreview } from '@storybook/react-vite'; + + export default definePreview({ + decorators: [1], + parameters: {}, + }); + `); + }); }); diff --git a/code/lib/cli-storybook/src/codemod/helpers/config-to-csf-factory.ts b/code/lib/cli-storybook/src/codemod/helpers/config-to-csf-factory.ts index faeebeb77666..1db0859b31a9 100644 --- a/code/lib/cli-storybook/src/codemod/helpers/config-to-csf-factory.ts +++ b/code/lib/cli-storybook/src/codemod/helpers/config-to-csf-factory.ts @@ -45,8 +45,54 @@ export async function configToCsfFactory( * Transform into: `export default defineMain({ tags: [], parameters: {} })` */ if (config._exportsObject && hasNamedExports) { - config._exportsObject.properties.push(...defineConfigProps); + // when merging named exports with default exports, add the named exports first in the list + config._exportsObject.properties = [...defineConfigProps, ...config._exportsObject.properties]; programNode.body = removeExportDeclarations(programNode, exportDecls); + + // After merging, ensure the default export is wrapped with defineMain/definePreview + const defineConfigCall = t.callExpression(t.identifier(methodName), [config._exportsObject]); + + let exportDefaultNode = null as unknown as t.ExportDefaultDeclaration; + let declarationNodeIndex = -1; + + programNode.body.forEach((node) => { + // Detect Syntax 1: export default + if (t.isExportDefaultDeclaration(node) && t.isIdentifier(node.declaration)) { + const declarationName = node.declaration.name; + + declarationNodeIndex = programNode.body.findIndex( + (n) => + t.isVariableDeclaration(n) && + n.declarations.some( + (d) => + t.isIdentifier(d.id) && + d.id.name === declarationName && + t.isObjectExpression(d.init) + ) + ); + + if (declarationNodeIndex !== -1) { + exportDefaultNode = node; + // remove the original declaration as it will become a default export + const declarationNode = programNode.body[declarationNodeIndex]; + if (t.isVariableDeclaration(declarationNode)) { + const id = declarationNode.declarations[0].id; + const variableName = t.isIdentifier(id) && id.name; + + if (variableName) { + programNode.body.splice(declarationNodeIndex, 1); + } + } + } + } else if (t.isExportDefaultDeclaration(node) && t.isObjectExpression(node.declaration)) { + // Detect Syntax 2: export default { ... } + exportDefaultNode = node; + } + }); + + if (exportDefaultNode !== null) { + exportDefaultNode.declaration = defineConfigCall; + } } else if (config._exportsObject) { /** * Scenario 2: Default exports diff --git a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts index c7e35818d15a..5aac346705e9 100644 --- a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts +++ b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts @@ -303,16 +303,39 @@ describe('stories codemod', () => { }; const data = {}; export const A = () => {}; - // not supported yet (story as function) export function B() { }; // not supported yet (story redeclared) const C = { ...A, args: data, }; - export { C }; + const D = { args: data }; + export { C, D as E }; `); + expect(transformed).toMatchInlineSnapshot(` + import preview from '#.storybook/preview'; + + import { A as Component } from './Button'; + import * as Stories from './Other.stories'; + import someData from './fixtures'; + + const meta = preview.meta({ + component: Component, + + // not supported yet (story coming from another file) + args: Stories.A.args, + }); + + const data = {}; + export const A = meta.story(() => {}); + export const B = meta.story(() => {}); + // not supported yet (story redeclared) + const C = { ...A.input, args: data }; + const D = { args: data }; + export { C, D as E }; + `); + expect(transformed).toContain('A = meta.story'); - // @TODO: when we support these, uncomment these lines - // expect(transformed).toContain('B = meta.story'); + expect(transformed).toContain('B = meta.story'); + // @TODO: when we support these, uncomment this line // expect(transformed).toContain('C = meta.story'); }); @@ -589,5 +612,58 @@ describe('stories codemod', () => { export const A = meta.story(); `); }); + + it('should support non-conventional formats', async () => { + const transformed = await transform(dedent` + import { Meta, StoryObj as CSF3 } from '@storybook/react'; + import { ComponentProps } from './Component'; + import { A as Component } from './Button'; + import * as Stories from './Other.stories'; + import someData from './fixtures' + export default { + title: 'Component', + component: Component, + // not supported yet (story coming from another file) + args: Stories.A.args + }; + const data = {}; + export const A: StoryObj = () => {}; + export function B() { }; + // not supported yet (story redeclared) + const C = { ...A, args: data, } satisfies CSF3; + const D = { args: data }; + export { C, D as E }; + `); + + expect(transformed).toMatchInlineSnapshot(` + import preview from '#.storybook/preview'; + + import { A as Component } from './Button'; + import { ComponentProps } from './Component'; + import * as Stories from './Other.stories'; + import someData from './fixtures'; + + const meta = preview.meta({ + title: 'Component', + component: Component, + + // not supported yet (story coming from another file) + args: Stories.A.args, + }); + + const data = {}; + export const A = meta.story(() => {}); + export const B = meta.story(() => {}); + // not supported yet (story redeclared) + const C = { ...A.input, args: data } satisfies CSF3; + const D = { args: data }; + export { C, D as E }; + `); + + expect(transformed).toContain('A = meta.story'); + expect(transformed).toContain('B = meta.story'); + // @TODO: when we support these, uncomment this line + // expect(transformed).toContain('C = meta.story'); + }); }); }); diff --git a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts index e2492d26463e..df69fec71113 100644 --- a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts +++ b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts @@ -95,7 +95,7 @@ export async function storyToCsfFactory( // @TODO: Support unconventional formats: // `export function Story() { };` and `export { Story }; // These are not part of csf._storyExports but rather csf._storyStatements and are tricky to support. - Object.entries(csf._storyExports).forEach(([_key, decl]) => { + Object.entries(csf._storyExports).forEach(([, decl]) => { const id = decl.id; const declarator = decl as t.VariableDeclarator; let init = t.isVariableDeclarator(declarator) ? declarator.init : undefined; @@ -128,6 +128,34 @@ export async function storyToCsfFactory( } }); + // Support function-declared stories + Object.entries(csf._storyExports).forEach(([exportName, decl]) => { + if (t.isFunctionDeclaration(decl) && decl.id) { + const arrowFn = t.arrowFunctionExpression(decl.params, decl.body); + arrowFn.async = !!decl.async; + + const wrappedCall = t.callExpression( + t.memberExpression(t.identifier(metaVariableName), t.identifier('story')), + [arrowFn] + ); + + const replacement = t.exportNamedDeclaration( + t.variableDeclaration('const', [ + t.variableDeclarator(t.identifier(exportName), wrappedCall), + ]) + ); + + const pathForExport = ( + csf as unknown as { + _storyPaths?: Record void }>; + } + )._storyPaths?.[exportName]; + if (pathForExport && pathForExport.replaceWith) { + pathForExport.replaceWith(replacement); + } + } + }); + const storyExportDecls = new Map( Object.entries(csf._storyExports).filter( ( From c652477e0dea26325ff23b5bc73b4b40fca2c397 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Fri, 5 Sep 2025 00:47:13 +0200 Subject: [PATCH 152/199] Update tags filter UI and fix filter function logic --- .../components/tooltip/ListItem.tsx | 2 + .../components/sidebar/TagsFilter.stories.tsx | 4 +- .../manager/components/sidebar/TagsFilter.tsx | 9 +- .../sidebar/TagsFilterPanel.stories.tsx | 23 +++- .../components/sidebar/TagsFilterPanel.tsx | 108 ++++++++++++++---- 5 files changed, 110 insertions(+), 36 deletions(-) diff --git a/code/core/src/components/components/tooltip/ListItem.tsx b/code/core/src/components/components/tooltip/ListItem.tsx index 421d4e27e5bf..63e13f8b1d05 100644 --- a/code/core/src/components/components/tooltip/ListItem.tsx +++ b/code/core/src/components/components/tooltip/ListItem.tsx @@ -62,6 +62,7 @@ const Center = styled.span<{ isIndented: boolean }>( textAlign: 'left', display: 'flex', flexDirection: 'column', + minWidth: 0, // required for overflow }, ({ isIndented }) => (isIndented ? { marginLeft: 24 } : {}) ); @@ -116,6 +117,7 @@ export interface ItemProps { const Item = styled.div( ({ theme }) => ({ width: '100%', + minWidth: 0, // required for overflow border: 'none', borderRadius: theme.appBorderRadius, background: 'none', diff --git a/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx b/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx index f42af0d8dc33..ea7ed8b49eb1 100644 --- a/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx @@ -1,13 +1,13 @@ import type { Meta, StoryObj } from '@storybook/react-vite'; -import { findByRole, fn, screen } from 'storybook/test'; +import { findByRole, fn } from 'storybook/test'; import { TagsFilter } from './TagsFilter'; const meta = { component: TagsFilter, title: 'Sidebar/TagsFilter', - tags: ['haha'], + tags: ['haha', 'this-is-a-very-long-tag-that-will-be-truncated-after-a-while'], args: { api: { experimental_setFilter: fn(), diff --git a/code/core/src/manager/components/sidebar/TagsFilter.tsx b/code/core/src/manager/components/sidebar/TagsFilter.tsx index 9d332d5e6313..cdd156b65e19 100644 --- a/code/core/src/manager/components/sidebar/TagsFilter.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilter.tsx @@ -91,12 +91,12 @@ export const TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }: TagsFi useEffect(() => { api.experimental_setFilter(TAGS_FILTER, (item) => { - if (includedTags.size + excludedTags.size === 0) { + if (!includedTags.size && !excludedTags.size) { return true; } return ( - includedTags.values().some((tag) => item.tags?.includes(tag)) && - excludedTags.values().every((tag) => !item.tags?.includes(tag)) + (!includedTags.size || includedTags.values().some((tag) => item.tags?.includes(tag))) && + (!excludedTags.size || excludedTags.values().every((tag) => !item.tags?.includes(tag))) ); }); }, [api, includedTags, excludedTags]); @@ -163,10 +163,11 @@ export const TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }: TagsFi setAllTags={setAllTags} resetTags={resetTags} isDevelopment={isDevelopment} - isInitialSelection={ + isDefaultSelection={ includedTags.symmetricDifference(defaultIncluded).size === 0 && excludedTags.symmetricDifference(defaultExcluded).size === 0 } + hasDefaultSelection={defaultIncluded.size > 0 || defaultExcluded.size > 0} /> )} closeOnOutsideClick diff --git a/code/core/src/manager/components/sidebar/TagsFilterPanel.stories.tsx b/code/core/src/manager/components/sidebar/TagsFilterPanel.stories.tsx index a33246531a7d..fc7d7481bb64 100644 --- a/code/core/src/manager/components/sidebar/TagsFilterPanel.stories.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilterPanel.stories.tsx @@ -15,12 +15,13 @@ const meta = { ['test-fn', 1], ['tag1', 1], ['tag2', 1], - ['tag3', 1], + ['tag3-which-is-very-long-and-will-be-truncated-after-a-while', 1], ]), includedTags: new Set(), excludedTags: new Set(), resetTags: fn(), - isInitialSelection: true, + isDefaultSelection: true, + hasDefaultSelection: false, api: { getDocsUrl: () => 'https://storybook.js.org/docs/', } as any, @@ -33,7 +34,7 @@ export default meta; type Story = StoryObj; -export const Default: Story = {}; +export const Basic: Story = {}; export const Empty: Story = { args: { @@ -60,12 +61,14 @@ export const BuiltInTagsOnlyProduction: Story = { export const Included: Story = { args: { includedTags: new Set(['tag1', 'play-fn']), + isDefaultSelection: false, }, }; export const Excluded: Story = { args: { excludedTags: new Set(['tag1', 'play-fn']), + isDefaultSelection: false, }, }; @@ -73,12 +76,22 @@ export const Mixed: Story = { args: { includedTags: new Set(['tag1', 'play-fn']), excludedTags: new Set(['tag2', 'test-fn']), + isDefaultSelection: false, }, }; -export const Modified: Story = { +export const DefaultSelection: Story = { args: { ...Mixed.args, - isInitialSelection: false, + isDefaultSelection: true, + hasDefaultSelection: true, + }, +}; + +export const DefaultSelectionModified: Story = { + args: { + ...Mixed.args, + isDefaultSelection: false, + hasDefaultSelection: true, }, }; diff --git a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx index 94d7923e1f05..d5f3381c7841 100644 --- a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx @@ -1,14 +1,24 @@ import React, { useRef } from 'react'; -import { Button, Form, IconButton, ListItem, TooltipLinkList } from 'storybook/internal/components'; +import { + Button, + Form, + IconButton, + ListItem, + TooltipLinkList, + TooltipNote, + WithTooltip, +} from 'storybook/internal/components'; import type { Tag } from 'storybook/internal/types'; import { BatchAcceptIcon, - CloseIcon, + CheckIcon, DeleteIcon, DocumentIcon, ShareAltIcon, + SweepIcon, + UndoIcon, } from '@storybook/icons'; import type { API } from 'storybook/manager-api'; @@ -49,7 +59,7 @@ const Actions = styled.div(({ theme }) => ({ const TagRow = styled.div({ display: 'flex', - '& > button': { + '& button': { width: 64, maxWidth: 64, marginLeft: 4, @@ -58,8 +68,9 @@ const TagRow = styled.div({ fontWeight: 'normal', transition: 'all 150ms', }, - '&:not(:has(:hover, :focus-visible, *:focus-visible))': { - '& > button': { + '&:not(:hover)': { + '& button': { + marginLeft: 0, maxWidth: 0, opacity: 0, }, @@ -69,6 +80,16 @@ const TagRow = styled.div({ }, }); +const Label = styled.div({ + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', +}); + +const MutedText = styled.span(({ theme }) => ({ + color: theme.textMutedColor, +})); + interface TagsFilterPanelProps { api: API; allTags: Map; @@ -78,7 +99,8 @@ interface TagsFilterPanelProps { setAllTags: (selected: boolean) => void; resetTags: () => void; isDevelopment: boolean; - isInitialSelection: boolean; + isDefaultSelection: boolean; + hasDefaultSelection: boolean; } export const TagsFilterPanel = ({ @@ -90,7 +112,8 @@ export const TagsFilterPanel = ({ setAllTags, resetTags, isDevelopment, - isInitialSelection, + isDefaultSelection, + hasDefaultSelection, }: TagsFilterPanelProps) => { const ref = useRef(null); @@ -118,20 +141,38 @@ export const TagsFilterPanel = ({ id, content: ( - - {excluded && } - toggleTag(tag)} data-tag={tag} /> - - } - title={tag} - right={count} - /> - + } + trigger="hover" + > + + {checked && (excluded ? : )} + toggleTag(tag)} data-tag={tag} /> + + } + title={ + + } + right={excluded ? {count} : {count}} + /> + + } + trigger="hover" + > + + ), }; @@ -159,17 +200,34 @@ export const TagsFilterPanel = ({ {allTags.size > 0 && ( - {isInitialSelection ? ( + {includedTags.size === 0 && excludedTags.size === 0 ? ( setAllTags(true)}> Select all ) : ( - - - Reset filters + setAllTags(false)}> + + Clear filters )} + {hasDefaultSelection && ( + } + trigger="hover" + > + + + + + )} )} From 6941da2299919fd94b8afb85528c340e3199f485 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Tue, 2 Sep 2025 15:21:21 +0200 Subject: [PATCH 153/199] Merge pull request #32329 from storybookjs/norbert/proceed-if-playwrightinstall-fails AddonVitest: Handle Playwright installation errors gracefully (cherry picked from commit bc6faabcfe89563b50f2f92ccbff6e27b0272ad9) --- code/addons/vitest/src/postinstall.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/code/addons/vitest/src/postinstall.ts b/code/addons/vitest/src/postinstall.ts index 020ac845a31e..38c22b3a422a 100644 --- a/code/addons/vitest/src/postinstall.ts +++ b/code/addons/vitest/src/postinstall.ts @@ -292,10 +292,14 @@ export default async function postInstall(options: PostinstallOptions) { } else { logger.plain(`${step} Configuring Playwright with Chromium (this might take some time):`); logger.plain(' npx playwright install chromium --with-deps'); - await packageManager.executeCommand({ - command: 'npx', - args: ['playwright', 'install', 'chromium', '--with-deps'], - }); + try { + await packageManager.executeCommand({ + command: 'npx', + args: ['playwright', 'install', 'chromium', '--with-deps'], + }); + } catch (e) { + console.error('Failed to install Playwright. Please install it manually'); + } } const fileExtension = From 4aaaeba959ad134077381d8c0d41645144294b73 Mon Sep 17 00:00:00 2001 From: Kyle Gach Date: Wed, 3 Sep 2025 10:23:39 -0600 Subject: [PATCH 154/199] Merge pull request #32341 from storybookjs/docs-csf-next Docs: Update CSF Next API reference (cherry picked from commit e0a8d9b1e8ec64b93c68ae378ec1de3ffcb0d17f) --- docs/_snippets/csf-factories-automigrate.md | 11 + docs/_snippets/csf-next-builder-aliases.md | 39 ++ docs/api/csf/csf-factories.mdx | 11 - docs/api/csf/csf-next.mdx | 460 ++++++++++++++++++++ 4 files changed, 510 insertions(+), 11 deletions(-) create mode 100644 docs/_snippets/csf-factories-automigrate.md create mode 100644 docs/_snippets/csf-next-builder-aliases.md delete mode 100644 docs/api/csf/csf-factories.mdx create mode 100644 docs/api/csf/csf-next.mdx diff --git a/docs/_snippets/csf-factories-automigrate.md b/docs/_snippets/csf-factories-automigrate.md new file mode 100644 index 000000000000..d1da7f3966de --- /dev/null +++ b/docs/_snippets/csf-factories-automigrate.md @@ -0,0 +1,11 @@ +```shell renderer="common" language="js" packageManager="npm" +npx storybook automigrate csf-factories +``` + +```shell renderer="common" language="js" packageManager="pnpm" +pnpm dlx storybook automigrate csf-factories +``` + +```shell renderer="common" language="js" packageManager="yarn" +yarn dlx storybook automigrate csf-factories +``` diff --git a/docs/_snippets/csf-next-builder-aliases.md b/docs/_snippets/csf-next-builder-aliases.md new file mode 100644 index 000000000000..8646e5f647e2 --- /dev/null +++ b/docs/_snippets/csf-next-builder-aliases.md @@ -0,0 +1,39 @@ +```ts filename=".storybook/main.js|ts" renderer="common" language="ts" tabTitle="Vite" +import path from 'path'; +// Replace your-framework with the framework you are using, e.g. react-vite, nextjs-vite, vue3-vite, etc. +import { defineMain } from '@storybook/your-framework/node'; + +export default defineMain({ + // ...rest of config + async viteFinal(config) { + if (config.resolve) { + config.resolve.alias = { + ...config.resolve?.alias, + '@': path.resolve(__dirname, './'), + }; + } + + return config; + }, +}); +``` + +```ts filename=".storybook/main.js|ts" renderer="common" language="ts" tabTitle="Webpack" +import path from 'path'; +// Replace your-framework with the framework you are using, e.g. react-webpack, nextjs, angular, etc. +import { defineMain } from '@storybook/your-framework/node'; + +export default defineMain({ + // ...rest of config + async webpackFinal(config) { + if (config.resolve) { + config.resolve.alias = { + ...config.resolve?.alias, + '@$': path.resolve(__dirname, './'), + }; + } + + return config; + }, +}); +``` diff --git a/docs/api/csf/csf-factories.mdx b/docs/api/csf/csf-factories.mdx deleted file mode 100644 index 0f8f76f9cc43..000000000000 --- a/docs/api/csf/csf-factories.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Component Story Format (CSF)' -isTab: true -tab: - order: 2 - title: CSF Factories (Experimental) ---- - -CSF Factories are the next evolution of Storybook's Component Story Format (CSF). This new API uses a pattern called factory functions to provide full type safety to your Storybook stories, making it easier to configure addons correctly and unlocking the full potential of Storybook's features. - -While this feature is experimental, we will be documenting progress in the [RFC](https://github.com/storybookjs/storybook/discussions/30112). We welcome your feedback! diff --git a/docs/api/csf/csf-next.mdx b/docs/api/csf/csf-next.mdx new file mode 100644 index 000000000000..29431f3b94db --- /dev/null +++ b/docs/api/csf/csf-next.mdx @@ -0,0 +1,460 @@ +--- +title: 'Component Story Format (CSF)' +isTab: true +tab: + order: 2 + title: CSF Next (Preview) +--- + + + + + CSF Next is currently only supported in [React](?renderer=react) projects. + + + + + + + + This is a [**preview**](../../releases/features.mdx#preview) feature and (though unlikely) the API may change in future releases. We [welcome feedback](https://github.com/storybookjs/storybook/discussions/30112) and contributions to help improve this feature. + + +CSF Next is the next evolution of Storybook's Component Story Format (CSF). This new API uses a pattern called factory functions to provide full type safety to your Storybook stories, making it easier to configure addons correctly and unlocking the full potential of Storybook's features. + +This reference provides an overview of the API and a migration guide to upgrade from prior CSF versions. + +## Overview + +The CSF Next API is composed of functions to help you write stories. Note how three of the functions operate as factories, each producing the next function in the chain (`definePreview` → `preview.meta` → `meta.story`), providing full type safety at each step. + +### `defineMain` + +With CSF Next, your [main Storybook config](../main-config/main-config.mdx) is specified by the `defineMain` function. This function is type-safe and will automatically infer types for your project. + +```ts title=".storybook/main.js|ts" +// Replace your-framework with the framework you are using (e.g., react-vite, nextjs, nextjs-vite) +import { defineMain } from '@storybook/your-framework/node'; + +export default defineMain({ + framework: '@storybook/your-framework', + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: ['@storybook/addon-a11y'], +}); +``` + +### `definePreview` + +Similarly, the `definePreview` function specifies your project's story configuration. This function is also type-safe and will infer types throughout your project. + +Importantly, by specifying addons here, their types will be available throughout your project, enabling autocompletion and type checking. + +You will import the result of this function, `preview`, in your story files to define the component meta. + +```ts title=".storybook/preview.js|ts" +// Replace your-framework with the framework you are using (e.g., react-vite, nextjs, nextjs-vite) +import { definePreview } from '@storybook/your-framework'; +import addonA11y from '@storybook/addon-a11y'; + +export default definePreview({ + // 👇 Add your addons here + addons: [addonA11y()], + parameters: { + // type-safe! + a11y: { + options: { xpath: true }, + }, + }, +}); +``` + + + The preview configuration will be automatically updated to reference the [necessary addons](#preview-addons) when installing an addon via `npx storybook add ` or running `storybook dev`. + + +### `preview.meta` + +The `meta` function on the `preview` object is used to define the [metadata for your stories](./index.mdx#default-export). It accepts an object containing the `component`, `title`, `parameters`, and other story properties. + +```ts title="Button.stories.js|ts" +import preview from '../.storybook/preview'; + +import { Button } from './Button'; + +const meta = preview.meta({ + component: Button, + parameters: { + // type-safe! + layout: 'centered', + } +}); +``` + + + + + +If you would like to use absolute imports instead of relative imports for your preview config, like below, you can configure that using subpath imports or an alias. + +```ts +// ✅ Absolute imports won't break if you move story files around +import preview from '#.storybook/preview'; + +// ❌ Relative imports can break if you move story files around +import preview from '../../../.storybook/preview'; +``` + +
+Configuration + +Subpath imports are a Node.js standard that allows you to define custom import paths in your project, which you can then use throughout your codebase. + +To configure subpath imports, add the following to your `package.json`: + +```json title="package.json" +{ + "imports": { + "#*": ["./*", "./*.ts", "./*.tsx"], + }, +} +``` + +For more information, refer to the [subpath imports documentation](../../writing-stories/mocking-data-and-modules/mocking-modules.mdx#subpath-imports). + +--- + +Alternatively, you can [configure an alias in your builder](../../writing-stories/mocking-data-and-modules/mocking-modules.mdx#builder-aliases) (Vite or Webpack). + +
+ +
+ +### `meta.story` + +Finally, the `story` function on the `meta` object defines the stories. This function accepts an object containing the [`name`](../../writing-stories/index.mdx#rename-stories), [`args`](../../writing-stories/args.mdx), [`parameters`](../../writing-stories/parameters.mdx), and other story properties. + +```ts title="Button.stories.js|ts" +// ...from above +const meta = preview.meta({ /* ... */ }); + +export const Primary = meta.story({ + args: { + primary: true, + }, +}); +``` + +#### `.extend` + +You can use the `.extend` method to create a new story based on an existing one, with the option to override or add new properties. + +
+Property merging details + +Properties are merged intelligently: + +- [`args`](../../writing-stories/args.mdx) are shallow merged +- [`parameters`](../../writing-stories/parameters.mdx) are deep merged, except for arrays, which are replaced +- [`decorators`](../../writing-stories/decorators.mdx) and [`tags`](../../writing-stories/tags.mdx) are concatenated + +```ts title="Button.stories.js|ts" +// ...from above +const meta = preview.meta({ /* ... */ }); + +export const Example = meta.story({ + args: { + primary: true, + exampleArray: ['a', 'b'], + exampleObject: { a: 'a', b: 'b' }, + }, + parameters: { + exampleArray: ['a', 'b'], + exampleObject: { a: 'a', b: 'b' }, + }, + tags: ['a'], +}); + +/* + * 👇 Final values applied: + * { + * args: { + * primary: true, + * disabled: true, + * exampleArray: ['c'], + * exampleObject: { a: 'c' } + * }, + * parameters: { + * exampleArray: ['c'], + * exampleObject: { a: 'c', b: 'b' } + * }, + * tags: ['a', 'b'] + * } + */ +export const ExtendedExample = Example.extend({ + args: { + disabled: true, + exampleArray: ['c'], + exampleObject: { a: 'c' }, + }, + parameters: { + disabled: true, + exampleArray: ['c'], + exampleObject: { a: 'c' }, + }, + tags: ['b'], +}); +``` + +
+ +```ts title="Button.stories.js|ts" +// ...from above +const meta = preview.meta({ /* ... */ }); + +export const Primary = meta.story({ + args: { + primary: true, + }, +}); + +export const PrimaryDisabled = Primary.extend({ + args: { + disabled: true, + }, +}); +``` + +## Upgrade to CSF Next + +You can upgrade your stories to CSF Next either automatically (from CSF 3) or manually (from CSF 1, 2, or 3). CSF Next is designed to be usable incrementally; you do not have to upgrade all of your story files at once. However, you cannot mix story formats within the same file. + +Before proceeding, be sure you're using the latest version of Storybook. You can upgrade your Storybook automatically with this command: + + + +### Automatically + +You can automatically upgrade all of your project's stories from CSF 3 to CSF Next with this command: + + + +It will run through each of the manual upgrade steps below on all of your story files. + +
+Upgrading from CSF 2 to 3 + +You must be using CSF 3 to automatically upgrade to CSF Next. If you are using CSF 2, you can upgrade to CSF 3 first using this command: + + + +
+ +### Manual + +You can also upgrade your project's story files to CSF Next manually. Before using CSF Next in a story file, you must upgrade your `.storybook/main.js|ts` and `.storybook/preview.js|ts` files. + +**1. Update your main Storybook config file** + +Update your `.storybook/main.js|ts` file to use the new [`defineMain`](#definemain) function. + +```diff title=".storybook/main.js|ts" +// Replace your-framework with the framework you are using (e.g., react-vite, nextjs, nextjs-vite) ++ import { defineMain } from '@storybook/your-framework/node'; +- import { StorybookConfig } from '@storybook/your-framework'; + ++ export default defineMain({ +- export const config: StorybookConfig = { + // ...config itself is unchanged ++ }); +- }; +- export default config; +``` + +**2. Update your preview config file** +
+ +Update your `.storybook/preview.js|ts` file to use the new [`definePreview`](#definepreview) function. + +
+Which addons should be specified in `preview`? + +The ability for an addon to provide annotation types (`parameters`, `globals`, etc.) is new and not all addons support it yet. + +If an addon provides annotations (i.e. it distributes a `./preview` export), it can be imported in two ways: + +1. For official Storybook addons, you import the default export: + `import addonName from '@storybook/addon-name'` + +2. For community addons, you should import the entire module and access the addon from there: + `import * as addonName from 'community-addon-name'` + +
+ +```diff title=".storybook/preview.js|ts" +// Replace your-framework with the framework you are using (e.g., react-vite, nextjs, nextjs-vite) ++ import { definePreview } from '@storybook/your-framework'; +- import type { Preview } from '@storybook/your-framework'; +// 👇 Import the addons you are using ++ import addonA11y from '@storybook/addon-a11y'; + ++ export default definePreview({ +- export const preview: Preview = { + // ...current config + // 👇 Add your addons here ++ addons: [addonA11y()], ++ }); +- }; +- export default preview; +``` + +**3. Update your story files** + +Story files have been updated for improved usability. With the new format: + +- Import the preview construct from the Storybook preview file +- The meta object is now created via the [`preview.meta`](#previewmeta) function and does not have to be exported as a default export +- Stories are now created from the meta object, via the [`meta.story`](#metastory) function + + +The examples below show the changes needed to upgrade a story file from CSF 3 to CSF Next. You can also upgrade from CSF 1 or 2 using similar steps. + + +```diff title="Button.stories.js|ts" ++ import preview from '../.storybook/preview'; +- import type { Meta, StoryObj } from '@storybook/your-framework'; + +import { Button } from './Button'; + ++ const meta = preview.meta({ +- const meta = { + // ...meta object is unchanged ++ }); +- } satisfies Meta; +- export default meta; + +- type Story = StoryObj; + ++ export const Primary = meta.story({ +- export const Primary: Story = { + // ...story object is unchanged ++ }); +- }; +``` + +Note that importing or manually applying any type to the meta or stories is no longer necessary. Thanks to the factory function pattern, the types are now inferred automatically. + +**3.1 Reusing story properties** + + + +If you are reusing story properties to create a new story based on another, the [`.extend`](#storyextend) method is the recommended way to do so. + + + +Previously, story properties such as `Story.args` or `Story.parameters` were accessed directly when reusing them in another story. While accessing them like this is still supported, it is deprecated in CSF Next. + +All of the story properties are now contained within a new property called `composed` and should be accessed from that property instead. For instance, `Story.composed.args` or `Story.composed.parameters`. + +```diff title="Button.stories.js|ts" +// ...rest of file + ++ export const Primary = meta.story({ +- export const Primary: Story = { + args: { primary: true }, ++ }); +- }; + ++ export const PrimaryDisabled = meta.story({ +- export const PrimaryDisabled: Story = { + args: { ++ ...Primary.composed.args, +- ...Primary.args, + disabled: true, + } ++ }); +- }; +``` + + + The property name "composed" was chosen because the values within are composed from the story, its component meta, and the preview configuration. + + If you want to access the direct input to the story, you can use `Story.input` instead of `Story.composed`. + + +**4. Update your Vitest setup file** + +If you're using [Storybook's Vitest addon](../../writing-tests/integrations/vitest-addon.mdx), you can remove your Vitest setup file (`.storybook/vitest.setup.ts`). + +If you are using [portable stories in Vitest](../portable-stories/portable-stories-vitest.mdx), you may use a Vitest setup file to configure your stories. This file must be updated to use the new CSF Next format. + + +Note that this only applies if you use CSF Next for all your tested stories. If you use a mix of CSF 1, 2, or 3 and CSF Next, you must maintain two separate setup files. + + +```diff title="vitest.setup.js|ts" +import { beforeAll } from 'vitest'; +// 👇 No longer necessary +- // Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc. +import { setProjectAnnotations } from '@storybook/your-framework'; +- import * as addonAnnotations from 'my-addon/preview'; ++ import preview from './.storybook/preview'; +- import * as previewAnnotations from './.storybook/preview'; + +// No longer necessary +- const annotations = setProjectAnnotations([previewAnnotations, addonAnnotations]); + +// Run Storybook's beforeAll hook ++ beforeAll(preview.composed.beforeAll); +- beforeAll(annotations.beforeAll); +``` + +**5. Reusing stories in test files** + +[Storybook's Vitest addon](../../writing-tests/integrations/vitest-addon.mdx) allows you to test your components directly inside Storybook. All the stories are automatically turned into Vitest tests, making integration seamless in your testing suite. + +If you cannot use Storybook Test, you can still reuse the stories in your test files using [portable stories](../portable-stories/portable-stories-vitest.mdx). In prior story formats, you had to compose the stories before rendering them in your test files. With CSF Next, you can now reuse the stories directly. + +```diff title="Button.test.js|ts" +import { test, expect } from 'vitest'; +import { screen } from '@testing-library/react'; +- import { composeStories } from '@storybook/your-framework'; + +// Import all stories from the stories file +import * as stories from './Button.stories'; + ++ const { Primary } = stories; +- const { Primary } = composeStories(stories); + +test('renders primary button with default args', async () => { + // The run function will mount the component and run all of Storybook's lifecycle hooks + await Primary.run(); + const buttonElement = screen.getByText('Text coming from args in stories file!'); + expect(buttonElement).not.toBeNull(); +}); +``` + +The `Story` object also provides a `Component` property, enabling you to render the component with any method you choose, such as [Testing Library](https://testing-library.com/). You can also access its composed properties ([`args`](../../writing-stories/args.mdx), [`parameters`](../../writing-stories/parameters.mdx), etc.) via the `composed` property. + +Here's an example of how you can reuse a story in a test file by rendering its component: + +{/* prettier-ignore-start */} + +{/* prettier-ignore-end */} + +## Frequently asked questions (FAQ) + +### Will I have to migrate all of my stories to this new format? + +Storybook will continue to support CSF 1, [CSF 2](../../../release-6-5/docs/api/stories/csf.mdx), and [CSF 3](./index.mdx) for the foreseeable future. None of these prior formats are deprecated. + +While using CSF Next, you can still use the older formats, as long as they are not mixed in the same file. If you want to migrate your existing files to the new format, refer to [the upgrade section](#upgrading-from-csf-1-2-or-3), above. + +### Will this format work with MDX docs pages? + +Yes, the [doc blocks](../../writing-docs/doc-blocks.mdx) used to reference stories in MDX files support the CSF Next format with no changes needed. + +### How can I know more about this format and provide feedback? + +For more information on this experimental format's original proposal, refer to its [RFC on GitHub](https://github.com/storybookjs/storybook/discussions/30112). We welcome your comments! + +
\ No newline at end of file From 246e3efef662af42933551179fd3f7716812306e Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Thu, 4 Sep 2025 18:05:19 -0700 Subject: [PATCH 155/199] Merge pull request #32169 from diagramatics/satisfies-as CSF: Support `satisfies x as y` syntax (cherry picked from commit 9eca72fb7cf56c351363cd287f0294437b78f952) --- code/core/src/csf-tools/CsfFile.test.ts | 197 +++++++++++++++++++++++- code/core/src/csf-tools/CsfFile.ts | 48 ++++-- 2 files changed, 227 insertions(+), 18 deletions(-) diff --git a/code/core/src/csf-tools/CsfFile.test.ts b/code/core/src/csf-tools/CsfFile.test.ts index 4299b8d586ff..a3ff6cee8cee 100644 --- a/code/core/src/csf-tools/CsfFile.test.ts +++ b/code/core/src/csf-tools/CsfFile.test.ts @@ -515,6 +515,57 @@ describe('CsfFile', () => { `); }); + it('typescript satisfies as', () => { + expect( + parse( + dedent` + import type { Meta, StoryFn, StoryObj } from '@storybook/react'; + type PropTypes = {}; + export default { title: 'foo/bar' } satisfies Meta as Meta; + export const A = { name: 'AA' } satisfies StoryObj; + export const B = ((args) => {}) satisfies StoryFn; + `, + true + ) + ).toMatchInlineSnapshot(` + meta: + title: foo/bar + stories: + - id: foo-bar--a + name: AA + parameters: + __isArgsStory: true + __id: foo-bar--a + __stats: + factory: false + play: false + render: false + loaders: false + beforeEach: false + globals: false + tags: false + storyFn: false + mount: false + moduleMock: false + - id: foo-bar--b + name: B + parameters: + __isArgsStory: true + __id: foo-bar--b + __stats: + factory: false + play: false + render: false + loaders: false + beforeEach: false + globals: false + tags: false + storyFn: false + mount: false + moduleMock: false + `); + }); + it('typescript meta var', () => { expect( parse( @@ -605,6 +656,136 @@ describe('CsfFile', () => { `); }); + it('typescript satisfies as meta', () => { + expect( + parse( + dedent` + import type { Meta, StoryFn } from '@storybook/react'; + type PropTypes = {}; + const meta = { title: 'foo/bar/baz' } satisfies Meta as Meta; + export default meta; + export const A: StoryFn = () => <>A; + export const B: StoryFn = () => <>B; + ` + ) + ).toMatchInlineSnapshot(` + meta: + title: foo/bar/baz + stories: + - id: foo-bar-baz--a + name: A + __stats: + factory: false + play: false + render: false + loaders: false + beforeEach: false + globals: false + tags: false + storyFn: true + mount: false + moduleMock: false + - id: foo-bar-baz--b + name: B + __stats: + factory: false + play: false + render: false + loaders: false + beforeEach: false + globals: false + tags: false + storyFn: true + mount: false + moduleMock: false + `); + }); + + it('typescript satisfies as stories', () => { + expect( + parse( + dedent` + import type { Meta, StoryFn, StoryObj } from '@storybook/react'; + type PropTypes = {}; + export default { title: 'foo/bar' } as Meta; + export const A = { name: 'AA' } satisfies StoryObj as StoryObj; + export const B = ((args) => {}) satisfies StoryFn as StoryFn; + `, + true + ) + ).toMatchInlineSnapshot(` + meta: + title: foo/bar + stories: + - id: foo-bar--a + name: AA + parameters: + __isArgsStory: true + __id: foo-bar--a + __stats: + factory: false + play: false + render: false + loaders: false + beforeEach: false + globals: false + tags: false + storyFn: false + mount: false + moduleMock: false + - id: foo-bar--b + name: B + parameters: + __isArgsStory: true + __id: foo-bar--b + __stats: + factory: false + play: false + render: false + loaders: false + beforeEach: false + globals: false + tags: false + storyFn: false + mount: false + moduleMock: false + `); + }); + + it('typescript satisfies as export specifier', () => { + expect( + parse( + dedent` + import type { Meta, StoryFn } from '@storybook/react'; + type PropTypes = {}; + const meta = { title: 'foo/bar/baz' } satisfies Meta as Meta; + const story = { name: 'Story A' }; + export { meta as default, story as A }; + `, + true + ) + ).toMatchInlineSnapshot(` + meta: + title: foo/bar/baz + stories: + - id: foo-bar-baz--a + name: A + localName: story + parameters: + __id: foo-bar-baz--a + __stats: + play: false + render: false + loaders: false + beforeEach: false + globals: false + tags: false + storyFn: false + mount: false + moduleMock: false + `); + }); + it('component object', () => { expect( parse( @@ -1995,7 +2176,7 @@ describe('CsfFile', () => { const { indexInputs } = loadCsf( dedent` const Component = (props) =>
hello
; - + export default { title: 'custom foo title', component: Component, @@ -2513,7 +2694,7 @@ describe('CsfFile', () => { ).toThrowErrorMatchingInlineSnapshot(` [MultipleMetaError: CSF: multiple meta objects (line 4, col 24) - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error] + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export] `); }); @@ -2531,7 +2712,7 @@ describe('CsfFile', () => { ).toThrowErrorMatchingInlineSnapshot(` [MultipleMetaError: CSF: multiple meta objects (line 3, col 25) - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error] + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export] `); }); @@ -2549,7 +2730,7 @@ describe('CsfFile', () => { ).toThrowErrorMatchingInlineSnapshot(` [MultipleMetaError: CSF: multiple meta objects - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error] + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export] `); }); @@ -2565,7 +2746,7 @@ describe('CsfFile', () => { ).toThrowErrorMatchingInlineSnapshot(` [BadMetaError: CSF: meta() factory must be imported from .storybook/preview configuration (line 1, col 0) - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error] + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export] `); }); @@ -2582,7 +2763,7 @@ describe('CsfFile', () => { ).toThrowErrorMatchingInlineSnapshot(` [BadMetaError: CSF: meta() factory must be imported from .storybook/preview configuration (line 4, col 28) - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error] + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export] `); }); @@ -2599,7 +2780,7 @@ describe('CsfFile', () => { ).toThrowErrorMatchingInlineSnapshot(` [MixedFactoryError: CSF: expected factory story (line 4, col 17) - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error] + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export] `); }); @@ -2616,7 +2797,7 @@ describe('CsfFile', () => { ).toThrowErrorMatchingInlineSnapshot(` [MixedFactoryError: CSF: expected non-factory story (line 4, col 28) - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error] + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export] `); }); }); diff --git a/code/core/src/csf-tools/CsfFile.ts b/code/core/src/csf-tools/CsfFile.ts index 7e88d731e6e9..ab23eb33045a 100644 --- a/code/core/src/csf-tools/CsfFile.ts +++ b/code/core/src/csf-tools/CsfFile.ts @@ -181,7 +181,7 @@ export class NoMetaError extends Error { super(dedent` CSF: ${msg} ${formatLocation(ast, fileName)} - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export `); this.name = this.constructor.name; } @@ -193,7 +193,7 @@ export class MultipleMetaError extends Error { super(dedent` CSF: ${message} ${formatLocation(ast, fileName)} - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export `); this.name = this.constructor.name; } @@ -205,7 +205,7 @@ export class MixedFactoryError extends Error { super(dedent` CSF: ${message} ${formatLocation(ast, fileName)} - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export `); this.name = this.constructor.name; } @@ -217,7 +217,7 @@ export class BadMetaError extends Error { super(dedent` CSF: ${message} ${formatLocation(ast, fileName)} - More info: https://storybook.js.org/docs/writing-stories#default-export?ref=error + More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export `); this.name = this.constructor.name; } @@ -442,10 +442,18 @@ export class CsfFile { metaNode = decl; } else if ( // export default { ... } as Meta<...> + // export default { ... } satisfies Meta<...> (t.isTSAsExpression(decl) || t.isTSSatisfiesExpression(decl)) && t.isObjectExpression(decl.expression) ) { metaNode = decl.expression; + } else if ( + // export default { ... } satisfies Meta as Meta<...> + t.isTSAsExpression(decl) && + t.isTSSatisfiesExpression(decl.expression) && + t.isObjectExpression(decl.expression.expression) + ) { + metaNode = decl.expression.expression; } if (metaNode && t.isProgram(parent)) { @@ -495,10 +503,22 @@ export class CsfFile { } let storyNode; if (t.isVariableDeclarator(decl)) { - storyNode = - t.isTSAsExpression(decl.init) || t.isTSSatisfiesExpression(decl.init) - ? decl.init.expression - : decl.init; + if ( + t.isTSAsExpression(decl.init) && + t.isTSSatisfiesExpression(decl.init.expression) + ) { + // { ... } satisfies Meta<...> as Meta<...> + storyNode = decl.init.expression.expression; + } else if ( + t.isTSAsExpression(decl.init) || + t.isTSSatisfiesExpression(decl.init) + ) { + // { ... } as Meta<...> + // { ... } satisfies Meta<...> + storyNode = decl.init.expression; + } else { + storyNode = decl.init; + } } else { storyNode = decl; } @@ -596,10 +616,18 @@ export class CsfFile { metaNode = decl; } else if ( // export default { ... } as Meta<...> - t.isTSAsExpression(decl) && + // export default { ... } satisfies Meta<...> + (t.isTSAsExpression(decl) || t.isTSSatisfiesExpression(decl)) && t.isObjectExpression(decl.expression) ) { metaNode = decl.expression; + } else if ( + // export default { ... } satisfies Meta as Meta<...> + t.isTSAsExpression(decl) && + t.isTSSatisfiesExpression(decl.expression) && + t.isObjectExpression(decl.expression.expression) + ) { + metaNode = decl.expression.expression; } if (metaNode && t.isProgram(parent)) { @@ -681,7 +709,7 @@ export class CsfFile { throw new Error(dedent` Unexpected \`storiesOf\` usage: ${formatLocation(node, self._options.fileName)}. - SB8 does not support \`storiesOf\`. + SB8 does not support \`storiesOf\`. `); } if ( From 7a47f953e174a3efe62e081ac7dbb9c6daa10ef5 Mon Sep 17 00:00:00 2001 From: storybook-bot <32066757+storybook-bot@users.noreply.github.com> Date: Fri, 5 Sep 2025 01:07:52 +0000 Subject: [PATCH 156/199] Write changelog for 9.1.5 [skip ci] --- CHANGELOG.md | 5 +++++ code/package.json | 3 ++- docs/versions/latest.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4284d55bc65..162b33d1d6a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 9.1.5 + +- CSF: Support `satisfies x as y` syntax - [#32169](https://github.com/storybookjs/storybook/pull/32169), thanks @diagramatics! +- Vitest addon: Handle Playwright installation errors gracefully - [#32329](https://github.com/storybookjs/storybook/pull/32329), thanks @ndelangen! + ## 9.1.4 - Angular: Properly merge builder options and browserTarget options - [#32272](https://github.com/storybookjs/storybook/pull/32272), thanks @kroeder! diff --git a/code/package.json b/code/package.json index edaa0c62c025..be8ca70b5337 100644 --- a/code/package.json +++ b/code/package.json @@ -285,5 +285,6 @@ "Dependency Upgrades" ] ] - } + }, + "deferredNextVersion": "9.1.5" } diff --git a/docs/versions/latest.json b/docs/versions/latest.json index 0cb911c467d9..593dd5af945f 100644 --- a/docs/versions/latest.json +++ b/docs/versions/latest.json @@ -1 +1 @@ -{"version":"9.1.4","info":{"plain":"- Angular: Properly merge builder options and browserTarget options - [#32272](https://github.com/storybookjs/storybook/pull/32272), thanks @kroeder!\n- Core: Optimize bundlesize, by reusing internal/babel in mocking-utils - [#32350](https://github.com/storybookjs/storybook/pull/32350), thanks @ndelangen!\n- Svelte & Vue: Add framework-specific `docgen` option to disable docgen processing - [#32319](https://github.com/storybookjs/storybook/pull/32319), thanks @copilot-swe-agent!\n- Svelte: Support `@sveltejs/vite-plugin-svelte` v6 - [#32320](https://github.com/storybookjs/storybook/pull/32320), thanks @JReinhold!"}} +{"version":"9.1.5","info":{"plain":"- CSF: Support `satisfies x as y` syntax - [#32169](https://github.com/storybookjs/storybook/pull/32169), thanks @diagramatics!\n- Vitest addon: Handle Playwright installation errors gracefully - [#32329](https://github.com/storybookjs/storybook/pull/32329), thanks @ndelangen!"}} From 4c348d3de9bf98e3ee2c750385a5eff484b898a8 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Fri, 5 Sep 2025 09:34:30 +0200 Subject: [PATCH 157/199] Copy the default included/excluded sets to avoid accidental mutation --- code/core/src/manager/components/sidebar/TagsFilter.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/core/src/manager/components/sidebar/TagsFilter.tsx b/code/core/src/manager/components/sidebar/TagsFilter.tsx index cdd156b65e19..d45757e1c527 100644 --- a/code/core/src/manager/components/sidebar/TagsFilter.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilter.tsx @@ -77,14 +77,14 @@ export const TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }: TagsFi ); }, [tagPresets]); - const [includedTags, setIncludedTags] = useState>(defaultIncluded); - const [excludedTags, setExcludedTags] = useState>(defaultExcluded); + const [includedTags, setIncludedTags] = useState>(new Set(defaultIncluded)); + const [excludedTags, setExcludedTags] = useState>(new Set(defaultExcluded)); const [expanded, setExpanded] = useState(false); const tagsActive = includedTags.size > 0 || excludedTags.size > 0; const resetTags = useCallback(() => { - setIncludedTags(defaultIncluded); - setExcludedTags(defaultExcluded); + setIncludedTags(new Set(defaultIncluded)); + setExcludedTags(new Set(defaultExcluded)); }, [defaultIncluded, defaultExcluded]); useEffect(resetTags, [resetTags]); From d28127c40d525d0fcf298e57c2ca46bd88b51995 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Fri, 5 Sep 2025 09:36:54 +0200 Subject: [PATCH 158/199] Rename defaultSelection to defaultFilterSelection for clarity --- .../components/sidebar/TagsFilter.stories.tsx | 12 ++++++------ .../src/manager/components/sidebar/TagsFilter.tsx | 6 +++--- code/core/src/types/modules/core-common.ts | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx b/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx index ea7ed8b49eb1..8bc48ded4f45 100644 --- a/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx @@ -44,8 +44,8 @@ export const ClosedWithSelection: Story = { args: { ...Closed.args, tagPresets: { - A: { defaultSelection: 'include' }, - B: { defaultSelection: 'include' }, + A: { defaultFilterSelection: 'include' }, + B: { defaultFilterSelection: 'include' }, }, }, }; @@ -68,8 +68,8 @@ export const OpenWithSelectionInverted = { args: { ...Open.args, tagPresets: { - A: { defaultSelection: 'exclude' }, - B: { defaultSelection: 'exclude' }, + A: { defaultFilterSelection: 'exclude' }, + B: { defaultFilterSelection: 'exclude' }, }, }, } satisfies Story; @@ -79,8 +79,8 @@ export const OpenWithSelectionMixed = { args: { ...Open.args, tagPresets: { - A: { defaultSelection: 'include' }, - B: { defaultSelection: 'exclude' }, + A: { defaultFilterSelection: 'include' }, + B: { defaultFilterSelection: 'exclude' }, }, }, } satisfies Story; diff --git a/code/core/src/manager/components/sidebar/TagsFilter.tsx b/code/core/src/manager/components/sidebar/TagsFilter.tsx index d45757e1c527..104e365f868a 100644 --- a/code/core/src/manager/components/sidebar/TagsFilter.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilter.tsx @@ -65,10 +65,10 @@ export const TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }: TagsFi const { defaultIncluded, defaultExcluded } = useMemo(() => { return Object.entries(tagPresets).reduce( - (acc, [tag, { defaultSelection }]) => { - if (defaultSelection === 'include') { + (acc, [tag, { defaultFilterSelection }]) => { + if (defaultFilterSelection === 'include') { acc.defaultIncluded.add(tag); - } else if (defaultSelection === 'exclude') { + } else if (defaultFilterSelection === 'exclude') { acc.defaultExcluded.add(tag); } return acc; diff --git a/code/core/src/types/modules/core-common.ts b/code/core/src/types/modules/core-common.ts index 4387752fb206..37fab0b93b54 100644 --- a/code/core/src/types/modules/core-common.ts +++ b/code/core/src/types/modules/core-common.ts @@ -331,7 +331,7 @@ type Tag = string; export interface TagOptions { /** Visually include or exclude stories with this tag in the sidebar by default */ - defaultSelection?: 'include' | 'exclude'; + defaultFilterSelection?: 'include' | 'exclude'; excludeFromSidebar: boolean; excludeFromDocsStories: boolean; } From 8a6589521bafd44b69abafce3a78c53fd70e1ffa Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Fri, 5 Sep 2025 10:15:57 +0200 Subject: [PATCH 159/199] Remove some built-in tags that will no longer exist --- .../core/src/manager/components/sidebar/TagsFilter.tsx | 10 +--------- .../src/manager/components/sidebar/TagsFilterPanel.tsx | 4 ---- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/code/core/src/manager/components/sidebar/TagsFilter.tsx b/code/core/src/manager/components/sidebar/TagsFilter.tsx index 104e365f868a..e93f854f10b6 100644 --- a/code/core/src/manager/components/sidebar/TagsFilter.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilter.tsx @@ -12,15 +12,7 @@ import { TagsFilterPanel } from './TagsFilterPanel'; const TAGS_FILTER = 'tags-filter'; -const BUILT_IN_TAGS_HIDE = new Set([ - 'dev', - 'docs-only', - 'test-only', - 'autodocs', - 'test', - 'attached-mdx', - 'unattached-mdx', -]); +const BUILT_IN_TAGS_HIDE = new Set(['dev', 'autodocs', 'test', 'attached-mdx', 'unattached-mdx']); const Wrapper = styled.div({ position: 'relative', diff --git a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx index d5f3381c7841..5d326b612a38 100644 --- a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx @@ -29,15 +29,11 @@ import type { Link } from '../../../components/components/tooltip/TooltipLinkLis const BUILT_IN_TAGS = new Set([ 'dev', 'test', - 'dev-only', - 'test-only', - 'docs-only', 'autodocs', 'attached-mdx', 'unattached-mdx', 'play-fn', 'test-fn', - 'vitest', 'svelte-csf', 'svelte-csf-v4', 'svelte-csf-v5', From 7985f43792ddeb98d668b1e334f784279a35b116 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Fri, 5 Sep 2025 10:16:50 +0200 Subject: [PATCH 160/199] Revert check icon when not hovering --- code/core/src/manager/components/sidebar/TagsFilterPanel.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx index 5d326b612a38..c728f74e6598 100644 --- a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx @@ -13,7 +13,6 @@ import type { Tag } from 'storybook/internal/types'; import { BatchAcceptIcon, - CheckIcon, DeleteIcon, DocumentIcon, ShareAltIcon, @@ -147,7 +146,7 @@ export const TagsFilterPanel = ({ as="label" icon={ <> - {checked && (excluded ? : )} + {excluded && } toggleTag(tag)} data-tag={tag} /> } From 67dfbfbf968c1893c01390e4666232b76aa4d040 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Fri, 5 Sep 2025 11:23:47 +0200 Subject: [PATCH 161/199] Delay tooltips --- code/core/src/manager/components/sidebar/TagsFilterPanel.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx index c728f74e6598..a11e91f298ed 100644 --- a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx @@ -137,6 +137,7 @@ export const TagsFilterPanel = ({ content: ( } @@ -160,6 +161,7 @@ export const TagsFilterPanel = ({ /> } trigger="hover" @@ -208,6 +210,7 @@ export const TagsFilterPanel = ({ )} {hasDefaultSelection && ( } trigger="hover" From 8b9cc2491f647be0ee5955153447a1cbb03a76e5 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Fri, 5 Sep 2025 12:09:49 +0200 Subject: [PATCH 162/199] fix children calculation --- code/core/src/manager-api/modules/stories.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/core/src/manager-api/modules/stories.ts b/code/core/src/manager-api/modules/stories.ts index 37b1475bfb31..d0d583ce6cd8 100644 --- a/code/core/src/manager-api/modules/stories.ts +++ b/code/core/src/manager-api/modules/stories.ts @@ -494,10 +494,10 @@ export const init: ModuleFn = ({ if (!node) { return results; } - if (node.type === 'story') { + if ('children' in node) { + node.children?.forEach((childId) => findChildEntriesRecursively(childId, results)); + } else if (node.type === 'story') { results.push(node.id); - } else if ('children' in node) { - node.children.forEach((childId) => findChildEntriesRecursively(childId, results)); } return results; }; From 87ddc71ab12425d5f767afbe058c4f27b83b21a0 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Fri, 5 Sep 2025 12:56:13 +0200 Subject: [PATCH 163/199] fix children calculation pt. 2 --- code/core/src/manager-api/lib/stories.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/core/src/manager-api/lib/stories.ts b/code/core/src/manager-api/lib/stories.ts index 47ea02e0b525..fd5543b8ce53 100644 --- a/code/core/src/manager-api/lib/stories.ts +++ b/code/core/src/manager-api/lib/stories.ts @@ -342,7 +342,7 @@ export const transformStoryIndexToStoriesHash = ( // Update stories to include tests as children, and increase depth for those tests storiesHash = Object.values(storiesHash).reduce((acc, item) => { if (item.type === 'story' && item.subtype === 'test') { - const parentStory = storiesHash[item.parent] as API_StoryEntry; + const parentStory = acc[item.parent] as API_StoryEntry; acc[item.parent] = { ...parentStory, children: (parentStory.children || []).concat(item.id).filter((id) => storiesHash[id]), From 56c04b001ee45f036ec5f1131fc8fbc553fad35d Mon Sep 17 00:00:00 2001 From: storybook-bot <32066757+storybook-bot@users.noreply.github.com> Date: Sat, 6 Sep 2025 04:02:13 +0000 Subject: [PATCH 164/199] Bump version from "9.1.4" to "9.1.5" [skip ci] --- code/addons/a11y/package.json | 2 +- code/addons/docs/package.json | 2 +- code/addons/jest/package.json | 2 +- code/addons/links/package.json | 2 +- code/addons/onboarding/package.json | 2 +- code/addons/pseudo-states/package.json | 2 +- code/addons/themes/package.json | 2 +- code/addons/vitest/package.json | 2 +- code/builders/builder-vite/package.json | 2 +- code/builders/builder-webpack5/package.json | 2 +- code/core/package.json | 2 +- code/core/src/common/versions.ts | 86 +++++++++---------- code/core/src/manager-api/version.ts | 2 +- code/frameworks/angular/package.json | 2 +- code/frameworks/ember/package.json | 2 +- code/frameworks/html-vite/package.json | 2 +- code/frameworks/nextjs-vite/package.json | 2 +- code/frameworks/nextjs/package.json | 2 +- code/frameworks/preact-vite/package.json | 2 +- .../react-native-web-vite/package.json | 2 +- code/frameworks/react-vite/package.json | 2 +- code/frameworks/react-webpack5/package.json | 2 +- code/frameworks/server-webpack5/package.json | 2 +- code/frameworks/svelte-vite/package.json | 2 +- code/frameworks/sveltekit/package.json | 2 +- code/frameworks/vue3-vite/package.json | 2 +- .../web-components-vite/package.json | 2 +- code/lib/cli-sb/package.json | 2 +- code/lib/cli-storybook/package.json | 2 +- code/lib/codemod/package.json | 2 +- code/lib/core-webpack/package.json | 2 +- code/lib/create-storybook/package.json | 2 +- code/lib/csf-plugin/package.json | 2 +- code/lib/eslint-plugin/package.json | 2 +- code/lib/react-dom-shim/package.json | 2 +- code/package.json | 5 +- code/presets/create-react-app/package.json | 2 +- code/presets/react-webpack/package.json | 2 +- code/presets/server-webpack/package.json | 2 +- code/renderers/html/package.json | 2 +- code/renderers/preact/package.json | 2 +- code/renderers/react/package.json | 2 +- code/renderers/server/package.json | 2 +- code/renderers/svelte/package.json | 2 +- code/renderers/vue3/package.json | 2 +- code/renderers/web-components/package.json | 2 +- 46 files changed, 89 insertions(+), 90 deletions(-) diff --git a/code/addons/a11y/package.json b/code/addons/a11y/package.json index c8818609d296..6ec29f7a1217 100644 --- a/code/addons/a11y/package.json +++ b/code/addons/a11y/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-a11y", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Addon A11y: Test UI component compliance with WCAG web accessibility standards", "keywords": [ "a11y", diff --git a/code/addons/docs/package.json b/code/addons/docs/package.json index 58dafd2e19dd..b854c4b1abdb 100644 --- a/code/addons/docs/package.json +++ b/code/addons/docs/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-docs", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Docs: Document UI components automatically with stories and MDX", "keywords": [ "docs", diff --git a/code/addons/jest/package.json b/code/addons/jest/package.json index bc417af93d59..85db09e021f4 100644 --- a/code/addons/jest/package.json +++ b/code/addons/jest/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-jest", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Jest addon: Show Jest report in Storybook's addon panel", "keywords": [ "jest", diff --git a/code/addons/links/package.json b/code/addons/links/package.json index 46d57c6c199d..a9aac5e760ea 100644 --- a/code/addons/links/package.json +++ b/code/addons/links/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-links", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Links: Link stories together to build demos and prototypes with your UI components", "keywords": [ "storybook", diff --git a/code/addons/onboarding/package.json b/code/addons/onboarding/package.json index 1e599d0cfc24..e826603b9af9 100644 --- a/code/addons/onboarding/package.json +++ b/code/addons/onboarding/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-onboarding", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Onboarding: Help new users learn how to write stories", "keywords": [ "storybook", diff --git a/code/addons/pseudo-states/package.json b/code/addons/pseudo-states/package.json index e0dbca8e3760..d1b9d830920d 100644 --- a/code/addons/pseudo-states/package.json +++ b/code/addons/pseudo-states/package.json @@ -1,6 +1,6 @@ { "name": "storybook-addon-pseudo-states", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Pseudo-states addon: Manipulate CSS pseudo states", "keywords": [ "storybook", diff --git a/code/addons/themes/package.json b/code/addons/themes/package.json index 0200e5cf31cf..e580a148b027 100644 --- a/code/addons/themes/package.json +++ b/code/addons/themes/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-themes", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Themes addon: Switch between themes from the toolbar", "keywords": [ "css", diff --git a/code/addons/vitest/package.json b/code/addons/vitest/package.json index e6b99deffc34..34afcbf4755c 100644 --- a/code/addons/vitest/package.json +++ b/code/addons/vitest/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-vitest", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Vitest addon: Blazing fast component testing using stories", "keywords": [ "storybook", diff --git a/code/builders/builder-vite/package.json b/code/builders/builder-vite/package.json index b6122a8f5d0d..9c7bac001ead 100644 --- a/code/builders/builder-vite/package.json +++ b/code/builders/builder-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/builder-vite", - "version": "9.1.4", + "version": "9.1.5", "description": "A Storybook builder to dev and build with Vite", "keywords": [ "storybook", diff --git a/code/builders/builder-webpack5/package.json b/code/builders/builder-webpack5/package.json index 191d3d24fa84..8a67d95f0394 100644 --- a/code/builders/builder-webpack5/package.json +++ b/code/builders/builder-webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/builder-webpack5", - "version": "9.1.4", + "version": "9.1.5", "description": "A Storybook builder to dev and build with Webpack", "keywords": [ "storybook", diff --git a/code/core/package.json b/code/core/package.json index 219ab4719d5c..81287989bd46 100644 --- a/code/core/package.json +++ b/code/core/package.json @@ -1,6 +1,6 @@ { "name": "storybook", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/core/src/common/versions.ts b/code/core/src/common/versions.ts index c8c75856164d..c5e263507c85 100644 --- a/code/core/src/common/versions.ts +++ b/code/core/src/common/versions.ts @@ -1,46 +1,46 @@ // auto generated file, do not edit export default { - '@storybook/addon-a11y': '9.1.4', - '@storybook/addon-docs': '9.1.4', - '@storybook/addon-jest': '9.1.4', - '@storybook/addon-links': '9.1.4', - '@storybook/addon-onboarding': '9.1.4', - 'storybook-addon-pseudo-states': '9.1.4', - '@storybook/addon-themes': '9.1.4', - '@storybook/addon-vitest': '9.1.4', - '@storybook/builder-vite': '9.1.4', - '@storybook/builder-webpack5': '9.1.4', - storybook: '9.1.4', - '@storybook/angular': '9.1.4', - '@storybook/ember': '9.1.4', - '@storybook/html-vite': '9.1.4', - '@storybook/nextjs': '9.1.4', - '@storybook/nextjs-vite': '9.1.4', - '@storybook/preact-vite': '9.1.4', - '@storybook/react-native-web-vite': '9.1.4', - '@storybook/react-vite': '9.1.4', - '@storybook/react-webpack5': '9.1.4', - '@storybook/server-webpack5': '9.1.4', - '@storybook/svelte-vite': '9.1.4', - '@storybook/sveltekit': '9.1.4', - '@storybook/vue3-vite': '9.1.4', - '@storybook/web-components-vite': '9.1.4', - sb: '9.1.4', - '@storybook/cli': '9.1.4', - '@storybook/codemod': '9.1.4', - '@storybook/core-webpack': '9.1.4', - 'create-storybook': '9.1.4', - '@storybook/csf-plugin': '9.1.4', - 'eslint-plugin-storybook': '9.1.4', - '@storybook/react-dom-shim': '9.1.4', - '@storybook/preset-create-react-app': '9.1.4', - '@storybook/preset-react-webpack': '9.1.4', - '@storybook/preset-server-webpack': '9.1.4', - '@storybook/html': '9.1.4', - '@storybook/preact': '9.1.4', - '@storybook/react': '9.1.4', - '@storybook/server': '9.1.4', - '@storybook/svelte': '9.1.4', - '@storybook/vue3': '9.1.4', - '@storybook/web-components': '9.1.4', + '@storybook/addon-a11y': '9.1.5', + '@storybook/addon-docs': '9.1.5', + '@storybook/addon-jest': '9.1.5', + '@storybook/addon-links': '9.1.5', + '@storybook/addon-onboarding': '9.1.5', + 'storybook-addon-pseudo-states': '9.1.5', + '@storybook/addon-themes': '9.1.5', + '@storybook/addon-vitest': '9.1.5', + '@storybook/builder-vite': '9.1.5', + '@storybook/builder-webpack5': '9.1.5', + storybook: '9.1.5', + '@storybook/angular': '9.1.5', + '@storybook/ember': '9.1.5', + '@storybook/html-vite': '9.1.5', + '@storybook/nextjs': '9.1.5', + '@storybook/nextjs-vite': '9.1.5', + '@storybook/preact-vite': '9.1.5', + '@storybook/react-native-web-vite': '9.1.5', + '@storybook/react-vite': '9.1.5', + '@storybook/react-webpack5': '9.1.5', + '@storybook/server-webpack5': '9.1.5', + '@storybook/svelte-vite': '9.1.5', + '@storybook/sveltekit': '9.1.5', + '@storybook/vue3-vite': '9.1.5', + '@storybook/web-components-vite': '9.1.5', + sb: '9.1.5', + '@storybook/cli': '9.1.5', + '@storybook/codemod': '9.1.5', + '@storybook/core-webpack': '9.1.5', + 'create-storybook': '9.1.5', + '@storybook/csf-plugin': '9.1.5', + 'eslint-plugin-storybook': '9.1.5', + '@storybook/react-dom-shim': '9.1.5', + '@storybook/preset-create-react-app': '9.1.5', + '@storybook/preset-react-webpack': '9.1.5', + '@storybook/preset-server-webpack': '9.1.5', + '@storybook/html': '9.1.5', + '@storybook/preact': '9.1.5', + '@storybook/react': '9.1.5', + '@storybook/server': '9.1.5', + '@storybook/svelte': '9.1.5', + '@storybook/vue3': '9.1.5', + '@storybook/web-components': '9.1.5', }; diff --git a/code/core/src/manager-api/version.ts b/code/core/src/manager-api/version.ts index f170e1604b3b..8203cd1c0c44 100644 --- a/code/core/src/manager-api/version.ts +++ b/code/core/src/manager-api/version.ts @@ -1 +1 @@ -export const version = '9.1.4'; +export const version = '9.1.5'; diff --git a/code/frameworks/angular/package.json b/code/frameworks/angular/package.json index 64ed720cab94..5c9b7b7e896d 100644 --- a/code/frameworks/angular/package.json +++ b/code/frameworks/angular/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/angular", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Angular: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/ember/package.json b/code/frameworks/ember/package.json index 001b185c0ab1..15c86d86ca31 100644 --- a/code/frameworks/ember/package.json +++ b/code/frameworks/ember/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/ember", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Ember: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/html-vite/package.json b/code/frameworks/html-vite/package.json index 87d727f2b470..1e812040da86 100644 --- a/code/frameworks/html-vite/package.json +++ b/code/frameworks/html-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/html-vite", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for HTML and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/nextjs-vite/package.json b/code/frameworks/nextjs-vite/package.json index 07359aa3ffd5..eefe30644f6c 100644 --- a/code/frameworks/nextjs-vite/package.json +++ b/code/frameworks/nextjs-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/nextjs-vite", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Next.js and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/nextjs/package.json b/code/frameworks/nextjs/package.json index 1bbe9ad7c6ec..2e1d48e8c60c 100644 --- a/code/frameworks/nextjs/package.json +++ b/code/frameworks/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/nextjs", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Next.js: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/preact-vite/package.json b/code/frameworks/preact-vite/package.json index 3d8871189e3e..60c94b25a92e 100644 --- a/code/frameworks/preact-vite/package.json +++ b/code/frameworks/preact-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preact-vite", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Preact and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/react-native-web-vite/package.json b/code/frameworks/react-native-web-vite/package.json index 4b35ea6deedc..3bb444f7e2ab 100644 --- a/code/frameworks/react-native-web-vite/package.json +++ b/code/frameworks/react-native-web-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react-native-web-vite", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for React Native Web and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/react-vite/package.json b/code/frameworks/react-vite/package.json index 430e786d8294..46dede1491ea 100644 --- a/code/frameworks/react-vite/package.json +++ b/code/frameworks/react-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react-vite", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for React and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/react-webpack5/package.json b/code/frameworks/react-webpack5/package.json index 81c16211a198..5e6494ab99e7 100644 --- a/code/frameworks/react-webpack5/package.json +++ b/code/frameworks/react-webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react-webpack5", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for React and Webpack: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/server-webpack5/package.json b/code/frameworks/server-webpack5/package.json index 1cb2cc5b870e..924dcf94c470 100644 --- a/code/frameworks/server-webpack5/package.json +++ b/code/frameworks/server-webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/server-webpack5", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Server: View HTML snippets from a server in isolation with Hot Reloading.", "keywords": [ "storybook", diff --git a/code/frameworks/svelte-vite/package.json b/code/frameworks/svelte-vite/package.json index 3c160f45aaec..fced61694237 100644 --- a/code/frameworks/svelte-vite/package.json +++ b/code/frameworks/svelte-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/svelte-vite", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Svelte and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/sveltekit/package.json b/code/frameworks/sveltekit/package.json index e6cd135ef08e..2eb3754f8e11 100644 --- a/code/frameworks/sveltekit/package.json +++ b/code/frameworks/sveltekit/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/sveltekit", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for SvelteKit: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/vue3-vite/package.json b/code/frameworks/vue3-vite/package.json index 3ed3946eba8f..483f50e16211 100644 --- a/code/frameworks/vue3-vite/package.json +++ b/code/frameworks/vue3-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/vue3-vite", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Vue3 and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/web-components-vite/package.json b/code/frameworks/web-components-vite/package.json index 2d4c01607dd0..dc756e6eba22 100644 --- a/code/frameworks/web-components-vite/package.json +++ b/code/frameworks/web-components-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/web-components-vite", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Web Components and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/lib/cli-sb/package.json b/code/lib/cli-sb/package.json index a5e4e63eea46..59e9a6825327 100644 --- a/code/lib/cli-sb/package.json +++ b/code/lib/cli-sb/package.json @@ -1,6 +1,6 @@ { "name": "sb", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook CLI: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/lib/cli-storybook/package.json b/code/lib/cli-storybook/package.json index 1b73795e0bab..da99c001854d 100644 --- a/code/lib/cli-storybook/package.json +++ b/code/lib/cli-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/cli", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook CLI: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/lib/codemod/package.json b/code/lib/codemod/package.json index 3f3bdf950346..e5eed41e6f15 100644 --- a/code/lib/codemod/package.json +++ b/code/lib/codemod/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/codemod", - "version": "9.1.4", + "version": "9.1.5", "description": "A collection of codemod scripts written with JSCodeshift", "keywords": [ "storybook" diff --git a/code/lib/core-webpack/package.json b/code/lib/core-webpack/package.json index 5af8cadfc7f0..6c80a83bc0ae 100644 --- a/code/lib/core-webpack/package.json +++ b/code/lib/core-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/core-webpack", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook framework-agnostic API", "keywords": [ "storybook" diff --git a/code/lib/create-storybook/package.json b/code/lib/create-storybook/package.json index 6420f4c39cd8..aae86846d42e 100644 --- a/code/lib/create-storybook/package.json +++ b/code/lib/create-storybook/package.json @@ -1,6 +1,6 @@ { "name": "create-storybook", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook installer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/lib/csf-plugin/package.json b/code/lib/csf-plugin/package.json index 22c59e571150..24617de2f03a 100644 --- a/code/lib/csf-plugin/package.json +++ b/code/lib/csf-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/csf-plugin", - "version": "9.1.4", + "version": "9.1.5", "description": "Enrich CSF files via static analysis", "keywords": [ "storybook" diff --git a/code/lib/eslint-plugin/package.json b/code/lib/eslint-plugin/package.json index ee70c7ce7e81..383aafa6ed84 100644 --- a/code/lib/eslint-plugin/package.json +++ b/code/lib/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-storybook", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook ESLint Plugin: Best practice rules for writing stories", "keywords": [ "eslint", diff --git a/code/lib/react-dom-shim/package.json b/code/lib/react-dom-shim/package.json index 8d106bd15364..de237649adea 100644 --- a/code/lib/react-dom-shim/package.json +++ b/code/lib/react-dom-shim/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react-dom-shim", - "version": "9.1.4", + "version": "9.1.5", "description": "", "keywords": [ "storybook" diff --git a/code/package.json b/code/package.json index be8ca70b5337..b8b6d8542430 100644 --- a/code/package.json +++ b/code/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/root", - "version": "9.1.4", + "version": "9.1.5", "private": true, "description": "Storybook root", "homepage": "https://storybook.js.org/", @@ -285,6 +285,5 @@ "Dependency Upgrades" ] ] - }, - "deferredNextVersion": "9.1.5" + } } diff --git a/code/presets/create-react-app/package.json b/code/presets/create-react-app/package.json index b6b45739c9be..ced609458c7e 100644 --- a/code/presets/create-react-app/package.json +++ b/code/presets/create-react-app/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preset-create-react-app", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Create React App preset", "keywords": [ "storybook" diff --git a/code/presets/react-webpack/package.json b/code/presets/react-webpack/package.json index 008806d5e794..c2ed5184cc61 100644 --- a/code/presets/react-webpack/package.json +++ b/code/presets/react-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preset-react-webpack", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for React: Develop React Component in isolation with Hot Reloading", "keywords": [ "storybook" diff --git a/code/presets/server-webpack/package.json b/code/presets/server-webpack/package.json index 66283714af0d..7d65315363c0 100644 --- a/code/presets/server-webpack/package.json +++ b/code/presets/server-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preset-server-webpack", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook for Server: View HTML snippets from a server in isolation with Hot Reloading.", "keywords": [ "storybook" diff --git a/code/renderers/html/package.json b/code/renderers/html/package.json index 11dd998bba0b..5fd7bb4830d6 100644 --- a/code/renderers/html/package.json +++ b/code/renderers/html/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/html", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook HTML renderer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/renderers/preact/package.json b/code/renderers/preact/package.json index 549ef93c2415..5678f143d52e 100644 --- a/code/renderers/preact/package.json +++ b/code/renderers/preact/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preact", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Preact renderer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/renderers/react/package.json b/code/renderers/react/package.json index a4210f6ac54a..90d584570ecf 100644 --- a/code/renderers/react/package.json +++ b/code/renderers/react/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook React renderer", "keywords": [ "storybook" diff --git a/code/renderers/server/package.json b/code/renderers/server/package.json index 22f5a570a049..5a28d40f7628 100644 --- a/code/renderers/server/package.json +++ b/code/renderers/server/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/server", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Server renderer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/renderers/svelte/package.json b/code/renderers/svelte/package.json index 4838a8136694..2b6bd5a46dd7 100644 --- a/code/renderers/svelte/package.json +++ b/code/renderers/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/svelte", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Svelte renderer: Develop, document, and test UI components in isolation.", "keywords": [ "storybook", diff --git a/code/renderers/vue3/package.json b/code/renderers/vue3/package.json index a13907269380..a9074757c75b 100644 --- a/code/renderers/vue3/package.json +++ b/code/renderers/vue3/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/vue3", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Vue 3 renderer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/renderers/web-components/package.json b/code/renderers/web-components/package.json index 6515828e6cdb..7d0fb6000520 100644 --- a/code/renderers/web-components/package.json +++ b/code/renderers/web-components/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/web-components", - "version": "9.1.4", + "version": "9.1.5", "description": "Storybook Web Components renderer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", From 9c1c6d9d039b7c223cace7d99b9688072127167a Mon Sep 17 00:00:00 2001 From: Vanessa Yuen <6842965+vanessayuenn@users.noreply.github.com> Date: Fri, 5 Sep 2025 10:56:01 +0200 Subject: [PATCH 165/199] Merge pull request #32356 from storybookjs/vy/sentry-release Release: Adds Sentry release creation after publishing to npm (cherry picked from commit e3b728d22abd58f2f0875c4c3d3dca155a11d37a) --- .github/workflows/publish.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0941136bb3a3..fb3a5ac814c0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -189,6 +189,17 @@ jobs: git commit -m "Update $VERSION_FILE for v${{ steps.version.outputs.current-version }}" git push origin main + - name: Create Sentry release + if: steps.publish-needed.outputs.published == 'false' + uses: sentry/action-release@v2 + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: ${{ secrets.SENTRY_ORG }} + SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + with: + release: ${{ steps.version.outputs.current-version }} + environment: ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'prerelease' || 'latest' }} + - name: Report job failure to Discord if: failure() env: From a9d51fdb9e3e379422950942dc65f4681a602d07 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Wed, 10 Sep 2025 23:17:47 -0500 Subject: [PATCH 166/199] Merge pull request #32438 from storybookjs/dannyhw/fix/react-native-web-peerdep React Native Web: Fix RNW peer dependency version (cherry picked from commit 0b13a9490dfd65c332e90411239024468202b012) --- code/frameworks/react-native-web-vite/package.json | 2 +- code/yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/frameworks/react-native-web-vite/package.json b/code/frameworks/react-native-web-vite/package.json index 3bb444f7e2ab..433c356d9cc3 100644 --- a/code/frameworks/react-native-web-vite/package.json +++ b/code/frameworks/react-native-web-vite/package.json @@ -80,7 +80,7 @@ "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", "react-native": ">=0.74.5", - "react-native-web": "^0.19.12 || ^0.20.0", + "react-native-web": "^0.19.12 || ^0.20.0 || ^0.21.0", "storybook": "workspace:^", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" }, diff --git a/code/yarn.lock b/code/yarn.lock index 59259f6637cb..ba3a43e2dc94 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -6998,7 +6998,7 @@ __metadata: 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 react-native: ">=0.74.5" - react-native-web: ^0.19.12 || ^0.20.0 + react-native-web: ^0.19.12 || ^0.20.0 || ^0.21.0 storybook: "workspace:^" vite: ^5.0.0 || ^6.0.0 || ^7.0.0 languageName: unknown From 4e32f28de8f648a14d7fffedc92b5160948372dd Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Fri, 12 Sep 2025 09:41:06 +0200 Subject: [PATCH 167/199] Merge pull request #32439 from storybookjs/norbert/fix-type-event-slowdown Instrumenter: Fix userEvent.type performance regression (cherry picked from commit 395bae603ace68860f24db5ab759015f49451587) --- code/core/src/test/preview.ts | 5 ++++- code/core/src/test/testing-library.ts | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/core/src/test/preview.ts b/code/core/src/test/preview.ts index 0fb276a7215b..e2e8cfafd4ac 100644 --- a/code/core/src/test/preview.ts +++ b/code/core/src/test/preview.ts @@ -96,7 +96,10 @@ const enhanceContext: LoaderFunction = async (context) => { if (clipboard) { context.userEvent = instrument( { userEvent: uninstrumentedUserEvent.setup() }, - { intercept: true } + { + intercept: true, + getKeys: (obj) => Object.keys(obj).filter((key) => key !== 'eventWrapper'), + } ).userEvent; // Restore original clipboard, which was replaced with a stub by userEvent.setup() diff --git a/code/core/src/test/testing-library.ts b/code/core/src/test/testing-library.ts index 0990efb50b54..50ecfb693b15 100644 --- a/code/core/src/test/testing-library.ts +++ b/code/core/src/test/testing-library.ts @@ -15,6 +15,7 @@ type TestingLibraryDom = typeof domTestingLibrary; const testingLibrary = instrument( { ...domTestingLibrary }, { + getKeys: (obj) => Object.keys(obj).filter((key) => key !== 'eventWrapper'), intercept: (method, path) => path[0] === 'fireEvent' || method.startsWith('find') || method.startsWith('waitFor'), } @@ -118,5 +119,5 @@ export const uninstrumentedUserEvent = _userEvent.userEvent; export const { userEvent }: { userEvent: UserEvent['userEvent'] } = instrument( { userEvent: _userEvent.userEvent }, - { intercept: true } + { intercept: true, getKeys: (obj) => Object.keys(obj).filter((key) => key !== 'eventWrapper') } ); From 11b38843c51952d92a8d54c9cf5146f630fb9ab3 Mon Sep 17 00:00:00 2001 From: storybook-bot <32066757+storybook-bot@users.noreply.github.com> Date: Mon, 15 Sep 2025 06:39:09 +0000 Subject: [PATCH 168/199] Write changelog for 9.1.6 [skip ci] --- CHANGELOG.md | 7 +++++++ code/package.json | 3 ++- docs/versions/latest.json | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 162b33d1d6a0..e39ebdce39e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## 9.1.6 + +- CLI: Capture the version specifier used in `create-storybook` - [#32344](https://github.com/storybookjs/storybook/pull/32344), thanks @shilman! +- Instrumenter: Fix userEvent.type performance regression - [#32439](https://github.com/storybookjs/storybook/pull/32439), thanks @ndelangen! +- React Native Web: Fix RNW peer dependency version - [#32438](https://github.com/storybookjs/storybook/pull/32438), thanks @dannyhw! +- Telemetry: Record known CLI integrations - [#32448](https://github.com/storybookjs/storybook/pull/32448), thanks @shilman! + ## 9.1.5 - CSF: Support `satisfies x as y` syntax - [#32169](https://github.com/storybookjs/storybook/pull/32169), thanks @diagramatics! diff --git a/code/package.json b/code/package.json index b8b6d8542430..b45164f563b6 100644 --- a/code/package.json +++ b/code/package.json @@ -285,5 +285,6 @@ "Dependency Upgrades" ] ] - } + }, + "deferredNextVersion": "9.1.6" } diff --git a/docs/versions/latest.json b/docs/versions/latest.json index 593dd5af945f..be86d960440f 100644 --- a/docs/versions/latest.json +++ b/docs/versions/latest.json @@ -1 +1 @@ -{"version":"9.1.5","info":{"plain":"- CSF: Support `satisfies x as y` syntax - [#32169](https://github.com/storybookjs/storybook/pull/32169), thanks @diagramatics!\n- Vitest addon: Handle Playwright installation errors gracefully - [#32329](https://github.com/storybookjs/storybook/pull/32329), thanks @ndelangen!"}} +{"version":"9.1.6","info":{"plain":"- CLI: Capture the version specifier used in `create-storybook` - [#32344](https://github.com/storybookjs/storybook/pull/32344), thanks @shilman!\n- Instrumenter: Fix userEvent.type performance regression - [#32439](https://github.com/storybookjs/storybook/pull/32439), thanks @ndelangen!\n- React Native Web: Fix RNW peer dependency version - [#32438](https://github.com/storybookjs/storybook/pull/32438), thanks @dannyhw!\n- Telemetry: Record known CLI integrations - [#32448](https://github.com/storybookjs/storybook/pull/32448), thanks @shilman!"}} From c69e759c133a828042e25d79615d0a0163126c59 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Thu, 11 Sep 2025 13:43:51 +0200 Subject: [PATCH 169/199] Merge pull request #32344 from storybookjs/shilman/init-version-specifier CLI: Capture the version specifier used in `create-storybook` (cherry picked from commit 98c4d9a81cd35002cae67869bc0c83274525a912) --- code/lib/create-storybook/package.json | 1 + .../lib/create-storybook/src/initiate.test.ts | 65 ++++++++++++++++++- code/lib/create-storybook/src/initiate.ts | 27 +++++++- code/yarn.lock | 8 +++ 4 files changed, 99 insertions(+), 2 deletions(-) diff --git a/code/lib/create-storybook/package.json b/code/lib/create-storybook/package.json index aae86846d42e..937aaefc0ab4 100644 --- a/code/lib/create-storybook/package.json +++ b/code/lib/create-storybook/package.json @@ -56,6 +56,7 @@ "find-up": "^7.0.0", "ora": "^5.4.1", "picocolors": "^1.1.0", + "process-ancestry": "^0.0.2", "prompts": "^2.4.0", "react": "^18.2.0", "storybook": "workspace:*", diff --git a/code/lib/create-storybook/src/initiate.test.ts b/code/lib/create-storybook/src/initiate.test.ts index bfd7ff703798..4f98e8b9fb00 100644 --- a/code/lib/create-storybook/src/initiate.test.ts +++ b/code/lib/create-storybook/src/initiate.test.ts @@ -5,7 +5,7 @@ import prompts from 'prompts'; import type { Settings } from '../../../core/src/cli/globalSettings'; import { ProjectType } from '../../../core/src/cli/project_types'; import { telemetry } from '../../../core/src/telemetry'; -import { promptInstallType, promptNewUser } from './initiate'; +import { getStorybookVersionFromAncestry, promptInstallType, promptNewUser } from './initiate'; vi.mock('prompts', { spy: true }); vi.mock('../../../core/src/telemetry'); @@ -155,3 +155,66 @@ describe('promptInstallType', () => { `); }); }); + +describe('getStorybookVersionFromAncestry', () => { + it('possible storybook path', () => { + const ancestry = [{ command: 'node' }, { command: 'storybook@7.0.0' }, { command: 'npm' }]; + expect(getStorybookVersionFromAncestry(ancestry as any)).toBeUndefined(); + }); + + it('create storybook', () => { + const ancestry = [ + { command: 'node' }, + { command: 'npm create storybook@7.0.0-alpha.3' }, + { command: 'npm' }, + ]; + expect(getStorybookVersionFromAncestry(ancestry as any)).toBe('7.0.0-alpha.3'); + }); + + it('storybook init', () => { + const ancestry = [ + { command: 'node' }, + { command: 'npx storybook@7.0.0 init' }, + { command: 'npm' }, + ]; + expect(getStorybookVersionFromAncestry(ancestry as any)).toBe('7.0.0'); + }); + + it('storybook init no version', () => { + const ancestry = [{ command: 'node' }, { command: 'npx storybook init' }, { command: 'npm' }]; + expect(getStorybookVersionFromAncestry(ancestry as any)).toBeUndefined(); + }); + + it('create-storybook with latest', () => { + const ancestry = [ + { command: 'node' }, + { command: 'npx create-storybook@latest' }, + { command: 'npm' }, + ]; + expect(getStorybookVersionFromAncestry(ancestry as any)).toBe('latest'); + }); + + it('foo-storybook with latest', () => { + const ancestry = [ + { command: 'node' }, + { command: 'npx foo-storybook@latest' }, + { command: 'npm' }, + ]; + expect(getStorybookVersionFromAncestry(ancestry as any)).toBeUndefined(); + }); + + it('multiple matches', () => { + const ancestry = [ + { command: 'node' }, + { command: 'npx create-storybook@foo' }, + { command: 'npm' }, + { command: 'npx create-storybook@bar' }, + ]; + expect(getStorybookVersionFromAncestry(ancestry as any)).toBe('bar'); + }); + + it('returns undefined if no storybook version found', () => { + const ancestry = [{ command: 'node' }, { command: 'npm' }]; + expect(getStorybookVersionFromAncestry(ancestry as any)).toBeUndefined(); + }); +}); diff --git a/code/lib/create-storybook/src/initiate.ts b/code/lib/create-storybook/src/initiate.ts index 326be9d0bac9..e1a990304dda 100644 --- a/code/lib/create-storybook/src/initiate.ts +++ b/code/lib/create-storybook/src/initiate.ts @@ -4,6 +4,7 @@ import fs from 'node:fs/promises'; import boxen from 'boxen'; import { findUp } from 'find-up'; import picocolors from 'picocolors'; +import { getProcessAncestry } from 'process-ancestry'; import prompts from 'prompts'; import { lt, prerelease } from 'semver'; import { dedent } from 'ts-dedent'; @@ -375,6 +376,18 @@ export const promptInstallType = async ({ return installType; }; +export function getStorybookVersionFromAncestry( + ancestry: ReturnType +): string | undefined { + for (const ancestor of ancestry.toReversed()) { + const match = ancestor.command?.match(/\s(?:create-storybook|storybook)@([^\s]+)/); + if (match) { + return match[1]; + } + } + return undefined; +} + export async function doInitiate(options: CommandOptions): Promise< | { shouldRunDev: true; @@ -418,6 +431,13 @@ export async function doInitiate(options: CommandOptions): Promise< const isPrerelease = prerelease(currentVersion); const isOutdated = lt(currentVersion, latestVersion); const borderColor = isOutdated ? '#FC521F' : '#F1618C'; + let versionSpecifier = undefined; + try { + const ancestry = getProcessAncestry(); + versionSpecifier = getStorybookVersionFromAncestry(ancestry); + } catch (err) { + // + } const messages = { welcome: `Adding Storybook version ${picocolors.bold(currentVersion)} to your project..`, @@ -628,7 +648,12 @@ export async function doInitiate(options: CommandOptions): Promise< } if (!options.disableTelemetry) { - await telemetry('init', { projectType, features: telemetryFeatures, newUser }); + await telemetry('init', { + projectType, + features: telemetryFeatures, + newUser, + versionSpecifier, + }); } if ([ProjectType.REACT_NATIVE, ProjectType.REACT_NATIVE_AND_RNW].includes(projectType)) { diff --git a/code/yarn.lock b/code/yarn.lock index ba3a43e2dc94..a8c7916063b5 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -12187,6 +12187,7 @@ __metadata: find-up: "npm:^7.0.0" ora: "npm:^5.4.1" picocolors: "npm:^1.1.0" + process-ancestry: "npm:^0.0.2" prompts: "npm:^2.4.0" react: "npm:^18.2.0" semver: "npm:^7.6.2" @@ -22180,6 +22181,13 @@ __metadata: languageName: node linkType: hard +"process-ancestry@npm:^0.0.2": + version: 0.0.2 + resolution: "process-ancestry@npm:0.0.2" + checksum: 10c0/bca0290b7d3bd35da3a30bb958b2b0f2724f468b80d1b41e58d9a6a49fc42ff466faf49c2d085e94b7b660fee654be26e047b43f6b6065613ca123432bd409a9 + languageName: node + linkType: hard + "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" From aac8a9d90f8df4468ef95439c84c85237e3084b9 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Mon, 15 Sep 2025 08:36:38 +0200 Subject: [PATCH 170/199] Merge pull request #32448 from storybookjs/shilman/cli-integratino-telemetry Telemetry: Record known CLI integrations (cherry picked from commit 1e65c88b6c8d32a866db666d93cedeaa925fff43) --- .../lib/create-storybook/src/initiate.test.ts | 29 ++++++++++++++++++- code/lib/create-storybook/src/initiate.ts | 15 ++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/code/lib/create-storybook/src/initiate.test.ts b/code/lib/create-storybook/src/initiate.test.ts index 4f98e8b9fb00..1ab3219f86a9 100644 --- a/code/lib/create-storybook/src/initiate.test.ts +++ b/code/lib/create-storybook/src/initiate.test.ts @@ -5,7 +5,12 @@ import prompts from 'prompts'; import type { Settings } from '../../../core/src/cli/globalSettings'; import { ProjectType } from '../../../core/src/cli/project_types'; import { telemetry } from '../../../core/src/telemetry'; -import { getStorybookVersionFromAncestry, promptInstallType, promptNewUser } from './initiate'; +import { + getCliIntegrationFromAncestry, + getStorybookVersionFromAncestry, + promptInstallType, + promptNewUser, +} from './initiate'; vi.mock('prompts', { spy: true }); vi.mock('../../../core/src/telemetry'); @@ -218,3 +223,25 @@ describe('getStorybookVersionFromAncestry', () => { expect(getStorybookVersionFromAncestry(ancestry as any)).toBeUndefined(); }); }); + +describe('getCliIntegrationFromAncestry', () => { + it('returns the CLI integration if nested calls', () => { + const ancestry = [{ command: 'node' }, { command: 'npx sv add' }, { command: 'npx sv create' }]; + expect(getCliIntegrationFromAncestry(ancestry as any)).toBe('sv create'); + }); + + it('returns the CLI integration if found', () => { + const ancestry = [{ command: 'node' }, { command: 'npx sv add' }]; + expect(getCliIntegrationFromAncestry(ancestry as any)).toBe('sv add'); + }); + + it('returns the CLI integration if found', () => { + const ancestry = [{ command: 'node' }, { command: 'npx sv@latest add' }]; + expect(getCliIntegrationFromAncestry(ancestry as any)).toBe('sv add'); + }); + + it('returns undefined if no CLI integration found', () => { + const ancestry = [{ command: 'node' }, { command: 'npm' }]; + expect(getCliIntegrationFromAncestry(ancestry as any)).toBeUndefined(); + }); +}); diff --git a/code/lib/create-storybook/src/initiate.ts b/code/lib/create-storybook/src/initiate.ts index e1a990304dda..54cf6fc14948 100644 --- a/code/lib/create-storybook/src/initiate.ts +++ b/code/lib/create-storybook/src/initiate.ts @@ -388,6 +388,18 @@ export function getStorybookVersionFromAncestry( return undefined; } +export function getCliIntegrationFromAncestry( + ancestry: ReturnType +): string | undefined { + for (const ancestor of ancestry.toReversed()) { + const match = ancestor.command?.match(/\s(sv(@[^ ]+)? create|sv(@[^ ]+)? add)/i); + if (match) { + return match[1].includes('add') ? 'sv add' : 'sv create'; + } + } + return undefined; +} + export async function doInitiate(options: CommandOptions): Promise< | { shouldRunDev: true; @@ -432,9 +444,11 @@ export async function doInitiate(options: CommandOptions): Promise< const isOutdated = lt(currentVersion, latestVersion); const borderColor = isOutdated ? '#FC521F' : '#F1618C'; let versionSpecifier = undefined; + let cliIntegration = undefined; try { const ancestry = getProcessAncestry(); versionSpecifier = getStorybookVersionFromAncestry(ancestry); + cliIntegration = getCliIntegrationFromAncestry(ancestry); } catch (err) { // } @@ -653,6 +667,7 @@ export async function doInitiate(options: CommandOptions): Promise< features: telemetryFeatures, newUser, versionSpecifier, + cliIntegration, }); } From 2b1bbd2a045b86e4e761be6f248a3a08a4d03e81 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Mon, 15 Sep 2025 09:57:24 +0200 Subject: [PATCH 171/199] Update GitHub Actions workflow: change node-version-file quotes and update Sentry action version --- .github/workflows/publish.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index fb3a5ac814c0..ab5f88d4c10c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -45,7 +45,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version-file: ".nvmrc" + node-version-file: '.nvmrc' - name: Cache dependencies uses: actions/cache@v4 @@ -191,7 +191,7 @@ jobs: - name: Create Sentry release if: steps.publish-needed.outputs.published == 'false' - uses: sentry/action-release@v2 + uses: getsentry/action-release@v3 env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_ORG: ${{ secrets.SENTRY_ORG }} @@ -206,4 +206,4 @@ jobs: DISCORD_WEBHOOK: ${{ secrets.DISCORD_MONITORING_URL }} uses: Ilshidur/action-discord@master with: - args: "The GitHub Action for publishing version ${{ steps.version.outputs.current-version }} (triggered by ${{ github.triggering_actor }}) failed! See run at: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" + args: 'The GitHub Action for publishing version ${{ steps.version.outputs.current-version }} (triggered by ${{ github.triggering_actor }}) failed! See run at: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}' From 304edc38c499434140d712d8416749e75efe5dd1 Mon Sep 17 00:00:00 2001 From: storybook-bot <32066757+storybook-bot@users.noreply.github.com> Date: Mon, 15 Sep 2025 07:59:00 +0000 Subject: [PATCH 172/199] Bump version from "9.1.5" to "9.1.6" [skip ci] --- code/addons/a11y/package.json | 2 +- code/addons/docs/package.json | 2 +- code/addons/jest/package.json | 2 +- code/addons/links/package.json | 2 +- code/addons/onboarding/package.json | 2 +- code/addons/pseudo-states/package.json | 2 +- code/addons/themes/package.json | 2 +- code/addons/vitest/package.json | 2 +- code/builders/builder-vite/package.json | 2 +- code/builders/builder-webpack5/package.json | 2 +- code/core/package.json | 2 +- code/core/src/common/versions.ts | 86 +++++++++---------- code/core/src/manager-api/version.ts | 2 +- code/frameworks/angular/package.json | 2 +- code/frameworks/ember/package.json | 2 +- code/frameworks/html-vite/package.json | 2 +- code/frameworks/nextjs-vite/package.json | 2 +- code/frameworks/nextjs/package.json | 2 +- code/frameworks/preact-vite/package.json | 2 +- .../react-native-web-vite/package.json | 2 +- code/frameworks/react-vite/package.json | 2 +- code/frameworks/react-webpack5/package.json | 2 +- code/frameworks/server-webpack5/package.json | 2 +- code/frameworks/svelte-vite/package.json | 2 +- code/frameworks/sveltekit/package.json | 2 +- code/frameworks/vue3-vite/package.json | 2 +- .../web-components-vite/package.json | 2 +- code/lib/cli-sb/package.json | 2 +- code/lib/cli-storybook/package.json | 2 +- code/lib/codemod/package.json | 2 +- code/lib/core-webpack/package.json | 2 +- code/lib/create-storybook/package.json | 2 +- code/lib/csf-plugin/package.json | 2 +- code/lib/eslint-plugin/package.json | 2 +- code/lib/react-dom-shim/package.json | 2 +- code/package.json | 5 +- code/presets/create-react-app/package.json | 2 +- code/presets/react-webpack/package.json | 2 +- code/presets/server-webpack/package.json | 2 +- code/renderers/html/package.json | 2 +- code/renderers/preact/package.json | 2 +- code/renderers/react/package.json | 2 +- code/renderers/server/package.json | 2 +- code/renderers/svelte/package.json | 2 +- code/renderers/vue3/package.json | 2 +- code/renderers/web-components/package.json | 2 +- 46 files changed, 89 insertions(+), 90 deletions(-) diff --git a/code/addons/a11y/package.json b/code/addons/a11y/package.json index 6ec29f7a1217..8b1e8d59d9e8 100644 --- a/code/addons/a11y/package.json +++ b/code/addons/a11y/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-a11y", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Addon A11y: Test UI component compliance with WCAG web accessibility standards", "keywords": [ "a11y", diff --git a/code/addons/docs/package.json b/code/addons/docs/package.json index b854c4b1abdb..c63e24d3aac7 100644 --- a/code/addons/docs/package.json +++ b/code/addons/docs/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-docs", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Docs: Document UI components automatically with stories and MDX", "keywords": [ "docs", diff --git a/code/addons/jest/package.json b/code/addons/jest/package.json index 85db09e021f4..4accdd506f27 100644 --- a/code/addons/jest/package.json +++ b/code/addons/jest/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-jest", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Jest addon: Show Jest report in Storybook's addon panel", "keywords": [ "jest", diff --git a/code/addons/links/package.json b/code/addons/links/package.json index a9aac5e760ea..7a6ee006e365 100644 --- a/code/addons/links/package.json +++ b/code/addons/links/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-links", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Links: Link stories together to build demos and prototypes with your UI components", "keywords": [ "storybook", diff --git a/code/addons/onboarding/package.json b/code/addons/onboarding/package.json index e826603b9af9..b765c9ca2725 100644 --- a/code/addons/onboarding/package.json +++ b/code/addons/onboarding/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-onboarding", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Onboarding: Help new users learn how to write stories", "keywords": [ "storybook", diff --git a/code/addons/pseudo-states/package.json b/code/addons/pseudo-states/package.json index d1b9d830920d..08de20f18c68 100644 --- a/code/addons/pseudo-states/package.json +++ b/code/addons/pseudo-states/package.json @@ -1,6 +1,6 @@ { "name": "storybook-addon-pseudo-states", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Pseudo-states addon: Manipulate CSS pseudo states", "keywords": [ "storybook", diff --git a/code/addons/themes/package.json b/code/addons/themes/package.json index e580a148b027..27c158cafb40 100644 --- a/code/addons/themes/package.json +++ b/code/addons/themes/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-themes", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Themes addon: Switch between themes from the toolbar", "keywords": [ "css", diff --git a/code/addons/vitest/package.json b/code/addons/vitest/package.json index 34afcbf4755c..c87b7eade401 100644 --- a/code/addons/vitest/package.json +++ b/code/addons/vitest/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-vitest", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Vitest addon: Blazing fast component testing using stories", "keywords": [ "storybook", diff --git a/code/builders/builder-vite/package.json b/code/builders/builder-vite/package.json index 9c7bac001ead..9298ddc4495c 100644 --- a/code/builders/builder-vite/package.json +++ b/code/builders/builder-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/builder-vite", - "version": "9.1.5", + "version": "9.1.6", "description": "A Storybook builder to dev and build with Vite", "keywords": [ "storybook", diff --git a/code/builders/builder-webpack5/package.json b/code/builders/builder-webpack5/package.json index 8a67d95f0394..de1a11bb6859 100644 --- a/code/builders/builder-webpack5/package.json +++ b/code/builders/builder-webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/builder-webpack5", - "version": "9.1.5", + "version": "9.1.6", "description": "A Storybook builder to dev and build with Webpack", "keywords": [ "storybook", diff --git a/code/core/package.json b/code/core/package.json index 81287989bd46..55bb0d090ef7 100644 --- a/code/core/package.json +++ b/code/core/package.json @@ -1,6 +1,6 @@ { "name": "storybook", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/core/src/common/versions.ts b/code/core/src/common/versions.ts index c5e263507c85..880a27a1183f 100644 --- a/code/core/src/common/versions.ts +++ b/code/core/src/common/versions.ts @@ -1,46 +1,46 @@ // auto generated file, do not edit export default { - '@storybook/addon-a11y': '9.1.5', - '@storybook/addon-docs': '9.1.5', - '@storybook/addon-jest': '9.1.5', - '@storybook/addon-links': '9.1.5', - '@storybook/addon-onboarding': '9.1.5', - 'storybook-addon-pseudo-states': '9.1.5', - '@storybook/addon-themes': '9.1.5', - '@storybook/addon-vitest': '9.1.5', - '@storybook/builder-vite': '9.1.5', - '@storybook/builder-webpack5': '9.1.5', - storybook: '9.1.5', - '@storybook/angular': '9.1.5', - '@storybook/ember': '9.1.5', - '@storybook/html-vite': '9.1.5', - '@storybook/nextjs': '9.1.5', - '@storybook/nextjs-vite': '9.1.5', - '@storybook/preact-vite': '9.1.5', - '@storybook/react-native-web-vite': '9.1.5', - '@storybook/react-vite': '9.1.5', - '@storybook/react-webpack5': '9.1.5', - '@storybook/server-webpack5': '9.1.5', - '@storybook/svelte-vite': '9.1.5', - '@storybook/sveltekit': '9.1.5', - '@storybook/vue3-vite': '9.1.5', - '@storybook/web-components-vite': '9.1.5', - sb: '9.1.5', - '@storybook/cli': '9.1.5', - '@storybook/codemod': '9.1.5', - '@storybook/core-webpack': '9.1.5', - 'create-storybook': '9.1.5', - '@storybook/csf-plugin': '9.1.5', - 'eslint-plugin-storybook': '9.1.5', - '@storybook/react-dom-shim': '9.1.5', - '@storybook/preset-create-react-app': '9.1.5', - '@storybook/preset-react-webpack': '9.1.5', - '@storybook/preset-server-webpack': '9.1.5', - '@storybook/html': '9.1.5', - '@storybook/preact': '9.1.5', - '@storybook/react': '9.1.5', - '@storybook/server': '9.1.5', - '@storybook/svelte': '9.1.5', - '@storybook/vue3': '9.1.5', - '@storybook/web-components': '9.1.5', + '@storybook/addon-a11y': '9.1.6', + '@storybook/addon-docs': '9.1.6', + '@storybook/addon-jest': '9.1.6', + '@storybook/addon-links': '9.1.6', + '@storybook/addon-onboarding': '9.1.6', + 'storybook-addon-pseudo-states': '9.1.6', + '@storybook/addon-themes': '9.1.6', + '@storybook/addon-vitest': '9.1.6', + '@storybook/builder-vite': '9.1.6', + '@storybook/builder-webpack5': '9.1.6', + storybook: '9.1.6', + '@storybook/angular': '9.1.6', + '@storybook/ember': '9.1.6', + '@storybook/html-vite': '9.1.6', + '@storybook/nextjs': '9.1.6', + '@storybook/nextjs-vite': '9.1.6', + '@storybook/preact-vite': '9.1.6', + '@storybook/react-native-web-vite': '9.1.6', + '@storybook/react-vite': '9.1.6', + '@storybook/react-webpack5': '9.1.6', + '@storybook/server-webpack5': '9.1.6', + '@storybook/svelte-vite': '9.1.6', + '@storybook/sveltekit': '9.1.6', + '@storybook/vue3-vite': '9.1.6', + '@storybook/web-components-vite': '9.1.6', + sb: '9.1.6', + '@storybook/cli': '9.1.6', + '@storybook/codemod': '9.1.6', + '@storybook/core-webpack': '9.1.6', + 'create-storybook': '9.1.6', + '@storybook/csf-plugin': '9.1.6', + 'eslint-plugin-storybook': '9.1.6', + '@storybook/react-dom-shim': '9.1.6', + '@storybook/preset-create-react-app': '9.1.6', + '@storybook/preset-react-webpack': '9.1.6', + '@storybook/preset-server-webpack': '9.1.6', + '@storybook/html': '9.1.6', + '@storybook/preact': '9.1.6', + '@storybook/react': '9.1.6', + '@storybook/server': '9.1.6', + '@storybook/svelte': '9.1.6', + '@storybook/vue3': '9.1.6', + '@storybook/web-components': '9.1.6', }; diff --git a/code/core/src/manager-api/version.ts b/code/core/src/manager-api/version.ts index 8203cd1c0c44..3e2ea5902b60 100644 --- a/code/core/src/manager-api/version.ts +++ b/code/core/src/manager-api/version.ts @@ -1 +1 @@ -export const version = '9.1.5'; +export const version = '9.1.6'; diff --git a/code/frameworks/angular/package.json b/code/frameworks/angular/package.json index 5c9b7b7e896d..a33a7a43ff57 100644 --- a/code/frameworks/angular/package.json +++ b/code/frameworks/angular/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/angular", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Angular: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/ember/package.json b/code/frameworks/ember/package.json index 15c86d86ca31..43c29dcd1009 100644 --- a/code/frameworks/ember/package.json +++ b/code/frameworks/ember/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/ember", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Ember: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/html-vite/package.json b/code/frameworks/html-vite/package.json index 1e812040da86..95dbf5e321e2 100644 --- a/code/frameworks/html-vite/package.json +++ b/code/frameworks/html-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/html-vite", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for HTML and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/nextjs-vite/package.json b/code/frameworks/nextjs-vite/package.json index eefe30644f6c..9bc0715b81df 100644 --- a/code/frameworks/nextjs-vite/package.json +++ b/code/frameworks/nextjs-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/nextjs-vite", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Next.js and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/nextjs/package.json b/code/frameworks/nextjs/package.json index 2e1d48e8c60c..3fcdf70962af 100644 --- a/code/frameworks/nextjs/package.json +++ b/code/frameworks/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/nextjs", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Next.js: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/preact-vite/package.json b/code/frameworks/preact-vite/package.json index 60c94b25a92e..79a20f4af598 100644 --- a/code/frameworks/preact-vite/package.json +++ b/code/frameworks/preact-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preact-vite", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Preact and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/react-native-web-vite/package.json b/code/frameworks/react-native-web-vite/package.json index 433c356d9cc3..da79c067d32f 100644 --- a/code/frameworks/react-native-web-vite/package.json +++ b/code/frameworks/react-native-web-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react-native-web-vite", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for React Native Web and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/react-vite/package.json b/code/frameworks/react-vite/package.json index 46dede1491ea..f74a07182c44 100644 --- a/code/frameworks/react-vite/package.json +++ b/code/frameworks/react-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react-vite", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for React and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/react-webpack5/package.json b/code/frameworks/react-webpack5/package.json index 5e6494ab99e7..2a9efb2182ed 100644 --- a/code/frameworks/react-webpack5/package.json +++ b/code/frameworks/react-webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react-webpack5", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for React and Webpack: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/server-webpack5/package.json b/code/frameworks/server-webpack5/package.json index 924dcf94c470..5ae793afea73 100644 --- a/code/frameworks/server-webpack5/package.json +++ b/code/frameworks/server-webpack5/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/server-webpack5", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Server: View HTML snippets from a server in isolation with Hot Reloading.", "keywords": [ "storybook", diff --git a/code/frameworks/svelte-vite/package.json b/code/frameworks/svelte-vite/package.json index fced61694237..f6d64607199d 100644 --- a/code/frameworks/svelte-vite/package.json +++ b/code/frameworks/svelte-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/svelte-vite", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Svelte and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/sveltekit/package.json b/code/frameworks/sveltekit/package.json index 2eb3754f8e11..c0768be1d4a7 100644 --- a/code/frameworks/sveltekit/package.json +++ b/code/frameworks/sveltekit/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/sveltekit", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for SvelteKit: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/vue3-vite/package.json b/code/frameworks/vue3-vite/package.json index 483f50e16211..cee5a9a514cd 100644 --- a/code/frameworks/vue3-vite/package.json +++ b/code/frameworks/vue3-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/vue3-vite", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Vue3 and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/frameworks/web-components-vite/package.json b/code/frameworks/web-components-vite/package.json index dc756e6eba22..b99dc4ebf880 100644 --- a/code/frameworks/web-components-vite/package.json +++ b/code/frameworks/web-components-vite/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/web-components-vite", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Web Components and Vite: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/lib/cli-sb/package.json b/code/lib/cli-sb/package.json index 59e9a6825327..8f6f908235a4 100644 --- a/code/lib/cli-sb/package.json +++ b/code/lib/cli-sb/package.json @@ -1,6 +1,6 @@ { "name": "sb", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook CLI: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/lib/cli-storybook/package.json b/code/lib/cli-storybook/package.json index da99c001854d..d8e38b3874f5 100644 --- a/code/lib/cli-storybook/package.json +++ b/code/lib/cli-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/cli", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook CLI: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/lib/codemod/package.json b/code/lib/codemod/package.json index e5eed41e6f15..0375226e3a3b 100644 --- a/code/lib/codemod/package.json +++ b/code/lib/codemod/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/codemod", - "version": "9.1.5", + "version": "9.1.6", "description": "A collection of codemod scripts written with JSCodeshift", "keywords": [ "storybook" diff --git a/code/lib/core-webpack/package.json b/code/lib/core-webpack/package.json index 6c80a83bc0ae..5e8c0002a1e0 100644 --- a/code/lib/core-webpack/package.json +++ b/code/lib/core-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/core-webpack", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook framework-agnostic API", "keywords": [ "storybook" diff --git a/code/lib/create-storybook/package.json b/code/lib/create-storybook/package.json index 937aaefc0ab4..4bb3f04e1462 100644 --- a/code/lib/create-storybook/package.json +++ b/code/lib/create-storybook/package.json @@ -1,6 +1,6 @@ { "name": "create-storybook", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook installer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/lib/csf-plugin/package.json b/code/lib/csf-plugin/package.json index 24617de2f03a..fc5e94c392a9 100644 --- a/code/lib/csf-plugin/package.json +++ b/code/lib/csf-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/csf-plugin", - "version": "9.1.5", + "version": "9.1.6", "description": "Enrich CSF files via static analysis", "keywords": [ "storybook" diff --git a/code/lib/eslint-plugin/package.json b/code/lib/eslint-plugin/package.json index 383aafa6ed84..89fb0f44f08b 100644 --- a/code/lib/eslint-plugin/package.json +++ b/code/lib/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-storybook", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook ESLint Plugin: Best practice rules for writing stories", "keywords": [ "eslint", diff --git a/code/lib/react-dom-shim/package.json b/code/lib/react-dom-shim/package.json index de237649adea..a64bfc40ad15 100644 --- a/code/lib/react-dom-shim/package.json +++ b/code/lib/react-dom-shim/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react-dom-shim", - "version": "9.1.5", + "version": "9.1.6", "description": "", "keywords": [ "storybook" diff --git a/code/package.json b/code/package.json index b45164f563b6..4f77ab2050c8 100644 --- a/code/package.json +++ b/code/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/root", - "version": "9.1.5", + "version": "9.1.6", "private": true, "description": "Storybook root", "homepage": "https://storybook.js.org/", @@ -285,6 +285,5 @@ "Dependency Upgrades" ] ] - }, - "deferredNextVersion": "9.1.6" + } } diff --git a/code/presets/create-react-app/package.json b/code/presets/create-react-app/package.json index ced609458c7e..ab72895889d2 100644 --- a/code/presets/create-react-app/package.json +++ b/code/presets/create-react-app/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preset-create-react-app", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Create React App preset", "keywords": [ "storybook" diff --git a/code/presets/react-webpack/package.json b/code/presets/react-webpack/package.json index c2ed5184cc61..212c9ff98fd3 100644 --- a/code/presets/react-webpack/package.json +++ b/code/presets/react-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preset-react-webpack", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for React: Develop React Component in isolation with Hot Reloading", "keywords": [ "storybook" diff --git a/code/presets/server-webpack/package.json b/code/presets/server-webpack/package.json index 7d65315363c0..17f59a34df66 100644 --- a/code/presets/server-webpack/package.json +++ b/code/presets/server-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preset-server-webpack", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook for Server: View HTML snippets from a server in isolation with Hot Reloading.", "keywords": [ "storybook" diff --git a/code/renderers/html/package.json b/code/renderers/html/package.json index 5fd7bb4830d6..cf19b4b50d12 100644 --- a/code/renderers/html/package.json +++ b/code/renderers/html/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/html", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook HTML renderer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/renderers/preact/package.json b/code/renderers/preact/package.json index 5678f143d52e..cf73b0393387 100644 --- a/code/renderers/preact/package.json +++ b/code/renderers/preact/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preact", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Preact renderer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/renderers/react/package.json b/code/renderers/react/package.json index 90d584570ecf..fe564923b0d1 100644 --- a/code/renderers/react/package.json +++ b/code/renderers/react/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook React renderer", "keywords": [ "storybook" diff --git a/code/renderers/server/package.json b/code/renderers/server/package.json index 5a28d40f7628..b4af777cc571 100644 --- a/code/renderers/server/package.json +++ b/code/renderers/server/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/server", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Server renderer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/renderers/svelte/package.json b/code/renderers/svelte/package.json index 2b6bd5a46dd7..9a0855bc1906 100644 --- a/code/renderers/svelte/package.json +++ b/code/renderers/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/svelte", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Svelte renderer: Develop, document, and test UI components in isolation.", "keywords": [ "storybook", diff --git a/code/renderers/vue3/package.json b/code/renderers/vue3/package.json index a9074757c75b..e592c94f2a56 100644 --- a/code/renderers/vue3/package.json +++ b/code/renderers/vue3/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/vue3", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Vue 3 renderer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", diff --git a/code/renderers/web-components/package.json b/code/renderers/web-components/package.json index 7d0fb6000520..db5c3accc706 100644 --- a/code/renderers/web-components/package.json +++ b/code/renderers/web-components/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/web-components", - "version": "9.1.5", + "version": "9.1.6", "description": "Storybook Web Components renderer: Develop, document, and test UI components in isolation", "keywords": [ "storybook", From de396c4acb257303539961dc600fae77d0ec6793 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Mon, 15 Sep 2025 12:46:05 +0200 Subject: [PATCH 173/199] fix merge conflict --- scripts/tasks/sandbox-parts.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/scripts/tasks/sandbox-parts.ts b/scripts/tasks/sandbox-parts.ts index 4c1aa7e8cc39..6d354b340fc5 100644 --- a/scripts/tasks/sandbox-parts.ts +++ b/scripts/tasks/sandbox-parts.ts @@ -878,14 +878,6 @@ async function prepareReactNativeWebSandbox(cwd: string) { } } -async function prepareReactNativeWebSandbox(cwd: string) { - // Make it so that RN sandboxes have stories in src/stories similar to - // other react sandboxes, for consistency. - if (!(await pathExists(join(cwd, 'src')))) { - await mkdir(join(cwd, 'src')); - } -} - async function prepareAngularSandbox(cwd: string, templateName: string) { const angularJson = await readJson(join(cwd, 'angular.json')); From b5d65ed4d389e68e933c1f568453bfd2de2b2be4 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Mon, 15 Sep 2025 15:40:32 +0200 Subject: [PATCH 174/199] fix e2e tests --- code/e2e-tests/preview-api.spec.ts | 2 +- code/e2e-tests/tags.spec.ts | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/e2e-tests/preview-api.spec.ts b/code/e2e-tests/preview-api.spec.ts index 104b7b2bad9c..997f8fc6eff2 100644 --- a/code/e2e-tests/preview-api.spec.ts +++ b/code/e2e-tests/preview-api.spec.ts @@ -1,7 +1,7 @@ import { expect, test } from '@playwright/test'; import process from 'process'; -import { SbPage, hasVitestIntegration } from './util'; +import { SbPage } from './util'; const storybookUrl = process.env.STORYBOOK_URL || 'http://localhost:8001'; const templateName = process.env.STORYBOOK_TEMPLATE_NAME || ''; diff --git a/code/e2e-tests/tags.spec.ts b/code/e2e-tests/tags.spec.ts index 3e9dfadc3dbe..103572ae227e 100644 --- a/code/e2e-tests/tags.spec.ts +++ b/code/e2e-tests/tags.spec.ts @@ -59,15 +59,15 @@ test.describe('tags', () => { await expect(tooltip.locator('input[type="checkbox"]:checked')).toHaveCount(0); // Select the dev-only tag - await tooltip.locator('#list-item-tag-dev-only').click(); + await page.getByText('dev-only', { exact: true }).click(); // Assert that only one story is visible in the sidebar const stories = page.locator('#storybook-explorer-menu .sidebar-item'); await expect(stories).toHaveCount(1); // Clear selection - await expect(tooltip.locator('#reset-filters')).toBeVisible(); - await tooltip.locator('#reset-filters').click(); + await expect(tooltip.locator('#deselect-all')).toBeVisible(); + await tooltip.locator('#deselect-all').click(); // Checkboxes are not selected anymore await expect(tooltip.locator('input[type="checkbox"]:checked')).toHaveCount(0); @@ -92,15 +92,15 @@ test.describe('tags', () => { await expect(tooltip.locator('input[type="checkbox"]:checked')).toHaveCount(0); // Select the dev-only tag - await tooltip.locator('#list-item-tag-dev-only').click(); + await page.getByText('dev-only', { exact: true }).click(); // Assert that only one story is visible in the (mobile) sidebar const stories = page.locator('#storybook-explorer-menu .sidebar-item'); await expect(stories).toHaveCount(1); // Clear selection - await expect(tooltip.locator('#reset-filters')).toBeVisible(); - await tooltip.locator('#reset-filters').click(); + await expect(tooltip.locator('#deselect-all')).toBeVisible(); + await tooltip.locator('#deselect-all').click(); // Checkboxes are not selected anymore await expect(tooltip.locator('input[type="checkbox"]:checked')).toHaveCount(0); From b868eb18379d7ad5ba39b241cd7f18b05bc697c7 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Tue, 16 Sep 2025 17:06:39 +0200 Subject: [PATCH 175/199] Special handling for built-in tags --- .../manager/components/sidebar/TagsFilter.tsx | 6 +- .../components/sidebar/TagsFilterPanel.tsx | 113 +++++++++++++----- 2 files changed, 85 insertions(+), 34 deletions(-) diff --git a/code/core/src/manager/components/sidebar/TagsFilter.tsx b/code/core/src/manager/components/sidebar/TagsFilter.tsx index e93f854f10b6..5b2bacd38ec7 100644 --- a/code/core/src/manager/components/sidebar/TagsFilter.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilter.tsx @@ -8,12 +8,10 @@ import { FilterIcon } from '@storybook/icons'; import type { API } from 'storybook/manager-api'; import { styled } from 'storybook/theming'; -import { TagsFilterPanel } from './TagsFilterPanel'; +import { HIDDEN_TAGS, TagsFilterPanel } from './TagsFilterPanel'; const TAGS_FILTER = 'tags-filter'; -const BUILT_IN_TAGS_HIDE = new Set(['dev', 'autodocs', 'test', 'attached-mdx', 'unattached-mdx']); - const Wrapper = styled.div({ position: 'relative', }); @@ -47,7 +45,7 @@ export const TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }: TagsFi const allTags = useMemo(() => { return Object.values(indexJson.entries).reduce((acc, entry) => { entry.tags?.forEach((tag: Tag) => { - if (!BUILT_IN_TAGS_HIDE.has(tag)) { + if (!HIDDEN_TAGS.has(tag)) { acc.set(tag, (acc.get(tag) || 0) + 1); } }); diff --git a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx index a11e91f298ed..591c9210cbb2 100644 --- a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx @@ -13,29 +13,29 @@ import type { Tag } from 'storybook/internal/types'; import { BatchAcceptIcon, + BeakerIcon, DeleteIcon, DocumentIcon, + PlayIcon, ShareAltIcon, SweepIcon, UndoIcon, } from '@storybook/icons'; import type { API } from 'storybook/manager-api'; -import { styled } from 'storybook/theming'; +import { color, styled } from 'storybook/theming'; import type { Link } from '../../../components/components/tooltip/TooltipLinkList'; -const BUILT_IN_TAGS = new Set([ - 'dev', - 'test', +export const HIDDEN_TAGS = new Set(['dev', 'test']); + +export const BUILT_IN_TAGS = new Set([ + ...HIDDEN_TAGS, 'autodocs', 'attached-mdx', 'unattached-mdx', 'play-fn', 'test-fn', - 'svelte-csf', - 'svelte-csf-v4', - 'svelte-csf-v5', ]); const Wrapper = styled.div({ @@ -112,13 +112,16 @@ export const TagsFilterPanel = ({ }: TagsFilterPanelProps) => { const ref = useRef(null); - const [builtInEntries, userEntries] = allTags.entries().reduce( - (acc, [tag, count]) => { - acc[BUILT_IN_TAGS.has(tag) ? 0 : 1].push([tag, count]); - return acc; - }, - [[], []] as [[Tag, number][], [Tag, number][]] - ); + const userEntries = Array.from(allTags.entries()) + .filter(([tag]) => !BUILT_IN_TAGS.has(tag)) + .sort((a, b) => a[0].localeCompare(b[0])) + .map(([tag, count]) => ({ + title: tag, + count, + onToggle: (excluded?: boolean) => toggleTag(tag, excluded), + isIncluded: includedTags.has(tag), + isExcluded: excludedTags.has(tag), + })); const docsUrl = api.getDocsUrl({ subpath: 'writing-stories/tags#filtering-by-custom-tags' }); @@ -128,46 +131,58 @@ export const TagsFilterPanel = ({ isIndented: false, }; - const renderTag = ([tag, count]: [Tag, number]) => { - const excluded = excludedTags.has(tag); - const checked = excluded || includedTags.has(tag); - const id = `tag-${tag}`; + const renderTag = ({ + icon, + title, + count, + onToggle, + isIncluded, + isExcluded, + }: { + icon?: React.ReactNode; + title: string; + count: number; + onToggle: (excluded?: boolean) => void; + isIncluded: boolean; + isExcluded: boolean; + }) => { + const isChecked = isIncluded || isExcluded; return { - id, + id: `tag-${title}`, content: ( } + tooltip={} trigger="hover" > - {excluded && } - toggleTag(tag)} data-tag={tag} /> + {isExcluded ? : isIncluded ? null : icon} + onToggle()} data-tag={title} /> } title={ } - right={excluded ? {count} : {count}} + right={isExcluded ? {count} : {count}} /> } + tooltip={} trigger="hover" > - @@ -177,8 +192,46 @@ export const TagsFilterPanel = ({ const groups = [ allTags.size === 0 ? [noTags] : [], - userEntries.sort((a, b) => a[0].localeCompare(b[0])).map(renderTag), - builtInEntries.sort((a, b) => a[0].localeCompare(b[0])).map(renderTag), + userEntries.map(renderTag), + [ + renderTag({ + icon: , + title: 'Documentation', + count: + (allTags.get('autodocs') || 0) + + (allTags.get('attached-mdx') || 0) + + (allTags.get('unattached-mdx') || 0) || 0, + onToggle: (excluded?: boolean) => { + toggleTag('autodocs', excluded); + toggleTag('attached-mdx', excluded); + toggleTag('unattached-mdx', excluded); + }, + isIncluded: + includedTags.has('autodocs') || + includedTags.has('attached-mdx') || + includedTags.has('unattached-mdx'), + isExcluded: + excludedTags.has('autodocs') || + excludedTags.has('attached-mdx') || + excludedTags.has('unattached-mdx'), + }), + renderTag({ + icon: , + title: 'Play', + count: allTags.get('play-fn') || 0, + onToggle: (excluded?: boolean) => toggleTag('play-fn', excluded), + isIncluded: includedTags.has('play-fn'), + isExcluded: excludedTags.has('play-fn'), + }), + renderTag({ + icon: , + title: 'Testing', + count: allTags.get('test-fn') || 0, + onToggle: (excluded?: boolean) => toggleTag('test-fn', excluded), + isIncluded: includedTags.has('test-fn'), + isExcluded: excludedTags.has('test-fn'), + }), + ], ] as Link[][]; if (userEntries.length === 0 && isDevelopment) { From f3a4f4ab759f6cf24d2a20f691fb493b4069dd46 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Tue, 16 Sep 2025 18:21:06 +0200 Subject: [PATCH 176/199] replace tags filter play icon --- code/core/src/manager/components/sidebar/TagsFilterPanel.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx index 591c9210cbb2..3dc6789672d0 100644 --- a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx @@ -16,7 +16,7 @@ import { BeakerIcon, DeleteIcon, DocumentIcon, - PlayIcon, + PlayHollowIcon, ShareAltIcon, SweepIcon, UndoIcon, @@ -216,7 +216,7 @@ export const TagsFilterPanel = ({ excludedTags.has('unattached-mdx'), }), renderTag({ - icon: , + icon: , title: 'Play', count: allTags.get('play-fn') || 0, onToggle: (excluded?: boolean) => toggleTag('play-fn', excluded), From 25f0f9255e478ee091eae7170c8f035981ef3e14 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Wed, 17 Sep 2025 12:57:33 +0200 Subject: [PATCH 177/199] Add missing subtype properties --- .../src/manager-api/tests/stories.test.ts | 10 + code/core/src/manager-api/tests/url.test.js | 3 +- .../navigation/MobileNavigation.stories.tsx | 2 + .../components/sidebar/Tree.stories.tsx | 1 + .../components/sidebar/mockdata.large.ts | 1514 +++++++++++++++++ .../preview-web/render/StoryRender.test.ts | 1 + code/e2e-tests/json-files.spec.ts | 1 + 7 files changed, 1531 insertions(+), 1 deletion(-) diff --git a/code/core/src/manager-api/tests/stories.test.ts b/code/core/src/manager-api/tests/stories.test.ts index 14cf99336351..293d081c5738 100644 --- a/code/core/src/manager-api/tests/stories.test.ts +++ b/code/core/src/manager-api/tests/stories.test.ts @@ -127,6 +127,7 @@ describe('stories API', () => { }); expect(index!['component-a--story-1']).toMatchObject({ type: 'story', + subtype: 'story', id: 'component-a--story-1', parent: 'component-a', title: 'Component A', @@ -172,6 +173,7 @@ describe('stories API', () => { }); expect(index!['design-system-some-component--my-story']).toMatchObject({ type: 'story', + subtype: 'story', title: ' Design System / Some Component ', // title is kept as-is, because it may be used as identifier name: ' My Story ', // story name is kept as-is, because it's set directly on the story }); @@ -251,6 +253,7 @@ describe('stories API', () => { }); expect(index!['a-b--1']).toMatchObject({ type: 'story', + subtype: 'story', id: 'a-b--1', parent: 'a-b', name: '1', @@ -285,6 +288,7 @@ describe('stories API', () => { }); expect(index!['a--1']).toMatchObject({ type: 'story', + subtype: 'story', id: 'a--1', parent: 'a', title: 'a', @@ -329,6 +333,7 @@ describe('stories API', () => { }); expect(index!['a--1']).toMatchObject({ type: 'story', + subtype: 'story', id: 'a--1', parent: 'a', title: 'a', @@ -337,6 +342,7 @@ describe('stories API', () => { }); expect(index!['a--2']).toMatchObject({ type: 'story', + subtype: 'story', id: 'a--2', parent: 'a', title: 'a', @@ -489,6 +495,7 @@ describe('stories API', () => { const { index } = store.getState(); expect(index!['prepared--story']).toMatchObject({ type: 'story', + subtype: 'story', id: 'prepared--story', parent: 'prepared', title: 'Prepared', @@ -624,6 +631,7 @@ describe('stories API', () => { entries: { 'component-a--story-1': { type: 'story', + subtype: 'story', id: 'component-a--story-1', title: 'Component A', name: 'Story 1', @@ -675,6 +683,7 @@ describe('stories API', () => { entries: { 'component-a--story-1': { type: 'story', + subtype: 'story', id: 'component-a--story-1', title: 'Component A', name: 'Story 1', @@ -1220,6 +1229,7 @@ describe('stories API', () => { const { index } = store.getState(); expect(index!['component-a--story-1']).toMatchObject({ type: 'story', + subtype: 'story', id: 'component-a--story-1', parent: 'component-a', title: 'Component A', diff --git a/code/core/src/manager-api/tests/url.test.js b/code/core/src/manager-api/tests/url.test.js index 92c6ca8694d9..349783223291 100644 --- a/code/core/src/manager-api/tests/url.test.js +++ b/code/core/src/manager-api/tests/url.test.js @@ -173,6 +173,7 @@ describe('initModule', () => { fullAPI: Object.assign(fullAPI, { getCurrentStoryData: () => ({ type: 'story', + subtype: 'story', args: { a: 1, b: 2 }, initialArgs: { a: 1, b: 1 }, }), @@ -218,7 +219,7 @@ describe('initModule', () => { state: { location }, navigate, fullAPI: Object.assign(fullAPI, { - getCurrentStoryData: () => ({ type: 'story', args: { a: 1 } }), + getCurrentStoryData: () => ({ type: 'story', subtype: 'story', args: { a: 1 } }), }), }); diff --git a/code/core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx b/code/core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx index 74bfdc9bfb6f..f495a2b9862b 100644 --- a/code/core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx +++ b/code/core/src/manager/components/mobile/navigation/MobileNavigation.stories.tsx @@ -45,6 +45,7 @@ const mockManagerStore: any = { }, someStoryId: { type: 'story', + subtype: 'story', id: 'someStoryId', name: 'story', parent: 'someComponentId', @@ -121,6 +122,7 @@ export const LongStoryName: Story = { }, someStoryId: { type: 'story', + subtype: 'story', id: 'someStoryId', name: 'someLongStoryName', parent: 'someComponentId', diff --git a/code/core/src/manager/components/sidebar/Tree.stories.tsx b/code/core/src/manager/components/sidebar/Tree.stories.tsx index 4e8a8cfdbad0..617961705c49 100644 --- a/code/core/src/manager/components/sidebar/Tree.stories.tsx +++ b/code/core/src/manager/components/sidebar/Tree.stories.tsx @@ -138,6 +138,7 @@ export const SingleStoryComponents: Story = { }, 'single--single': { type: 'story', + subtype: 'story', id: 'single--single', title: 'Single', name: 'Single', diff --git a/code/core/src/manager/components/sidebar/mockdata.large.ts b/code/core/src/manager/components/sidebar/mockdata.large.ts index e929bae76cdf..3b970cfdb4c5 100644 --- a/code/core/src/manager/components/sidebar/mockdata.large.ts +++ b/code/core/src/manager/components/sidebar/mockdata.large.ts @@ -36,6 +36,7 @@ export const index = { depth: 1, parent: 'images', type: 'story', + subtype: 'story', prepared: true, }, 'images--brand': { @@ -49,6 +50,7 @@ export const index = { depth: 1, parent: 'images', type: 'story', + subtype: 'story', prepared: true, }, 'images--colored-icons': { @@ -62,6 +64,7 @@ export const index = { depth: 1, parent: 'images', type: 'story', + subtype: 'story', prepared: true, }, 'images--logos': { @@ -75,6 +78,7 @@ export const index = { depth: 1, parent: 'images', type: 'story', + subtype: 'story', prepared: true, }, 'images--shapes': { @@ -88,6 +92,7 @@ export const index = { depth: 1, parent: 'images', type: 'story', + subtype: 'story', prepared: true, }, 'images--thumbnails': { @@ -101,6 +106,7 @@ export const index = { depth: 1, parent: 'images', type: 'story', + subtype: 'story', prepared: true, }, 'images--payment': { @@ -114,6 +120,7 @@ export const index = { depth: 1, parent: 'images', type: 'story', + subtype: 'story', prepared: true, }, emails: { @@ -162,6 +169,7 @@ export const index = { depth: 2, parent: 'emails-buildnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-buildnotification--without-email': { @@ -175,6 +183,7 @@ export const index = { depth: 2, parent: 'emails-buildnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-buildnotification--with-error': { @@ -188,6 +197,7 @@ export const index = { depth: 2, parent: 'emails-buildnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-commentnotification': { @@ -216,6 +226,7 @@ export const index = { depth: 2, parent: 'emails-commentnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-commentnotification--new-discussion-no-diff': { @@ -229,6 +240,7 @@ export const index = { depth: 2, parent: 'emails-commentnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-commentnotification--new-discussion-no-snapshot': { @@ -242,6 +254,7 @@ export const index = { depth: 2, parent: 'emails-commentnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-commentnotification--new-discussion-no-pr': { @@ -255,6 +268,7 @@ export const index = { depth: 2, parent: 'emails-commentnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-commentnotification--new-reply': { @@ -268,6 +282,7 @@ export const index = { depth: 2, parent: 'emails-commentnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-commentnotification--resolution': { @@ -281,6 +296,7 @@ export const index = { depth: 2, parent: 'emails-commentnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-paymentnotification': { @@ -307,6 +323,7 @@ export const index = { depth: 2, parent: 'emails-paymentnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-paymentnotification--trial-ended': { @@ -320,6 +337,7 @@ export const index = { depth: 2, parent: 'emails-paymentnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-paymentnotification--payment-failed': { @@ -333,6 +351,7 @@ export const index = { depth: 2, parent: 'emails-paymentnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-paymentnotification--payment-due': { @@ -346,6 +365,7 @@ export const index = { depth: 2, parent: 'emails-paymentnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-reviewnotification': { @@ -376,6 +396,7 @@ export const index = { depth: 2, parent: 'emails-reviewnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-reviewnotification--approval-with-pending-reviews': { @@ -389,6 +410,7 @@ export const index = { depth: 2, parent: 'emails-reviewnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-reviewnotification--approval-with-pending-review': { @@ -402,6 +424,7 @@ export const index = { depth: 2, parent: 'emails-reviewnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-reviewnotification--approval-git-lab': { @@ -415,6 +438,7 @@ export const index = { depth: 2, parent: 'emails-reviewnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-reviewnotification--requesting-review': { @@ -428,6 +452,7 @@ export const index = { depth: 2, parent: 'emails-reviewnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-reviewnotification--requesting-review-small-diff-count': { @@ -441,6 +466,7 @@ export const index = { depth: 2, parent: 'emails-reviewnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-reviewnotification--requesting-review-with-errors': { @@ -454,6 +480,7 @@ export const index = { depth: 2, parent: 'emails-reviewnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-reviewnotification--requesting-review-only-errors': { @@ -467,6 +494,7 @@ export const index = { depth: 2, parent: 'emails-reviewnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-snapshotnotification': { @@ -491,6 +519,7 @@ export const index = { depth: 2, parent: 'emails-snapshotnotification', type: 'story', + subtype: 'story', prepared: true, }, 'emails-snapshotnotification--limit-reached': { @@ -504,6 +533,7 @@ export const index = { depth: 2, parent: 'emails-snapshotnotification', type: 'story', + subtype: 'story', prepared: true, }, tooltip: { @@ -532,6 +562,7 @@ export const index = { depth: 2, parent: 'tooltip-tooltipbuildlist', type: 'story', + subtype: 'story', prepared: true, }, 'tooltip-tooltipbuildlist--no-commit': { @@ -545,6 +576,7 @@ export const index = { depth: 2, parent: 'tooltip-tooltipbuildlist', type: 'story', + subtype: 'story', prepared: true, }, 'tooltip-tooltipselect': { @@ -566,6 +598,7 @@ export const index = { depth: 2, parent: 'tooltip-tooltipselect', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components': { @@ -700,6 +733,7 @@ export const index = { depth: 2, parent: 'webapp-components-accountmenu', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-accountmenu--saml-user': { @@ -713,6 +747,7 @@ export const index = { depth: 2, parent: 'webapp-components-accountmenu', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem': { @@ -746,6 +781,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem--loading': { @@ -759,6 +795,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem--passed': { @@ -772,6 +809,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem--failed': { @@ -785,6 +823,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem--unreviewed': { @@ -798,6 +837,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem--in-progress': { @@ -811,6 +851,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem--from-agent-passed': { @@ -824,6 +865,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem--timed-out': { @@ -837,6 +879,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem--errored': { @@ -850,6 +893,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem--no-account-name': { @@ -863,6 +907,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activityitem--long-account-name': { @@ -876,6 +921,7 @@ export const index = { depth: 2, parent: 'webapp-components-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activitylist': { @@ -902,6 +948,7 @@ export const index = { depth: 2, parent: 'webapp-components-activitylist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activitylist--full': { @@ -915,6 +962,7 @@ export const index = { depth: 2, parent: 'webapp-components-activitylist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activitylist--full-no-account-name': { @@ -928,6 +976,7 @@ export const index = { depth: 2, parent: 'webapp-components-activitylist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-activitylist--empty': { @@ -941,6 +990,7 @@ export const index = { depth: 2, parent: 'webapp-components-activitylist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appowneritem': { @@ -971,6 +1021,7 @@ export const index = { depth: 2, parent: 'webapp-components-appowneritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appowneritem--user-active': { @@ -984,6 +1035,7 @@ export const index = { depth: 2, parent: 'webapp-components-appowneritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appowneritem--org': { @@ -997,6 +1049,7 @@ export const index = { depth: 2, parent: 'webapp-components-appowneritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appowneritem--org-active': { @@ -1010,6 +1063,7 @@ export const index = { depth: 2, parent: 'webapp-components-appowneritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appowneritem--org-no-avatar': { @@ -1023,6 +1077,7 @@ export const index = { depth: 2, parent: 'webapp-components-appowneritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appowneritem--org-no-avatar-active': { @@ -1036,6 +1091,7 @@ export const index = { depth: 2, parent: 'webapp-components-appowneritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appowneritem--shared-with-you': { @@ -1049,6 +1105,7 @@ export const index = { depth: 2, parent: 'webapp-components-appowneritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appowneritem--shared-with-you-active': { @@ -1062,6 +1119,7 @@ export const index = { depth: 2, parent: 'webapp-components-appowneritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appownerlist': { @@ -1092,6 +1150,7 @@ export const index = { depth: 2, parent: 'webapp-components-appownerlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appownerlist--shared-with-you-selected': { @@ -1105,6 +1164,7 @@ export const index = { depth: 2, parent: 'webapp-components-appownerlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appownerlist--org-selected': { @@ -1118,6 +1178,7 @@ export const index = { depth: 2, parent: 'webapp-components-appownerlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appownerlist--org-selected-saml': { @@ -1131,6 +1192,7 @@ export const index = { depth: 2, parent: 'webapp-components-appownerlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appownerlist--org-selected-adding-pure': { @@ -1144,6 +1206,7 @@ export const index = { depth: 2, parent: 'webapp-components-appownerlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appownerlist--org-selected-adding-pure-no-accounts': { @@ -1157,6 +1220,7 @@ export const index = { depth: 2, parent: 'webapp-components-appownerlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appownerlist--org-selected-adding-pure-refreshing': { @@ -1170,6 +1234,7 @@ export const index = { depth: 2, parent: 'webapp-components-appownerlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-appownerlist--org-selected-adding-pure-bitbucket': { @@ -1183,6 +1248,7 @@ export const index = { depth: 2, parent: 'webapp-components-appownerlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-aspectratiopreserver': { @@ -1204,6 +1270,7 @@ export const index = { depth: 2, parent: 'webapp-components-aspectratiopreserver', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-asynctextaction': { @@ -1230,6 +1297,7 @@ export const index = { depth: 2, parent: 'webapp-components-asynctextaction', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-asynctextaction--loading': { @@ -1243,6 +1311,7 @@ export const index = { depth: 2, parent: 'webapp-components-asynctextaction', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-asynctextaction--loading-with-loading-message': { @@ -1256,6 +1325,7 @@ export const index = { depth: 2, parent: 'webapp-components-asynctextaction', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-asynctextaction--loading-left-placement': { @@ -1269,6 +1339,7 @@ export const index = { depth: 2, parent: 'webapp-components-asynctextaction', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-badgecount': { @@ -1295,6 +1366,7 @@ export const index = { depth: 2, parent: 'webapp-components-badgecount', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-badgecount--positive': { @@ -1308,6 +1380,7 @@ export const index = { depth: 2, parent: 'webapp-components-badgecount', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-badgecount--negative': { @@ -1321,6 +1394,7 @@ export const index = { depth: 2, parent: 'webapp-components-badgecount', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-badgecount--warning': { @@ -1334,6 +1408,7 @@ export const index = { depth: 2, parent: 'webapp-components-badgecount', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-banner': { @@ -1359,6 +1434,7 @@ export const index = { depth: 2, parent: 'webapp-components-banner', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-banner--positive': { @@ -1372,6 +1448,7 @@ export const index = { depth: 2, parent: 'webapp-components-banner', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-banner--negative': { @@ -1385,6 +1462,7 @@ export const index = { depth: 2, parent: 'webapp-components-banner', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-baselinehistory': { @@ -1415,6 +1493,7 @@ export const index = { depth: 2, parent: 'webapp-components-baselinehistory', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-baselinehistory--new-story': { @@ -1428,6 +1507,7 @@ export const index = { depth: 2, parent: 'webapp-components-baselinehistory', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-baselinehistory--typical': { @@ -1441,6 +1521,7 @@ export const index = { depth: 2, parent: 'webapp-components-baselinehistory', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-baselinehistory--baseline-was-accepted': { @@ -1454,6 +1535,7 @@ export const index = { depth: 2, parent: 'webapp-components-baselinehistory', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-baselinehistory--second-build': { @@ -1467,6 +1549,7 @@ export const index = { depth: 2, parent: 'webapp-components-baselinehistory', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-baselinehistory--third-build': { @@ -1480,6 +1563,7 @@ export const index = { depth: 2, parent: 'webapp-components-baselinehistory', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-baselinehistory--most-recent-ancestor': { @@ -1493,6 +1577,7 @@ export const index = { depth: 2, parent: 'webapp-components-baselinehistory', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-baselinehistory--in-tooltip-smaller': { @@ -1506,6 +1591,7 @@ export const index = { depth: 2, parent: 'webapp-components-baselinehistory', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-billingplans': { @@ -1537,6 +1623,7 @@ export const index = { depth: 2, parent: 'webapp-components-billingplans', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-billingplans--is-subscribed-changing-plan': { @@ -1550,6 +1637,7 @@ export const index = { depth: 2, parent: 'webapp-components-billingplans', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-billingplans--free': { @@ -1563,6 +1651,7 @@ export const index = { depth: 2, parent: 'webapp-components-billingplans', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-billingplans--trial': { @@ -1576,6 +1665,7 @@ export const index = { depth: 2, parent: 'webapp-components-billingplans', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-billingplans--in-trial-plan-chosen': { @@ -1589,6 +1679,7 @@ export const index = { depth: 2, parent: 'webapp-components-billingplans', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-billingplans--open-source-paying-for-plan': { @@ -1602,6 +1693,7 @@ export const index = { depth: 2, parent: 'webapp-components-billingplans', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-billingplans--open-source-paying-for-plan-changing-plan': { @@ -1615,6 +1707,7 @@ export const index = { depth: 2, parent: 'webapp-components-billingplans', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-billingplans--open-source-free-account': { @@ -1628,6 +1721,7 @@ export const index = { depth: 2, parent: 'webapp-components-billingplans', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-billingplans--open-source-plan-chosen': { @@ -1641,6 +1735,7 @@ export const index = { depth: 2, parent: 'webapp-components-billingplans', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-branchpicker': { @@ -1662,6 +1757,7 @@ export const index = { depth: 2, parent: 'webapp-components-branchpicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-breadcrumb': { @@ -1687,6 +1783,7 @@ export const index = { depth: 2, parent: 'webapp-components-breadcrumb', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-breadcrumb--root': { @@ -1700,6 +1797,7 @@ export const index = { depth: 2, parent: 'webapp-components-breadcrumb', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-breadcrumb--many-breadcrumbs': { @@ -1713,6 +1811,7 @@ export const index = { depth: 2, parent: 'webapp-components-breadcrumb', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist': { @@ -1755,6 +1854,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlist--full': { @@ -1768,6 +1868,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlist--full-prefixed': { @@ -1781,6 +1882,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlist--empty': { @@ -1794,6 +1896,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlist--filtering-results': { @@ -1807,6 +1910,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlist--filtering-no-results': { @@ -1820,6 +1924,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlistheader': { @@ -1848,6 +1953,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlistheader--default': { @@ -1861,6 +1967,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlistheader--with-actions': { @@ -1874,6 +1981,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlistheader--is-searching': { @@ -1887,6 +1995,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlistheader--is-searching-no-results': { @@ -1900,6 +2009,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-buildcomponentlistheader--navigating-with-breadcrumb': { @@ -1913,6 +2023,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-buildcomponentlistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-groupitem': { @@ -1944,6 +2055,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-groupitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-groupitem--loading': { @@ -1957,6 +2069,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-groupitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-groupitem--empty': { @@ -1970,6 +2083,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-groupitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-groupitem--single': { @@ -1983,6 +2097,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-groupitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-groupitem--fewer': { @@ -1996,6 +2111,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-groupitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-groupitem--full': { @@ -2009,6 +2125,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-groupitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-groupitem--full-snapshotting': { @@ -2022,6 +2139,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-groupitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-groupitem--full-errored': { @@ -2035,6 +2153,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-groupitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-groupitem--complex': { @@ -2048,6 +2167,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-groupitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-polymorphiclist': { @@ -2073,6 +2193,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-polymorphiclist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-polymorphiclist--complex': { @@ -2086,6 +2207,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-polymorphiclist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-polymorphiclist--loading': { @@ -2099,6 +2221,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-polymorphiclist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-rootitem': { @@ -2123,6 +2246,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-rootitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildcomponentlist-rootitem--complex': { @@ -2136,6 +2260,7 @@ export const index = { depth: 3, parent: 'webapp-components-buildcomponentlist-rootitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem': { @@ -2169,6 +2294,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem--loading': { @@ -2182,6 +2308,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem--passed': { @@ -2195,6 +2322,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem--failed': { @@ -2208,6 +2336,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem--unreviewed': { @@ -2221,6 +2350,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem--in-progress': { @@ -2234,6 +2364,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem--from-agent-passed': { @@ -2247,6 +2378,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem--timed-out': { @@ -2260,6 +2392,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem--errored': { @@ -2273,6 +2406,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem--publish-only': { @@ -2286,6 +2420,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-builditem--upgrade': { @@ -2299,6 +2434,7 @@ export const index = { depth: 2, parent: 'webapp-components-builditem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildlist': { @@ -2326,6 +2462,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildlist--full': { @@ -2339,6 +2476,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildlist--has-next-page': { @@ -2352,6 +2490,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildlist--empty': { @@ -2365,6 +2504,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildlist--error': { @@ -2378,6 +2518,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight': { @@ -2415,6 +2556,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--in-progress': { @@ -2428,6 +2570,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--in-progress-rep-only': { @@ -2441,6 +2584,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--in-progress-rep-only-limited': { @@ -2454,6 +2598,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--pending': { @@ -2467,6 +2612,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--passed-limited': { @@ -2480,6 +2626,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--passed': { @@ -2493,6 +2640,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--denied': { @@ -2506,6 +2654,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--accepted': { @@ -2519,6 +2668,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--timed-out': { @@ -2532,6 +2682,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--timed-out-rep-only': { @@ -2545,6 +2696,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--timed-out-rep-only-limited': { @@ -2558,6 +2710,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--build-error': { @@ -2571,6 +2724,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--build-error-rep-only': { @@ -2584,6 +2738,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buildstatuslight--build-error-rep-only-limited': { @@ -2597,6 +2752,7 @@ export const index = { depth: 2, parent: 'webapp-components-buildstatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-button': { @@ -2618,6 +2774,7 @@ export const index = { depth: 2, parent: 'webapp-components-button', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buttonmulti': { @@ -2639,6 +2796,7 @@ export const index = { depth: 2, parent: 'webapp-components-buttonmulti', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buttontoggle': { @@ -2666,6 +2824,7 @@ export const index = { depth: 2, parent: 'webapp-components-buttontoggle', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buttontoggle--outline-three-buttons-small': { @@ -2679,6 +2838,7 @@ export const index = { depth: 2, parent: 'webapp-components-buttontoggle', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buttontoggle--pill-w-text': { @@ -2692,6 +2852,7 @@ export const index = { depth: 2, parent: 'webapp-components-buttontoggle', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buttontoggle--pill-w-image': { @@ -2705,6 +2866,7 @@ export const index = { depth: 2, parent: 'webapp-components-buttontoggle', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-buttontoggle--tab': { @@ -2718,6 +2880,7 @@ export const index = { depth: 2, parent: 'webapp-components-buttontoggle', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas': { @@ -2764,6 +2927,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--default-w-label-link': { @@ -2777,6 +2941,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--pure-w-label-link-at-top': { @@ -2790,6 +2955,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--pure-w-label-link-not-at-top': { @@ -2803,6 +2969,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--default-w-label-link-baseline-tooltip': { @@ -2816,6 +2983,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--default-w-figure-link': { @@ -2829,6 +2997,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--default-w-diff-figure': { @@ -2842,6 +3011,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--default-w-diff-figure-horizontally-larger': { @@ -2855,6 +3025,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--default-w-diff-figure-vertically-larger': { @@ -2868,6 +3039,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--default-w-diff-figure-larger-both-ways': { @@ -2881,6 +3053,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--loading': { @@ -2894,6 +3067,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--in-progress': { @@ -2907,6 +3081,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--snapshot-error': { @@ -2920,6 +3095,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--ignored-regions-hidden': { @@ -2933,6 +3109,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--ignored-regions-shown': { @@ -2946,6 +3123,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--ignored-regions-shown-w-diff-figure': { @@ -2959,6 +3137,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--interactive-url-w-interactive-mode': { @@ -2972,6 +3151,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--interactive-url-w-interactive-mode-bad-url': { @@ -2985,6 +3165,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--interactive-url-w-interactive-mode-bad-spec': { @@ -2998,6 +3179,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--interactive-url-wo-interactive-mode': { @@ -3011,6 +3193,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--pure-interactive-url-connection-problem': { @@ -3024,6 +3207,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--tall-thin-image': { @@ -3037,6 +3221,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--tall-thin-image-w-ignored-regions': { @@ -3050,6 +3235,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-canvas--wide-short-image': { @@ -3063,6 +3249,7 @@ export const index = { depth: 2, parent: 'webapp-components-canvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal': { @@ -3098,6 +3285,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--small-loading': { @@ -3111,6 +3299,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--small-default': { @@ -3124,6 +3313,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--small-positive': { @@ -3137,6 +3327,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--small-negative': { @@ -3150,6 +3341,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--small-warning': { @@ -3163,6 +3355,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--small-neutral': { @@ -3176,6 +3369,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--small-selectable': { @@ -3189,6 +3383,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--large-loading': { @@ -3202,6 +3397,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--large-default': { @@ -3215,6 +3411,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--large-link': { @@ -3228,6 +3425,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--large-singular': { @@ -3241,6 +3439,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cardinal--large-plural': { @@ -3254,6 +3453,7 @@ export const index = { depth: 2, parent: 'webapp-components-cardinal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-checkbox': { @@ -3280,6 +3480,7 @@ export const index = { depth: 2, parent: 'webapp-components-checkbox', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-checkbox--unchecked': { @@ -3293,6 +3494,7 @@ export const index = { depth: 2, parent: 'webapp-components-checkbox', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-checkbox--checked': { @@ -3306,6 +3508,7 @@ export const index = { depth: 2, parent: 'webapp-components-checkbox', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-checkbox--primary': { @@ -3319,6 +3522,7 @@ export const index = { depth: 2, parent: 'webapp-components-checkbox', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cieyebrow': { @@ -3346,6 +3550,7 @@ export const index = { depth: 2, parent: 'webapp-components-cieyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cieyebrow--github': { @@ -3359,6 +3564,7 @@ export const index = { depth: 2, parent: 'webapp-components-cieyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cieyebrow--bitbucket': { @@ -3372,6 +3578,7 @@ export const index = { depth: 2, parent: 'webapp-components-cieyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cieyebrow--gitlab': { @@ -3385,6 +3592,7 @@ export const index = { depth: 2, parent: 'webapp-components-cieyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-cieyebrow--dismissed': { @@ -3398,6 +3606,7 @@ export const index = { depth: 2, parent: 'webapp-components-cieyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-clipboard': { @@ -3422,6 +3631,7 @@ export const index = { depth: 2, parent: 'webapp-components-clipboard', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-clipboard--with-feedback': { @@ -3435,6 +3645,7 @@ export const index = { depth: 2, parent: 'webapp-components-clipboard', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-clipboardcode': { @@ -3459,6 +3670,7 @@ export const index = { depth: 2, parent: 'webapp-components-clipboardcode', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-clipboardcode--wrapped': { @@ -3472,6 +3684,7 @@ export const index = { depth: 2, parent: 'webapp-components-clipboardcode', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-clipboardicon': { @@ -3493,6 +3706,7 @@ export const index = { depth: 2, parent: 'webapp-components-clipboardicon', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-clipboardinput': { @@ -3517,6 +3731,7 @@ export const index = { depth: 2, parent: 'webapp-components-clipboardinput', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-clipboardinput--clipped': { @@ -3530,6 +3745,7 @@ export const index = { depth: 2, parent: 'webapp-components-clipboardinput', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment': { @@ -3581,6 +3797,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-addcomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-addcomment--initial-value': { @@ -3594,6 +3811,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-addcomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-addcomment--with-form-open': { @@ -3607,6 +3825,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-addcomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-addcomment--with-form-open-loading': { @@ -3620,6 +3839,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-addcomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-addcomment--form-pure-with-value': { @@ -3633,6 +3853,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-addcomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-addcomment--form-pure-with-value-loading': { @@ -3646,6 +3867,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-addcomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-addcomment--form-pure-with-error': { @@ -3659,6 +3881,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-addcomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-comment': { @@ -3685,6 +3908,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-comment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-comment--with-link': { @@ -3698,6 +3922,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-comment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-comment--collapsed': { @@ -3711,6 +3936,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-comment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-comment--collapsed-truncated': { @@ -3724,6 +3950,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-comment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentdate': { @@ -3748,6 +3975,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentdate', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentdate--with-build': { @@ -3761,6 +3989,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentdate', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentformmanager': { @@ -3786,6 +4015,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentformmanager', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentformmanager--pure-form-visible': { @@ -3799,6 +4029,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentformmanager', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentformmanager--pure-form-not-visible': { @@ -3812,6 +4043,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentformmanager', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentheading': { @@ -3833,6 +4065,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentheading', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentlist': { @@ -3857,6 +4090,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentlist--cannot-comment': { @@ -3870,6 +4104,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commenttextarea': { @@ -3894,6 +4129,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commenttextarea', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commenttextarea--with-value': { @@ -3907,6 +4143,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commenttextarea', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentthread': { @@ -3932,6 +4169,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentthread--pure-expanded': { @@ -3945,6 +4183,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-commentthread--pure-expanded-w-list': { @@ -3958,6 +4197,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-commentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-deletecomment': { @@ -3983,6 +4223,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-deletecomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-deletecomment--can-delete-with-children': { @@ -3996,6 +4237,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-deletecomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-deletecomment--cannot-delete': { @@ -4009,6 +4251,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-deletecomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread': { @@ -4045,6 +4288,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--active': { @@ -4058,6 +4302,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--active-non-owner': { @@ -4071,6 +4316,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--resolved-logged-out': { @@ -4084,6 +4330,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--resolved': { @@ -4097,6 +4344,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--header-not-commentable': { @@ -4110,6 +4358,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--header-resolved-owner': { @@ -4123,6 +4372,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--header-resolved-non-owner': { @@ -4136,6 +4386,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--header-resolved-logged-out': { @@ -4149,6 +4400,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--header-active-owner': { @@ -4162,6 +4414,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--header-active-non-owner': { @@ -4175,6 +4428,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--collapsed': { @@ -4188,6 +4442,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--collapsed-mutating': { @@ -4201,6 +4456,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-inlinecommentthread--collapsed-mutating-logged-out': { @@ -4214,6 +4470,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-inlinecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-replytocomment': { @@ -4241,6 +4498,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-replytocomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-replytocomment--initial-value': { @@ -4254,6 +4512,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-replytocomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-replytocomment--base-with-form-open': { @@ -4267,6 +4526,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-replytocomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-replytocomment--form-pure-with-value': { @@ -4280,6 +4540,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-replytocomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-replytocomment--form-pure-with-error': { @@ -4293,6 +4554,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-replytocomment', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-resolvecommentthreadbutton': { @@ -4317,6 +4579,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-resolvecommentthreadbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-resolvecommentthreadbutton--with-text': { @@ -4330,6 +4593,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-resolvecommentthreadbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-undoresolvecommentthreadbutton': { @@ -4357,6 +4621,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-undoresolvecommentthreadbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-undoresolvecommentthreadbutton--can-undo-loading-large': { @@ -4370,6 +4635,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-undoresolvecommentthreadbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-undoresolvecommentthreadbutton--cannot-undo-large': { @@ -4383,6 +4649,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-undoresolvecommentthreadbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-undoresolvecommentthreadbutton--can-undo-small': { @@ -4396,6 +4663,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-undoresolvecommentthreadbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-comment-undoresolvecommentthreadbutton--cannot-undo-small': { @@ -4409,6 +4677,7 @@ export const index = { depth: 3, parent: 'webapp-components-comment-undoresolvecommentthreadbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentbranchlist': { @@ -4433,6 +4702,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentbranchlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentbranchlist--feature': { @@ -4446,6 +4716,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentbranchlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentbuildlist': { @@ -4470,6 +4741,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentbuildlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentbuildlist--historical': { @@ -4483,6 +4755,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentbuildlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentbuildspicker': { @@ -4509,6 +4782,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentbuildspicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentbuildspicker--interactive': { @@ -4522,6 +4796,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentbuildspicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentbuildspicker--feature-selected': { @@ -4535,6 +4810,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentbuildspicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentbuildspicker--hide-branches': { @@ -4548,6 +4824,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentbuildspicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentitem': { @@ -4579,6 +4856,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentitem--various-image-sizes': { @@ -4592,6 +4870,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentitem--loading': { @@ -4605,6 +4884,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentitem--in-progress': { @@ -4618,6 +4898,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentitem--errored': { @@ -4631,6 +4912,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentitem--no-capture': { @@ -4644,6 +4926,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentitem--first-run-using-baseline-images': { @@ -4657,6 +4940,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentitem--unchanged-using-baseline-images': { @@ -4670,6 +4954,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentitem--unchanged-not-using-baseline-images': { @@ -4683,6 +4968,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentlist': { @@ -4708,6 +4994,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentlist--full': { @@ -4721,6 +5008,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentlist--empty': { @@ -4734,6 +5022,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentrepresentationimage': { @@ -4766,6 +5055,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentrepresentationimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentrepresentationimage--various-image-sizes': { @@ -4779,6 +5069,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentrepresentationimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentrepresentationimage--in-progress': { @@ -4792,6 +5083,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentrepresentationimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentrepresentationimage--with-error': { @@ -4805,6 +5097,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentrepresentationimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentrepresentationimage--first-run-using-baseline-images': { @@ -4818,6 +5111,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentrepresentationimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentrepresentationimage--unchanged-using-baseline-images': { @@ -4831,6 +5125,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentrepresentationimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentrepresentationimage--unchanged-not-using-baseline-images': { @@ -4844,6 +5139,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentrepresentationimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentrepresentationimage--no-capture': { @@ -4857,6 +5153,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentrepresentationimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentrepresentationimage--image': { @@ -4870,6 +5167,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentrepresentationimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-componentrepresentationimage--long-name': { @@ -4883,6 +5181,7 @@ export const index = { depth: 2, parent: 'webapp-components-componentrepresentationimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-creditcardform': { @@ -4911,6 +5210,7 @@ export const index = { depth: 2, parent: 'webapp-components-creditcardform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-creditcardform--default-billing-fails': { @@ -4924,6 +5224,7 @@ export const index = { depth: 2, parent: 'webapp-components-creditcardform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-creditcardform--pure-submitting': { @@ -4937,6 +5238,7 @@ export const index = { depth: 2, parent: 'webapp-components-creditcardform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-creditcardform--pure-errored': { @@ -4950,6 +5252,7 @@ export const index = { depth: 2, parent: 'webapp-components-creditcardform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-creditcardform--with-billing-email': { @@ -4963,6 +5266,7 @@ export const index = { depth: 2, parent: 'webapp-components-creditcardform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-creditcardform--custom-label-and-cta': { @@ -4976,6 +5280,7 @@ export const index = { depth: 2, parent: 'webapp-components-creditcardform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-dateformatter': { @@ -4997,6 +5302,7 @@ export const index = { depth: 2, parent: 'webapp-components-dateformatter', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage': { @@ -5034,6 +5340,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--loading': { @@ -5047,6 +5354,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-diff': { @@ -5060,6 +5368,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-strobe-diff': { @@ -5073,6 +5382,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-focus-diff': { @@ -5086,6 +5396,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-focus-strobe-diff': { @@ -5099,6 +5410,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-bigger-diff': { @@ -5112,6 +5424,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-horizontally-bigger-diff': { @@ -5125,6 +5438,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-vertically-bigger-diff': { @@ -5138,6 +5452,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--responsive': { @@ -5151,6 +5466,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--responsive-centered': { @@ -5164,6 +5480,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-scaled-diff': { @@ -5177,6 +5494,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-scaled-overflow-diff': { @@ -5190,6 +5508,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-link': { @@ -5203,6 +5522,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-diffimage--with-link-wrapper': { @@ -5216,6 +5536,7 @@ export const index = { depth: 2, parent: 'webapp-components-diffimage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-difftoggles': { @@ -5243,6 +5564,7 @@ export const index = { depth: 2, parent: 'webapp-components-difftoggles', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-difftoggles--diff': { @@ -5256,6 +5578,7 @@ export const index = { depth: 2, parent: 'webapp-components-difftoggles', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-difftoggles--diff-strobe': { @@ -5269,6 +5592,7 @@ export const index = { depth: 2, parent: 'webapp-components-difftoggles', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-difftoggles--diff-focus': { @@ -5282,6 +5606,7 @@ export const index = { depth: 2, parent: 'webapp-components-difftoggles', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-difftoggles--diff-focus-strobe': { @@ -5295,6 +5620,7 @@ export const index = { depth: 2, parent: 'webapp-components-difftoggles', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-emptymessage': { @@ -5321,6 +5647,7 @@ export const index = { depth: 2, parent: 'webapp-components-emptymessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-emptymessage--default': { @@ -5334,6 +5661,7 @@ export const index = { depth: 2, parent: 'webapp-components-emptymessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-emptymessage--custom': { @@ -5347,6 +5675,7 @@ export const index = { depth: 2, parent: 'webapp-components-emptymessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-emptymessage--custom-noun': { @@ -5360,6 +5689,7 @@ export const index = { depth: 2, parent: 'webapp-components-emptymessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-eyebrow': { @@ -5386,6 +5716,7 @@ export const index = { depth: 2, parent: 'webapp-components-eyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-eyebrow--positive': { @@ -5399,6 +5730,7 @@ export const index = { depth: 2, parent: 'webapp-components-eyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-eyebrow--warning': { @@ -5412,6 +5744,7 @@ export const index = { depth: 2, parent: 'webapp-components-eyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-eyebrow--negative': { @@ -5425,6 +5758,7 @@ export const index = { depth: 2, parent: 'webapp-components-eyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-eyebrowonboarding': { @@ -5446,6 +5780,7 @@ export const index = { depth: 2, parent: 'webapp-components-eyebrowonboarding', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-flexcenter': { @@ -5471,6 +5806,7 @@ export const index = { depth: 2, parent: 'webapp-components-flexcenter', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-flexcenter--22': { @@ -5484,6 +5820,7 @@ export const index = { depth: 2, parent: 'webapp-components-flexcenter', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-flexcenter--23': { @@ -5497,6 +5834,7 @@ export const index = { depth: 2, parent: 'webapp-components-flexcenter', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-form': { @@ -5518,6 +5856,7 @@ export const index = { depth: 2, parent: 'webapp-components-form', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header': { @@ -5554,6 +5893,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--logged-in-app': { @@ -5567,6 +5907,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--logged-in-app-saml-user': { @@ -5580,6 +5921,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--logged-in-app-shared-with-you': { @@ -5593,6 +5935,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--logged-in-app-shared-with-admin': { @@ -5606,6 +5949,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--logged-in-app-shared-with-you-open-source': { @@ -5619,6 +5963,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--logged-in-linked-account': { @@ -5632,6 +5977,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--logged-in-personal-account': { @@ -5645,6 +5991,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--logged-in-shared-with-you-app-owner': { @@ -5658,6 +6005,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--logged-in-no-app-owner-or-app': { @@ -5671,6 +6019,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--logged-in-no-app-owner-onboarding': { @@ -5684,6 +6033,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--not-logged-in-can-login': { @@ -5697,6 +6047,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--not-logged-in-can-not-login': { @@ -5710,6 +6061,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-header--long-name': { @@ -5723,6 +6075,7 @@ export const index = { depth: 2, parent: 'webapp-components-header', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-heading': { @@ -5748,6 +6101,7 @@ export const index = { depth: 2, parent: 'webapp-components-heading', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-heading--default': { @@ -5761,6 +6115,7 @@ export const index = { depth: 2, parent: 'webapp-components-heading', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-heading--no-subtitle': { @@ -5774,6 +6129,7 @@ export const index = { depth: 2, parent: 'webapp-components-heading', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-ignoredregions': { @@ -5795,6 +6151,7 @@ export const index = { depth: 2, parent: 'webapp-components-ignoredregions', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-imagetile': { @@ -5827,6 +6184,7 @@ export const index = { depth: 2, parent: 'webapp-components-imagetile', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-imagetile--default': { @@ -5840,6 +6198,7 @@ export const index = { depth: 2, parent: 'webapp-components-imagetile', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-imagetile--long-text': { @@ -5853,6 +6212,7 @@ export const index = { depth: 2, parent: 'webapp-components-imagetile', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-imagetile--no-label': { @@ -5866,6 +6226,7 @@ export const index = { depth: 2, parent: 'webapp-components-imagetile', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-imagetile--no-description': { @@ -5879,6 +6240,7 @@ export const index = { depth: 2, parent: 'webapp-components-imagetile', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-imagetile--as-link': { @@ -5892,6 +6254,7 @@ export const index = { depth: 2, parent: 'webapp-components-imagetile', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-imagetile--as-button': { @@ -5905,6 +6268,7 @@ export const index = { depth: 2, parent: 'webapp-components-imagetile', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-imagetile--with-image': { @@ -5918,6 +6282,7 @@ export const index = { depth: 2, parent: 'webapp-components-imagetile', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-imagetile--with-background': { @@ -5931,6 +6296,7 @@ export const index = { depth: 2, parent: 'webapp-components-imagetile', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-imagetile--with-border': { @@ -5944,6 +6310,7 @@ export const index = { depth: 2, parent: 'webapp-components-imagetile', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-interstitial': { @@ -5970,6 +6337,7 @@ export const index = { depth: 2, parent: 'webapp-components-interstitial', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-interstitial--bar': { @@ -5983,6 +6351,7 @@ export const index = { depth: 2, parent: 'webapp-components-interstitial', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-interstitial--ring': { @@ -5996,6 +6365,7 @@ export const index = { depth: 2, parent: 'webapp-components-interstitial', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-interstitial--icon': { @@ -6009,6 +6379,7 @@ export const index = { depth: 2, parent: 'webapp-components-interstitial', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-inviteeyebrow': { @@ -6033,6 +6404,7 @@ export const index = { depth: 2, parent: 'webapp-components-inviteeyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-inviteeyebrow--linked': { @@ -6046,6 +6418,7 @@ export const index = { depth: 2, parent: 'webapp-components-inviteeyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isactiveelement': { @@ -6070,6 +6443,7 @@ export const index = { depth: 2, parent: 'webapp-components-isactiveelement', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isactiveelement--not-active': { @@ -6083,6 +6457,7 @@ export const index = { depth: 2, parent: 'webapp-components-isactiveelement', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isolatorframe': { @@ -6114,6 +6489,7 @@ export const index = { depth: 2, parent: 'webapp-components-isolatorframe', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isolatorframe--hidden': { @@ -6127,6 +6503,7 @@ export const index = { depth: 2, parent: 'webapp-components-isolatorframe', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isolatorframe--storybook-34': { @@ -6140,6 +6517,7 @@ export const index = { depth: 2, parent: 'webapp-components-isolatorframe', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isolatorframe--storybook-40': { @@ -6153,6 +6531,7 @@ export const index = { depth: 2, parent: 'webapp-components-isolatorframe', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isolatorframe--storybook-5': { @@ -6166,6 +6545,7 @@ export const index = { depth: 2, parent: 'webapp-components-isolatorframe', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isolatorframe--storybook-5-legacy-package': { @@ -6179,6 +6559,7 @@ export const index = { depth: 2, parent: 'webapp-components-isolatorframe', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isolatorframe--storybook-5-error': { @@ -6192,6 +6573,7 @@ export const index = { depth: 2, parent: 'webapp-components-isolatorframe', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isolatorframe--storybook-6': { @@ -6205,6 +6587,7 @@ export const index = { depth: 2, parent: 'webapp-components-isolatorframe', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-isolatorframe--invalid-spec': { @@ -6218,6 +6601,7 @@ export const index = { depth: 2, parent: 'webapp-components-isolatorframe', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-linklist': { @@ -6246,6 +6630,7 @@ export const index = { depth: 2, parent: 'webapp-components-linklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-linklist--loading': { @@ -6259,6 +6644,7 @@ export const index = { depth: 2, parent: 'webapp-components-linklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-linklist--full': { @@ -6272,6 +6658,7 @@ export const index = { depth: 2, parent: 'webapp-components-linklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-linklist--paginated': { @@ -6285,6 +6672,7 @@ export const index = { depth: 2, parent: 'webapp-components-linklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-linklist--empty-w-custom-noun': { @@ -6298,6 +6686,7 @@ export const index = { depth: 2, parent: 'webapp-components-linklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-linklist--empty': { @@ -6311,6 +6700,7 @@ export const index = { depth: 2, parent: 'webapp-components-linklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-linktabs': { @@ -6332,6 +6722,7 @@ export const index = { depth: 2, parent: 'webapp-components-linktabs', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-listheading': { @@ -6353,6 +6744,7 @@ export const index = { depth: 2, parent: 'webapp-components-listheading', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview': { @@ -6387,6 +6779,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--storybook-34-preloading': { @@ -6400,6 +6793,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--storybook-40-preloading': { @@ -6413,6 +6807,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--storybook-5-visible': { @@ -6426,6 +6821,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--storybook-5-error-visible': { @@ -6439,6 +6835,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--storybook-34-visible': { @@ -6452,6 +6849,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--storybook-40-visible': { @@ -6465,6 +6863,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--pure-downloading': { @@ -6478,6 +6877,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--pure-connecting': { @@ -6491,6 +6891,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--pure-connected': { @@ -6504,6 +6905,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--staging': { @@ -6517,6 +6919,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-liveview--production': { @@ -6530,6 +6933,7 @@ export const index = { depth: 2, parent: 'webapp-components-liveview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-mailinglistsubscribeform': { @@ -6554,6 +6958,7 @@ export const index = { depth: 2, parent: 'webapp-components-mailinglistsubscribeform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-mailinglistsubscribeform--opt-in': { @@ -6567,6 +6972,7 @@ export const index = { depth: 2, parent: 'webapp-components-mailinglistsubscribeform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-newappform': { @@ -6595,6 +7001,7 @@ export const index = { depth: 2, parent: 'webapp-components-newappform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-newappform--default-personal-creating': { @@ -6608,6 +7015,7 @@ export const index = { depth: 2, parent: 'webapp-components-newappform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-newappform--default-personal-unlinked': { @@ -6621,6 +7029,7 @@ export const index = { depth: 2, parent: 'webapp-components-newappform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-newappform--default-organization': { @@ -6634,6 +7043,7 @@ export const index = { depth: 2, parent: 'webapp-components-newappform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-newappform--default-github-failure': { @@ -6647,6 +7057,7 @@ export const index = { depth: 2, parent: 'webapp-components-newappform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-newappform--compact-personal-unlinked': { @@ -6660,6 +7071,7 @@ export const index = { depth: 2, parent: 'webapp-components-newappform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-notifications': { @@ -6694,6 +7106,7 @@ export const index = { depth: 3, parent: 'webapp-components-notifications-notification', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-notifications-notifications': { @@ -6715,6 +7128,7 @@ export const index = { depth: 3, parent: 'webapp-components-notifications-notifications', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-notifications-reviewsyncfailednotification': { @@ -6736,6 +7150,7 @@ export const index = { depth: 3, parent: 'webapp-components-notifications-reviewsyncfailednotification', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-notifications-syncingnotification': { @@ -6757,6 +7172,7 @@ export const index = { depth: 3, parent: 'webapp-components-notifications-syncingnotification', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pageheader': { @@ -6782,6 +7198,7 @@ export const index = { depth: 2, parent: 'webapp-components-pageheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pageheader--loading': { @@ -6795,6 +7212,7 @@ export const index = { depth: 2, parent: 'webapp-components-pageheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pageheader--long': { @@ -6808,6 +7226,7 @@ export const index = { depth: 2, parent: 'webapp-components-pageheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pagetitlebar': { @@ -6833,6 +7252,7 @@ export const index = { depth: 2, parent: 'webapp-components-pagetitlebar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pagetitlebar--with-actions': { @@ -6846,6 +7266,7 @@ export const index = { depth: 2, parent: 'webapp-components-pagetitlebar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pagetitlebar--with-children-and-actions': { @@ -6859,6 +7280,7 @@ export const index = { depth: 2, parent: 'webapp-components-pagetitlebar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pagination': { @@ -6880,6 +7302,7 @@ export const index = { depth: 2, parent: 'webapp-components-pagination', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pagination--next': { @@ -6893,6 +7316,7 @@ export const index = { depth: 2, parent: 'webapp-components-pagination', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymentcollectcta': { @@ -6914,6 +7338,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymentcollectcta', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymentcollectmodal': { @@ -6944,6 +7369,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymentcollectmodal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymentcollectmodal--pre-subscribed': { @@ -6957,6 +7383,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymentcollectmodal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymentcollectmodal--exceeded-threshold': { @@ -6970,6 +7397,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymentcollectmodal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymentcollectmodal--free': { @@ -6983,6 +7411,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymentcollectmodal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymentcollectmodal--in-trial': { @@ -6996,6 +7425,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymentcollectmodal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymentcollectmodal--trial-ending': { @@ -7009,6 +7439,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymentcollectmodal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymentcollectmodal--payment-failed': { @@ -7022,6 +7453,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymentcollectmodal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymentcollectmodal--payment-required': { @@ -7035,6 +7467,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymentcollectmodal', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymenteyebrow': { @@ -7061,6 +7494,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymenteyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymenteyebrow--payment-failed': { @@ -7074,6 +7508,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymenteyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymenteyebrow--payment-required': { @@ -7087,6 +7522,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymenteyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-paymenteyebrow--exceeded-threshold': { @@ -7100,6 +7536,7 @@ export const index = { depth: 2, parent: 'webapp-components-paymenteyebrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-progressbar': { @@ -7129,6 +7566,7 @@ export const index = { depth: 2, parent: 'webapp-components-progressbar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-progressbar--short': { @@ -7142,6 +7580,7 @@ export const index = { depth: 2, parent: 'webapp-components-progressbar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-progressbar--inprogress-25': { @@ -7155,6 +7594,7 @@ export const index = { depth: 2, parent: 'webapp-components-progressbar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-progressbar--inprogress-50': { @@ -7168,6 +7608,7 @@ export const index = { depth: 2, parent: 'webapp-components-progressbar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-progressbar--inprogress-tooltip': { @@ -7181,6 +7622,7 @@ export const index = { depth: 2, parent: 'webapp-components-progressbar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-progressbar--reviewing-partial': { @@ -7194,6 +7636,7 @@ export const index = { depth: 2, parent: 'webapp-components-progressbar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-progressbar--reviewing-complete': { @@ -7207,6 +7650,7 @@ export const index = { depth: 2, parent: 'webapp-components-progressbar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-projectitem': { @@ -7236,6 +7680,7 @@ export const index = { depth: 2, parent: 'webapp-components-projectitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-projectitem--loading': { @@ -7249,6 +7694,7 @@ export const index = { depth: 2, parent: 'webapp-components-projectitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-projectitem--app-screen-loading-see-1196': { @@ -7262,6 +7708,7 @@ export const index = { depth: 2, parent: 'webapp-components-projectitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-projectitem--default': { @@ -7275,6 +7722,7 @@ export const index = { depth: 2, parent: 'webapp-components-projectitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-projectitem--default-no-account-name': { @@ -7288,6 +7736,7 @@ export const index = { depth: 2, parent: 'webapp-components-projectitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-projectitem--default-few-users': { @@ -7301,6 +7750,7 @@ export const index = { depth: 2, parent: 'webapp-components-projectitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-projectitem--in-setup': { @@ -7314,6 +7764,7 @@ export const index = { depth: 2, parent: 'webapp-components-projectitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-projectlist': { @@ -7339,6 +7790,7 @@ export const index = { depth: 2, parent: 'webapp-components-projectlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-projectlist--full': { @@ -7352,6 +7804,7 @@ export const index = { depth: 2, parent: 'webapp-components-projectlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-projectlist--full-no-account-name': { @@ -7365,6 +7818,7 @@ export const index = { depth: 2, parent: 'webapp-components-projectlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestitem': { @@ -7395,6 +7849,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestitem--loading': { @@ -7408,6 +7863,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestitem--unbuilt': { @@ -7421,6 +7877,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestitem--building': { @@ -7434,6 +7891,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestitem--passed': { @@ -7447,6 +7905,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestitem--pending': { @@ -7460,6 +7919,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestitem--errored-diffs': { @@ -7473,6 +7933,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestitem--errored-build-closed': { @@ -7486,6 +7947,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestlist': { @@ -7514,6 +7976,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestlist--full': { @@ -7527,6 +7990,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestlist--full-ui-review-disabled': { @@ -7540,6 +8004,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestlist--empty': { @@ -7553,6 +8018,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestlist--empty-branch': { @@ -7566,6 +8032,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequestlist--error': { @@ -7579,6 +8046,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequestlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight': { @@ -7622,6 +8090,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--passed': { @@ -7635,6 +8104,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--no-builds': { @@ -7648,6 +8118,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--checklist': { @@ -7661,6 +8132,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--errored-diffs': { @@ -7674,6 +8146,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--errored-diffs-and-checklist': { @@ -7687,6 +8160,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--build-in-progress': { @@ -7700,6 +8174,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--comparison-in-progress': { @@ -7713,6 +8188,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--build-error': { @@ -7726,6 +8202,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--comparison-error': { @@ -7739,6 +8216,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--paused': { @@ -7752,6 +8230,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--payment-required': { @@ -7765,6 +8244,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--publish-only': { @@ -7778,6 +8258,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--publish-only-build-in-progress': { @@ -7791,6 +8272,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--publish-only-build-error': { @@ -7804,6 +8286,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--ui-review-disabled': { @@ -7817,6 +8300,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--ui-review-disabled-build-in-progress': { @@ -7830,6 +8314,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--ui-review-disabled-build-error': { @@ -7843,6 +8328,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--ui-review-disabled-publish-only': { @@ -7856,6 +8342,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--ui-review-disabled-paused': { @@ -7869,6 +8356,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-pullrequeststatuslight--tiny': { @@ -7882,6 +8370,7 @@ export const index = { depth: 2, parent: 'webapp-components-pullrequeststatuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-questiontooltip': { @@ -7906,6 +8395,7 @@ export const index = { depth: 2, parent: 'webapp-components-questiontooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-questiontooltip--start-open': { @@ -7919,6 +8409,7 @@ export const index = { depth: 2, parent: 'webapp-components-questiontooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-radar': { @@ -7940,6 +8431,7 @@ export const index = { depth: 2, parent: 'webapp-components-radar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-radio': { @@ -7966,6 +8458,7 @@ export const index = { depth: 2, parent: 'webapp-components-radio', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-radio--unchecked': { @@ -7979,6 +8472,7 @@ export const index = { depth: 2, parent: 'webapp-components-radio', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-radio--checked': { @@ -7992,6 +8486,7 @@ export const index = { depth: 2, parent: 'webapp-components-radio', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-radio--primary': { @@ -8005,6 +8500,7 @@ export const index = { depth: 2, parent: 'webapp-components-radio', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-rawspeclist': { @@ -8030,6 +8526,7 @@ export const index = { depth: 2, parent: 'webapp-components-rawspeclist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-rawspeclist--default': { @@ -8043,6 +8540,7 @@ export const index = { depth: 2, parent: 'webapp-components-rawspeclist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-rawspeclist--empty': { @@ -8056,6 +8554,7 @@ export const index = { depth: 2, parent: 'webapp-components-rawspeclist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositoryitem': { @@ -8077,6 +8576,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositoryitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositorylist': { @@ -8103,6 +8603,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositorylist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositorylist--personal-bitbucket': { @@ -8116,6 +8617,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositorylist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositorylist--empty': { @@ -8129,6 +8631,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositorylist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositorylist--empty-bitbucket': { @@ -8142,6 +8645,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositorylist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositoryowneritem': { @@ -8166,6 +8670,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositoryowneritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositoryowneritem--org': { @@ -8179,6 +8684,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositoryowneritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositoryownerlist': { @@ -8203,6 +8709,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositoryownerlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositoryownerlist--org-selected': { @@ -8216,6 +8723,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositoryownerlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositorypicker': { @@ -8243,6 +8751,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositorypicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositorypicker--personal': { @@ -8256,6 +8765,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositorypicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositorypicker--personal-w-no-apps': { @@ -8269,6 +8779,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositorypicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositorypicker--organization': { @@ -8282,6 +8793,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositorypicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-repositorypicker--organization-w-no-apps': { @@ -8295,6 +8807,7 @@ export const index = { depth: 2, parent: 'webapp-components-repositorypicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-scrollintoview': { @@ -8319,6 +8832,7 @@ export const index = { depth: 2, parent: 'webapp-components-scrollintoview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-scrollintoview--w-out-scroll-into-view': { @@ -8332,6 +8846,7 @@ export const index = { depth: 2, parent: 'webapp-components-scrollintoview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-section': { @@ -8360,6 +8875,7 @@ export const index = { depth: 2, parent: 'webapp-components-section', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-section--with-children': { @@ -8373,6 +8889,7 @@ export const index = { depth: 2, parent: 'webapp-components-section', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-section--with-callout': { @@ -8386,6 +8903,7 @@ export const index = { depth: 2, parent: 'webapp-components-section', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-section--multiple-sections-nochrome': { @@ -8399,6 +8917,7 @@ export const index = { depth: 2, parent: 'webapp-components-section', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-section--blank': { @@ -8412,6 +8931,7 @@ export const index = { depth: 2, parent: 'webapp-components-section', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-section--loading': { @@ -8425,6 +8945,7 @@ export const index = { depth: 2, parent: 'webapp-components-section', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-sharetooltipmessage': { @@ -8449,6 +8970,7 @@ export const index = { depth: 2, parent: 'webapp-components-sharetooltipmessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-sharetooltipmessage--linked': { @@ -8462,6 +8984,7 @@ export const index = { depth: 2, parent: 'webapp-components-sharetooltipmessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-sidebarnav': { @@ -8488,6 +9011,7 @@ export const index = { depth: 2, parent: 'webapp-components-sidebarnav', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-sidebarnav--account': { @@ -8501,6 +9025,7 @@ export const index = { depth: 2, parent: 'webapp-components-sidebarnav', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-sidebarnav--project': { @@ -8514,6 +9039,7 @@ export const index = { depth: 2, parent: 'webapp-components-sidebarnav', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-sidebarnav--project-setup': { @@ -8527,6 +9053,7 @@ export const index = { depth: 2, parent: 'webapp-components-sidebarnav', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshoterror': { @@ -8551,6 +9078,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshoterror', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshoterror--with-metadata': { @@ -8564,6 +9092,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshoterror', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshoterrormessage': { @@ -8591,6 +9120,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshoterrormessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshoterrormessage--navigation-timeout': { @@ -8604,6 +9134,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshoterrormessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshoterrormessage--no-js': { @@ -8617,6 +9148,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshoterrormessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshoterrormessage--failed-js': { @@ -8630,6 +9162,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshoterrormessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshoterrormessage--story-missing': { @@ -8643,6 +9176,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshoterrormessage', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshotsizechanged': { @@ -8669,6 +9203,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshotsizechanged', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshotsizechanged--width-decreased': { @@ -8682,6 +9217,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshotsizechanged', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshotsizechanged--height-increased': { @@ -8695,6 +9231,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshotsizechanged', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-snapshotsizechanged--height-decreased': { @@ -8708,6 +9245,7 @@ export const index = { depth: 2, parent: 'webapp-components-snapshotsizechanged', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specitem': { @@ -8737,6 +9275,7 @@ export const index = { depth: 2, parent: 'webapp-components-specitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specitem--loading': { @@ -8750,6 +9289,7 @@ export const index = { depth: 2, parent: 'webapp-components-specitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specitem--needs-review': { @@ -8763,6 +9303,7 @@ export const index = { depth: 2, parent: 'webapp-components-specitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specitem--default': { @@ -8776,6 +9317,7 @@ export const index = { depth: 2, parent: 'webapp-components-specitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specitem--long-name': { @@ -8789,6 +9331,7 @@ export const index = { depth: 2, parent: 'webapp-components-specitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specitem--selected': { @@ -8802,6 +9345,7 @@ export const index = { depth: 2, parent: 'webapp-components-specitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specitem--w-ignored-selectors': { @@ -8815,6 +9359,7 @@ export const index = { depth: 2, parent: 'webapp-components-specitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-speclist': { @@ -8840,6 +9385,7 @@ export const index = { depth: 2, parent: 'webapp-components-speclist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-speclist--full': { @@ -8853,6 +9399,7 @@ export const index = { depth: 2, parent: 'webapp-components-speclist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-speclist--empty': { @@ -8866,6 +9413,7 @@ export const index = { depth: 2, parent: 'webapp-components-speclist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specname': { @@ -8892,6 +9440,7 @@ export const index = { depth: 2, parent: 'webapp-components-specname', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specname--basic-is-link': { @@ -8905,6 +9454,7 @@ export const index = { depth: 2, parent: 'webapp-components-specname', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specname--unnamed': { @@ -8918,6 +9468,7 @@ export const index = { depth: 2, parent: 'webapp-components-specname', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-specname--with-build-number': { @@ -8931,6 +9482,7 @@ export const index = { depth: 2, parent: 'webapp-components-specname', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-startchat': { @@ -8952,6 +9504,7 @@ export const index = { depth: 2, parent: 'webapp-components-startchat', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-startchat--custom': { @@ -8965,6 +9518,7 @@ export const index = { depth: 2, parent: 'webapp-components-startchat', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight': { @@ -8999,6 +9553,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--positive': { @@ -9012,6 +9567,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--negative': { @@ -9025,6 +9581,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--warning': { @@ -9038,6 +9595,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--loading': { @@ -9051,6 +9609,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--disabled': { @@ -9064,6 +9623,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--progress': { @@ -9077,6 +9637,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--error': { @@ -9090,6 +9651,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--tiny': { @@ -9103,6 +9665,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--small': { @@ -9116,6 +9679,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--medium': { @@ -9129,6 +9693,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statuslight--large': { @@ -9142,6 +9707,7 @@ export const index = { depth: 2, parent: 'webapp-components-statuslight', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statustooltip': { @@ -9168,6 +9734,7 @@ export const index = { depth: 2, parent: 'webapp-components-statustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statustooltip--with-message': { @@ -9181,6 +9748,7 @@ export const index = { depth: 2, parent: 'webapp-components-statustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statustooltip--single-link': { @@ -9194,6 +9762,7 @@ export const index = { depth: 2, parent: 'webapp-components-statustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-statustooltip--multiple-links': { @@ -9207,6 +9776,7 @@ export const index = { depth: 2, parent: 'webapp-components-statustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-subheader': { @@ -9233,6 +9803,7 @@ export const index = { depth: 2, parent: 'webapp-components-subheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-subheader--loading': { @@ -9246,6 +9817,7 @@ export const index = { depth: 2, parent: 'webapp-components-subheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-subheader--full': { @@ -9259,6 +9831,7 @@ export const index = { depth: 2, parent: 'webapp-components-subheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-subheader--left': { @@ -9272,6 +9845,7 @@ export const index = { depth: 2, parent: 'webapp-components-subheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-table': { @@ -9300,6 +9874,7 @@ export const index = { depth: 2, parent: 'webapp-components-table', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-table--loading': { @@ -9313,6 +9888,7 @@ export const index = { depth: 2, parent: 'webapp-components-table', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-table--empty': { @@ -9326,6 +9902,7 @@ export const index = { depth: 2, parent: 'webapp-components-table', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-table--full': { @@ -9339,6 +9916,7 @@ export const index = { depth: 2, parent: 'webapp-components-table', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-table--with-drawers': { @@ -9352,6 +9930,7 @@ export const index = { depth: 2, parent: 'webapp-components-table', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-table--without-headings': { @@ -9365,6 +9944,7 @@ export const index = { depth: 2, parent: 'webapp-components-table', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-tabledrawer': { @@ -9386,6 +9966,7 @@ export const index = { depth: 2, parent: 'webapp-components-tabledrawer', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-tooltipignore': { @@ -9407,6 +9988,7 @@ export const index = { depth: 2, parent: 'webapp-components-tooltipignore', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-useritem': { @@ -9433,6 +10015,7 @@ export const index = { depth: 2, parent: 'webapp-components-useritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-useritem--loading': { @@ -9446,6 +10029,7 @@ export const index = { depth: 2, parent: 'webapp-components-useritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-useritem--no-link': { @@ -9459,6 +10043,7 @@ export const index = { depth: 2, parent: 'webapp-components-useritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-useritem--link': { @@ -9472,6 +10057,7 @@ export const index = { depth: 2, parent: 'webapp-components-useritem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-userlist': { @@ -9500,6 +10086,7 @@ export const index = { depth: 2, parent: 'webapp-components-userlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-userlist--loading': { @@ -9513,6 +10100,7 @@ export const index = { depth: 2, parent: 'webapp-components-userlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-userlist--full-w-links': { @@ -9526,6 +10114,7 @@ export const index = { depth: 2, parent: 'webapp-components-userlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-userlist--full-no-links': { @@ -9539,6 +10128,7 @@ export const index = { depth: 2, parent: 'webapp-components-userlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-userlist--paginated-no-links': { @@ -9552,6 +10142,7 @@ export const index = { depth: 2, parent: 'webapp-components-userlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-userlist--empty': { @@ -9565,6 +10156,7 @@ export const index = { depth: 2, parent: 'webapp-components-userlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-video': { @@ -9586,6 +10178,7 @@ export const index = { depth: 2, parent: 'webapp-components-video', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-warning': { @@ -9614,6 +10207,7 @@ export const index = { depth: 2, parent: 'webapp-components-warning', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-warning--with-icon': { @@ -9627,6 +10221,7 @@ export const index = { depth: 2, parent: 'webapp-components-warning', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-warning--with-action': { @@ -9640,6 +10235,7 @@ export const index = { depth: 2, parent: 'webapp-components-warning', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-warning--with-icon-action': { @@ -9653,6 +10249,7 @@ export const index = { depth: 2, parent: 'webapp-components-warning', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-warning--stacked-multiple-items': { @@ -9666,6 +10263,7 @@ export const index = { depth: 2, parent: 'webapp-components-warning', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-warning--stacked-single-item': { @@ -9679,6 +10277,7 @@ export const index = { depth: 2, parent: 'webapp-components-warning', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-components-wobbler': { @@ -9700,6 +10299,7 @@ export const index = { depth: 2, parent: 'webapp-components-wobbler', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-containers': { @@ -9732,6 +10332,7 @@ export const index = { depth: 2, parent: 'webapp-containers-appbuildspaginated', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-containers-appbuildspaginated--has-next-page': { @@ -9745,6 +10346,7 @@ export const index = { depth: 2, parent: 'webapp-containers-appbuildspaginated', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-containers-appbuildspaginated--error': { @@ -9758,6 +10360,7 @@ export const index = { depth: 2, parent: 'webapp-containers-appbuildspaginated', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-containers-componentbuildspicker': { @@ -9783,6 +10386,7 @@ export const index = { depth: 2, parent: 'webapp-containers-componentbuildspicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-containers-componentbuildspicker--app': { @@ -9796,6 +10400,7 @@ export const index = { depth: 2, parent: 'webapp-containers-componentbuildspicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-containers-componentbuildspicker--component': { @@ -9809,6 +10414,7 @@ export const index = { depth: 2, parent: 'webapp-containers-componentbuildspicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts': { @@ -9854,6 +10460,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-account', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-account--projects': { @@ -9867,6 +10474,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-account', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-account--projects-personal-account': { @@ -9880,6 +10488,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-account', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-account--projects-personal-account-saml': { @@ -9893,6 +10502,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-account', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-account--projects-shared-with-you': { @@ -9906,6 +10516,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-account', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-account--projects-saml-account-owner': { @@ -9919,6 +10530,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-account', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-account--projects-saml-account-not-owner': { @@ -9932,6 +10544,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-account', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-account--billing': { @@ -9945,6 +10558,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-account', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app': { @@ -9978,6 +10592,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app--builds': { @@ -9991,6 +10606,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app--builds-shared-with-you': { @@ -10004,6 +10620,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app--setup': { @@ -10017,6 +10634,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app--builds-with-branch': { @@ -10030,6 +10648,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app--components': { @@ -10043,6 +10662,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app--no-ci': { @@ -10056,6 +10676,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app--no-ci-100-builds': { @@ -10069,6 +10690,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app--not-logged-in': { @@ -10082,6 +10704,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app--admin': { @@ -10095,6 +10718,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-app--gerrit': { @@ -10108,6 +10732,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-app', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-interstitial': { @@ -10129,6 +10754,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-interstitial', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-marketing': { @@ -10155,6 +10781,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-marketing', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-marketing--logged-in': { @@ -10168,6 +10795,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-marketing', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-marketing--maintenance-mode': { @@ -10181,6 +10809,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-marketing', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-marketing--dark-hero': { @@ -10194,6 +10823,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-marketing', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-onboarding': { @@ -10220,6 +10850,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-onboarding', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-onboarding--logged-out': { @@ -10233,6 +10864,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-onboarding', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-onboarding--logged-in': { @@ -10246,6 +10878,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-onboarding', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-onboarding--logged-in-with-app': { @@ -10259,6 +10892,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-onboarding', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-page': { @@ -10290,6 +10924,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-page', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-page--logged-in-has-app-owner': { @@ -10303,6 +10938,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-page', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-page--logged-in-has-app-owner-personal': { @@ -10316,6 +10952,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-page', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-page--logged-in-has-exceeded-threshold': { @@ -10329,6 +10966,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-page', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-page--logged-in-has-app': { @@ -10342,6 +10980,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-page', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-page--logged-in-has-app-shared-with-you': { @@ -10355,6 +10994,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-page', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-page--not-logged-in': { @@ -10368,6 +11008,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-page', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-page--with-eyebrow': { @@ -10381,6 +11022,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-page', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-page--tall-eyebrow': { @@ -10394,6 +11036,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-page', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-setup': { @@ -10422,6 +11065,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-setup', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-setup--loading-onboarding': { @@ -10435,6 +11079,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-setup', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-setup--basic': { @@ -10448,6 +11093,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-setup', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-setup--basic-onboarding': { @@ -10461,6 +11107,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-setup', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-setup--basic-read-only': { @@ -10474,6 +11121,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-setup', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-layouts-setup--basic-admin': { @@ -10487,6 +11135,7 @@ export const index = { depth: 2, parent: 'webapp-layouts-setup', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens': { @@ -10554,6 +11203,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--personal': { @@ -10567,6 +11217,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--personal-modal-open': { @@ -10580,6 +11231,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--personal-saml-user': { @@ -10593,6 +11245,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--personal-saml-user-modal-open': { @@ -10606,6 +11259,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--organization': { @@ -10619,6 +11273,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--organization-modal-open': { @@ -10632,6 +11287,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--saml-account': { @@ -10645,6 +11301,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--saml-account-modal-open': { @@ -10658,6 +11315,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--shared-with-you': { @@ -10671,6 +11329,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--no-projects-personal-account': { @@ -10684,6 +11343,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--personal-account-creating-first-app': { @@ -10697,6 +11357,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--no-projects-shared-with-you-app-owner': { @@ -10710,6 +11371,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--no-projects-linked-account': { @@ -10723,6 +11385,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-appsscreen--no-projects-saml-account': { @@ -10736,6 +11399,7 @@ export const index = { depth: 2, parent: 'webapp-screens-appsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen': { @@ -10783,6 +11447,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--pre-subscribed': { @@ -10796,6 +11461,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--free': { @@ -10809,6 +11475,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--free-with-bonus': { @@ -10822,6 +11489,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--free-with-bonus-in-past': { @@ -10835,6 +11503,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--free-over-limit': { @@ -10848,6 +11517,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--paid-plan-over-limit': { @@ -10861,6 +11531,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--trial': { @@ -10874,6 +11545,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--trial-ending': { @@ -10887,6 +11559,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed': { @@ -10900,6 +11573,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-still-in-trial': { @@ -10913,6 +11587,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-still-in-trial-over-limit': { @@ -10926,6 +11601,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-custom-plan': { @@ -10939,6 +11615,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-custom-plan-usage-limits': { @@ -10952,6 +11629,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-custom-plan-usage-limits-exceeded-threshold': { @@ -10965,6 +11643,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-open-source-plan-free': { @@ -10978,6 +11657,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-open-source-plan-free-exceeded-threshold': { @@ -10991,6 +11671,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-open-source-plan-paid': { @@ -11004,6 +11685,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-invoice-failed': { @@ -11017,6 +11699,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-payment-required': { @@ -11030,6 +11713,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--subscribed-slow-builds-no-parallelization-saving': { @@ -11043,6 +11727,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--pure-subscribed-change-plan-drawer-open': { @@ -11056,6 +11741,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen--pure-subscribed-email-drawer-open': { @@ -11069,6 +11755,7 @@ export const index = { depth: 2, parent: 'webapp-screens-billingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen-billingemailform': { @@ -11094,6 +11781,7 @@ export const index = { depth: 3, parent: 'webapp-screens-billingscreen-billingemailform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen-billingemailform--pure-default': { @@ -11107,6 +11795,7 @@ export const index = { depth: 3, parent: 'webapp-screens-billingscreen-billingemailform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen-billingemailform--submitting': { @@ -11120,6 +11809,7 @@ export const index = { depth: 3, parent: 'webapp-screens-billingscreen-billingemailform', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen-invoicelist': { @@ -11147,6 +11837,7 @@ export const index = { depth: 3, parent: 'webapp-screens-billingscreen-invoicelist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen-invoicelist--full-first-invoice-not-finalized': { @@ -11160,6 +11851,7 @@ export const index = { depth: 3, parent: 'webapp-screens-billingscreen-invoicelist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen-invoicelist--full-payment-failed': { @@ -11173,6 +11865,7 @@ export const index = { depth: 3, parent: 'webapp-screens-billingscreen-invoicelist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen-invoicelist--trial': { @@ -11186,6 +11879,7 @@ export const index = { depth: 3, parent: 'webapp-screens-billingscreen-invoicelist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-billingscreen-invoicelist--free': { @@ -11199,6 +11893,7 @@ export const index = { depth: 3, parent: 'webapp-screens-billingscreen-invoicelist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build': { @@ -11245,6 +11940,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildcomponents--simple': { @@ -11258,6 +11954,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildcomponents--passed': { @@ -11271,6 +11968,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildcomponents--failed': { @@ -11284,6 +11982,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildcomponents--in-progress': { @@ -11297,6 +11996,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildheader': { @@ -11327,6 +12027,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildheader--automatic': { @@ -11340,6 +12041,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildheader--passed': { @@ -11353,6 +12055,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildheader--denied': { @@ -11366,6 +12069,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildheader--failed': { @@ -11379,6 +12083,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildheader--errored': { @@ -11392,6 +12097,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildheader--timed-out': { @@ -11405,6 +12111,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildheader--in-progress': { @@ -11418,6 +12125,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen': { @@ -11460,6 +12168,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--unreviewed': { @@ -11473,6 +12182,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--passed': { @@ -11486,6 +12196,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--paused': { @@ -11499,6 +12210,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--disabled': { @@ -11512,6 +12224,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--denied': { @@ -11525,6 +12238,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--component-errors': { @@ -11538,6 +12252,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--build-error': { @@ -11551,6 +12266,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--build-timeout': { @@ -11564,6 +12280,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--build-in-progress': { @@ -11577,6 +12294,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--tunnelled-build': { @@ -11590,6 +12308,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--newer-build': { @@ -11603,6 +12322,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--upgrade-build-with-newer-build': { @@ -11616,6 +12336,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--upgrade-build-no-newer-build': { @@ -11629,6 +12350,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--no-ancestor': { @@ -11642,6 +12364,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--no-ancestor-newer-build': { @@ -11655,6 +12378,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--multiple-ancestors': { @@ -11668,6 +12392,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--onboarding': { @@ -11681,6 +12406,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--onboarding-no-tests': { @@ -11694,6 +12420,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildscreen--no-snapshots-remaining': { @@ -11707,6 +12434,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary': { @@ -11741,6 +12469,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary--default': { @@ -11754,6 +12483,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary--tests-paused': { @@ -11767,6 +12497,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary--tests-disabled': { @@ -11780,6 +12511,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary--single-pull-request': { @@ -11793,6 +12525,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary--multiple-pull-requests': { @@ -11806,6 +12539,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary--build-error': { @@ -11819,6 +12553,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary--build-timeout': { @@ -11832,6 +12567,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-buildsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-ancestors': { @@ -11858,6 +12594,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-ancestors', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-ancestors--none': { @@ -11871,6 +12608,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-ancestors', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-ancestors--one': { @@ -11884,6 +12622,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-ancestors', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-ancestors--multiple': { @@ -11897,6 +12636,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-ancestors', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-commit': { @@ -11921,6 +12661,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-commit', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-commit--default': { @@ -11934,6 +12675,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-commit', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-pullrequests': { @@ -11962,6 +12704,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-pullrequests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-pullrequests--none': { @@ -11975,6 +12718,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-pullrequests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-pullrequests--one': { @@ -11988,6 +12732,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-pullrequests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-pullrequests--multiple': { @@ -12001,6 +12746,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-pullrequests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-pullrequests--gitlab': { @@ -12014,6 +12760,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-pullrequests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-pullrequests--missing-app-installation': { @@ -12027,6 +12774,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-pullrequests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests': { @@ -12063,6 +12811,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--default': { @@ -12076,6 +12825,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--currently-paused': { @@ -12089,6 +12839,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--currently-paused-payment-required': { @@ -12102,6 +12853,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--currently-paused-no-subscription': { @@ -12115,6 +12867,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--currently-paused-org': { @@ -12128,6 +12881,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--paused-in-the-past': { @@ -12141,6 +12895,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--currently-disabled': { @@ -12154,6 +12909,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--currently-disabled-no-savings': { @@ -12167,6 +12923,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--currently-disabled-read-only': { @@ -12180,6 +12937,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--disabled-in-the-past': { @@ -12193,6 +12951,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--one-browser': { @@ -12206,6 +12965,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--two-browsers': { @@ -12219,6 +12979,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-buildsummary-tests--all-browsers': { @@ -12232,6 +12993,7 @@ export const index = { depth: 4, parent: 'webapp-screens-build-buildsummary-tests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow': { @@ -12269,6 +13031,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pending-single-spec': { @@ -12282,6 +13045,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pending-multiple-stories-per-spec': { @@ -12295,6 +13059,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pending-mixed': { @@ -12308,6 +13073,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pending-unreviewable': { @@ -12321,6 +13087,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pending-reviewing-build': { @@ -12334,6 +13101,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pending-reviewing-component': { @@ -12347,6 +13115,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pending-reviewing-spec': { @@ -12360,6 +13129,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pending-reviewing-snapshot': { @@ -12373,6 +13143,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pure-pending-expanded': { @@ -12386,6 +13157,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pure-pending-unexpanded': { @@ -12399,6 +13171,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--accepted': { @@ -12412,6 +13185,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--denied': { @@ -12425,6 +13199,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--reviewed-many-reviewers': { @@ -12438,6 +13213,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-componentrow--pure-unexpanded-reviewed-many-reviewers': { @@ -12451,6 +13227,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-componentrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-rowexpander': { @@ -12475,6 +13252,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-rowexpander', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-rowexpander--collapsed': { @@ -12488,6 +13266,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-rowexpander', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow': { @@ -12525,6 +13304,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--pending-unreviewable': { @@ -12538,6 +13318,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--pending-accepting': { @@ -12551,6 +13332,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--pending-denying': { @@ -12564,6 +13346,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--pending-spec-reviewing': { @@ -12577,6 +13360,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--accepted': { @@ -12590,6 +13374,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--accepted-undoing': { @@ -12603,6 +13388,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--denied': { @@ -12616,6 +13402,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--denied-undoing': { @@ -12629,6 +13416,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--new': { @@ -12642,6 +13430,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--failed': { @@ -12655,6 +13444,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--in-progress': { @@ -12668,6 +13458,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--pending-indented-1': { @@ -12681,6 +13472,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--pending-indented-1-for-snapshot': { @@ -12694,6 +13486,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotrow--pending-indented-2': { @@ -12707,6 +13500,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable': { @@ -12740,6 +13534,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable--changes-single-snaphot-only': { @@ -12753,6 +13548,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable--changes-multiple-components': { @@ -12766,6 +13562,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable--changes-multiple-snapshots-per-spec': { @@ -12779,6 +13576,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable--changes-mixed': { @@ -12792,6 +13590,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable--changes-unreviewable': { @@ -12805,6 +13604,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable--changes-review-failed': { @@ -12818,6 +13618,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable--changes-review-passed': { @@ -12831,6 +13632,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable--new-stories': { @@ -12844,6 +13646,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable--new-stories-in-progress': { @@ -12857,6 +13660,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-snapshotstable--errors': { @@ -12870,6 +13674,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-snapshotstable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow': { @@ -12903,6 +13708,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow--pending-reviewing-component': { @@ -12916,6 +13722,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow--pending-reviewing-spec': { @@ -12929,6 +13736,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow--pending-reviewing-snapshot': { @@ -12942,6 +13750,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow--pending-single-snapshot': { @@ -12955,6 +13764,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow--pending-unreviewable': { @@ -12968,6 +13778,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow--pure-pending-expanded': { @@ -12981,6 +13792,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow--pure-pending-unexpanded': { @@ -12994,6 +13806,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow--accepted': { @@ -13007,6 +13820,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow--denied': { @@ -13020,6 +13834,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-specrow--reviewed-many-reviewers': { @@ -13033,6 +13848,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-specrow', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary': { @@ -13078,6 +13894,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--no-changes': { @@ -13091,6 +13908,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--all-accepted': { @@ -13104,6 +13922,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--some-denied': { @@ -13117,6 +13936,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--reviewing': { @@ -13130,6 +13950,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--reviewing-multiple-baselines': { @@ -13143,6 +13964,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--reviewing-paginated': { @@ -13156,6 +13978,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--reviewing-new-stories': { @@ -13169,6 +13992,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--reviewing-readonly': { @@ -13182,6 +14006,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--not-reviewable': { @@ -13195,6 +14020,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--first-build': { @@ -13208,6 +14034,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--first-cross-browser-build': { @@ -13221,6 +14048,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--upgrade-build': { @@ -13234,6 +14062,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--upgraded-build': { @@ -13247,6 +14076,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--single-component-error': { @@ -13260,6 +14090,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--multiple-component-errors': { @@ -13273,6 +14104,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--only-component-errors': { @@ -13286,6 +14118,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--build-in-progress': { @@ -13299,6 +14132,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--build-timeout': { @@ -13312,6 +14146,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--build-error': { @@ -13325,6 +14160,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--pure-reviewing-build': { @@ -13338,6 +14174,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--pure-reviewing-component': { @@ -13351,6 +14188,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-build-testsummary--pure-paginating': { @@ -13364,6 +14202,7 @@ export const index = { depth: 3, parent: 'webapp-screens-build-testsummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-buildsscreen': { @@ -13391,6 +14230,7 @@ export const index = { depth: 2, parent: 'webapp-screens-buildsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-buildsscreen--simple': { @@ -13404,6 +14244,7 @@ export const index = { depth: 2, parent: 'webapp-screens-buildsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-buildsscreen--simple-shared-with-you': { @@ -13417,6 +14258,7 @@ export const index = { depth: 2, parent: 'webapp-screens-buildsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-buildsscreen--simple-ci-explainer': { @@ -13430,6 +14272,7 @@ export const index = { depth: 2, parent: 'webapp-screens-buildsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-buildsscreen--simple-branch-selected': { @@ -13443,6 +14286,7 @@ export const index = { depth: 2, parent: 'webapp-screens-buildsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component': { @@ -13491,6 +14335,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcanvas--empty': { @@ -13504,6 +14349,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcanvas--in-progress': { @@ -13517,6 +14363,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcanvas--in-progress-interactive': { @@ -13530,6 +14377,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcanvas--snapshot-error': { @@ -13543,6 +14391,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcanvas--snapshot-error-interactive': { @@ -13556,6 +14405,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcanvas--snapshot-failed': { @@ -13569,6 +14419,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcanvas--snapshot-did-not-capture': { @@ -13582,6 +14433,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcanvas--pending-non-interactive': { @@ -13595,6 +14447,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcanvas--pending-non-interactive-ignored-regions': { @@ -13608,6 +14461,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcanvas--pending-interactive': { @@ -13621,6 +14475,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcanvas', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments': { @@ -13655,6 +14510,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--without-comments-comments-disabled': { @@ -13668,6 +14524,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--without-comments-logged-out': { @@ -13681,6 +14538,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--with-comments-resolved': { @@ -13694,6 +14552,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--with-comments-resolved-logged-out': { @@ -13707,6 +14566,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--with-comments-active': { @@ -13720,6 +14580,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--with-comments-active-non-owner': { @@ -13733,6 +14594,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--with-comments-active-logged-out': { @@ -13746,6 +14608,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--with-comments-combined': { @@ -13759,6 +14622,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--with-comments-combined-comments-disabled': { @@ -13772,6 +14636,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--with-comments-combined-logged-out': { @@ -13785,6 +14650,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcomments--with-comments-comments-disabled': { @@ -13798,6 +14664,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcommentthread': { @@ -13830,6 +14697,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcommentthread--active-unreviewable': { @@ -13843,6 +14711,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcommentthread--active-logged-out': { @@ -13856,6 +14725,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcommentthread--resolved': { @@ -13869,6 +14739,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcommentthread--resolved-expanded': { @@ -13882,6 +14753,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcommentthread--resolved-expanded-non-owner': { @@ -13895,6 +14767,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcommentthread--resolved-unreviewable': { @@ -13908,6 +14781,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcommentthread--resolved-unreviewable-expanded': { @@ -13921,6 +14795,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcommentthread--resolved-logged-out': { @@ -13934,6 +14809,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentcommentthread--resolved-logged-out-expanded': { @@ -13947,6 +14823,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentcommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentheader': { @@ -13972,6 +14849,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentheader--default': { @@ -13985,6 +14863,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentheader--long-name': { @@ -13998,6 +14877,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen': { @@ -14043,6 +14923,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--in-progress': { @@ -14056,6 +14937,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--in-progress-canvas': { @@ -14069,6 +14951,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-not-logged-in': { @@ -14082,6 +14965,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-not-all-snapshots-not-logged-in': { @@ -14095,6 +14979,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default': { @@ -14108,6 +14993,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--comments': { @@ -14121,6 +15007,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-canvas': { @@ -14134,6 +15021,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-not-all-snapshots': { @@ -14147,6 +15035,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-docs': { @@ -14160,6 +15049,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-no-docs': { @@ -14173,6 +15063,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-explainer-eyebrow': { @@ -14186,6 +15077,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--cross-browser-no-browser-selected': { @@ -14199,6 +15091,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--cross-browser-browser-selected': { @@ -14212,6 +15105,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-one-viewport-from-default': { @@ -14225,6 +15119,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-from-snapshot': { @@ -14238,6 +15133,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-from-build': { @@ -14251,6 +15147,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--default-from-library': { @@ -14264,6 +15161,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--story-selected': { @@ -14277,6 +15175,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--story-and-viewport-selected': { @@ -14290,6 +15189,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--story-selected-with-ignored-regions': { @@ -14303,6 +15203,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--errored-story-snapshot': { @@ -14316,6 +15217,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentscreen--errored-story-canvas': { @@ -14329,6 +15231,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentsidebar': { @@ -14354,6 +15257,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentsidebar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentsidebar--default': { @@ -14367,6 +15271,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentsidebar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-component-componentsidebar--not-logged-in': { @@ -14380,6 +15285,7 @@ export const index = { depth: 3, parent: 'webapp-screens-component-componentsidebar', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-componentsscreen': { @@ -14415,6 +15321,7 @@ export const index = { depth: 3, parent: 'webapp-screens-componentsscreen-componentsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-componentsscreen-componentsscreen--default-unlinked-click-share-dropdown': { @@ -14428,6 +15335,7 @@ export const index = { depth: 3, parent: 'webapp-screens-componentsscreen-componentsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-componentsscreen-componentsscreen--default-linked-click-share-dropdown': { @@ -14441,6 +15349,7 @@ export const index = { depth: 3, parent: 'webapp-screens-componentsscreen-componentsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-componentsscreen-componentsscreen--default-explainer-eyebrow': { @@ -14454,6 +15363,7 @@ export const index = { depth: 3, parent: 'webapp-screens-componentsscreen-componentsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-componentsscreen-componentsscreen--in-group': { @@ -14467,6 +15377,7 @@ export const index = { depth: 3, parent: 'webapp-screens-componentsscreen-componentsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-error': { @@ -14507,6 +15418,7 @@ export const index = { depth: 3, parent: 'webapp-screens-error-errorscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-error-errorscreen--status-code-logged-out': { @@ -14520,6 +15432,7 @@ export const index = { depth: 3, parent: 'webapp-screens-error-errorscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-error-errorscreen--not-found': { @@ -14533,6 +15446,7 @@ export const index = { depth: 3, parent: 'webapp-screens-error-errorscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-error-errorscreen--no-access': { @@ -14546,6 +15460,7 @@ export const index = { depth: 3, parent: 'webapp-screens-error-errorscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-error-errorscreen--no-access-logged-out': { @@ -14559,6 +15474,7 @@ export const index = { depth: 3, parent: 'webapp-screens-error-errorscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-error-errorscreen--error': { @@ -14572,6 +15488,7 @@ export const index = { depth: 3, parent: 'webapp-screens-error-errorscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-error-noaccessscreen': { @@ -14593,6 +15510,7 @@ export const index = { depth: 3, parent: 'webapp-screens-error-noaccessscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-error-notfoundscreen': { @@ -14614,6 +15532,7 @@ export const index = { depth: 3, parent: 'webapp-screens-error-notfoundscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-installgithubappsuccessscreen': { @@ -14635,6 +15554,7 @@ export const index = { depth: 2, parent: 'webapp-screens-installgithubappsuccessscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-installwebhookscreen': { @@ -14660,6 +15580,7 @@ export const index = { depth: 2, parent: 'webapp-screens-installwebhookscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-installwebhookscreen--bitbucket': { @@ -14673,6 +15594,7 @@ export const index = { depth: 2, parent: 'webapp-screens-installwebhookscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-installwebhookscreen--gitlab': { @@ -14686,6 +15608,7 @@ export const index = { depth: 2, parent: 'webapp-screens-installwebhookscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-joinbetascreen': { @@ -14707,6 +15630,7 @@ export const index = { depth: 2, parent: 'webapp-screens-joinbetascreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-loadingscreen': { @@ -14728,6 +15652,7 @@ export const index = { depth: 2, parent: 'webapp-screens-loadingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-loginscreen': { @@ -14755,6 +15680,7 @@ export const index = { depth: 2, parent: 'webapp-screens-loginscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-loginscreen--default': { @@ -14768,6 +15694,7 @@ export const index = { depth: 2, parent: 'webapp-screens-loginscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-loginscreen--default-logged-in': { @@ -14781,6 +15708,7 @@ export const index = { depth: 2, parent: 'webapp-screens-loginscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-loginscreen--subdomain': { @@ -14794,6 +15722,7 @@ export const index = { depth: 2, parent: 'webapp-screens-loginscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-loginscreen-loginbuttons': { @@ -14819,6 +15748,7 @@ export const index = { depth: 3, parent: 'webapp-screens-loginscreen-loginbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-loginscreen-loginbuttons--is-loading': { @@ -14832,6 +15762,7 @@ export const index = { depth: 3, parent: 'webapp-screens-loginscreen-loginbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-loginscreen-loginbuttons--saml': { @@ -14845,6 +15776,7 @@ export const index = { depth: 3, parent: 'webapp-screens-loginscreen-loginbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen': { @@ -14887,6 +15819,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-browserpicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-browserpicker--browser-upgrade': { @@ -14900,6 +15833,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-browserpicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-browserpicker--adding': { @@ -14913,6 +15847,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-browserpicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-browserpicker--added': { @@ -14926,6 +15861,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-browserpicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-browserpicker--removing': { @@ -14939,6 +15875,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-browserpicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-browserpicker--removed': { @@ -14952,6 +15889,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-browserpicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-integrations': { @@ -15033,6 +15971,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-integrations', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-integrations--interactive': { @@ -15085,6 +16024,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-integrations', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-integrations--unset': { @@ -15221,6 +16161,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-integrations', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-integrations--expanded': { @@ -15357,6 +16298,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-integrations', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-integrations--filled': { @@ -15493,6 +16435,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-integrations', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-integrations--filled-overflow': { @@ -15633,6 +16576,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-integrations', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-integrations--saving': { @@ -15769,6 +16713,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-integrations', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-integrations--set': { @@ -15905,6 +16850,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-integrations', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-integrations--set-overflow': { @@ -16045,6 +16991,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-integrations', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-managescreen': { @@ -16075,6 +17022,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-managescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-managescreen--unlinked-one-user': { @@ -16088,6 +17036,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-managescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-managescreen--unlinked-one-user-no-invite-url': { @@ -16101,6 +17050,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-managescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-managescreen--unlinked-one-user-no-invite-url-saml': { @@ -16114,6 +17064,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-managescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-managescreen--unlinked-multiple-users': { @@ -16127,6 +17078,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-managescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-managescreen--unlinked-cross-browser': { @@ -16140,6 +17092,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-managescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-managescreen--linked': { @@ -16153,6 +17106,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-managescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-managescreen--linked-refreshing': { @@ -16166,6 +17120,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-managescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview': { @@ -16202,6 +17157,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--enabled': { @@ -16215,6 +17171,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--enabled-updating': { @@ -16228,6 +17185,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--just-enabled': { @@ -16241,6 +17199,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--enabled-exceeded-threshold': { @@ -16254,6 +17213,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--enabled-payment-required': { @@ -16267,6 +17227,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--disabled': { @@ -16280,6 +17241,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--disabled-updating': { @@ -16293,6 +17255,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--just-disabled': { @@ -16306,6 +17269,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--just-disabled-paused': { @@ -16319,6 +17283,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--disabled-exceeded-threshold': { @@ -16332,6 +17297,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--disabled-exceeded-threshold-org': { @@ -16345,6 +17311,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--disabled-payment-required': { @@ -16358,6 +17325,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-uireview--unlinked': { @@ -16371,6 +17339,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-uireview', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests': { @@ -16412,6 +17381,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--enabled': { @@ -16425,6 +17395,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--enabled-updating': { @@ -16438,6 +17409,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--just-enabled': { @@ -16451,6 +17423,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--just-enabled-two-browsers': { @@ -16464,6 +17437,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--just-enabled-three-browsers': { @@ -16477,6 +17451,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--enabled-no-snapshots': { @@ -16490,6 +17465,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--enabled-payment-required': { @@ -16503,6 +17479,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--disabled-has-snapshots': { @@ -16516,6 +17493,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--disabled-updating': { @@ -16529,6 +17507,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--disabled-no-snapshots': { @@ -16542,6 +17521,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--disabled-no-snapshots-org': { @@ -16555,6 +17535,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--disabled-payment-required': { @@ -16568,6 +17549,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--capture-stack-upgrade-available': { @@ -16581,6 +17563,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--capture-stack-upgrading': { @@ -16594,6 +17577,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--capture-stack-just-upgraded': { @@ -16607,6 +17591,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--capture-stack-downgrade-available': { @@ -16620,6 +17605,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--capture-stack-downgrading': { @@ -16633,6 +17619,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-managescreen-visualtests--capture-stack-just-downgraded': { @@ -16646,6 +17633,7 @@ export const index = { depth: 3, parent: 'webapp-screens-managescreen-visualtests', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing': { @@ -16697,6 +17685,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-articles', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-companyscreen': { @@ -16729,6 +17718,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-companyscreen-aboutscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-companyscreen-jobsscreen': { @@ -16750,6 +17740,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-companyscreen-jobsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen': { @@ -16789,6 +17780,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparelayout', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparelayout--arc': { @@ -16802,6 +17794,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparelayout', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparelayout--rect': { @@ -16815,6 +17808,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparelayout', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparelayout--tetrisl': { @@ -16828,6 +17822,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparelayout', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparelayout--tetriss': { @@ -16841,6 +17836,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparelayout', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparelayout--tetrist': { @@ -16854,6 +17850,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparelayout', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparescreen': { @@ -16886,6 +17883,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparescreen--jest-image-snapshot': { @@ -16899,6 +17897,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparescreen--backstop-js': { @@ -16912,6 +17911,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparescreen--percy': { @@ -16925,6 +17925,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparescreen--screener': { @@ -16938,6 +17939,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparescreen--applitools': { @@ -16951,6 +17953,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparescreen--visual-testing': { @@ -16964,6 +17967,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparescreen--deploy-storybook': { @@ -16977,6 +17981,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparescreen--netlify': { @@ -16990,6 +17995,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-comparescreen-comparescreen--vercel': { @@ -17003,6 +18009,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-comparescreen-comparescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-cta': { @@ -17024,6 +18031,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-cta', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-faq': { @@ -17045,6 +18053,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-faq', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-feature': { @@ -17069,6 +18078,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-feature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-feature--w-children': { @@ -17082,6 +18092,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-feature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featurecallout': { @@ -17103,6 +18114,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-featurecallout', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens': { @@ -17142,6 +18154,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-featuresscreens-documentscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-documentscreen-componentexample': { @@ -17169,6 +18182,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-documentscreen-componentexample', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-documentscreen-componentexample--did-activate-docs': { @@ -17182,6 +18196,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-documentscreen-componentexample', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-documentscreen-componentexample--pure-snapshot': { @@ -17195,6 +18210,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-documentscreen-componentexample', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-documentscreen-componentexample--pure-snapshot-ff': { @@ -17208,6 +18224,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-documentscreen-componentexample', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-documentscreen-componentexample--pure-docs': { @@ -17221,6 +18238,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-documentscreen-componentexample', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-documentscreen-documentanimation': { @@ -17245,6 +18263,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-documentscreen-documentanimation', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-documentscreen-documentanimation--cutoff': { @@ -17258,6 +18277,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-documentscreen-documentanimation', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-documentscreen-documentscreenhero': { @@ -17282,6 +18302,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-documentscreen-documentscreenhero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-documentscreen-documentscreenhero--maintenance-mode': { @@ -17295,6 +18316,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-documentscreen-documentscreenhero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-featuresscreenshero': { @@ -17316,6 +18338,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-featuresscreens-featuresscreenshero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-publishscreen': { @@ -17342,6 +18365,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-featuresscreens-publishscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-publishscreen-feedbackanimation': { @@ -17367,6 +18391,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-publishscreen-feedbackanimation', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-publishscreen-feedbackanimation--no-animation': { @@ -17380,6 +18405,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-publishscreen-feedbackanimation', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-publishscreen-feedbackanimation--cutoff': { @@ -17393,6 +18419,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-publishscreen-feedbackanimation', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-publishscreen-publishscreenhero': { @@ -17417,6 +18444,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-publishscreen-publishscreenhero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-publishscreen-publishscreenhero--maintenance-mode': { @@ -17430,6 +18458,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-publishscreen-publishscreenhero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-publishscreen-review': { @@ -17451,6 +18480,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-publishscreen-review', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-testscreen': { @@ -17477,6 +18507,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-featuresscreens-testscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-testscreen-pinpointbugsanimation': { @@ -17502,6 +18533,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-testscreen-pinpointbugsanimation', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-testscreen-pinpointbugsanimation--paused': { @@ -17515,6 +18547,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-testscreen-pinpointbugsanimation', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-testscreen-pinpointbugsanimation--cutoff': { @@ -17528,6 +18561,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-testscreen-pinpointbugsanimation', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-testscreen-snapshotexample': { @@ -17549,6 +18583,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-testscreen-snapshotexample', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-testscreen-testscreenhero': { @@ -17573,6 +18608,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-testscreen-testscreenhero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-featuresscreens-testscreen-testscreenhero--maintenance-mode': { @@ -17586,6 +18622,7 @@ export const index = { depth: 5, parent: 'webapp-screens-marketing-featuresscreens-testscreen-testscreenhero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-hero': { @@ -17612,6 +18649,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-hero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-hero--bottom-animation': { @@ -17625,6 +18663,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-hero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-hero--bottom-animation-inverted': { @@ -17638,6 +18677,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-hero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-hero--maintenance-mode': { @@ -17651,6 +18691,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-hero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-integrations': { @@ -17672,6 +18713,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-integrations', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-landingscreen': { @@ -17709,6 +18751,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-landingscreen-automatedworkflows', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-landingscreen-automatedworkflows--paused': { @@ -17722,6 +18765,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-landingscreen-automatedworkflows', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-landingscreen-landingscreen': { @@ -17747,6 +18791,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-landingscreen-landingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-landingscreen-landingscreen--not-logged-in-maintenance-mode': { @@ -17760,6 +18805,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-landingscreen-landingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-landingscreen-landingscreen--logged-in': { @@ -17773,6 +18819,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-landingscreen-landingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-landingscreen-landingscreenhero': { @@ -17797,6 +18844,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-landingscreen-landingscreenhero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-landingscreen-landingscreenhero--maintenance-mode': { @@ -17810,6 +18858,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-landingscreen-landingscreenhero', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-landingscreen-notables': { @@ -17831,6 +18880,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-landingscreen-notables', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-marketingfooter': { @@ -17852,6 +18902,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-marketingfooter', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-marketingheader': { @@ -17880,6 +18931,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-marketingheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-marketingheader--logged-in': { @@ -17893,6 +18945,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-marketingheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-marketingheader--not-logged-in-maintenance-mode': { @@ -17906,6 +18959,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-marketingheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-marketingheader--logged-in-maintenance-mode': { @@ -17919,6 +18973,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-marketingheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-marketingheader--inverse-logged-in': { @@ -17932,6 +18987,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-marketingheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-marketingheader--inverse-not-logged-in': { @@ -17945,6 +19001,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-marketingheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-marketingpagetitle': { @@ -17966,6 +19023,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-marketingpagetitle', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-personascreens': { @@ -18001,6 +19059,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-personascreens-designsystemsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-personascreens-digitalagenciesscreen': { @@ -18022,6 +19081,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-personascreens-digitalagenciesscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-personascreens-frontendteamsscreen': { @@ -18043,6 +19103,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-personascreens-frontendteamsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-personascreens-personaheader': { @@ -18064,6 +19125,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-personascreens-personaheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-personascreens-storybookusersscreen': { @@ -18085,6 +19147,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-personascreens-storybookusersscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-pricingscreen': { @@ -18119,6 +19182,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-pricingscreen-faqpricing', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-pricingscreen-prices': { @@ -18143,6 +19207,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-pricingscreen-prices', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-pricingscreen-prices--not-logged-in': { @@ -18156,6 +19221,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-pricingscreen-prices', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-pricingscreen-pricingfeatures': { @@ -18177,6 +19243,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-pricingscreen-pricingfeatures', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-pricingscreen-pricingscreen': { @@ -18201,6 +19268,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-pricingscreen-pricingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-pricingscreen-pricingscreen--not-logged-in': { @@ -18214,6 +19282,7 @@ export const index = { depth: 4, parent: 'webapp-screens-marketing-pricingscreen-pricingscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-socialproof': { @@ -18235,6 +19304,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-socialproof', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-testimonial': { @@ -18259,6 +19329,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-testimonial', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-testimonial--compact': { @@ -18272,6 +19343,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-testimonial', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-testimonials': { @@ -18293,6 +19365,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-testimonials', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-valueprop': { @@ -18314,6 +19387,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-valueprop', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-workflows': { @@ -18339,6 +19413,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-workflows', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-workflows--test': { @@ -18352,6 +19427,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-workflows', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-marketing-workflows--document': { @@ -18365,6 +19441,7 @@ export const index = { depth: 3, parent: 'webapp-screens-marketing-workflows', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-notificationsscreen': { @@ -18391,6 +19468,7 @@ export const index = { depth: 2, parent: 'webapp-screens-notificationsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-notificationsscreen--default': { @@ -18404,6 +19482,7 @@ export const index = { depth: 2, parent: 'webapp-screens-notificationsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-notificationsscreen--empty': { @@ -18417,6 +19496,7 @@ export const index = { depth: 2, parent: 'webapp-screens-notificationsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-notificationsscreen--without-an-email-link': { @@ -18430,6 +19510,7 @@ export const index = { depth: 2, parent: 'webapp-screens-notificationsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding': { @@ -18470,6 +19551,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-chooserepository', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-chooserepository--default': { @@ -18483,6 +19565,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-chooserepository', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-chooserepository--default-refreshing': { @@ -18496,6 +19579,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-chooserepository', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-chooserepository--default-bitbucket': { @@ -18509,6 +19593,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-chooserepository', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-createproject': { @@ -18530,6 +19615,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-createproject', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-onboardingscreen-clickable': { @@ -18555,6 +19641,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-onboardingscreen-clickable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-onboardingscreen-clickable--default': { @@ -18568,6 +19655,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-onboardingscreen-clickable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-onboardingscreen-clickable--saml': { @@ -18581,6 +19669,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-onboardingscreen-clickable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-projecttypepicker': { @@ -18606,6 +19695,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-projecttypepicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-projecttypepicker--bitbucket': { @@ -18619,6 +19709,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-projecttypepicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-projecttypepicker--gitlab': { @@ -18632,6 +19723,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-projecttypepicker', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-setupprojectflow-clickable': { @@ -18658,6 +19750,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-setupprojectflow-clickable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-setupprojectflow-clickable--onboarding': { @@ -18671,6 +19764,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-setupprojectflow-clickable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-setupprojectflow-clickable--onboarding-saml-user': { @@ -18684,6 +19778,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-setupprojectflow-clickable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-onboarding-setupprojectflow-clickable--add-project': { @@ -18697,6 +19792,7 @@ export const index = { depth: 3, parent: 'webapp-screens-onboarding-setupprojectflow-clickable', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-preferencesupdatedscreen': { @@ -18718,6 +19814,7 @@ export const index = { depth: 2, parent: 'webapp-screens-preferencesupdatedscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest': { @@ -18789,6 +19886,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-activity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-activity--no-builds': { @@ -18802,6 +19900,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-activity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-activity--simple': { @@ -18815,6 +19914,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-activity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-activity--ui-review-disabled': { @@ -18828,6 +19928,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-activity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-activity--ui-review-disabled-no-reviewers': { @@ -18841,6 +19942,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-activity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-activity--reviews': { @@ -18854,6 +19956,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-activity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-activity--in-progress-build': { @@ -18867,6 +19970,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-activity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-activity--comments': { @@ -18880,6 +19984,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-activity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-activityitem': { @@ -18904,6 +20009,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-activityitem--loading': { @@ -18917,6 +20023,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-activityitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity': { @@ -18951,6 +20058,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--no-capture': { @@ -18964,6 +20072,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--in-progress': { @@ -18977,6 +20086,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--timed-out': { @@ -18990,6 +20100,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--error': { @@ -19003,6 +20114,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--failed': { @@ -19016,6 +20128,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--passed': { @@ -19029,6 +20142,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--pending': { @@ -19042,6 +20156,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--accepted': { @@ -19055,6 +20170,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--denied': { @@ -19068,6 +20184,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--limited': { @@ -19081,6 +20198,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-buildactivity--publish-only': { @@ -19094,6 +20212,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-buildactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity': { @@ -19134,6 +20253,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--active-truncated-text': { @@ -19147,6 +20267,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--active-diff-thread': { @@ -19160,6 +20281,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--active-short-height': { @@ -19173,6 +20295,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--active-non-owner': { @@ -19186,6 +20309,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--active-logged-out': { @@ -19199,6 +20323,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--resolved': { @@ -19212,6 +20337,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--resolved-diff-thread': { @@ -19225,6 +20351,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--resolved-mutating': { @@ -19238,6 +20365,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--resolved-expanded': { @@ -19251,6 +20379,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--resolved-expanded-mutating': { @@ -19264,6 +20393,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--resolved-logged-out': { @@ -19277,6 +20407,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--resolved-logged-out-expanded': { @@ -19290,6 +20421,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--outdated': { @@ -19303,6 +20435,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--outdated-non-owner': { @@ -19316,6 +20449,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--outdated-logged-out': { @@ -19329,6 +20463,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--outdated-collapsed': { @@ -19342,6 +20477,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-commentthreadactivity--outdated-tooltip': { @@ -19355,6 +20491,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-commentthreadactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-reviewactivity': { @@ -19383,6 +20520,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-reviewactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-reviewactivity--assigned-other': { @@ -19396,6 +20534,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-reviewactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-reviewactivity--approved': { @@ -19409,6 +20548,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-reviewactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-reviewactivity--unapproved': { @@ -19422,6 +20562,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-reviewactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-reviewactivity--unassigned-self': { @@ -19435,6 +20576,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-reviewactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-activity-reviewactivity--unassigned-other': { @@ -19448,6 +20590,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-activity-reviewactivity', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-buildstatustooltip': { @@ -19478,6 +20621,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-buildstatustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-buildstatustooltip--build-in-progress': { @@ -19491,6 +20635,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-buildstatustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-buildstatustooltip--build-in-progress-tests-disabled': { @@ -19504,6 +20649,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-buildstatustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-buildstatustooltip--paused': { @@ -19517,6 +20663,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-buildstatustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-buildstatustooltip--errored-build': { @@ -19530,6 +20677,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-buildstatustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-buildstatustooltip--errored-snapshots': { @@ -19543,6 +20691,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-buildstatustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-buildstatustooltip--denied-snapshots': { @@ -19556,6 +20705,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-buildstatustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-buildstatustooltip--pending-snapshots': { @@ -19569,6 +20719,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-buildstatustooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist': { @@ -19640,6 +20791,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--no-checks': { @@ -19653,6 +20805,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--all-passing': { @@ -19666,6 +20819,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--pending-reviews': { @@ -19679,6 +20833,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--active-comment-threads': { @@ -19692,6 +20847,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--visual-changes': { @@ -19705,6 +20861,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--build-error': { @@ -19718,6 +20875,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--build-in-progress': { @@ -19731,6 +20889,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--comparison-in-progress': { @@ -19744,6 +20903,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--no-comparison': { @@ -19757,6 +20917,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--diff-errors': { @@ -19770,6 +20931,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--paused-exceeded-threshold': { @@ -19783,6 +20945,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--paused-exceeded-threshold-org': { @@ -19796,6 +20959,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--paused-exceeded-threshold-no-plan-access': { @@ -19809,6 +20973,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--paused-exceeded-threshold-in-progress-build': { @@ -19822,6 +20987,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--paused-exceeded-threshold-error-build': { @@ -19835,6 +21001,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--paused-payment-required': { @@ -19848,6 +21015,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--was-paused-now-resumed': { @@ -19861,6 +21029,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--all-tests': { @@ -19874,6 +21043,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--all-tests-exceeded-threshold': { @@ -19887,6 +21057,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--all-tests-was-paused-now-resumed': { @@ -19900,6 +21071,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--all-tests-ui-review-disabled': { @@ -19913,6 +21085,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--all-tests-ui-review-disabled-publish-only': { @@ -19926,6 +21099,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--all-tests-build-error': { @@ -19939,6 +21113,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--all-tests-build-in-progress': { @@ -19952,6 +21127,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--all-tests-comparison-in-progress': { @@ -19965,6 +21141,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--all-tests-no-reviewers': { @@ -19978,6 +21155,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--logged-out': { @@ -19991,6 +21169,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--logged-out-no-reviewers': { @@ -20004,6 +21183,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklist--pure-selecting-reviewers': { @@ -20017,6 +21197,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistactivecommentthread': { @@ -20042,6 +21223,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistactivecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistactivecommentthread--logged-out': { @@ -20055,6 +21237,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistactivecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistactivecommentthread--pure-resolving': { @@ -20068,6 +21251,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistactivecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads': { @@ -20096,6 +21280,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads--multiple-constrained': { @@ -20109,6 +21294,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads--multiple': { @@ -20122,6 +21308,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads--multiple-logged-out': { @@ -20135,6 +21322,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads--multiple-git-lab': { @@ -20148,6 +21336,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads--pure-resolving-all': { @@ -20161,6 +21350,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistactivecommentthreads', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistbuilderrors': { @@ -20182,6 +21372,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistbuilderrors', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklisterroreddiffs': { @@ -20207,6 +21398,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklisterroreddiffs', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklisterroreddiffs--multiple': { @@ -20220,6 +21412,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklisterroreddiffs', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklisterroreddiffs--multiple-git-lab': { @@ -20233,6 +21426,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklisterroreddiffs', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader': { @@ -20266,6 +21460,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader--all-passing': { @@ -20279,6 +21474,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader--publish-only': { @@ -20292,6 +21488,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader--with-warnings': { @@ -20305,6 +21502,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader--with-warnings-git-lab': { @@ -20318,6 +21516,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader--with-errors': { @@ -20331,6 +21530,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader--with-build-errors': { @@ -20344,6 +21544,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader--build-in-progress': { @@ -20357,6 +21558,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader--comparison-in-progress': { @@ -20370,6 +21572,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader--ui-review-disabled': { @@ -20383,6 +21586,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistheader--with-build-errors-ui-review-disabled': { @@ -20396,6 +21600,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistitemheader': { @@ -20420,6 +21625,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistitemheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistitemheader--with-action': { @@ -20433,6 +21639,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistitemheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistpendingreviews': { @@ -20461,6 +21668,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistpendingreviews', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistpendingreviews--multiple': { @@ -20474,6 +21682,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistpendingreviews', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistpendingreviews--multiple-approving': { @@ -20487,6 +21696,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistpendingreviews', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistpendingreviews--multiple-unassigning': { @@ -20500,6 +21710,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistpendingreviews', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistpendingreviews--multiple-logged-out': { @@ -20513,6 +21724,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistpendingreviews', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistpendingreviews--multiple-git-lab': { @@ -20526,6 +21738,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistpendingreviews', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistspeccolumn': { @@ -20551,6 +21764,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistspeccolumn', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistspeccolumn--default-spec': { @@ -20564,6 +21778,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistspeccolumn', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistspeccolumn--low-data-spec': { @@ -20577,6 +21792,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistspeccolumn', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistvisualchanges': { @@ -20604,6 +21820,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistvisualchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistvisualchanges--single-tall-image': { @@ -20617,6 +21834,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistvisualchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistvisualchanges--multiple': { @@ -20630,6 +21848,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistvisualchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistvisualchanges--approving': { @@ -20643,6 +21862,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistvisualchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-checklist-checklistvisualchanges--logged-out': { @@ -20656,6 +21876,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-checklist-checklistvisualchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features': { @@ -20691,6 +21912,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uireviewfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uireviewfeature--logged-out': { @@ -20704,6 +21926,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uireviewfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature': { @@ -20743,6 +21966,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--in-progress': { @@ -20756,6 +21980,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--accepted': { @@ -20769,6 +21994,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--pending': { @@ -20782,6 +22008,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--denied': { @@ -20795,6 +22022,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--failed': { @@ -20808,6 +22036,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--errored': { @@ -20821,6 +22050,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--timed-out': { @@ -20834,6 +22064,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--paused': { @@ -20847,6 +22078,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--paused-payment-required': { @@ -20860,6 +22092,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--paused-organization': { @@ -20873,6 +22106,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--paused-organization-no-plan': { @@ -20886,6 +22120,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--ui-tests-disabled-for-build-enabled-on-app': @@ -20900,6 +22135,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--ui-tests-paused-for-build-enabled-on-app': { @@ -20913,6 +22149,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--disabled': { @@ -20926,6 +22163,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--disabled-read-only': { @@ -20939,6 +22177,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-features-uitestsfeature--disabled-low-spec-count': { @@ -20952,6 +22191,7 @@ export const index = { depth: 4, parent: 'webapp-screens-pullrequest-features-uitestsfeature', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-nocomparison': { @@ -20982,6 +22222,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-nocomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-nocomparison--no-merge-base-build': { @@ -20995,6 +22236,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-nocomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-nocomparison--head-build-in-progress': { @@ -21008,6 +22250,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-nocomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-nocomparison--patch-build-in-progress': { @@ -21021,6 +22264,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-nocomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-nocomparison--publish-only-head-build': { @@ -21034,6 +22278,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-nocomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-nocomparison--publish-only-merge-base': { @@ -21047,6 +22292,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-nocomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-nocomparison--head-build-errored': { @@ -21060,6 +22306,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-nocomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-nocomparison--patch-build-errored': { @@ -21073,6 +22320,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-nocomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangecomments': { @@ -21100,6 +22348,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangecomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangecomments--no-thread-new-story': { @@ -21113,6 +22362,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangecomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangecomments--no-thread-removed-story': { @@ -21126,6 +22376,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangecomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangecomments--active-thread': { @@ -21139,6 +22390,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangecomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangecomments--resolved-thread': { @@ -21152,6 +22404,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangecomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangecommentthread': { @@ -21178,6 +22431,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangecommentthread--w-user': { @@ -21191,6 +22445,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangecommentthread--pure-w-user': { @@ -21204,6 +22459,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangecommentthread--pure-w-user-collapsed': { @@ -21217,6 +22473,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangecommentthread', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem': { @@ -21255,6 +22512,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--added': { @@ -21268,6 +22526,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--added-logged-out': { @@ -21281,6 +22540,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--added-w-active-comment-thread': { @@ -21294,6 +22554,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--removed': { @@ -21307,6 +22568,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--visually-different': { @@ -21320,6 +22582,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--visually-different-after-upgrade': { @@ -21333,6 +22596,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--scaled': { @@ -21346,6 +22610,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--size-changed': { @@ -21359,6 +22624,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--errored': { @@ -21372,6 +22638,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--fixed': { @@ -21385,6 +22652,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--no-diff': { @@ -21398,6 +22666,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--diff': { @@ -21411,6 +22680,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--diff-strobe': { @@ -21424,6 +22694,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--diff-focus': { @@ -21437,6 +22708,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchangeitem--diff-focus-strobe': { @@ -21450,6 +22722,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchangeitem', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges': { @@ -21484,6 +22757,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--ui-review-disabled': { @@ -21497,6 +22771,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--ui-review-disabled-logged-out': { @@ -21510,6 +22785,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--ui-review-paused': { @@ -21523,6 +22799,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--ui-review-paused-logged-out': { @@ -21536,6 +22813,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--ui-review-blocked': { @@ -21549,6 +22827,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--ui-review-blocked-logged-out': { @@ -21562,6 +22841,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--loading': { @@ -21575,6 +22855,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--build-in-progress-80-complete': { @@ -21588,6 +22869,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--comparison-in-progress-20-complete': { @@ -21601,6 +22883,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--empty': { @@ -21614,6 +22897,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchanges--unsupported': { @@ -21627,6 +22911,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchanges', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip': { @@ -21666,6 +22951,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--passing-ui-review-disabled': { @@ -21679,6 +22965,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--passing-no-changes': { @@ -21692,6 +22979,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--passing-no-changes-in-progress': { @@ -21705,6 +22993,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--representative-only-build': { @@ -21718,6 +23007,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--representative-only-build-resumed': { @@ -21731,6 +23021,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--representative-only-build-in-progress': { @@ -21744,6 +23035,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--representative-only-build-error': { @@ -21757,6 +23049,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--pending-incomplete-setup': { @@ -21770,6 +23063,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--awaiting-activity': { @@ -21783,6 +23077,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--pending-visual-changes': { @@ -21796,6 +23091,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--pending-reviews': { @@ -21809,6 +23105,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--active-comment-threads': { @@ -21822,6 +23119,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--errored-diffs': { @@ -21835,6 +23133,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--all-tests': { @@ -21848,6 +23147,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--build-error': { @@ -21861,6 +23161,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestchecktooltip--git-lab': { @@ -21874,6 +23175,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestchecktooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestcomponents': { @@ -21902,6 +23204,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestcomponents--simple': { @@ -21915,6 +23218,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestcomponents--passed': { @@ -21928,6 +23232,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestcomponents--failed': { @@ -21941,6 +23246,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestcomponents--in-progress': { @@ -21954,6 +23260,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestcomponents--empty': { @@ -21967,6 +23274,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestcomponents', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestexplainer': { @@ -21988,6 +23296,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestexplainer', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestheader': { @@ -22016,6 +23325,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestheader--open-unbuilt': { @@ -22029,6 +23339,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestheader--open-building': { @@ -22042,6 +23353,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestheader--merged-passed': { @@ -22055,6 +23367,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestheader--open-pending': { @@ -22068,6 +23381,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestheader--errored-closed': { @@ -22081,6 +23395,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestparticipants': { @@ -22105,6 +23420,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestparticipants', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestparticipants--default': { @@ -22118,6 +23434,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestparticipants', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers': { @@ -22153,6 +23470,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--stateful': { @@ -22166,6 +23484,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--unreviewed': { @@ -22179,6 +23498,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--unreviewed-limited': { @@ -22192,6 +23512,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--assigning': { @@ -22205,6 +23526,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--assigned-tooltip': { @@ -22218,6 +23540,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--assigned': { @@ -22231,6 +23554,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--ui-review-disabled-assigned': { @@ -22244,6 +23568,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--paused': { @@ -22257,6 +23582,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--approved': { @@ -22270,6 +23596,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--ui-review-disabled-approved': { @@ -22283,6 +23610,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--unreviewed-anonymous': { @@ -22296,6 +23624,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestreviewers--ui-review-disabled-unreviewed-anonymous': { @@ -22309,6 +23638,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen': { @@ -22346,6 +23676,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--no-builds': { @@ -22359,6 +23690,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--activity': { @@ -22372,6 +23704,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--activity-no-merge-base-build': { @@ -22385,6 +23718,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--loading-reviews-approving': { @@ -22398,6 +23732,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--loading-reviews-unapproving': { @@ -22411,6 +23746,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--explainer': { @@ -22424,6 +23760,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--comments': { @@ -22437,6 +23774,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--components': { @@ -22450,6 +23788,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--ui-changes': { @@ -22463,6 +23802,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--ui-changes-loading-diffs': { @@ -22476,6 +23816,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--ui-changes-build-in-progress': { @@ -22489,6 +23830,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--ui-changes-comparison-in-progress': { @@ -22502,6 +23844,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--ui-changes-no-changes': { @@ -22515,6 +23858,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-pullrequestscreen--ui-changes-with-errors': { @@ -22528,6 +23872,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-pullrequestscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-reviewbutton': { @@ -22556,6 +23901,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-reviewbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-reviewbutton--assigned': { @@ -22569,6 +23915,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-reviewbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-reviewbutton--approving': { @@ -22582,6 +23929,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-reviewbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-reviewbutton--approved': { @@ -22595,6 +23943,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-reviewbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-reviewbutton--retracting': { @@ -22608,6 +23957,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-reviewbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-reviewbutton--actions-story': { @@ -22621,6 +23971,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-reviewbutton', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-selectreviewers': { @@ -22647,6 +23998,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-selectreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-selectreviewers--changing-reviewers': { @@ -22660,6 +24012,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-selectreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-selectreviewers--many-collaborators-long-name': { @@ -22673,6 +24026,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-selectreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequest-selectreviewers--no-collaborators-found': { @@ -22686,6 +24040,7 @@ export const index = { depth: 3, parent: 'webapp-screens-pullrequest-selectreviewers', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequestsscreen': { @@ -22712,6 +24067,7 @@ export const index = { depth: 2, parent: 'webapp-screens-pullrequestsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequestsscreen--git-hub-p-rs': { @@ -22725,6 +24081,7 @@ export const index = { depth: 2, parent: 'webapp-screens-pullrequestsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequestsscreen--git-lab-m-rs': { @@ -22738,6 +24095,7 @@ export const index = { depth: 2, parent: 'webapp-screens-pullrequestsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-pullrequestsscreen--explainer': { @@ -22751,6 +24109,7 @@ export const index = { depth: 2, parent: 'webapp-screens-pullrequestsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-settingsscreen': { @@ -22777,6 +24136,7 @@ export const index = { depth: 2, parent: 'webapp-screens-settingsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-settingsscreen--default': { @@ -22790,6 +24150,7 @@ export const index = { depth: 2, parent: 'webapp-screens-settingsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-settingsscreen--default-refreshing-membership': { @@ -22803,6 +24164,7 @@ export const index = { depth: 2, parent: 'webapp-screens-settingsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-settingsscreen--unlinked': { @@ -22816,6 +24178,7 @@ export const index = { depth: 2, parent: 'webapp-screens-settingsscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup': { @@ -22868,6 +24231,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-catchchangesscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-catchchangesscreen--default': { @@ -22881,6 +24245,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-catchchangesscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-catchchangesscreen--default-onboarding': { @@ -22894,6 +24259,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-catchchangesscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-catchchangesscreen--no-changes-warning': { @@ -22907,6 +24273,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-catchchangesscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-changesspottedscreen': { @@ -22932,6 +24299,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-changesspottedscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-changesspottedscreen--default': { @@ -22945,6 +24313,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-changesspottedscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-changesspottedscreen--default-onboarding': { @@ -22958,6 +24327,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-changesspottedscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-changessummary': { @@ -22982,6 +24352,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-changessummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-changessummary--default': { @@ -22995,6 +24366,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-changessummary', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-instructions': { @@ -23020,6 +24392,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-instructions', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-instructions--default': { @@ -23033,6 +24406,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-instructions', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-catchchanges-instructions--no-changes-warning': { @@ -23046,6 +24420,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-catchchanges-instructions', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook': { @@ -23085,6 +24460,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-builderrorlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-builderrorlist--default': { @@ -23098,6 +24474,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-builderrorlist', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-confirmationsuccess': { @@ -23125,6 +24502,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-confirmationsuccess', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-confirmationsuccess--default': { @@ -23138,6 +24516,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-confirmationsuccess', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-confirmationsuccess--scroll': { @@ -23151,6 +24530,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-confirmationsuccess', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-confirmationsuccess--small': { @@ -23164,6 +24544,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-confirmationsuccess', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-confirmationsuccess--small-scroll': { @@ -23177,6 +24558,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-confirmationsuccess', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-instructions': { @@ -23202,6 +24584,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-instructions', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-instructions--default': { @@ -23215,6 +24598,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-instructions', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-instructions--retry': { @@ -23228,6 +24612,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-instructions', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-publishfailedscreen': { @@ -23254,6 +24639,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-publishfailedscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-publishfailedscreen--default': { @@ -23267,6 +24653,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-publishfailedscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-publishfailedscreen--default-onboarding': { @@ -23280,6 +24667,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-publishfailedscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-publishfailedscreen--infrastructure-error': { @@ -23293,6 +24681,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-publishfailedscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-publishstorybookscreen': { @@ -23318,6 +24707,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-publishstorybookscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-publishstorybookscreen--default': { @@ -23331,6 +24721,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-publishstorybookscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-publishstorybookscreen--default-onboarding': { @@ -23344,6 +24735,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-publishstorybookscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-publishsuccessscreen': { @@ -23369,6 +24761,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-publishsuccessscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-publishsuccessscreen--default': { @@ -23382,6 +24775,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-publishsuccessscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-publishstorybook-publishsuccessscreen--default-onboarding': { @@ -23395,6 +24789,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-publishstorybook-publishsuccessscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges': { @@ -23432,6 +24827,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-comparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges-comparison--default': { @@ -23445,6 +24841,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-comparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges-comparisoncomments': { @@ -23469,6 +24866,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-comparisoncomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges-comparisoncomments--default': { @@ -23482,6 +24880,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-comparisoncomments', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges-feedbackscreen': { @@ -23507,6 +24906,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-feedbackscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges-feedbackscreen--default': { @@ -23520,6 +24920,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-feedbackscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges-feedbackscreen--default-onboarding': { @@ -23533,6 +24934,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-feedbackscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges-verifychangesscreen': { @@ -23559,6 +24961,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-verifychangesscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges-verifychangesscreen--default': { @@ -23572,6 +24975,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-verifychangesscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges-verifychangesscreen--default-onboarding': { @@ -23585,6 +24989,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-verifychangesscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-verifychanges-verifychangesscreen--mutating': { @@ -23598,6 +25003,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-verifychanges-verifychangesscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-wrapup': { @@ -23634,6 +25040,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-wrapup-mergechecksscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-wrapup-mergechecksscreen--default': { @@ -23647,6 +25054,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-wrapup-mergechecksscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-wrapup-mergechecksscreen--default-onboarding': { @@ -23660,6 +25068,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-wrapup-mergechecksscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-wrapup-setupcompletescreen': { @@ -23685,6 +25094,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-wrapup-setupcompletescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-wrapup-setupcompletescreen--default': { @@ -23698,6 +25108,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-wrapup-setupcompletescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-setup-wrapup-setupcompletescreen--default-onboarding': { @@ -23711,6 +25122,7 @@ export const index = { depth: 4, parent: 'webapp-screens-setup-wrapup-setupcompletescreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot': { @@ -23747,6 +25159,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-capturewarningtooltip', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons': { @@ -23785,6 +25198,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--failed': { @@ -23798,6 +25212,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--unreviewed': { @@ -23811,6 +25226,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--unreviewed-accepting': { @@ -23824,6 +25240,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--unreviewed-denying': { @@ -23837,6 +25254,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--accepted': { @@ -23850,6 +25268,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--accepted-undoing': { @@ -23863,6 +25282,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--auto-accepted-first-build': { @@ -23876,6 +25296,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--denied': { @@ -23889,6 +25310,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--denied-undoing': { @@ -23902,6 +25324,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--unreviewable-no-descendant': { @@ -23915,6 +25338,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--unreviewable-with-descendant': { @@ -23928,6 +25352,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--read-only-logged-in': { @@ -23941,6 +25366,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--read-only-not-logged-in': { @@ -23954,6 +25380,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--error': { @@ -23967,6 +25394,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-reviewbuttons--error-last': { @@ -23980,6 +25408,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-reviewbuttons', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison': { @@ -24032,6 +25461,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--2-up': { @@ -24045,6 +25475,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--2-up-pure-diff-visible': { @@ -24058,6 +25489,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--2-up-pure-diff-visible-diff-strobe': { @@ -24071,6 +25503,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--2-up-pure-diff-visible-diff-focus': { @@ -24084,6 +25517,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--2-up-pure-diff-visible-diff-focus-and-strobe': { @@ -24097,6 +25531,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--2-up-pure-diff-invisible': { @@ -24110,6 +25545,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--2-up-pure-diff-invisible-diff-focus-diff-strobe': { @@ -24123,6 +25559,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--2-up-diff-version-1': { @@ -24136,6 +25573,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--2-up-ignoring': { @@ -24149,6 +25587,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--2-up-diff-bigger': { @@ -24162,6 +25601,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up': { @@ -24175,6 +25615,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-header-offset': { @@ -24188,6 +25629,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-pure-diff-visible': { @@ -24201,6 +25643,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-pure-diff-visible-diff-strobe': { @@ -24214,6 +25657,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-pure-diff-visible-diff-focus': { @@ -24227,6 +25671,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-pure-diff-visible-diff-focus-and-strobe': { @@ -24240,6 +25685,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-pure-diff-invisible': { @@ -24253,6 +25699,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-pure-switching-diff-visible': { @@ -24266,6 +25713,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-pure-switching-diff-visible-diff-strobe': { @@ -24279,6 +25727,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-pure-switching-diff-visible-diff-focus': { @@ -24292,6 +25741,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-pure-switching-diff-visible-diff-focus-and-strobe': @@ -24306,6 +25756,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-pure-switching-diff-invisible': { @@ -24319,6 +25770,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-diff-version-1': { @@ -24332,6 +25784,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-diff-bigger': { @@ -24345,6 +25798,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--1-up-ignoring': { @@ -24358,6 +25812,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--no-baseline': { @@ -24371,6 +25826,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--no-baseline-in-progress': { @@ -24384,6 +25840,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--no-baseline-ignoring': { @@ -24397,6 +25854,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotcomparison--failed': { @@ -24410,6 +25868,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotcomparison', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader': { @@ -24450,6 +25909,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--pending': { @@ -24463,6 +25923,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--pending-viewport-default': { @@ -24476,6 +25937,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--pending-first': { @@ -24489,6 +25951,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--pending-last': { @@ -24502,6 +25965,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--pending-no-baseline': { @@ -24515,6 +25979,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--pending-has-ignored-selectors': { @@ -24528,6 +25993,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--pending-has-ignored-selectors-showing': { @@ -24541,6 +26007,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--accepted': { @@ -24554,6 +26021,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--auto-accepted-first-build': { @@ -24567,6 +26035,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--denied': { @@ -24580,6 +26049,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--unreviewable-with-descendant': { @@ -24593,6 +26063,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--read-only-logged-in': { @@ -24606,6 +26077,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--read-only-not-logged-in': { @@ -24619,6 +26091,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--in-progress': { @@ -24632,6 +26105,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--failed': { @@ -24645,6 +26119,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--error': { @@ -24658,6 +26133,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotheader--error-last': { @@ -24671,6 +26147,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotheader', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshothtmldiff': { @@ -24701,6 +26178,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshothtmldiff', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshothtmldiff--loading-baseline': { @@ -24714,6 +26192,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshothtmldiff', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshothtmldiff--default': { @@ -24727,6 +26206,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshothtmldiff', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshothtmldiff--long-lines': { @@ -24740,6 +26220,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshothtmldiff', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshothtmldiff--too-large-issue-1885': { @@ -24753,6 +26234,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshothtmldiff', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshothtmldiff--large-after-pretty-print-issue-1885-b': { @@ -24766,6 +26248,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshothtmldiff', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshothtmldiff--too-large-html': { @@ -24779,6 +26262,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshothtmldiff', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshothtmldiff--too-large-diff': { @@ -24792,6 +26276,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshothtmldiff', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen': { @@ -24843,6 +26328,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--pending-metadata-loading': { @@ -24856,6 +26342,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--pending': { @@ -24869,6 +26356,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--pending-multi-browser': { @@ -24882,6 +26370,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--pending-multi-browser-one-unchanged': { @@ -24895,6 +26384,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--pending-new-browser': { @@ -24908,6 +26398,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--baseline-upgraded': { @@ -24921,6 +26412,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--pending-tall': { @@ -24934,6 +26426,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--pending-has-ignored': { @@ -24947,6 +26440,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--pending-no-baseline-new-specs': { @@ -24960,6 +26454,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--in-progress-no-baseline': { @@ -24973,6 +26468,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--in-progress-no-baseline-one-complete': { @@ -24986,6 +26482,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--disabled-because-of-newer-build': { @@ -24999,6 +26496,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--read-only-logged-in': { @@ -25012,6 +26510,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--read-only-not-logged-in': { @@ -25025,6 +26524,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--failed': { @@ -25038,6 +26538,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--failed-cross-browser-one-complete': { @@ -25051,6 +26552,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--error': { @@ -25064,6 +26566,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--error-cross-browser-same': { @@ -25077,6 +26580,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--error-cross-browser-different': { @@ -25090,6 +26594,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--error-image-too-large': { @@ -25103,6 +26608,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--error-navigation-timeout': { @@ -25116,6 +26622,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--error-navigation-timeout-cross-browser': { @@ -25129,6 +26636,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--error-no-js': { @@ -25142,6 +26650,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--error-failed-js': { @@ -25155,6 +26664,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--error-story-missing': { @@ -25168,6 +26678,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--error-metadata-loading': { @@ -25181,6 +26692,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--timeout-warning': { @@ -25194,6 +26706,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, 'webapp-screens-snapshot-snapshotscreen--certificate-warning': { @@ -25207,6 +26720,7 @@ export const index = { depth: 3, parent: 'webapp-screens-snapshot-snapshotscreen', type: 'story', + subtype: 'story', prepared: true, }, } as Dataset; diff --git a/code/core/src/preview-api/modules/preview-web/render/StoryRender.test.ts b/code/core/src/preview-api/modules/preview-web/render/StoryRender.test.ts index c6b1dcbe2d33..3c8d85712b6c 100644 --- a/code/core/src/preview-api/modules/preview-web/render/StoryRender.test.ts +++ b/code/core/src/preview-api/modules/preview-web/render/StoryRender.test.ts @@ -16,6 +16,7 @@ import { StoryRender, serializeError } from './StoryRender'; const entry = { type: 'story', + subtype: 'story', id: 'component--a', name: 'A', title: 'component', diff --git a/code/e2e-tests/json-files.spec.ts b/code/e2e-tests/json-files.spec.ts index 9769fb4f7905..0cce7fa3e65d 100644 --- a/code/e2e-tests/json-files.spec.ts +++ b/code/e2e-tests/json-files.spec.ts @@ -20,6 +20,7 @@ test.describe('JSON files', () => { name: 'Primary', title: 'Example/Button', type: 'story', + subtype: 'story', }), }), }); From 9183a9be6a88cbc5f252bc459e9619c6306f12e3 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Wed, 17 Sep 2025 21:44:50 +0200 Subject: [PATCH 178/199] Change property order --- code/e2e-tests/json-files.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/e2e-tests/json-files.spec.ts b/code/e2e-tests/json-files.spec.ts index 0cce7fa3e65d..2ec78915f691 100644 --- a/code/e2e-tests/json-files.spec.ts +++ b/code/e2e-tests/json-files.spec.ts @@ -18,9 +18,9 @@ test.describe('JSON files', () => { id: 'example-button--primary', importPath: expect.stringMatching(/button\.stories/i), name: 'Primary', + subtype: 'story', title: 'Example/Button', type: 'story', - subtype: 'story', }), }), }); From 7913c9d7bdaae087aa561f5c39881d3dcfcc7cb0 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Wed, 17 Sep 2025 22:11:32 +0200 Subject: [PATCH 179/199] Remove subtype prop --- code/e2e-tests/json-files.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/code/e2e-tests/json-files.spec.ts b/code/e2e-tests/json-files.spec.ts index 2ec78915f691..9769fb4f7905 100644 --- a/code/e2e-tests/json-files.spec.ts +++ b/code/e2e-tests/json-files.spec.ts @@ -18,7 +18,6 @@ test.describe('JSON files', () => { id: 'example-button--primary', importPath: expect.stringMatching(/button\.stories/i), name: 'Primary', - subtype: 'story', title: 'Example/Button', type: 'story', }), From a163b78445fcc1cd6c5a64dd5e92d0485ac6e451 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Fri, 5 Sep 2025 19:58:32 +0200 Subject: [PATCH 180/199] Make csf-factories codemod bail on transformation when story is not fully transformable --- .../helpers/story-to-csf-factory.test.ts | 44 ++++++++++++++++--- .../codemod/helpers/story-to-csf-factory.ts | 24 +++++++++- 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts index 5aac346705e9..7164fa9e1a7d 100644 --- a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts +++ b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts @@ -1,12 +1,19 @@ import { describe, expect, it, vi } from 'vitest'; import { formatFileContent } from 'storybook/internal/common'; +import { logger } from 'storybook/internal/node-logger'; import path from 'path'; import { dedent } from 'ts-dedent'; import { storyToCsfFactory } from './story-to-csf-factory'; +vi.mock('storybook/internal/node-logger', () => ({ + logger: { + warn: vi.fn(), + }, +})); + expect.addSnapshotSerializer({ serialize: (val: any) => (typeof val === 'string' ? val : val.toString()), test: () => true, @@ -629,10 +636,12 @@ describe('stories codemod', () => { const data = {}; export const A: StoryObj = () => {}; export function B() { }; + export const C = () => ; + export const D = C; // not supported yet (story redeclared) - const C = { ...A, args: data, } satisfies CSF3; - const D = { args: data }; - export { C, D as E }; + const E = { ...A, args: data, } satisfies CSF3; + const F = { args: data }; + export { E, F as G }; `); expect(transformed).toMatchInlineSnapshot(` @@ -654,10 +663,12 @@ describe('stories codemod', () => { const data = {}; export const A = meta.story(() => {}); export const B = meta.story(() => {}); + export const C = meta.story(() => ); + export const D = C.input; // not supported yet (story redeclared) - const C = { ...A.input, args: data } satisfies CSF3; - const D = { args: data }; - export { C, D as E }; + const E = { ...A.input, args: data } satisfies CSF3; + const F = { args: data }; + export { E, F as G }; `); expect(transformed).toContain('A = meta.story'); @@ -665,5 +676,26 @@ describe('stories codemod', () => { // @TODO: when we support these, uncomment this line // expect(transformed).toContain('C = meta.story'); }); + it('should not complete transformation if no stories are not transformed', async () => { + const source = dedent` + export default { + title: 'Component', + }; + export const A = {}; + // not supported yet (story redeclared) + const B = { args: data }; + const C = { args: data }; + export { B, C as D }; + `; + const transformed = await transform(source); + expect(transformed).toEqual(source); + + expect(transformed).not.toContain('preview.meta'); + expect(transformed).not.toContain('meta.story'); + + expect(logger.warn).toHaveBeenCalledWith( + 'Skipping codemod for Component.stories.tsx:\nDetected stories ["A", "B", "D"] were not fully transformed because some use an unsupported format.' + ); + }); }); }); diff --git a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts index df69fec71113..82dbe8dcd184 100644 --- a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts +++ b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts @@ -35,6 +35,11 @@ export async function storyToCsfFactory( return info.source; } + // Track detected stories and which ones we actually transform + const detectedStories = csf.stories; + const detectedStoryNames = detectedStories.map((story) => story.name); + const transformedStoryExports = new Set(); + const metaVariableName = csf._metaVariableName ?? 'meta'; /** @@ -95,7 +100,7 @@ export async function storyToCsfFactory( // @TODO: Support unconventional formats: // `export function Story() { };` and `export { Story }; // These are not part of csf._storyExports but rather csf._storyStatements and are tricky to support. - Object.entries(csf._storyExports).forEach(([, decl]) => { + Object.entries(csf._storyExports).forEach(([exportName, decl]) => { const id = decl.id; const declarator = decl as t.VariableDeclarator; let init = t.isVariableDeclarator(declarator) ? declarator.init : undefined; @@ -118,12 +123,18 @@ export async function storyToCsfFactory( t.memberExpression(t.identifier(metaVariableName), t.identifier('story')), init.properties.length === 0 ? [] : [init] ); + if (t.isIdentifier(id)) { + transformedStoryExports.add(exportName); + } } else if (t.isArrowFunctionExpression(init)) { // Transform CSF1 to meta.story({ render: }) declarator.init = t.callExpression( t.memberExpression(t.identifier(metaVariableName), t.identifier('story')), [init] ); + if (t.isIdentifier(id)) { + transformedStoryExports.add(exportName); + } } } }); @@ -152,6 +163,7 @@ export async function storyToCsfFactory( )._storyPaths?.[exportName]; if (pathForExport && pathForExport.replaceWith) { pathForExport.replaceWith(replacement); + transformedStoryExports.add(exportName); } } }); @@ -227,6 +239,16 @@ export async function storyToCsfFactory( }, }); + // If some stories were detected but not all could be transformed, we skip the codemod to avoid mixed csf syntax and therefore a broken indexer. + if (detectedStoryNames.length > 0 && transformedStoryExports.size !== detectedStoryNames.length) { + logger.warn( + `Skipping codemod for ${info.path}:\nDetected stories [${detectedStoryNames + .map((name) => `"${name}"`) + .join(', ')}] were not fully transformed because some use an unsupported format.` + ); + return info.source; + } + // modify meta if (csf._metaPath) { let declaration = csf._metaPath.node.declaration; From 6c7eb6548d6ca5664532a3fe5a8ed8ba0f50fa05 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Thu, 18 Sep 2025 12:34:11 +0200 Subject: [PATCH 181/199] fix tests --- .../helpers/story-to-csf-factory.test.ts | 58 ++++++++----------- 1 file changed, 24 insertions(+), 34 deletions(-) diff --git a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts index 7164fa9e1a7d..90245faf0dbb 100644 --- a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts +++ b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts @@ -281,24 +281,19 @@ describe('stories codemod', () => { export const D = A.extends({}); `) ).resolves.toMatchInlineSnapshot(` - import preview from '#.storybook/preview'; - - const meta = preview.meta({ - title: 'Component', - }); - - export const A = meta.story(); - export const B = meta.story({ + export default { title: 'Component' }; + export const A = {}; + export const B = { play: async () => { await A.play(); }, - }); + }; export const C = A.run; export const D = A.extends({}); `); }); - it('should support non-conventional formats (INCOMPLETE)', async () => { + it.todo('should support non-conventional formats', async () => { const transformed = await transform(dedent` import { A as Component } from './Button'; import * as Stories from './Other.stories'; @@ -318,24 +313,20 @@ describe('stories codemod', () => { `); expect(transformed).toMatchInlineSnapshot(` - import preview from '#.storybook/preview'; - import { A as Component } from './Button'; import * as Stories from './Other.stories'; import someData from './fixtures'; - const meta = preview.meta({ + export default { component: Component, - // not supported yet (story coming from another file) args: Stories.A.args, - }); - + }; const data = {}; - export const A = meta.story(() => {}); - export const B = meta.story(() => {}); + export const A = () => {}; + export function B() {} // not supported yet (story redeclared) - const C = { ...A.input, args: data }; + const C = { ...A, args: data }; const D = { args: data }; export { C, D as E }; `); @@ -620,7 +611,7 @@ describe('stories codemod', () => { `); }); - it('should support non-conventional formats', async () => { + it.todo('should support non-conventional formats', async () => { const transformed = await transform(dedent` import { Meta, StoryObj as CSF3 } from '@storybook/react'; import { ComponentProps } from './Component'; @@ -645,28 +636,26 @@ describe('stories codemod', () => { `); expect(transformed).toMatchInlineSnapshot(` - import preview from '#.storybook/preview'; + import { StoryObj as CSF3, Meta } from '@storybook/react'; import { A as Component } from './Button'; import { ComponentProps } from './Component'; import * as Stories from './Other.stories'; import someData from './fixtures'; - const meta = preview.meta({ + export default { title: 'Component', component: Component, - // not supported yet (story coming from another file) args: Stories.A.args, - }); - + }; const data = {}; - export const A = meta.story(() => {}); - export const B = meta.story(() => {}); - export const C = meta.story(() => ); - export const D = C.input; + export const A: StoryObj = () => {}; + export function B() {} + export const C = () => ; + export const D = C; // not supported yet (story redeclared) - const E = { ...A.input, args: data } satisfies CSF3; + const E = { ...A, args: data } satisfies CSF3; const F = { args: data }; export { E, F as G }; `); @@ -676,7 +665,8 @@ describe('stories codemod', () => { // @TODO: when we support these, uncomment this line // expect(transformed).toContain('C = meta.story'); }); - it('should not complete transformation if no stories are not transformed', async () => { + + it('should bail transformation if some stories are not transformed to avoid mixed CSF formats', async () => { const source = dedent` export default { title: 'Component', @@ -685,10 +675,10 @@ describe('stories codemod', () => { // not supported yet (story redeclared) const B = { args: data }; const C = { args: data }; - export { B, C as D }; - `; + export { B, C as D };`; const transformed = await transform(source); - expect(transformed).toEqual(source); + const formattedSource = await formatFileContent('Component.stories.tsx', source); + expect(transformed).toEqual(formattedSource); expect(transformed).not.toContain('preview.meta'); expect(transformed).not.toContain('meta.story'); From fa3371dbb1190bf234234aa84ef662120772c29c Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Fri, 19 Sep 2025 10:54:31 +0200 Subject: [PATCH 182/199] fix types and import path handling --- code/core/src/manager-api/lib/stories.ts | 9 ++++++--- code/core/src/types/modules/api-stories.ts | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/code/core/src/manager-api/lib/stories.ts b/code/core/src/manager-api/lib/stories.ts index 53a0218bfa34..989b9d2c57fa 100644 --- a/code/core/src/manager-api/lib/stories.ts +++ b/code/core/src/manager-api/lib/stories.ts @@ -330,9 +330,12 @@ export const transformStoryIndexToStoriesHash = ( } if (item.type === 'component') { - // attach importPath to the component node which should be the same for all children - // this way we can add "open in editor" to the component node - item.importPath = acc[item.children[0]].importPath; + const firstChild = acc[item.children[0]]; + if (firstChild && 'importPath' in firstChild) { + // attach importPath to the component node which should be the same for all children + // this way we can add "open in editor" to the component node + item.importPath = firstChild.importPath; + } } return acc; } diff --git a/code/core/src/types/modules/api-stories.ts b/code/core/src/types/modules/api-stories.ts index bc3bf977f799..bd906b882069 100644 --- a/code/core/src/types/modules/api-stories.ts +++ b/code/core/src/types/modules/api-stories.ts @@ -28,6 +28,7 @@ export interface API_ComponentEntry extends API_BaseEntry { type: 'component'; parent?: StoryId; children: StoryId[]; + importPath?: Path; } export interface API_DocsEntry extends API_BaseEntry { From 9c8103ef3383fc827e0999dc988f8df7238cd5f4 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Fri, 19 Sep 2025 13:41:02 +0200 Subject: [PATCH 183/199] Fix focused tests for stories with tests --- .../src/components/TestProviderRender.tsx | 18 +++++++++++------- code/addons/vitest/src/node/vitest-manager.ts | 1 - code/core/src/manager-api/modules/stories.ts | 5 +++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/code/addons/vitest/src/components/TestProviderRender.tsx b/code/addons/vitest/src/components/TestProviderRender.tsx index 1c61ff72b65f..555e3362bcc5 100644 --- a/code/addons/vitest/src/components/TestProviderRender.tsx +++ b/code/addons/vitest/src/components/TestProviderRender.tsx @@ -242,15 +242,19 @@ export const TestProviderRender: FC = ({ + onClick={() => { + let storyIds; + if (entry) { + // Don't send underlying child test ids when running on a story + // Vitest Manager already handles running the underlying tests + storyIds = + entry.type === 'story' ? [entry.id] : api.findAllLeafStoryIds(entry.id); + } store.send({ type: 'TRIGGER_RUN', - payload: { - storyIds: entry ? api.findAllLeafStoryIds(entry.id) : undefined, - triggeredBy: entry ? entry.type : 'global', - }, - }) - } + payload: { storyIds, triggeredBy: entry?.type ?? 'global' }, + }); + }} > diff --git a/code/addons/vitest/src/node/vitest-manager.ts b/code/addons/vitest/src/node/vitest-manager.ts index 83711c914416..64bd32ff0aa5 100644 --- a/code/addons/vitest/src/node/vitest-manager.ts +++ b/code/addons/vitest/src/node/vitest-manager.ts @@ -16,7 +16,6 @@ import * as find from 'empathic/find'; import path, { dirname, join, normalize } from 'pathe'; import slash from 'slash'; -import { resolvePackageDir } from '../../../../core/src/shared/utils/module'; import { COVERAGE_DIRECTORY } from '../constants'; import { log } from '../logger'; import type { TriggerRunEvent } from '../types'; diff --git a/code/core/src/manager-api/modules/stories.ts b/code/core/src/manager-api/modules/stories.ts index d0d583ce6cd8..4c3b6fd1bd42 100644 --- a/code/core/src/manager-api/modules/stories.ts +++ b/code/core/src/manager-api/modules/stories.ts @@ -494,10 +494,11 @@ export const init: ModuleFn = ({ if (!node) { return results; } + if (node.type === 'story') { + results.push(node.id); + } if ('children' in node) { node.children?.forEach((childId) => findChildEntriesRecursively(childId, results)); - } else if (node.type === 'story') { - results.push(node.id); } return results; }; From 3942b0bf580057ff1ffd949899d5ef46041a7014 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Fri, 19 Sep 2025 15:33:55 +0200 Subject: [PATCH 184/199] Remove tests from children of component, as they are attached to the story now --- code/core/src/manager-api/lib/stories.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/code/core/src/manager-api/lib/stories.ts b/code/core/src/manager-api/lib/stories.ts index 53a0218bfa34..942467fbc352 100644 --- a/code/core/src/manager-api/lib/stories.ts +++ b/code/core/src/manager-api/lib/stories.ts @@ -349,10 +349,17 @@ export const transformStoryIndexToStoriesHash = ( // Update stories to include tests as children, and increase depth for those tests storiesHash = Object.values(storiesHash).reduce((acc, item) => { if (item.type === 'story' && item.subtype === 'test') { - const parentStory = acc[item.parent] as API_StoryEntry; - acc[item.parent] = { - ...parentStory, - children: (parentStory.children || []).concat(item.id).filter((id) => storiesHash[id]), + const story = acc[item.parent] as API_StoryEntry; + const component = acc[story.parent] as API_ComponentEntry; + acc[component.id] = { + ...component, + // Remove test from the component node as it will be attached to the story node instead + children: component.children && component.children.filter((id) => id !== item.id), + }; + acc[story.id] = { + ...story, + // Add test to the story node + children: (story.children || []).concat(item.id), }; acc[item.id] = { ...item, From 999aa033b5f51f9421ac432fda1a5be62fdf6745 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Fri, 19 Sep 2025 15:35:53 +0200 Subject: [PATCH 185/199] Ensure we show the correct status icon for stories with tests --- .../src/manager/components/sidebar/Tree.tsx | 42 ++++++++++--------- code/core/src/manager/utils/status.tsx | 2 +- code/core/src/manager/utils/tree.ts | 2 +- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/code/core/src/manager/components/sidebar/Tree.tsx b/code/core/src/manager/components/sidebar/Tree.tsx index 9ab6e372db73..96281fd811d7 100644 --- a/code/core/src/manager/components/sidebar/Tree.tsx +++ b/code/core/src/manager/components/sidebar/Tree.tsx @@ -339,15 +339,30 @@ const Node = React.memo(function Node(props) { ); } + const itemStatus = getMostCriticalStatusValue(Object.values(statuses || {}).map((s) => s.value)); + const [itemIcon, itemColor] = statusMapping[itemStatus]; + const itemStatusButton = itemIcon ? ( + + {itemIcon} + + ) : null; + if ( item.type === 'component' || item.type === 'group' || (item.type === 'story' && 'children' in item && item.children) ) { const { children = [] } = item; - const itemStatus = groupStatus?.[item.id]; - const color = itemStatus ? statusMapping[itemStatus][1] : null; const BranchNode = { component: ComponentNode, group: GroupNode, story: StoryNode }[item.type]; + const status = getMostCriticalStatusValue([itemStatus, groupStatus?.[item.id]]); + const color = status ? statusMapping[status][1] : null; + const showBranchStatus = status === 'status-value:error' || status === 'status-value:warning'; return ( (function Node(props) { )} {contextMenu.node} - {(['status-value:error', 'status-value:warning'] as StatusValue[]).includes(itemStatus) && ( - + {showBranchStatus ? ( + + ) : ( + itemStatusButton )} ); @@ -418,9 +435,6 @@ const Node = React.memo(function Node(props) { const LeafNode = isTest ? TestNode : { docs: DocumentNode, story: StoryNode }[item.type]; const nodeType = isTest ? 'test' : { docs: 'document', story: 'story' }[item.type]; - const statusValue = getMostCriticalStatusValue(Object.values(statuses || {}).map((s) => s.value)); - const [icon, color] = statusMapping[statusValue]; - return ( (function Node(props) { onMouseEnter={contextMenu.onMouseEnter} > (function Node(props) { )} {contextMenu.node} - {icon ? ( - - {icon} - - ) : null} + {itemStatusButton} ); }); diff --git a/code/core/src/manager/utils/status.tsx b/code/core/src/manager/utils/status.tsx index 35a5a7223226..e53d5c67bfa4 100644 --- a/code/core/src/manager/utils/status.tsx +++ b/code/core/src/manager/utils/status.tsx @@ -69,7 +69,7 @@ export function getGroupStatus( allStatuses: StatusesByStoryIdAndTypeId ): Record { return Object.values(collapsedData).reduce>((acc, item) => { - if (item.type === 'group' || item.type === 'component') { + if (item.type === 'group' || item.type === 'component' || item.type === 'story') { // @ts-expect-error (non strict) const leafs = getDescendantIds(collapsedData as any, item.id, false) .map((id) => collapsedData[id]) diff --git a/code/core/src/manager/utils/tree.ts b/code/core/src/manager/utils/tree.ts index 49919271b43e..6989d26dbf87 100644 --- a/code/core/src/manager/utils/tree.ts +++ b/code/core/src/manager/utils/tree.ts @@ -40,7 +40,7 @@ export const getDescendantIds = memoize(1000)(( skipLeafs: boolean ): string[] => { const entry = data[id]; - if (!entry || entry.type === 'story' || entry.type === 'docs' || !entry.children) { + if (!entry || !('children' in entry) || !entry.children) { return []; } return entry.children.reduce((acc, childId) => { From 669680c7b4a234bc13d5b8988bb83e344e242b6a Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Mon, 22 Sep 2025 11:21:00 +0200 Subject: [PATCH 186/199] fix tests --- code/core/src/manager/utils/status.test.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/code/core/src/manager/utils/status.test.ts b/code/core/src/manager/utils/status.test.ts index 3dad4a9bd49a..0f6fc114eb13 100644 --- a/code/core/src/manager/utils/status.test.ts +++ b/code/core/src/manager/utils/status.test.ts @@ -51,9 +51,17 @@ describe('getGroupStatus', () => { ).toMatchInlineSnapshot(` { "group-1": "status-value:warning", + "group-1--child-b1": "status-value:unknown", + "group-1--child-b2": "status-value:unknown", "root-1-child-a1": "status-value:unknown", "root-1-child-a2": "status-value:unknown", + "root-1-child-a2--grandchild-a1-1": "status-value:unknown", + "root-1-child-a2--grandchild-a1-1:test1": "status-value:unknown", + "root-1-child-a2--grandchild-a1-2": "status-value:unknown", + "root-3--child-a1": "status-value:unknown", "root-3-child-a2": "status-value:unknown", + "root-3-child-a2--grandchild-a1-1": "status-value:unknown", + "root-3-child-a2--grandchild-a1-2": "status-value:unknown", } `); }); @@ -80,9 +88,17 @@ describe('getGroupStatus', () => { ).toMatchInlineSnapshot(` { "group-1": "status-value:error", + "group-1--child-b1": "status-value:unknown", + "group-1--child-b2": "status-value:unknown", "root-1-child-a1": "status-value:unknown", "root-1-child-a2": "status-value:unknown", + "root-1-child-a2--grandchild-a1-1": "status-value:unknown", + "root-1-child-a2--grandchild-a1-1:test1": "status-value:unknown", + "root-1-child-a2--grandchild-a1-2": "status-value:unknown", + "root-3--child-a1": "status-value:unknown", "root-3-child-a2": "status-value:unknown", + "root-3-child-a2--grandchild-a1-1": "status-value:unknown", + "root-3-child-a2--grandchild-a1-2": "status-value:unknown", } `); }); From 2828decf34b0d701ce8bdb49f8fab332e336c9fa Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Mon, 22 Sep 2025 19:01:59 +0200 Subject: [PATCH 187/199] improve csf factories codemod --- code/.storybook/main.ts | 1 - .../src/codemod/csf-factories.ts | 7 +++--- .../helpers/story-to-csf-factory.test.ts | 23 +++++++++++++++---- .../codemod/helpers/story-to-csf-factory.ts | 10 +++++--- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/code/.storybook/main.ts b/code/.storybook/main.ts index fb424fd00ba4..fbc3bbe4eeed 100644 --- a/code/.storybook/main.ts +++ b/code/.storybook/main.ts @@ -44,7 +44,6 @@ const config = defineMain({ { directory: '../core/src/component-testing/components', titlePrefix: 'component-testing', - files: 'test-fn.stories.tsx', }, { directory: '../core/src/controls/components', diff --git a/code/lib/cli-storybook/src/codemod/csf-factories.ts b/code/lib/cli-storybook/src/codemod/csf-factories.ts index cc7e23dc0e6c..3c97dc62c8bd 100644 --- a/code/lib/cli-storybook/src/codemod/csf-factories.ts +++ b/code/lib/cli-storybook/src/codemod/csf-factories.ts @@ -27,7 +27,7 @@ async function runStoriesCodemod(options: { logger.log('Please enter the glob for your stories to migrate'); globString = await prompt.text({ message: 'glob', - initialValue: 'src/**/*.stories.*', + initialValue: '**/*.stories.*', }); } @@ -63,10 +63,11 @@ export const csfFactories: CommandFix = { promptType: 'command', async run({ dryRun, mainConfig, mainConfigPath, previewConfigPath, packageManager, configDir }) { let useSubPathImports = true; + if (!optionalEnvToBoolean(process.env.IN_STORYBOOK_SANDBOX)) { // prompt whether the user wants to use imports map logger.logBox(dedent` - The CSF factories format benefits from subpath imports (the imports property in your \`package.json\`), which is a node standard for module resolution. This makes it more convenient to import the preview config in your story files. + The CSF factories format benefits from subpath imports (the imports property in your \`package.json\`), which is a node standard for module resolution (commonly known as alias imports). This makes it more convenient to import the preview config in your story files. However, please note that this might not work if you have an outdated tsconfig, use custom paths, or have type alias plugins configured in your project. You can always rerun this codemod and select another option to update your code later. @@ -81,7 +82,7 @@ export const csfFactories: CommandFix = { useSubPathImports = await prompt.select({ message: 'Which would you like to use?', options: [ - { label: 'Subpath imports', value: true }, + { label: 'Subpath imports (alias)', value: true }, { label: 'Relative imports', value: false }, ], }); diff --git a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts index 90245faf0dbb..1c93d3fe7e10 100644 --- a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts +++ b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.test.ts @@ -666,7 +666,7 @@ describe('stories codemod', () => { // expect(transformed).toContain('C = meta.story'); }); - it('should bail transformation if some stories are not transformed to avoid mixed CSF formats', async () => { + it('should bail transformation and warn if some stories are not transformed to avoid mixed CSF formats', async () => { const source = dedent` export default { title: 'Component', @@ -683,9 +683,24 @@ describe('stories codemod', () => { expect(transformed).not.toContain('preview.meta'); expect(transformed).not.toContain('meta.story'); - expect(logger.warn).toHaveBeenCalledWith( - 'Skipping codemod for Component.stories.tsx:\nDetected stories ["A", "B", "D"] were not fully transformed because some use an unsupported format.' - ); + expect(vi.mocked(logger.warn).mock.calls[0][0]).toMatchInlineSnapshot(` + Skipping codemod for Component.stories.tsx: + Some of the detected stories ["A", "B", "D"] would not be transformed because they are written in an unsupported format. + `); + }); + + it('should bail transformation and not warn when file is already transformed', async () => { + const source = dedent` + import preview from '#.storybook/preview'; + + const meta = preview.meta({ title: 'Component' }); + export const A = meta.story(); + `; + const transformed = await transform(source); + const formattedSource = await formatFileContent('Component.stories.tsx', source); + expect(transformed).toEqual(formattedSource); + + expect(logger.warn).not.toHaveBeenCalled(); }); }); }); diff --git a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts index 82dbe8dcd184..93ce52e94c3b 100644 --- a/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts +++ b/code/lib/cli-storybook/src/codemod/helpers/story-to-csf-factory.ts @@ -240,11 +240,15 @@ export async function storyToCsfFactory( }); // If some stories were detected but not all could be transformed, we skip the codemod to avoid mixed csf syntax and therefore a broken indexer. - if (detectedStoryNames.length > 0 && transformedStoryExports.size !== detectedStoryNames.length) { + if ( + detectedStoryNames.length > 0 && + transformedStoryExports.size > 0 && + transformedStoryExports.size !== detectedStoryNames.length + ) { logger.warn( - `Skipping codemod for ${info.path}:\nDetected stories [${detectedStoryNames + `Skipping codemod for ${info.path}:\nSome of the detected stories [${detectedStoryNames .map((name) => `"${name}"`) - .join(', ')}] were not fully transformed because some use an unsupported format.` + .join(', ')}] would not be transformed because they are written in an unsupported format.` ); return info.source; } From f0ce3feb158c2b756a25472d7a016913ff37b121 Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Mon, 22 Sep 2025 21:19:51 +0200 Subject: [PATCH 188/199] Fix built-in tags filtering --- .../components/sidebar/TagsFilter.stories.tsx | 25 +-- .../manager/components/sidebar/TagsFilter.tsx | 168 ++++++++++++----- .../sidebar/TagsFilterPanel.stories.tsx | 96 +++++++--- .../components/sidebar/TagsFilterPanel.tsx | 178 +++++++----------- 4 files changed, 266 insertions(+), 201 deletions(-) diff --git a/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx b/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx index 8bc48ded4f45..8fa7ba7139ee 100644 --- a/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilter.stories.tsx @@ -50,7 +50,7 @@ export const ClosedWithSelection: Story = { }, }; -export const Open = { +export const Clear = { ...Closed, play: async ({ canvasElement }) => { const button = await findByRole(canvasElement, 'button'); @@ -58,15 +58,15 @@ export const Open = { }, } satisfies Story; -export const OpenWithSelection = { +export const WithSelection = { ...ClosedWithSelection, - play: Open.play, + play: Clear.play, } satisfies Story; -export const OpenWithSelectionInverted = { - ...Open, +export const WithSelectionInverted = { + ...Clear, args: { - ...Open.args, + ...Clear.args, tagPresets: { A: { defaultFilterSelection: 'exclude' }, B: { defaultFilterSelection: 'exclude' }, @@ -74,10 +74,10 @@ export const OpenWithSelectionInverted = { }, } satisfies Story; -export const OpenWithSelectionMixed = { - ...Open, +export const WithSelectionMixed = { + ...Clear, args: { - ...Open.args, + ...Clear.args, tagPresets: { A: { defaultFilterSelection: 'include' }, B: { defaultFilterSelection: 'exclude' }, @@ -85,19 +85,20 @@ export const OpenWithSelectionMixed = { }, } satisfies Story; -export const OpenEmpty: Story = { +export const Empty: Story = { args: { indexJson: { v: 6, entries: {}, }, }, - play: Open.play, + play: Clear.play, }; export const EmptyProduction: Story = { args: { - ...OpenEmpty.args, + ...Empty.args, isDevelopment: false, }, + play: Clear.play, }; diff --git a/code/core/src/manager/components/sidebar/TagsFilter.tsx b/code/core/src/manager/components/sidebar/TagsFilter.tsx index 5b2bacd38ec7..16694d57f876 100644 --- a/code/core/src/manager/components/sidebar/TagsFilter.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilter.tsx @@ -1,17 +1,32 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { Badge, IconButton, WithTooltip } from 'storybook/internal/components'; -import type { StoryIndex, Tag, TagsOptions } from 'storybook/internal/types'; +import type { + API_PreparedIndexEntry, + StoryIndex, + Tag, + TagsOptions, +} from 'storybook/internal/types'; -import { FilterIcon } from '@storybook/icons'; +import { BeakerIcon, DocumentIcon, FilterIcon, PlayHollowIcon } from '@storybook/icons'; import type { API } from 'storybook/manager-api'; -import { styled } from 'storybook/theming'; +import { color, styled } from 'storybook/theming'; -import { HIDDEN_TAGS, TagsFilterPanel } from './TagsFilterPanel'; +import { type Filter, type FilterFunction, TagsFilterPanel, groupByType } from './TagsFilterPanel'; const TAGS_FILTER = 'tags-filter'; +const BUILT_IN_TAGS = new Set([ + 'dev', + 'test', + 'autodocs', + 'attached-mdx', + 'unattached-mdx', + 'play-fn', + 'test-fn', +]); + const Wrapper = styled.div({ position: 'relative', }); @@ -42,15 +57,64 @@ export interface TagsFilterProps { } export const TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }: TagsFilterProps) => { - const allTags = useMemo(() => { - return Object.values(indexJson.entries).reduce((acc, entry) => { + const filtersById = useMemo<{ [id: string]: Filter }>(() => { + const userTagsCounts = Object.values(indexJson.entries).reduce((acc, entry) => { entry.tags?.forEach((tag: Tag) => { - if (!HIDDEN_TAGS.has(tag)) { + if (!BUILT_IN_TAGS.has(tag)) { acc.set(tag, (acc.get(tag) || 0) + 1); } }); return acc; }, new Map()); + + const userFilters = Object.fromEntries( + userTagsCounts.entries().map(([tag, count]) => { + const filterFn = (entry: API_PreparedIndexEntry, excluded?: boolean) => + excluded ? !entry.tags?.includes(tag) : !!entry.tags?.includes(tag); + return [tag, { id: tag, type: 'tag', title: tag, count, filterFn }]; + }) + ); + + const withCount = (filterFn: FilterFunction) => ({ + count: Object.values(indexJson.entries).filter((entry) => filterFn(entry)).length, + filterFn, + }); + + const builtInFilters = { + _docs: { + id: '_docs', + type: 'built-in', + title: 'Documentation', + icon: , + ...withCount((entry: API_PreparedIndexEntry, excluded?: boolean) => + excluded ? entry.type !== 'docs' : entry.type === 'docs' + ), + }, + _play: { + id: '_play', + type: 'built-in', + title: 'Play', + icon: , + ...withCount((entry: API_PreparedIndexEntry, excluded?: boolean) => + excluded + ? entry.type !== 'story' || !entry.tags?.includes('play-fn') + : entry.type === 'story' && !!entry.tags?.includes('play-fn') + ), + }, + _test: { + id: '_test', + type: 'built-in', + title: 'Testing', + icon: , + ...withCount((entry: API_PreparedIndexEntry, excluded?: boolean) => + excluded + ? entry.type !== 'story' || entry.subtype !== 'test' + : entry.type === 'story' && entry.subtype === 'test' + ), + }, + }; + + return { ...userFilters, ...builtInFilters }; }, [indexJson.entries]); const { defaultIncluded, defaultExcluded } = useMemo(() => { @@ -63,64 +127,70 @@ export const TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }: TagsFi } return acc; }, - { defaultIncluded: new Set(), defaultExcluded: new Set() } + { defaultIncluded: new Set(), defaultExcluded: new Set() } ); }, [tagPresets]); - const [includedTags, setIncludedTags] = useState>(new Set(defaultIncluded)); - const [excludedTags, setExcludedTags] = useState>(new Set(defaultExcluded)); + const [includedFilters, setIncludedFilters] = useState(new Set(defaultIncluded)); + const [excludedFilters, setExcludedFilters] = useState(new Set(defaultExcluded)); const [expanded, setExpanded] = useState(false); - const tagsActive = includedTags.size > 0 || excludedTags.size > 0; + const tagsActive = includedFilters.size > 0 || excludedFilters.size > 0; - const resetTags = useCallback(() => { - setIncludedTags(new Set(defaultIncluded)); - setExcludedTags(new Set(defaultExcluded)); + const resetFilters = useCallback(() => { + setIncludedFilters(new Set(defaultIncluded)); + setExcludedFilters(new Set(defaultExcluded)); }, [defaultIncluded, defaultExcluded]); - useEffect(resetTags, [resetTags]); + useEffect(resetFilters, [resetFilters]); useEffect(() => { api.experimental_setFilter(TAGS_FILTER, (item) => { - if (!includedTags.size && !excludedTags.size) { - return true; - } + const included = Object.values( + groupByType(Array.from(includedFilters).map((id) => filtersById[id])) + ); + const excluded = Object.values( + groupByType(Array.from(excludedFilters).map((id) => filtersById[id])) + ); + return ( - (!includedTags.size || includedTags.values().some((tag) => item.tags?.includes(tag))) && - (!excludedTags.size || excludedTags.values().every((tag) => !item.tags?.includes(tag))) + (!included.length || + included.every((group) => group.some(({ filterFn }) => filterFn(item, false)))) && + (!excluded.length || + excluded.every((group) => group.every(({ filterFn }) => filterFn(item, true)))) ); }); - }, [api, includedTags, excludedTags]); + }, [api, includedFilters, excludedFilters, filtersById]); - const toggleTag = useCallback( - (tag: string, excluded?: boolean) => { - const set = new Set([tag]); + const toggleFilter = useCallback( + (id: string, selected: boolean, excluded?: boolean) => { + const set = new Set([id]); if (excluded === true) { - setExcludedTags(excludedTags.union(set)); - setIncludedTags(includedTags.difference(set)); + setExcludedFilters(excludedFilters.union(set)); + setIncludedFilters(includedFilters.difference(set)); } else if (excluded === false) { - setIncludedTags(includedTags.union(set)); - setExcludedTags(excludedTags.difference(set)); - } else if (includedTags.has(tag)) { - setIncludedTags(includedTags.difference(set)); - } else if (excludedTags.has(tag)) { - setExcludedTags(excludedTags.difference(set)); + setIncludedFilters(includedFilters.union(set)); + setExcludedFilters(excludedFilters.difference(set)); + } else if (selected) { + setIncludedFilters(includedFilters.union(set)); + setExcludedFilters(excludedFilters.difference(set)); } else { - setIncludedTags(includedTags.union(set)); + setIncludedFilters(includedFilters.difference(set)); + setExcludedFilters(excludedFilters.difference(set)); } }, - [includedTags, excludedTags] + [includedFilters, excludedFilters] ); - const setAllTags = useCallback( + const setAllFilters = useCallback( (selected: boolean) => { if (selected) { - setIncludedTags(new Set(allTags.keys())); + setIncludedFilters(new Set(Object.keys(filtersById))); } else { - setIncludedTags(new Set()); + setIncludedFilters(new Set()); } - setExcludedTags(new Set()); + setExcludedFilters(new Set()); }, - [allTags] + [filtersById] ); const handleToggleExpand = useCallback( @@ -132,7 +202,7 @@ export const TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }: TagsFi ); // Hide the entire UI if there are no tags and it's a built Storybook - if (allTags.size === 0 && !isDevelopment) { + if (Object.keys(filtersById).length === 0 && !isDevelopment) { return null; } @@ -146,16 +216,16 @@ export const TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }: TagsFi tooltip={() => ( 0 || defaultExcluded.size > 0} /> @@ -166,7 +236,7 @@ export const TagsFilter = ({ api, indexJson, isDevelopment, tagPresets }: TagsFi - {includedTags.size + excludedTags.size > 0 && } + {includedFilters.size + excludedFilters.size > 0 && }
); diff --git a/code/core/src/manager/components/sidebar/TagsFilterPanel.stories.tsx b/code/core/src/manager/components/sidebar/TagsFilterPanel.stories.tsx index fc7d7481bb64..ee4847fe22f2 100644 --- a/code/core/src/manager/components/sidebar/TagsFilterPanel.stories.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilterPanel.stories.tsx @@ -1,25 +1,72 @@ +import { BeakerIcon, DocumentIcon, PlayHollowIcon } from '@storybook/icons'; + import type { Meta, StoryObj } from '@storybook/react-vite'; import { fn } from 'storybook/test'; +import { color } from 'storybook/theming'; import { TagsFilterPanel } from './TagsFilterPanel'; +const builtInFilters = { + _docs: { + id: '_docs', + type: 'built-in', + title: 'Documentation', + icon: , + count: 8, + filterFn: fn(), + }, + _play: { + id: '_play', + type: 'built-in', + title: 'Play', + icon: , + count: 21, + filterFn: fn(), + }, + _test: { + id: '_test', + type: 'built-in', + title: 'Testing', + icon: , + count: 42, + filterFn: fn(), + }, +}; + const meta = { component: TagsFilterPanel, title: 'Sidebar/TagsFilterPanel', args: { - toggleTag: fn(), - setAllTags: fn(), - allTags: new Map([ - ['play-fn', 1], - ['test-fn', 1], - ['tag1', 1], - ['tag2', 1], - ['tag3-which-is-very-long-and-will-be-truncated-after-a-while', 1], - ]), - includedTags: new Set(), - excludedTags: new Set(), - resetTags: fn(), + toggleFilter: fn(), + setAllFilters: fn(), + filtersById: { + tag1: { + id: 'tag1', + type: 'tag', + title: 'Tag1', + count: 11, + filterFn: fn(), + }, + tag2: { + id: 'tag2', + type: 'tag', + title: 'Tag2', + count: 24, + filterFn: fn(), + }, + 'tag3-which-is-very-long-and-will-be-truncated-after-a-while': { + id: 'tag3-which-is-very-long-and-will-be-truncated-after-a-while', + type: 'tag', + title: 'Tag3', + count: 2, + filterFn: fn(), + }, + ...builtInFilters, + }, + includedFilters: new Set(), + excludedFilters: new Set(), + resetFilters: fn(), isDefaultSelection: true, hasDefaultSelection: false, api: { @@ -36,46 +83,37 @@ type Story = StoryObj; export const Basic: Story = {}; -export const Empty: Story = { - args: { - allTags: new Map(), - }, -}; - -export const BuiltInTagsOnly: Story = { +export const BuiltInOnly: Story = { args: { - allTags: new Map([ - ['play-fn', 1], - ['test-fn', 1], - ]), + filtersById: builtInFilters, }, }; -export const BuiltInTagsOnlyProduction: Story = { +export const BuiltInOnlyProduction: Story = { args: { - ...BuiltInTagsOnly.args, + ...BuiltInOnly.args, isDevelopment: false, }, }; export const Included: Story = { args: { - includedTags: new Set(['tag1', 'play-fn']), + includedFilters: new Set(['tag1', '_play']), isDefaultSelection: false, }, }; export const Excluded: Story = { args: { - excludedTags: new Set(['tag1', 'play-fn']), + excludedFilters: new Set(['tag1', '_play']), isDefaultSelection: false, }, }; export const Mixed: Story = { args: { - includedTags: new Set(['tag1', 'play-fn']), - excludedTags: new Set(['tag2', 'test-fn']), + includedFilters: new Set(['tag1', '_play']), + excludedFilters: new Set(['tag2', '_test']), isDefaultSelection: false, }, }; diff --git a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx index 3dc6789672d0..32ae8d1d2d20 100644 --- a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx @@ -9,34 +9,31 @@ import { TooltipNote, WithTooltip, } from 'storybook/internal/components'; -import type { Tag } from 'storybook/internal/types'; +import type { API_PreparedIndexEntry } from 'storybook/internal/types'; import { BatchAcceptIcon, - BeakerIcon, DeleteIcon, DocumentIcon, - PlayHollowIcon, ShareAltIcon, SweepIcon, UndoIcon, } from '@storybook/icons'; import type { API } from 'storybook/manager-api'; -import { color, styled } from 'storybook/theming'; +import { styled } from 'storybook/theming'; import type { Link } from '../../../components/components/tooltip/TooltipLinkList'; -export const HIDDEN_TAGS = new Set(['dev', 'test']); - -export const BUILT_IN_TAGS = new Set([ - ...HIDDEN_TAGS, - 'autodocs', - 'attached-mdx', - 'unattached-mdx', - 'play-fn', - 'test-fn', -]); +export const groupByType = (filters: Filter[]) => + filters.reduce( + (acc, filter) => { + acc[filter.type] = acc[filter.type] || []; + acc[filter.type].push(filter); + return acc; + }, + {} as Record + ); const Wrapper = styled.div({ minWidth: 240, @@ -85,14 +82,23 @@ const MutedText = styled.span(({ theme }) => ({ color: theme.textMutedColor, })); +export type FilterFunction = (entry: API_PreparedIndexEntry, excluded?: boolean) => boolean; +export type Filter = { + id: string; + type: string; + title: string; + count: number; + filterFn: FilterFunction; +}; + interface TagsFilterPanelProps { api: API; - allTags: Map; - includedTags: Set; - excludedTags: Set; - toggleTag: (tag: Tag, excluded?: boolean) => void; - setAllTags: (selected: boolean) => void; - resetTags: () => void; + filtersById: { [id: string]: Filter }; + includedFilters: Set; + excludedFilters: Set; + toggleFilter: (key: string, selected: boolean, excluded?: boolean) => void; + setAllFilters: (selected: boolean) => void; + resetFilters: () => void; isDevelopment: boolean; isDefaultSelection: boolean; hasDefaultSelection: boolean; @@ -100,62 +106,47 @@ interface TagsFilterPanelProps { export const TagsFilterPanel = ({ api, - allTags, - includedTags, - excludedTags, - toggleTag, - setAllTags, - resetTags, + filtersById, + includedFilters, + excludedFilters, + toggleFilter, + setAllFilters, + resetFilters, isDevelopment, isDefaultSelection, hasDefaultSelection, }: TagsFilterPanelProps) => { const ref = useRef(null); - const userEntries = Array.from(allTags.entries()) - .filter(([tag]) => !BUILT_IN_TAGS.has(tag)) - .sort((a, b) => a[0].localeCompare(b[0])) - .map(([tag, count]) => ({ - title: tag, - count, - onToggle: (excluded?: boolean) => toggleTag(tag, excluded), - isIncluded: includedTags.has(tag), - isExcluded: excludedTags.has(tag), - })); - - const docsUrl = api.getDocsUrl({ subpath: 'writing-stories/tags#filtering-by-custom-tags' }); - - const noTags = { - id: 'no-tags', - title: 'There are no tags. Use tags to organize and filter your Storybook.', - isIndented: false, - }; - - const renderTag = ({ - icon, + const renderLink = ({ + id, + type, title, + icon, count, - onToggle, - isIncluded, - isExcluded, }: { - icon?: React.ReactNode; + id: string; + type: string; title: string; + icon?: React.ReactNode; count: number; - onToggle: (excluded?: boolean) => void; - isIncluded: boolean; - isExcluded: boolean; - }) => { + }): Link => { + const onToggle = (selected: boolean, excluded?: boolean) => + toggleFilter(id, selected, excluded); + const isIncluded = includedFilters.has(id); + const isExcluded = excludedFilters.has(id); const isChecked = isIncluded || isExcluded; return { - id: `tag-${title}`, + id: `filter-${type}-${id}`, content: ( } + tooltip={ + + } trigger="hover" > {isExcluded ? : isIncluded ? null : icon} - onToggle()} data-tag={title} /> + onToggle(!isChecked)} + data-tag={title} + /> } title={ @@ -181,7 +176,7 @@ export const TagsFilterPanel = ({ tooltip={} trigger="hover" > - @@ -190,73 +185,34 @@ export const TagsFilterPanel = ({ }; }; - const groups = [ - allTags.size === 0 ? [noTags] : [], - userEntries.map(renderTag), - [ - renderTag({ - icon: , - title: 'Documentation', - count: - (allTags.get('autodocs') || 0) + - (allTags.get('attached-mdx') || 0) + - (allTags.get('unattached-mdx') || 0) || 0, - onToggle: (excluded?: boolean) => { - toggleTag('autodocs', excluded); - toggleTag('attached-mdx', excluded); - toggleTag('unattached-mdx', excluded); - }, - isIncluded: - includedTags.has('autodocs') || - includedTags.has('attached-mdx') || - includedTags.has('unattached-mdx'), - isExcluded: - excludedTags.has('autodocs') || - excludedTags.has('attached-mdx') || - excludedTags.has('unattached-mdx'), - }), - renderTag({ - icon: , - title: 'Play', - count: allTags.get('play-fn') || 0, - onToggle: (excluded?: boolean) => toggleTag('play-fn', excluded), - isIncluded: includedTags.has('play-fn'), - isExcluded: excludedTags.has('play-fn'), - }), - renderTag({ - icon: , - title: 'Testing', - count: allTags.get('test-fn') || 0, - onToggle: (excluded?: boolean) => toggleTag('test-fn', excluded), - isIncluded: includedTags.has('test-fn'), - isExcluded: excludedTags.has('test-fn'), - }), - ], - ] as Link[][]; + const groups = groupByType(Object.values(filtersById)); + const links: Link[][] = Object.values(groups).map((group) => + group.sort((a, b) => a.id.localeCompare(b.id)).map((filter) => renderLink(filter)) + ); - if (userEntries.length === 0 && isDevelopment) { - groups.push([ + if (!groups.tag?.length && isDevelopment) { + links.push([ { id: 'tags-docs', title: 'Learn how to add tags', icon: , right: , - href: docsUrl, + href: api.getDocsUrl({ subpath: 'writing-stories/tags#filtering-by-custom-tags' }), }, ]); } return ( - {allTags.size > 0 && ( + {Object.keys(filtersById).length > 0 && ( - {includedTags.size === 0 && excludedTags.size === 0 ? ( - setAllTags(true)}> + {includedFilters.size === 0 && excludedFilters.size === 0 ? ( + setAllFilters(true)}> Select all ) : ( - setAllTags(false)}> + setAllFilters(false)}> Clear filters @@ -271,7 +227,7 @@ export const TagsFilterPanel = ({ @@ -281,7 +237,7 @@ export const TagsFilterPanel = ({ )} )} - + ); }; From a1da280334731473cac4361e5b5fc7925fe0acf7 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Tue, 23 Sep 2025 10:25:42 +0200 Subject: [PATCH 189/199] add E2E tests for filter types --- .../components/sidebar/TagsFilterPanel.tsx | 37 ++++++++--- code/e2e-tests/tags.spec.ts | 64 +++++++++++++++---- code/e2e-tests/util.ts | 50 +++++++++++++++ 3 files changed, 130 insertions(+), 21 deletions(-) diff --git a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx index 32ae8d1d2d20..369480f4d250 100644 --- a/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx +++ b/code/core/src/manager/components/sidebar/TagsFilterPanel.tsx @@ -136,6 +136,8 @@ export const TagsFilterPanel = ({ const isIncluded = includedFilters.has(id); const isExcluded = excludedFilters.has(id); const isChecked = isIncluded || isExcluded; + const toggleTagLabel = `${isChecked ? 'Remove' : 'Add'} ${type} filter: ${title}`; + const invertButtonLabel = `${isExcluded ? 'Include' : 'Exclude'} ${type}: ${title}`; return { id: `filter-${type}-${id}`, content: ( @@ -144,9 +146,7 @@ export const TagsFilterPanel = ({ delayShow={1000} hasChrome={false} style={{ minWidth: 0, flex: 1 }} - tooltip={ - - } + tooltip={} trigger="hover" > } + aria-label={toggleTagLabel} title={