@qw-ui/tokens 0.3.0-next.7 → 0.3.0-next.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["round4","NS"],"sources":["../src/seed/index.json","../src/color-architecture.ts","../src/seed/index.ts","../src/schema.ts","../src/color.ts","../src/derive/oklch.ts","../src/derive/naming.ts","../src/derive/reference.ts","../src/derive/semantic.ts","../src/derive/index.ts","../src/derive/live-css.ts","../src/figma/color-snapshot.ts","../src/figma/color-contract.ts"],"sourcesContent":["","export const FIGMA_COLOR_COLLECTION = \"Color\";\nexport const FIGMA_COLOR_PREFIX = \"qw\";\n\nexport const T1_COLOR_KEYS = [\n \"brand\",\n \"black\",\n \"white\",\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"cyan\",\n \"blue\",\n \"purple\",\n \"brown\",\n] as const;\n\nexport type T1ColorKey = (typeof T1_COLOR_KEYS)[number];\n\nexport const FIGMA_T1_SEED_HEX: Record<T1ColorKey, string> = {\n brand: \"#0011FF\",\n black: \"#222222\",\n white: \"#FFFFFF\",\n gray: \"#999999\",\n red: \"#FF4040\",\n orange: \"#FF6B3F\",\n yellow: \"#FFD575\",\n green: \"#1F993F\",\n cyan: \"#29BECC\",\n blue: \"#0D53FF\",\n purple: \"#432CDB\",\n brown: \"#B45E06\",\n};\n\nexport const T2_ALPHA_STEPS = [5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100] as const;\nexport const T2_ALPHA_KEYS = T2_ALPHA_STEPS.map((step) => `a${step}`) as [\n \"a5\",\n \"a10\",\n \"a20\",\n \"a30\",\n \"a40\",\n \"a50\",\n \"a60\",\n \"a70\",\n \"a80\",\n \"a90\",\n \"a100\",\n];\n\nexport type T2AlphaStep = (typeof T2_ALPHA_STEPS)[number];\nexport type T2AlphaKey = (typeof T2_ALPHA_KEYS)[number];\n\nexport const T2_OKLCH_STEPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const;\nexport type T2OklchStep = (typeof T2_OKLCH_STEPS)[number];\n\n/**\n * T2 步进锚定 Alpha:锚定 OKLCH 档位实色 + 固定 alpha 的设计校准 rgba\n * (`{seed}/{step}-a{alpha}`,如 `brand/500-a20`)。只声明被 T3 角色消费的条目,\n * 不作为完整刻度生成。\n */\nexport const FIGMA_T2_STEP_ALPHA: ReadonlyArray<{\n seed: T1ColorKey;\n step: T2OklchStep;\n alpha: T2AlphaStep;\n}> = [\n { seed: \"brand\", step: 500, alpha: 20 },\n { seed: \"blue\", step: 600, alpha: 20 },\n { seed: \"blue\", step: 600, alpha: 40 },\n { seed: \"red\", step: 400, alpha: 10 },\n { seed: \"red\", step: 400, alpha: 20 },\n];\n\n/** T2 `pure` 步进(标准常量 #000000,OLED 画布用)仅提供给 black。 */\nexport const T2_PURE_STEP = \"pure\";\nexport const T2_PURE_SEEDS = [\"black\"] as const;\n\nexport const FIGMA_T2_SOLID_SCALE: Record<T1ColorKey, Record<T2OklchStep, string>> = {\n brand: {\n 50: \"#F2F6FF\",\n 100: \"#E6ECFF\",\n 200: \"#C4D8FF\",\n 300: \"#9DBDFF\",\n 400: \"#6C9AFF\",\n 500: \"#426EFF\",\n 600: \"#1B57FF\",\n 700: \"#002CE8\",\n 800: \"#001A99\",\n 900: \"#000540\",\n },\n black: {\n 50: \"#F6F6F6\",\n 100: \"#EBEBEB\",\n 200: \"#D7D7D7\",\n 300: \"#BEBEBE\",\n 400: \"#9E9E9E\",\n 500: \"#868686\",\n 600: \"#6F6F6F\",\n 700: \"#555555\",\n 800: \"#353535\",\n 900: \"#121212\",\n },\n white: {\n 50: \"#F6F6F6\",\n 100: \"#EBEBEB\",\n 200: \"#D7D7D7\",\n 300: \"#BEBEBE\",\n 400: \"#9E9E9E\",\n 500: \"#868686\",\n 600: \"#6F6F6F\",\n 700: \"#555555\",\n 800: \"#353535\",\n 900: \"#121212\",\n },\n gray: {\n 50: \"#F6F6F6\",\n 100: \"#EEEEEE\",\n 200: \"#E0E0E0\",\n 300: \"#CCCCCC\",\n 400: \"#A2A9B6\",\n 500: \"#888E99\",\n 600: \"#666666\",\n 700: \"#3A3A3A\",\n 800: \"#2D2D2D\",\n 900: \"#202020\",\n },\n red: {\n 50: \"#FFF3F1\",\n 100: \"#FFE7E4\",\n 200: \"#FFC8C2\",\n 300: \"#FFA097\",\n 400: \"#FF5745\",\n 500: \"#FF4D4D\",\n 600: \"#CF081E\",\n 700: \"#A30013\",\n 800: \"#6A0009\",\n 900: \"#2A0001\",\n },\n orange: {\n 50: \"#FFF3EF\",\n 100: \"#FFE5DD\",\n 200: \"#FFC9B9\",\n 300: \"#FFA287\",\n 400: \"#F76F47\",\n 500: \"#FF764D\",\n 600: \"#C03800\",\n 700: \"#962A00\",\n 800: \"#611800\",\n 900: \"#260500\",\n },\n yellow: {\n 50: \"#FFF5DF\",\n 100: \"#FFE9B9\",\n 200: \"#F4D38B\",\n 300: \"#DCB96B\",\n 400: \"#BE9940\",\n 500: \"#A78013\",\n 600: \"#8B6900\",\n 700: \"#6C5100\",\n 800: \"#453200\",\n 900: \"#191000\",\n },\n green: {\n 50: \"#E2FFE4\",\n 100: \"#BCFFC3\",\n 200: \"#9BEFA5\",\n 300: \"#7BD688\",\n 400: \"#52B764\",\n 500: \"#2C9F47\",\n 600: \"#068631\",\n 700: \"#006823\",\n 800: \"#004213\",\n 900: \"#001704\",\n },\n cyan: {\n 50: \"#E0FCFF\",\n 100: \"#BAF8FF\",\n 200: \"#91EAF2\",\n 300: \"#65D0DC\",\n 400: \"#2FB2BE\",\n 500: \"#0098A4\",\n 600: \"#007E88\",\n 700: \"#006169\",\n 800: \"#003D43\",\n 900: \"#001518\",\n },\n blue: {\n 50: \"#EBF5FF\",\n 100: \"#E7F1FF\",\n 200: \"#D6EBFF\",\n 300: \"#9CBEFF\",\n 400: \"#3086FF\",\n 500: \"#1677FF\",\n 600: \"#266FFF\",\n 700: \"#003DB8\",\n 800: \"#001D66\",\n 900: \"#000A3A\",\n },\n purple: {\n 50: \"#F3F5FF\",\n 100: \"#E6EAFF\",\n 200: \"#CDD5FF\",\n 300: \"#A699FF\",\n 400: \"#8692FF\",\n 500: \"#6B71FF\",\n 600: \"#5550F2\",\n 700: \"#4135C9\",\n 800: \"#280B96\",\n 900: \"#0C0041\",\n },\n brown: {\n 50: \"#FFF3EC\",\n 100: \"#FFE6D5\",\n 200: \"#FFCBA8\",\n 300: \"#F8A971\",\n 400: \"#DA8749\",\n 500: \"#C36D24\",\n 600: \"#A75600\",\n 700: \"#824100\",\n 800: \"#542800\",\n 900: \"#200B00\",\n },\n};\n\n/**\n * Figma「Color Token System」T3 语义角色表(60 个,light/dark 均引用 T2 路径)。\n * 与 Figma 节点 22258:49986 逐条对齐;`effect.shadow.*.color` 为复合阴影的颜色\n * 分量(对应 Figma 变量 `--qw-sem-effect-shadow-*-color`)。\n */\nexport const FIGMA_T3_COLOR_ROLES = {\n \"surface.base\": { light: \"color.white.base\", dark: \"color.black.base\" },\n \"surface.subtle\": { light: \"color.gray.50\", dark: \"color.gray.900\" },\n \"surface.elevated\": { light: \"color.white.base\", dark: \"color.gray.800\" },\n \"surface.header\": { light: \"color.gray.100\", dark: \"color.gray.700\" },\n \"surface.brand-subtle\": { light: \"color.blue.50\", dark: \"color.blue.800\" },\n \"surface.canvas\": { light: \"color.white.base\", dark: \"color.black.pure\" },\n \"surface.sunken\": { light: \"color.gray.100\", dark: \"color.gray.800\" },\n \"surface.selected\": { light: \"color.black.a5\", dark: \"color.white.a10\" },\n \"surface.inverse\": { light: \"color.black.800\", dark: \"color.black.800\" },\n \"surface.canvas-subtle\": { light: \"color.gray.50\", dark: \"color.black.pure\" },\n\n \"content.primary\": { light: \"color.black.base\", dark: \"color.white.base\" },\n \"content.secondary\": { light: \"color.gray.600\", dark: \"color.gray.base\" },\n \"content.tertiary\": { light: \"color.gray.base\", dark: \"color.gray.600\" },\n \"content.placeholder\": { light: \"color.gray.300\", dark: \"color.white.a30\" },\n \"content.intro\": { light: \"color.gray.400\", dark: \"color.gray.500\" },\n \"content.disabled\": { light: \"color.black.a30\", dark: \"color.white.a30\" },\n \"content.link\": { light: \"color.blue.700\", dark: \"color.blue.400\" },\n \"content.icon-subtle\": { light: \"color.black.a5\", dark: \"color.white.a10\" },\n \"content.inverse\": { light: \"color.white.base\", dark: \"color.black.base\" },\n \"content.on-solid\": { light: \"color.white.base\", dark: \"color.white.base\" },\n \"content.on-warning-subtle\": { light: \"color.yellow.800\", dark: \"color.yellow.200\" },\n\n \"border.default\": { light: \"color.gray.100\", dark: \"color.gray.700\" },\n \"border.strong\": { light: \"color.gray.300\", dark: \"color.gray.600\" },\n \"border.focus\": { light: \"color.brand.base\", dark: \"color.brand.500\" },\n \"border.subtle\": { light: \"color.black.a5\", dark: \"color.white.a5\" },\n \"border.disabled\": { light: \"color.black.a10\", dark: \"color.white.a10\" },\n \"border.on-media\": { light: \"color.white.base\", dark: \"color.white.base\" },\n\n \"fill.subtle\": { light: \"color.gray.50\", dark: \"color.white.a20\" },\n \"fill.hover\": { light: \"color.gray.100\", dark: \"color.gray.800\" },\n \"fill.active\": { light: \"color.blue.50\", dark: \"color.blue.800\" },\n \"fill.disabled\": { light: \"color.gray.50\", dark: \"color.gray.900\" },\n \"fill.track\": { light: \"color.black.a10\", dark: \"color.white.a20\" },\n\n \"action.brand\": { light: \"color.brand.base\", dark: \"color.brand.500\" },\n \"action.product\": { light: \"color.blue.base\", dark: \"color.blue.600\" },\n \"action.selected\": { light: \"color.blue.a20\", dark: \"color.blue.600-a40\" },\n \"action.inverse\": { light: \"color.white.base\", dark: \"color.black.base\" },\n\n \"control-action.brand.subtle\": { light: \"color.brand.a10\", dark: \"color.brand.500-a20\" },\n \"control-action.product.subtle\": { light: \"color.blue.a10\", dark: \"color.blue.600-a20\" },\n \"control-action.danger.default\": { light: \"color.red.400\", dark: \"color.red.400\" },\n \"control-action.danger.subtle\": { light: \"color.red.400-a10\", dark: \"color.red.400-a20\" },\n \"control-action.neutral.subtle\": { light: \"color.black.a5\", dark: \"color.white.a10\" },\n \"control-selection.brand\": { light: \"color.brand.a10\", dark: \"color.brand.500-a20\" },\n \"control-selection.product\": { light: \"color.blue.a10\", dark: \"color.blue.600-a20\" },\n \"selection.text-background\": { light: \"color.blue.a20\", dark: \"color.blue.600-a40\" },\n\n \"status.success\": { light: \"color.green.base\", dark: \"color.green.base\" },\n \"status.warning\": { light: \"color.yellow.base\", dark: \"color.yellow.base\" },\n \"status.danger\": { light: \"color.red.400\", dark: \"color.red.400\" },\n \"status.info\": { light: \"color.blue.base\", dark: \"color.blue.600\" },\n \"status.success-subtle\": { light: \"color.green.a10\", dark: \"color.green.a20\" },\n \"status.warning-subtle\": { light: \"color.yellow.a20\", dark: \"color.yellow.a20\" },\n \"status.danger-subtle\": { light: \"color.red.400-a10\", dark: \"color.red.400-a20\" },\n \"status.info-subtle\": { light: \"color.blue.a10\", dark: \"color.blue.600-a20\" },\n\n \"overlay.scrim\": { light: \"color.black.a50\", dark: \"color.black.a70\" },\n \"overlay.guide\": { light: \"color.blue.a10\", dark: \"color.blue.600-a20\" },\n \"overlay.media-subtle\": { light: \"color.black.a40\", dark: \"color.black.a40\" },\n \"overlay.media-strong\": { light: \"color.black.a50\", dark: \"color.black.a50\" },\n\n shadow: { light: \"color.black.a10\", dark: \"color.black.a50\" },\n \"effect.shadow.card.color\": { light: \"color.black.a10\", dark: \"color.black.a50\" },\n \"effect.shadow.floating.color\": { light: \"color.black.a10\", dark: \"color.black.a50\" },\n \"effect.shadow.dialog.color\": { light: \"color.black.a10\", dark: \"color.black.a50\" },\n} as const;\n","import raw from \"./index.json\" with { type: \"json\" };\nimport { T1_COLOR_KEYS } from \"../color-architecture.js\";\nimport type { Seed } from \"../schema.js\";\nimport type { SeedColorValue } from \"../color.js\";\n\n/**\n * 把设计交付的 DTCG seed (嵌套 $value,五大类目) 拍平成 derive() 可消费的\n * Seed 形状。DTCG 是设计/Figma 的事实来源;这里是工程读取它的唯一入口。\n * 数值与 packages/tokens/design/seed.tokens.json 逐条一致(parity 测试保证不漂移)。\n */\nconst s = raw.qw.seed;\n\ntype Dimension = { value: number; unit: string };\nconst px = (d: Dimension) => `${d.value}${d.unit}`;\nconst color = (v: unknown) => v as SeedColorValue;\n\nexport const defaultSeed: Seed = {\n color: Object.fromEntries(T1_COLOR_KEYS.map((key) => [key, color(s.color[key].$value)])) as Seed[\"color\"],\n size: {\n spacing: {\n step: px(s.size.spacing.step.$value),\n },\n borderWidth: {\n hairline: px(s.size.borderWidth.hairline.$value),\n },\n radius: {\n base: px(s.size.radius.base.$value),\n full: px(s.size.radius.full.$value),\n },\n controlSize: {\n base: px(s.size.controlSize.base.$value),\n },\n iconSize: {\n base: px(s.size.iconSize.base.$value),\n },\n opacity: {\n disabled: s.size.opacity.disabled.$value,\n alphaStep: s.size.opacity.alphaStep.$value,\n },\n zIndex: {\n step: s.size.zIndex.step.$value,\n },\n },\n typography: {\n fontFamily: {\n text: s.typography.fontFamily.text.$value,\n number: s.typography.fontFamily.number.$value,\n code: s.typography.fontFamily.code.$value,\n textMacLatin: s.typography.fontFamily.textMacLatin.$value,\n textMacZh: s.typography.fontFamily.textMacZh.$value,\n textMacJa: s.typography.fontFamily.textMacJa.$value,\n textWindowsLatin: s.typography.fontFamily.textWindowsLatin.$value,\n textWindowsZh: s.typography.fontFamily.textWindowsZh.$value,\n textWindowsJa: s.typography.fontFamily.textWindowsJa.$value,\n },\n fontWeight: {\n regular: s.typography.fontWeight.regular.$value,\n medium: s.typography.fontWeight.medium.$value,\n semibold: s.typography.fontWeight.semibold.$value,\n },\n fontSize: {\n base: px(s.typography.fontSize.base.$value),\n },\n lineHeight: {\n base: s.typography.lineHeight.base.$value,\n },\n letterSpacing: {\n base: px(s.typography.letterSpacing.base.$value),\n },\n },\n motion: {\n duration: {\n base: px(s.motion.duration.base.$value),\n },\n easing: {\n standard: s.motion.easing.standard.$value as [number, number, number, number],\n },\n },\n effect: {\n shadow: {\n base: {\n color: color(s.effect.shadow.base.$value.color),\n offsetX: px(s.effect.shadow.base.$value.offsetX),\n offsetY: px(s.effect.shadow.base.$value.offsetY),\n blur: px(s.effect.shadow.base.$value.blur),\n spread: px(s.effect.shadow.base.$value.spread),\n },\n },\n },\n};\n","import { z } from \"zod\";\nimport { T1_COLOR_KEYS } from \"./color-architecture.js\";\n\n/**\n * seedColor — DTCG Color module 结构化颜色(不再接受十六进制字符串)。\n * - srgb:components 各分量 0–1(写 0–255 会被拒绝,这是常见错误)。\n * - oklch:l 0–1、c ≥0、h 为角度;用于\"设计师直接以感知空间拍板\"的输入。\n */\nconst seedColor = z\n .object({\n colorSpace: z.enum([\"srgb\", \"oklch\"]),\n components: z.tuple([z.number(), z.number(), z.number()]),\n alpha: z.number().min(0).max(1),\n })\n .superRefine((c, ctx) => {\n if (c.colorSpace === \"srgb\") {\n if (c.components.some((v) => v < 0 || v > 1)) {\n ctx.addIssue({\n code: \"custom\",\n message: \"srgb components 必须是 0–1(不是 0–255),例如 #0011ff → [0, 0.0667, 1]\",\n });\n }\n } else {\n const [l, chroma] = c.components;\n if (l < 0 || l > 1 || chroma < 0) {\n ctx.addIssue({ code: \"custom\", message: \"oklch 要求 l ∈ [0,1] 且 c ≥ 0\" });\n }\n }\n });\n\nconst cubicBezier = z.tuple([z.number(), z.number(), z.number(), z.number()]);\n\nconst fontStack = z.array(z.string()).min(1);\nconst colorSeedShape = Object.fromEntries(T1_COLOR_KEYS.map((key) => [key, seedColor])) as Record<\n (typeof T1_COLOR_KEYS)[number],\n typeof seedColor\n>;\n\n/**\n * SeedSchema — T1 Seed 与兼容输入的运行时校验(RFC 0001 §2.1,v4 修订)。\n *\n * 五大类目 color/size/typography/motion/effect,字段结构对齐\n * packages/tokens/design/seed.tokens.json。部分已不再驱动 canonical T2 的字段暂时\n * 保留为兼容输入;新 Reference 不得为了形式完整继续扩充伪 Seed。\n *\n * v3 变化:\n * - 颜色全部结构化(DTCG Color module,支持 srgb/oklch)。\n * - radius/controlSize/iconSize 只留 base 锚点(full 是独立的裁切基准决策),\n * sm/lg 由 Reference 层按既定公式派生。\n * - lineHeight 从 size 移入 typography;新增 letterSpacing.base 锚点。\n * - fontFamily 换 text/number/code 三族 + 平台/语言变体(textMacXx、textWindowsXx)。\n */\nexport const SeedSchema = z.object({\n color: z.object(colorSeedShape),\n size: z.object({\n spacing: z.object({\n step: z.string(),\n }),\n borderWidth: z.object({\n hairline: z.string(),\n }),\n radius: z.object({\n /** 控件基准圆角;Reference 派生 sm=×0.5 / md=×1 / lg=×1.75。 */\n base: z.string(),\n /** 药丸/圆形裁切基准(独立设计决策,不从 base 派生)。 */\n full: z.string(),\n }),\n controlSize: z.object({\n /** md 控件高度锚点;sm/lg = base ∓ spacing.step × 2。 */\n base: z.string(),\n }),\n iconSize: z.object({\n /** md 图标尺寸锚点;sm/lg = base ∓ spacing.step。 */\n base: z.string(),\n }),\n opacity: z.object({\n disabled: z.number().min(0).max(1),\n alphaStep: z.number().min(0).max(1),\n }),\n zIndex: z.object({\n step: z.number().int().positive(),\n }),\n }),\n typography: z.object({\n fontFamily: z.object({\n /** 通用正文栈(跨平台缺省)。 */\n text: fontStack,\n /** 数字/数据展示栈。 */\n number: fontStack,\n /** 代码等宽栈。 */\n code: fontStack,\n /** 平台/语言细分变体,供上层按 UA/lang 重映射 text 角色。 */\n textMacLatin: fontStack,\n textMacZh: fontStack,\n textMacJa: fontStack,\n textWindowsLatin: fontStack,\n textWindowsZh: fontStack,\n textWindowsJa: fontStack,\n }),\n fontWeight: z.object({\n /** @deprecated T2 Font Weight 已是 standard-constant;保留到下一次 Seed API 主版本清理。 */\n regular: z.number(),\n /** @deprecated T2 Font Weight 已是 standard-constant;保留到下一次 Seed API 主版本清理。 */\n medium: z.number(),\n /** @deprecated T2 Font Weight 已是 standard-constant;保留到下一次 Seed API 主版本清理。 */\n semibold: z.number(),\n }),\n fontSize: z.object({\n base: z.string(),\n }),\n lineHeight: z.object({\n base: z.number().positive(),\n }),\n letterSpacing: z.object({\n base: z.string(),\n }),\n }),\n motion: z.object({\n duration: z.object({\n base: z.string(),\n }),\n easing: z.object({\n standard: cubicBezier,\n }),\n }),\n effect: z.object({\n shadow: z.object({\n base: z.object({\n color: seedColor,\n offsetX: z.string(),\n offsetY: z.string(),\n blur: z.string(),\n spread: z.string(),\n }),\n }),\n }),\n});\n\nexport type SeedInput = z.input<typeof SeedSchema>;\nexport type Seed = z.infer<typeof SeedSchema>;\n\n/**\n * validateSeed — ConfigProvider 在 dev 模式调用;生产环境可裁掉,不带 zod 体积。\n * 解析失败抛错,错误信息直接定位到字段。\n */\nexport function validateSeed(seed: unknown): Seed {\n const r = SeedSchema.safeParse(seed);\n if (!r.success) {\n console.error(\"[qw] invalid seed:\", r.error.format());\n throw new Error(\"invalid seed\");\n }\n return r.data;\n}\n","import { formatHex, parse, rgb } from \"culori\";\n\n/**\n * SeedColorValue — DTCG Color module 结构化颜色(design-tokens.org 2025.10)。\n * Seed 层颜色不再用十六进制字符串:结构化后输出 Web / iOS / Android / Figma\n * 插件 / 文档都更稳定,且支持 oklch 等更高级色彩空间直接作为设计输入。\n *\n * - srgb:components = [r, g, b],各分量 0–1(不是 0–255)。\n * - oklch:components = [l, c, h](l 0–1、c ≥0、h 角度)。\n */\nexport interface SeedColorValue {\n colorSpace: \"srgb\" | \"oklch\";\n components: [number, number, number];\n alpha: number;\n}\n\ntype CuloriColor =\n | { mode: \"rgb\"; r: number; g: number; b: number; alpha?: number }\n | { mode: \"oklch\"; l: number; c: number; h: number; alpha?: number };\n\n/** SeedColorValue → culori 可消费的颜色对象。 */\nexport function toCulori(c: SeedColorValue): CuloriColor {\n if (c.colorSpace === \"srgb\") {\n return { mode: \"rgb\", r: c.components[0], g: c.components[1], b: c.components[2], alpha: c.alpha };\n }\n return { mode: \"oklch\", l: c.components[0], c: c.components[1], h: c.components[2], alpha: c.alpha };\n}\n\n// 6 位小数:精度足以保证 hex → 结构化 → ramp 与直接 hex → ramp 全阶一致。\nconst round6 = (n: number) => Math.round(n * 1000000) / 1000000;\n\n/** 十六进制(#rgb / #rrggbb)→ 结构化 srgb SeedColorValue。编辑器色板输入的桥。 */\nexport function hexToSeedColor(hex: string): SeedColorValue {\n const parsed = rgb(parse(hex));\n if (!parsed) throw new Error(`[qw] 无法解析颜色: ${hex}`);\n return {\n colorSpace: \"srgb\",\n components: [round6(parsed.r), round6(parsed.g), round6(parsed.b)],\n alpha: parsed.alpha ?? 1,\n };\n}\n\n/** 结构化颜色 → #rrggbb(丢 alpha;oklch 会先转 sRGB)。展示/对比度计算用。 */\nexport function seedColorToHex(c: SeedColorValue): string {\n const converted = rgb(toCulori(c));\n if (!converted) throw new Error(`[qw] 无法转换颜色: ${JSON.stringify(c)}`);\n return formatHex(converted) ?? \"#000000\";\n}\n\n/**\n * 结构化颜色 → CSS 颜色字符串。srgb 且不透明输出 hex;srgb 半透明输出\n * `rgb(r g b / a)`;oklch 保持原生 `oklch(l c h / a)`(relative color 派生保真)。\n */\nexport function seedColorToCss(c: SeedColorValue): string {\n if (c.colorSpace === \"oklch\") {\n const [l, ch, h] = c.components;\n return c.alpha >= 1 ? `oklch(${l} ${ch} ${h})` : `oklch(${l} ${ch} ${h} / ${c.alpha})`;\n }\n if (c.alpha >= 1) return seedColorToHex(c);\n const [r, g, b] = c.components.map((v) => Math.round(v * 255));\n return `rgb(${r} ${g} ${b} / ${c.alpha})`;\n}\n","import { oklch, formatHex, clampChroma, parse } from \"culori\";\nimport { toCulori, type SeedColorValue } from \"../color.js\";\n\n/** 10 档 token: 50 / 100 / 200 / ... / 900 */\nexport const STEPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const;\nexport type Step = (typeof STEPS)[number];\n\n/**\n * OKLCH L 目标曲线 — 感知均匀的亮度阶梯 (0..1)。\n * 50 最亮 → 900 最暗;端点 0.972 / 0.18 避免纯白纯黑导致对比\"塌\"。\n * (替换原 HSV:HSV 在感知上不均匀,深档发灰/浅档发白,WCAG 易不过。)\n *\n * 导出供 live-css 生成器复用:CSS relative color 语法\n * `oklch(from var(--seed) L calc(c * f) h)` 的 L/f 常量与这里同源。\n */\nexport const L_TARGETS: Record<Step, number> = {\n 50: 0.972,\n 100: 0.94,\n 200: 0.88,\n 300: 0.8,\n 400: 0.7,\n 500: 0.62,\n 600: 0.54,\n 700: 0.45,\n 800: 0.33,\n 900: 0.18,\n};\n\n/**\n * chroma 端点衰减 — 在 L 的亮/暗两端轻微衰减 chroma,避免 out-of-gamut;\n * 中段 (L≈0.6) 保留全 chroma。\n */\nexport function chromaFactor(l: number): number {\n // 距离中点 0.6 越远,衰减越多;端点约保留 55%。\n const d = Math.abs(l - 0.6) / 0.6;\n return 1 - 0.45 * Math.min(1, d);\n}\n\nexport type Ramp = Record<Step, string>;\n\n/**\n * 给一个 seed 颜色(结构化 SeedColorValue 或 CSS 颜色字符串),算 10 阶 ramp。\n * L 走目标曲线,hue 固定,chroma 端点衰减后再 clampChroma 收进 sRGB 色域。\n */\nexport function ramp(seedColor: SeedColorValue | string): Ramp {\n const input = typeof seedColor === \"string\" ? parse(seedColor) : toCulori(seedColor);\n const base = oklch(input);\n if (!base) throw new Error(`[qw] 无法解析颜色: ${JSON.stringify(seedColor)}`);\n const baseC = base.c ?? 0;\n const baseH = base.h ?? 0;\n\n const out = {} as Ramp;\n for (const step of STEPS) {\n const l = L_TARGETS[step];\n const c = baseC * chromaFactor(l);\n const inGamut = clampChroma({ mode: \"oklch\", l, c, h: baseH }, \"oklch\");\n out[step] = formatHex(inGamut) ?? formatHex(base) ?? \"#000000\";\n }\n return out;\n}\n\n/** 相对亮度 (WCAG) — 用于对偶/校验时的对比度判断。 */\nexport function relativeLuminance(hex: string): number {\n const srgb = parse(hex) as { r: number; g: number; b: number } | undefined;\n if (!srgb) return 0;\n const lin = (v: number) => (v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4));\n return 0.2126 * lin(srgb.r) + 0.7152 * lin(srgb.g) + 0.0722 * lin(srgb.b);\n}\n\n/** WCAG 对比度 (1..21)。 */\nexport function contrastRatio(fg: string, bg: string): number {\n const l1 = relativeLuminance(fg);\n const l2 = relativeLuminance(bg);\n const [hi, lo] = l1 > l2 ? [l1, l2] : [l2, l1];\n return (hi + 0.05) / (lo + 0.05);\n}\n","/**\n * T1/T2/T3 token 的 CSS 变量命名:`--qw-{layer}-{kebab(path)}`。\n *\n * `layer` 区分 Seed(\"seed\",仅出现在 live CSS 产物里、供响应式级联的锚点变量)、\n * Reference(\"ref\",原子层,组件禁止直接引用)与 Semantic(\"sem\",组件唯一\n * 合法消费入口)。`path` 的每个 segment 是内部 TS 属性名(天然 camelCase,\n * 如 \"brandSubtle\"/\"controlSize\"),命名前需转成 kebab-case 才能对齐\n * packages/tokens/design/*.tokens.json 里锁定的 cssVar 字符串。\n *\n * 例:toVar(\"sem\", [\"color\",\"surface\",\"brandSubtle\"]) → \"--qw-sem-color-surface-brand-subtle\"\n * toVar(\"sem\", [\"size\",\"controlHeight\",\"sm\"]) → \"--qw-sem-size-control-height-sm\"\n * toVar(\"seed\", [\"color\",\"brand\"]) → \"--qw-seed-color-brand\"\n *\n * 这是唯一命名口子,运行时 flat var map、build-tokens.ts 的 CSS 出口与\n * live CSS 生成器共用。\n */\nexport type Layer = \"seed\" | \"ref\" | \"sem\";\n\nfunction kebab(segment: string): string {\n return segment.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nexport function toVar(layer: Layer, path: string[]): string {\n return `--qw-${layer}-${path.map(kebab).join(\"-\")}`;\n}\n","import { ramp, L_TARGETS, chromaFactor, type Step } from \"./oklch.js\";\nimport { toVar } from \"./naming.js\";\nimport {\n FIGMA_T2_SOLID_SCALE,\n FIGMA_T2_STEP_ALPHA,\n T1_COLOR_KEYS,\n T2_ALPHA_STEPS,\n T2_OKLCH_STEPS,\n type T1ColorKey,\n type T2OklchStep,\n} from \"../color-architecture.js\";\nimport { seedColorToCss, seedColorToHex, type SeedColorValue } from \"../color.js\";\nimport type { Seed } from \"../schema.js\";\n\n/**\n * T2 Reference(Primitive)派生 —— RFC 0001 §2.1,v3 声明式重构。\n *\n * v3 核心变化:每条 Reference token 的派生规则不再是不透明的 `(seed) => string`\n * 函数,而是可机器读取的 `Derivation` AST——同一份 AST 同时驱动:\n * 1. 运行时求值(evaluateDerivation → tokens);\n * 2. DTCG design 文件生成(scripts/export-design-tokens.ts,$value 全部结构化引用);\n * 3. live CSS 生成(derive/live-css.ts,relative color / calc 表达式);\n * 4. Token Studio 的派生公式展示(formatDerivation)。\n *\n * `sourceKind` 与 `seedRefs` 由 AST 自动推导(sourceKindOf / seedRefsOf);\n * Seed 来源类必须有血缘,标准常量与外部标准则记录来源/理由,不伪造 Seed。\n * 颜色层对齐 Figma `Color/qw` 变量集合:\n * - T1 Seed 为 12 个单色种子;\n * - T2 Reference 为每个 seed 的 A5-A100 Alpha 通道、50-900 OKLCH 设计校准实色色阶、\n * base 引用,以及少量补充原语(步进锚定 Alpha `{seed}/{step}-a{alpha}`、black/pure 标准常量)。\n */\n\nexport type ShadowLevel = \"sm\" | \"md\" | \"lg\";\n\n/**\n * T2 Reference 的规范来源类型。\n *\n * DTCG 不要求 Reference 必须引用 Seed;它只规范 token、group 与 alias 的表达。\n * qw-ui 用本字段补足跨 Figma / code 的血缘治理:\n * - seed-alias:原样承接一个 T1;\n * - seed-derived:通过确定公式从一个或多个 T1 生成;\n * - design-calibrated:保留 T1 设计血缘,但 canonical 值由设计校准拍板;\n * - standard-constant:机械标准或数学端点,不伪造 T1;\n * - external-standard:来自外部平台/规范,由外部来源负责版本化。\n */\nexport type ReferenceSourceKind =\n | \"seed-alias\"\n | \"seed-derived\"\n | \"design-calibrated\"\n | \"standard-constant\"\n | \"external-standard\";\n\nexport type Derivation =\n /** 直通引用 Seed 字段(dimension/number/duration 字符串或数字)。 */\n | { kind: \"alias\"; seedRef: string }\n /** dimension 字符串 × factor;round:\"int\" 时四舍五入为整数(字号档位用)。 */\n | { kind: \"scale\"; seedRef: string; factor: number; round?: \"int\" }\n /** 无单位数字 × factor(zIndex 刻度)。 */\n | { kind: \"scaleNumber\"; seedRef: string; factor: number }\n /** 无单位数字 + delta(lineHeight tight/relaxed = base ∓ 0.25)。 */\n | { kind: \"offsetNumber\"; seedRef: string; delta: number }\n /** dimension + 另一 dimension × n(controlSize/iconSize sm/lg = base ∓ spacing.step × n)。 */\n | { kind: \"offsetSteps\"; seedRef: string; stepRef: string; n: number }\n /** OKLCH 感知均匀色阶(L 曲线 + chroma 端点衰减,算法见 oklch.ts)。 */\n | { kind: \"oklchRamp\"; seedRef: string; step: Step }\n /** Figma 校准后的 OKLCH 实色色阶;血缘仍指向 T1 seed,但数值由设计稿拍板。 */\n | { kind: \"figmaOklchScale\"; seedRef: string; step: T2OklchStep; value: string }\n /** T1 seed 颜色的固定 Alpha 通道。 */\n | { kind: \"seedAlpha\"; seedRef: string; alpha: number }\n /** Figma 校准的步进锚定 Alpha:OKLCH 档位实色 + 固定 alpha(如 brand/500-a20)。 */\n | { kind: \"stepAlpha\"; seedRef: string; step: T2OklchStep; alpha: number }\n /** 旧版纯黑/纯白透明度工具刻度。保留求值器兼容,不再由 T2 主链路生成。 */\n | { kind: \"alphaScale\"; channel: \"black\" | \"white\"; stepRef: string; multiplier: number }\n /** 字体栈(string[] → CSS font-family 列表)。 */\n | { kind: \"fontStack\"; seedRef: string }\n /** cubic-bezier 四元组 → CSS 函数。 */\n | { kind: \"cubicBezier\"; seedRef: string }\n /** canonical 常量(机械标准或数学端点,非主题生成参数)。 */\n | { kind: \"literal\"; value: string | number }\n /** 阴影档位:形状 = shadow.base × 档位比例,颜色 = alphaStep × 档位倍数。 */\n | { kind: \"shadowLayer\"; level: ShadowLevel };\n\nexport interface ReferenceRecipe {\n path: string[];\n cssVar: string;\n /** 规范来源;决定 seedRefs 是否必须非空。 */\n sourceKind: ReferenceSourceKind;\n /** 由 derivation 自动推导的可选 Seed 依赖(点分路径),供可追溯性校验与血缘展示。 */\n seedRefs: string[];\n /** 标准、设计稿或外部规范的可读来源;非 Seed 来源类必填。 */\n source?: string;\n /** 为什么该值属于 T2 而不是 T1 的简短依据。 */\n rationale?: string;\n derivation: Derivation;\n}\n\n/** 拍平后的 CSS 变量映射:cssVar → 字符串值(--qw-ref-* 全集)。 */\nexport type ReferenceTokens = Record<string, string>;\n\n/** 阴影形状(不含颜色),供 Semantic 层复合 effect.shadow.* 时引用固定形状字段。 */\nexport interface ShadowShape {\n offsetX: string;\n offsetY: string;\n blur: string;\n spread: string;\n}\n\nexport interface ReferenceBuild {\n recipes: ReferenceRecipe[];\n tokens: ReferenceTokens;\n shapes: {\n shadow: { sm: ShadowShape; md: ShadowShape; lg: ShadowShape };\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* Seed 取值与格式化工具 */\n/* ------------------------------------------------------------------ */\n\n/** 按点分路径读 Seed 字段(\"size.spacing.step\" → seed.size.spacing.step)。 */\nexport function seedValueAt(seed: Seed, dotted: string): unknown {\n let node: unknown = seed;\n for (const seg of dotted.split(\".\")) {\n if (node == null || typeof node !== \"object\") {\n throw new Error(`[qw] Seed 路径不存在: ${dotted}`);\n }\n node = (node as Record<string, unknown>)[seg];\n }\n if (node === undefined) throw new Error(`[qw] Seed 路径不存在: ${dotted}`);\n return node;\n}\n\nfunction parsePx(s: string): { value: number; unit: string } {\n const m = /^(-?\\d+(?:\\.\\d+)?)(.*)$/.exec(s.trim());\n if (!m) throw new Error(`[qw] 无法解析尺寸: ${s}`);\n return { value: Number(m[1]), unit: m[2] ?? \"\" };\n}\n\nconst round2 = (n: number) => Math.round(n * 100) / 100;\n\nfunction rgba(components: readonly [number, number, number], alpha: number): string {\n return `rgba(${components[0]}, ${components[1]}, ${components[2]}, ${round2(alpha)})`;\n}\n\nfunction hexRgb(hex: string): [number, number, number] {\n const m = /^#?([0-9a-f]{6})$/i.exec(hex);\n if (!m) throw new Error(`[qw] 无法解析 hex 颜色: ${hex}`);\n const n = Number.parseInt(m[1]!, 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\n\nfunction seedAlphaCss(seedColor: SeedColorValue, alpha: number): string {\n if (alpha >= 1) return seedColorToCss({ ...seedColor, alpha: 1 });\n return rgba(hexRgb(seedColorToHex(seedColor)), alpha);\n}\n\n/** 从 Seed 颜色点分路径(\"color.brand\")取 T1 键。 */\nexport function seedKeyOf(seedRef: string): T1ColorKey {\n return seedRef.split(\".\")[1] as T1ColorKey;\n}\n\n/** 步进锚定 Alpha 的求值:FIGMA_T2_SOLID_SCALE 档位实色 + alpha → rgba。 */\nexport function stepAlphaCss(seed: T1ColorKey, step: T2OklchStep, alpha: number): string {\n return rgba(hexRgb(FIGMA_T2_SOLID_SCALE[seed][step]), alpha);\n}\n\nexport function formatFontFamily(list: string[]): string {\n return list.map((f) => (/[\\s./]/.test(f) ? `'${f}'` : f)).join(\", \");\n}\n\nfunction formatCubicBezier([a, b, c, d]: readonly [number, number, number, number]): string {\n return `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n}\n\n/** 阴影档位系数:形状(offset/blur/spread 缩放)+ 颜色(alphaStep 倍数)。 */\nexport const SHADOW_LEVELS: Record<ShadowLevel, { offset: number; blur: number; alphaMult: number }> = {\n sm: { offset: 0.5, blur: 0.5, alphaMult: 2 },\n md: { offset: 2, blur: 3, alphaMult: 3 },\n lg: { offset: 4, blur: 6, alphaMult: 4 },\n};\n\nfunction shadowShapeOf(seed: Seed, level: ShadowLevel): ShadowShape {\n const { offset, blur } = SHADOW_LEVELS[level];\n const base = seed.effect.shadow.base;\n const scale = (s: string, f: number) => {\n const { value, unit } = parsePx(s);\n return `${round2(value * f)}${unit}`;\n };\n return {\n offsetX: scale(base.offsetX, offset),\n offsetY: scale(base.offsetY, offset),\n blur: scale(base.blur, blur),\n spread: scale(base.spread, offset),\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* AST 求值器 / seedRefs 推导 / 公式展示 */\n/* ------------------------------------------------------------------ */\n\n/** 求值:一条 Derivation + Seed → 最终 CSS 值字符串。 */\nexport function evaluateDerivation(d: Derivation, seed: Seed): string {\n switch (d.kind) {\n case \"alias\": {\n const v = seedValueAt(seed, d.seedRef);\n if (v != null && typeof v === \"object\" && \"colorSpace\" in v) {\n return seedColorToCss(v as SeedColorValue);\n }\n return typeof v === \"number\" ? String(v) : (v as string);\n }\n case \"scale\": {\n const { value, unit } = parsePx(seedValueAt(seed, d.seedRef) as string);\n const scaled = value * d.factor;\n return `${d.round === \"int\" ? Math.round(scaled) : round2(scaled)}${unit}`;\n }\n case \"scaleNumber\":\n return String(round2((seedValueAt(seed, d.seedRef) as number) * d.factor));\n case \"offsetNumber\":\n return String(round2((seedValueAt(seed, d.seedRef) as number) + d.delta));\n case \"offsetSteps\": {\n const base = parsePx(seedValueAt(seed, d.seedRef) as string);\n const step = parsePx(seedValueAt(seed, d.stepRef) as string);\n return `${round2(base.value + step.value * d.n)}${base.unit}`;\n }\n case \"oklchRamp\":\n return ramp(seed.color[d.seedRef.split(\".\")[1] as keyof Seed[\"color\"]])[d.step];\n case \"figmaOklchScale\":\n return d.value;\n case \"seedAlpha\":\n return seedAlphaCss(seedValueAt(seed, d.seedRef) as SeedColorValue, d.alpha);\n case \"stepAlpha\":\n return stepAlphaCss(seedKeyOf(d.seedRef), d.step, d.alpha);\n case \"alphaScale\": {\n const step = seedValueAt(seed, d.stepRef) as number;\n const channel: [number, number, number] = d.channel === \"black\" ? [0, 0, 0] : [255, 255, 255];\n return rgba(channel, step * d.multiplier);\n }\n case \"fontStack\":\n return formatFontFamily(seedValueAt(seed, d.seedRef) as string[]);\n case \"cubicBezier\":\n return formatCubicBezier(seedValueAt(seed, d.seedRef) as [number, number, number, number]);\n case \"literal\":\n return String(d.value);\n case \"shadowLayer\": {\n const { offsetX, offsetY, blur, spread } = shadowShapeOf(seed, d.level);\n const color = rgba([0, 0, 0], seed.size.opacity.alphaStep * SHADOW_LEVELS[d.level].alphaMult);\n return `${offsetX} ${offsetY} ${blur} ${spread} ${color}`;\n }\n }\n}\n\n/** Seed 依赖推导:AST 里出现的全部 Seed 点分路径。 */\nexport function seedRefsOf(d: Derivation): string[] {\n switch (d.kind) {\n case \"alias\":\n case \"scale\":\n case \"scaleNumber\":\n case \"offsetNumber\":\n case \"oklchRamp\":\n case \"figmaOklchScale\":\n case \"seedAlpha\":\n case \"stepAlpha\":\n case \"fontStack\":\n case \"cubicBezier\":\n return [d.seedRef];\n case \"offsetSteps\":\n return [d.seedRef, d.stepRef];\n case \"alphaScale\":\n return [d.stepRef];\n case \"literal\":\n return [];\n case \"shadowLayer\":\n return [\"effect.shadow.base\", \"size.opacity.alphaStep\"];\n }\n}\n\n/** Derivation AST → 规范来源分类;作为 Figma/DTCG provenance 的唯一映射口。 */\nexport function sourceKindOf(d: Derivation): ReferenceSourceKind {\n switch (d.kind) {\n case \"alias\":\n case \"fontStack\":\n case \"cubicBezier\":\n return \"seed-alias\";\n case \"figmaOklchScale\":\n case \"stepAlpha\":\n return \"design-calibrated\";\n case \"literal\":\n return \"standard-constant\";\n default:\n return \"seed-derived\";\n }\n}\n\n/** 人读派生公式(Token Studio 展示用)。 */\nexport function formatDerivation(d: Derivation): string {\n const sign = (n: number) => (n >= 0 ? \"+\" : \"−\");\n switch (d.kind) {\n case \"alias\":\n case \"fontStack\":\n case \"cubicBezier\":\n return `= seed.${d.seedRef}`;\n case \"scale\":\n return `= seed.${d.seedRef} × ${d.factor}`;\n case \"scaleNumber\":\n return `= seed.${d.seedRef} × ${d.factor}`;\n case \"offsetNumber\":\n return `= seed.${d.seedRef} ${sign(d.delta)} ${Math.abs(d.delta)}`;\n case \"offsetSteps\":\n return `= seed.${d.seedRef} ${sign(d.n)} seed.${d.stepRef} × ${Math.abs(d.n)}`;\n case \"oklchRamp\":\n return `= oklch(seed.${d.seedRef}) @ L ${L_TARGETS[d.step]} · C × ${round2(chromaFactor(L_TARGETS[d.step]))}`;\n case \"figmaOklchScale\":\n return `= figma Color/qw/t2/${d.seedRef.split(\".\")[1]}/${d.step}(OKLCH 设计校准)`;\n case \"stepAlpha\":\n return `= figma Color/qw/t2/${d.seedRef.split(\".\")[1]}/${d.step}-a${round2(d.alpha * 100)}(步进锚定 Alpha)`;\n case \"seedAlpha\":\n return `= seed.${d.seedRef} / ${round2(d.alpha * 100)}%`;\n case \"alphaScale\":\n return `= ${d.channel === \"black\" ? \"黑\" : \"白\"} / seed.${d.stepRef} × ${d.multiplier}`;\n case \"literal\":\n return `= ${d.value}(canonical 标准常量)`;\n case \"shadowLayer\": {\n const f = SHADOW_LEVELS[d.level];\n return `= seed.effect.shadow.base 形状 × {offset ${f.offset}, blur ${f.blur}} · 色 = 黑 / alphaStep × ${f.alphaMult}`;\n }\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* 14 组配方(声明式) */\n/* ------------------------------------------------------------------ */\n\nfunction ref(\n path: string[],\n derivation: Derivation,\n metadata: Partial<Pick<ReferenceRecipe, \"sourceKind\" | \"source\" | \"rationale\">> = {},\n): ReferenceRecipe {\n const { sourceKind = sourceKindOf(derivation), ...details } = metadata;\n return {\n path,\n cssVar: toVar(\"ref\", path),\n sourceKind,\n seedRefs: seedRefsOf(derivation),\n ...details,\n derivation,\n };\n}\n\nexport const RAMP_COLORS = T1_COLOR_KEYS;\n\n/** 1. 12 个 Seed ×(A5-A100 Alpha 通道 + 50-900 Figma OKLCH 校准色阶 + base)。 */\nexport function buildColorRampRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (const name of RAMP_COLORS) {\n const seedRef = `color.${name}`;\n for (const alpha of T2_ALPHA_STEPS) {\n out.push(ref([\"color\", name, `a${alpha}`], { kind: \"seedAlpha\", seedRef, alpha: alpha / 100 }));\n }\n for (const step of T2_OKLCH_STEPS) {\n out.push(\n ref(\n [\"color\", name, String(step)],\n {\n kind: \"figmaOklchScale\",\n seedRef,\n step,\n value: FIGMA_T2_SOLID_SCALE[name as T1ColorKey][step],\n },\n {\n source: `Figma Color/qw/t2/${name}/${step}`,\n rationale:\n \"OKLCH solid scale is design-calibrated; the Seed records color-family lineage, not the final step value.\",\n },\n ),\n );\n }\n out.push(ref([\"color\", name, \"base\"], { kind: \"alias\", seedRef }));\n }\n return out;\n}\n\n/** 2. Figma T2 补充原语:步进锚定 Alpha(仅被 T3 消费的条目)+ black/pure 标准常量。 */\nexport function buildColorExtraRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (const { seed, step, alpha } of FIGMA_T2_STEP_ALPHA) {\n out.push(\n ref(\n [\"color\", seed, `${step}-a${alpha}`],\n { kind: \"stepAlpha\", seedRef: `color.${seed}`, step, alpha: alpha / 100 },\n {\n source: `Figma Color/qw/t2/${seed}/${step}-a${alpha}`,\n rationale: \"Step-anchored alpha is design-calibrated: both the anchored solid step and the alpha are pinned by the design file.\",\n },\n ),\n );\n }\n out.push(\n ref(\n [\"color\", \"black\", \"pure\"],\n { kind: \"literal\", value: \"#000000\" },\n {\n source: \"CSS Color sRGB endpoint\",\n rationale: \"Mathematical black endpoint for OLED canvas; replaces deprecated neutral/1000 semantics; no theme-level generator input.\",\n },\n ),\n );\n return out;\n}\n\n/** @deprecated Figma T2 已不再使用 neutral 0/1000 端点;保留给历史迁移脚本。 */\nexport function buildNeutralEndpointRecipes(): ReferenceRecipe[] {\n return [\n ref(\n [\"color\", \"neutral\", \"0\"],\n { kind: \"literal\", value: \"#ffffff\" },\n { source: \"CSS Color sRGB endpoint\", rationale: \"Mathematical white endpoint; no theme-level generator input.\" },\n ),\n ref(\n [\"color\", \"neutral\", \"1000\"],\n { kind: \"literal\", value: \"#000000\" },\n { source: \"CSS Color sRGB endpoint\", rationale: \"Mathematical black endpoint; no theme-level generator input.\" },\n ),\n ];\n}\n\nexport const BLACK_ALPHA: ReadonlyArray<readonly [string, number]> = [\n [\"4\", 1],\n [\"8\", 2],\n [\"12\", 3],\n [\"16\", 4],\n [\"24\", 6],\n [\"32\", 8],\n [\"48\", 12],\n [\"64\", 16],\n];\nexport const WHITE_ALPHA: ReadonlyArray<readonly [string, number]> = [\n [\"8\", 2],\n [\"16\", 4],\n [\"24\", 6],\n [\"32\", 8],\n];\n\n/** @deprecated Figma T2 已改为每个 Seed 自带 Alpha 通道;保留给历史迁移脚本。 */\nexport function buildAlphaScaleRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (const [key, mult] of BLACK_ALPHA) {\n out.push(\n ref([\"color\", \"blackAlpha\", key], {\n kind: \"alphaScale\",\n channel: \"black\",\n stepRef: \"size.opacity.alphaStep\",\n multiplier: mult,\n }),\n );\n }\n for (const [key, mult] of WHITE_ALPHA) {\n out.push(\n ref([\"color\", \"whiteAlpha\", key], {\n kind: \"alphaScale\",\n channel: \"white\",\n stepRef: \"size.opacity.alphaStep\",\n multiplier: mult,\n }),\n );\n }\n return out;\n}\n\n/** 4. 间距刻度 = spacing.step × N (N=1..8)。 */\nexport function buildSpacingRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (let n = 1; n <= 8; n++) {\n out.push(ref([\"size\", \"spacing\", String(n)], { kind: \"scale\", seedRef: \"size.spacing.step\", factor: n }));\n }\n return out;\n}\n\n/** 圆角档位系数(sm/lg/xl 从 base 派生;默认 base=8px → 4/8/14/16)。 */\nexport const RADIUS_FACTORS = { sm: 0.5, md: 1, lg: 1.75, xl: 2 } as const;\n\n/** 5. 圆角刻度:sm/md/lg/xl 由 radius.base 按系数派生,full 直通独立裁切基准。xl=2×base 对齐治理稿 Radius v2 的 T2 double。 */\nexport function buildRadiusRecipes(): ReferenceRecipe[] {\n return [\n ref([\"size\", \"radius\", \"sm\"], { kind: \"scale\", seedRef: \"size.radius.base\", factor: RADIUS_FACTORS.sm }),\n ref([\"size\", \"radius\", \"md\"], { kind: \"alias\", seedRef: \"size.radius.base\" }),\n ref([\"size\", \"radius\", \"lg\"], { kind: \"scale\", seedRef: \"size.radius.base\", factor: RADIUS_FACTORS.lg }),\n ref([\"size\", \"radius\", \"xl\"], { kind: \"scale\", seedRef: \"size.radius.base\", factor: RADIUS_FACTORS.xl }),\n ref([\"size\", \"radius\", \"full\"], { kind: \"alias\", seedRef: \"size.radius.full\" }),\n ];\n}\n\n/** 6. 控件/图标尺寸:md = base 直通,sm/lg = base ∓ spacing.step × n(控件 ×2、图标 ×1)。 */\nexport function buildControlIconSizeRecipes(): ReferenceRecipe[] {\n const step = \"size.spacing.step\";\n return [\n ref([\"size\", \"controlSize\", \"sm\"], { kind: \"offsetSteps\", seedRef: \"size.controlSize.base\", stepRef: step, n: -2 }),\n ref([\"size\", \"controlSize\", \"md\"], { kind: \"alias\", seedRef: \"size.controlSize.base\" }),\n ref([\"size\", \"controlSize\", \"lg\"], { kind: \"offsetSteps\", seedRef: \"size.controlSize.base\", stepRef: step, n: 2 }),\n ref([\"size\", \"iconSize\", \"sm\"], { kind: \"offsetSteps\", seedRef: \"size.iconSize.base\", stepRef: step, n: -1 }),\n ref([\"size\", \"iconSize\", \"md\"], { kind: \"alias\", seedRef: \"size.iconSize.base\" }),\n ref([\"size\", \"iconSize\", \"lg\"], { kind: \"offsetSteps\", seedRef: \"size.iconSize.base\", stepRef: step, n: 1 }),\n ];\n}\n\n/** 描边宽度梯度系数(Figma Stroke v1:Half/Base/Double/Triple = 0.5/1/2/3)。 */\nexport const STROKE_WIDTH_FACTORS = { half: 0.5, double: 2, triple: 3 } as const;\n\n/** 7. 描边宽度(Figma Stroke v1):base 直通 Seed,half/double/triple 按系数派生。 */\nexport function buildStrokeWidthRecipes(): ReferenceRecipe[] {\n const seedRef = \"size.borderWidth.hairline\";\n return [\n ref([\"size\", \"strokeWidth\", \"half\"], { kind: \"scale\", seedRef, factor: STROKE_WIDTH_FACTORS.half }),\n ref([\"size\", \"strokeWidth\", \"base\"], { kind: \"alias\", seedRef }),\n ref([\"size\", \"strokeWidth\", \"double\"], { kind: \"scale\", seedRef, factor: STROKE_WIDTH_FACTORS.double }),\n ref([\"size\", \"strokeWidth\", \"triple\"], { kind: \"scale\", seedRef, factor: STROKE_WIDTH_FACTORS.triple }),\n ];\n}\n\n/** 六档动作控件高度(Figma Action Control v1):现有公开尺寸契约,不能由单一 T1 Base 可靠派生,直接定义在 T2(T1 不设 Control Size)。 */\nexport const ACTION_CONTROL_HEIGHTS = { \"2xs\": 24, xs: 28, sm: 32, md: 36, lg: 42, xl: 50 } as const;\n\n/** 7b. 动作控件尺寸:六档高度 + 2XS 图标特例(Square 复用同档 Height,不另设 token)。 */\nexport function buildActionControlRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (const [step, value] of Object.entries(ACTION_CONTROL_HEIGHTS)) {\n out.push(\n ref(\n [\"size\", \"actionControlHeight\", step],\n { kind: \"literal\", value: `${value}px` },\n {\n source: \"Figma 千问三方——Token 改造 · Foundation/Action Control Standard v1\",\n rationale:\n \"六档高度 24/28/32/36/42/50 是现有公开尺寸契约,治理稿将其直接定义在 T2,T1 不设置 Control Size。\",\n },\n ),\n );\n }\n out.push(\n ref(\n [\"size\", \"actionControlIcon\", \"2xs\"],\n { kind: \"literal\", value: \"14px\" },\n {\n source: \"Figma 千问三方——Token 改造 · Foundation/Action Control Standard v1\",\n rationale:\n \"2XS 图标 14px 是治理稿已标记的组件特例(不扩充全局 Icon Scale);视觉验证通过后优先归一化为 Icon Size/Small。\",\n },\n ),\n );\n return out;\n}\n\n/** Avatar 三档直径(Figma 头像 · Avatar S/M/L = 40/50/58)。 */\nexport const AVATAR_DIAMETERS = { sm: 40, md: 50, lg: 58 } as const;\n\n/** 7c. 展示类专用尺寸:Avatar 直径(Icon Size 规范要求 Avatar 直径使用自己的语义,禁止借用 Icon/Control 刻度)。 */\nexport function buildAvatarDiameterRecipes(): ReferenceRecipe[] {\n return Object.entries(AVATAR_DIAMETERS).map(([step, value]) =>\n ref(\n [\"size\", \"avatarDiameter\", step],\n { kind: \"literal\", value: `${value}px` },\n {\n source: \"Figma 千问三方——Token 改造 · 头像 · Avatar(S/M/L)\",\n rationale:\n \"Avatar 直径 40/50/58 是展示类专用尺寸契约;Icon Size 规范明确 Avatar 直径必须使用各自语义,不由 T1 派生。\",\n },\n ),\n );\n}\n\n/** 8. 行高(typography 类目):normal 直通 Seed,tight/relaxed = base ∓ 0.25。 */\nexport function buildLineHeightRecipes(): ReferenceRecipe[] {\n return [\n ref([\"typography\", \"lineHeight\", \"tight\"], { kind: \"offsetNumber\", seedRef: \"typography.lineHeight.base\", delta: -0.25 }),\n ref([\"typography\", \"lineHeight\", \"normal\"], { kind: \"alias\", seedRef: \"typography.lineHeight.base\" }),\n ref([\"typography\", \"lineHeight\", \"relaxed\"], { kind: \"offsetNumber\", seedRef: \"typography.lineHeight.base\", delta: 0.25 }),\n ];\n}\n\n/** 9. 禁用态不透明度 —— 直通引用。 */\nexport function buildOpacityRecipes(): ReferenceRecipe[] {\n return [ref([\"size\", \"opacity\", \"disabled\"], { kind: \"alias\", seedRef: \"size.opacity.disabled\" })];\n}\n\n/** 10. 层级刻度 = zIndex.step × N (N=1..4);角色分配交给 Semantic 层。 */\nexport function buildZIndexRecipes(): ReferenceRecipe[] {\n return [1, 2, 3, 4].map((n) =>\n ref([\"size\", \"zIndex\", String(n)], { kind: \"scaleNumber\", seedRef: \"size.zIndex.step\", factor: n }),\n );\n}\n\nexport const FONT_FAMILY_KEYS = [\n \"text\",\n \"number\",\n \"code\",\n \"textMacLatin\",\n \"textMacZh\",\n \"textMacJa\",\n \"textWindowsLatin\",\n \"textWindowsZh\",\n \"textWindowsJa\",\n] as const;\n\n/** 字号档位倍数(沿用既定视觉:14px 基准 → 11/12/16/20/24;xs=11 对齐治理稿 T2 Font Size 2XS)。 */\nexport const FONT_SIZE_FACTORS: Record<string, number> = { xs: 0.786, sm: 0.857, lg: 1.143, xl: 1.429, \"2xl\": 1.714 };\n\n/** 11. 排版原子:字体族来自平台 Seed;字重是机械标准常量;字号按既定倍数派生。 */\nexport function buildTypographyRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (const key of FONT_FAMILY_KEYS) {\n out.push(ref([\"typography\", \"fontFamily\", key], { kind: \"fontStack\", seedRef: `typography.fontFamily.${key}` }));\n }\n for (const [key, value] of [\n [\"regular\", 400],\n [\"medium\", 500],\n [\"semibold\", 600],\n ] as const) {\n out.push(\n ref(\n [\"typography\", \"fontWeight\", key],\n { kind: \"literal\", value },\n {\n source: \"CSS Fonts numeric font-weight scale\",\n rationale: \"Mechanical weight step; changing it is a semantic typography decision, not a global generator input.\",\n },\n ),\n );\n }\n out.push(ref([\"typography\", \"fontSize\", \"base\"], { kind: \"alias\", seedRef: \"typography.fontSize.base\" }));\n for (const [key, factor] of Object.entries(FONT_SIZE_FACTORS)) {\n out.push(\n ref([\"typography\", \"fontSize\", key], { kind: \"scale\", seedRef: \"typography.fontSize.base\", factor, round: \"int\" }),\n );\n }\n out.push(ref([\"typography\", \"letterSpacing\", \"base\"], { kind: \"alias\", seedRef: \"typography.letterSpacing.base\" }));\n return out;\n}\n\n/** 动效时长档位倍数。 */\nexport const DURATION_FACTORS = { fast: 0.5, slow: 1.6 } as const;\n\n/** 12. 动效:duration 按倍数派生,easing 直通。 */\nexport function buildMotionRecipes(): ReferenceRecipe[] {\n return [\n ref([\"motion\", \"duration\", \"fast\"], { kind: \"scale\", seedRef: \"motion.duration.base\", factor: DURATION_FACTORS.fast }),\n ref([\"motion\", \"duration\", \"base\"], { kind: \"alias\", seedRef: \"motion.duration.base\" }),\n ref([\"motion\", \"duration\", \"slow\"], { kind: \"scale\", seedRef: \"motion.duration.base\", factor: DURATION_FACTORS.slow }),\n ref([\"motion\", \"easing\", \"standard\"], { kind: \"cubicBezier\", seedRef: \"motion.easing.standard\" }),\n ];\n}\n\n/**\n * 13. 阴影:形状由 effect.shadow.base 按各档位比例缩放,颜色沿用\n * alphaStep 结构锚点。它不是 Figma Color 变量体系里的 T2 颜色 token。\n */\nexport function buildShadowRecipes(): ReferenceRecipe[] {\n return ([\"sm\", \"md\", \"lg\"] as const).map((level) => ref([\"effect\", \"shadow\", level], { kind: \"shadowLayer\", level }));\n}\n\nexport function allReferenceRecipes(): ReferenceRecipe[] {\n return [\n ...buildColorRampRecipes(),\n ...buildColorExtraRecipes(),\n ...buildSpacingRecipes(),\n ...buildRadiusRecipes(),\n ...buildControlIconSizeRecipes(),\n ...buildStrokeWidthRecipes(),\n ...buildActionControlRecipes(),\n ...buildAvatarDiameterRecipes(),\n ...buildLineHeightRecipes(),\n ...buildOpacityRecipes(),\n ...buildZIndexRecipes(),\n ...buildTypographyRecipes(),\n ...buildMotionRecipes(),\n ...buildShadowRecipes(),\n ];\n}\n\n/** T2 顶层入口:喂一个 Seed,产出全量 Reference recipes + 拍平后的 CSS 变量映射 + 阴影形状(供 Semantic 层消费)。 */\nexport function buildReference(seed: Seed): ReferenceBuild {\n const recipes = allReferenceRecipes();\n const tokens: ReferenceTokens = {};\n for (const recipe of recipes) tokens[recipe.cssVar] = evaluateDerivation(recipe.derivation, seed);\n return {\n recipes,\n tokens,\n shapes: {\n shadow: {\n sm: shadowShapeOf(seed, \"sm\"),\n md: shadowShapeOf(seed, \"md\"),\n lg: shadowShapeOf(seed, \"lg\"),\n },\n },\n };\n}\n","import { toVar } from \"./naming.js\";\nimport type { ReferenceBuild, ReferenceTokens, ShadowLevel } from \"./reference.js\";\nimport { FIGMA_T3_COLOR_ROLES } from \"../color-architecture.js\";\n\n/**\n * T3 Semantic 派生 —— RFC 0001 §2.1,v3 修订。\n *\n * R7 类型隔离(强制 FR-010):本模块**不 import `Seed`/`schema.ts`** 任何符号,\n * 只接受 `buildReference()` 的输出(`ReferenceBuild`)。Semantic 角色永远经由\n * Reference 层中转到 Seed,不允许绕过 Reference 直接引用 Seed 字段。\n *\n * v3 变化:全部角色表从模块私有改为导出的结构化元数据(SEMANTIC_ROLES),\n * 供 design 文件生成器(scripts/export-design-tokens.ts)、live CSS 生成器\n * (derive/live-css.ts)与 Token Studio 的血缘展示共用同一份事实。\n */\nexport type SemanticMode = \"light\" | \"dark\";\n\nfunction pick(tokens: ReferenceTokens, dottedRefPath: string): string {\n const v = tokens[toVar(\"ref\", dottedRefPath.split(\".\"))];\n if (v === undefined) throw new Error(`[qw] Semantic 引用了不存在的 Reference token: ${dottedRefPath}`);\n return v;\n}\n\nfunction semVar(path: string[]): string {\n return toVar(\"sem\", path);\n}\n\n/* ------------------------------------------------------------------ */\n/* 结构类角色表(mode 无关) */\n/* ------------------------------------------------------------------ */\n\nexport const RADIUS_ROLES: Record<string, string> = {\n // 治理稿 Radius v2 尺寸语义:sm=4px(Tag/小型紧凑元素)、xl=16px(Loading/浮层强调容器)\n sm: \"size.radius.sm\",\n control: \"size.radius.md\",\n card: \"size.radius.lg\",\n xl: \"size.radius.xl\",\n pill: \"size.radius.full\",\n full: \"size.radius.full\",\n};\n\nexport const CONTROL_HEIGHT_ROLES: Record<string, string> = {\n sm: \"size.controlSize.sm\",\n md: \"size.controlSize.md\",\n lg: \"size.controlSize.lg\",\n};\n\nexport const ICON_SIZE_ROLES: Record<string, string> = {\n sm: \"size.iconSize.sm\",\n md: \"size.iconSize.md\",\n lg: \"size.iconSize.lg\",\n};\n\n/* ------------------------------------------------------------------ */\n/* 动作控件六档组合角色(Figma Action Control v1) */\n/* Height/PaddingInline/Icon/Gap 同档组合消费;纯图标控件的 Square */\n/* 宽高复用同档 Height,不另设 token。 */\n/* ------------------------------------------------------------------ */\n\nexport const ACTION_CONTROL_HEIGHT_ROLES: Record<string, string> = {\n \"2xs\": \"size.actionControlHeight.2xs\",\n xs: \"size.actionControlHeight.xs\",\n sm: \"size.actionControlHeight.sm\",\n md: \"size.actionControlHeight.md\",\n lg: \"size.actionControlHeight.lg\",\n xl: \"size.actionControlHeight.xl\",\n};\n\nexport const ACTION_CONTROL_PADDING_INLINE_ROLES: Record<string, string> = {\n \"2xs\": \"size.spacing.2\",\n xs: \"size.spacing.2\",\n sm: \"size.spacing.4\",\n md: \"size.spacing.4\",\n lg: \"size.spacing.5\",\n xl: \"size.spacing.8\",\n};\n\nexport const ACTION_CONTROL_ICON_ROLES: Record<string, string> = {\n \"2xs\": \"size.actionControlIcon.2xs\",\n xs: \"size.iconSize.sm\",\n sm: \"size.iconSize.sm\",\n md: \"size.iconSize.sm\",\n lg: \"size.iconSize.sm\",\n xl: \"size.iconSize.md\",\n};\n\nexport const ACTION_CONTROL_GAP_ROLES: Record<string, string> = {\n \"2xs\": \"size.spacing.1\",\n xs: \"size.spacing.1\",\n sm: \"size.spacing.2\",\n md: \"size.spacing.2\",\n lg: \"size.spacing.2\",\n xl: \"size.spacing.2\",\n};\n\n/* ------------------------------------------------------------------ */\n/* 描边角色(Figma Stroke v1:Border / Divider / Focus Ring / Indicator) */\n/* Border 只描述组件边界;Divider 描述内容分隔;Focus Ring 与 Indicator */\n/* 不得借用 Border token。Focus Ring Offset 仅供代码消费。 */\n/* ------------------------------------------------------------------ */\n\nexport const BORDER_WIDTH_ROLES: Record<string, string> = {\n default: \"size.strokeWidth.base\",\n strong: \"size.strokeWidth.double\",\n};\n\nexport const DIVIDER_WIDTH_ROLES: Record<string, string> = {\n thin: \"size.strokeWidth.half\",\n default: \"size.strokeWidth.base\",\n};\n\nexport const FOCUS_RING_ROLES: Record<string, string> = {\n width: \"size.strokeWidth.double\",\n offset: \"size.strokeWidth.double\",\n};\n\nexport const INDICATOR_ROLES: Record<string, string> = {\n loading: \"size.strokeWidth.double\",\n};\n\n/** 展示类专用尺寸:Avatar 直径三档(Figma 头像 S/M/L)。 */\nexport const AVATAR_DIAMETER_ROLES: Record<string, string> = {\n sm: \"size.avatarDiameter.sm\",\n md: \"size.avatarDiameter.md\",\n lg: \"size.avatarDiameter.lg\",\n};\n\nexport const INSET_STACK_ROLES: Record<string, string> = {\n sm: \"size.spacing.2\",\n md: \"size.spacing.4\",\n lg: \"size.spacing.6\",\n};\n\nexport const Z_INDEX_ROLES: Record<string, string> = {\n dropdown: \"size.zIndex.1\",\n sticky: \"size.zIndex.2\",\n overlay: \"size.zIndex.3\",\n toast: \"size.zIndex.4\",\n};\n\nexport const MOTION_DURATION_ROLES: Record<string, string> = {\n fast: \"motion.duration.fast\",\n base: \"motion.duration.base\",\n slow: \"motion.duration.slow\",\n};\n\n/** 字体族角色:text(正文缺省)/ number(数字数据)/ code(等宽)。 */\nexport const FONT_FAMILY_ROLES: Record<string, string> = {\n text: \"typography.fontFamily.text\",\n number: \"typography.fontFamily.number\",\n code: \"typography.fontFamily.code\",\n};\n\nexport interface TypographyRole {\n fontFamilyRef: string;\n fontSizeRef: string;\n fontWeightRef: string;\n lineHeightRef: string;\n letterSpacingRef: string;\n}\n\nconst T_LETTER = \"typography.letterSpacing.base\";\n\n/** typography.* 复合角色:每个字段各自引用 Reference(无任何裸字面量)。 */\nexport const TYPOGRAPHY_ROLES: Record<string, TypographyRole> = {\n body: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.base\",\n fontWeightRef: \"typography.fontWeight.regular\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n bodyStrong: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.base\",\n fontWeightRef: \"typography.fontWeight.medium\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n headingSm: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.lg\",\n fontWeightRef: \"typography.fontWeight.semibold\",\n lineHeightRef: \"typography.lineHeight.tight\",\n letterSpacingRef: T_LETTER,\n },\n headingMd: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.xl\",\n fontWeightRef: \"typography.fontWeight.semibold\",\n lineHeightRef: \"typography.lineHeight.tight\",\n letterSpacingRef: T_LETTER,\n },\n headingLg: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.2xl\",\n fontWeightRef: \"typography.fontWeight.semibold\",\n lineHeightRef: \"typography.lineHeight.tight\",\n letterSpacingRef: T_LETTER,\n },\n caption: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.sm\",\n fontWeightRef: \"typography.fontWeight.regular\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n /** 大正文(治理稿 T3 字段「大正文 16px · T2 M」):行高沿用 canonical 比例引擎。 */\n bodyLg: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.lg\",\n fontWeightRef: \"typography.fontWeight.regular\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n /** 小标签(治理稿 Text/Label/Small = 11/500/16):字号取 T2 xs=11px。 */\n labelSm: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.xs\",\n fontWeightRef: \"typography.fontWeight.medium\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n code: {\n fontFamilyRef: \"typography.fontFamily.code\",\n fontSizeRef: \"typography.fontSize.sm\",\n fontWeightRef: \"typography.fontWeight.regular\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n};\n\nexport const TYPOGRAPHY_FIELDS = [\n \"fontFamily\",\n \"fontSize\",\n \"fontWeight\",\n \"lineHeight\",\n \"letterSpacing\",\n] as const;\n\n/* ------------------------------------------------------------------ */\n/* 颜色角色表(light/dark 各自引用 Reference 路径) */\n/* ------------------------------------------------------------------ */\n\nexport interface ColorRoleRefs {\n light: string;\n dark: string;\n}\n\n/**\n * 颜色角色的 Semantic 变量路径:绝大多数角色落在 `--qw-sem-color-*` 下;\n * `effect.shadow.*.color` 是复合阴影的颜色分量,对应 Figma 变量\n * `--qw-sem-effect-shadow-*-color`,不带 `color-` 前缀。\n */\nexport function colorRoleSemPath(role: string): string[] {\n const segs = role.split(\".\");\n return segs[0] === \"effect\" ? segs : [\"color\", ...segs];\n}\n\nexport const COLOR_ROLES: Record<string, ColorRoleRefs> = {\n ...FIGMA_T3_COLOR_ROLES,\n};\n\n/** 复合阴影角色:形状取 Reference effect.shadow.<level>,颜色取各自的 effect.shadow.<role>.color 分量。 */\nexport const SHADOW_COMPOSITE_ROLES: Record<string, ShadowLevel> = {\n card: \"sm\",\n floating: \"md\",\n dialog: \"lg\",\n};\n\n/* ------------------------------------------------------------------ */\n/* 血缘元数据(Token Studio / 文档消费) */\n/* ------------------------------------------------------------------ */\n\nexport type SemanticRoleEntry =\n | {\n kind: \"structural\";\n /** Semantic 路径(点分,如 \"size.radius.control\")。 */\n path: string;\n cssVar: string;\n /** 引用的 Reference 路径(点分)。 */\n refPath: string;\n }\n | {\n kind: \"color\";\n path: string;\n cssVar: string;\n refPath: { light: string; dark: string };\n }\n | {\n kind: \"shadowComposite\";\n path: string;\n cssVar: string;\n /** 形状来源(reference.effect.shadow.<level>)+ 颜色来源。 */\n shapeRef: string;\n colorRole: string;\n };\n\n/**\n * 全量 Semantic 角色的结构化血缘表——\"角色 → 引用的 Reference 路径(含 light/dark 分支)\"。\n * 与 buildSemanticStructural/buildSemanticColor 的产出一一对应(顺序一致)。\n */\nexport function semanticRoleEntries(): SemanticRoleEntry[] {\n const out: SemanticRoleEntry[] = [];\n const structural = (path: string[], refPath: string) =>\n out.push({ kind: \"structural\", path: path.join(\".\"), cssVar: semVar(path), refPath });\n\n for (const [role, refPath] of Object.entries(RADIUS_ROLES)) structural([\"size\", \"radius\", role], refPath);\n for (const [role, refPath] of Object.entries(CONTROL_HEIGHT_ROLES)) structural([\"size\", \"controlHeight\", role], refPath);\n for (const [role, refPath] of Object.entries(ICON_SIZE_ROLES)) structural([\"size\", \"iconSize\", role], refPath);\n for (const [role, refPath] of Object.entries(ACTION_CONTROL_HEIGHT_ROLES)) structural([\"size\", \"actionControlHeight\", role], refPath);\n for (const [role, refPath] of Object.entries(ACTION_CONTROL_PADDING_INLINE_ROLES)) structural([\"size\", \"actionControlPaddingInline\", role], refPath);\n for (const [role, refPath] of Object.entries(ACTION_CONTROL_ICON_ROLES)) structural([\"size\", \"actionControlIcon\", role], refPath);\n for (const [role, refPath] of Object.entries(ACTION_CONTROL_GAP_ROLES)) structural([\"size\", \"actionControlGap\", role], refPath);\n for (const [role, refPath] of Object.entries(BORDER_WIDTH_ROLES)) structural([\"size\", \"borderWidth\", role], refPath);\n for (const [role, refPath] of Object.entries(DIVIDER_WIDTH_ROLES)) structural([\"size\", \"dividerWidth\", role], refPath);\n for (const [role, refPath] of Object.entries(FOCUS_RING_ROLES)) structural([\"size\", \"focusRing\", role], refPath);\n for (const [role, refPath] of Object.entries(INDICATOR_ROLES)) structural([\"size\", \"indicator\", role], refPath);\n for (const [role, refPath] of Object.entries(AVATAR_DIAMETER_ROLES)) structural([\"size\", \"avatarDiameter\", role], refPath);\n for (const [role, refPath] of Object.entries(INSET_STACK_ROLES)) {\n structural([\"size\", \"inset\", role], refPath);\n structural([\"size\", \"stack\", role], refPath);\n }\n structural([\"size\", \"opacity\", \"disabled\"], \"size.opacity.disabled\");\n for (const [role, refPath] of Object.entries(Z_INDEX_ROLES)) structural([\"size\", \"zIndex\", role], refPath);\n for (const [role, refPath] of Object.entries(FONT_FAMILY_ROLES)) structural([\"typography\", \"fontFamily\", role], refPath);\n for (const [role, spec] of Object.entries(TYPOGRAPHY_ROLES)) {\n structural([\"typography\", role, \"fontFamily\"], spec.fontFamilyRef);\n structural([\"typography\", role, \"fontSize\"], spec.fontSizeRef);\n structural([\"typography\", role, \"fontWeight\"], spec.fontWeightRef);\n structural([\"typography\", role, \"lineHeight\"], spec.lineHeightRef);\n structural([\"typography\", role, \"letterSpacing\"], spec.letterSpacingRef);\n }\n for (const [role, refPath] of Object.entries(MOTION_DURATION_ROLES)) structural([\"motion\", \"duration\", role], refPath);\n structural([\"motion\", \"easing\", \"standard\"], \"motion.easing.standard\");\n\n for (const [path, refs] of Object.entries(COLOR_ROLES)) {\n const segs = colorRoleSemPath(path);\n out.push({ kind: \"color\", path: segs.join(\".\"), cssVar: semVar(segs), refPath: refs });\n }\n for (const [role, level] of Object.entries(SHADOW_COMPOSITE_ROLES)) {\n const segs = [\"effect\", \"shadow\", role];\n out.push({\n kind: \"shadowComposite\",\n path: segs.join(\".\"),\n cssVar: semVar(segs),\n shapeRef: `effect.shadow.${level}`,\n colorRole: `effect.shadow.${role}.color`,\n });\n }\n return out;\n}\n\n/* ------------------------------------------------------------------ */\n/* 求值 */\n/* ------------------------------------------------------------------ */\n\n/**\n * 结构类(mode 无关):尺寸角色 + 字体族角色 + 排版复合角色 + 动效时长/缓动。\n * `effect.shadow.*` 的颜色字段随 mode 变化,归入 `buildSemanticColor`。\n */\nexport function buildSemanticStructural(reference: ReferenceBuild): Record<string, string> {\n const out: Record<string, string> = {};\n const { tokens } = reference;\n for (const entry of semanticRoleEntries()) {\n if (entry.kind !== \"structural\") continue;\n out[entry.cssVar] = pick(tokens, entry.refPath);\n }\n return out;\n}\n\n/**\n * 颜色类(light/dark 分别求值):color.* 全部角色。\n */\nexport function buildSemanticColor(reference: ReferenceBuild, mode: SemanticMode): Record<string, string> {\n const out: Record<string, string> = {};\n const { tokens, shapes } = reference;\n\n for (const entry of semanticRoleEntries()) {\n if (entry.kind !== \"color\") continue;\n out[entry.cssVar] = pick(tokens, entry.refPath[mode]);\n }\n\n for (const [role, level] of Object.entries(SHADOW_COMPOSITE_ROLES) as Array<\n [keyof typeof SHADOW_COMPOSITE_ROLES, ShadowLevel]\n >) {\n const shape = shapes.shadow[level];\n const shadowColor = out[semVar(colorRoleSemPath(`effect.shadow.${role}.color`))];\n out[semVar([\"effect\", \"shadow\", role])] =\n `${shape.offsetX} ${shape.offsetY} ${shape.blur} ${shape.spread} ${shadowColor}`;\n }\n\n return out;\n}\n","import { buildReference } from \"./reference.js\";\nimport { buildSemanticStructural, buildSemanticColor } from \"./semantic.js\";\nimport type { SemanticMode } from \"./semantic.js\";\nimport type { Seed } from \"../schema.js\";\n\nexport { toVar } from \"./naming.js\";\nexport type { Layer } from \"./naming.js\";\nexport { ramp, STEPS, L_TARGETS, chromaFactor, contrastRatio } from \"./oklch.js\";\nexport type { Step, Ramp } from \"./oklch.js\";\nexport type { SemanticMode as Mode } from \"./semantic.js\";\nexport type {\n ReferenceRecipe,\n ReferenceTokens,\n ReferenceBuild,\n Derivation,\n ReferenceSourceKind,\n ShadowLevel,\n ShadowShape,\n} from \"./reference.js\";\nexport {\n buildReference,\n allReferenceRecipes,\n evaluateDerivation,\n seedRefsOf,\n sourceKindOf,\n formatDerivation,\n seedValueAt,\n RAMP_COLORS,\n BLACK_ALPHA,\n WHITE_ALPHA,\n RADIUS_FACTORS,\n FONT_SIZE_FACTORS,\n DURATION_FACTORS,\n SHADOW_LEVELS,\n FONT_FAMILY_KEYS,\n} from \"./reference.js\";\nexport {\n buildSemanticStructural,\n buildSemanticColor,\n semanticRoleEntries,\n RADIUS_ROLES,\n CONTROL_HEIGHT_ROLES,\n ICON_SIZE_ROLES,\n INSET_STACK_ROLES,\n Z_INDEX_ROLES,\n MOTION_DURATION_ROLES,\n FONT_FAMILY_ROLES,\n TYPOGRAPHY_ROLES,\n TYPOGRAPHY_FIELDS,\n COLOR_ROLES,\n SHADOW_COMPOSITE_ROLES,\n} from \"./semantic.js\";\nexport type { SemanticRoleEntry, ColorRoleRefs, TypographyRole } from \"./semantic.js\";\n\nexport interface DerivedTokens {\n /** 亮色全量 CSS 变量:--qw-ref-* ∪ --qw-sem-*(light 取值)。 */\n light: Record<string, string>;\n /** 暗色全量 CSS 变量:--qw-ref-* ∪ --qw-sem-*(dark 取值)。 */\n dark: Record<string, string>;\n}\n\n/**\n * derive — 单源派生(RFC 0001)。喂一个 Seed,编排 T2 Reference → T3 Semantic,\n * 返回亮/暗两套全量 CSS 变量映射(含 --qw-ref-* 与 --qw-sem-*)。\n * 外部签名/返回值形状与改造前保持一致(FR-014),供 `@qw-ui/react`、`@qw-ui/vue` 的\n * ConfigProvider 直接消费,无需改动。\n *\n * 注意:`validateSeed` 不在此处调用(沿用现状契约),校验是调用方的责任。\n */\nexport function derive(seed: Seed): DerivedTokens {\n const reference = buildReference(seed);\n const structural = buildSemanticStructural(reference);\n const mk = (mode: SemanticMode): Record<string, string> => ({\n ...reference.tokens,\n ...structural,\n ...buildSemanticColor(reference, mode),\n });\n return { light: mk(\"light\"), dark: mk(\"dark\") };\n}\n","import { toVar } from \"./naming.js\";\nimport { L_TARGETS, chromaFactor } from \"./oklch.js\";\nimport { seedColorToCss } from \"../color.js\";\nimport {\n allReferenceRecipes,\n formatFontFamily,\n seedKeyOf,\n stepAlphaCss,\n SHADOW_LEVELS,\n FONT_FAMILY_KEYS,\n type Derivation,\n type ShadowLevel,\n} from \"./reference.js\";\nimport { semanticRoleEntries } from \"./semantic.js\";\nimport type { Seed } from \"../schema.js\";\n\n/**\n * live CSS 生成器 —— dist/tokens.live.css / Token Studio 响应式级联的引擎。\n *\n * 与静态 tokens.css(解析后的字面值,SSR 稳定出口)不同,live CSS 把整棵派生\n * 树翻译成 CSS 原生表达式:\n * - T1 Seed 落为 `--qw-seed-*` 变量,承载需要全局级联的生成参数;\n * - T2 Reference 的 seed-derived 项用 relative color / calc() 派生,\n * design-calibrated / standard-constant 项保留 canonical 直接值;\n * - T3 Semantic 全部是 `var(--qw-ref-*)` 别名;dark 模式只在暗色选择器下\n * 重映射 sem → 不同的 ref 档位。\n *\n * 于是改一个 `--qw-seed-*`(setProperty 即可),整棵 ref/sem 树由浏览器原生\n * 级联更新,零 JS 重算。依赖现代 CSS(relative color / round()),刻意不做\n * 老浏览器兼容——组件库消费方继续用静态 tokens.css。\n */\n\nconst round4 = (n: number) => Math.round(n * 10000) / 10000;\n\nfunction seedVar(dotted: string): string {\n return toVar(\"seed\", dotted.split(\".\"));\n}\n\n/* ------------------------------------------------------------------ */\n/* T1:Seed → --qw-seed-* 变量表 */\n/* ------------------------------------------------------------------ */\n\n/** Seed 拍平成 `--qw-seed-*` → CSS 值;T2 仍可包含校准值或标准常量。 */\nexport function seedCssVars(seed: Seed): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [name, value] of Object.entries(seed.color)) {\n out[seedVar(`color.${name}`)] = seedColorToCss(value);\n }\n out[seedVar(\"size.spacing.step\")] = seed.size.spacing.step;\n out[seedVar(\"size.borderWidth.hairline\")] = seed.size.borderWidth.hairline;\n out[seedVar(\"size.radius.base\")] = seed.size.radius.base;\n out[seedVar(\"size.radius.full\")] = seed.size.radius.full;\n out[seedVar(\"size.controlSize.base\")] = seed.size.controlSize.base;\n out[seedVar(\"size.iconSize.base\")] = seed.size.iconSize.base;\n out[seedVar(\"size.opacity.disabled\")] = String(seed.size.opacity.disabled);\n out[seedVar(\"size.opacity.alphaStep\")] = String(seed.size.opacity.alphaStep);\n out[seedVar(\"size.zIndex.step\")] = String(seed.size.zIndex.step);\n for (const key of FONT_FAMILY_KEYS) {\n out[seedVar(`typography.fontFamily.${key}`)] = formatFontFamily(seed.typography.fontFamily[key]);\n }\n // typography.fontWeight 保留在 SeedSchema 作为兼容输入,但 canonical T2 是\n // standard-constant,不再把这些旧字段暴露为 live T1 变量。\n out[seedVar(\"typography.fontSize.base\")] = seed.typography.fontSize.base;\n out[seedVar(\"typography.lineHeight.base\")] = String(seed.typography.lineHeight.base);\n out[seedVar(\"typography.letterSpacing.base\")] = seed.typography.letterSpacing.base;\n out[seedVar(\"motion.duration.base\")] = seed.motion.duration.base;\n const [a, b, c, d] = seed.motion.easing.standard;\n out[seedVar(\"motion.easing.standard\")] = `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n out[seedVar(\"effect.shadow.base.offsetX\")] = seed.effect.shadow.base.offsetX;\n out[seedVar(\"effect.shadow.base.offsetY\")] = seed.effect.shadow.base.offsetY;\n out[seedVar(\"effect.shadow.base.blur\")] = seed.effect.shadow.base.blur;\n out[seedVar(\"effect.shadow.base.spread\")] = seed.effect.shadow.base.spread;\n return out;\n}\n\n/* ------------------------------------------------------------------ */\n/* T2:Derivation AST → CSS 表达式 */\n/* ------------------------------------------------------------------ */\n\nfunction shadowShapeExprs(level: ShadowLevel): { offsetX: string; offsetY: string; blur: string; spread: string } {\n const { offset, blur } = SHADOW_LEVELS[level];\n const scale = (field: string, f: number) => `calc(var(${seedVar(`effect.shadow.base.${field}`)}) * ${f})`;\n return {\n offsetX: scale(\"offsetX\", offset),\n offsetY: scale(\"offsetY\", offset),\n blur: scale(\"blur\", blur),\n spread: scale(\"spread\", offset),\n };\n}\n\n/** 一条 Derivation → 引用 `--qw-seed-*` 的 CSS 原生表达式。 */\nexport function derivationToCssExpr(d: Derivation): string {\n switch (d.kind) {\n case \"alias\":\n case \"fontStack\":\n case \"cubicBezier\":\n return `var(${seedVar(d.seedRef)})`;\n case \"scale\": {\n const expr = `calc(var(${seedVar(d.seedRef)}) * ${d.factor})`;\n return d.round === \"int\" ? `round(nearest, ${expr}, 1px)` : expr;\n }\n case \"scaleNumber\":\n return `calc(var(${seedVar(d.seedRef)}) * ${d.factor})`;\n case \"offsetNumber\":\n return `calc(var(${seedVar(d.seedRef)}) ${d.delta >= 0 ? \"+\" : \"-\"} ${Math.abs(d.delta)})`;\n case \"offsetSteps\":\n return `calc(var(${seedVar(d.seedRef)}) ${d.n >= 0 ? \"+\" : \"-\"} var(${seedVar(d.stepRef)}) * ${Math.abs(d.n)})`;\n case \"oklchRamp\": {\n const l = L_TARGETS[d.step];\n const f = round4(chromaFactor(l));\n return `oklch(from var(${seedVar(d.seedRef)}) ${l} calc(c * ${f}) h)`;\n }\n case \"figmaOklchScale\":\n return d.value;\n case \"seedAlpha\":\n return `rgb(from var(${seedVar(d.seedRef)}) r g b / ${round4(d.alpha)})`;\n case \"stepAlpha\":\n // 档位实色由设计校准,无 Seed 级联锚点——与 figmaOklchScale 一致落常量。\n return stepAlphaCss(seedKeyOf(d.seedRef), d.step, d.alpha);\n case \"alphaScale\": {\n const channel = d.channel === \"black\" ? \"0 0 0\" : \"255 255 255\";\n return `rgb(${channel} / calc(var(${seedVar(d.stepRef)}) * ${d.multiplier}))`;\n }\n case \"literal\":\n return String(d.value);\n case \"shadowLayer\": {\n const s = shadowShapeExprs(d.level);\n const alpha = `calc(var(${seedVar(\"size.opacity.alphaStep\")}) * ${SHADOW_LEVELS[d.level].alphaMult})`;\n return `${s.offsetX} ${s.offsetY} ${s.blur} ${s.spread} rgb(0 0 0 / ${alpha})`;\n }\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* 组装 */\n/* ------------------------------------------------------------------ */\n\nexport interface LiveCssOptions {\n /** 亮色作用域选择器,默认 \":root\"。 */\n selector?: string;\n /** 暗色作用域选择器,默认 '[data-qw-mode=\"dark\"]'。 */\n darkSelector?: string;\n}\n\nfunction block(selector: string, decls: Array<[string, string]>): string {\n return `${selector} {\\n${decls.map(([k, v]) => ` ${k}: ${v};`).join(\"\\n\")}\\n}\\n`;\n}\n\n/**\n * 生成整份 live CSS:\n * 1. seed 块(具体数值);2. ref 块(表达式派生);3. sem 块(light 别名);\n * 4. dark 块(仅重映射随 mode 变化的 sem 颜色别名)。\n */\nexport function buildLiveCss(seed: Seed, options: LiveCssOptions = {}): string {\n const selector = options.selector ?? \":root\";\n const darkSelector = options.darkSelector ?? '[data-qw-mode=\"dark\"]';\n\n const seedDecls = Object.entries(seedCssVars(seed));\n\n const refDecls: Array<[string, string]> = allReferenceRecipes().map((r) => [\n r.cssVar,\n derivationToCssExpr(r.derivation),\n ]);\n\n const semLight: Array<[string, string]> = [];\n const semDark: Array<[string, string]> = [];\n for (const entry of semanticRoleEntries()) {\n if (entry.kind === \"structural\") {\n semLight.push([entry.cssVar, `var(${toVar(\"ref\", entry.refPath.split(\".\"))})`]);\n } else if (entry.kind === \"color\") {\n semLight.push([entry.cssVar, `var(${toVar(\"ref\", entry.refPath.light.split(\".\"))})`]);\n if (entry.refPath.dark !== entry.refPath.light) {\n semDark.push([entry.cssVar, `var(${toVar(\"ref\", entry.refPath.dark.split(\".\"))})`]);\n }\n } else {\n // shadow 复合:形状表达式 + mode 感知的 sem 颜色(dark 无需重复,颜色变量自己会变)。\n const level = entry.shapeRef.split(\".\").pop() as ShadowLevel;\n const s = shadowShapeExprs(level);\n semLight.push([\n entry.cssVar,\n `${s.offsetX} ${s.offsetY} ${s.blur} ${s.spread} var(${toVar(\"sem\", entry.colorRole.split(\".\"))})`,\n ]);\n }\n }\n\n return [\n \"/* @qw-ui/tokens live — Seed 变量驱动的响应式派生树(relative color / calc),请勿手改。\",\n \" 改 --qw-seed-* 即级联整棵 ref/sem 树;需要现代浏览器,组件库消费方请用静态 tokens.css。 */\",\n block(selector, [...seedDecls, ...refDecls, ...semLight]),\n block(darkSelector, semDark),\n ].join(\"\\n\");\n}\n","import {\n FIGMA_T1_SEED_HEX,\n FIGMA_T2_SOLID_SCALE,\n FIGMA_T2_STEP_ALPHA,\n FIGMA_T3_COLOR_ROLES,\n T1_COLOR_KEYS,\n T2_ALPHA_STEPS,\n T2_OKLCH_STEPS,\n T2_PURE_SEEDS,\n type T1ColorKey,\n} from \"../color-architecture.js\";\nimport { colorRoleSemPath } from \"../derive/semantic.js\";\nimport { toVar } from \"../derive/naming.js\";\n\n/**\n * color-snapshot — 生成 Figma `Color` 变量集合的 DTCG 快照(design/color.tokens.json)。\n *\n * Figma 导出自动化通道尚未建立(变量 ID 本次不回填),快照由\n * color-architecture.ts 的同一份事实表投影生成,供 validate:figma-color 与\n * color-contract 测试消费;接上 Figma 导出后以导出物替换本生成物。\n */\n\nconst NS = \"com.qianwen.qw-ui\";\n\ntype Json = Record<string, unknown>;\n\nconst round4 = (n: number) => Math.round(n * 10000) / 10000;\n\nfunction hexComponents(hex: string): [number, number, number] {\n const m = /^#?([0-9a-f]{6})$/i.exec(hex);\n if (!m) throw new Error(`[qw] invalid hex color: ${hex}`);\n const n = Number.parseInt(m[1]!, 16);\n return [round4(((n >> 16) & 255) / 255), round4(((n >> 8) & 255) / 255), round4((n & 255) / 255)];\n}\n\nfunction colorValue(hex: string, alpha = 1): Json {\n return { colorSpace: \"srgb\", components: hexComponents(hex), alpha };\n}\n\nfunction t1Ref(seed: T1ColorKey): string {\n return `{qw.t1.${seed}}`;\n}\n\n/** T3 角色引用的 T2 点分路径(\"color.blue.600-a20\" → \"qw.t2.blue.600-a20\")。 */\nfunction t2Ref(dotted: string): string {\n const [, seed, step] = dotted.split(\".\");\n return `{qw.t2.${seed}.${step}}`;\n}\n\ninterface Provenance {\n sourceKind: \"seed-alias\" | \"seed-derived\" | \"design-calibrated\" | \"standard-constant\";\n seedRefs: string[];\n source?: string;\n rationale?: string;\n formula: string;\n}\n\nfunction t2Token(value: Json, provenance: Provenance): Json {\n return {\n $type: \"color\",\n $value: value,\n $extensions: { [NS]: { provenance } },\n };\n}\n\nfunction buildT1(): Json {\n const t1: Json = {};\n for (const seed of T1_COLOR_KEYS) {\n t1[seed] = { $type: \"color\", $value: colorValue(FIGMA_T1_SEED_HEX[seed]) };\n }\n return t1;\n}\n\nfunction buildT2(): Json {\n const t2: Json = {};\n for (const seed of T1_COLOR_KEYS) {\n const seedHex = FIGMA_T1_SEED_HEX[seed];\n const steps: Json = {};\n steps.base = t2Token(colorValue(seedHex), {\n sourceKind: \"seed-alias\",\n seedRefs: [t1Ref(seed)],\n formula: `= qw.t1.${seed}`,\n });\n for (const alpha of T2_ALPHA_STEPS) {\n steps[`a${alpha}`] = t2Token(colorValue(seedHex, alpha / 100), {\n sourceKind: \"seed-derived\",\n seedRefs: [t1Ref(seed)],\n formula: `= qw.t1.${seed} / ${alpha}%`,\n });\n }\n for (const step of T2_OKLCH_STEPS) {\n steps[String(step)] = t2Token(colorValue(FIGMA_T2_SOLID_SCALE[seed][step]), {\n sourceKind: \"design-calibrated\",\n seedRefs: [t1Ref(seed)],\n source: `Figma Color/qw/t2/${seed}/${step}`,\n formula: `= figma Color/qw/t2/${seed}/${step}(OKLCH 设计校准)`,\n });\n }\n for (const extra of FIGMA_T2_STEP_ALPHA) {\n if (extra.seed !== seed) continue;\n steps[`${extra.step}-a${extra.alpha}`] = t2Token(colorValue(FIGMA_T2_SOLID_SCALE[seed][extra.step], extra.alpha / 100), {\n sourceKind: \"design-calibrated\",\n seedRefs: [t1Ref(seed)],\n source: `Figma Color/qw/t2/${seed}/${extra.step}-a${extra.alpha}`,\n formula: `= figma Color/qw/t2/${seed}/${extra.step}-a${extra.alpha}(步进锚定 Alpha)`,\n });\n }\n if ((T2_PURE_SEEDS as readonly string[]).includes(seed)) {\n steps.pure = t2Token(colorValue(\"#000000\"), {\n sourceKind: \"standard-constant\",\n seedRefs: [],\n source: \"CSS Color sRGB endpoint\",\n rationale: \"Mathematical black endpoint for OLED canvas; no theme-level generator input.\",\n formula: \"= #000000(canonical 标准常量)\",\n });\n }\n t2[seed] = steps;\n }\n return t2;\n}\n\nfunction buildT3(): Json {\n const t3: Json = {};\n for (const [role, refs] of Object.entries(FIGMA_T3_COLOR_ROLES)) {\n const segs = role.split(\".\");\n const node: Json = {\n $type: \"color\",\n $value: t2Ref(refs.light),\n $extensions: {\n [NS]: {\n cssVar: toVar(\"sem\", colorRoleSemPath(role)),\n modes: { light: t2Ref(refs.light), dark: t2Ref(refs.dark) },\n },\n },\n };\n let cur = t3;\n for (let i = 0; i < segs.length - 1; i++) {\n const seg = segs[i]!;\n if (!(seg in cur)) cur[seg] = {};\n cur = cur[seg] as Json;\n }\n cur[segs[segs.length - 1]!] = node;\n }\n return t3;\n}\n\n/** 生成 design/color.tokens.json 的完整 JSON 对象(qw/t1/t2/t3 结构)。 */\nexport function buildFigmaColorSnapshot(): Json {\n return {\n $schema: \"https://www.designtokens.org/schemas/2025.10/format.json\",\n $description:\n \"qw-ui Color 变量集合快照(Figma 节点 22258:49986)。Figma 导出自动化通道建立前,由 scripts/export-design-tokens.ts 从 color-architecture.ts 同一份事实表投影生成,请勿手改;接上 Figma 导出后以导出物替换。校验:pnpm --filter @qw-ui/tokens validate:figma-color。\",\n $extensions: {\n [NS]: { collection: \"Color\", figmaNode: \"22258:49986\", generated: true, owner: \"design-system\" },\n },\n qw: {\n t1: buildT1(),\n t2: buildT2(),\n t3: buildT3(),\n },\n };\n}\n","import {\n FIGMA_COLOR_PREFIX,\n FIGMA_T3_COLOR_ROLES,\n T1_COLOR_KEYS,\n T2_ALPHA_KEYS,\n T2_OKLCH_STEPS,\n T2_PURE_SEEDS,\n} from \"../color-architecture.js\";\n\nexport { FIGMA_COLOR_COLLECTION, FIGMA_COLOR_PREFIX, T1_COLOR_KEYS, T2_OKLCH_STEPS } from \"../color-architecture.js\";\nexport const T2_ALPHA_STEPS = T2_ALPHA_KEYS;\nexport const T2_OKLCH_STEP_KEYS = T2_OKLCH_STEPS.map(String);\n\nconst NS = \"com.qianwen.qw-ui\";\n\nconst T1_SET = new Set<string>(T1_COLOR_KEYS);\nconst T2_ALPHA_SET = new Set<string>(T2_ALPHA_KEYS);\nconst T2_OKLCH_SET = new Set<string>(T2_OKLCH_STEP_KEYS);\nconst T2_PURE_SEED_SET = new Set<string>(T2_PURE_SEEDS);\nconst T3_SEGMENT = /^[a-z]+(?:-[a-z]+)*$/;\n\n/** 步进锚定 Alpha 步名(如 \"500-a20\"):OKLCH 档位 + Alpha 档位两段。 */\nconst T2_STEP_ALPHA_RE = /^(\\d+)-a(\\d+)$/;\n\nconst PROVENANCE_SOURCE_KINDS = new Set<string>([\n \"seed-alias\",\n \"seed-derived\",\n \"design-calibrated\",\n \"standard-constant\",\n \"external-standard\",\n]);\nconst SEED_LINEAGE_KINDS = new Set<string>([\"seed-alias\", \"seed-derived\", \"design-calibrated\"]);\n\nexport interface FigmaColorTokenValidationResult {\n ok: boolean;\n errors: string[];\n counts: {\n t1: number;\n t2: number;\n t3: number;\n };\n}\n\ninterface TokenLeaf {\n path: string[];\n value: unknown;\n extensions: Record<string, unknown>;\n}\n\ntype JsonObject = Record<string, unknown>;\n\nfunction isObject(value: unknown): value is JsonObject {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction collectLeaves(node: unknown, path: string[] = [], out: TokenLeaf[] = []): TokenLeaf[] {\n if (!isObject(node)) return out;\n if (\"$value\" in node) {\n out.push({\n path,\n value: node.$value,\n extensions: isObject(node.$extensions) ? node.$extensions : {},\n });\n return out;\n }\n for (const [key, child] of Object.entries(node)) {\n if (key.startsWith(\"$\")) continue;\n collectLeaves(child, [...path, key], out);\n }\n return out;\n}\n\nfunction qwPath(path: string[]): string[] | null {\n const index = path.indexOf(FIGMA_COLOR_PREFIX);\n return index >= 0 ? path.slice(index) : null;\n}\n\nfunction pathKey(path: string[]): string {\n return path.join(\".\");\n}\n\nfunction refToPath(ref: unknown): string[] | null {\n if (typeof ref !== \"string\") return null;\n const match = /^\\{(.+)\\}$/.exec(ref.trim());\n if (!match) return null;\n return match[1]!.split(/[./]/).filter(Boolean);\n}\n\nfunction extensionObject(leaf: TokenLeaf): JsonObject {\n const ext = leaf.extensions[NS];\n return isObject(ext) ? ext : {};\n}\n\nfunction modesOf(leaf: TokenLeaf): JsonObject {\n const ext = extensionObject(leaf);\n return isObject(ext.modes) ? ext.modes : {};\n}\n\nfunction provenanceOf(leaf: TokenLeaf): JsonObject {\n const ext = extensionObject(leaf);\n return isObject(ext.provenance) ? ext.provenance : {};\n}\n\nfunction isSolidColorValue(value: unknown): boolean {\n if (!isObject(value)) return false;\n if (value.colorSpace !== \"srgb\" && value.colorSpace !== \"oklch\") return false;\n if (!Array.isArray(value.components) || value.components.length !== 3) return false;\n return value.alpha === 1;\n}\n\nfunction isColorLikeValue(value: unknown): boolean {\n if (!isObject(value)) return false;\n if (value.colorSpace !== \"srgb\" && value.colorSpace !== \"oklch\") return false;\n if (!Array.isArray(value.components) || value.components.length !== 3) return false;\n return typeof value.alpha === \"number\" && value.alpha >= 0 && value.alpha <= 1;\n}\n\nfunction validateNoUnexpectedName(path: string[], errors: string[]): void {\n const joined = pathKey(path);\n if (joined.includes(\"_\")) errors.push(`${joined}: token name must not contain underscores`);\n if (path.some((segment) => /[A-Z]/.test(segment))) errors.push(`${joined}: token name must be lowercase`);\n}\n\nfunction validateT3Path(path: string[], errors: string[]): void {\n const joined = pathKey(path);\n for (const segment of path.slice(2)) {\n if (!T3_SEGMENT.test(segment)) {\n errors.push(`${joined}: T3 semantic segment \"${segment}\" must use kebab-case words without numeric suffixes`);\n }\n }\n}\n\n/** T2 步名分类:base / alpha / oklch / step-alpha / pure。 */\nfunction classifyT2Step(step: string): \"base\" | \"alpha\" | \"oklch\" | \"step-alpha\" | \"pure\" | null {\n if (step === \"base\") return \"base\";\n if (T2_ALPHA_SET.has(step)) return \"alpha\";\n if (T2_OKLCH_SET.has(step)) return \"oklch\";\n if (step === \"pure\") return \"pure\";\n const match = T2_STEP_ALPHA_RE.exec(step);\n if (match && T2_OKLCH_SET.has(match[1]!) && T2_ALPHA_SET.has(`a${match[2]}`)) return \"step-alpha\";\n return null;\n}\n\n/** 各 T2 步类对应的 provenance.sourceKind(血缘治理不变量)。 */\nconst T2_STEP_SOURCE_KIND: Record<\"base\" | \"alpha\" | \"oklch\" | \"step-alpha\" | \"pure\", string> = {\n base: \"seed-alias\",\n alpha: \"seed-derived\",\n oklch: \"design-calibrated\",\n \"step-alpha\": \"design-calibrated\",\n pure: \"standard-constant\",\n};\n\nfunction validateT2Provenance(leaf: TokenLeaf, seed: string, step: string, errors: string[]): void {\n const joined = pathKey(leaf.path);\n const provenance = provenanceOf(leaf);\n if (Object.keys(provenance).length === 0) {\n errors.push(`${joined}: T2 token must declare $extensions.${NS}.provenance`);\n return;\n }\n const { sourceKind, seedRefs } = provenance;\n if (typeof sourceKind !== \"string\" || !PROVENANCE_SOURCE_KINDS.has(sourceKind)) {\n errors.push(`${joined}: provenance.sourceKind must be one of ${[...PROVENANCE_SOURCE_KINDS].join(\", \")}`);\n return;\n }\n const stepKind = classifyT2Step(step);\n if (stepKind && T2_STEP_SOURCE_KIND[stepKind] !== sourceKind) {\n errors.push(`${joined}: T2 ${stepKind} token must declare provenance.sourceKind = \"${T2_STEP_SOURCE_KIND[stepKind]}\"`);\n }\n if (SEED_LINEAGE_KINDS.has(sourceKind)) {\n const expected = `{qw.t1.${seed}}`;\n if (!Array.isArray(seedRefs) || seedRefs.length !== 1 || seedRefs[0] !== expected) {\n errors.push(`${joined}: provenance.seedRefs must be exactly [\"${expected}\"]`);\n }\n return;\n }\n if (Array.isArray(seedRefs) && seedRefs.length > 0) {\n errors.push(`${joined}: provenance.sourceKind \"${sourceKind}\" must not fabricate Seed lineage`);\n }\n if (typeof provenance.source !== \"string\" || provenance.source.length === 0) {\n errors.push(`${joined}: provenance.sourceKind \"${sourceKind}\" must declare provenance.source`);\n }\n if (typeof provenance.rationale !== \"string\" || provenance.rationale.length === 0) {\n errors.push(`${joined}: provenance.sourceKind \"${sourceKind}\" must declare provenance.rationale`);\n }\n}\n\n/** T3 角色全集(qw 路径),由 FIGMA_T3_COLOR_ROLES 投影。 */\nexport function figmaT3RolePaths(): string[] {\n return Object.keys(FIGMA_T3_COLOR_ROLES).map((role) => pathKey([FIGMA_COLOR_PREFIX, \"t3\", ...role.split(\".\")]));\n}\n\nexport function validateFigmaColorTokens(doc: unknown): FigmaColorTokenValidationResult {\n const errors: string[] = [];\n const leaves = collectLeaves(doc)\n .map((leaf) => ({ ...leaf, qwPath: qwPath(leaf.path) }))\n .filter((leaf): leaf is TokenLeaf & { qwPath: string[] } => leaf.qwPath != null);\n\n const byQwPath = new Map<string, TokenLeaf & { qwPath: string[] }>();\n for (const leaf of leaves) {\n const key = pathKey(leaf.qwPath);\n if (byQwPath.has(key)) errors.push(`${key}: duplicated token path`);\n byQwPath.set(key, leaf);\n validateNoUnexpectedName(leaf.qwPath, errors);\n }\n\n const t1 = leaves.filter((leaf) => leaf.qwPath[1] === \"t1\");\n const t2 = leaves.filter((leaf) => leaf.qwPath[1] === \"t2\");\n const t3 = leaves.filter((leaf) => leaf.qwPath[1] === \"t3\");\n const unknownLayers = leaves.filter((leaf) => ![\"t1\", \"t2\", \"t3\"].includes(leaf.qwPath[1] ?? \"\"));\n for (const leaf of unknownLayers) errors.push(`${pathKey(leaf.qwPath)}: unknown Color token layer`);\n\n const t1Keys = new Set<string>();\n for (const leaf of t1) {\n const [, , key, ...rest] = leaf.qwPath;\n const joined = pathKey(leaf.qwPath);\n if (rest.length > 0 || !key) errors.push(`${joined}: T1 token must be qw/t1/{seed}`);\n if (key && !T1_SET.has(key)) errors.push(`${joined}: unexpected T1 seed \"${key}\"`);\n if (!isSolidColorValue(leaf.value)) errors.push(`${joined}: T1 seed must be a solid color with alpha = 1`);\n if (key) t1Keys.add(key);\n }\n const missingT1 = T1_COLOR_KEYS.filter((key) => !t1Keys.has(key));\n const extraT1 = [...t1Keys].filter((key) => !T1_SET.has(key));\n if (missingT1.length) errors.push(`qw.t1: missing required seeds ${missingT1.join(\", \")}`);\n if (extraT1.length) errors.push(`qw.t1: unexpected seeds ${extraT1.join(\", \")}`);\n\n const t2BySeed = new Map<string, Set<string>>();\n for (const seed of T1_COLOR_KEYS) t2BySeed.set(seed, new Set());\n for (const leaf of t2) {\n const [, , seed, step, ...rest] = leaf.qwPath;\n const joined = pathKey(leaf.qwPath);\n if (rest.length > 0 || !seed || !step) errors.push(`${joined}: T2 token must be qw/t2/{seed}/{base|alpha|oklch-step}`);\n if (seed && !T1_SET.has(seed)) errors.push(`${joined}: T2 seed \"${seed}\" must exist in T1`);\n const stepKind = step ? classifyT2Step(step) : null;\n if (step && !stepKind) errors.push(`${joined}: unsupported T2 step \"${step}\"`);\n if (stepKind === \"pure\" && seed && !T2_PURE_SEED_SET.has(seed)) {\n errors.push(`${joined}: \"pure\" step is only provided for seeds ${[...T2_PURE_SEED_SET].join(\", \")}`);\n }\n if (!isColorLikeValue(leaf.value) && step !== \"base\") errors.push(`${joined}: T2 token must carry a concrete color value`);\n if (seed && step && T1_SET.has(seed) && stepKind) {\n t2BySeed.get(seed)!.add(step);\n validateT2Provenance(leaf, seed, step, errors);\n }\n }\n for (const seed of T1_COLOR_KEYS) {\n const steps = t2BySeed.get(seed)!;\n const missingAlpha = T2_ALPHA_KEYS.filter((step) => !steps.has(step));\n const missingOklch = T2_OKLCH_STEP_KEYS.filter((step) => !steps.has(step));\n const unexpected = [...steps].filter((step) => !classifyT2Step(step));\n if (!steps.has(\"base\")) errors.push(`qw.t2.${seed}: missing base token`);\n if (missingAlpha.length) errors.push(`qw.t2.${seed}: missing alpha steps ${missingAlpha.join(\", \")}`);\n if (missingOklch.length) errors.push(`qw.t2.${seed}: missing OKLCH steps ${missingOklch.join(\", \")}`);\n if (unexpected.length) errors.push(`qw.t2.${seed}: unexpected steps ${unexpected.join(\", \")}`);\n }\n\n const expectedT3 = new Set(figmaT3RolePaths());\n const actualT3 = new Set<string>();\n for (const leaf of t3) {\n const joined = pathKey(leaf.qwPath);\n actualT3.add(joined);\n validateT3Path(leaf.qwPath, errors);\n if (!expectedT3.has(joined)) errors.push(`${joined}: unexpected T3 role (not in the 60-role Figma set)`);\n const modes = modesOf(leaf);\n const light = refToPath(modes.light);\n const dark = refToPath(modes.dark);\n if (!light || !dark) {\n errors.push(`${joined}: T3 token must declare both light and dark mode references`);\n continue;\n }\n for (const [modeName, ref] of [\n [\"light\", light],\n [\"dark\", dark],\n ] as const) {\n if (ref[0] !== FIGMA_COLOR_PREFIX || ref[1] !== \"t2\") {\n errors.push(`${joined}: ${modeName} mode must reference a T2 token`);\n } else if (!byQwPath.has(pathKey(ref))) {\n errors.push(`${joined}: ${modeName} mode references missing token {${pathKey(ref)}}`);\n }\n }\n }\n const missingT3 = [...expectedT3].filter((role) => !actualT3.has(role));\n if (missingT3.length) errors.push(`qw.t3: missing required roles ${missingT3.join(\", \")}`);\n\n return {\n ok: errors.length === 0,\n errors,\n counts: { t1: t1.length, t2: t2.length, t3: t3.length },\n };\n}\n\nexport function assertFigmaColorTokens(doc: unknown): void {\n const result = validateFigmaColorTokens(doc);\n if (!result.ok) {\n throw new Error(`Invalid Figma Color tokens:\\n${result.errors.map((error) => `- ${error}`).join(\"\\n\")}`);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["round4","NS"],"sources":["../src/seed/index.json","../src/color-architecture.ts","../src/seed/index.ts","../src/schema.ts","../src/color.ts","../src/derive/oklch.ts","../src/derive/naming.ts","../src/derive/reference.ts","../src/derive/semantic.ts","../src/derive/index.ts","../src/derive/live-css.ts","../src/figma/color-snapshot.ts","../src/figma/color-contract.ts"],"sourcesContent":["","export const FIGMA_COLOR_COLLECTION = \"Color\";\nexport const FIGMA_COLOR_PREFIX = \"qw\";\n\nexport const T1_COLOR_KEYS = [\n \"brand\",\n \"black\",\n \"white\",\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"cyan\",\n \"blue\",\n \"purple\",\n \"brown\",\n] as const;\n\nexport type T1ColorKey = (typeof T1_COLOR_KEYS)[number];\n\nexport const FIGMA_T1_SEED_HEX: Record<T1ColorKey, string> = {\n brand: \"#0011FF\",\n black: \"#222222\",\n white: \"#FFFFFF\",\n gray: \"#999999\",\n red: \"#FF4040\",\n orange: \"#FF6B3F\",\n yellow: \"#FFD575\",\n green: \"#1F993F\",\n cyan: \"#29BECC\",\n blue: \"#0D53FF\",\n purple: \"#432CDB\",\n brown: \"#B45E06\",\n};\n\nexport const T2_ALPHA_STEPS = [5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100] as const;\nexport const T2_ALPHA_KEYS = T2_ALPHA_STEPS.map((step) => `a${step}`) as [\n \"a5\",\n \"a10\",\n \"a20\",\n \"a30\",\n \"a40\",\n \"a50\",\n \"a60\",\n \"a70\",\n \"a80\",\n \"a90\",\n \"a100\",\n];\n\nexport type T2AlphaStep = (typeof T2_ALPHA_STEPS)[number];\nexport type T2AlphaKey = (typeof T2_ALPHA_KEYS)[number];\n\nexport const T2_OKLCH_STEPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const;\nexport type T2OklchStep = (typeof T2_OKLCH_STEPS)[number];\n\nexport const FIGMA_T2_SOLID_SCALE: Record<T1ColorKey, Record<T2OklchStep, string>> = {\n brand: {\n 50: \"#F2F6FF\",\n 100: \"#E6ECFF\",\n 200: \"#C4D8FF\",\n 300: \"#9DBDFF\",\n 400: \"#6C9AFF\",\n 500: \"#426EFF\",\n 600: \"#1B57FF\",\n 700: \"#002CE8\",\n 800: \"#001A99\",\n 900: \"#000540\",\n },\n black: {\n 50: \"#F6F6F6\",\n 100: \"#EBEBEB\",\n 200: \"#D7D7D7\",\n 300: \"#BEBEBE\",\n 400: \"#9E9E9E\",\n 500: \"#868686\",\n 600: \"#6F6F6F\",\n 700: \"#555555\",\n 800: \"#353535\",\n 900: \"#121212\",\n },\n white: {\n 50: \"#F6F6F6\",\n 100: \"#EBEBEB\",\n 200: \"#D7D7D7\",\n 300: \"#BEBEBE\",\n 400: \"#9E9E9E\",\n 500: \"#868686\",\n 600: \"#6F6F6F\",\n 700: \"#555555\",\n 800: \"#353535\",\n 900: \"#121212\",\n },\n gray: {\n 50: \"#F6F6F6\",\n 100: \"#EEEEEE\",\n 200: \"#E0E0E0\",\n 300: \"#CCCCCC\",\n 400: \"#A2A9B6\",\n 500: \"#888E99\",\n 600: \"#666666\",\n 700: \"#3A3A3A\",\n 800: \"#2D2D2D\",\n 900: \"#202020\",\n },\n red: {\n 50: \"#FFF3F1\",\n 100: \"#FFE7E4\",\n 200: \"#FFC8C2\",\n 300: \"#FFA097\",\n 400: \"#FF5745\",\n 500: \"#FF4D4D\",\n 600: \"#CF081E\",\n 700: \"#A30013\",\n 800: \"#6A0009\",\n 900: \"#2A0001\",\n },\n orange: {\n 50: \"#FFF3EF\",\n 100: \"#FFE5DD\",\n 200: \"#FFC9B9\",\n 300: \"#FFA287\",\n 400: \"#F76F47\",\n 500: \"#FF764D\",\n 600: \"#C03800\",\n 700: \"#962A00\",\n 800: \"#611800\",\n 900: \"#260500\",\n },\n yellow: {\n 50: \"#FFF5DF\",\n 100: \"#FFE9B9\",\n 200: \"#F4D38B\",\n 300: \"#DCB96B\",\n 400: \"#BE9940\",\n 500: \"#A78013\",\n 600: \"#8B6900\",\n 700: \"#6C5100\",\n 800: \"#453200\",\n 900: \"#191000\",\n },\n green: {\n 50: \"#E2FFE4\",\n 100: \"#BCFFC3\",\n 200: \"#9BEFA5\",\n 300: \"#7BD688\",\n 400: \"#52B764\",\n 500: \"#2C9F47\",\n 600: \"#068631\",\n 700: \"#006823\",\n 800: \"#004213\",\n 900: \"#001704\",\n },\n cyan: {\n 50: \"#E0FCFF\",\n 100: \"#BAF8FF\",\n 200: \"#91EAF2\",\n 300: \"#65D0DC\",\n 400: \"#2FB2BE\",\n 500: \"#0098A4\",\n 600: \"#007E88\",\n 700: \"#006169\",\n 800: \"#003D43\",\n 900: \"#001518\",\n },\n blue: {\n 50: \"#EBF5FF\",\n 100: \"#E7F1FF\",\n 200: \"#D6EBFF\",\n 300: \"#9CBEFF\",\n 400: \"#3086FF\",\n 500: \"#1677FF\",\n 600: \"#266FFF\",\n 700: \"#003DB8\",\n 800: \"#001D66\",\n 900: \"#000A3A\",\n },\n purple: {\n 50: \"#F3F5FF\",\n 100: \"#E6EAFF\",\n 200: \"#CDD5FF\",\n 300: \"#A699FF\",\n 400: \"#8692FF\",\n 500: \"#6B71FF\",\n 600: \"#5550F2\",\n 700: \"#4135C9\",\n 800: \"#280B96\",\n 900: \"#0C0041\",\n },\n brown: {\n 50: \"#FFF3EC\",\n 100: \"#FFE6D5\",\n 200: \"#FFCBA8\",\n 300: \"#F8A971\",\n 400: \"#DA8749\",\n 500: \"#C36D24\",\n 600: \"#A75600\",\n 700: \"#824100\",\n 800: \"#542800\",\n 900: \"#200B00\",\n },\n};\n\n/**\n * Figma「Color Token System」T3 语义角色表(60 个,light/dark 均引用 T2 路径)。\n * 与 Figma 节点 22258:49986 逐条对齐;`effect.shadow.*.color` 为复合阴影的颜色\n * 分量(对应 Figma 变量 `--qw-sem-effect-shadow-*-color`)。\n */\nexport const FIGMA_T3_COLOR_ROLES = {\n \"surface.base\": { light: \"color.white.base\", dark: \"color.black.base\" },\n \"surface.subtle\": { light: \"color.gray.50\", dark: \"color.gray.900\" },\n \"surface.elevated\": { light: \"color.white.base\", dark: \"color.gray.800\" },\n \"surface.header\": { light: \"color.gray.100\", dark: \"color.gray.700\" },\n \"surface.brand-subtle\": { light: \"color.blue.50\", dark: \"color.blue.800\" },\n \"surface.canvas\": { light: \"color.white.base\", dark: \"color.black.900\" },\n \"surface.sunken\": { light: \"color.gray.100\", dark: \"color.gray.800\" },\n \"surface.selected\": { light: \"color.black.a5\", dark: \"color.white.a10\" },\n \"surface.inverse\": { light: \"color.black.800\", dark: \"color.black.800\" },\n \"surface.canvas-subtle\": { light: \"color.gray.50\", dark: \"color.black.900\" },\n\n \"content.primary\": { light: \"color.black.base\", dark: \"color.white.base\" },\n \"content.secondary\": { light: \"color.gray.600\", dark: \"color.gray.base\" },\n \"content.tertiary\": { light: \"color.gray.base\", dark: \"color.gray.600\" },\n \"content.placeholder\": { light: \"color.gray.300\", dark: \"color.white.a30\" },\n \"content.intro\": { light: \"color.gray.400\", dark: \"color.gray.500\" },\n \"content.disabled\": { light: \"color.black.a30\", dark: \"color.white.a30\" },\n \"content.link\": { light: \"color.blue.700\", dark: \"color.blue.400\" },\n \"content.icon-subtle\": { light: \"color.black.a5\", dark: \"color.white.a10\" },\n \"content.inverse\": { light: \"color.white.base\", dark: \"color.black.base\" },\n \"content.on-solid\": { light: \"color.white.base\", dark: \"color.white.base\" },\n \"content.on-warning-subtle\": { light: \"color.yellow.800\", dark: \"color.yellow.200\" },\n\n \"border.default\": { light: \"color.gray.100\", dark: \"color.gray.700\" },\n \"border.strong\": { light: \"color.gray.300\", dark: \"color.gray.600\" },\n \"border.focus\": { light: \"color.brand.base\", dark: \"color.brand.500\" },\n \"border.subtle\": { light: \"color.black.a5\", dark: \"color.white.a5\" },\n \"border.disabled\": { light: \"color.black.a10\", dark: \"color.white.a10\" },\n \"border.on-media\": { light: \"color.white.base\", dark: \"color.white.base\" },\n\n \"fill.subtle\": { light: \"color.gray.50\", dark: \"color.white.a20\" },\n \"fill.hover\": { light: \"color.gray.100\", dark: \"color.gray.800\" },\n \"fill.active\": { light: \"color.blue.50\", dark: \"color.blue.800\" },\n \"fill.disabled\": { light: \"color.gray.50\", dark: \"color.gray.900\" },\n \"fill.track\": { light: \"color.black.a10\", dark: \"color.white.a20\" },\n\n \"action.brand\": { light: \"color.brand.base\", dark: \"color.brand.500\" },\n \"action.product\": { light: \"color.blue.base\", dark: \"color.blue.600\" },\n \"action.selected\": { light: \"color.blue.a20\", dark: \"color.blue.a40\" },\n \"action.inverse\": { light: \"color.white.base\", dark: \"color.black.base\" },\n\n \"control-action.brand.subtle\": { light: \"color.brand.a10\", dark: \"color.brand.a20\" },\n \"control-action.product.subtle\": { light: \"color.blue.a10\", dark: \"color.blue.a20\" },\n \"control-action.danger.default\": { light: \"color.red.400\", dark: \"color.red.400\" },\n \"control-action.danger.subtle\": { light: \"color.red.a10\", dark: \"color.red.a20\" },\n \"control-action.neutral.subtle\": { light: \"color.black.a5\", dark: \"color.white.a10\" },\n \"control-selection.brand\": { light: \"color.brand.a10\", dark: \"color.brand.a20\" },\n \"control-selection.product\": { light: \"color.blue.a10\", dark: \"color.blue.a20\" },\n \"selection.text-background\": { light: \"color.blue.a20\", dark: \"color.blue.a40\" },\n\n \"status.success\": { light: \"color.green.base\", dark: \"color.green.base\" },\n \"status.warning\": { light: \"color.yellow.base\", dark: \"color.yellow.base\" },\n \"status.danger\": { light: \"color.red.400\", dark: \"color.red.400\" },\n \"status.info\": { light: \"color.blue.base\", dark: \"color.blue.600\" },\n \"status.success-subtle\": { light: \"color.green.a10\", dark: \"color.green.a20\" },\n \"status.warning-subtle\": { light: \"color.yellow.a20\", dark: \"color.yellow.a20\" },\n \"status.danger-subtle\": { light: \"color.red.a10\", dark: \"color.red.a20\" },\n \"status.info-subtle\": { light: \"color.blue.a10\", dark: \"color.blue.a20\" },\n\n \"overlay.scrim\": { light: \"color.black.a50\", dark: \"color.black.a70\" },\n \"overlay.guide\": { light: \"color.blue.a10\", dark: \"color.blue.a20\" },\n \"overlay.media-subtle\": { light: \"color.black.a40\", dark: \"color.black.a40\" },\n \"overlay.media-strong\": { light: \"color.black.a50\", dark: \"color.black.a50\" },\n\n shadow: { light: \"color.black.a10\", dark: \"color.black.a50\" },\n \"effect.shadow.card.color\": { light: \"color.black.a10\", dark: \"color.black.a50\" },\n \"effect.shadow.floating.color\": { light: \"color.black.a10\", dark: \"color.black.a50\" },\n \"effect.shadow.dialog.color\": { light: \"color.black.a10\", dark: \"color.black.a50\" },\n} as const;\n","import raw from \"./index.json\" with { type: \"json\" };\nimport { T1_COLOR_KEYS } from \"../color-architecture.js\";\nimport type { Seed } from \"../schema.js\";\nimport type { SeedColorValue } from \"../color.js\";\n\n/**\n * 把设计交付的 DTCG seed (嵌套 $value,五大类目) 拍平成 derive() 可消费的\n * Seed 形状。DTCG 是设计/Figma 的事实来源;这里是工程读取它的唯一入口。\n * 数值与 packages/tokens/design/seed.tokens.json 逐条一致(parity 测试保证不漂移)。\n */\nconst s = raw.qw.seed;\n\ntype Dimension = { value: number; unit: string };\nconst px = (d: Dimension) => `${d.value}${d.unit}`;\nconst color = (v: unknown) => v as SeedColorValue;\n\nexport const defaultSeed: Seed = {\n color: Object.fromEntries(T1_COLOR_KEYS.map((key) => [key, color(s.color[key].$value)])) as Seed[\"color\"],\n size: {\n spacing: {\n step: px(s.size.spacing.step.$value),\n },\n borderWidth: {\n hairline: px(s.size.borderWidth.hairline.$value),\n },\n radius: {\n base: px(s.size.radius.base.$value),\n full: px(s.size.radius.full.$value),\n },\n controlSize: {\n base: px(s.size.controlSize.base.$value),\n },\n iconSize: {\n base: px(s.size.iconSize.base.$value),\n },\n opacity: {\n disabled: s.size.opacity.disabled.$value,\n alphaStep: s.size.opacity.alphaStep.$value,\n },\n zIndex: {\n step: s.size.zIndex.step.$value,\n },\n },\n typography: {\n fontFamily: {\n text: s.typography.fontFamily.text.$value,\n number: s.typography.fontFamily.number.$value,\n code: s.typography.fontFamily.code.$value,\n textMacLatin: s.typography.fontFamily.textMacLatin.$value,\n textMacZh: s.typography.fontFamily.textMacZh.$value,\n textMacJa: s.typography.fontFamily.textMacJa.$value,\n textWindowsLatin: s.typography.fontFamily.textWindowsLatin.$value,\n textWindowsZh: s.typography.fontFamily.textWindowsZh.$value,\n textWindowsJa: s.typography.fontFamily.textWindowsJa.$value,\n },\n fontWeight: {\n regular: s.typography.fontWeight.regular.$value,\n medium: s.typography.fontWeight.medium.$value,\n semibold: s.typography.fontWeight.semibold.$value,\n },\n fontSize: {\n base: px(s.typography.fontSize.base.$value),\n },\n lineHeight: {\n base: s.typography.lineHeight.base.$value,\n },\n letterSpacing: {\n base: px(s.typography.letterSpacing.base.$value),\n },\n },\n motion: {\n duration: {\n base: px(s.motion.duration.base.$value),\n },\n easing: {\n standard: s.motion.easing.standard.$value as [number, number, number, number],\n },\n },\n effect: {\n shadow: {\n base: {\n color: color(s.effect.shadow.base.$value.color),\n offsetX: px(s.effect.shadow.base.$value.offsetX),\n offsetY: px(s.effect.shadow.base.$value.offsetY),\n blur: px(s.effect.shadow.base.$value.blur),\n spread: px(s.effect.shadow.base.$value.spread),\n },\n },\n },\n};\n","import { z } from \"zod\";\nimport { T1_COLOR_KEYS } from \"./color-architecture.js\";\n\n/**\n * seedColor — DTCG Color module 结构化颜色(不再接受十六进制字符串)。\n * - srgb:components 各分量 0–1(写 0–255 会被拒绝,这是常见错误)。\n * - oklch:l 0–1、c ≥0、h 为角度;用于\"设计师直接以感知空间拍板\"的输入。\n */\nconst seedColor = z\n .object({\n colorSpace: z.enum([\"srgb\", \"oklch\"]),\n components: z.tuple([z.number(), z.number(), z.number()]),\n alpha: z.number().min(0).max(1),\n })\n .superRefine((c, ctx) => {\n if (c.colorSpace === \"srgb\") {\n if (c.components.some((v) => v < 0 || v > 1)) {\n ctx.addIssue({\n code: \"custom\",\n message: \"srgb components 必须是 0–1(不是 0–255),例如 #0011ff → [0, 0.0667, 1]\",\n });\n }\n } else {\n const [l, chroma] = c.components;\n if (l < 0 || l > 1 || chroma < 0) {\n ctx.addIssue({ code: \"custom\", message: \"oklch 要求 l ∈ [0,1] 且 c ≥ 0\" });\n }\n }\n });\n\nconst cubicBezier = z.tuple([z.number(), z.number(), z.number(), z.number()]);\n\nconst fontStack = z.array(z.string()).min(1);\nconst colorSeedShape = Object.fromEntries(T1_COLOR_KEYS.map((key) => [key, seedColor])) as Record<\n (typeof T1_COLOR_KEYS)[number],\n typeof seedColor\n>;\n\n/**\n * SeedSchema — T1 Seed 与兼容输入的运行时校验(RFC 0001 §2.1,v4 修订)。\n *\n * 五大类目 color/size/typography/motion/effect,字段结构对齐\n * packages/tokens/design/seed.tokens.json。部分已不再驱动 canonical T2 的字段暂时\n * 保留为兼容输入;新 Reference 不得为了形式完整继续扩充伪 Seed。\n *\n * v3 变化:\n * - 颜色全部结构化(DTCG Color module,支持 srgb/oklch)。\n * - radius/controlSize/iconSize 只留 base 锚点(full 是独立的裁切基准决策),\n * sm/lg 由 Reference 层按既定公式派生。\n * - lineHeight 从 size 移入 typography;新增 letterSpacing.base 锚点。\n * - fontFamily 换 text/number/code 三族 + 平台/语言变体(textMacXx、textWindowsXx)。\n */\nexport const SeedSchema = z.object({\n color: z.object(colorSeedShape),\n size: z.object({\n spacing: z.object({\n step: z.string(),\n }),\n borderWidth: z.object({\n hairline: z.string(),\n }),\n radius: z.object({\n /** 控件基准圆角;Reference 派生 sm=×0.5 / md=×1 / lg=×1.75。 */\n base: z.string(),\n /** 药丸/圆形裁切基准(独立设计决策,不从 base 派生)。 */\n full: z.string(),\n }),\n controlSize: z.object({\n /** md 控件高度锚点;sm/lg = base ∓ spacing.step × 2。 */\n base: z.string(),\n }),\n iconSize: z.object({\n /** md 图标尺寸锚点;sm/lg = base ∓ spacing.step。 */\n base: z.string(),\n }),\n opacity: z.object({\n disabled: z.number().min(0).max(1),\n alphaStep: z.number().min(0).max(1),\n }),\n zIndex: z.object({\n step: z.number().int().positive(),\n }),\n }),\n typography: z.object({\n fontFamily: z.object({\n /** 通用正文栈(跨平台缺省)。 */\n text: fontStack,\n /** 数字/数据展示栈。 */\n number: fontStack,\n /** 代码等宽栈。 */\n code: fontStack,\n /** 平台/语言细分变体,供上层按 UA/lang 重映射 text 角色。 */\n textMacLatin: fontStack,\n textMacZh: fontStack,\n textMacJa: fontStack,\n textWindowsLatin: fontStack,\n textWindowsZh: fontStack,\n textWindowsJa: fontStack,\n }),\n fontWeight: z.object({\n /** @deprecated T2 Font Weight 已是 standard-constant;保留到下一次 Seed API 主版本清理。 */\n regular: z.number(),\n /** @deprecated T2 Font Weight 已是 standard-constant;保留到下一次 Seed API 主版本清理。 */\n medium: z.number(),\n /** @deprecated T2 Font Weight 已是 standard-constant;保留到下一次 Seed API 主版本清理。 */\n semibold: z.number(),\n }),\n fontSize: z.object({\n base: z.string(),\n }),\n lineHeight: z.object({\n base: z.number().positive(),\n }),\n letterSpacing: z.object({\n base: z.string(),\n }),\n }),\n motion: z.object({\n duration: z.object({\n base: z.string(),\n }),\n easing: z.object({\n standard: cubicBezier,\n }),\n }),\n effect: z.object({\n shadow: z.object({\n base: z.object({\n color: seedColor,\n offsetX: z.string(),\n offsetY: z.string(),\n blur: z.string(),\n spread: z.string(),\n }),\n }),\n }),\n});\n\nexport type SeedInput = z.input<typeof SeedSchema>;\nexport type Seed = z.infer<typeof SeedSchema>;\n\n/**\n * validateSeed — ConfigProvider 在 dev 模式调用;生产环境可裁掉,不带 zod 体积。\n * 解析失败抛错,错误信息直接定位到字段。\n */\nexport function validateSeed(seed: unknown): Seed {\n const r = SeedSchema.safeParse(seed);\n if (!r.success) {\n console.error(\"[qw] invalid seed:\", r.error.format());\n throw new Error(\"invalid seed\");\n }\n return r.data;\n}\n","import { formatHex, parse, rgb } from \"culori\";\n\n/**\n * SeedColorValue — DTCG Color module 结构化颜色(design-tokens.org 2025.10)。\n * Seed 层颜色不再用十六进制字符串:结构化后输出 Web / iOS / Android / Figma\n * 插件 / 文档都更稳定,且支持 oklch 等更高级色彩空间直接作为设计输入。\n *\n * - srgb:components = [r, g, b],各分量 0–1(不是 0–255)。\n * - oklch:components = [l, c, h](l 0–1、c ≥0、h 角度)。\n */\nexport interface SeedColorValue {\n colorSpace: \"srgb\" | \"oklch\";\n components: [number, number, number];\n alpha: number;\n}\n\ntype CuloriColor =\n | { mode: \"rgb\"; r: number; g: number; b: number; alpha?: number }\n | { mode: \"oklch\"; l: number; c: number; h: number; alpha?: number };\n\n/** SeedColorValue → culori 可消费的颜色对象。 */\nexport function toCulori(c: SeedColorValue): CuloriColor {\n if (c.colorSpace === \"srgb\") {\n return { mode: \"rgb\", r: c.components[0], g: c.components[1], b: c.components[2], alpha: c.alpha };\n }\n return { mode: \"oklch\", l: c.components[0], c: c.components[1], h: c.components[2], alpha: c.alpha };\n}\n\n// 6 位小数:精度足以保证 hex → 结构化 → ramp 与直接 hex → ramp 全阶一致。\nconst round6 = (n: number) => Math.round(n * 1000000) / 1000000;\n\n/** 十六进制(#rgb / #rrggbb)→ 结构化 srgb SeedColorValue。编辑器色板输入的桥。 */\nexport function hexToSeedColor(hex: string): SeedColorValue {\n const parsed = rgb(parse(hex));\n if (!parsed) throw new Error(`[qw] 无法解析颜色: ${hex}`);\n return {\n colorSpace: \"srgb\",\n components: [round6(parsed.r), round6(parsed.g), round6(parsed.b)],\n alpha: parsed.alpha ?? 1,\n };\n}\n\n/** 结构化颜色 → #rrggbb(丢 alpha;oklch 会先转 sRGB)。展示/对比度计算用。 */\nexport function seedColorToHex(c: SeedColorValue): string {\n const converted = rgb(toCulori(c));\n if (!converted) throw new Error(`[qw] 无法转换颜色: ${JSON.stringify(c)}`);\n return formatHex(converted) ?? \"#000000\";\n}\n\n/**\n * 结构化颜色 → CSS 颜色字符串。srgb 且不透明输出 hex;srgb 半透明输出\n * `rgb(r g b / a)`;oklch 保持原生 `oklch(l c h / a)`(relative color 派生保真)。\n */\nexport function seedColorToCss(c: SeedColorValue): string {\n if (c.colorSpace === \"oklch\") {\n const [l, ch, h] = c.components;\n return c.alpha >= 1 ? `oklch(${l} ${ch} ${h})` : `oklch(${l} ${ch} ${h} / ${c.alpha})`;\n }\n if (c.alpha >= 1) return seedColorToHex(c);\n const [r, g, b] = c.components.map((v) => Math.round(v * 255));\n return `rgb(${r} ${g} ${b} / ${c.alpha})`;\n}\n","import { oklch, formatHex, clampChroma, parse } from \"culori\";\nimport { toCulori, type SeedColorValue } from \"../color.js\";\n\n/** 10 档 token: 50 / 100 / 200 / ... / 900 */\nexport const STEPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const;\nexport type Step = (typeof STEPS)[number];\n\n/**\n * OKLCH L 目标曲线 — 感知均匀的亮度阶梯 (0..1)。\n * 50 最亮 → 900 最暗;端点 0.972 / 0.18 避免纯白纯黑导致对比\"塌\"。\n * (替换原 HSV:HSV 在感知上不均匀,深档发灰/浅档发白,WCAG 易不过。)\n *\n * 导出供 live-css 生成器复用:CSS relative color 语法\n * `oklch(from var(--seed) L calc(c * f) h)` 的 L/f 常量与这里同源。\n */\nexport const L_TARGETS: Record<Step, number> = {\n 50: 0.972,\n 100: 0.94,\n 200: 0.88,\n 300: 0.8,\n 400: 0.7,\n 500: 0.62,\n 600: 0.54,\n 700: 0.45,\n 800: 0.33,\n 900: 0.18,\n};\n\n/**\n * chroma 端点衰减 — 在 L 的亮/暗两端轻微衰减 chroma,避免 out-of-gamut;\n * 中段 (L≈0.6) 保留全 chroma。\n */\nexport function chromaFactor(l: number): number {\n // 距离中点 0.6 越远,衰减越多;端点约保留 55%。\n const d = Math.abs(l - 0.6) / 0.6;\n return 1 - 0.45 * Math.min(1, d);\n}\n\nexport type Ramp = Record<Step, string>;\n\n/**\n * 给一个 seed 颜色(结构化 SeedColorValue 或 CSS 颜色字符串),算 10 阶 ramp。\n * L 走目标曲线,hue 固定,chroma 端点衰减后再 clampChroma 收进 sRGB 色域。\n */\nexport function ramp(seedColor: SeedColorValue | string): Ramp {\n const input = typeof seedColor === \"string\" ? parse(seedColor) : toCulori(seedColor);\n const base = oklch(input);\n if (!base) throw new Error(`[qw] 无法解析颜色: ${JSON.stringify(seedColor)}`);\n const baseC = base.c ?? 0;\n const baseH = base.h ?? 0;\n\n const out = {} as Ramp;\n for (const step of STEPS) {\n const l = L_TARGETS[step];\n const c = baseC * chromaFactor(l);\n const inGamut = clampChroma({ mode: \"oklch\", l, c, h: baseH }, \"oklch\");\n out[step] = formatHex(inGamut) ?? formatHex(base) ?? \"#000000\";\n }\n return out;\n}\n\n/** 相对亮度 (WCAG) — 用于对偶/校验时的对比度判断。 */\nexport function relativeLuminance(hex: string): number {\n const srgb = parse(hex) as { r: number; g: number; b: number } | undefined;\n if (!srgb) return 0;\n const lin = (v: number) => (v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4));\n return 0.2126 * lin(srgb.r) + 0.7152 * lin(srgb.g) + 0.0722 * lin(srgb.b);\n}\n\n/** WCAG 对比度 (1..21)。 */\nexport function contrastRatio(fg: string, bg: string): number {\n const l1 = relativeLuminance(fg);\n const l2 = relativeLuminance(bg);\n const [hi, lo] = l1 > l2 ? [l1, l2] : [l2, l1];\n return (hi + 0.05) / (lo + 0.05);\n}\n","/**\n * T1/T2/T3 token 的 CSS 变量命名:`--qw-{layer}-{kebab(path)}`。\n *\n * `layer` 区分 Seed(\"seed\",仅出现在 live CSS 产物里、供响应式级联的锚点变量)、\n * Reference(\"ref\",原子层,组件禁止直接引用)与 Semantic(\"sem\",组件唯一\n * 合法消费入口)。`path` 的每个 segment 是内部 TS 属性名(天然 camelCase,\n * 如 \"brandSubtle\"/\"controlSize\"),命名前需转成 kebab-case 才能对齐\n * packages/tokens/design/*.tokens.json 里锁定的 cssVar 字符串。\n *\n * 例:toVar(\"sem\", [\"color\",\"surface\",\"brandSubtle\"]) → \"--qw-sem-color-surface-brand-subtle\"\n * toVar(\"sem\", [\"size\",\"controlHeight\",\"sm\"]) → \"--qw-sem-size-control-height-sm\"\n * toVar(\"seed\", [\"color\",\"brand\"]) → \"--qw-seed-color-brand\"\n *\n * 这是唯一命名口子,运行时 flat var map、build-tokens.ts 的 CSS 出口与\n * live CSS 生成器共用。\n */\nexport type Layer = \"seed\" | \"ref\" | \"sem\";\n\nfunction kebab(segment: string): string {\n return segment.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nexport function toVar(layer: Layer, path: string[]): string {\n return `--qw-${layer}-${path.map(kebab).join(\"-\")}`;\n}\n","import { ramp, L_TARGETS, chromaFactor, type Step } from \"./oklch.js\";\nimport { toVar } from \"./naming.js\";\nimport {\n FIGMA_T2_SOLID_SCALE,\n T1_COLOR_KEYS,\n T2_ALPHA_STEPS,\n T2_OKLCH_STEPS,\n type T1ColorKey,\n type T2OklchStep,\n} from \"../color-architecture.js\";\nimport { seedColorToCss, seedColorToHex, type SeedColorValue } from \"../color.js\";\nimport type { Seed } from \"../schema.js\";\n\n/**\n * T2 Reference(Primitive)派生 —— RFC 0001 §2.1,v3 声明式重构。\n *\n * v3 核心变化:每条 Reference token 的派生规则不再是不透明的 `(seed) => string`\n * 函数,而是可机器读取的 `Derivation` AST——同一份 AST 同时驱动:\n * 1. 运行时求值(evaluateDerivation → tokens);\n * 2. DTCG design 文件生成(scripts/export-design-tokens.ts,$value 全部结构化引用);\n * 3. live CSS 生成(derive/live-css.ts,relative color / calc 表达式);\n * 4. Token Studio 的派生公式展示(formatDerivation)。\n *\n * `sourceKind` 与 `seedRefs` 由 AST 自动推导(sourceKindOf / seedRefsOf);\n * Seed 来源类必须有血缘,标准常量与外部标准则记录来源/理由,不伪造 Seed。\n * 颜色层对齐 Figma `Color/qw` 变量集合:\n * - T1 Seed 为 12 个单色种子;\n * - T2 Reference 为每个 seed 的 A5-A100 Alpha 通道、50-900 OKLCH 设计校准实色色阶、\n * base 引用。T2 Color 不接受零散补色或「色阶 × Alpha」组合。\n */\n\nexport type ShadowLevel = \"sm\" | \"md\" | \"lg\";\n\n/**\n * T2 Reference 的规范来源类型。\n *\n * DTCG 不要求 Reference 必须引用 Seed;它只规范 token、group 与 alias 的表达。\n * qw-ui 用本字段补足跨 Figma / code 的血缘治理:\n * - seed-alias:原样承接一个 T1;\n * - seed-derived:通过确定公式从一个或多个 T1 生成;\n * - design-calibrated:保留 T1 设计血缘,但 canonical 值由设计校准拍板;\n * - standard-constant:机械标准或数学端点,不伪造 T1;\n * - external-standard:来自外部平台/规范,由外部来源负责版本化。\n */\nexport type ReferenceSourceKind =\n | \"seed-alias\"\n | \"seed-derived\"\n | \"design-calibrated\"\n | \"standard-constant\"\n | \"external-standard\";\n\nexport type Derivation =\n /** 直通引用 Seed 字段(dimension/number/duration 字符串或数字)。 */\n | { kind: \"alias\"; seedRef: string }\n /** dimension 字符串 × factor;round:\"int\" 时四舍五入为整数(字号档位用)。 */\n | { kind: \"scale\"; seedRef: string; factor: number; round?: \"int\" }\n /** 无单位数字 × factor(zIndex 刻度)。 */\n | { kind: \"scaleNumber\"; seedRef: string; factor: number }\n /** 无单位数字 + delta(lineHeight tight/relaxed = base ∓ 0.25)。 */\n | { kind: \"offsetNumber\"; seedRef: string; delta: number }\n /** dimension + 另一 dimension × n(controlSize/iconSize sm/lg = base ∓ spacing.step × n)。 */\n | { kind: \"offsetSteps\"; seedRef: string; stepRef: string; n: number }\n /** OKLCH 感知均匀色阶(L 曲线 + chroma 端点衰减,算法见 oklch.ts)。 */\n | { kind: \"oklchRamp\"; seedRef: string; step: Step }\n /** Figma 校准后的 OKLCH 实色色阶;血缘仍指向 T1 seed,但数值由设计稿拍板。 */\n | { kind: \"figmaOklchScale\"; seedRef: string; step: T2OklchStep; value: string }\n /** T1 seed 颜色的固定 Alpha 通道。 */\n | { kind: \"seedAlpha\"; seedRef: string; alpha: number }\n /** 旧版纯黑/纯白透明度工具刻度。保留求值器兼容,不再由 T2 主链路生成。 */\n | { kind: \"alphaScale\"; channel: \"black\" | \"white\"; stepRef: string; multiplier: number }\n /** 字体栈(string[] → CSS font-family 列表)。 */\n | { kind: \"fontStack\"; seedRef: string }\n /** cubic-bezier 四元组 → CSS 函数。 */\n | { kind: \"cubicBezier\"; seedRef: string }\n /** canonical 常量(机械标准或数学端点,非主题生成参数)。 */\n | { kind: \"literal\"; value: string | number }\n /** 阴影档位:形状 = shadow.base × 档位比例,颜色 = alphaStep × 档位倍数。 */\n | { kind: \"shadowLayer\"; level: ShadowLevel };\n\nexport interface ReferenceRecipe {\n path: string[];\n cssVar: string;\n /** 规范来源;决定 seedRefs 是否必须非空。 */\n sourceKind: ReferenceSourceKind;\n /** 由 derivation 自动推导的可选 Seed 依赖(点分路径),供可追溯性校验与血缘展示。 */\n seedRefs: string[];\n /** 标准、设计稿或外部规范的可读来源;非 Seed 来源类必填。 */\n source?: string;\n /** 为什么该值属于 T2 而不是 T1 的简短依据。 */\n rationale?: string;\n derivation: Derivation;\n}\n\n/** 拍平后的 CSS 变量映射:cssVar → 字符串值(--qw-ref-* 全集)。 */\nexport type ReferenceTokens = Record<string, string>;\n\n/** 阴影形状(不含颜色),供 Semantic 层复合 effect.shadow.* 时引用固定形状字段。 */\nexport interface ShadowShape {\n offsetX: string;\n offsetY: string;\n blur: string;\n spread: string;\n}\n\nexport interface ReferenceBuild {\n recipes: ReferenceRecipe[];\n tokens: ReferenceTokens;\n shapes: {\n shadow: { sm: ShadowShape; md: ShadowShape; lg: ShadowShape };\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* Seed 取值与格式化工具 */\n/* ------------------------------------------------------------------ */\n\n/** 按点分路径读 Seed 字段(\"size.spacing.step\" → seed.size.spacing.step)。 */\nexport function seedValueAt(seed: Seed, dotted: string): unknown {\n let node: unknown = seed;\n for (const seg of dotted.split(\".\")) {\n if (node == null || typeof node !== \"object\") {\n throw new Error(`[qw] Seed 路径不存在: ${dotted}`);\n }\n node = (node as Record<string, unknown>)[seg];\n }\n if (node === undefined) throw new Error(`[qw] Seed 路径不存在: ${dotted}`);\n return node;\n}\n\nfunction parsePx(s: string): { value: number; unit: string } {\n const m = /^(-?\\d+(?:\\.\\d+)?)(.*)$/.exec(s.trim());\n if (!m) throw new Error(`[qw] 无法解析尺寸: ${s}`);\n return { value: Number(m[1]), unit: m[2] ?? \"\" };\n}\n\nconst round2 = (n: number) => Math.round(n * 100) / 100;\n\nfunction rgba(components: readonly [number, number, number], alpha: number): string {\n return `rgba(${components[0]}, ${components[1]}, ${components[2]}, ${round2(alpha)})`;\n}\n\nfunction hexRgb(hex: string): [number, number, number] {\n const m = /^#?([0-9a-f]{6})$/i.exec(hex);\n if (!m) throw new Error(`[qw] 无法解析 hex 颜色: ${hex}`);\n const n = Number.parseInt(m[1]!, 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\n\nfunction seedAlphaCss(seedColor: SeedColorValue, alpha: number): string {\n if (alpha >= 1) return seedColorToCss({ ...seedColor, alpha: 1 });\n return rgba(hexRgb(seedColorToHex(seedColor)), alpha);\n}\n\n/** 从 Seed 颜色点分路径(\"color.brand\")取 T1 键。 */\nexport function seedKeyOf(seedRef: string): T1ColorKey {\n return seedRef.split(\".\")[1] as T1ColorKey;\n}\n\nexport function formatFontFamily(list: string[]): string {\n return list.map((f) => (/[\\s./]/.test(f) ? `'${f}'` : f)).join(\", \");\n}\n\nfunction formatCubicBezier([a, b, c, d]: readonly [number, number, number, number]): string {\n return `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n}\n\n/** 阴影档位系数:形状(offset/blur/spread 缩放)+ 颜色(alphaStep 倍数)。 */\nexport const SHADOW_LEVELS: Record<ShadowLevel, { offset: number; blur: number; alphaMult: number }> = {\n sm: { offset: 0.5, blur: 0.5, alphaMult: 2 },\n md: { offset: 2, blur: 3, alphaMult: 3 },\n lg: { offset: 4, blur: 6, alphaMult: 4 },\n};\n\nfunction shadowShapeOf(seed: Seed, level: ShadowLevel): ShadowShape {\n const { offset, blur } = SHADOW_LEVELS[level];\n const base = seed.effect.shadow.base;\n const scale = (s: string, f: number) => {\n const { value, unit } = parsePx(s);\n return `${round2(value * f)}${unit}`;\n };\n return {\n offsetX: scale(base.offsetX, offset),\n offsetY: scale(base.offsetY, offset),\n blur: scale(base.blur, blur),\n spread: scale(base.spread, offset),\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* AST 求值器 / seedRefs 推导 / 公式展示 */\n/* ------------------------------------------------------------------ */\n\n/** 求值:一条 Derivation + Seed → 最终 CSS 值字符串。 */\nexport function evaluateDerivation(d: Derivation, seed: Seed): string {\n switch (d.kind) {\n case \"alias\": {\n const v = seedValueAt(seed, d.seedRef);\n if (v != null && typeof v === \"object\" && \"colorSpace\" in v) {\n return seedColorToCss(v as SeedColorValue);\n }\n return typeof v === \"number\" ? String(v) : (v as string);\n }\n case \"scale\": {\n const { value, unit } = parsePx(seedValueAt(seed, d.seedRef) as string);\n const scaled = value * d.factor;\n return `${d.round === \"int\" ? Math.round(scaled) : round2(scaled)}${unit}`;\n }\n case \"scaleNumber\":\n return String(round2((seedValueAt(seed, d.seedRef) as number) * d.factor));\n case \"offsetNumber\":\n return String(round2((seedValueAt(seed, d.seedRef) as number) + d.delta));\n case \"offsetSteps\": {\n const base = parsePx(seedValueAt(seed, d.seedRef) as string);\n const step = parsePx(seedValueAt(seed, d.stepRef) as string);\n return `${round2(base.value + step.value * d.n)}${base.unit}`;\n }\n case \"oklchRamp\":\n return ramp(seed.color[d.seedRef.split(\".\")[1] as keyof Seed[\"color\"]])[d.step];\n case \"figmaOklchScale\":\n return d.value;\n case \"seedAlpha\":\n return seedAlphaCss(seedValueAt(seed, d.seedRef) as SeedColorValue, d.alpha);\n case \"alphaScale\": {\n const step = seedValueAt(seed, d.stepRef) as number;\n const channel: [number, number, number] = d.channel === \"black\" ? [0, 0, 0] : [255, 255, 255];\n return rgba(channel, step * d.multiplier);\n }\n case \"fontStack\":\n return formatFontFamily(seedValueAt(seed, d.seedRef) as string[]);\n case \"cubicBezier\":\n return formatCubicBezier(seedValueAt(seed, d.seedRef) as [number, number, number, number]);\n case \"literal\":\n return String(d.value);\n case \"shadowLayer\": {\n const { offsetX, offsetY, blur, spread } = shadowShapeOf(seed, d.level);\n const color = rgba([0, 0, 0], seed.size.opacity.alphaStep * SHADOW_LEVELS[d.level].alphaMult);\n return `${offsetX} ${offsetY} ${blur} ${spread} ${color}`;\n }\n }\n}\n\n/** Seed 依赖推导:AST 里出现的全部 Seed 点分路径。 */\nexport function seedRefsOf(d: Derivation): string[] {\n switch (d.kind) {\n case \"alias\":\n case \"scale\":\n case \"scaleNumber\":\n case \"offsetNumber\":\n case \"oklchRamp\":\n case \"figmaOklchScale\":\n case \"seedAlpha\":\n case \"fontStack\":\n case \"cubicBezier\":\n return [d.seedRef];\n case \"offsetSteps\":\n return [d.seedRef, d.stepRef];\n case \"alphaScale\":\n return [d.stepRef];\n case \"literal\":\n return [];\n case \"shadowLayer\":\n return [\"effect.shadow.base\", \"size.opacity.alphaStep\"];\n }\n}\n\n/** Derivation AST → 规范来源分类;作为 Figma/DTCG provenance 的唯一映射口。 */\nexport function sourceKindOf(d: Derivation): ReferenceSourceKind {\n switch (d.kind) {\n case \"alias\":\n case \"fontStack\":\n case \"cubicBezier\":\n return \"seed-alias\";\n case \"figmaOklchScale\":\n return \"design-calibrated\";\n case \"literal\":\n return \"standard-constant\";\n default:\n return \"seed-derived\";\n }\n}\n\n/** 人读派生公式(Token Studio 展示用)。 */\nexport function formatDerivation(d: Derivation): string {\n const sign = (n: number) => (n >= 0 ? \"+\" : \"−\");\n switch (d.kind) {\n case \"alias\":\n case \"fontStack\":\n case \"cubicBezier\":\n return `= seed.${d.seedRef}`;\n case \"scale\":\n return `= seed.${d.seedRef} × ${d.factor}`;\n case \"scaleNumber\":\n return `= seed.${d.seedRef} × ${d.factor}`;\n case \"offsetNumber\":\n return `= seed.${d.seedRef} ${sign(d.delta)} ${Math.abs(d.delta)}`;\n case \"offsetSteps\":\n return `= seed.${d.seedRef} ${sign(d.n)} seed.${d.stepRef} × ${Math.abs(d.n)}`;\n case \"oklchRamp\":\n return `= oklch(seed.${d.seedRef}) @ L ${L_TARGETS[d.step]} · C × ${round2(chromaFactor(L_TARGETS[d.step]))}`;\n case \"figmaOklchScale\":\n return `= figma Color/qw/t2/${d.seedRef.split(\".\")[1]}/${d.step}(OKLCH 设计校准)`;\n case \"seedAlpha\":\n return `= seed.${d.seedRef} / ${round2(d.alpha * 100)}%`;\n case \"alphaScale\":\n return `= ${d.channel === \"black\" ? \"黑\" : \"白\"} / seed.${d.stepRef} × ${d.multiplier}`;\n case \"literal\":\n return `= ${d.value}(canonical 标准常量)`;\n case \"shadowLayer\": {\n const f = SHADOW_LEVELS[d.level];\n return `= seed.effect.shadow.base 形状 × {offset ${f.offset}, blur ${f.blur}} · 色 = 黑 / alphaStep × ${f.alphaMult}`;\n }\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* 14 组配方(声明式) */\n/* ------------------------------------------------------------------ */\n\nfunction ref(\n path: string[],\n derivation: Derivation,\n metadata: Partial<Pick<ReferenceRecipe, \"sourceKind\" | \"source\" | \"rationale\">> = {},\n): ReferenceRecipe {\n const { sourceKind = sourceKindOf(derivation), ...details } = metadata;\n return {\n path,\n cssVar: toVar(\"ref\", path),\n sourceKind,\n seedRefs: seedRefsOf(derivation),\n ...details,\n derivation,\n };\n}\n\nexport const RAMP_COLORS = T1_COLOR_KEYS;\n\n/** 1. 12 个 Seed ×(A5-A100 Alpha 通道 + 50-900 Figma OKLCH 校准色阶 + base)。 */\nexport function buildColorRampRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (const name of RAMP_COLORS) {\n const seedRef = `color.${name}`;\n for (const alpha of T2_ALPHA_STEPS) {\n out.push(ref([\"color\", name, `a${alpha}`], { kind: \"seedAlpha\", seedRef, alpha: alpha / 100 }));\n }\n for (const step of T2_OKLCH_STEPS) {\n out.push(\n ref(\n [\"color\", name, String(step)],\n {\n kind: \"figmaOklchScale\",\n seedRef,\n step,\n value: FIGMA_T2_SOLID_SCALE[name as T1ColorKey][step],\n },\n {\n source: `Figma Color/qw/t2/${name}/${step}`,\n rationale:\n \"OKLCH solid scale is design-calibrated; the Seed records color-family lineage, not the final step value.\",\n },\n ),\n );\n }\n out.push(ref([\"color\", name, \"base\"], { kind: \"alias\", seedRef }));\n }\n return out;\n}\n\n/** @deprecated Figma T2 已不再使用 neutral 0/1000 端点;保留给历史迁移脚本。 */\nexport function buildNeutralEndpointRecipes(): ReferenceRecipe[] {\n return [\n ref(\n [\"color\", \"neutral\", \"0\"],\n { kind: \"literal\", value: \"#ffffff\" },\n { source: \"CSS Color sRGB endpoint\", rationale: \"Mathematical white endpoint; no theme-level generator input.\" },\n ),\n ref(\n [\"color\", \"neutral\", \"1000\"],\n { kind: \"literal\", value: \"#000000\" },\n { source: \"CSS Color sRGB endpoint\", rationale: \"Mathematical black endpoint; no theme-level generator input.\" },\n ),\n ];\n}\n\nexport const BLACK_ALPHA: ReadonlyArray<readonly [string, number]> = [\n [\"4\", 1],\n [\"8\", 2],\n [\"12\", 3],\n [\"16\", 4],\n [\"24\", 6],\n [\"32\", 8],\n [\"48\", 12],\n [\"64\", 16],\n];\nexport const WHITE_ALPHA: ReadonlyArray<readonly [string, number]> = [\n [\"8\", 2],\n [\"16\", 4],\n [\"24\", 6],\n [\"32\", 8],\n];\n\n/** @deprecated Figma T2 已改为每个 Seed 自带 Alpha 通道;保留给历史迁移脚本。 */\nexport function buildAlphaScaleRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (const [key, mult] of BLACK_ALPHA) {\n out.push(\n ref([\"color\", \"blackAlpha\", key], {\n kind: \"alphaScale\",\n channel: \"black\",\n stepRef: \"size.opacity.alphaStep\",\n multiplier: mult,\n }),\n );\n }\n for (const [key, mult] of WHITE_ALPHA) {\n out.push(\n ref([\"color\", \"whiteAlpha\", key], {\n kind: \"alphaScale\",\n channel: \"white\",\n stepRef: \"size.opacity.alphaStep\",\n multiplier: mult,\n }),\n );\n }\n return out;\n}\n\n/** 4. 间距刻度 = spacing.step × N (N=1..8)。 */\nexport function buildSpacingRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (let n = 1; n <= 8; n++) {\n out.push(ref([\"size\", \"spacing\", String(n)], { kind: \"scale\", seedRef: \"size.spacing.step\", factor: n }));\n }\n return out;\n}\n\n/** 圆角档位系数(sm/lg/xl 从 base 派生;默认 base=8px → 4/8/14/16)。 */\nexport const RADIUS_FACTORS = { sm: 0.5, md: 1, lg: 1.75, xl: 2 } as const;\n\n/** 5. 圆角刻度:sm/md/lg/xl 由 radius.base 按系数派生,full 直通独立裁切基准。xl=2×base 对齐治理稿 Radius v2 的 T2 double。 */\nexport function buildRadiusRecipes(): ReferenceRecipe[] {\n return [\n ref([\"size\", \"radius\", \"sm\"], { kind: \"scale\", seedRef: \"size.radius.base\", factor: RADIUS_FACTORS.sm }),\n ref([\"size\", \"radius\", \"md\"], { kind: \"alias\", seedRef: \"size.radius.base\" }),\n ref([\"size\", \"radius\", \"lg\"], { kind: \"scale\", seedRef: \"size.radius.base\", factor: RADIUS_FACTORS.lg }),\n ref([\"size\", \"radius\", \"xl\"], { kind: \"scale\", seedRef: \"size.radius.base\", factor: RADIUS_FACTORS.xl }),\n ref([\"size\", \"radius\", \"full\"], { kind: \"alias\", seedRef: \"size.radius.full\" }),\n ];\n}\n\n/** 6. 控件/图标尺寸:md = base 直通,sm/lg = base ∓ spacing.step × n(控件 ×2、图标 ×1)。 */\nexport function buildControlIconSizeRecipes(): ReferenceRecipe[] {\n const step = \"size.spacing.step\";\n return [\n ref([\"size\", \"controlSize\", \"sm\"], { kind: \"offsetSteps\", seedRef: \"size.controlSize.base\", stepRef: step, n: -2 }),\n ref([\"size\", \"controlSize\", \"md\"], { kind: \"alias\", seedRef: \"size.controlSize.base\" }),\n ref([\"size\", \"controlSize\", \"lg\"], { kind: \"offsetSteps\", seedRef: \"size.controlSize.base\", stepRef: step, n: 2 }),\n ref([\"size\", \"iconSize\", \"sm\"], { kind: \"offsetSteps\", seedRef: \"size.iconSize.base\", stepRef: step, n: -1 }),\n ref([\"size\", \"iconSize\", \"md\"], { kind: \"alias\", seedRef: \"size.iconSize.base\" }),\n ref([\"size\", \"iconSize\", \"lg\"], { kind: \"offsetSteps\", seedRef: \"size.iconSize.base\", stepRef: step, n: 1 }),\n ];\n}\n\n/** 描边宽度梯度系数(Figma Stroke v1:Half/Base/Double/Triple = 0.5/1/2/3)。 */\nexport const STROKE_WIDTH_FACTORS = { half: 0.5, double: 2, triple: 3 } as const;\n\n/** 7. 描边宽度(Figma Stroke v1):base 直通 Seed,half/double/triple 按系数派生。 */\nexport function buildStrokeWidthRecipes(): ReferenceRecipe[] {\n const seedRef = \"size.borderWidth.hairline\";\n return [\n ref([\"size\", \"strokeWidth\", \"half\"], { kind: \"scale\", seedRef, factor: STROKE_WIDTH_FACTORS.half }),\n ref([\"size\", \"strokeWidth\", \"base\"], { kind: \"alias\", seedRef }),\n ref([\"size\", \"strokeWidth\", \"double\"], { kind: \"scale\", seedRef, factor: STROKE_WIDTH_FACTORS.double }),\n ref([\"size\", \"strokeWidth\", \"triple\"], { kind: \"scale\", seedRef, factor: STROKE_WIDTH_FACTORS.triple }),\n ];\n}\n\n/** 六档动作控件高度(Figma Action Control v1):现有公开尺寸契约,不能由单一 T1 Base 可靠派生,直接定义在 T2(T1 不设 Control Size)。 */\nexport const ACTION_CONTROL_HEIGHTS = { \"2xs\": 24, xs: 28, sm: 32, md: 36, lg: 42, xl: 50 } as const;\n\n/** 7b. 动作控件尺寸:六档高度 + 2XS 图标特例(Square 复用同档 Height,不另设 token)。 */\nexport function buildActionControlRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (const [step, value] of Object.entries(ACTION_CONTROL_HEIGHTS)) {\n out.push(\n ref(\n [\"size\", \"actionControlHeight\", step],\n { kind: \"literal\", value: `${value}px` },\n {\n source: \"Figma 千问三方——Token 改造 · Foundation/Action Control Standard v1\",\n rationale:\n \"六档高度 24/28/32/36/42/50 是现有公开尺寸契约,治理稿将其直接定义在 T2,T1 不设置 Control Size。\",\n },\n ),\n );\n }\n out.push(\n ref(\n [\"size\", \"actionControlIcon\", \"2xs\"],\n { kind: \"literal\", value: \"14px\" },\n {\n source: \"Figma 千问三方——Token 改造 · Foundation/Action Control Standard v1\",\n rationale:\n \"2XS 图标 14px 是治理稿已标记的组件特例(不扩充全局 Icon Scale);视觉验证通过后优先归一化为 Icon Size/Small。\",\n },\n ),\n );\n return out;\n}\n\n/** Avatar 三档直径(Figma 头像 · Avatar S/M/L = 40/50/58)。 */\nexport const AVATAR_DIAMETERS = { sm: 40, md: 50, lg: 58 } as const;\n\n/** 7c. 展示类专用尺寸:Avatar 直径(Icon Size 规范要求 Avatar 直径使用自己的语义,禁止借用 Icon/Control 刻度)。 */\nexport function buildAvatarDiameterRecipes(): ReferenceRecipe[] {\n return Object.entries(AVATAR_DIAMETERS).map(([step, value]) =>\n ref(\n [\"size\", \"avatarDiameter\", step],\n { kind: \"literal\", value: `${value}px` },\n {\n source: \"Figma 千问三方——Token 改造 · 头像 · Avatar(S/M/L)\",\n rationale:\n \"Avatar 直径 40/50/58 是展示类专用尺寸契约;Icon Size 规范明确 Avatar 直径必须使用各自语义,不由 T1 派生。\",\n },\n ),\n );\n}\n\n/** 8. 行高(typography 类目):normal 直通 Seed,tight/relaxed = base ∓ 0.25。 */\nexport function buildLineHeightRecipes(): ReferenceRecipe[] {\n return [\n ref([\"typography\", \"lineHeight\", \"tight\"], { kind: \"offsetNumber\", seedRef: \"typography.lineHeight.base\", delta: -0.25 }),\n ref([\"typography\", \"lineHeight\", \"normal\"], { kind: \"alias\", seedRef: \"typography.lineHeight.base\" }),\n ref([\"typography\", \"lineHeight\", \"relaxed\"], { kind: \"offsetNumber\", seedRef: \"typography.lineHeight.base\", delta: 0.25 }),\n ];\n}\n\n/** 9. 禁用态不透明度 —— 直通引用。 */\nexport function buildOpacityRecipes(): ReferenceRecipe[] {\n return [ref([\"size\", \"opacity\", \"disabled\"], { kind: \"alias\", seedRef: \"size.opacity.disabled\" })];\n}\n\n/** 10. 层级刻度 = zIndex.step × N (N=1..4);角色分配交给 Semantic 层。 */\nexport function buildZIndexRecipes(): ReferenceRecipe[] {\n return [1, 2, 3, 4].map((n) =>\n ref([\"size\", \"zIndex\", String(n)], { kind: \"scaleNumber\", seedRef: \"size.zIndex.step\", factor: n }),\n );\n}\n\nexport const FONT_FAMILY_KEYS = [\n \"text\",\n \"number\",\n \"code\",\n \"textMacLatin\",\n \"textMacZh\",\n \"textMacJa\",\n \"textWindowsLatin\",\n \"textWindowsZh\",\n \"textWindowsJa\",\n] as const;\n\n/** 字号档位倍数(沿用既定视觉:14px 基准 → 11/12/16/20/24;xs=11 对齐治理稿 T2 Font Size 2XS)。 */\nexport const FONT_SIZE_FACTORS: Record<string, number> = { xs: 0.786, sm: 0.857, lg: 1.143, xl: 1.429, \"2xl\": 1.714 };\n\n/** 11. 排版原子:字体族来自平台 Seed;字重是机械标准常量;字号按既定倍数派生。 */\nexport function buildTypographyRecipes(): ReferenceRecipe[] {\n const out: ReferenceRecipe[] = [];\n for (const key of FONT_FAMILY_KEYS) {\n out.push(ref([\"typography\", \"fontFamily\", key], { kind: \"fontStack\", seedRef: `typography.fontFamily.${key}` }));\n }\n for (const [key, value] of [\n [\"regular\", 400],\n [\"medium\", 500],\n [\"semibold\", 600],\n ] as const) {\n out.push(\n ref(\n [\"typography\", \"fontWeight\", key],\n { kind: \"literal\", value },\n {\n source: \"CSS Fonts numeric font-weight scale\",\n rationale: \"Mechanical weight step; changing it is a semantic typography decision, not a global generator input.\",\n },\n ),\n );\n }\n out.push(ref([\"typography\", \"fontSize\", \"base\"], { kind: \"alias\", seedRef: \"typography.fontSize.base\" }));\n for (const [key, factor] of Object.entries(FONT_SIZE_FACTORS)) {\n out.push(\n ref([\"typography\", \"fontSize\", key], { kind: \"scale\", seedRef: \"typography.fontSize.base\", factor, round: \"int\" }),\n );\n }\n out.push(ref([\"typography\", \"letterSpacing\", \"base\"], { kind: \"alias\", seedRef: \"typography.letterSpacing.base\" }));\n return out;\n}\n\n/** 动效时长档位倍数。 */\nexport const DURATION_FACTORS = { fast: 0.5, slow: 1.6 } as const;\n\n/** 12. 动效:duration 按倍数派生,easing 直通。 */\nexport function buildMotionRecipes(): ReferenceRecipe[] {\n return [\n ref([\"motion\", \"duration\", \"fast\"], { kind: \"scale\", seedRef: \"motion.duration.base\", factor: DURATION_FACTORS.fast }),\n ref([\"motion\", \"duration\", \"base\"], { kind: \"alias\", seedRef: \"motion.duration.base\" }),\n ref([\"motion\", \"duration\", \"slow\"], { kind: \"scale\", seedRef: \"motion.duration.base\", factor: DURATION_FACTORS.slow }),\n ref([\"motion\", \"easing\", \"standard\"], { kind: \"cubicBezier\", seedRef: \"motion.easing.standard\" }),\n ];\n}\n\n/**\n * 13. 阴影:形状由 effect.shadow.base 按各档位比例缩放,颜色沿用\n * alphaStep 结构锚点。它不是 Figma Color 变量体系里的 T2 颜色 token。\n */\nexport function buildShadowRecipes(): ReferenceRecipe[] {\n return ([\"sm\", \"md\", \"lg\"] as const).map((level) => ref([\"effect\", \"shadow\", level], { kind: \"shadowLayer\", level }));\n}\n\nexport function allReferenceRecipes(): ReferenceRecipe[] {\n return [\n ...buildColorRampRecipes(),\n ...buildSpacingRecipes(),\n ...buildRadiusRecipes(),\n ...buildControlIconSizeRecipes(),\n ...buildStrokeWidthRecipes(),\n ...buildActionControlRecipes(),\n ...buildAvatarDiameterRecipes(),\n ...buildLineHeightRecipes(),\n ...buildOpacityRecipes(),\n ...buildZIndexRecipes(),\n ...buildTypographyRecipes(),\n ...buildMotionRecipes(),\n ...buildShadowRecipes(),\n ];\n}\n\n/** T2 顶层入口:喂一个 Seed,产出全量 Reference recipes + 拍平后的 CSS 变量映射 + 阴影形状(供 Semantic 层消费)。 */\nexport function buildReference(seed: Seed): ReferenceBuild {\n const recipes = allReferenceRecipes();\n const tokens: ReferenceTokens = {};\n for (const recipe of recipes) tokens[recipe.cssVar] = evaluateDerivation(recipe.derivation, seed);\n return {\n recipes,\n tokens,\n shapes: {\n shadow: {\n sm: shadowShapeOf(seed, \"sm\"),\n md: shadowShapeOf(seed, \"md\"),\n lg: shadowShapeOf(seed, \"lg\"),\n },\n },\n };\n}\n","import { toVar } from \"./naming.js\";\nimport type { ReferenceBuild, ReferenceTokens, ShadowLevel } from \"./reference.js\";\nimport { FIGMA_T3_COLOR_ROLES } from \"../color-architecture.js\";\n\n/**\n * T3 Semantic 派生 —— RFC 0001 §2.1,v3 修订。\n *\n * R7 类型隔离(强制 FR-010):本模块**不 import `Seed`/`schema.ts`** 任何符号,\n * 只接受 `buildReference()` 的输出(`ReferenceBuild`)。Semantic 角色永远经由\n * Reference 层中转到 Seed,不允许绕过 Reference 直接引用 Seed 字段。\n *\n * v3 变化:全部角色表从模块私有改为导出的结构化元数据(SEMANTIC_ROLES),\n * 供 design 文件生成器(scripts/export-design-tokens.ts)、live CSS 生成器\n * (derive/live-css.ts)与 Token Studio 的血缘展示共用同一份事实。\n */\nexport type SemanticMode = \"light\" | \"dark\";\n\nfunction pick(tokens: ReferenceTokens, dottedRefPath: string): string {\n const v = tokens[toVar(\"ref\", dottedRefPath.split(\".\"))];\n if (v === undefined) throw new Error(`[qw] Semantic 引用了不存在的 Reference token: ${dottedRefPath}`);\n return v;\n}\n\nfunction semVar(path: string[]): string {\n return toVar(\"sem\", path);\n}\n\n/* ------------------------------------------------------------------ */\n/* 结构类角色表(mode 无关) */\n/* ------------------------------------------------------------------ */\n\nexport const RADIUS_ROLES: Record<string, string> = {\n // 治理稿 Radius v2 尺寸语义:sm=4px(Tag/小型紧凑元素)、xl=16px(Loading/浮层强调容器)\n sm: \"size.radius.sm\",\n control: \"size.radius.md\",\n card: \"size.radius.lg\",\n xl: \"size.radius.xl\",\n pill: \"size.radius.full\",\n full: \"size.radius.full\",\n};\n\nexport const CONTROL_HEIGHT_ROLES: Record<string, string> = {\n sm: \"size.controlSize.sm\",\n md: \"size.controlSize.md\",\n lg: \"size.controlSize.lg\",\n};\n\nexport const ICON_SIZE_ROLES: Record<string, string> = {\n sm: \"size.iconSize.sm\",\n md: \"size.iconSize.md\",\n lg: \"size.iconSize.lg\",\n};\n\n/* ------------------------------------------------------------------ */\n/* 动作控件六档组合角色(Figma Action Control v1) */\n/* Height/PaddingInline/Icon/Gap 同档组合消费;纯图标控件的 Square */\n/* 宽高复用同档 Height,不另设 token。 */\n/* ------------------------------------------------------------------ */\n\nexport const ACTION_CONTROL_HEIGHT_ROLES: Record<string, string> = {\n \"2xs\": \"size.actionControlHeight.2xs\",\n xs: \"size.actionControlHeight.xs\",\n sm: \"size.actionControlHeight.sm\",\n md: \"size.actionControlHeight.md\",\n lg: \"size.actionControlHeight.lg\",\n xl: \"size.actionControlHeight.xl\",\n};\n\nexport const ACTION_CONTROL_PADDING_INLINE_ROLES: Record<string, string> = {\n \"2xs\": \"size.spacing.2\",\n xs: \"size.spacing.2\",\n sm: \"size.spacing.4\",\n md: \"size.spacing.4\",\n lg: \"size.spacing.5\",\n xl: \"size.spacing.8\",\n};\n\nexport const ACTION_CONTROL_ICON_ROLES: Record<string, string> = {\n \"2xs\": \"size.actionControlIcon.2xs\",\n xs: \"size.iconSize.sm\",\n sm: \"size.iconSize.sm\",\n md: \"size.iconSize.sm\",\n lg: \"size.iconSize.sm\",\n xl: \"size.iconSize.md\",\n};\n\nexport const ACTION_CONTROL_GAP_ROLES: Record<string, string> = {\n \"2xs\": \"size.spacing.1\",\n xs: \"size.spacing.1\",\n sm: \"size.spacing.2\",\n md: \"size.spacing.2\",\n lg: \"size.spacing.2\",\n xl: \"size.spacing.2\",\n};\n\n/* ------------------------------------------------------------------ */\n/* 描边角色(Figma Stroke v1:Border / Divider / Focus Ring / Indicator) */\n/* Border 只描述组件边界;Divider 描述内容分隔;Focus Ring 与 Indicator */\n/* 不得借用 Border token。Focus Ring Offset 仅供代码消费。 */\n/* ------------------------------------------------------------------ */\n\nexport const BORDER_WIDTH_ROLES: Record<string, string> = {\n default: \"size.strokeWidth.base\",\n strong: \"size.strokeWidth.double\",\n};\n\nexport const DIVIDER_WIDTH_ROLES: Record<string, string> = {\n thin: \"size.strokeWidth.half\",\n default: \"size.strokeWidth.base\",\n};\n\nexport const FOCUS_RING_ROLES: Record<string, string> = {\n width: \"size.strokeWidth.double\",\n offset: \"size.strokeWidth.double\",\n};\n\nexport const INDICATOR_ROLES: Record<string, string> = {\n loading: \"size.strokeWidth.double\",\n};\n\n/** 展示类专用尺寸:Avatar 直径三档(Figma 头像 S/M/L)。 */\nexport const AVATAR_DIAMETER_ROLES: Record<string, string> = {\n sm: \"size.avatarDiameter.sm\",\n md: \"size.avatarDiameter.md\",\n lg: \"size.avatarDiameter.lg\",\n};\n\nexport const INSET_STACK_ROLES: Record<string, string> = {\n sm: \"size.spacing.2\",\n md: \"size.spacing.4\",\n lg: \"size.spacing.6\",\n};\n\nexport const Z_INDEX_ROLES: Record<string, string> = {\n dropdown: \"size.zIndex.1\",\n sticky: \"size.zIndex.2\",\n overlay: \"size.zIndex.3\",\n toast: \"size.zIndex.4\",\n};\n\nexport const MOTION_DURATION_ROLES: Record<string, string> = {\n fast: \"motion.duration.fast\",\n base: \"motion.duration.base\",\n slow: \"motion.duration.slow\",\n};\n\n/** 字体族角色:text(正文缺省)/ number(数字数据)/ code(等宽)。 */\nexport const FONT_FAMILY_ROLES: Record<string, string> = {\n text: \"typography.fontFamily.text\",\n number: \"typography.fontFamily.number\",\n code: \"typography.fontFamily.code\",\n};\n\nexport interface TypographyRole {\n fontFamilyRef: string;\n fontSizeRef: string;\n fontWeightRef: string;\n lineHeightRef: string;\n letterSpacingRef: string;\n}\n\nconst T_LETTER = \"typography.letterSpacing.base\";\n\n/** typography.* 复合角色:每个字段各自引用 Reference(无任何裸字面量)。 */\nexport const TYPOGRAPHY_ROLES: Record<string, TypographyRole> = {\n body: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.base\",\n fontWeightRef: \"typography.fontWeight.regular\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n bodyStrong: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.base\",\n fontWeightRef: \"typography.fontWeight.medium\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n headingSm: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.lg\",\n fontWeightRef: \"typography.fontWeight.semibold\",\n lineHeightRef: \"typography.lineHeight.tight\",\n letterSpacingRef: T_LETTER,\n },\n headingMd: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.xl\",\n fontWeightRef: \"typography.fontWeight.semibold\",\n lineHeightRef: \"typography.lineHeight.tight\",\n letterSpacingRef: T_LETTER,\n },\n headingLg: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.2xl\",\n fontWeightRef: \"typography.fontWeight.semibold\",\n lineHeightRef: \"typography.lineHeight.tight\",\n letterSpacingRef: T_LETTER,\n },\n caption: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.sm\",\n fontWeightRef: \"typography.fontWeight.regular\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n /** 大正文(治理稿 T3 字段「大正文 16px · T2 M」):行高沿用 canonical 比例引擎。 */\n bodyLg: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.lg\",\n fontWeightRef: \"typography.fontWeight.regular\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n /** 小标签(治理稿 Text/Label/Small = 11/500/16):字号取 T2 xs=11px。 */\n labelSm: {\n fontFamilyRef: \"typography.fontFamily.text\",\n fontSizeRef: \"typography.fontSize.xs\",\n fontWeightRef: \"typography.fontWeight.medium\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n code: {\n fontFamilyRef: \"typography.fontFamily.code\",\n fontSizeRef: \"typography.fontSize.sm\",\n fontWeightRef: \"typography.fontWeight.regular\",\n lineHeightRef: \"typography.lineHeight.normal\",\n letterSpacingRef: T_LETTER,\n },\n};\n\nexport const TYPOGRAPHY_FIELDS = [\n \"fontFamily\",\n \"fontSize\",\n \"fontWeight\",\n \"lineHeight\",\n \"letterSpacing\",\n] as const;\n\n/* ------------------------------------------------------------------ */\n/* 颜色角色表(light/dark 各自引用 Reference 路径) */\n/* ------------------------------------------------------------------ */\n\nexport interface ColorRoleRefs {\n light: string;\n dark: string;\n}\n\n/**\n * 颜色角色的 Semantic 变量路径:绝大多数角色落在 `--qw-sem-color-*` 下;\n * `effect.shadow.*.color` 是复合阴影的颜色分量,对应 Figma 变量\n * `--qw-sem-effect-shadow-*-color`,不带 `color-` 前缀。\n */\nexport function colorRoleSemPath(role: string): string[] {\n const segs = role.split(\".\");\n return segs[0] === \"effect\" ? segs : [\"color\", ...segs];\n}\n\nexport const COLOR_ROLES: Record<string, ColorRoleRefs> = {\n ...FIGMA_T3_COLOR_ROLES,\n};\n\n/** 复合阴影角色:形状取 Reference effect.shadow.<level>,颜色取各自的 effect.shadow.<role>.color 分量。 */\nexport const SHADOW_COMPOSITE_ROLES: Record<string, ShadowLevel> = {\n card: \"sm\",\n floating: \"md\",\n dialog: \"lg\",\n};\n\n/* ------------------------------------------------------------------ */\n/* 血缘元数据(Token Studio / 文档消费) */\n/* ------------------------------------------------------------------ */\n\nexport type SemanticRoleEntry =\n | {\n kind: \"structural\";\n /** Semantic 路径(点分,如 \"size.radius.control\")。 */\n path: string;\n cssVar: string;\n /** 引用的 Reference 路径(点分)。 */\n refPath: string;\n }\n | {\n kind: \"color\";\n path: string;\n cssVar: string;\n refPath: { light: string; dark: string };\n }\n | {\n kind: \"shadowComposite\";\n path: string;\n cssVar: string;\n /** 形状来源(reference.effect.shadow.<level>)+ 颜色来源。 */\n shapeRef: string;\n colorRole: string;\n };\n\n/**\n * 全量 Semantic 角色的结构化血缘表——\"角色 → 引用的 Reference 路径(含 light/dark 分支)\"。\n * 与 buildSemanticStructural/buildSemanticColor 的产出一一对应(顺序一致)。\n */\nexport function semanticRoleEntries(): SemanticRoleEntry[] {\n const out: SemanticRoleEntry[] = [];\n const structural = (path: string[], refPath: string) =>\n out.push({ kind: \"structural\", path: path.join(\".\"), cssVar: semVar(path), refPath });\n\n for (const [role, refPath] of Object.entries(RADIUS_ROLES)) structural([\"size\", \"radius\", role], refPath);\n for (const [role, refPath] of Object.entries(CONTROL_HEIGHT_ROLES)) structural([\"size\", \"controlHeight\", role], refPath);\n for (const [role, refPath] of Object.entries(ICON_SIZE_ROLES)) structural([\"size\", \"iconSize\", role], refPath);\n for (const [role, refPath] of Object.entries(ACTION_CONTROL_HEIGHT_ROLES)) structural([\"size\", \"actionControlHeight\", role], refPath);\n for (const [role, refPath] of Object.entries(ACTION_CONTROL_PADDING_INLINE_ROLES)) structural([\"size\", \"actionControlPaddingInline\", role], refPath);\n for (const [role, refPath] of Object.entries(ACTION_CONTROL_ICON_ROLES)) structural([\"size\", \"actionControlIcon\", role], refPath);\n for (const [role, refPath] of Object.entries(ACTION_CONTROL_GAP_ROLES)) structural([\"size\", \"actionControlGap\", role], refPath);\n for (const [role, refPath] of Object.entries(BORDER_WIDTH_ROLES)) structural([\"size\", \"borderWidth\", role], refPath);\n for (const [role, refPath] of Object.entries(DIVIDER_WIDTH_ROLES)) structural([\"size\", \"dividerWidth\", role], refPath);\n for (const [role, refPath] of Object.entries(FOCUS_RING_ROLES)) structural([\"size\", \"focusRing\", role], refPath);\n for (const [role, refPath] of Object.entries(INDICATOR_ROLES)) structural([\"size\", \"indicator\", role], refPath);\n for (const [role, refPath] of Object.entries(AVATAR_DIAMETER_ROLES)) structural([\"size\", \"avatarDiameter\", role], refPath);\n for (const [role, refPath] of Object.entries(INSET_STACK_ROLES)) {\n structural([\"size\", \"inset\", role], refPath);\n structural([\"size\", \"stack\", role], refPath);\n }\n structural([\"size\", \"opacity\", \"disabled\"], \"size.opacity.disabled\");\n for (const [role, refPath] of Object.entries(Z_INDEX_ROLES)) structural([\"size\", \"zIndex\", role], refPath);\n for (const [role, refPath] of Object.entries(FONT_FAMILY_ROLES)) structural([\"typography\", \"fontFamily\", role], refPath);\n for (const [role, spec] of Object.entries(TYPOGRAPHY_ROLES)) {\n structural([\"typography\", role, \"fontFamily\"], spec.fontFamilyRef);\n structural([\"typography\", role, \"fontSize\"], spec.fontSizeRef);\n structural([\"typography\", role, \"fontWeight\"], spec.fontWeightRef);\n structural([\"typography\", role, \"lineHeight\"], spec.lineHeightRef);\n structural([\"typography\", role, \"letterSpacing\"], spec.letterSpacingRef);\n }\n for (const [role, refPath] of Object.entries(MOTION_DURATION_ROLES)) structural([\"motion\", \"duration\", role], refPath);\n structural([\"motion\", \"easing\", \"standard\"], \"motion.easing.standard\");\n\n for (const [path, refs] of Object.entries(COLOR_ROLES)) {\n const segs = colorRoleSemPath(path);\n out.push({ kind: \"color\", path: segs.join(\".\"), cssVar: semVar(segs), refPath: refs });\n }\n for (const [role, level] of Object.entries(SHADOW_COMPOSITE_ROLES)) {\n const segs = [\"effect\", \"shadow\", role];\n out.push({\n kind: \"shadowComposite\",\n path: segs.join(\".\"),\n cssVar: semVar(segs),\n shapeRef: `effect.shadow.${level}`,\n colorRole: `effect.shadow.${role}.color`,\n });\n }\n return out;\n}\n\n/* ------------------------------------------------------------------ */\n/* 求值 */\n/* ------------------------------------------------------------------ */\n\n/**\n * 结构类(mode 无关):尺寸角色 + 字体族角色 + 排版复合角色 + 动效时长/缓动。\n * `effect.shadow.*` 的颜色字段随 mode 变化,归入 `buildSemanticColor`。\n */\nexport function buildSemanticStructural(reference: ReferenceBuild): Record<string, string> {\n const out: Record<string, string> = {};\n const { tokens } = reference;\n for (const entry of semanticRoleEntries()) {\n if (entry.kind !== \"structural\") continue;\n out[entry.cssVar] = pick(tokens, entry.refPath);\n }\n return out;\n}\n\n/**\n * 颜色类(light/dark 分别求值):color.* 全部角色。\n */\nexport function buildSemanticColor(reference: ReferenceBuild, mode: SemanticMode): Record<string, string> {\n const out: Record<string, string> = {};\n const { tokens, shapes } = reference;\n\n for (const entry of semanticRoleEntries()) {\n if (entry.kind !== \"color\") continue;\n out[entry.cssVar] = pick(tokens, entry.refPath[mode]);\n }\n\n for (const [role, level] of Object.entries(SHADOW_COMPOSITE_ROLES) as Array<\n [keyof typeof SHADOW_COMPOSITE_ROLES, ShadowLevel]\n >) {\n const shape = shapes.shadow[level];\n const shadowColor = out[semVar(colorRoleSemPath(`effect.shadow.${role}.color`))];\n out[semVar([\"effect\", \"shadow\", role])] =\n `${shape.offsetX} ${shape.offsetY} ${shape.blur} ${shape.spread} ${shadowColor}`;\n }\n\n return out;\n}\n","import { buildReference } from \"./reference.js\";\nimport { buildSemanticStructural, buildSemanticColor } from \"./semantic.js\";\nimport type { SemanticMode } from \"./semantic.js\";\nimport type { Seed } from \"../schema.js\";\n\nexport { toVar } from \"./naming.js\";\nexport type { Layer } from \"./naming.js\";\nexport { ramp, STEPS, L_TARGETS, chromaFactor, contrastRatio } from \"./oklch.js\";\nexport type { Step, Ramp } from \"./oklch.js\";\nexport type { SemanticMode as Mode } from \"./semantic.js\";\nexport type {\n ReferenceRecipe,\n ReferenceTokens,\n ReferenceBuild,\n Derivation,\n ReferenceSourceKind,\n ShadowLevel,\n ShadowShape,\n} from \"./reference.js\";\nexport {\n buildReference,\n allReferenceRecipes,\n evaluateDerivation,\n seedRefsOf,\n sourceKindOf,\n formatDerivation,\n seedValueAt,\n RAMP_COLORS,\n BLACK_ALPHA,\n WHITE_ALPHA,\n RADIUS_FACTORS,\n FONT_SIZE_FACTORS,\n DURATION_FACTORS,\n SHADOW_LEVELS,\n FONT_FAMILY_KEYS,\n} from \"./reference.js\";\nexport {\n buildSemanticStructural,\n buildSemanticColor,\n semanticRoleEntries,\n RADIUS_ROLES,\n CONTROL_HEIGHT_ROLES,\n ICON_SIZE_ROLES,\n INSET_STACK_ROLES,\n Z_INDEX_ROLES,\n MOTION_DURATION_ROLES,\n FONT_FAMILY_ROLES,\n TYPOGRAPHY_ROLES,\n TYPOGRAPHY_FIELDS,\n COLOR_ROLES,\n SHADOW_COMPOSITE_ROLES,\n} from \"./semantic.js\";\nexport type { SemanticRoleEntry, ColorRoleRefs, TypographyRole } from \"./semantic.js\";\n\nexport interface DerivedTokens {\n /** 亮色全量 CSS 变量:--qw-ref-* ∪ --qw-sem-*(light 取值)。 */\n light: Record<string, string>;\n /** 暗色全量 CSS 变量:--qw-ref-* ∪ --qw-sem-*(dark 取值)。 */\n dark: Record<string, string>;\n}\n\n/**\n * derive — 单源派生(RFC 0001)。喂一个 Seed,编排 T2 Reference → T3 Semantic,\n * 返回亮/暗两套全量 CSS 变量映射(含 --qw-ref-* 与 --qw-sem-*)。\n * 外部签名/返回值形状与改造前保持一致(FR-014),供 `@qw-ui/react`、`@qw-ui/vue` 的\n * ConfigProvider 直接消费,无需改动。\n *\n * 注意:`validateSeed` 不在此处调用(沿用现状契约),校验是调用方的责任。\n */\nexport function derive(seed: Seed): DerivedTokens {\n const reference = buildReference(seed);\n const structural = buildSemanticStructural(reference);\n const mk = (mode: SemanticMode): Record<string, string> => ({\n ...reference.tokens,\n ...structural,\n ...buildSemanticColor(reference, mode),\n });\n return { light: mk(\"light\"), dark: mk(\"dark\") };\n}\n","import { toVar } from \"./naming.js\";\nimport { L_TARGETS, chromaFactor } from \"./oklch.js\";\nimport { seedColorToCss } from \"../color.js\";\nimport {\n allReferenceRecipes,\n formatFontFamily,\n SHADOW_LEVELS,\n FONT_FAMILY_KEYS,\n type Derivation,\n type ShadowLevel,\n} from \"./reference.js\";\nimport { semanticRoleEntries } from \"./semantic.js\";\nimport type { Seed } from \"../schema.js\";\n\n/**\n * live CSS 生成器 —— dist/tokens.live.css / Token Studio 响应式级联的引擎。\n *\n * 与静态 tokens.css(解析后的字面值,SSR 稳定出口)不同,live CSS 把整棵派生\n * 树翻译成 CSS 原生表达式:\n * - T1 Seed 落为 `--qw-seed-*` 变量,承载需要全局级联的生成参数;\n * - T2 Reference 的 seed-derived 项用 relative color / calc() 派生,\n * design-calibrated / standard-constant 项保留 canonical 直接值;\n * - T3 Semantic 全部是 `var(--qw-ref-*)` 别名;dark 模式只在暗色选择器下\n * 重映射 sem → 不同的 ref 档位。\n *\n * 于是改一个 `--qw-seed-*`(setProperty 即可),整棵 ref/sem 树由浏览器原生\n * 级联更新,零 JS 重算。依赖现代 CSS(relative color / round()),刻意不做\n * 老浏览器兼容——组件库消费方继续用静态 tokens.css。\n */\n\nconst round4 = (n: number) => Math.round(n * 10000) / 10000;\n\nfunction seedVar(dotted: string): string {\n return toVar(\"seed\", dotted.split(\".\"));\n}\n\n/* ------------------------------------------------------------------ */\n/* T1:Seed → --qw-seed-* 变量表 */\n/* ------------------------------------------------------------------ */\n\n/** Seed 拍平成 `--qw-seed-*` → CSS 值;T2 仍可包含校准值或标准常量。 */\nexport function seedCssVars(seed: Seed): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [name, value] of Object.entries(seed.color)) {\n out[seedVar(`color.${name}`)] = seedColorToCss(value);\n }\n out[seedVar(\"size.spacing.step\")] = seed.size.spacing.step;\n out[seedVar(\"size.borderWidth.hairline\")] = seed.size.borderWidth.hairline;\n out[seedVar(\"size.radius.base\")] = seed.size.radius.base;\n out[seedVar(\"size.radius.full\")] = seed.size.radius.full;\n out[seedVar(\"size.controlSize.base\")] = seed.size.controlSize.base;\n out[seedVar(\"size.iconSize.base\")] = seed.size.iconSize.base;\n out[seedVar(\"size.opacity.disabled\")] = String(seed.size.opacity.disabled);\n out[seedVar(\"size.opacity.alphaStep\")] = String(seed.size.opacity.alphaStep);\n out[seedVar(\"size.zIndex.step\")] = String(seed.size.zIndex.step);\n for (const key of FONT_FAMILY_KEYS) {\n out[seedVar(`typography.fontFamily.${key}`)] = formatFontFamily(seed.typography.fontFamily[key]);\n }\n // typography.fontWeight 保留在 SeedSchema 作为兼容输入,但 canonical T2 是\n // standard-constant,不再把这些旧字段暴露为 live T1 变量。\n out[seedVar(\"typography.fontSize.base\")] = seed.typography.fontSize.base;\n out[seedVar(\"typography.lineHeight.base\")] = String(seed.typography.lineHeight.base);\n out[seedVar(\"typography.letterSpacing.base\")] = seed.typography.letterSpacing.base;\n out[seedVar(\"motion.duration.base\")] = seed.motion.duration.base;\n const [a, b, c, d] = seed.motion.easing.standard;\n out[seedVar(\"motion.easing.standard\")] = `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n out[seedVar(\"effect.shadow.base.offsetX\")] = seed.effect.shadow.base.offsetX;\n out[seedVar(\"effect.shadow.base.offsetY\")] = seed.effect.shadow.base.offsetY;\n out[seedVar(\"effect.shadow.base.blur\")] = seed.effect.shadow.base.blur;\n out[seedVar(\"effect.shadow.base.spread\")] = seed.effect.shadow.base.spread;\n return out;\n}\n\n/* ------------------------------------------------------------------ */\n/* T2:Derivation AST → CSS 表达式 */\n/* ------------------------------------------------------------------ */\n\nfunction shadowShapeExprs(level: ShadowLevel): { offsetX: string; offsetY: string; blur: string; spread: string } {\n const { offset, blur } = SHADOW_LEVELS[level];\n const scale = (field: string, f: number) => `calc(var(${seedVar(`effect.shadow.base.${field}`)}) * ${f})`;\n return {\n offsetX: scale(\"offsetX\", offset),\n offsetY: scale(\"offsetY\", offset),\n blur: scale(\"blur\", blur),\n spread: scale(\"spread\", offset),\n };\n}\n\n/** 一条 Derivation → 引用 `--qw-seed-*` 的 CSS 原生表达式。 */\nexport function derivationToCssExpr(d: Derivation): string {\n switch (d.kind) {\n case \"alias\":\n case \"fontStack\":\n case \"cubicBezier\":\n return `var(${seedVar(d.seedRef)})`;\n case \"scale\": {\n const expr = `calc(var(${seedVar(d.seedRef)}) * ${d.factor})`;\n return d.round === \"int\" ? `round(nearest, ${expr}, 1px)` : expr;\n }\n case \"scaleNumber\":\n return `calc(var(${seedVar(d.seedRef)}) * ${d.factor})`;\n case \"offsetNumber\":\n return `calc(var(${seedVar(d.seedRef)}) ${d.delta >= 0 ? \"+\" : \"-\"} ${Math.abs(d.delta)})`;\n case \"offsetSteps\":\n return `calc(var(${seedVar(d.seedRef)}) ${d.n >= 0 ? \"+\" : \"-\"} var(${seedVar(d.stepRef)}) * ${Math.abs(d.n)})`;\n case \"oklchRamp\": {\n const l = L_TARGETS[d.step];\n const f = round4(chromaFactor(l));\n return `oklch(from var(${seedVar(d.seedRef)}) ${l} calc(c * ${f}) h)`;\n }\n case \"figmaOklchScale\":\n return d.value;\n case \"seedAlpha\":\n return `rgb(from var(${seedVar(d.seedRef)}) r g b / ${round4(d.alpha)})`;\n case \"alphaScale\": {\n const channel = d.channel === \"black\" ? \"0 0 0\" : \"255 255 255\";\n return `rgb(${channel} / calc(var(${seedVar(d.stepRef)}) * ${d.multiplier}))`;\n }\n case \"literal\":\n return String(d.value);\n case \"shadowLayer\": {\n const s = shadowShapeExprs(d.level);\n const alpha = `calc(var(${seedVar(\"size.opacity.alphaStep\")}) * ${SHADOW_LEVELS[d.level].alphaMult})`;\n return `${s.offsetX} ${s.offsetY} ${s.blur} ${s.spread} rgb(0 0 0 / ${alpha})`;\n }\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* 组装 */\n/* ------------------------------------------------------------------ */\n\nexport interface LiveCssOptions {\n /** 亮色作用域选择器,默认 \":root\"。 */\n selector?: string;\n /** 暗色作用域选择器,默认 '[data-qw-mode=\"dark\"]'。 */\n darkSelector?: string;\n}\n\nfunction block(selector: string, decls: Array<[string, string]>): string {\n return `${selector} {\\n${decls.map(([k, v]) => ` ${k}: ${v};`).join(\"\\n\")}\\n}\\n`;\n}\n\n/**\n * 生成整份 live CSS:\n * 1. seed 块(具体数值);2. ref 块(表达式派生);3. sem 块(light 别名);\n * 4. dark 块(仅重映射随 mode 变化的 sem 颜色别名)。\n */\nexport function buildLiveCss(seed: Seed, options: LiveCssOptions = {}): string {\n const selector = options.selector ?? \":root\";\n const darkSelector = options.darkSelector ?? '[data-qw-mode=\"dark\"]';\n\n const seedDecls = Object.entries(seedCssVars(seed));\n\n const refDecls: Array<[string, string]> = allReferenceRecipes().map((r) => [\n r.cssVar,\n derivationToCssExpr(r.derivation),\n ]);\n\n const semLight: Array<[string, string]> = [];\n const semDark: Array<[string, string]> = [];\n for (const entry of semanticRoleEntries()) {\n if (entry.kind === \"structural\") {\n semLight.push([entry.cssVar, `var(${toVar(\"ref\", entry.refPath.split(\".\"))})`]);\n } else if (entry.kind === \"color\") {\n semLight.push([entry.cssVar, `var(${toVar(\"ref\", entry.refPath.light.split(\".\"))})`]);\n if (entry.refPath.dark !== entry.refPath.light) {\n semDark.push([entry.cssVar, `var(${toVar(\"ref\", entry.refPath.dark.split(\".\"))})`]);\n }\n } else {\n // shadow 复合:形状表达式 + mode 感知的 sem 颜色(dark 无需重复,颜色变量自己会变)。\n const level = entry.shapeRef.split(\".\").pop() as ShadowLevel;\n const s = shadowShapeExprs(level);\n semLight.push([\n entry.cssVar,\n `${s.offsetX} ${s.offsetY} ${s.blur} ${s.spread} var(${toVar(\"sem\", entry.colorRole.split(\".\"))})`,\n ]);\n }\n }\n\n return [\n \"/* @qw-ui/tokens live — Seed 变量驱动的响应式派生树(relative color / calc),请勿手改。\",\n \" 改 --qw-seed-* 即级联整棵 ref/sem 树;需要现代浏览器,组件库消费方请用静态 tokens.css。 */\",\n block(selector, [...seedDecls, ...refDecls, ...semLight]),\n block(darkSelector, semDark),\n ].join(\"\\n\");\n}\n","import {\n FIGMA_T1_SEED_HEX,\n FIGMA_T2_SOLID_SCALE,\n FIGMA_T3_COLOR_ROLES,\n T1_COLOR_KEYS,\n T2_ALPHA_STEPS,\n T2_OKLCH_STEPS,\n type T1ColorKey,\n} from \"../color-architecture.js\";\nimport { colorRoleSemPath } from \"../derive/semantic.js\";\nimport { toVar } from \"../derive/naming.js\";\n\n/**\n * color-snapshot — 生成 Figma `Color` 变量集合的 DTCG 快照(design/color.tokens.json)。\n *\n * Figma 导出自动化通道尚未建立(变量 ID 本次不回填),快照由\n * color-architecture.ts 的同一份事实表投影生成,供 validate:figma-color 与\n * color-contract 测试消费;接上 Figma 导出后以导出物替换本生成物。\n */\n\nconst NS = \"com.qianwen.qw-ui\";\n\ntype Json = Record<string, unknown>;\n\nconst round4 = (n: number) => Math.round(n * 10000) / 10000;\n\nfunction hexComponents(hex: string): [number, number, number] {\n const m = /^#?([0-9a-f]{6})$/i.exec(hex);\n if (!m) throw new Error(`[qw] invalid hex color: ${hex}`);\n const n = Number.parseInt(m[1]!, 16);\n return [round4(((n >> 16) & 255) / 255), round4(((n >> 8) & 255) / 255), round4((n & 255) / 255)];\n}\n\nfunction colorValue(hex: string, alpha = 1): Json {\n return { colorSpace: \"srgb\", components: hexComponents(hex), alpha };\n}\n\nfunction t1Ref(seed: T1ColorKey): string {\n return `{qw.t1.${seed}}`;\n}\n\n/** T3 角色引用的 T2 点分路径(\"color.blue.a20\" → \"qw.t2.blue.a20\")。 */\nfunction t2Ref(dotted: string): string {\n const [, seed, step] = dotted.split(\".\");\n return `{qw.t2.${seed}.${step}}`;\n}\n\ninterface Provenance {\n sourceKind: \"seed-alias\" | \"seed-derived\" | \"design-calibrated\" | \"standard-constant\";\n seedRefs: string[];\n source?: string;\n rationale?: string;\n formula: string;\n}\n\nfunction t2Token(value: Json, provenance: Provenance): Json {\n return {\n $type: \"color\",\n $value: value,\n $extensions: { [NS]: { provenance } },\n };\n}\n\nfunction buildT1(): Json {\n const t1: Json = {};\n for (const seed of T1_COLOR_KEYS) {\n t1[seed] = { $type: \"color\", $value: colorValue(FIGMA_T1_SEED_HEX[seed]) };\n }\n return t1;\n}\n\nfunction buildT2(): Json {\n const t2: Json = {};\n for (const seed of T1_COLOR_KEYS) {\n const seedHex = FIGMA_T1_SEED_HEX[seed];\n const steps: Json = {};\n steps.base = t2Token(colorValue(seedHex), {\n sourceKind: \"seed-alias\",\n seedRefs: [t1Ref(seed)],\n formula: `= qw.t1.${seed}`,\n });\n for (const alpha of T2_ALPHA_STEPS) {\n steps[`a${alpha}`] = t2Token(colorValue(seedHex, alpha / 100), {\n sourceKind: \"seed-derived\",\n seedRefs: [t1Ref(seed)],\n formula: `= qw.t1.${seed} / ${alpha}%`,\n });\n }\n for (const step of T2_OKLCH_STEPS) {\n steps[String(step)] = t2Token(colorValue(FIGMA_T2_SOLID_SCALE[seed][step]), {\n sourceKind: \"design-calibrated\",\n seedRefs: [t1Ref(seed)],\n source: `Figma Color/qw/t2/${seed}/${step}`,\n formula: `= figma Color/qw/t2/${seed}/${step}(OKLCH 设计校准)`,\n });\n }\n t2[seed] = steps;\n }\n return t2;\n}\n\nfunction buildT3(): Json {\n const t3: Json = {};\n for (const [role, refs] of Object.entries(FIGMA_T3_COLOR_ROLES)) {\n const segs = role.split(\".\");\n const node: Json = {\n $type: \"color\",\n $value: t2Ref(refs.light),\n $extensions: {\n [NS]: {\n cssVar: toVar(\"sem\", colorRoleSemPath(role)),\n modes: { light: t2Ref(refs.light), dark: t2Ref(refs.dark) },\n },\n },\n };\n let cur = t3;\n for (let i = 0; i < segs.length - 1; i++) {\n const seg = segs[i]!;\n if (!(seg in cur)) cur[seg] = {};\n cur = cur[seg] as Json;\n }\n cur[segs[segs.length - 1]!] = node;\n }\n return t3;\n}\n\n/** 生成 design/color.tokens.json 的完整 JSON 对象(qw/t1/t2/t3 结构)。 */\nexport function buildFigmaColorSnapshot(): Json {\n return {\n $schema: \"https://www.designtokens.org/schemas/2025.10/format.json\",\n $description:\n \"qw-ui Color 变量集合快照(Figma 节点 22258:49986)。Figma 导出自动化通道建立前,由 scripts/export-design-tokens.ts 从 color-architecture.ts 同一份事实表投影生成,请勿手改;接上 Figma 导出后以导出物替换。校验:pnpm --filter @qw-ui/tokens validate:figma-color。\",\n $extensions: {\n [NS]: { collection: \"Color\", figmaNode: \"22258:49986\", generated: true, owner: \"design-system\" },\n },\n qw: {\n t1: buildT1(),\n t2: buildT2(),\n t3: buildT3(),\n },\n };\n}\n","import {\n FIGMA_COLOR_PREFIX,\n FIGMA_T3_COLOR_ROLES,\n T1_COLOR_KEYS,\n T2_ALPHA_KEYS,\n T2_OKLCH_STEPS,\n} from \"../color-architecture.js\";\n\nexport { FIGMA_COLOR_COLLECTION, FIGMA_COLOR_PREFIX, T1_COLOR_KEYS, T2_OKLCH_STEPS } from \"../color-architecture.js\";\nexport const T2_ALPHA_STEPS = T2_ALPHA_KEYS;\nexport const T2_OKLCH_STEP_KEYS = T2_OKLCH_STEPS.map(String);\n\nconst NS = \"com.qianwen.qw-ui\";\n\nconst T1_SET = new Set<string>(T1_COLOR_KEYS);\nconst T2_ALPHA_SET = new Set<string>(T2_ALPHA_KEYS);\nconst T2_OKLCH_SET = new Set<string>(T2_OKLCH_STEP_KEYS);\nconst T3_SEGMENT = /^[a-z]+(?:-[a-z]+)*$/;\n\nconst PROVENANCE_SOURCE_KINDS = new Set<string>([\n \"seed-alias\",\n \"seed-derived\",\n \"design-calibrated\",\n \"standard-constant\",\n \"external-standard\",\n]);\nconst SEED_LINEAGE_KINDS = new Set<string>([\"seed-alias\", \"seed-derived\", \"design-calibrated\"]);\n\nexport interface FigmaColorTokenValidationResult {\n ok: boolean;\n errors: string[];\n counts: {\n t1: number;\n t2: number;\n t3: number;\n };\n}\n\ninterface TokenLeaf {\n path: string[];\n value: unknown;\n extensions: Record<string, unknown>;\n}\n\ntype JsonObject = Record<string, unknown>;\n\nfunction isObject(value: unknown): value is JsonObject {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction collectLeaves(node: unknown, path: string[] = [], out: TokenLeaf[] = []): TokenLeaf[] {\n if (!isObject(node)) return out;\n if (\"$value\" in node) {\n out.push({\n path,\n value: node.$value,\n extensions: isObject(node.$extensions) ? node.$extensions : {},\n });\n return out;\n }\n for (const [key, child] of Object.entries(node)) {\n if (key.startsWith(\"$\")) continue;\n collectLeaves(child, [...path, key], out);\n }\n return out;\n}\n\nfunction qwPath(path: string[]): string[] | null {\n const index = path.indexOf(FIGMA_COLOR_PREFIX);\n return index >= 0 ? path.slice(index) : null;\n}\n\nfunction pathKey(path: string[]): string {\n return path.join(\".\");\n}\n\nfunction refToPath(ref: unknown): string[] | null {\n if (typeof ref !== \"string\") return null;\n const match = /^\\{(.+)\\}$/.exec(ref.trim());\n if (!match) return null;\n return match[1]!.split(/[./]/).filter(Boolean);\n}\n\nfunction extensionObject(leaf: TokenLeaf): JsonObject {\n const ext = leaf.extensions[NS];\n return isObject(ext) ? ext : {};\n}\n\nfunction modesOf(leaf: TokenLeaf): JsonObject {\n const ext = extensionObject(leaf);\n return isObject(ext.modes) ? ext.modes : {};\n}\n\nfunction provenanceOf(leaf: TokenLeaf): JsonObject {\n const ext = extensionObject(leaf);\n return isObject(ext.provenance) ? ext.provenance : {};\n}\n\nfunction isSolidColorValue(value: unknown): boolean {\n if (!isObject(value)) return false;\n if (value.colorSpace !== \"srgb\" && value.colorSpace !== \"oklch\") return false;\n if (!Array.isArray(value.components) || value.components.length !== 3) return false;\n return value.alpha === 1;\n}\n\nfunction isColorLikeValue(value: unknown): boolean {\n if (!isObject(value)) return false;\n if (value.colorSpace !== \"srgb\" && value.colorSpace !== \"oklch\") return false;\n if (!Array.isArray(value.components) || value.components.length !== 3) return false;\n return typeof value.alpha === \"number\" && value.alpha >= 0 && value.alpha <= 1;\n}\n\nfunction validateNoUnexpectedName(path: string[], errors: string[]): void {\n const joined = pathKey(path);\n if (joined.includes(\"_\")) errors.push(`${joined}: token name must not contain underscores`);\n if (path.some((segment) => /[A-Z]/.test(segment))) errors.push(`${joined}: token name must be lowercase`);\n}\n\nfunction validateT3Path(path: string[], errors: string[]): void {\n const joined = pathKey(path);\n for (const segment of path.slice(2)) {\n if (!T3_SEGMENT.test(segment)) {\n errors.push(`${joined}: T3 semantic segment \"${segment}\" must use kebab-case words without numeric suffixes`);\n }\n }\n}\n\n/** T2 Color 固定为 base / Seed Alpha / OKLCH 三类标准档位。 */\nfunction classifyT2Step(step: string): \"base\" | \"alpha\" | \"oklch\" | null {\n if (step === \"base\") return \"base\";\n if (T2_ALPHA_SET.has(step)) return \"alpha\";\n if (T2_OKLCH_SET.has(step)) return \"oklch\";\n return null;\n}\n\n/** 各 T2 步类对应的 provenance.sourceKind(血缘治理不变量)。 */\nconst T2_STEP_SOURCE_KIND: Record<\"base\" | \"alpha\" | \"oklch\", string> = {\n base: \"seed-alias\",\n alpha: \"seed-derived\",\n oklch: \"design-calibrated\",\n};\n\nfunction validateT2Provenance(leaf: TokenLeaf, seed: string, step: string, errors: string[]): void {\n const joined = pathKey(leaf.path);\n const provenance = provenanceOf(leaf);\n if (Object.keys(provenance).length === 0) {\n errors.push(`${joined}: T2 token must declare $extensions.${NS}.provenance`);\n return;\n }\n const { sourceKind, seedRefs } = provenance;\n if (typeof sourceKind !== \"string\" || !PROVENANCE_SOURCE_KINDS.has(sourceKind)) {\n errors.push(`${joined}: provenance.sourceKind must be one of ${[...PROVENANCE_SOURCE_KINDS].join(\", \")}`);\n return;\n }\n const stepKind = classifyT2Step(step);\n if (stepKind && T2_STEP_SOURCE_KIND[stepKind] !== sourceKind) {\n errors.push(`${joined}: T2 ${stepKind} token must declare provenance.sourceKind = \"${T2_STEP_SOURCE_KIND[stepKind]}\"`);\n }\n if (SEED_LINEAGE_KINDS.has(sourceKind)) {\n const expected = `{qw.t1.${seed}}`;\n if (!Array.isArray(seedRefs) || seedRefs.length !== 1 || seedRefs[0] !== expected) {\n errors.push(`${joined}: provenance.seedRefs must be exactly [\"${expected}\"]`);\n }\n return;\n }\n if (Array.isArray(seedRefs) && seedRefs.length > 0) {\n errors.push(`${joined}: provenance.sourceKind \"${sourceKind}\" must not fabricate Seed lineage`);\n }\n if (typeof provenance.source !== \"string\" || provenance.source.length === 0) {\n errors.push(`${joined}: provenance.sourceKind \"${sourceKind}\" must declare provenance.source`);\n }\n if (typeof provenance.rationale !== \"string\" || provenance.rationale.length === 0) {\n errors.push(`${joined}: provenance.sourceKind \"${sourceKind}\" must declare provenance.rationale`);\n }\n}\n\n/** T3 角色全集(qw 路径),由 FIGMA_T3_COLOR_ROLES 投影。 */\nexport function figmaT3RolePaths(): string[] {\n return Object.keys(FIGMA_T3_COLOR_ROLES).map((role) => pathKey([FIGMA_COLOR_PREFIX, \"t3\", ...role.split(\".\")]));\n}\n\nexport function validateFigmaColorTokens(doc: unknown): FigmaColorTokenValidationResult {\n const errors: string[] = [];\n const leaves = collectLeaves(doc)\n .map((leaf) => ({ ...leaf, qwPath: qwPath(leaf.path) }))\n .filter((leaf): leaf is TokenLeaf & { qwPath: string[] } => leaf.qwPath != null);\n\n const byQwPath = new Map<string, TokenLeaf & { qwPath: string[] }>();\n for (const leaf of leaves) {\n const key = pathKey(leaf.qwPath);\n if (byQwPath.has(key)) errors.push(`${key}: duplicated token path`);\n byQwPath.set(key, leaf);\n validateNoUnexpectedName(leaf.qwPath, errors);\n }\n\n const t1 = leaves.filter((leaf) => leaf.qwPath[1] === \"t1\");\n const t2 = leaves.filter((leaf) => leaf.qwPath[1] === \"t2\");\n const t3 = leaves.filter((leaf) => leaf.qwPath[1] === \"t3\");\n const unknownLayers = leaves.filter((leaf) => ![\"t1\", \"t2\", \"t3\"].includes(leaf.qwPath[1] ?? \"\"));\n for (const leaf of unknownLayers) errors.push(`${pathKey(leaf.qwPath)}: unknown Color token layer`);\n\n const t1Keys = new Set<string>();\n for (const leaf of t1) {\n const [, , key, ...rest] = leaf.qwPath;\n const joined = pathKey(leaf.qwPath);\n if (rest.length > 0 || !key) errors.push(`${joined}: T1 token must be qw/t1/{seed}`);\n if (key && !T1_SET.has(key)) errors.push(`${joined}: unexpected T1 seed \"${key}\"`);\n if (!isSolidColorValue(leaf.value)) errors.push(`${joined}: T1 seed must be a solid color with alpha = 1`);\n if (key) t1Keys.add(key);\n }\n const missingT1 = T1_COLOR_KEYS.filter((key) => !t1Keys.has(key));\n const extraT1 = [...t1Keys].filter((key) => !T1_SET.has(key));\n if (missingT1.length) errors.push(`qw.t1: missing required seeds ${missingT1.join(\", \")}`);\n if (extraT1.length) errors.push(`qw.t1: unexpected seeds ${extraT1.join(\", \")}`);\n\n const t2BySeed = new Map<string, Set<string>>();\n for (const seed of T1_COLOR_KEYS) t2BySeed.set(seed, new Set());\n for (const leaf of t2) {\n const [, , seed, step, ...rest] = leaf.qwPath;\n const joined = pathKey(leaf.qwPath);\n if (rest.length > 0 || !seed || !step) errors.push(`${joined}: T2 token must be qw/t2/{seed}/{base|alpha|oklch-step}`);\n if (seed && !T1_SET.has(seed)) errors.push(`${joined}: T2 seed \"${seed}\" must exist in T1`);\n const stepKind = step ? classifyT2Step(step) : null;\n if (step && !stepKind) errors.push(`${joined}: unsupported T2 step \"${step}\"`);\n if (!isColorLikeValue(leaf.value) && step !== \"base\") errors.push(`${joined}: T2 token must carry a concrete color value`);\n if (seed && step && T1_SET.has(seed) && stepKind) {\n t2BySeed.get(seed)!.add(step);\n validateT2Provenance(leaf, seed, step, errors);\n }\n }\n for (const seed of T1_COLOR_KEYS) {\n const steps = t2BySeed.get(seed)!;\n const missingAlpha = T2_ALPHA_KEYS.filter((step) => !steps.has(step));\n const missingOklch = T2_OKLCH_STEP_KEYS.filter((step) => !steps.has(step));\n const unexpected = [...steps].filter((step) => !classifyT2Step(step));\n if (!steps.has(\"base\")) errors.push(`qw.t2.${seed}: missing base token`);\n if (missingAlpha.length) errors.push(`qw.t2.${seed}: missing alpha steps ${missingAlpha.join(\", \")}`);\n if (missingOklch.length) errors.push(`qw.t2.${seed}: missing OKLCH steps ${missingOklch.join(\", \")}`);\n if (unexpected.length) errors.push(`qw.t2.${seed}: unexpected steps ${unexpected.join(\", \")}`);\n }\n\n const expectedT3 = new Set(figmaT3RolePaths());\n const actualT3 = new Set<string>();\n for (const leaf of t3) {\n const joined = pathKey(leaf.qwPath);\n actualT3.add(joined);\n validateT3Path(leaf.qwPath, errors);\n if (!expectedT3.has(joined)) errors.push(`${joined}: unexpected T3 role (not in the 60-role Figma set)`);\n const modes = modesOf(leaf);\n const light = refToPath(modes.light);\n const dark = refToPath(modes.dark);\n if (!light || !dark) {\n errors.push(`${joined}: T3 token must declare both light and dark mode references`);\n continue;\n }\n for (const [modeName, ref] of [\n [\"light\", light],\n [\"dark\", dark],\n ] as const) {\n if (ref[0] !== FIGMA_COLOR_PREFIX || ref[1] !== \"t2\") {\n errors.push(`${joined}: ${modeName} mode must reference a T2 token`);\n } else if (!byQwPath.has(pathKey(ref))) {\n errors.push(`${joined}: ${modeName} mode references missing token {${pathKey(ref)}}`);\n }\n }\n }\n const missingT3 = [...expectedT3].filter((role) => !actualT3.has(role));\n if (missingT3.length) errors.push(`qw.t3: missing required roles ${missingT3.join(\", \")}`);\n\n return {\n ok: errors.length === 0,\n errors,\n counts: { t1: t1.length, t2: t2.length, t3: t3.length },\n };\n}\n\nexport function assertFigmaColorTokens(doc: unknown): void {\n const result = validateFigmaColorTokens(doc);\n if (!result.ok) {\n throw new Error(`Invalid Figma Color tokens:\\n${result.errors.map((error) => `- ${error}`).join(\"\\n\")}`);\n }\n}\n"],"mappings":"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"}