用途
ss-component 是 StyleSeed 体系中的一个技能,用于按照 StyleSeed 的设计约定生成一个新的 UI 组件。它面向已经配置了 StyleSeed React/Tailwind v4 组件系统的项目,帮助在既有设计令牌与组件 API 的基础上新增组件,而不是从零发明样式。
主要能力
- 执行一次性的会话更新预检(once-per-session update preflight)。
- 处理注册表优先(registry-first)的产物边界:当 .styleseed/project.json 或 .styleseed/artifacts/index.json 存在时,要求完整有效的注册表,并在写组件前解析请求的 artifact ID;若范围不明确则先询问。
- 通过 ss-resolve 技能目录中的 resolve-context.mjs 脚本进行只读检查,并在编译输出缺失或过期时重新生成后再检查。
- 读取编译后的方法与来源信息(.styleseed/bundles/<artifact-id>.md 与 .styleseed/manifests/<artifact-id>.json)。
- 对旧版项目,在注册表文件均不存在时使用 --from-lock STYLESEED.md 路径,并读取 .styleseed/effective-rules.md 与 .styleseed/manifest.json。
- 读取实际实现上下文:从 artifact 的 implementation.sourceRoots 与 implementation.tokenFiles 出发,沿样式表导入找到令牌定义与配方辅助函数,并参考附近已有原语(如按钮)的真实导入、props、变体与状态。
- 在已有组件已满足需求时复用现有组件。
- 严格遵循项目约定生成组件代码。
使用方式
先应用注册表/旧版边界,再读取实际实现上下文。注册表 artifact 从 implementation.sourceRoots 与 implementation.tokenFiles 开始;旧版项目从项目源码中发现已有的组件与样式表入口。沿活动样式表导入找到该 artifact 使用的令牌定义与配方辅助函数(css/theme.css 与 css/recipes.css 只是示例,并非必需位置)。阅读附近已有原语及其真实导入、props、变体和状态。保留项目已批准的令牌与组件 API;若缺少必要上下文或不受支持,应在发明文件、别名、令牌或替代物之前报告缺口。
注册表检查命令(只读):
node "<ss-resolve>/scripts/resolve-context.mjs" --project-root . --artifact <artifact-id> --agent <agent> --check
对于有效注册表但编译输出缺失或过期的情况,运行同一命令但不带 --check,然后再次检查。遇到无效配置或安装错误时停止;不要为了让检查通过而更改已批准的选择。成功后,只读取选定的 .styleseed/bundles/<artifact-id>.md 与 .styleseed/manifests/<artifact-id>.json 作为编译方法与来源。影响多个 artifact 的共享组件需要分别解析并检查每个受影响的 artifact,而不是合并它们的 bundle。
旧版项目路径(仅当两个注册表文件都不存在时):
node "<ss-resolve>/scripts/resolve-context.mjs" --project-root . --from-lock STYLESEED.md --agent <agent> --check
对于缺失或过期的旧版输出,运行同一命令但不带 --check,然后再次检查。仅在成功后读取 .styleseed/effective-rules.md 与 .styleseed/manifest.json。
生成组件时遵循的约定:
- 使用函数声明(不是 const)
- 添加 data-slot="component-name" 属性
- 使用项目已有的 cn() 工具及其已验证的导入路径进行 className 合并
- 使用 React.ComponentProps<> 进行 prop 类型标注
- 始终支持 className prop 以便覆盖
- 若组件有变体,使用 CVA(class-variance-authority)
- 使用语义化颜色令牌(bg-card、text-foreground),绝不使用内联十六进制
设计令牌用法:
- 颜色:text-foreground、bg-card、text-brand、text-muted-foreground、border-border
- 图案表面:ss-pattern-surface;内嵌/控件/图标使用匹配的 ss-* 类
- 原语使用项目令牌尺度;不要硬编码某一种圆角或阴影个性
- 间距遵循一个可重复的选定配方节奏
- 动效:duration-[var(--duration-fast)]、ease-[var(--ease-default)]
排版规则:
- Display(36-48px):leading-none tracking-[-0.02em]
- Heading(18-24px):leading-snug tracking-[-0.01em]
- Body(14-17px):leading-normal(默认字距)
- Caption 大写(10-13px):tracking-[0.05em]
- 使用 size-* 简写代替 w-* h-*
- 使用 ms-/me- 代替 ml-/mr-(逻辑属性)
无障碍要求:
- 触摸命中区域:最小 44x44px(min-h-11 min-w-11);以指针为主的桌面控件可使用契约批准的 36–40px 尺寸,同时保留键盘访问与适用的无障碍下限
- 支持 aria-* 属性透传
- 使用 focus-visible:ring-2 focus-visible:ring-ring 实现键盘焦点
- 动画尊重 prefers-reduced-motion
- 将组件作为命名导出(不是默认导出)
- 将文件放在第 1 步确定的现有组件目录中,位于受影响 artifact 的实现范围内。src/components/ui/ 是常见布局,并非每个项目都要创建的路径。组合式模式请路由到 /ss-pattern。
适用场景
- 在已配置 StyleSeed React/Tailwind v4 组件系统的项目中新增单个 UI 组件。
- 需要遵循项目既有设计令牌、组件 API 与无障碍约定的组件生成。
限制
以下情况不应使用本技能:
- 整页脚手架 → 使用 /ss-page
- 组合式多组件模式 → 使用 /ss-pattern
- 调整已有组件 —— 直接编辑文件即可
- 未配置 StyleSeed React/Tailwind v4 组件系统的项目
其他限制:注册表不完整、无效或没有编译输出时,绝不回退到全局旧版 bundle、创建 STYLESEED.md 或重启设置;遇到无效配置或安装错误时停止,不得更改已批准的选择以通过检查。若缺少必要上下文或不受支持,应先报告缺口,而不是发明文件、别名、令牌或替代物。