# Codex Prompt: Phase 6.1 — 翻译层批量登记

基于 `docs/internal/api-diff-patterns.md` 中的全部决策（全部按用户建议执行），把所有决策登记到 `src/design-system/translation/` 和相关文档。

**不修改任何组件代码（.vue / .ts）。仅登记决策。完成后 STOP。**

---

## 必读前置

1. `docs/working-principles.md` 原则 0–6
2. `docs/internal/api-diff-patterns.md`（聚类报告）
3. `src/design-system/translation/` 现有四个文件
4. `docs/internal/api-diff.md`（详细 diff）

---

## 任务 1：登记 🟢 类别 A 批量保留（Vue 生态标准）

在 `prop-aliases.md` 新增一节 `## Vue 生态增强（代码侧添加，Figma 无对应）`，登记：

| Component | Code Prop/Event/Slot | Figma | Status | Notes |
|---|---|---|---|---|
| Input/InputNumber/CheckBox/Radio/Switch/Select | `modelValue` + `update:modelValue` | (no Figma counterpart) | Vue ecosystem | Vue v-model 标准契约 |
| Button/Input/InputNumber/CheckBox/Radio/Switch/Select/Tooltip | `disabled` | (no Figma counterpart) | Vue ecosystem | Vue/Web 表单标准 |
| Input/Select | `placeholder` | (no Figma counterpart) | Vue ecosystem | Web form 标准 |
| Notification/PromptMessage | `event:close` | (no Figma event) | Vue ecosystem | 运行时事件 |
| Notification | `event:cancel` / `event:confirm` | (no Figma event) | Vue ecosystem | pop confirm 业务必需 |
| Button/FormItem/CheckBox/Radio/Tooltip | `slot:default` | (Figma SLOT 不等价) | Vue ecosystem | Vue 组合层 |

继续追加 B1–B3 决策：

| Component | Code Prop | Figma | Status | Notes |
|---|---|---|---|---|
| Input/InputNumber/Select | `error?: boolean` | UX=error (设计态) | runtime addition | 运行时业务必需，与 Figma UX 设计态预览不同概念 |
| Input/Select | `readonly?: boolean` | (no Figma counterpart) | runtime addition | 运行时表单标准 |
| Tooltip | `disabled?: boolean` | (no Figma counterpart) | Vue ecosystem | 浮层禁用响应，与表单 disabled 同语义 |

---

## 任务 2：登记 🟡 设计态属性批量不映射

在 `divergences.md` 新增一节 `## 设计态属性批量不映射`：

### Figma `dark theme` 属性（Input/CheckBox/Radio/Switch/Select/Tooltip）
- Property type: VARIANT (on/off)
- Reason: 设计态主题预览开关；运行时主题由全局 ThemeProvider / CSS 变量处理
- Status: accepted documented divergence
- 例外：`Notification.theme` 和 `PromptMessage.theme` 是单实例运行时切换（toast 的 dark/light 不依赖全局），已映射为代码 prop

### Figma `enable` 属性（Input/CheckBox/Radio/Switch/Select）
- Property type: VARIANT (on/off 或 yes/no)
- Reason: 设计态预览开关；运行时禁用由代码 `disabled` prop 处理
- Status: accepted documented divergence

### Figma `status` 属性的设计态值
- 出现：Input/CheckBox/Radio/Select
- 不映射的值：`default` / `normal` / `hover` / `click` / `error` / `Filled` 等纯视觉状态预览
- 已映射为运行时的值（详见任务 3）：`Switch.status=live`、`Select.status=multi select`
- Reason: 多数 status 值由 CSS pseudo-classes + 运行时 error/disabled prop 处理
- Status: accepted documented divergence (with exceptions)

### Figma `UX` 属性的设计态值
- 出现：Input/Select
- 不映射的值：`click` / `default` / `hover` / `error` 等纯视觉状态预览
- 已映射为运行时的值（详见任务 3）：`Select.UX=editable`
- Status: accepted documented divergence (with exceptions)

### Figma `Show Icon` / `Show Option` 属性（CheckBox/Radio）
- Property type: BOOLEAN
- Reason: 设计态装饰开关；运行时由 Vue slot 处理图标和文案的显隐
- Status: accepted documented divergence

### Figma `Content` SLOT（Input/FormItem/Notification/PromptMessage）
- Property type: SLOT
- Reason: Figma SLOT ≠ Vue slot API；Vue 默认 slot 已承担同等职责
- Status: accepted documented divergence
- 注：`FormItem.Label` 和 `Tooltip.Content` 是双形态决策，单独登记于任务 5

### Figma `Icon` SLOT（CheckBox/Radio）
- Property type: SLOT
- Reason: 同 Content SLOT 决策
- Status: accepted documented divergence

---

## 任务 3：登记运行时新增能力（B5/B6/B4-Select）

新建 `docs/internal/runtime-additions.md`，登记：

```markdown
# 运行时能力补全（Phase 6.4 待实现）

本文档登记从 Figma 提升为代码运行时能力的新 props，作为 Phase 6.4 的实现清单。

## Input.showCount
- 来源：Figma `feature=text count`
- 决策：作为运行时 prop 暴露
- API 提案：`showCount?: boolean`，默认 `false`
- 行为：开启后在 input 右下角显示 `当前字符数 / maxLength`
- 依赖：`maxlength` HTML 标准属性
- TODO: 实现待 Phase 6.4

## Select.multiple
- 来源：Figma `status=multi select`
- 决策：作为运行时 prop 暴露
- API 提案：`multiple?: boolean`，默认 `false`
- 行为：开启后允许多选，modelValue 类型变为数组
- 影响：modelValue 类型从 `string | number` 扩展为 `string | number | (string | number)[]`
- TODO: 实现待 Phase 6.4

## Select.editable
- 来源：Figma `UX=editable`
- 决策：作为运行时 prop 暴露
- API 提案：`editable?: boolean`，默认 `false`
- 行为：combobox 模式，允许在选择框内输入自定义值
- TODO: 实现待 Phase 6.4

## Input.XL（待决）
- 来源：Figma size 维度比代码多一档 `XL`
- 决策待定：是否扩容代码 size 枚举为 `s | m | l | xl`？
- 推荐方案：扩容（与 Figma 对齐）
- TODO: 待用户确认后写入实现清单
```

---

## 任务 4：登记 🟠 命名差异

在 `prop-aliases.md` 现有 `## Known Entries` 表追加：

| Component | Code Prop | Figma Property | Status | Notes |
|---|---|---|---|---|
| InputNumber | `property1` | `Property 1` | approved alias | Title Case → camelCase（原则 2） |
| FormItem | `labelWidth` | `Label Width` | approved alias | 空格 → camelCase |
| FormItem | `layout` | `Layout` | approved alias | 大小写差 |
| FormItem | `status` | `Status` | approved alias | 大小写差 |
| FormItem | `theme` | `Theme` | approved alias | 大小写差 |
| FormItem | `type` | `Type` | approved alias | 大小写差 |

新增节 `## 枚举值命名映射`：

| Component | Code Value | Figma Value | Status | Notes |
|---|---|---|---|---|
| Input | `m` | `M` | approved value alias | 代码侧小写 |
| Input | `l` | `L` | approved value alias | 代码侧小写 |
| Select | `m` | `M` | approved value alias | 代码侧小写 |
| Select | `l` | `L` | approved value alias | 代码侧小写 |

---

## 任务 5：登记 双形态决策（B7、B8）

在 `divergences.md` 新增一节 `## API 双形态映射`：

### FormItem.label ↔ Figma Label SLOT
- Figma form: SLOT
- Code form: 双形态（`string` prop 或 default slot）
- 实现规则：
  - 简单文本 → 用 prop（如 `label="Form Label"`）
  - 复杂内容（含图标、富文本）→ 用 default slot
  - 同时存在时 slot 优先
- Status: approved dual-form mapping
- TODO: 实现待 Phase 6.6

### Tooltip.content ↔ Figma Content SLOT
- Figma form: SLOT
- Code form: 双形态（`string` prop 或 default slot）
- 实现规则：同 FormItem
- Status: approved dual-form mapping（参考 Element Plus）
- TODO: 实现待 Phase 6.6

---

## 任务 6：登记 Badge.type 拆分决策（B9）

在 `divergences.md` 新增条目（在 `## Notification.type` 之前或后均可）：

### Badge API 拆分（type 同名异义）
- 问题：代码 `type=brand/red/orange/blue`（颜色语义）vs Figma `Type=Circle/Rectangle`（形状语义）
- 决策：拆分为两个 prop
  - 原 `type` → 改名为 `color`（保留原值 + 扩到 Figma 完整 Color 集 Green/Blue/Orange/Red/Black）
  - 新增 `shape: 'circle' | 'rectangle'`，对应 Figma Type
- 兼容策略：原 `type` prop 标 `@deprecated`，保留一个版本；下版本删除
- Status: approved API split
- TODO: 实现待 Phase 6.7

---

## 任务 7：登记 Button 双 API 决策（B10）

在 `divergences.md` 新增条目：

### Button 双 API 完成迁移决策
- 现状：`variant`/`size`/`disabled`/`loading` 旧 API 与 `canonicalColor`/`canonicalStyle`/`canonicalRadius`/`canonicalFixedWidth`/`canonicalStatus`/`canonicalIcon`/`canonicalSize` 双轨并存
- 决策：完成迁移到 canonical contract
- 步骤：
  1. 补全 canonical API：新增 `canonicalTheme: 'dark' | 'light'`（覆盖 Figma 8 个 set 的 theme 维度）
  2. 文档主推 canonical API
  3. 旧 API（variant/size/disabled/loading）标 `@deprecated`，保留一个版本
  4. 下版本删除旧 API
- Status: approved migration plan
- TODO: 实现待 Phase 6.8（独立大阶段）

---

## 任务 8：更新 working-principles.md

在 `docs/working-principles.md` 末尾新增 `## 决策 Log` 节（不要新增原则编号 7+）：

```markdown
## 决策 Log

- **2026-04-28：Phase 6.1 批量登记**
  - 类别 A：~47 项 🟢 / 🟡 / 🟠 项按 Vue 生态标准 / 设计态不映射 / 命名 alias 批量登记
  - 类别 B：10 项决策（B1–B10），全部按推荐方案执行
  - 详见：`src/design-system/translation/prop-aliases.md`、`src/design-system/translation/divergences.md`、`docs/internal/runtime-additions.md`
  - 后续修复阶段计划：
    - 6.2 视觉层 token 替换
    - 6.3 删除自创内容（Notification.success / type）
    - 6.4 新增运行时能力（showCount / multiple / editable）
    - 6.5 微结构修复（Notification side pop / warning glyph / 按钮颜色 / PromptMessage L width）
    - 6.6 双形态 API（FormItem.label / Tooltip.content）
    - 6.7 Badge prop 拆分
    - 6.8 Button canonical 完成迁移
```

---

## 禁止

- 修改任何 `.vue` / `.ts` 组件实现
- 修改任何 token 文件（视觉修复是 Phase 6.2）
- 实现新 prop（runtime additions 是 Phase 6.4）
- 替我决策 `Input.XL` 是否扩容（保留 TODO 待人工）
- 创建新的 `working-principles` 原则编号

---

## 完成后输出

1. 已更新文件清单 + 每个文件的新增节标题
2. 任何登记中遇到的不一致或需澄清项
3. 所有 TODO 标签的统计（按 Phase 分组：6.2 / 6.3 / 6.4 / 6.5 / 6.6 / 6.7 / 6.8）

完成后 STOP。
