# Asset Inventory

## 1. Token 导出文件位置 + 字段结构 + 前 30 行示例

### 1.1 Raw token export
- 位置：
  - /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/figma-data/raw/variables.json
- 顶层字段：`collections`、`variables`、`total`
- 结构说明：
  - `collections[]`：Figma variable collection 与 mode 列表
  - `variables[]`：变量定义，含 `id`、`name`、`collectionId`、`values`
  - `values`：按 `Dark` / `Light` mode 给出具体值，或 alias 到其他变量

前 30 行示例：

```json
{
  "collections": [
    {
      "id": "VariableCollectionId:1558:94780",
      "name": "TVU Design System",
      "modes": [
        {
          "id": "1558:0",
          "name": "Dark"
        },
        {
          "id": "1671:0",
          "name": "Light"
        }
      ]
    }
  ],
  "variables": [
    {
      "id": "VariableID:1558:94781",
      "name": "UX/Grey/grey-1 #FFFFFF",
      "collectionId": "VariableCollectionId:1558:94780",
      "values": {
        "Dark": "#ffffff",
        "Light": "#ffffff"
      }
    },
    {
      "id": "VariableID:1558:94782",
      "name": "UX/Grey/grey-2 #F8F8F8",
```

### 1.2 Normalized token export
- 位置：
  - /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/figma-data/normalized/variables.json
- 用途：供生成 CSS token 与审计脚本消费的归一化 token 输入
- 顶层字段：与 raw export 相同，当前仍保留 `collections`、`variables`、`total`

### 1.3 Generated code token file
- 位置：
  - /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/src/tokens/variables.css
- 结构：
  - 文件头注释：来源、时间戳、生成命令
  - `:root`：dark mode 默认 token
  - `[data-theme="light"]`：light mode 覆盖
  - 命名格式：`--brand`、`--text-heading`、`--bg-layer1`、`--line-border` 等代码侧 token 名

前 30 行示例：

```css
/* AUTO-GENERATED — do not edit manually.
 * Source: figma-data/normalized/variables.json (TVU Design System Figma)
 * Extracted: 2026-04-22T00:00:00.000Z
 * Regenerate: pnpm generate
 * Dark/Light theme: apply [data-theme="light"] to <html> to switch to light mode.
 */

/* ── Dark mode (default) ── */
:root {
  --color-white: #ffffff;
  --color-grey-2: #f8f8f8;
  --color-grey-3: #f0f0f0;
  --color-grey-4: #dbdbdb;
  --color-grey-5: #cccccc;
  --color-grey-6: #9e9e9e;
  --color-grey-8: #595959;
  --color-grey-9: #434343;
  --color-grey-10: #353535;
  --color-grey-11: #262626;
  --color-grey-12: #1f1f1f;
  --color-grey-13: #141414;
  --color-grey-14: #000000;
  --color-grey-7: #7b7b7b;
  --brand: #2fb54e;
  --brand-match: #0b2b13;
  --brand-disable: #1a652c;
  --brand-hover: #41c760;
  --red: #ea4233;
  --red-hover: #ed5b4e;
  --red-bg: #fff1f0;
```

## 2. Style 导出文件（如有）

- 未发现独立的 Figma style JSON 导出（如 `styles.json`）
- 当前最接近 style 导出职责的文件是：
  - `figma-data/raw/variables.json`：Figma variable 原始导出
  - `figma-data/normalized/variables.json`：归一化 token 输入
  - `src/tokens/variables.css`：代码侧实际消费的样式 token
- 结论：当前仓库是 token-first，而不是独立 style-export-first

## 3. 组件 JSON 导出位置 + Notification / PromptMessage / Button 三个完整内容

### 3.1 组件导出总索引
- 位置：
  - /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/figma-data/raw/components.index.json
- 顶层字段：`extractedAt`、`figmaFileKey`、`count`、`components`
- `components[]` 字段：`figmaName`、`nodeId`、`type`、`pageName`、`filename`、`variants`

### 3.2 Notification export
- 索引条目：`figmaName = Notification`、`nodeId = 1408:17154`
- 原始文件：
  - /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/figma-data/raw/components/notification__1408_17154.json

完整内容：

```json
{
  "extractedAt": "2026-04-24T09:52:57.461Z",
  "figmaFileKey": "YbsPRUVmNdsbN40NNwh1Gn",
  "figmaName": "Notification",
  "nodeId": "1408:17154",
  "type": "COMPONENT_SET",
  "pageId": "1379:4191",
  "pageName": "— — Notifications & Pop box",
  "description": "",
  "key": "23535120dbdc93bf90af9a118b5091e58b590dc6",
  "variants": [
    {
      "id": "1408:17123",
      "name": "theme=dark, status=warning",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 182,
      "w": 480,
      "x": -12129,
      "y": -4743,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 40,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#353535",
          "v": "VariableID:VariableID:2611:57622"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#434343",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#f8f8f8",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1392:1786;1517:28004",
        "I1392:1786;1538:132",
        "I1392:1817;1480:73575",
        "I1392:1817;1480:73576",
        "I1392:1817;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1539:31680",
      "name": "theme=dark, status=secondary warning",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 182,
      "w": 480,
      "x": -12129,
      "y": -4490,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 40,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#353535",
          "v": "VariableID:VariableID:2611:57622"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#434343",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#f8f8f8",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1539:31682;1517:27746",
        "I1539:31682;1538:130",
        "I1539:31686;1480:73575",
        "I1539:31686;1480:73576",
        "I1539:31686;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17129",
      "name": "theme=light, status=warning",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 182,
      "w": 480,
      "x": -11485,
      "y": -4743,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 40,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#f8f8f8",
          "v": "VariableID:VariableID:2611:57620"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#cccccc",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#141414",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1400:5332;1517:28004",
        "I1400:5332;1538:132",
        "I1400:5336;1480:73575",
        "I1400:5336;1480:73576",
        "I1400:5336;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1539:31691",
      "name": "theme=light, status=secondary warning",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 182,
      "w": 480,
      "x": -11485,
      "y": -4490,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 40,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#f8f8f8",
          "v": "VariableID:VariableID:2611:57620"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#cccccc",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#141414",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1539:31693;1517:27746",
        "I1539:31693;1538:130",
        "I1539:31697;1480:73575",
        "I1539:31697;1480:73576",
        "I1539:31697;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17125",
      "name": "theme=dark, status=error",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 182,
      "w": 480,
      "x": -12129,
      "y": -3984,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 40,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#353535",
          "v": "VariableID:VariableID:2611:57622"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#434343",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#f8f8f8",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1396:5204;1544:33368",
        "I1396:5217;1480:73575",
        "I1396:5217;1480:73576",
        "I1396:5217;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17131",
      "name": "theme=light, status=error",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 182,
      "w": 480,
      "x": -11485,
      "y": -3984,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 40,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#f8f8f8",
          "v": "VariableID:VariableID:2611:57620"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#cccccc",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#141414",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1400:5435;1544:33368",
        "I1400:5439;1480:73575",
        "I1400:5439;1480:73576",
        "I1400:5439;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17126",
      "name": "theme=dark, status=pop confirm",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 182,
      "w": 480,
      "x": -12129,
      "y": -3731,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 40,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#353535",
          "v": "VariableID:VariableID:2611:57622"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#434343",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#f8f8f8",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1545:21989;1480:73575",
        "I1545:21989;1480:73576",
        "I1545:21989;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17132",
      "name": "theme=light, status=pop confirm",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 182,
      "w": 480,
      "x": -11485,
      "y": -3731,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 40,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#f8f8f8",
          "v": "VariableID:VariableID:2611:57620"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#cccccc",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#141414",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1545:22067;1480:73575",
        "I1545:22067;1480:73576",
        "I1545:22067;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17128",
      "name": "theme=dark, status=quick confirm",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 158,
      "w": 280,
      "x": -12129,
      "y": -3478,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 24,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#353535",
          "v": "VariableID:VariableID:2611:57622"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#434343",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "Are you sure you want to delete ‘XXXX’?",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 14,
        "fontFamily": "Roboto",
        "fontWeight": 400,
        "lineHeightPx": 21,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#f8f8f8",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1400:5313;1480:73575",
        "I1400:5313;1480:73576",
        "I1400:5313;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17134",
      "name": "theme=light, status=quick confirm",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 158,
      "w": 280,
      "x": -11485,
      "y": -3478,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 24,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#f8f8f8",
          "v": "VariableID:VariableID:2611:57620"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#cccccc",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "Are you sure you want to delete ‘XXXX’?",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 14,
        "fontFamily": "Roboto",
        "fontWeight": 400,
        "lineHeightPx": 21,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#141414",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1400:5533;1480:73575",
        "I1400:5533;1480:73576",
        "I1400:5533;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17127",
      "name": "theme=dark, status=side pop",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 110,
      "w": 320,
      "x": -12129,
      "y": -3249,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 12,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#353535",
          "v": "VariableID:VariableID:2611:57622"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#434343",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#f8f8f8",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1708:25148;1480:73575",
        "I1708:25148;1480:73576",
        "I1708:25148;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17133",
      "name": "theme=light, status=side pop",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 110,
      "w": 320,
      "x": -11485,
      "y": -3249,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 12,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#f8f8f8",
          "v": "VariableID:VariableID:2611:57620"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#cccccc",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#141414",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1708:25070;1480:73575",
        "I1708:25070;1480:73576",
        "I1708:25070;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17124",
      "name": "theme=dark, status=info",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 182,
      "w": 480,
      "x": -12129,
      "y": -4237,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 40,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#353535",
          "v": "VariableID:VariableID:2611:57622"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#434343",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#f8f8f8",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1396:5174;1517:27670",
        "I1396:5186;1480:73575",
        "I1396:5186;1480:73576",
        "I1396:5186;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17130",
      "name": "theme=light, status=info",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 182,
      "w": 480,
      "x": -11485,
      "y": -4237,
      "pH": 24,
      "pV": 16,
      "pR": 24,
      "pB": 16,
      "gap": 40,
      "r": 6,
      "layoutMode": "VERTICAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#f8f8f8",
          "v": "VariableID:VariableID:2611:57620"
        }
      ],
      "strokes": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#cccccc",
          "v": "VariableID:VariableID:2611:57630"
        }
      ],
      "strokeWeight": 1.2000000476837158,
      "effects": [
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 48,
          "spread": 16,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 12
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.029999999329447746
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 28,
          "spread": null,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 9
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.05000000074505806
          }
        },
        {
          "type": "DROP_SHADOW",
          "visible": true,
          "radius": 16,
          "spread": -8,
          "blendMode": "NORMAL",
          "offset": {
            "x": 0,
            "y": 6
          },
          "color": {
            "hex": "#000000",
            "opacity": 0.07999999821186066
          }
        }
      ],
      "text": {
        "characters": "This is the title",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 16,
        "fontFamily": "Roboto",
        "fontWeight": 600,
        "lineHeightPx": 24,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#141414",
            "v": "VariableID:VariableID:2611:57509"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1400:5395;1517:27670",
        "I1400:5399;1480:73575",
        "I1400:5399;1480:73576",
        "I1400:5399;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17154",
      "componentPropertyReferences": null
    }
  ]
}
```

### 3.3 PromptMessage export
- 索引条目：`figmaName = prompt message`、`nodeId = 1408:17153`
- 原始文件：
  - /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/figma-data/raw/components/prompt_message__1408_17153.json

完整内容：

```json
{
  "extractedAt": "2026-04-24T09:52:57.462Z",
  "figmaFileKey": "YbsPRUVmNdsbN40NNwh1Gn",
  "figmaName": "prompt message",
  "nodeId": "1408:17153",
  "type": "COMPONENT_SET",
  "pageId": "1379:4191",
  "pageName": "— — Notifications & Pop box",
  "description": "",
  "key": "e9574b39e93ac3ffe94834f05d704798ce997274",
  "variants": [
    {
      "id": "1408:17150",
      "name": "interact=Yes, status=success, size=L",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 45,
      "w": 427,
      "x": -12006,
      "y": -403,
      "pH": 16,
      "pV": 12,
      "pR": 16,
      "pB": 12,
      "gap": 8,
      "r": 4,
      "layoutMode": "HORIZONTAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": "CENTER",
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#f1fbf3"
        }
      ],
      "strokes": [],
      "strokeWeight": 1,
      "effects": [],
      "text": {
        "characters": "This is a success message and click close to disappear.",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 14,
        "fontFamily": "Roboto",
        "fontWeight": 400,
        "lineHeightPx": 21,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#2fb54e",
            "v": "VariableID:VariableID:1626:104889"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1400:16472;1517:28928",
        "I1400:16472;1517:29808",
        "I1408:16950;1480:73575",
        "I1408:16950;1480:73576",
        "I1408:16950;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17153",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17148",
      "name": "interact=Yes, status=warning, size=L",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 45,
      "w": 421,
      "x": -12006,
      "y": -469.33349609375,
      "pH": 16,
      "pV": 12,
      "pR": 16,
      "pB": 12,
      "gap": 8,
      "r": 4,
      "layoutMode": "HORIZONTAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": "CENTER",
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#fff3db",
          "v": "VariableID:VariableID:1671:114769"
        }
      ],
      "strokes": [],
      "strokeWeight": 1,
      "effects": [],
      "text": {
        "characters": "This is a prompt message and click close to disappear.",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 14,
        "fontFamily": "Roboto",
        "fontWeight": 400,
        "lineHeightPx": 21,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#f68512",
            "v": "VariableID:VariableID:1671:114765"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1400:16455;1517:27746",
        "I1400:16455;1538:130",
        "I1408:16938;1480:73575",
        "I1408:16938;1480:73576",
        "I1408:16938;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17153",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17146",
      "name": "interact=Yes, status=error, size=L",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 45,
      "w": 443,
      "x": -12006,
      "y": -536,
      "pH": 16,
      "pV": 12,
      "pR": 16,
      "pB": 12,
      "gap": 8,
      "r": 4,
      "layoutMode": "HORIZONTAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": "CENTER",
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#fff1f0",
          "v": "VariableID:VariableID:1671:111677"
        }
      ],
      "strokes": [],
      "strokeWeight": 1,
      "effects": [],
      "text": {
        "characters": "This is an abnormal message and click close to disappear.",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 14,
        "fontFamily": "Roboto",
        "fontWeight": 400,
        "lineHeightPx": 21,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#ea4233",
            "v": "VariableID:VariableID:1671:111623"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1400:16442;1544:33368",
        "I1408:16926;1480:73575",
        "I1408:16926;1480:73576",
        "I1408:16926;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17153",
      "componentPropertyReferences": null
    },
    {
      "id": "1408:17143",
      "name": "interact=Yes, status=info, size=L",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 45,
      "w": 456,
      "x": -12006,
      "y": -602,
      "pH": 16,
      "pV": 12,
      "pR": 16,
      "pB": 12,
      "gap": 8,
      "r": 4,
      "layoutMode": "HORIZONTAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": "CENTER",
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#e1eefd",
          "v": "VariableID:VariableID:1671:114781"
        }
      ],
      "strokes": [],
      "strokeWeight": 1,
      "effects": [],
      "text": {
        "characters": "This is an information message and click close to disappear.",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 14,
        "fontFamily": "Roboto",
        "fontWeight": 400,
        "lineHeightPx": 21,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#3892f3",
            "v": "VariableID:VariableID:1671:114779"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1400:9762;1517:27670",
        "I1408:16915;1480:73575",
        "I1408:16915;1480:73576",
        "I1408:16915;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17153",
      "componentPropertyReferences": null
    },
    {
      "id": "1545:19942",
      "name": "interact=Yes, status=success, size=M",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 66,
      "w": 320,
      "x": -12006,
      "y": 18.0009765625,
      "pH": 16,
      "pV": 12,
      "pR": 16,
      "pB": 12,
      "gap": 8,
      "r": 4,
      "layoutMode": "HORIZONTAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#f1fbf3"
        }
      ],
      "strokes": [],
      "strokeWeight": 1,
      "effects": [],
      "text": {
        "characters": "This is a success message and will disappear voluntarily.",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 14,
        "fontFamily": "Roboto",
        "fontWeight": 400,
        "lineHeightPx": 21,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#2fb54e",
            "v": "VariableID:VariableID:1626:104889"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1545:6012;1517:28928",
        "I1545:6012;1517:29808",
        "I1545:6014;1480:73575",
        "I1545:6014;1480:73576",
        "I1545:6014;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17153",
      "componentPropertyReferences": null
    },
    {
      "id": "1545:19940",
      "name": "interact=Yes, status=warning, size=M",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 66,
      "w": 320,
      "x": -12006,
      "y": -72.666015625,
      "pH": 16,
      "pV": 12,
      "pR": 16,
      "pB": 12,
      "gap": 8,
      "r": 4,
      "layoutMode": "HORIZONTAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#fff3db",
          "v": "VariableID:VariableID:1671:114769"
        }
      ],
      "strokes": [],
      "strokeWeight": 1,
      "effects": [],
      "text": {
        "characters": "This is a prompt message and will disappear voluntarily.",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 14,
        "fontFamily": "Roboto",
        "fontWeight": 400,
        "lineHeightPx": 21,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#f68512",
            "v": "VariableID:VariableID:1671:114765"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1545:6019;1517:27746",
        "I1545:6019;1538:130",
        "I1545:6021;1480:73575",
        "I1545:6021;1480:73576",
        "I1545:6021;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17153",
      "componentPropertyReferences": null
    },
    {
      "id": "1545:19941",
      "name": "interact=Yes, status=error, size=M",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 66,
      "w": 320,
      "x": -12006,
      "y": -163.3330078125,
      "pH": 16,
      "pV": 12,
      "pR": 16,
      "pB": 12,
      "gap": 8,
      "r": 4,
      "layoutMode": "HORIZONTAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#fff1f0",
          "v": "VariableID:VariableID:1671:111677"
        }
      ],
      "strokes": [],
      "strokeWeight": 1,
      "effects": [],
      "text": {
        "characters": "This is an abnormal message and will disappear voluntarily.",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 14,
        "fontFamily": "Roboto",
        "fontWeight": 400,
        "lineHeightPx": 21,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#ea4233",
            "v": "VariableID:VariableID:1671:111623"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1545:6026;1544:33368",
        "I1545:6028;1480:73575",
        "I1545:6028;1480:73576",
        "I1545:6028;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17153",
      "componentPropertyReferences": null
    },
    {
      "id": "1545:19935",
      "name": "interact=Yes, status=info, size=M",
      "type": "COMPONENT",
      "visible": true,
      "opacity": 1,
      "blendMode": "PASS_THROUGH",
      "h": 66,
      "w": 320,
      "x": -12006,
      "y": -254,
      "pH": 16,
      "pV": 12,
      "pR": 16,
      "pB": 12,
      "gap": 8,
      "r": 4,
      "layoutMode": "HORIZONTAL",
      "primaryAxisAlignItems": null,
      "counterAxisAlignItems": null,
      "fills": [
        {
          "type": "SOLID",
          "visible": true,
          "opacity": 1,
          "blendMode": "NORMAL",
          "hex": "#e1eefd",
          "v": "VariableID:VariableID:1671:114781"
        }
      ],
      "strokes": [],
      "strokeWeight": 1,
      "effects": [],
      "text": {
        "characters": "This is an information message and will disappear voluntarily.",
        "visible": true,
        "opacity": 1,
        "blendMode": "PASS_THROUGH",
        "size": 14,
        "fontFamily": "Roboto",
        "fontWeight": 400,
        "lineHeightPx": 21,
        "letterSpacing": 0,
        "textCase": null,
        "textDecoration": null,
        "fills": [
          {
            "type": "SOLID",
            "visible": true,
            "opacity": 1,
            "blendMode": "NORMAL",
            "hex": "#3892f3",
            "v": "VariableID:VariableID:1671:114779"
          }
        ],
        "v": null
      },
      "vectorNodeIds": [
        "I1545:6033;1517:27670",
        "I1545:6035;1480:73575",
        "I1545:6035;1480:73576",
        "I1545:6035;1480:74296"
      ],
      "description": null,
      "componentSetId": "1408:17153",
      "componentPropertyReferences": null
    }
  ]
}
```

### 3.4 Button export
- Raw 层没有单一 `button__*.json` 聚合文件，Button 在 `components.index.json` 中分散为多个 component set：
  - `Button/url link`
  - `Button/light L|M|S|XS`
  - `Button/dark L|M|S|XS`
- 因此这里记录两层入口：
  - Raw sets：/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/figma-data/raw/components/
  - Normalized aggregate：/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/figma-data/normalized/button-generation-sample.json
- 作为“Button 完整内容”归档，本清单采用当前仓库唯一聚合态文件 `button-generation-sample.json`

Button 相关索引条目：

```json
{
  "figmaName": "Button/url link",
  "nodeId": "438:7995",
  "type": "COMPONENT_SET",
  "pageName": "— — Buttons",
  "filename": "button_url_link__438_7995.json",
  "variants": 4
}
{
  "figmaName": "Button/light M",
  "nodeId": "1545:47447",
  "type": "COMPONENT_SET",
  "pageName": "— — Buttons",
  "filename": "button_light_m__1545_47447.json",
  "variants": 400
}
{
  "figmaName": "Button/light S",
  "nodeId": "1545:51851",
  "type": "COMPONENT_SET",
  "pageName": "— — Buttons",
  "filename": "button_light_s__1545_51851.json",
  "variants": 400
}
{
  "figmaName": "Button/light XS",
  "nodeId": "1545:51852",
  "type": "COMPONENT_SET",
  "pageName": "— — Buttons",
  "filename": "button_light_xs__1545_51852.json",
  "variants": 400
}
{
  "figmaName": "Button/light L",
  "nodeId": "1545:47446",
  "type": "COMPONENT_SET",
  "pageName": "— — Buttons",
  "filename": "button_light_l__1545_47446.json",
  "variants": 400
}
{
  "figmaName": "Button/dark L",
  "nodeId": "1545:51854",
  "type": "COMPONENT_SET",
  "pageName": "— — Buttons",
  "filename": "button_dark_l__1545_51854.json",
  "variants": 400
}
{
  "figmaName": "Button/dark M",
  "nodeId": "1545:51964",
  "type": "COMPONENT_SET",
  "pageName": "— — Buttons",
  "filename": "button_dark_m__1545_51964.json",
  "variants": 400
}
{
  "figmaName": "Button/dark S",
  "nodeId": "1545:57246",
  "type": "COMPONENT_SET",
  "pageName": "— — Buttons",
  "filename": "button_dark_s__1545_57246.json",
  "variants": 400
}
{
  "figmaName": "Button/dark XS",
  "nodeId": "1545:57247",
  "type": "COMPONENT_SET",
  "pageName": "— — Buttons",
  "filename": "button_dark_xs__1545_57247.json",
  "variants": 400
}
```

Button 聚合文件完整内容：

```json
{
  "generatedAt": "2026-04-24T06:02:51.971Z",
  "generatorMode": "manifest-driven-sample-contract",
  "purpose": "This file is the transitional Button sample contract used to repair the Figma-conformance generation chain before runtime component generation resumes.",
  "source": {
    "canonicalSpecs": "figma-data/normalized/canonical-components.json",
    "manifest": "figma-data/normalized/components.manifest.json",
    "sourceLayer": "components-tokenized"
  },
  "button": {
    "codeComponent": "Button",
    "generationPriority": 1,
    "canonicalStatus": "needs-review",
    "memberCount": 8,
    "totalVariants": 3200,
    "averageTokenCoverage": 100,
    "mergedVariantAxes": [
      {
        "figmaAxis": "color",
        "propName": "color",
        "values": [
          "gray 1",
          "green",
          "orange",
          "red"
        ],
        "sources": [
          "Button/dark L",
          "Button/dark M",
          "Button/dark S",
          "Button/dark XS",
          "Button/light L",
          "Button/light M",
          "Button/light S",
          "Button/light XS"
        ]
      },
      {
        "figmaAxis": "fixed width",
        "propName": "fixedWidth",
        "values": [
          "no",
          "yes"
        ],
        "sources": [
          "Button/dark L",
          "Button/dark M",
          "Button/dark S",
          "Button/dark XS",
          "Button/light L",
          "Button/light M",
          "Button/light S",
          "Button/light XS"
        ]
      },
      {
        "figmaAxis": "icon",
        "propName": "icon",
        "values": [
          "left",
          "light",
          "loading",
          "loading button",
          "no",
          "right"
        ],
        "sources": [
          "Button/dark L",
          "Button/dark M",
          "Button/dark S",
          "Button/dark XS",
          "Button/light L",
          "Button/light M",
          "Button/light S",
          "Button/light XS"
        ]
      },
      {
        "figmaAxis": "radius",
        "propName": "radius",
        "values": [
          "round",
          "square"
        ],
        "sources": [
          "Button/dark L",
          "Button/dark M",
          "Button/dark S",
          "Button/dark XS",
          "Button/light L",
          "Button/light M",
          "Button/light S",
          "Button/light XS"
        ]
      },
      {
        "figmaAxis": "derived size",
        "propName": "size",
        "values": [
          "L",
          "M",
          "S",
          "XS"
        ],
        "sources": [
          "Button/dark L",
          "Button/dark M",
          "Button/dark S",
          "Button/dark XS",
          "Button/light L",
          "Button/light M",
          "Button/light S",
          "Button/light XS"
        ]
      },
      {
        "figmaAxis": "status",
        "propName": "status",
        "values": [
          "default",
          "disable",
          "hover",
          "loading"
        ],
        "sources": [
          "Button/dark L",
          "Button/dark M",
          "Button/dark S",
          "Button/dark XS",
          "Button/light L",
          "Button/light M",
          "Button/light S",
          "Button/light XS"
        ]
      },
      {
        "figmaAxis": "style",
        "propName": "style",
        "values": [
          "filling",
          "ghost",
          "rimless"
        ],
        "sources": [
          "Button/dark L",
          "Button/dark M",
          "Button/dark S",
          "Button/dark XS",
          "Button/light L",
          "Button/light M",
          "Button/light S",
          "Button/light XS"
        ]
      }
    ],
    "blockingFindings": [
      {
        "code": "mixed-theme-members",
        "severity": "warning",
        "detail": "Button canonical spec currently merges light and dark member families before a stable canonical theme strategy exists."
      }
    ],
    "resolvedContract": {
      "includedMembers": [
        "Button/dark L",
        "Button/dark M",
        "Button/dark S",
        "Button/dark XS",
        "Button/light L",
        "Button/light M",
        "Button/light S",
        "Button/light XS"
      ],
      "excludedMembers": [
        {
          "figmaName": "Button/url link",
          "nodeId": "438:7995",
          "reason": "separate-link-family",
          "detail": "URL link introduces a distinct interaction family and darkTheme axis; it should not stay inside the main Button canonical contract."
        }
      ],
      "normalizedAxes": [
        {
          "figmaAxis": "color",
          "propName": "color",
          "values": [
            "gray 1",
            "green",
            "orange",
            "red"
          ],
          "sources": [
            "Button/dark L",
            "Button/dark M",
            "Button/dark S",
            "Button/dark XS",
            "Button/light L",
            "Button/light M",
            "Button/light S",
            "Button/light XS"
          ]
        },
        {
          "figmaAxis": "fixed width",
          "propName": "fixedWidth",
          "values": [
            "no",
            "yes"
          ],
          "sources": [
            "Button/dark L",
            "Button/dark M",
            "Button/dark S",
            "Button/dark XS",
            "Button/light L",
            "Button/light M",
            "Button/light S",
            "Button/light XS"
          ]
        },
        {
          "figmaAxis": "icon",
          "propName": "icon",
          "values": [
            "left",
            "light",
            "loading",
            "loading button",
            "no",
            "right"
          ],
          "sources": [
            "Button/dark L",
            "Button/dark M",
            "Button/dark S",
            "Button/dark XS",
            "Button/light L",
            "Button/light M",
            "Button/light S",
            "Button/light XS"
          ]
        },
        {
          "figmaAxis": "radius",
          "propName": "radius",
          "values": [
            "round",
            "square"
          ],
          "sources": [
            "Button/dark L",
            "Button/dark M",
            "Button/dark S",
            "Button/dark XS",
            "Button/light L",
            "Button/light M",
            "Button/light S",
            "Button/light XS"
          ]
        },
        {
          "figmaAxis": "derived size",
          "propName": "size",
          "values": [
            "L",
            "M",
            "S",
            "XS"
          ],
          "sources": [
            "Button/dark L",
            "Button/dark M",
            "Button/dark S",
            "Button/dark XS",
            "Button/light L",
            "Button/light M",
            "Button/light S",
            "Button/light XS"
          ]
        },
        {
          "figmaAxis": "status",
          "propName": "status",
          "values": [
            "default",
            "disable",
            "hover",
            "loading"
          ],
          "sources": [
            "Button/dark L",
            "Button/dark M",
            "Button/dark S",
            "Button/dark XS",
            "Button/light L",
            "Button/light M",
            "Button/light S",
            "Button/light XS"
          ]
        },
        {
          "figmaAxis": "style",
          "propName": "style",
          "values": [
            "filling",
            "ghost",
            "rimless"
          ],
          "sources": [
            "Button/dark L",
            "Button/dark M",
            "Button/dark S",
            "Button/dark XS",
            "Button/light L",
            "Button/light M",
            "Button/light S",
            "Button/light XS"
          ]
        }
      ],
      "themeFamilies": [
        "dark",
        "light"
      ]
    },
    "members": [
      {
        "figmaName": "Button/dark L",
        "pageName": "— — Buttons",
        "nodeId": "1545:51854",
        "filename": "button_dark_l__1545_51854.json",
        "tokenCoverage": {
          "totalRefs": 799,
          "resolvedRefs": 799,
          "unresolvedRefs": 0,
          "resolvedPercent": 100,
          "unresolvedVariableIds": [],
          "unresolvedSamples": []
        },
        "manifestPresent": true,
        "manifestCodeName": "ButtonDarkL",
        "manifestVariantAxes": [
          {
            "figmaAxis": "icon",
            "propName": "icon",
            "values": [
              "no",
              "right",
              "left",
              "loading"
            ]
          },
          {
            "figmaAxis": "style",
            "propName": "style",
            "values": [
              "filling",
              "ghost",
              "rimless"
            ]
          },
          {
            "figmaAxis": "color",
            "propName": "color",
            "values": [
              "green",
              "red",
              "orange",
              "gray 1"
            ]
          },
          {
            "figmaAxis": "status",
            "propName": "status",
            "values": [
              "hover",
              "disable",
              "default",
              "loading"
            ]
          },
          {
            "figmaAxis": "radius",
            "propName": "radius",
            "values": [
              "square",
              "round"
            ]
          },
          {
            "figmaAxis": "fixed width",
            "propName": "fixedWidth",
            "values": [
              "yes",
              "no"
            ]
          }
        ],
        "sampleVariants": [
          {
            "nodeId": "314:47402",
            "figmaVariantName": "icon=no, style=filling, color=green, status=hover, radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "hover",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "314:47367",
            "figmaVariantName": "icon=no, style=filling, color=green, status=disable, radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "disable",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "314:47337",
            "figmaVariantName": "icon=no, style=filling, color=red, status=default, radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "red",
              "status": "default",
              "radius": "square",
              "fixedWidth": "yes"
            }
          }
        ]
      },
      {
        "figmaName": "Button/dark M",
        "pageName": "— — Buttons",
        "nodeId": "1545:51964",
        "filename": "button_dark_m__1545_51964.json",
        "tokenCoverage": {
          "totalRefs": 792,
          "resolvedRefs": 792,
          "unresolvedRefs": 0,
          "resolvedPercent": 100,
          "unresolvedVariableIds": [],
          "unresolvedSamples": []
        },
        "manifestPresent": true,
        "manifestCodeName": "ButtonDarkM",
        "manifestVariantAxes": [
          {
            "figmaAxis": "icon",
            "propName": "icon",
            "values": [
              "left",
              "no",
              "right",
              "loading"
            ]
          },
          {
            "figmaAxis": "style",
            "propName": "style",
            "values": [
              "filling",
              "ghost",
              "rimless"
            ]
          },
          {
            "figmaAxis": "color",
            "propName": "color",
            "values": [
              "green",
              "red",
              "orange",
              "gray 1"
            ]
          },
          {
            "figmaAxis": "status",
            "propName": "status",
            "values": [
              "default",
              "hover",
              "disable",
              "loading"
            ]
          },
          {
            "figmaAxis": "radius",
            "propName": "radius",
            "values": [
              "square",
              "round"
            ]
          },
          {
            "figmaAxis": "fixed width",
            "propName": "fixedWidth",
            "values": [
              "yes",
              "no"
            ]
          }
        ],
        "sampleVariants": [
          {
            "nodeId": "1421:27616",
            "figmaVariantName": "icon=left, style=filling, color=green, status=default, radius=square, fixed width=yes",
            "props": {
              "icon": "left",
              "style": "filling",
              "color": "green",
              "status": "default",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "1421:27622",
            "figmaVariantName": "icon=left, style=filling, color=green, status=hover, radius=square, fixed width=yes",
            "props": {
              "icon": "left",
              "style": "filling",
              "color": "green",
              "status": "hover",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "1421:27628",
            "figmaVariantName": "icon=left, style=filling, color=green, status=disable, radius=square, fixed width=yes",
            "props": {
              "icon": "left",
              "style": "filling",
              "color": "green",
              "status": "disable",
              "radius": "square",
              "fixedWidth": "yes"
            }
          }
        ]
      },
      {
        "figmaName": "Button/dark S",
        "pageName": "— — Buttons",
        "nodeId": "1545:57246",
        "filename": "button_dark_s__1545_57246.json",
        "tokenCoverage": {
          "totalRefs": 804,
          "resolvedRefs": 804,
          "unresolvedRefs": 0,
          "resolvedPercent": 100,
          "unresolvedVariableIds": [],
          "unresolvedSamples": []
        },
        "manifestPresent": true,
        "manifestCodeName": "ButtonDarkS",
        "manifestVariantAxes": [
          {
            "figmaAxis": "icon",
            "propName": "icon",
            "values": [
              "left",
              "no",
              "right",
              "loading"
            ]
          },
          {
            "figmaAxis": "style",
            "propName": "style",
            "values": [
              "filling",
              "ghost",
              "rimless"
            ]
          },
          {
            "figmaAxis": "color",
            "propName": "color",
            "values": [
              "green",
              "red",
              "orange",
              "gray 1"
            ]
          },
          {
            "figmaAxis": "status",
            "propName": "status",
            "values": [
              "default",
              "hover",
              "disable",
              "loading"
            ]
          },
          {
            "figmaAxis": "radius",
            "propName": "radius",
            "values": [
              "square",
              "round"
            ]
          },
          {
            "figmaAxis": "fixed width",
            "propName": "fixedWidth",
            "values": [
              "yes",
              "no"
            ]
          }
        ],
        "sampleVariants": [
          {
            "nodeId": "1421:27892",
            "figmaVariantName": "icon=left, style=filling, color=green, status=default, radius=square, fixed width=yes",
            "props": {
              "icon": "left",
              "style": "filling",
              "color": "green",
              "status": "default",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "1421:27898",
            "figmaVariantName": "icon=left, style=filling, color=green, status=hover, radius=square, fixed width=yes",
            "props": {
              "icon": "left",
              "style": "filling",
              "color": "green",
              "status": "hover",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "1421:27904",
            "figmaVariantName": "icon=left, style=filling, color=green, status=disable, radius=square, fixed width=yes",
            "props": {
              "icon": "left",
              "style": "filling",
              "color": "green",
              "status": "disable",
              "radius": "square",
              "fixedWidth": "yes"
            }
          }
        ]
      },
      {
        "figmaName": "Button/dark XS",
        "pageName": "— — Buttons",
        "nodeId": "1545:57247",
        "filename": "button_dark_xs__1545_57247.json",
        "tokenCoverage": {
          "totalRefs": 796,
          "resolvedRefs": 796,
          "unresolvedRefs": 0,
          "resolvedPercent": 100,
          "unresolvedVariableIds": [],
          "unresolvedSamples": []
        },
        "manifestPresent": true,
        "manifestCodeName": "ButtonDarkXs",
        "manifestVariantAxes": [
          {
            "figmaAxis": "icon",
            "propName": "icon",
            "values": [
              "no",
              "left",
              "right",
              "loading"
            ]
          },
          {
            "figmaAxis": "style",
            "propName": "style",
            "values": [
              "filling",
              "ghost",
              "rimless"
            ]
          },
          {
            "figmaAxis": "color",
            "propName": "color",
            "values": [
              "green",
              "red",
              "orange",
              "gray 1"
            ]
          },
          {
            "figmaAxis": "status",
            "propName": "status",
            "values": [
              "default",
              "hover",
              "disable",
              "loading"
            ]
          },
          {
            "figmaAxis": "radius",
            "propName": "radius",
            "values": [
              "square",
              "round"
            ]
          },
          {
            "figmaAxis": "fixed width",
            "propName": "fixedWidth",
            "values": [
              "yes",
              "no"
            ]
          }
        ],
        "sampleVariants": [
          {
            "nodeId": "314:47685",
            "figmaVariantName": "icon=no, style=filling, color=green, status=default, radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "default",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "314:47755",
            "figmaVariantName": "icon=no, style=filling, color=green, status=hover, radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "hover",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "314:47718",
            "figmaVariantName": "icon=no, style=filling, color=green, status=disable, radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "disable",
              "radius": "square",
              "fixedWidth": "yes"
            }
          }
        ]
      },
      {
        "figmaName": "Button/light L",
        "pageName": "— — Buttons",
        "nodeId": "1545:47446",
        "filename": "button_light_l__1545_47446.json",
        "tokenCoverage": {
          "totalRefs": 792,
          "resolvedRefs": 792,
          "unresolvedRefs": 0,
          "resolvedPercent": 100,
          "unresolvedVariableIds": [],
          "unresolvedSamples": []
        },
        "manifestPresent": true,
        "manifestCodeName": "ButtonLightL",
        "manifestVariantAxes": [
          {
            "figmaAxis": "icon",
            "propName": "icon",
            "values": [
              "no",
              "right",
              "left",
              "loading button",
              "light"
            ]
          },
          {
            "figmaAxis": "style",
            "propName": "style",
            "values": [
              "filling",
              "ghost",
              "rimless"
            ]
          },
          {
            "figmaAxis": "color",
            "propName": "color",
            "values": [
              "green",
              "red",
              "orange",
              "gray 1"
            ]
          },
          {
            "figmaAxis": "status",
            "propName": "status",
            "values": [
              "default",
              "disable",
              "hover",
              "loading"
            ]
          },
          {
            "figmaAxis": "Radius",
            "propName": "radius",
            "values": [
              "square",
              "round"
            ]
          },
          {
            "figmaAxis": "fixed width",
            "propName": "fixedWidth",
            "values": [
              "yes",
              "no"
            ]
          }
        ],
        "sampleVariants": [
          {
            "nodeId": "314:46720",
            "figmaVariantName": "icon=no, style=filling, color=green, status=default, Radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "default",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "314:46729",
            "figmaVariantName": "icon=no, style=filling, color=green, status=default, Radius=square, fixed width=no",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "default",
              "radius": "square",
              "fixedWidth": "no"
            }
          },
          {
            "nodeId": "314:46779",
            "figmaVariantName": "icon=no, style=filling, color=green, status=disable, Radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "disable",
              "radius": "square",
              "fixedWidth": "yes"
            }
          }
        ]
      },
      {
        "figmaName": "Button/light M",
        "pageName": "— — Buttons",
        "nodeId": "1545:47447",
        "filename": "button_light_m__1545_47447.json",
        "tokenCoverage": {
          "totalRefs": 810,
          "resolvedRefs": 810,
          "unresolvedRefs": 0,
          "resolvedPercent": 100,
          "unresolvedVariableIds": [],
          "unresolvedSamples": []
        },
        "manifestPresent": true,
        "manifestCodeName": "ButtonLightM",
        "manifestVariantAxes": [
          {
            "figmaAxis": "icon",
            "propName": "icon",
            "values": [
              "no",
              "right",
              "left",
              "loading"
            ]
          },
          {
            "figmaAxis": "style",
            "propName": "style",
            "values": [
              "filling",
              "ghost",
              "rimeless"
            ]
          },
          {
            "figmaAxis": "color",
            "propName": "color",
            "values": [
              "green",
              "red",
              "orange",
              "gray 1"
            ]
          },
          {
            "figmaAxis": "status",
            "propName": "status",
            "values": [
              "default",
              "disable",
              "hover",
              "loading"
            ]
          },
          {
            "figmaAxis": "Radius",
            "propName": "radius",
            "values": [
              "square",
              "round"
            ]
          },
          {
            "figmaAxis": "fixed width",
            "propName": "fixedWidth",
            "values": [
              "no",
              "yes"
            ]
          }
        ],
        "sampleVariants": [
          {
            "nodeId": "314:46878",
            "figmaVariantName": "icon=no, style=filling, color=green, status=default, Radius=square, fixed width=no",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "default",
              "radius": "square",
              "fixedWidth": "no"
            }
          },
          {
            "nodeId": "314:46924",
            "figmaVariantName": "icon=no, style=filling, color=green, status=disable, Radius=square, fixed width=no",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "disable",
              "radius": "square",
              "fixedWidth": "no"
            }
          },
          {
            "nodeId": "314:46979",
            "figmaVariantName": "icon=no, style=filling, color=green, status=hover, Radius=square, fixed width=no",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "hover",
              "radius": "square",
              "fixedWidth": "no"
            }
          }
        ]
      },
      {
        "figmaName": "Button/light S",
        "pageName": "— — Buttons",
        "nodeId": "1545:51851",
        "filename": "button_light_s__1545_51851.json",
        "tokenCoverage": {
          "totalRefs": 792,
          "resolvedRefs": 792,
          "unresolvedRefs": 0,
          "resolvedPercent": 100,
          "unresolvedVariableIds": [],
          "unresolvedSamples": []
        },
        "manifestPresent": true,
        "manifestCodeName": "ButtonLightS",
        "manifestVariantAxes": [
          {
            "figmaAxis": "icon",
            "propName": "icon",
            "values": [
              "no",
              "right",
              "left",
              "loading"
            ]
          },
          {
            "figmaAxis": "style",
            "propName": "style",
            "values": [
              "filling",
              "ghost",
              "rimeless"
            ]
          },
          {
            "figmaAxis": "color",
            "propName": "color",
            "values": [
              "green",
              "orange",
              "red",
              "gray 1"
            ]
          },
          {
            "figmaAxis": "status",
            "propName": "status",
            "values": [
              "default",
              "disable",
              "hover",
              "loading"
            ]
          },
          {
            "figmaAxis": "radius",
            "propName": "radius",
            "values": [
              "square",
              "round"
            ]
          },
          {
            "figmaAxis": "fixed width",
            "propName": "fixedWidth",
            "values": [
              "yes",
              "no"
            ]
          }
        ],
        "sampleVariants": [
          {
            "nodeId": "314:47024",
            "figmaVariantName": "icon=no, style=filling, color=green, status=default, radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "default",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "314:47029",
            "figmaVariantName": "icon=no, style=filling, color=green, status=default, radius=square, fixed width=no",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "default",
              "radius": "square",
              "fixedWidth": "no"
            }
          },
          {
            "nodeId": "314:47044",
            "figmaVariantName": "icon=no, style=filling, color=orange, status=default, radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "orange",
              "status": "default",
              "radius": "square",
              "fixedWidth": "yes"
            }
          }
        ]
      },
      {
        "figmaName": "Button/light XS",
        "pageName": "— — Buttons",
        "nodeId": "1545:51852",
        "filename": "button_light_xs__1545_51852.json",
        "tokenCoverage": {
          "totalRefs": 792,
          "resolvedRefs": 792,
          "unresolvedRefs": 0,
          "resolvedPercent": 100,
          "unresolvedVariableIds": [],
          "unresolvedSamples": []
        },
        "manifestPresent": true,
        "manifestCodeName": "ButtonLightXs",
        "manifestVariantAxes": [
          {
            "figmaAxis": "icon",
            "propName": "icon",
            "values": [
              "no",
              "right",
              "left",
              "loading"
            ]
          },
          {
            "figmaAxis": "style",
            "propName": "style",
            "values": [
              "filling",
              "ghost",
              "rimeless"
            ]
          },
          {
            "figmaAxis": "color",
            "propName": "color",
            "values": [
              "green",
              "orange",
              "red",
              "gray 1"
            ]
          },
          {
            "figmaAxis": "status",
            "propName": "status",
            "values": [
              "default",
              "disable",
              "hover",
              "loading"
            ]
          },
          {
            "figmaAxis": "radius",
            "propName": "radius",
            "values": [
              "square",
              "round"
            ]
          },
          {
            "figmaAxis": "fixed width",
            "propName": "fixedWidth",
            "values": [
              "yes",
              "no"
            ]
          }
        ],
        "sampleVariants": [
          {
            "nodeId": "314:47174",
            "figmaVariantName": "icon=no, style=filling, color=green, status=default, radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "default",
              "radius": "square",
              "fixedWidth": "yes"
            }
          },
          {
            "nodeId": "314:47179",
            "figmaVariantName": "icon=no, style=filling, color=green, status=default, radius=square, fixed width=no",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "green",
              "status": "default",
              "radius": "square",
              "fixedWidth": "no"
            }
          },
          {
            "nodeId": "314:47294",
            "figmaVariantName": "icon=no, style=filling, color=orange, status=default, radius=square, fixed width=yes",
            "props": {
              "icon": "no",
              "style": "filling",
              "color": "orange",
              "status": "default",
              "radius": "square",
              "fixedWidth": "yes"
            }
          }
        ]
      }
    ]
  }
}
```

## 4. 图标代码组件目录 + 命名格式（验证是否 Figma 原名）

### 4.1 主要目录
- /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/src/icons/generated
- /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/src/icons/catalog/generated
- /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/src/icons/raw.ts
- /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/src/icons/manifest.ts
- /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/src/icons/registry.ts

### 4.2 命名格式核对
- `src/icons/generated/*.ts`：使用代码侧 alias / category 名，如 `action/close`、`status/warning`
- `src/icons/catalog/generated/*.ts`：使用归一化 catalog 名，如 `message/error-4`、`message/info-2`
- Figma 原名保留位置：`messageIconManifest[].tags` 等 metadata 中，例如 `icon/Message/Error 4`
- 结论：
  - 图标代码组件命名 **不是** Figma 原名
  - 当前仓库采用“代码 alias + metadata 保留 Figma 原名”的双层命名结构

代码示例：

```ts
import {
  IconAdd,
  IconMinus,
  IconSearch,
  IconLoading,
  IconClose,
  IconSelected,
} from '../raw'
import type { IconDefinition } from '../types'

export {
  IconAdd,
  IconMinus,
  IconSearch,
  IconLoading,
  IconClose,
  IconSelected,
}

export const actionIcons = {
  'action/add': IconAdd,
  'action/minus': IconMinus,
  'action/search': IconSearch,
  'action/loading': IconLoading,
  'action/close': IconClose,
  'action/selected': IconSelected,
} as const

export const actionIconManifest: IconDefinition[] = [
  {
    name: 'action/add',
    category: 'action',
    exportName: 'IconAdd',
    aliases: ['add'],
    tags: ['edit', 'plus'],
  },
  {
    name: 'action/minus',
    category: 'action',
    exportName: 'IconMinus',
    aliases: ['minus'],
    tags: ['edit', 'subtract'],
  },
  {
    name: 'action/search',
    category: 'action',
    exportName: 'IconSearch',
    aliases: ['search'],
    tags: ['find', 'lookup'],
  },
  {
    name: 'action/loading',
    category: 'action',
    exportName: 'IconLoading',
    aliases: ['loading'],
    tags: ['spinner', 'progress'],
  },
  {
    name: 'action/close',
    category: 'action',
```

```ts
import {
  IconStatusSuccess,
  IconStatusWarning,
  IconStatusError,
  IconStatusInfo,
} from '../raw'
import type { IconDefinition } from '../types'

export {
  IconStatusSuccess,
  IconStatusWarning,
  IconStatusError,
  IconStatusInfo,
}

export const statusIcons = {
  'status/success': IconStatusSuccess,
  'status/warning': IconStatusWarning,
  'status/error': IconStatusError,
  'status/info': IconStatusInfo,
} as const

export const statusIconManifest: IconDefinition[] = [
  {
    name: 'status/success',
    category: 'status',
    exportName: 'IconStatusSuccess',
    aliases: ['status-success'],
    tags: ['feedback', 'positive'],
  },
  {
    name: 'status/warning',
    category: 'status',
    exportName: 'IconStatusWarning',
    aliases: ['status-warning'],
    tags: ['feedback', 'caution'],
  },
  {
    name: 'status/error',
    category: 'status',
    exportName: 'IconStatusError',
    aliases: ['status-error'],
    tags: ['feedback', 'negative'],
  },
  {
    name: 'status/info',
    category: 'status',
    exportName: 'IconStatusInfo',
    aliases: ['status-info'],
    tags: ['feedback', 'neutral'],
  },
]
```

```ts
import type { IconDefinition } from '../../types'

export const messageIcons = {
  "message/error-1": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1C11.866 1 15 4.13401 15 8ZM13.8 7.99922C13.8 4.79597 11.2033 2.19922 8.00001 2.19922C4.79676 2.19922 2.20001 4.79597 2.20001 7.99922C2.20001 11.2025 4.79676 13.7992 8.00001 13.7992C11.2033 13.7992 13.8 11.2025 13.8 7.99922ZM5.17845 6.02622C4.94414 5.7919 4.94414 5.412 5.17845 5.17769C5.41277 4.94337 5.79267 4.94337 6.02698 5.17769L8.00062 7.15133L9.974 5.17796C10.2083 4.94364 10.5882 4.94364 10.8225 5.17796C11.0568 5.41227 11.0568 5.79217 10.8225 6.02648L8.84915 7.99986L10.8248 9.97549C11.0591 10.2098 11.0591 10.5897 10.8248 10.824C10.5905 11.0583 10.2106 11.0583 9.97626 10.824L8.00062 8.84839L6.02262 10.8264C5.7883 11.0607 5.4084 11.0607 5.17409 10.8264C4.93977 10.5921 4.93977 10.2122 5.17409 9.97787L7.15209 7.99986L5.17845 6.02622Z" fill="#EA4233"/>
</svg>`,
  "message/error-2": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 15C11.866 15 15 11.866 15 8C15 4.13401 11.866 1 8 1C4.13401 1 1 4.13401 1 8C1 11.866 4.13401 15 8 15ZM5.17845 6.02622C4.94414 5.7919 4.94414 5.412 5.17845 5.17769C5.41277 4.94337 5.79267 4.94337 6.02698 5.17769L8.00062 7.15133L9.974 5.17796C10.2083 4.94364 10.5882 4.94364 10.8225 5.17796C11.0568 5.41227 11.0568 5.79217 10.8225 6.02648L8.84915 7.99986L10.8248 9.97549C11.0591 10.2098 11.0591 10.5897 10.8248 10.824C10.5905 11.0583 10.2106 11.0583 9.97626 10.824L8.00062 8.84839L6.02262 10.8264C5.7883 11.0607 5.4084 11.0607 5.17409 10.8264C4.93977 10.5921 4.93977 10.2122 5.17409 9.97787L7.15209 7.99986L5.17845 6.02622Z" fill="#EA4233"/>
</svg>`,
  "message/error-3": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.5633 12.9962C2.52623 13.0629 2.57442 13.1448 2.65069 13.1448H13.3493C13.4255 13.1448 13.4737 13.0629 13.4367 12.9962L8.08736 3.37957C8.04925 3.31106 7.9507 3.31106 7.91258 3.37957L2.5633 12.9962ZM7.30085 2.01072C7.60576 1.46257 8.39418 1.46257 8.69909 2.01072L14.8987 13.1559C15.1953 13.6892 14.8097 14.3448 14.1995 14.3448H1.80042C1.19024 14.3448 0.804689 13.6892 1.1013 13.1559L7.30085 2.01072ZM7.40002 6.6C7.40002 6.26863 7.66865 6 8.00002 6C8.3314 6 8.60002 6.26863 8.60002 6.6V9C8.60002 9.33137 8.3314 9.6 8.00002 9.6C7.66865 9.6 7.40002 9.33137 7.40002 9V6.6ZM7.40002 11.4004C7.40002 11.069 7.66865 10.8004 8.00002 10.8004C8.3314 10.8004 8.60002 11.069 8.60002 11.4004C8.60002 11.7317 8.3314 12.0004 8.00002 12.0004C7.66865 12.0004 7.40002 11.7317 7.40002 11.4004Z" fill="#EA4233"/>
</svg>`,
  "message/error-4": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.69915 2.00682C8.39424 1.45866 7.60582 1.45867 7.30091 2.00682L1.10136 13.152C0.80475 13.6853 1.19031 14.3409 1.80048 14.3409H14.1996C14.8098 14.3409 15.1953 13.6853 14.8987 13.152L8.69915 2.00682ZM7.39999 6.60078C7.39999 6.26941 7.66862 6.00078 7.99999 6.00078C8.33136 6.00078 8.59999 6.26941 8.59999 6.60078V9.00078C8.59999 9.33215 8.33136 9.60078 7.99999 9.60078C7.66862 9.60078 7.39999 9.33215 7.39999 9.00078V6.60078ZM7.39999 11.4011C7.39999 11.0698 7.66862 10.8011 7.99999 10.8011C8.33136 10.8011 8.59999 11.0698 8.59999 11.4011C8.59999 11.7325 8.33136 12.0011 7.99999 12.0011C7.66862 12.0011 7.39999 11.7325 7.39999 11.4011Z" fill="#EA4233"/>
</svg>`,
  "message/help-1": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1C11.866 1 15 4.13401 15 8ZM13.8 7.99922C13.8 4.79597 11.2033 2.19922 8.00001 2.19922C4.79676 2.19922 2.20001 4.79597 2.20001 7.99922C2.20001 11.2025 4.79676 13.7992 8.00001 13.7992C11.2033 13.7992 13.8 11.2025 13.8 7.99922ZM8.59735 5.23191C7.78677 5.07344 6.7507 5.31099 5.94492 6.20156C5.7226 6.44728 5.34317 6.46625 5.09745 6.24392C4.85173 6.0216 4.83277 5.64217 5.05509 5.39645C6.14919 4.18722 7.61313 3.81678 8.82758 4.0542C10.0164 4.28661 11.1 5.15861 11.1 6.49869C11.1 7.12815 10.9139 7.61312 10.5951 7.98901C10.2948 8.34316 9.90855 8.55977 9.60226 8.71938C9.5355 8.75416 9.47315 8.78608 9.41467 8.81602L9.41459 8.81606L9.41451 8.8161C9.17358 8.93943 8.99822 9.0292 8.8502 9.14782C8.70156 9.26693 8.62039 9.38676 8.59473 9.57924C8.55094 9.9077 8.24916 10.1385 7.9207 10.0947C7.59223 10.0509 7.36146 9.7491 7.40526 9.42064C7.47959 8.86312 7.76093 8.48294 8.09979 8.2114C8.35323 8.0083 8.6644 7.85035 8.91045 7.72545L8.91051 7.72542C8.9591 7.70075 9.00516 7.67737 9.04773 7.65519C9.34144 7.50214 9.54265 7.37477 9.67986 7.21294C9.79864 7.07286 9.9 6.86986 9.9 6.49869C9.9 5.92313 9.43354 5.39538 8.59735 5.23191ZM8.60002 11.4008C8.60002 11.7322 8.3314 12.0008 8.00002 12.0008C7.66865 12.0008 7.40002 11.7322 7.40002 11.4008C7.40002 11.0694 7.66865 10.8008 8.00002 10.8008C8.3314 10.8008 8.60002 11.0694 8.60002 11.4008Z" fill="#DBDBDB"/>
</svg>`,
  "message/help-2": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 15C11.866 15 15 11.866 15 8C15 4.13401 11.866 1 8 1C4.13401 1 1 4.13401 1 8C1 11.866 4.13401 15 8 15ZM8.59737 5.23195C7.7868 5.07349 6.75073 5.31103 5.94494 6.20161C5.72262 6.44733 5.34319 6.46629 5.09747 6.24397C4.85175 6.02164 4.83279 5.64222 5.05511 5.3965C6.14922 4.18726 7.61315 3.81683 8.8276 4.05425C10.0164 4.28666 11.1 5.15865 11.1 6.49874C11.1 7.12819 10.9139 7.61316 10.5952 7.98906C10.2949 8.3432 9.90857 8.55982 9.60229 8.71942C9.53553 8.75421 9.47318 8.78613 9.41469 8.81607L9.41462 8.8161L9.41454 8.81614C9.1736 8.93948 8.99825 9.02924 8.85022 9.14786C8.70158 9.26698 8.62042 9.38681 8.59475 9.57928C8.55096 9.90775 8.24918 10.1385 7.92072 10.0947C7.59226 10.0509 7.36149 9.74915 7.40528 9.42069C7.47962 8.86316 7.76096 8.48299 8.09981 8.21144C8.35326 8.00834 8.66442 7.85039 8.91048 7.72549L8.91053 7.72546C8.95913 7.7008 9.00518 7.67742 9.04775 7.65524C9.34146 7.50218 9.54267 7.37482 9.67989 7.21299C9.79866 7.07291 9.90002 6.8699 9.90002 6.49874C9.90003 5.92318 9.43356 5.39542 8.59737 5.23195ZM8.60005 11.4008C8.60005 11.7322 8.33142 12.0008 8.00005 12.0008C7.66868 12.0008 7.40005 11.7322 7.40005 11.4008C7.40005 11.0695 7.66868 10.8008 8.00005 10.8008C8.33142 10.8008 8.60005 11.0695 8.60005 11.4008Z" fill="#DBDBDB"/>
</svg>`,
  "message/info-1": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1C11.866 1 15 4.13401 15 8ZM13.8 7.99922C13.8 4.79597 11.2033 2.19922 8.00001 2.19922C4.79676 2.19922 2.20001 4.79597 2.20001 7.99922C2.20001 11.2025 4.79676 13.7992 8.00001 13.7992C11.2033 13.7992 13.8 11.2025 13.8 7.99922ZM8.60002 4.6C8.60002 4.93137 8.3314 5.2 8.00002 5.2C7.66865 5.2 7.40002 4.93137 7.40002 4.6C7.40002 4.26863 7.66865 4 8.00002 4C8.3314 4 8.60002 4.26863 8.60002 4.6ZM7.40002 7C7.40002 6.66863 7.66865 6.4 8.00002 6.4C8.3314 6.4 8.60002 6.66863 8.60002 7V11.4C8.60002 11.7314 8.3314 12 8.00002 12C7.66865 12 7.40002 11.7314 7.40002 11.4V7Z" fill="#DBDBDB"/>
</svg>`,
  "message/info-2": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 15C11.866 15 15 11.866 15 8C15 4.13401 11.866 1 8 1C4.13401 1 1 4.13401 1 8C1 11.866 4.13401 15 8 15ZM8.60002 4.6C8.60002 4.93137 8.3314 5.2 8.00002 5.2C7.66865 5.2 7.40002 4.93137 7.40002 4.6C7.40002 4.26863 7.66865 4 8.00002 4C8.3314 4 8.60002 4.26863 8.60002 4.6ZM7.40002 7C7.40002 6.66863 7.66865 6.4 8.00002 6.4C8.3314 6.4 8.60002 6.66863 8.60002 7V11.4C8.60002 11.7314 8.3314 12 8.00002 12C7.66865 12 7.40002 11.7314 7.40002 11.4V7Z" fill="#3892F3"/>
</svg>`,
  "message/notification-1": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7 2C7 1.44772 7.44772 1 8 1C8.55228 1 9 1.44772 9 2V2.08202C11.3333 2.48629 12.5 4.35426 12.5 7V9.1465C12.5 9.37726 12.5665 9.60314 12.6916 9.79705L13.903 11.6747C14.1606 12.074 13.874 12.6 13.3988 12.6H2.60111C2.12597 12.6 1.83934 12.074 2.09693 11.6747L3.30833 9.79705C3.43344 9.60314 3.49998 9.37726 3.49998 9.1465V7C3.49998 4.35424 4.66665 2.48626 7 2.08201V2ZM7.99998 3.2C6.78386 3.2 6.01816 3.59353 5.53608 4.15595C5.02977 4.74665 4.69998 5.6841 4.69998 7V9.1465C4.69998 9.60803 4.5669 10.0598 4.31669 10.4476L3.80173 11.2458C3.7588 11.3123 3.80657 11.4 3.88576 11.4H12.1142C12.1934 11.4 12.2412 11.3123 12.1982 11.2458L11.6833 10.4476C11.4331 10.0598 11.3 9.60803 11.3 9.1465V7C11.3 5.6841 10.9702 4.74665 10.4639 4.15595C9.98179 3.59353 9.21609 3.2 7.99998 3.2Z" fill="#DBDBDB"/>
<path d="M6.52716 13.7988C6.66599 14.4837 7.27141 14.9992 7.99723 14.9992C8.72306 14.9992 9.32848 14.4837 9.46731 13.7988H6.52716Z" fill="#DBDBDB"/>
</svg>`,
  "message/notification-2": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7.99998 1C7.44769 1 6.99998 1.44772 6.99998 2V2.08201C4.66664 2.48628 3.49998 4.35425 3.49998 7V9.1465C3.49998 9.37726 3.43344 9.60314 3.30833 9.79705L2.09693 11.6747C1.83934 12.074 2.12597 12.6 2.60111 12.6H13.3988C13.874 12.6 14.1606 12.074 13.903 11.6747L12.6916 9.79705C12.5665 9.60314 12.5 9.37726 12.5 9.1465V7C12.5 4.35425 11.3333 2.48628 8.99998 2.08201V2C8.99998 1.44772 8.55226 1 7.99998 1ZM6.52714 13.7988C6.66597 14.4837 7.27138 14.9992 7.99721 14.9992C8.72304 14.9992 9.32845 14.4837 9.46728 13.7988H6.52714Z" fill="#DBDBDB"/>
</svg>`,
  "message/success-1": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 8C15 4.13401 11.866 1 8 1C4.13401 1 1 4.13401 1 8C1 11.866 4.13401 15 8 15C11.866 15 15 11.866 15 8ZM13.8 7.99922C13.8 11.2025 11.2033 13.7992 8.00001 13.7992C4.79676 13.7992 2.20001 11.2025 2.20001 7.99922C2.20001 4.79597 4.79676 2.19922 8.00001 2.19922C11.2033 2.19922 13.8 4.79597 13.8 7.99922ZM5.22424 7.37564L7.03029 9.18159C7.10839 9.2597 7.23502 9.25969 7.31313 9.18159L10.6017 5.89303C10.836 5.65871 11.2159 5.65871 11.4502 5.89303C11.6846 6.12735 11.6846 6.50725 11.4502 6.74156L7.80811 10.3837C7.45664 10.7351 6.88681 10.7351 6.53533 10.3837L4.37573 8.22419C4.14141 7.98988 4.1414 7.60998 4.37571 7.37566C4.61002 7.14134 4.98991 7.14133 5.22424 7.37564Z" fill="#2FB54E"/>
</svg>`,
  "message/success-2": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 15C11.866 15 15 11.866 15 8C15 4.13401 11.866 1 8 1C4.13401 1 1 4.13401 1 8C1 11.866 4.13401 15 8 15ZM5.22424 7.37564L7.03029 9.18159C7.10839 9.2597 7.23502 9.25969 7.31313 9.18159L10.6017 5.89303C10.836 5.65871 11.2159 5.65871 11.4502 5.89303C11.6846 6.12735 11.6846 6.50725 11.4502 6.74156L7.80811 10.3837C7.45664 10.7351 6.88681 10.7351 6.53533 10.3837L4.37573 8.22419C4.14141 7.98988 4.1414 7.60998 4.37571 7.37566C4.61002 7.14134 4.98991 7.14133 5.22424 7.37564Z" fill="#2FB54E"/>
</svg>`,
  "message/update-1": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7.99903 1.00001C9.8562 0.997607 11.6381 1.73559 12.9492 3.05079C14.2643 4.36163 15.0022 6.14329 15 8.00001C15.0023 9.85687 14.2644 11.6383 12.9492 12.9492C11.6381 14.2644 9.8562 15.0024 7.99903 15L8.00001 14.999C6.14284 15.0014 4.36096 14.2634 3.04981 12.9482C1.73539 11.6375 0.997841 9.85624 1.00001 8.00001C0.997628 6.14313 1.73557 4.36169 3.05079 3.05079C4.36148 1.73604 6.14251 0.998102 7.99903 1.00001ZM8.00001 2.00001C6.39756 2.00001 4.89179 2.62472 3.75782 3.75782C2.6289 4.88052 1.99569 6.40787 2.00001 8.00001C2.00001 9.60245 2.62473 11.1091 3.75782 12.2422C4.88052 13.3711 6.40787 14.0043 8.00001 14C9.60245 14 11.1091 13.3753 12.2422 12.2422C13.3711 11.1195 14.0043 9.59215 14 8.00001C14 6.39756 13.3753 4.89179 12.2422 3.75782C11.1195 2.6289 9.59214 1.99569 8.00001 2.00001ZM8.00001 10.7998C8.33096 10.8 8.60024 11.0685 8.60059 11.3994C8.60059 11.7306 8.33118 11.9998 8.00001 12C7.66885 11.9998 7.4004 11.7306 7.4004 11.3994C7.40075 11.0685 7.66907 10.8001 8.00001 10.7998ZM8.00001 4.00001C8.18329 4.00014 8.34609 4.08423 8.45606 4.21387L11.1143 6.87305C11.3484 7.10727 11.3482 7.48738 11.1143 7.72169C10.8801 7.95548 10.5008 7.95537 10.2666 7.72169L8.60059 6.05567V9.4004C8.60038 9.73144 8.33105 9.99977 8.00001 10C7.66894 9.99979 7.40061 9.73146 7.4004 9.4004V6.05665L5.74024 7.7168C5.50596 7.95107 5.12593 7.951 4.89161 7.7168C4.65757 7.48247 4.65739 7.10239 4.89161 6.86817L7.53419 4.22559C7.64409 4.08912 7.81117 4.00013 8.00001 4.00001Z" fill="#2FB54E"/>
</svg>`,
  "message/update-2": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 1C11.8656 1 15 4.13438 15 8C15 11.8656 11.8656 15 8 15C4.13438 15 1 11.8656 1 8C1 4.13438 4.13438 1 8 1ZM8 10.7998C7.669 10.8001 7.40064 11.0684 7.40039 11.3994C7.40039 11.7306 7.66884 11.9997 8 12C8.33117 11.9998 8.60059 11.7306 8.60059 11.3994C8.60034 11.0684 8.33102 10.8 8 10.7998ZM8 4C7.81111 4.00012 7.64408 4.08904 7.53418 4.22559L4.8916 6.86816C4.65739 7.10239 4.65756 7.48246 4.8916 7.7168C5.12593 7.95089 5.50599 7.95103 5.74023 7.7168L7.40039 6.05664V9.40039C7.4006 9.73145 7.66894 9.99979 8 10C8.33104 9.99977 8.60037 9.73144 8.60059 9.40039V6.05566L10.2666 7.72168C10.5008 7.95527 10.8801 7.95544 11.1143 7.72168C11.3483 7.48742 11.3483 7.10731 11.1143 6.87305L8.45605 4.21387C8.34608 4.08422 8.18329 4.00013 8 4Z" fill="#2FB54E"/>
</svg>`,
  "message/warning-1": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 14.9991C6.14283 15.0015 4.36136 14.2634 3.05022 12.9482C1.73569 11.6374 0.997842 9.85676 1.00001 8.00044C0.99751 6.14337 1.73573 4.36197 3.05109 3.05097C4.36181 1.7362 6.14256 0.998074 7.99912 1.00001C9.85629 0.997607 11.6378 1.73576 12.9489 3.05097C14.264 4.36182 15.0022 6.14282 15 7.99956C15.0024 9.85661 14.2642 11.638 12.9489 12.949C11.6378 14.2642 9.85629 15.0024 7.99912 15L8 14.9991ZM8 2.00002C6.39755 2.00002 4.89143 2.62436 3.75746 3.75746C2.62854 4.88017 1.9957 6.40786 2.00002 8C2.00002 9.60245 2.62436 11.1094 3.75746 12.2425C4.88017 13.3715 6.40786 14.0043 8 14C9.60245 14 11.1094 13.3756 12.2425 12.2425C13.3715 11.1198 14.0043 9.59214 14 8C14 6.39755 13.3756 4.89143 12.2425 3.75746C11.1198 2.62854 9.59214 1.9957 8 2.00002ZM7.3999 4.6C7.3999 4.26863 7.66853 4 7.9999 4C8.33127 4 8.5999 4.26863 8.5999 4.6V9C8.5999 9.33137 8.33127 9.6 7.9999 9.6C7.66853 9.6 7.3999 9.33137 7.3999 9V4.6ZM8.5999 11.4C8.5999 11.7314 8.33127 12 7.9999 12C7.66853 12 7.3999 11.7314 7.3999 11.4C7.3999 11.0686 7.66853 10.8 7.9999 10.8C8.33127 10.8 8.5999 11.0686 8.5999 11.4Z" fill="#F68512"/>
</svg>`,
  "message/warning-2": `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 1C4.13438 1 1 4.13438 1 8C1 11.8656 4.13438 15 8 15C11.8656 15 15 11.8656 15 8C15 4.13438 11.8656 1 8 1ZM7.9999 4C8.33127 4 8.5999 4.26863 8.5999 4.6V9C8.5999 9.33137 8.33127 9.6 7.9999 9.6C7.66853 9.6 7.3999 9.33137 7.3999 9V4.6C7.3999 4.26863 7.66853 4 7.9999 4ZM7.9999 12C7.66853 12 7.3999 11.7314 7.3999 11.4C7.3999 11.0686 7.66853 10.8 7.9999 10.8C8.33127 10.8 8.5999 11.0686 8.5999 11.4C8.5999 11.7314 8.33127 12 7.9999 12Z" fill="#F68512"/>
</svg>`,
} as const satisfies Record<string, string>

export const messageIconManifest: IconDefinition[] = [
  {
    name: "message/error-1",
    category: "message",
    exportName: "IconMessageError1",
    figmaNodeId: "1168:23601",
    tags: ["icon/Message/Error 1", "— — Icons"],
  },
  {
    name: "message/error-2",
    category: "message",
    exportName: "IconMessageError2",
    figmaNodeId: "1168:23569",
    tags: ["icon/Message/Error 2", "— — Icons"],
  },
  {
    name: "message/error-3",
    category: "message",
    exportName: "IconMessageError3",
    figmaNodeId: "1168:23871",
    tags: ["icon/Message/Error 3", "— — Icons"],
  },
  {
    name: "message/error-4",
    category: "message",
    exportName: "IconMessageError4",
    figmaNodeId: "1168:23924",
    tags: ["icon/Message/Error 4", "— — Icons"],
  },
  {
    name: "message/help-1",
    category: "message",
    exportName: "IconMessageHelp1",
    figmaNodeId: "1283:40375",
    tags: ["icon/Message/Help 1", "— — Icons"],
  },
  {
    name: "message/help-2",
    category: "message",
    exportName: "IconMessageHelp2",
    figmaNodeId: "1283:40376",
    tags: ["icon/Message/Help 2", "— — Icons"],
  },
  {
    name: "message/info-1",
    category: "message",
    exportName: "IconMessageInfo1",
    figmaNodeId: "1168:23662",
    tags: ["icon/Message/Info 1", "— — Icons"],
  },
  {
    name: "message/info-2",
    category: "message",
    exportName: "IconMessageInfo2",
    figmaNodeId: "1168:23690",
    tags: ["icon/Message/Info 2", "— — Icons"],
  },
  {
    name: "message/notification-1",
    category: "message",
    exportName: "IconMessageNotification1",
    figmaNodeId: "1169:24021",
    tags: ["icon/Message/Notification 1", "— — Icons"],
  },
  {
    name: "message/notification-2",
```

## 5. 图标 alias / 映射表位置 + 前 20 条

### 5.1 运行时 alias 表位置
- 主入口：
  - /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/src/icons/registry.ts
- manifest 汇总：
  - /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/src/icons/manifest.ts
- 新的设计系统边界翻译层：
  - /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/src/design-system/translation/icon-aliases.ts

### 5.2 registry 生成逻辑

```ts
import { actionIcons } from './generated/action'
import { navigationIcons } from './generated/navigation'
import { timeIcons } from './generated/time'
import { statusIcons } from './generated/status'
import { ratingIcons } from './generated/rating'
import { themeIcons } from './generated/theme'
import { brandIcons } from './generated/brand'
import { iconManifest } from './manifest'
import type { IconCategoryRegistry } from './types'

export const iconCategoryRegistry: IconCategoryRegistry = {
  action: actionIcons,
  navigation: navigationIcons,
  time: timeIcons,
  status: statusIcons,
  rating: ratingIcons,
  theme: themeIcons,
  brand: brandIcons,
}

export const iconNameAliases = Object.freeze(
  iconManifest.reduce<Record<string, string>>((aliases, definition) => {
    aliases[definition.name] = definition.name
    for (const alias of definition.aliases ?? []) {
      aliases[alias] = definition.name
    }
    return aliases
  }, {}),
)

export const iconRegistry = Object.freeze(
  iconManifest.reduce<Record<string, string>>((registry, definition) => {
    const svg = iconCategoryRegistry[definition.category][definition.name]
    registry[definition.name] = svg
    for (const alias of definition.aliases ?? []) {
      registry[alias] = svg
    }
    return registry
  }, {}),
)

export function resolveIcon(name: string | null | undefined) {
  if (!name) {
    return null
  }

  const normalizedName = iconNameAliases[name] ?? name
  return iconRegistry[normalizedName] ?? null
}

export function listIconsByCategory(category: keyof typeof iconCategoryRegistry) {
  return Object.entries(iconCategoryRegistry[category]).map(([name, svg]) => ({ name, svg }))
}
```

### 5.3 前 20 条 alias

```text
status-success -> status/success
status-warning -> status/warning
status-error -> status/error
status-info -> status/info
add -> action/add
minus -> action/minus
search -> action/search
loading -> action/loading
close -> action/close
selected -> action/selected
arrow-dropdown -> navigation/arrow-dropdown
previous -> navigation/previous
next -> navigation/next
arrow-up -> navigation/arrow-up
arrow-down -> navigation/arrow-down
arrow-right -> navigation/arrow-right
arrow-left -> navigation/arrow-left
logo-tvu -> brand/logo-tvu
logo-ts -> brand/logo-ts
star-empty -> rating/star-empty
```

## 6. 已有的 conformance-issue-log.md / handoff.md / 其他设计系统文档

### 6.1 关键文档
- /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/conformance-issue-log.md
- /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/session-handoff.md
- /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/working-principles.md
- /Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/NEXT-STEPS.md

### 6.2 其他设计系统文档
```text
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/2026-04-27-component-completeness-audit.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/NEXT-STEPS.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/checkbox-pixel-review.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/component-generation-pitfalls.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/component-review-rules.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/conformance-issue-log.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/figma-conformance-first.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/figma-first-manifest.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/figma-provenance-audit.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/generated-skeleton-promotion-plan.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/input-select-first-pass.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/internal/asset-inventory.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/multi-session-collaboration-rules.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/radio-pixel-review.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/session-handoff.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/site-pixel-parity-mechanism.md
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/site-review-manifest.json
/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/docs/working-principles.md
```
