@teamix-evo/skills 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +7 -3
  2. package/manifest.json +3 -2
  3. package/package.json +2 -2
  4. package/src/teamix-evo-code-opentrek/SKILL.md +12 -10
  5. package/src/teamix-evo-code-opentrek/api-layering.md +8 -5
  6. package/src/teamix-evo-code-opentrek/checklist.md +2 -0
  7. package/src/teamix-evo-code-opentrek/error-and-loading.md +38 -25
  8. package/src/teamix-evo-code-opentrek/file-structure.md +63 -54
  9. package/src/teamix-evo-code-opentrek/forms-and-validation.md +14 -12
  10. package/src/teamix-evo-code-opentrek/reuse-first.md +2 -0
  11. package/src/teamix-evo-code-opentrek/routing-and-codesplit.md +23 -21
  12. package/src/teamix-evo-code-opentrek/testing.md +32 -28
  13. package/src/teamix-evo-code-uni-manager/SKILL.md +12 -10
  14. package/src/teamix-evo-code-uni-manager/api-layering.md +2 -0
  15. package/src/teamix-evo-code-uni-manager/checklist.md +2 -0
  16. package/src/teamix-evo-code-uni-manager/error-and-loading.md +3 -1
  17. package/src/teamix-evo-code-uni-manager/file-structure.md +2 -0
  18. package/src/teamix-evo-code-uni-manager/forms-and-validation.md +2 -0
  19. package/src/teamix-evo-code-uni-manager/reuse-first.md +3 -1
  20. package/src/teamix-evo-code-uni-manager/routing-and-codesplit.md +3 -1
  21. package/src/teamix-evo-code-uni-manager/testing.md +2 -0
  22. package/src/teamix-evo-design-opentrek/SKILL.md +213 -52
  23. package/src/teamix-evo-design-opentrek/boundaries.md +25 -5
  24. package/src/teamix-evo-design-opentrek/brand.md +7 -7
  25. package/src/teamix-evo-design-opentrek/checklist.md +15 -13
  26. package/src/teamix-evo-design-opentrek/components.md +89 -39
  27. package/src/teamix-evo-design-opentrek/examples/detail-ai-gateway-1.html +1069 -0
  28. package/src/teamix-evo-design-opentrek/examples/detail-ai-gateway-instance.html +941 -0
  29. package/src/teamix-evo-design-opentrek/examples/detail-page-api-doc.html +906 -0
  30. package/src/teamix-evo-design-opentrek/examples/detail-page-config.html +993 -0
  31. package/src/teamix-evo-design-opentrek/examples/detail-page-monitor.html +1339 -0
  32. package/src/teamix-evo-design-opentrek/examples/detail-page.html +933 -0
  33. package/src/teamix-evo-design-opentrek/examples/settings-page.html +1119 -0
  34. package/src/teamix-evo-design-opentrek/examples/standard-card-list.html +1094 -0
  35. package/src/teamix-evo-design-opentrek/examples/standard-table-list.html +1361 -0
  36. package/src/teamix-evo-design-opentrek/examples/wizard-form-page.html +877 -0
  37. package/src/teamix-evo-design-opentrek/flows.md +85 -12
  38. package/src/teamix-evo-design-opentrek/foundations.md +12 -9
  39. package/src/teamix-evo-design-opentrek/generation-flow.md +84 -14
  40. package/src/teamix-evo-design-opentrek/pages/detail-page/SKILL.md +260 -0
  41. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/api-doc-detail.md +163 -0
  42. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/comparison-detail.md +100 -0
  43. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/monitor-detail.md +190 -0
  44. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/resource-detail.md +148 -0
  45. package/src/teamix-evo-design-opentrek/pages/form-page/SKILL.md +362 -0
  46. package/src/teamix-evo-design-opentrek/pages/list-page/SKILL.md +286 -0
  47. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/action-column-spec.md +60 -0
  48. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/column-meta-rules.md +117 -0
  49. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/search-combo-spec.md +194 -0
  50. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/state-action-pattern.md +51 -0
  51. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/advanced-filter-list.md +94 -0
  52. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/card-list.md +558 -0
  53. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/drawer-list.md +76 -0
  54. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/expandable-list.md +70 -0
  55. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/l2-sidebar-list.md +73 -0
  56. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/standard-list.md +198 -0
  57. package/src/teamix-evo-design-opentrek/patterns/color-mapping.md +96 -0
  58. package/src/teamix-evo-design-opentrek/patterns/dashboard.md +2 -0
  59. package/src/teamix-evo-design-opentrek/patterns/detail-page.md +218 -152
  60. package/src/teamix-evo-design-opentrek/patterns/form-page.md +437 -228
  61. package/src/teamix-evo-design-opentrek/patterns/list-page.md +221 -260
  62. package/src/teamix-evo-design-opentrek/patterns/page-types.md +40 -125
  63. package/src/teamix-evo-design-opentrek/philosophy.md +7 -5
  64. package/src/teamix-evo-design-opentrek/rules/_assets/OP_AGENT RUNTIME.svg +1 -0
  65. package/src/teamix-evo-design-opentrek/rules/_assets/OP_AI GATEWAY.svg +1 -0
  66. package/src/teamix-evo-design-opentrek/rules/_assets/OP_AI STUDIO.svg +1 -0
  67. package/src/teamix-evo-design-opentrek/rules/_assets/OP_DEV-2.svg +1 -0
  68. package/src/teamix-evo-design-opentrek/rules/_assets/OP_LOGO.svg +1 -0
  69. package/src/teamix-evo-design-opentrek/rules/_assets/OP_OPS.svg +1 -0
  70. package/src/teamix-evo-design-opentrek/rules/boundaries.rules.json +3 -3
  71. package/src/teamix-evo-design-opentrek/rules/business-mapping.json +124 -0
  72. package/src/teamix-evo-design-opentrek/rules/common-components.json +924 -0
  73. package/src/teamix-evo-design-opentrek/rules/component-specs.json +1083 -0
  74. package/src/teamix-evo-design-opentrek/rules/design-tokens.css +433 -0
  75. package/src/teamix-evo-design-opentrek/rules/design-tokens.json +2798 -0
  76. package/src/teamix-evo-design-opentrek/rules/layout-rules.json +218 -0
  77. package/src/teamix-evo-design-opentrek/rules/page-flow.json +351 -0
  78. package/src/teamix-evo-design-opentrek/rules/page-frame.json +241 -0
  79. package/src/teamix-evo-design-opentrek/rules/page-header-spec.md +123 -0
  80. package/src/teamix-evo-design-opentrek/rules/page-types.json +206 -0
  81. package/src/teamix-evo-design-opentrek/rules/sidebar-spec.md +217 -0
  82. package/src/teamix-evo-design-opentrek/rules/styling.json +188 -0
  83. package/src/teamix-evo-design-opentrek/rules/token-mapping.md +284 -0
  84. package/src/teamix-evo-design-uni-manager/SKILL.md +18 -27
  85. package/src/teamix-evo-design-uni-manager/boundaries.md +7 -4
  86. package/src/teamix-evo-design-uni-manager/brand.md +1 -1
  87. package/src/teamix-evo-design-uni-manager/components.md +33 -28
  88. package/src/teamix-evo-design-uni-manager/foundations.md +24 -21
  89. package/src/teamix-evo-design-uni-manager/generation-flow.md +46 -8
  90. package/src/teamix-evo-design-uni-manager/patterns/dashboard.md +3 -1
  91. package/src/teamix-evo-design-uni-manager/patterns/detail-page.md +42 -13
  92. package/src/teamix-evo-design-uni-manager/patterns/form-page.md +67 -30
  93. package/src/teamix-evo-design-uni-manager/patterns/list-page.md +73 -40
  94. package/src/teamix-evo-design-uni-manager/patterns/page-types.md +14 -12
  95. package/src/teamix-evo-design-uni-manager/philosophy.md +4 -2
  96. package/src/teamix-evo-design-uni-manager/rules/boundaries.rules.json +3 -3
  97. package/src/teamix-evo-manage/SKILL.md +74 -66
@@ -8,19 +8,20 @@
8
8
 
9
9
  ## 强制项(12)
10
10
 
11
- | # | 检查点 | 失败示例 | 通过条件 | 规则 |
12
- | --- | ------------------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------- | -------------- |
13
- | 1 | 无硬编码色值 | `bg-[#fff]` / `style={{color:'red'}}` | 走语义 token:`bg-background` / `text-foreground` | [F1] |
14
- | 2 | 状态不用原始色 | `text-green-500` / `bg-red-100` | `<Badge variant="secondary">` / `text-destructive` | [S8] |
15
- | 3 | 间距用 gap | `space-y-4` | `flex flex-col gap-4` | [S2] |
16
- | 4 | className 不覆盖组件颜色 / 字体 | `<Button className="bg-blue-500">` | `<Button variant="default">` | [S1] |
17
- | 5 | 复合组件结构完整 | `<Dialog>` DialogTitle / `<Tabs>` 直接放 Trigger | Dialog Title;Card Header+Content;Tabs List;详见 C | [C1-C12] |
18
- | 6 | 状态 / 占位 / 分隔走专用组件 | 自定义 styled span Badge / animate-pulse div | Badge / Skeleton / Empty / Separator / Alert / `toast()` | [C7-C12] |
19
- | 7 | 图标用 data-icon,不设尺寸类 | `<SearchIcon className="size-4 mr-2" />` | `<SearchIcon data-icon="inline-start" />` | [I1-I2] |
20
- | 8 | 不手动 z-index / dark: 覆盖 | `className="z-50"` / `dark:bg-gray-950` | 删除 z-index(组件自管);用语义 token | [S5] [S7] |
21
- | 9 | 条件类名用 cn() | `` `${active ? 'a' : 'b'}` `` | `cn('base', active ? 'a' : 'b')` | [S6] |
22
- | 10 | 危险操作二次确认 | `<Button onClick={delete}>删除</Button>` | `<AlertDialog>` + 陈述句标题 + 影响列表 + 重复动词按钮 | P4 [philosophy] |
23
- | 11 | 可交互元素显式带手型 | `<button onClick={...}>` 不带 `cursor-pointer` | `cursor-pointer` + `disabled:cursor-not-allowed` | [ADR0023] |
11
+ | # | 检查点 | 失败示例 | 通过条件 | 规则 |
12
+ | --- | --- | --- | --- | --- |
13
+ | 1 | 无硬编码色值 | `bg-[#fff]` / `style={{color:'red'}}` | 走语义 token:`bg-background` / `text-foreground` | [F1] |
14
+ | 2 | 状态不用原始色 | `text-green-500` / `bg-red-100` | `<Badge variant="secondary">` / `text-destructive` | [S8] |
15
+ | 3 | 间距用 gap | `space-y-4` | `flex flex-col gap-4` | [S2] |
16
+ | 4 | className 不覆盖组件颜色 / 字体 | `<Button className="bg-blue-500">` | `<Button variant="default">` | [S1] |
17
+ | 4.1 | Button 不传 size | `<Button size="sm">` / `<Button size="sm" className="h-9 w-9 p-0">` | `<Button>...</Button>`(default = `h-8` + `text-xs` 12px,ADR 0027 对齐 cd hybridcloud form-element-medium);icon-only `size="icon"` | [ADR0027] |
18
+ | 5 | 复合组件结构完整 | `<Dialog>` DialogTitle / `<Tabs>` 直接放 Trigger | Dialog Title;Card Header+Content;Tabs List;详见 C | [C1-C12] |
19
+ | 6 | 状态 / 占位 / 分隔走专用组件 | 自定义 styled span 当 Badge / animate-pulse div | Badge / Skeleton / Empty / Separator / Alert / `toast()` | [C7-C12] |
20
+ | 7 | 图标用 data-icon,不设尺寸类 | `<SearchIcon className="size-4 mr-2" />` | `<SearchIcon data-icon="inline-start" />` | [I1-I2] |
21
+ | 8 | 不手动 z-index / dark: 覆盖 | `className="z-50"` / `dark:bg-gray-950` | 删除 z-index(组件自管);用语义 token | [S5] [S7] |
22
+ | 9 | 条件类名用 cn() | `` `${active ? 'a' : 'b'}` `` | `cn('base', active ? 'a' : 'b')` | [S6] |
23
+ | 10 | 危险操作二次确认 | `<Button onClick={delete}>删除</Button>` | `<AlertDialog>` + 陈述句标题 + 影响列表 + 重复动词按钮 | P4 [philosophy] |
24
+ | 11 | 可交互元素显式带手型 | `<button onClick={...}>` 不带 `cursor-pointer` | `cursor-pointer` + `disabled:cursor-not-allowed` | [ADR0023] |
24
25
 
25
26
  > **强制项 #12(并入 #11 的纪律范围,与 [ADR 0024](../../../../../docs/adr/0024-scoped-css-radix-state-conflict.md) 同步)**:hover / focus 视觉反馈(border / bg / shadow)写在组件源码 className 时**必须**用 `enabled:` 前缀,disabled 态不触发样式变化。失败示例 `hover:border-primary`(disabled 仍响应);通过示例 `enabled:hover:border-primary`。Radix `data-state="checked"` / `"indeterminate"` / `"on"` 激活态视觉由组件自管,uni-manager scoped CSS 已统一在 `:not()` 链里排除这三个态值,新组件接入 `border-input` 类时务必核对。
26
27
  >
@@ -28,6 +29,7 @@
28
29
 
29
30
  [F1]: ./boundaries.md
30
31
  [ADR0023]: ../../../../../docs/adr/0023-cursor-pointer-explicit-in-component-source.md
32
+ [ADR0027]: ../../../../../docs/adr/0027-component-visual-token-alignment.md
31
33
  [S1]: ./boundaries.md
32
34
  [S2]: ./boundaries.md
33
35
  [S5]: ./boundaries.md
@@ -1,5 +1,8 @@
1
1
  # Components — 选型决策与组合规则
2
2
 
3
+ > ⚠️ **Prerequisites**: 你必须已完成 [generation-flow.md](./generation-flow.md) Step 1–3(已确定页面类型 + 子类型 + 区域骨架)后才能读本文件。
4
+ > 若未完成前置步骤,请先返回 [generation-flow.md](./generation-flow.md) 从 Step 1 开始。
5
+
3
6
  > **本文档只回答"用什么组件、怎么搭配",不写具体 Props / Examples / import 路径。**
4
7
  > 组件 API、Props、示例代码通过 MCP `get_component_meta` 实时查询;可用列表通过 `list_components` / `find_components` 查询。
5
8
 
@@ -13,24 +16,29 @@
13
16
 
14
17
  调用 `list_components` / `find_components` 命中失败、或本文件提到的组件名(例如 `SearchCombo` / `ContextSwitcher` / `ItemCard` / `CardGrid` / `CardActionBar`)在 `@teamix-evo/biz-ui` 中无实物时。
15
18
 
16
- ### 0.2 三步处置法
19
+ ### 0.2 四步处置法
17
20
 
18
21
  1. **不要自造同名组件入 `src/components/`** — 即使本文件提到该组件名,也必须先确认实物存在。
19
- 2. **改用 `@teamix-evo/ui` 中语义近似的原子组件做最小拼装**(参见本文件 §3 决策树和 §5 拼凑配方)。
20
- 3. **在响应中显式声明替代关系**,例如:
22
+ 2. **优先扫所有 ui 单体找语义等价**(见 §0.4) — 在 `@teamix-evo/ui` 89 个原子件中用 `find_components` 模糊搜 + 按七类法分类筛,找功能 / 结构等价的**单体**直接用。**这一步不可跳**。
23
+ 3. **单体彻底无等价 → 才用 ui 多原子最小拼装**(参见本文件 §3 决策树和 §5 拼凑配方)。
24
+ 4. **在响应中显式声明替代关系**,例如:
21
25
 
22
- > `// SearchCombo 暂未实物化 → Input + Select + Button 拼装`
26
+ > `// SearchCombo 暂未实物化 → ui filter-bar 单体语义等价 → 直接采用` > `// 或:// SearchCombo 暂未实物化 → 89 件单体扫尽无等价 → Input + Select + Button 最小拼装`
23
27
 
24
28
  ### 0.3 兜底优先序
25
29
 
26
30
  ```text
27
- biz-ui 实物组件 (优先)
31
+ biz-ui 实物组件(优先)
32
+ ↓ 未命中
33
+ ui 原子 — 精确名匹配(dialog→Dialog / button→Button…)
28
34
  ↓ 未命中
29
- ui 原子组件最小拼装 (兜底)
35
+ ui 原子 — 语义近似单体替代(扫所有 89 件,见 §0.4) ← 关键档:穷尽前不允许进下一档
36
+ ↓ 仍未命中
37
+ ui 多原子最小拼装(万不得已,注释声明)
30
38
  ↓ 仍无法表达
31
39
  跳转 patterns/*.md 找页面级模板
32
40
  ↓ 仍无法表达
33
- 回报用户:缺组件 + 已尝试拼装方案
41
+ 回报用户:缺组件 + 已尝试单体扫描记录 + 拼装方案
34
42
  ```
35
43
 
36
44
  **永远不要**:
@@ -38,22 +46,60 @@ ui 原子组件最小拼装 (兜底)
38
46
  - 在 `src/components/` 下新增与 biz-ui 同名的"私有版本"
39
47
  - 用 antd / arco / chakra 等其它库填补缺口
40
48
  - 在 skill 响应中写"假设 biz-ui 有 X"而不实查 MCP
49
+ - **跳过 §0.4 直接进多原子拼装** — 属于"以拼代查",违反单体优先原则
50
+
51
+ ---
52
+
53
+ ### 0.4 语义近似单体扫描指南(兜底关键步骤)
54
+
55
+ > 「**语义近似单体**」= ui 89 个原子里找到一个**功能等价 / 结构相容 / 视觉中性**的组件直接使用,避免几个原子捆一起的拼装代价。这是 §0.3 第 3 档的实操定义。
56
+
57
+ **扫描三板斧**:
58
+
59
+ 1. **关键词模糊搜**:`find_components(kw)` 多关键词试 — 例 `SearchBox` → 试 `search` / `find` / `query` / `filter` / `combo`
60
+ 2. **七类法分类筛**(按要做的事归类,再翻该类下的 ui 原子):
61
+ - `general`:Button / Icon / Typography
62
+ - `layout`:Flex / Grid / Space / Separator / Sidebar / PageHeader / Card / Container
63
+ - `navigation`:Breadcrumb / Pagination / DropdownMenu / Steps / NavigationMenu / Tabs
64
+ - `data-entry`:参见 §3.6 输入控件
65
+ - `data-display`:参见 §3.4 / §3.5;含 Accordion / Tooltip / Table / DataTable / Badge / Tag / Avatar / Descriptions / Statistic
66
+ - `feedback`:Alert / Dialog / Sheet(抽屉) / Popover / Progress / Spinner / Empty / Skeleton / Sonner
67
+ - `deprecated`:不出现在 `list_components` 默认结果,无视
68
+ 3. **能力边界核对**:候选单体用 `get_component_meta(name)` 确认 Props 是否承载所需语义,避免"看名字像"实际不通
69
+
70
+ **典型语义近似映射**(仅示例,使用前仍需 MCP 实查):
71
+
72
+ | 找不到的概念 | 优先尝试单体(语义近似) | 万不得已的拼装兜底 |
73
+ | ------------------ | ----------------------------------------------- | --------------------------------- |
74
+ | `ItemCard` | `card`(直接用) | CardHeader + CardContent + Footer |
75
+ | `SearchCombo` | `filter-bar`(直接用) | Input + Select + Button |
76
+ | `ContextSwitcher` | `dropdown-menu` / `command` + `popover`(拼装) | command + popover + avatar |
77
+ | `Empty` / `NoData` | `empty`(直接用) | div + Icon + Text |
78
+ | `Loading` | `spinner` / `skeleton`(直接用) | div + animate-spin |
79
+ | `ConfirmDialog` | `alert-dialog`(直接用) | dialog + button + text |
80
+ | `StatusTag` | `badge` / `tag`(按 §3.3) | div + dot + text |
81
+
82
+ **严禁反模式**:
83
+
84
+ - 单体语义等价时仍按概念名拼装(例:明明有 `empty` 偏写 `<div className="flex flex-col items-center"><Icon><span>暂无数据</span></div>`)
85
+ - 把"最小拼装"理解为"多原子捆绑就行",而不是先**穷尽 88 件单体**
41
86
 
42
87
  ---
43
88
 
44
89
  ## 1. 双层组件架构(实物归属)
45
90
 
46
- | 层级 | 来源 | 实物清单(截至当前 variant) |
47
- | ------------------------------------------ | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
48
- | **业务扩展层(biz-ui,opentrek variant)** | `@teamix-evo/biz-ui/opentrek` | 2 个实物:`list-card`、`op-sidebar`。其余 `business/` 目录为文档草稿,**不可 import**。 |
49
- | **ui 实现层(shadcn 原子)** | `@teamix-evo/ui` | ≈ 89 个原子/复合组件。包含 **PageHeader / Pagination / Steps / Tabs / Tooltip / DataTable / FilterBar / Combobox(=command) / AutoComplete / DatePicker / Drawer / Sheet / Dialog / AlertDialog / Card / Badge / Tag / Alert / Toast(sonner) / Form** 等高频件。 |
91
+ | 层级 | 来源 | 实物清单(截至当前 variant) |
92
+ | ------------------------------------------ | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
93
+ | **业务扩展层(biz-ui,opentrek variant)** | `@teamix-evo/biz-ui/opentrek` | 3 个实物:`list-card`、`op-sidebar`、`op-page-container`。其余 `business/` 目录为文档草稿,**不可 import**。 |
94
+ | **ui 实现层(shadcn 原子)** | `@teamix-evo/ui` | ≈ 76 个原子/复合组件。包含 **PageHeader / Pagination / Steps / Tabs / Tooltip / DataTable / FilterBar / Command / Combobox / DatePicker / Sheet / Dialog / AlertDialog / Card / Badge / Tag / Alert / Sonner / Form** 等高频件。 |
50
95
 
51
96
  ### 1.1 选型铁律
52
97
 
53
- 1. **优先 biz-ui 实物层** — 已封装变体 + 文案规范,但**注意 opentrek 当前仅 2 个实物**。
54
- 2. **biz-ui 无实物 → ui 实现层**89 个原子件覆盖绝大部分场景。
55
- 3. **ui 仍无 §5 拼凑配方** ui 多个原子件最小组合(不私造)。
56
- 4. **禁止**自造同名组件(违反 reuse-first,详见 §0)。
98
+ 1. **优先 biz-ui 实物层** — 已封装变体 + 文案规范,但**注意 opentrek 当前仅 3 个实物**。
99
+ 2. **biz-ui 无实物 → ui 单体精确名匹配**按组件名 / 显式语义直查 `find_components`。
100
+ 3. **精确名未命中 → ui 单体语义近似扫描**(见 §0.4) 88 件里找等价单体直接用,**这一步不可跳**。
101
+ 4. **单体彻底无等价 §5 多原子最小拼装** — 仅作为单体穷尽后的兜底。
102
+ 5. **禁止**自造同名组件(违反 reuse-first,详见 §0)。
57
103
 
58
104
  ### 1.2 实时校验
59
105
 
@@ -75,7 +121,7 @@ ui 原子组件最小拼装 (兜底)
75
121
 
76
122
  ## 3. 选型决策树
77
123
 
78
- ### 3.1 反馈与确认 — Dialog vs Sheet vs Drawer vs Popover
124
+ ### 3.1 反馈与确认 — Dialog vs Sheet vs Popover
79
125
 
80
126
  ```text
81
127
  需要用户做出决定 / 阻塞主流程?
@@ -84,7 +130,7 @@ ui 原子组件最小拼装 (兜底)
84
130
  │ └─ 复杂表单(< 8 字段)→ Dialog
85
131
  └─ 否
86
132
  ├─ 临时编辑/筛选(侧边滑出)→ Sheet
87
- ├─ 多级下探查看(侧边可叠层)→ Drawer
133
+ ├─ 多级下探查看(侧边可叠层)→ Sheet(多层叠加模式)
88
134
  ├─ 内容预览/上下文操作(小气泡)→ Popover
89
135
  └─ 仅展示信息(鼠标悬浮)→ Tooltip
90
136
  ```
@@ -100,17 +146,17 @@ ui 原子组件最小拼装 (兜底)
100
146
 
101
147
  > 来源:Teamix-UI 容器规范。
102
148
 
103
- | 类别 | 容器 | 何时使用 |
104
- | ---------- | ----------------------------------------------- | ------------------------------------------------ |
105
- | **操作型** | 全页面(FormPage) | 字段多 / 步骤多 / 需要持久 URL |
106
- | **操作型** | 弹窗模态(Dialog) | 阻塞主流程的简短确认或表单;最多 2 级,不再深入 |
107
- | **操作型** | 气泡(Popconfirm) | 二次确认(删除/解绑),轻量提示 |
108
- | **展示型** | 全页面(DetailPage) | 完整信息查看,路由可分享 |
109
- | **展示型** | 抽屉非模态(Sheet) | 不阻塞主流程,可保留上下文(如侧栏 Detail) |
110
- | **展示型** | 抽屉模态(Drawer) | 多级下探查看(如资源 → 子资源 → 配置),逐层推出 |
111
- | **展示型** | 弹窗模态(Dialog) | 一次性展示重要信息 |
112
- | **展示型** | 卡片(Card) | 同级信息分组;卡片之间间距 16px |
113
- | **展示型** | 通知反馈(Toast/Sonner / Alert / Notification) | 瞬时反馈 / 页面级横幅 / 系统通知 |
149
+ | 类别 | 容器 | 何时使用 |
150
+ | ---------- | -------------------------- | ------------------------------------------------ |
151
+ | **操作型** | 全页面(FormPage) | 字段多 / 步骤多 / 需要持久 URL |
152
+ | **操作型** | 弹窗模态(Dialog) | 阻塞主流程的简短确认或表单;最多 2 级,不再深入 |
153
+ | **操作型** | 气泡(Popconfirm) | 二次确认(删除/解绑),轻量提示 |
154
+ | **展示型** | 全页面(DetailPage) | 完整信息查看,路由可分享 |
155
+ | **展示型** | 抽屉非模态(Sheet) | 不阻塞主流程,可保留上下文(如侧栏 Detail) |
156
+ | **展示型** | 抽屉模态(Sheet 多层叠加) | 多级下探查看(如资源 → 子资源 → 配置),逐层推出 |
157
+ | **展示型** | 弹窗模态(Dialog) | 一次性展示重要信息 |
158
+ | **展示型** | 卡片(Card) | 同级信息分组;卡片之间间距 16px |
159
+ | **展示型** | 通知反馈(Sonner / Alert) | 瞬时反馈 / 页面级横幅 / 系统通知 |
114
160
 
115
161
  ### 3.3 状态展示 — Badge vs Tag vs Alert
116
162
 
@@ -149,12 +195,14 @@ ui 原子组件最小拼装 (兜底)
149
195
  ```text
150
196
  枚举值 ≤ 7 → RadioGroup(一屏可见)
151
197
  枚举值 8~30 → Select
152
- 枚举值 > 30 / 需搜索 → Combobox(= ui command)
153
- 多选 → MultiSelect / Checkbox
198
+ 枚举值 > 30 / 需搜索 → Combobox(输入即建议,支持 multiple 多选)或 Command + Popover 拼装
199
+ 多选 → Combobox (multiple={true}) / Checkbox
200
+ 数值(整数/小数/金额)→ InputNumber(带 min/max/step/precision)
201
+ 数值范围可视化 → Slider(仅用于资源配比/阈值的拖拽式选择)
154
202
  日期 → DatePicker / DateRangePicker
155
- 富文本 → Textarea / RichEditor
203
+ 富文本 → Textarea
156
204
  文件 → Upload
157
- 自动补全 → AutoComplete
205
+ 自动补全 → Combobox
158
206
  ```
159
207
 
160
208
  ---
@@ -176,15 +224,16 @@ ui 原子组件最小拼装 (兜底)
176
224
 
177
225
  ## 5. 业务扩展层(候补)— 实物 vs 概念 + 拼凑配方
178
226
 
179
- > opentrek variant 当前**只有 2 个**实物业务组件:`list-card`、`op-sidebar`。
227
+ > opentrek variant 当前有 **3 个**实物业务组件:`list-card`、`op-sidebar`、`op-page-container`。
180
228
  > 以下表格区分"已实物化"与"概念占位(用 ui 拼装)"。
181
229
 
182
230
  ### 5.1 已实物化(直接使用)
183
231
 
184
- | 组件 | 用途 | 归属 |
185
- | -------------- | --------------------------------- | --------------- |
186
- | **list-card** | 列表页卡片化展示(替代 ItemCard) | biz-ui/opentrek |
187
- | **op-sidebar** | 主导航侧栏 | biz-ui/opentrek |
232
+ | 组件 | 用途 | 归属 |
233
+ | --------------------- | ----------------------------------------- | --------------- |
234
+ | **list-card** | 列表页卡片化展示(替代 ItemCard) | biz-ui/opentrek |
235
+ | **op-sidebar** | 主导航侧栏 | biz-ui/opentrek |
236
+ | **op-page-container** | 页面容器(白卡 + 间距 + PageHeader 插槽) | biz-ui/opentrek |
188
237
 
189
238
  ### 5.2 概念占位(按配方拼装)
190
239
 
@@ -237,8 +286,9 @@ ui 原子组件最小拼装 (兜底)
237
286
  通用结构性规则 → 见 [checklist.md](./checklist.md)(C1-C12 / I1-I4)。本文件特有的"选型决策"自检:
238
287
 
239
288
  - [ ] 已先用 `find_components` 验证组件存在性(不靠默认)
240
- - [ ] biz-ui 命中失败 → 改用 ui 原子件,按 §5.2 配方拼装并加注释
241
- - [ ] 反馈 / 确认场景按容量选 Dialog / Sheet / Drawer / Popover
289
+ - [ ] biz-ui 命中失败 → **先按 §0.4 扫所有 ui 单体找语义近似替代**,单体覆盖时直接采用,未直接跳到 §5 拼装
290
+ - [ ] 单体彻底无等价时 §5 拼装代码必加注释 `// 已扫尽 89 ui 单体无语义等价 → 拼装`
291
+ - [ ] 反馈 / 确认场景按容量选 Dialog / Sheet / Popover
242
292
  - [ ] 容器层级 ≤ 3,弹窗最多 2 级,超过则跳转全页面
243
293
  - [ ] 卡片列表优先 biz-ui `list-card`,否则用 `card[] + grid` 拼
244
294
  - [ ] 表格 ≤ 6 列,超过改 DataTable + 列控制