mcpField
S
sb-wrappers

sb-wrappers

github.com/strongeron设计与 UI3978 次安装4 周前更新
代码仓库

关于 sb-wrappers

sb-wrappers 是用于搭建带类型的 Storybook 组合包装器的技能,避免手工编写布局。它帮助开发者根据组件状态、对比、流程、设计系统视图和应用地图选择包装器,并说明所需数据与组合方式。

主要功能

  1. 01按任务和输入数据选择包装器
  2. 02搭建带类型的组合包装器
  3. 03用矩阵展示组件状态
  4. 04叠加真实使用次数
  5. 05组合对比、流程和地图

适用场景

  1. 01集中查看组件的多种状态
  2. 02对比不同设计方案
  3. 03可视化应用流程或用户旅程
  4. 04检查设计令牌和图标覆盖情况

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/strongeron/storybook-workbench --skill sb-wrappers

安装后在 Claude Code 中输入/sb-wrappers确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

CONTEXT.md
agents/
openai.yaml
decorators/
withLayoutFrame.tsx
references/
composition-patterns.md
wrapper-library.md
scripts/
scaffold-wrapper.sh
wrappers/
ABCanvas.tsx
AppFlowGraph.tsx
ComponentContext.tsx
ComponentUsage.tsx
DecisionsDashboard.tsx
DesignSystemHealth.tsx
FigmaInventory.tsx
IconMatrix.tsx
icons.tsx
index.ts
JourneyGraph.tsx
MotionStage.tsx
ProjectInventory.tsx
R3FCanvas.tsx
ReportIntro.tsx
resolve-paint.ts
ShaderCanvas.tsx
StateGrid.tsx
StateMatrix.tsx
StorySet.tsx
StoryStrip.tsx
swatches.tsx
TokenMatrix.tsx
TokensCanvas.tsx

详细介绍

sb-wrappers — 组合原语,而不是手写网格

不要手写网格标记。搭建一个类型化包装器。

只加载任务所需的内容(这两份参考文档都很长;单个包装器不要两份都加载):

  • references/wrapper-library.md — 每个包装器的 API。编写任何包装器故事之前,先加载它,了解所选包装器的 props/args。
  • references/composition-patterns.md — 五种组合模式(A/B、角色、状态网格、页面、动效)。仅在构建 Compare/多模式/分层内容时加载。 对于单个 StateGrid/ProjectInventory/DesignSystemHealth 搭建,不要加载它——仅靠包装器库参考文档就足够了。

根据意图选择包装器

用户表述包装器层级
“比较两个设计”/“并排展示”ABCanvas1
“在同一个画布上展示所有状态”StateGrid1
“所有角色”/“权限 UI”StateGrid,将 role 作为变化的 prop(仅当应用按角色控制访问时)1
“跟踪此决策”TrackedDecision + DecisionsDashboard2
“完整流程”/“有序序列”StoryStrip/StorySet2
“着色器/WebGL/3D/关键帧动效”ShaderCanvas/R3FCanvas/MotionStage3
“令牌的唯一真实来源”/“DS 健康状况”/“清单”TokensCanvas/DesignSystemHealth/ProjectInventory4
“图标覆盖情况”/“哪些图标/什么尺寸/图标在哪里使用”IconMatrix4
“整个应用的路由图”/“用户旅程图”AppFlowGraph/JourneyGraph流程

在流程中的哪个位置(哪个封装器,哪个步骤)

封装器按数据来源划分。数据封装器会渲染上一步的 JSON——请在该步骤运行后再生成并使用,否则渲染结果为空。编写故事时则使用组件/故事封装器。输入数据准备就绪后,将对应的封装器作为下一步建议。

使用场景封装器所需内容(先运行)
在 sb-inventory 之后ProjectInventory、TokenMatrix(Colors foundation — value · mapping · adoption;省略 health prop).storybook/project-inventory.json
在 sb-inventory 之后(使用情况图)ComponentUsage、UsageExplorer.storybook/component-pages.json(build-component-pages.py / refresh-usage.sh)
在 sb-health 之后DesignSystemHealth.storybook/design-system-health.json(TokensCanvas 会自动发现——无需步骤)
在 sb-flows 之后AppFlowGraph、JourneyGraph.storybook/flows.json
构建 Foundations/IconsIconMatrix无——实时扫描 /src;传入 library + resolve
编写组件故事(sb-stories)StateGrid(所有状态)、StateMatrix(变体 × 状态)组件
组合现有故事StorySet(按标签/ID)、StoryStrip(有序)已编写的故事
迭代(比较 / 决策)ABCanvas、TrackedDecision + DecisionsDashboard—

在对应步骤生成 JSON 之前,不要生成数据封装器——scaffold-wrapper.sh 会打印每个封装器对应的生成脚本,以作提醒。

状态分散在多个故事中 → 整合到一个矩阵中。 当组件的状态分散在不同故事中(每种状态一个故事——难以浏览,也容易出现偏差),将它们合并到一个 StateGrid(所有状态)或 StateMatrix(变体 × 状态)中,以便在同一个画布上检查所有状态。这是解决“Detection 标题/列表状态分散——生成简洁的状态视图”这一问题的标准方法。

真实使用情况叠加层。 StateGrid / StateMatrix 可接收可选的 usage prop—— usage={usageJson.components.<Name>}(来自 .storybook/component-usage.json)会为每个变体/状态标注真实调用点数量,并划掉已声明但未使用的项(×0 unused)。将其添加为组件现有 CSF 中的扁平故事,切勿新建文件(新文件会创建新的侧边栏文件夹)。 对于颜色/字体,使用 TokenUsageGrid(读取 project-inventory.json 的 tokens.map);对于组件级表格,UsageSection 通过 preview.ts 的 docs.page 嵌入到每个 Docs 页面中——参见 sb-inventory。

生成封装器

CORE=${CLAUDE_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}   # scaffold-wrapper is shared core
# scaffold-wrapper.sh is a LOCAL bash script that ships INSIDE this skill — it only copies the bundled
# .tsx wrappers into the project's .storybook/. No network, no install, no external code. See SECURITY.md.
"$CORE/scripts/scaffold-wrapper.sh" --tier 1            # CORE
# --tier 2 | 3 | 4 (adds DESIGN-SYSTEM) | --flow (AppFlowGraph+JourneyGraph) | --all
"$CORE/scripts/scaffold-wrapper.sh" ABCanvas StateGrid  # or specific names

icons.tsx 始终会一并复制(共享图标语言),并会生成一个入口文件 index.ts。封装器可以嵌套:TrackedDecision → ABCanvas → ShaderCanvas → Hero。

视图设计

所有封装器都遵循 CONTEXT.md §wrapper-view-design——不使用 emoji,使用共享的 Icon 集合,并在地图封装器上提供可注入的 icons prop。添加或编辑封装器时,请遵守这一约定。

下一步

组合 Compare/Flow 故事,然后运行 sb-stories 门禁(validate-stories.sh)。

评论

支持 Markdown