用途:为单个 React 组件编写 CS3 故事,只覆盖有实质差异的状态,不生成笛卡尔组合;当 3 个以上故事共享同一数据形状时,使用工厂。
主要能力与流程:编写前先核对 .storybook/project-inventory.json 中 components.real[],若在 dead[] 应移除组件而非写故事;状态清单优先读 .storybook/component-states.json,缺失则运行 scripts/extract-states.sh 生成;实际使用状态读 .storybook/component-usage.json(由 sb-inventory 的 extract-component-usage.sh 生成)。需要合并展示时使用来自 sb-wrappers 的 StateGrid(variants × states → StateMatrix)。若 3 个以上故事共享数据形状,先读 .storybook/prop-shapes.json(缺失则运行 scripts/extract-prop-shapes.sh),再执行 scripts/scaffold-factory.sh <Type> <import-path>。
使用方式:先判断是否存在 MCP 支持:grep -q '@storybook/addon-mcp' package.json && test -f .mcp.json && echo WITH_MCP || echo WITHOUT_MCP;有 MCP 读 references/with-mcp.md,无 MCP 读 references/without-mcp.md。受控组件(Switch/Toggle/Checkbox/Tabs/Accordion/Select)从 templates/controlled-component-story.tsx 起步。故事保存位置需先询问用户,读 .storybook/audit/status.md 的 storiesLocation;未设置则停止并询问,推荐 .storybook/stories/(孤立目录)。完成后运行 "$CORE/scripts/validate-stories.sh" path/to/Foo.stories.tsx,FAIL 需修复;也可用 "$SKILL/scripts/check-story-ready.sh"。
页面场景:页面位于 pages/ · app/ · routes/ · views/ 时不要重写,先运行 scripts/page-patterns.py <root>;importable 为 true 时导入真实页面并只 mock 数据层,用 scripts/scaffold-page-story.py 脚手架,每个有差异的数据状态写一个故事;importable 为 false 时回退到 Page Composition。共享区块(sharedSections[])单独建 Components/* 故事。
限制:不手工编写每组件文档,autodocs 的“Real usage”区块由 UsageSection 统一生成,新增故事后只需运行 refresh-usage.sh;Overlay 组件需设置 parameters 的 layout: 'fullscreen' 与 docs.story inline: false 以避免 Portal 覆盖文档;孤立目录下新增、移动或删除故事后需重启 Storybook 才会生效;play 函数只用于交互、异步数据、Portal、CSS 驱动状态或可访问性,且项目需恰好一个 CssCheck;Controls 面板须为每个枚举/联合 prop 声明 argTypes。具体价格、收费与更多细节资料未提供。