用途:把一个 Figma COMPONENT_SET(包含同一组件全部变体的紫色虚线容器)转成代码生成蓝图,说明哪些属性轴属于状态、哪些属于尺寸,每个状态如何映射到 CSS 伪类或 ARIA 属性,以及每个状态相对默认变体的最小视觉差异。解决“Figma 有 12 个按钮变体”到“输出一条 .btn 规则加 :hover/:disabled 覆盖”之间的转换。
主要能力:通过 scripts/analyze-component-set.js 返回 variantAxes(轴及选项)、componentProps(非变体 TEXT/BOOLEAN/INSTANCE_SWAP 属性到代码 props)、stateMachine(含 cssMapping 状态名到 CSS 选择器及 defaultSignature)、以及每个变体的 diffFromDefault。状态映射规则为:default 用基础规则无选择器;hover→:hover;focus/focused/focus-visible→:focus-visible;active/pressed→:active;disabled→:disabled, [aria-disabled="true"];error/invalid→[aria-invalid="true"];selected→[aria-selected="true"];checked→:checked;loading→[aria-busy="true"];filled→.has-value。
使用方式:先加载官方 figma-use 技能(完整 Figma 插件 API 参考)。规则包括用普通 JS 加顶层 await 和 return,不用 IIFE,不调用 figma.closePlugin(),console.log 不返回;输入以 const 内联在脚本顶部;颜色为 0–1 范围;文本操作前加载字体;用 await figma.getNodeByIdAsync(...);脚本错误为原子性,失败不应用任何改动,读错误、修复、重试。取得 COMPONENT_SET id(来自 figma_get_selection、搜索或粘贴的节点 id,必须是 set 而非单个变体,脚本会校验类型),在脚本顶部设置 const COMPONENT_SET_ID,通过 use_figma 运行并把 skillNames 设为 "figma-analyze-component-set",然后读取并生成代码,最后校验。
适用场景:设计系统的代码生成,把变体状态机转成 CSS/框架 props;这是原生 MCP 的 get_design_context/get_metadata 不具备的能力(它们只返回原始结构)。
限制:深度递归树、reactions、实例引用应改用 figma-deep-component;重排变体为网格用 figma-arrange-component-set;增删属性用 figma-component-properties。差异是相对默认变体计算的,只列出变化的属性(填充 token、描边、文字颜色、透明度、效果、子层可见性),生成时应只写这些覆盖项。脚本在可用时把 boundVariables 解析为 token 名,否则回退原始 hex,代码中优先使用 token 名。轴检测为启发式:名为 state/status/interaction 的轴视为状态轴,size/scale 视为尺寸轴;命名不同时 cssMapping 可能为空,需自行读取 variantAxes 映射状态。componentProps 到框架 props 的映射为 BOOLEAN→boolean,TEXT→string,INSTANCE_SWAP→ReactNode/slot,VARIANT→union。需交叉检查每个 stateMachine.states 中的状态都有 CSS 规则,并确认差异中的 token 名(如 Color/Brand/Primary)能解析到导出的 token。