@teamix-evo/skills 0.11.0 → 0.12.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 (19) hide show
  1. package/package.json +1 -1
  2. package/src/teamix-evo-design-opentrek/SKILL.md +27 -19
  3. package/src/teamix-evo-design-opentrek/pages/dashboard-page/SKILL.md +429 -0
  4. package/src/teamix-evo-design-opentrek/pages/dashboard-page/patterns/dashboard-opentrek.md +268 -0
  5. package/src/teamix-evo-design-opentrek/pages/form-page/SKILL.md +423 -5
  6. package/src/teamix-evo-design-opentrek/pages/list-page/SKILL.md +396 -25
  7. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/item-card-spec.md +386 -0
  8. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/card-list-opentrek.md +739 -0
  9. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/card-list.md +89 -363
  10. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/standard-list-opentrek.md +318 -0
  11. package/src/teamix-evo-design-opentrek/patterns/dashboard.md +9 -16
  12. package/src/teamix-evo-design-uni-manager/SKILL.md +7 -0
  13. package/src/teamix-evo-manage/SKILL.md +66 -29
  14. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/action-column-spec.md +0 -60
  15. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/state-action-pattern.md +0 -51
  16. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/advanced-filter-list.md +0 -94
  17. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/drawer-list.md +0 -76
  18. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/expandable-list.md +0 -70
  19. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/l2-sidebar-list.md +0 -73
@@ -4,7 +4,8 @@
4
4
  > 覆盖三种卡片视图子类型:**pure-card** / **standard-card** / **view-toggle**
5
5
  > 核心组件:**CardGrid** > **ItemCard** × N → **CardActionBar**
6
6
  > 全局规则继承:[L1 框架](../../../rules/page-frame.json) / [布局模式](../../../rules/layout-rules.json) / [CRUD 流转](../../../rules/page-flow.json) / [SearchCombo](../_shared/search-combo-spec.md)
7
- > **本文件为业务卡片三件套(ItemCard/CardGrid/CardActionBar)的唯一规范来源**(v7.3 起:`rules/card-component.json` 已废止,所有规格下沉至此 §9)
7
+ > **业务卡片三件套(ItemCard/CardGrid/CardActionBar)完整规格** → [_shared/item-card-spec.md](../_shared/item-card-spec.md)
8
+ > **OpenTrek 业务页面组合规则** → [card-list-opentrek.md](./card-list-opentrek.md)
8
9
 
9
10
  ---
10
11
 
@@ -13,7 +14,7 @@
13
14
  | 术语 | 定位 | 别名 | 规范来源 |
14
15
  |------|------|------|------|
15
16
  | **ContentCard** | 页面主内容**白色容器**,padding 24px,每页**单例** | 白卡容器 / shadcn-Card | `rules/component-specs.json` C7-Card |
16
- | **ItemCard** | CardGrid 内的**单个数据项卡片**,可重复 N 次 | 业务卡片 / 卡片视图列表项 | 本文件 §9.1 |
17
+ | **ItemCard** | CardGrid 内的**单个数据项卡片**,可重复 N 次 | 业务卡片 / 卡片视图列表项 | [item-card-spec.md §1](../_shared/item-card-spec.md) |
17
18
 
18
19
  > **规则**:本 pattern 及任何引用本 pattern 的文档,禁止只写 "Card",必须显式使用 `ContentCard` 或 `ItemCard` 区分。
19
20
 
@@ -36,7 +37,7 @@
36
37
  | Pagination 默认条数 | 12 | 12 | 10(卡片)/ 10(列表) |
37
38
  | 其他特殊 | ToggleGroup 胶囊筛选位于 ActionToolbar 右侧 | 同 pure-card | DataTable + BulkActionBar 与 CardGrid 同级,由 ViewToggle 切换可见 |
38
39
 
39
- > **density / iconStyle / cardGridPreset / actionBarMode 的详细规格见本文件 §9 三件套完整规范。**
40
+ > **density / iconStyle / cardGridPreset / actionBarMode 的详细规格见 [item-card-spec.md](../_shared/item-card-spec.md)。**
40
41
 
41
42
  ---
42
43
 
@@ -67,24 +68,50 @@
67
68
  > Sidebar 由 [`page-frame.json`](../../../rules/page-frame.json) L1 自动继承(TWO_COL 显示 / SINGLE_COL 隐藏),本 pattern 不重复声明。
68
69
  > ContentCard 内左右对齐遵循 [分层 padding 模型 v7.5](../SKILL.md#5-1-card-内左右对齐稳定规则硬约束)(Card.paddingX 20px 唯一来源)。
69
70
 
71
+ ### 2.1 ActionToolbar 布局细则(截图实证补充)
72
+
73
+ > 8 张截图验证的 ActionToolbar 三段式布局:
74
+
75
+ ```
76
+ ┌─ ActionToolbar (flex, nowrap, align-items: center, gap: 8px) ─────────────────┐
77
+ │ .left-actions .search-combo .right-tools (ml: auto) │
78
+ │ [+ 新建xx] [导入] [搜索框🔍] [全部|类型A|类型B|类型C] │
79
+ │ ← gap 8px → ← margin-left 20px → ← margin-left: auto → │
80
+ └───────────────────────────────────────────────────────────────────────────────┘
81
+ ```
82
+
83
+ | 区域 | 组件 | 规格 | UI 组件引用 |
84
+ |------|------|------|-------------|
85
+ | left-actions | 主操作按钮 | Primary 最多 1 个,其余 Secondary/Ghost | `components/button` → `Button` |
86
+ | search-combo | 搜索输入框 | 与 left-actions 间距 20px | `components/input` → `Input` + `components/select` |
87
+ | **right-tools** | **ToggleGroup 筛选** | margin-left: auto 推到右侧;Tab 样式;选中 = `var(--primary)` + 底部 2px 线 | `components/toggle-group` → `ToggleGroup` |
88
+
89
+ **ToggleGroup 筛选交互规范**(截图提取):
90
+ - 高度: 32px(与搜索框等高)
91
+ - 选项 font-size: 13px
92
+ - 选中态: color `var(--primary)` + border-bottom 2px solid `var(--primary)`
93
+ - 未选中态: color `var(--gray-secondary)`;hover → `var(--gray-primary)`
94
+ - 首项固定为"全部"(不可省略)
95
+ - 选项数量: 3-7 个为宜;超过 7 个考虑用 Dropdown 收纳
96
+
70
97
  ---
71
98
 
72
99
  ## 3. 必需组件清单
73
100
 
74
- | 组件 | 来源规范 | 子类型适用 |
75
- |------|----------|------------|
76
- | Sidebar | rules/page-frame.json (L1 框架自动继承) | standard-card / view-toggle |
77
- | ContentCard | rules/component-specs.json C7-Card | 全部 |
78
- | PageHeader | rules/common-components.json | 全部 |
79
- | ActionToolbar | — | 全部 |
80
- | SearchCombo | _shared/search-combo-spec.md | 全部 |
81
- | ToggleGroup(胶囊筛选 / ViewToggle 复用) | rules/common-components.json | 全部(ViewToggle view-toggle 必需) |
82
- | **CardGrid** | **本文件 §9.2** | 全部 |
83
- | **ItemCard** × N | **本文件 §9.1** | 全部 |
84
- | **CardActionBar** | **本文件 §9.3** | 全部 |
85
- | Pagination | rules/common-components.json | 全部 |
86
- | DataTable | _shared/column-meta-rules.md + action-column-spec.md | view-toggle 切换列表视图时 |
87
- | BulkActionBar | — | view-toggle 列表视图 |
101
+ | 组件 | 来源规范 | UI 组件库引用 | 子类型适用 |
102
+ |------|----------|--------------|------------|
103
+ | Sidebar | rules/page-frame.json (L1 框架自动继承) | `components/sidebar` | standard-card / view-toggle |
104
+ | ContentCard | rules/component-specs.json C7-Card | `components/card` → `Card` + `CardContent` | 全部 |
105
+ | PageHeader | rules/common-components.json | `components/page-header` → `PageHeader` + `PageHeaderHeading` | 全部 |
106
+ | ActionToolbar | — | 组合组件(见 [opentrek §5.2](./card-list-opentrek.md#52-组件引用清单)) | 全部 |
107
+ | SearchCombo | _shared/search-combo-spec.md | `components/input` → `Input` + `components/select` → `Select` | 全部 |
108
+ | ToggleGroup(胶囊筛选 / ViewToggle 复用) | rules/common-components.json | `components/toggle-group` `ToggleGroup` + `ToggleGroupItem` | 全部 |
109
+ | **CardGrid** | [item-card-spec.md §2](../_shared/item-card-spec.md#2-cardgrid卡片网格) | CSS Grid 实现(无对应 UI 组件) | 全部 |
110
+ | **ItemCard** × N | [item-card-spec.md §1](../_shared/item-card-spec.md#1-itemcard业务卡片) | `components/card` → `Card` + `CardHeader` + `CardContent` + `CardFooter` | 全部 |
111
+ | **CardActionBar** | [item-card-spec.md §3](../_shared/item-card-spec.md#3-cardactionbar卡片操作栏) | 组合组件 | 全部 |
112
+ | Pagination | rules/common-components.json | `components/pagination` → `Pagination` + 子组件 | 全部 |
113
+ | DataTable | _shared/column-meta-rules.md + action-column-spec.md | `components/data-table` | view-toggle 切换列表视图时 |
114
+ | BulkActionBar | — | 组合组件 | view-toggle 列表视图 |
88
115
 
89
116
  ---
90
117
 
@@ -116,7 +143,7 @@
116
143
  | ItemCard → ItemCard | FORBID | 业务卡片禁止嵌套 |
117
144
  | CardGrid → 任何非 ItemCard 子节点 | FORBID | Grid 仅承载业务卡片 |
118
145
 
119
- > 卡片组件级硬约束(hover/states/CSS 规则)见 §9
146
+ > 卡片组件级硬约束(hover/states/CSS 规则)见 [item-card-spec.md](../_shared/item-card-spec.md)
120
147
 
121
148
  ---
122
149
 
@@ -199,353 +226,50 @@
199
226
 
200
227
  ---
201
228
 
202
- ## 9. 业务卡片三件套完整规格【唯一规范来源】
203
-
204
- > 本节规格自 v7.3 起从 `rules/card-component.json` 下沉至此。`common-components.json` 中 ItemCard/CardGrid/CardActionBar 的 `specRef` 指向本节锚点。
205
- > 三件套用于列表页卡片视图;未来如 Dashboard / Workspace / Overview 需要复用,可直接引用本节锚点。
206
-
207
- ### 9.1 ItemCard(业务卡片)
208
-
209
- - **level**: ORGANISM
210
- - **layer**: business
211
- - **shadcnComponent**: Card(基于白卡容器扩展)
212
- - **场景**:CardGrid 内的单个数据项卡片,含 Title/Description/Field/Supplementary/ActionBar 等 slot,可重复多次出现。
213
-
214
- #### 9.1.1 variants 变体
215
-
216
- | 维度 | 选项 | 默认 | 说明 |
217
- |------|------|------|------|
218
- | density | minimal / standard / complex | standard | 信息密度,按 §4 选型矩阵决定 |
219
- | iconStyle | avatar / tile | avatar | avatar=32×32 圆角(pure-card / standard-card);tile=40×40 大方块(view-toggle) |
220
- | titleFontSize | 14px / 16px | — | iconStyle=avatar → 14px/500;iconStyle=tile → 16px/500 |
221
-
222
- **iconStyle.avatar 详细**:
223
- - size: 32×32(常规/复杂)/ 24×24(极简)
224
- - shape: 圆角矩形 `var(--input-radius)`
225
- - fallback: 首字母色块 + Glossy 光泽(见 §9.1.6)
226
-
227
- **iconStyle.tile 详细**:
228
- - size: 40×40
229
- - shape: 大方块(直角或微圆角)
230
- - fallback: 纯图标,无首字母回退
231
-
232
- #### 9.1.2 slots(5 个 slot 区,按 density 决定使用)
233
-
234
- | Slot | minimal | standard | complex | 元素与样式 |
235
- |------|---------|----------|---------|-----------|
236
- | **CardTitleRow** | 必需 | 必需 | 必需 | icon + title + [badge] + [statusDot] |
237
- | **CardDescriptionRow** | 禁止 | 必需 | 必需 | text(standard: 12px/lineClamp 1;complex: 14px/lineClamp 2);color: `var(--gray-tertiary)` |
238
- | **CardFieldRow** | 禁止 | 0-2 行(可选) | 2-4 行(可选) | fieldIcon(12×12) + fieldLabel(12px) + fieldValue(14px standard / 12px complex) |
239
- | **CardSupplementaryRow** | 1 行(必需) | 0-1 行(可选) | 1 行(必需) | 元信息:创建人/时间/地域;icon(12×12) + label(12px) + value(12px) |
240
- | **CardActionBar** | 必需 | 必需 | 必需 | 通过 slot 引用(见 §9.3) |
241
-
242
- **CardTitleRow 元素**:
243
- - icon: minimal=24×24;standard=Avatar 32×32(avatar) / Icon 40×40(tile);complex=Avatar 32×32;borderRadius `var(--input-radius)`;flex-shrink 0
244
- - title: 由 variants.titleFontSize 决定;font-weight 500;color `var(--gray-primary)`;单行 truncate
245
- - badge(可选): 10px / padding 1px 4px / border-radius 2px;用于「企业版」「Beta」标识
246
- - statusDot(可选): 6px 圆点;位置标题尾部或卡片右上角
247
-
248
- **CardDescriptionRow CSS**:
249
- ```css
250
- .card-desc {
251
- overflow: hidden;
252
- text-overflow: ellipsis;
253
- display: -webkit-box;
254
- -webkit-line-clamp: N; /* standard=1 / complex=2 */
255
- -webkit-box-orient: vertical;
256
- }
257
- ```
258
-
259
- #### 9.1.3 rowGap(slot 间垂直间距,仅 standard 模式)
260
-
261
- | from → to | gap |
262
- |-----------|-----|
263
- | CardTitleRow → CardDescriptionRow | 4px |
264
- | CardDescriptionRow → CardFieldRow | 8px |
265
- | CardFieldRow → CardSupplementaryRow | 4px |
266
-
267
- #### 9.1.4 structureByDensity(density 结构概览)
268
-
269
- | density | rowsAscii | 高度 | actionBarMode |
270
- |---------|-----------|------|----------------|
271
- | minimal | CardTitleRow → CardSupplementaryRow → CardActionBar | ~100px | hover-fade |
272
- | standard | CardTitleRow → CardDescriptionRow → CardFieldRow(0-2) → CardSupplementaryRow(0-1) → CardActionBar | ~160px | hover-slidebar(默认)/ always-visible(view-toggle 覆写)|
273
- | complex | CardTitleRow → CardDescriptionRow(line-clamp:2) → CardFieldRow×2-4 → CardSupplementaryRow → CardActionBar(1-2行) | 240px+ | hover-slidebar |
274
-
275
- #### 9.1.5 states(卡片整体状态)
276
-
277
- | state | border | background | shadow | actionBar |
278
- |-------|--------|------------|--------|-----------|
279
- | default | 1px solid `var(--gray-border)` | `var(--card)` | none | 由 actionBarMode 决定:hover-* 隐藏 / always-visible 常驻 |
280
- | hover | 1px solid `var(--primary)` + breathing | `var(--card)` | `var(--shadow-sm)` | 可见 |
281
- | focus | 2px solid `var(--primary)` | `var(--card)` | `var(--shadow-sm)` | 可见 |
282
- | disabled | 1px solid `var(--gray-border)` | `var(--gray-fill)` | none | 隐藏 |
283
-
284
- **hover.breathingBorder CSS**:
285
- ```css
286
- @keyframes breathing { 0%,100% { opacity:0.5 } 50% { opacity:1 } }
287
- .card-hover-breathing { animation: breathing 2s ease-in-out infinite; }
288
- ```
289
- 应用在 hover 状态下的 border。
290
-
291
- **clickBehavior**:
292
- - 卡片主体点击:跳转 DetailPage 或进入编辑
293
- - ActionBar 点击:执行对应 action,事件 `stopPropagation` 不影响卡片 hover
294
-
295
- #### 9.1.6 avatarPreset(色块头像系统,iconStyle=avatar 且无图片时)
296
-
297
- **colorClasses**(9 种):`bg-primary` / `bg-success` / `bg-type-mcp` / `bg-warning` / `bg-data-8` / `bg-data-1` / `bg-destructive` / `bg-brand-3` / `bg-data-4`
298
-
299
- **fallbackPriority**:
300
- 1. avatar 字段为有效颜色 class → 色块 + 首字母
301
- 2. avatar 字段为有效图片 URL → `<img>`
302
- 3. avatar 字段为空 → `name.charAt(0)` hash 到预设色 + 首字母
303
-
304
- **blockStyle**:
305
- - size: 32×32
306
- - borderRadius: `var(--input-radius)`
307
- - textColor: `#fff`
308
- - fontWeight: 600
309
- - fontSize: 14px
310
- - content: `name.charAt(0).toUpperCase()`
311
-
312
- **glossy 光泽 CSS**(色块右侧叠加半透明白色渐变):
313
- ```css
314
- .avatar-gloss {
315
- position: absolute;
316
- width: 18px; height: 32px;
317
- right: 0; top: 0;
318
- background: linear-gradient(180deg, rgba(255,255,255,0.4) 0%, rgba(255,255,255,0.2) 40%, transparent 100%);
319
- pointer-events: none;
320
- }
321
- ```
322
-
323
- #### 9.1.7 constraints(硬约束)
324
-
325
- - 标题:必须包含,禁止无标题卡片
326
- - 标题长度:单行省略 (truncate)
327
- - 描述长度:standard 1 行 / complex 最多 2 行 (`-webkit-line-clamp: 2`)
328
- - 卡片嵌套:禁止业务卡片嵌套业务卡片(最多 1 级)
329
- - 样式一致性:同一页面内 ItemCard 的 density + iconStyle 必须保持一致
330
- - 深色模式:所有图标使用 mask-image 方案(见 [boundaries.md I1-I4](../../../boundaries.md))
331
-
332
- #### 9.1.8 tokens(设计 token 映射)
333
-
334
- | 用途 | token |
335
- |------|-------|
336
- | background | `--card` |
337
- | border | `--gray-border` |
338
- | borderHover | `--primary` |
339
- | shadowHover | `--shadow-sm` |
340
- | radius | `--radius-lg` (12px) |
341
- | iconRadius | `--input-radius` (8px) |
342
- | titleColor | `--gray-primary` |
343
- | fieldColor | `--gray-secondary` |
344
- | descColor | `--gray-tertiary` |
345
- | disabledBg | `--gray-fill` |
346
- | transitionDuration | `--duration-normal` (200ms) |
347
- | transitionEasing | `--easing-ease` |
348
-
349
- ---
350
-
351
- ### 9.2 CardGrid(卡片网格)
352
-
353
- - **level**: ORGANISM
354
- - **layer**: business
355
- - **shadcnImpl**: null
356
- - **场景**:承载多个 ItemCard,使用 CSS Grid `auto-fill` + `minmax` 自动响应式列数。
357
-
358
- #### 9.2.1 props
359
-
360
- | prop | 取值 | 说明 |
361
- |------|------|------|
362
- | minWidth | 必须引用 `var(--card-grid-min-*)` | 最小列宽(H2 修复,禁止字面量) |
363
- | gap | `var(--card-gap)` 默认 16px | 卡片间距 |
364
- | alignContent | literal: `'start'` | 防止卡片拉伸变形 |
365
- | children | `ItemCard[]` | 仅承载业务卡片 |
366
-
367
- #### 9.2.2 CSS 实现
368
-
369
- ```css
370
- .card-grid {
371
- display: grid;
372
- grid-template-columns: repeat(
373
- auto-fill,
374
- minmax(var(--card-grid-min, var(--card-grid-min-standard)), 1fr)
375
- );
376
- gap: var(--card-gap, 16px);
377
- align-content: start;
378
- }
379
- ```
380
-
381
- #### 9.2.3 presets(4 套预设;pagination 已移除,真相源回归 §1 矩阵)
382
-
383
- | preset | minWidth | iconStyle | density | usedBy |
384
- |--------|----------|-----------|---------|--------|
385
- | **compact** | `var(--card-grid-min-compact)` (240px) | avatar | minimal | pure-card / standard-card |
386
- | **standard** | `var(--card-grid-min-standard)` (300px) | avatar | standard | pure-card / standard-card |
387
- | **feature** | `var(--card-grid-min-feature)` (360px) | avatar | complex | pure-card / standard-card |
388
- | **comfortable** | `var(--card-grid-min-comfortable)` (320px) | tile | standard | view-toggle |
389
-
390
- > Token 定义见 `rules/design-tokens.css`。
391
-
392
- #### 9.2.4 responsive(参考列数,由 auto-fill 自动计算,无需手写断点)
393
-
394
- | viewport | columns |
395
- |----------|---------|
396
- | ≥1400px | 4 |
397
- | 1080-1400px | 3 |
398
- | 768-1080px | 2 |
399
- | <768px | 1 |
400
-
401
- #### 9.2.5 constraints(硬约束)
402
-
403
- - 禁止手动写 `grid-template-columns` 字面量(必须用 `minmax + var(--min-width)`)
404
- - 禁止 `alignContent: stretch`(会导致卡片高度被拉伸变形)
405
- - 禁止在 CardGrid 与 ItemCard 之间插入额外 wrapper
406
-
407
- ---
408
-
409
- ### 9.3 CardActionBar(卡片操作栏)
410
-
411
- - **level**: MOLECULAR
412
- - **layer**: business
413
- - **shadcnImpl**: null
414
- - **场景**:ItemCard 底部的操作栏 — 滑条式 (SlideBar) 设计,白底 + 主要文字色 + 等分宽度(v7.3.1 从主色底调整为白底以提升可读性与表单化一致性)。
415
-
416
- #### 9.3.1 props
417
-
418
- | prop | 取值 | 说明 |
419
- |------|------|------|
420
- | actions | `Array<{ label, onClick, destructive? }>` | 操作列表 |
421
- | mode | `'hover-slidebar' \| 'hover-fade' \| 'always-visible'` | 三态,默认由 ItemCard.density 决定,pattern 可覆写 |
422
- | rows | 1 \| 2 | complex 模式可分行 |
423
-
424
- #### 9.3.2 containerSpec(容器规格)
425
-
426
- ```css
427
- .card-action-bar {
428
- position: absolute;
429
- bottom: 0; left: 0; right: 0;
430
- background: var(--card); /* v7.3.1 白底 */
431
- border-top: 1px solid var(--gray-line); /* v7.3.1 顶部分割线代替主色底边 */
432
- display: flex;
433
- z-index: 2;
434
- }
435
- ```
436
-
437
- > **硬约束**:
438
- > - 禁止撑开卡片高度(必须 `position: absolute`)
439
- > - 背景色与 ContentCard 保持一致(`var(--card)`),全局调整背景时不需修改本节
440
-
441
- #### 9.3.3 actionButtonSpec(按钮规格)
442
-
443
- | 属性 | 值 |
444
- |------|---|
445
- | flex | 1(等分宽度) |
446
- | padding | 8px |
447
- | text-align | center |
448
- | color | `var(--gray-primary)`(v7.3.1 主要文字色) |
449
- | font-size | 13px |
450
- | font-weight | 500 |
451
- | cursor | pointer |
452
- | border-right | `1px solid var(--gray-line)`(v7.3.1 按钮间分隔为浅分割线) |
453
- | last-child | border-right: none |
454
- | hover-bg | `var(--gray-fill)`(v7.3.1 浅灰样式 hover) |
455
- | hover-color | `var(--primary)`(v7.3.1 hover 文字高亮为主色,提高可交互发现性) |
456
-
457
- **destructive 按钮**(醒目警示,保留原色机制):
458
- - background: `transparent`(默认跟随白底)
459
- - color: `var(--destructive)`(红色文字表警示)
460
- - hover-bg: `var(--destructive-bg)`(浅红背景 #FEF2F2)
461
- - hover-color: `var(--destructive)`(保持红色)
462
- - 位置:始终放在最后
463
-
464
- #### 9.3.4 modes 实现表(三态完整 CSS,名称与 ItemCard.structureByDensity.actionBarMode 完全一致)
465
-
466
- ##### hover-slidebar(默认;适用 standard / complex density)
467
- - trigger: 鼠标 hover 卡片
468
- - method: `transform: translateY(100%)` → `translateY(0)`
469
- - duration: 200ms / easing: ease
470
- - visual: 白底上滑,顶部 1px 浅灰分割线与上方内容区分
471
-
472
- ```css
473
- .card-action-bar { transform: translateY(100%); transition: transform .2s ease; }
474
- .card:hover .card-action-bar { transform: translateY(0); }
475
- ```
476
-
477
- > **禁止**:使用 `max-height`(触发 reflow,性能差)
478
-
479
- ##### hover-fade(适用 minimal density)
480
- - trigger: 鼠标 hover 卡片
481
- - method: visibility + opacity 切换
482
- - duration: 200ms / easing: ease
483
-
484
- ```css
485
- .card-action-bar { visibility: hidden; opacity: 0; transition: all .2s ease; }
486
- .card:hover .card-action-bar { visibility: visible; opacity: 1; }
487
- ```
488
-
489
- > **禁止**:使用 `display: none`(会导致卡片高度变化)
490
-
491
- ##### always-visible(view-toggle 子类型覆写)
492
- - trigger: 无需 hover,常驻底部可见
493
- - method: 静态显示,无动画
494
-
495
- ```css
496
- .card-action-bar {
497
- transform: none;
498
- visibility: visible;
499
- opacity: 1;
500
- position: absolute;
501
- bottom: 0;
502
- }
503
- ```
504
-
505
- > **禁止**:跟随 hover 状态切换可见性
506
-
507
- #### 9.3.5 rowsRule(按钮行规则)
508
-
509
- **single(rows=1)**:
510
- - max: 4 个按钮
511
- - buttonGap: 8px
512
- - overflow: 操作 >5 个时,剩余进入「更多 ▾」Dropdown
513
-
514
- **double(rows=2)**:
515
- - row1: 高频操作(管理/编辑/详情等,≤4 个)
516
- - row2: 低频操作 + 「更多 ▾」(续费/导出/删除等)
517
- - buttonGap: 8px
518
- - rowGap: 4px
519
-
520
- #### 9.3.6 actionBehavior(操作触发后的页面流转,引用 page-flow.json crudFlow)
521
-
522
- | action | confirm | target | after |
523
- |--------|---------|--------|-------|
524
- | 查看/详情 | false | DetailPage | 返回保持筛选 |
525
- | 编辑 | false | FormPage / Sheet | 保存后返回原页 |
526
- | 导出 | false | 文件下载 | — |
527
- | 删除 | Dialog 二次确认(level3)| API 调用 | 刷新列表 |
528
-
529
- #### 9.3.7 constraints(硬约束)
530
-
531
- - **样式**:禁止使用文字按钮或 Primary Button 替代滑条式样式
532
- - **背景**:`var(--card)` 白底(v7.3.1),与 ContentCard 保持一致;禁止使用主色底
533
- - **文字**:`var(--gray-primary)` 主要文字色(v7.3.1);hover 转 `var(--primary)` 提示可点击
534
- - **动画**:仅使用本节 §9.3.4 三态(hover-slidebar / hover-fade / always-visible),禁止 `display:none` / `max-height`
535
- - **位置**:必须 `position: absolute; bottom: 0`,不撑开卡片高度
536
- - **危险操作**:`color: var(--destructive)` 红色文字(v7.3.1 从红底调整),始终放在最后;hover-bg `var(--destructive-bg)`
537
- - **按钮分隔**:相邻按钮使用 `1px solid var(--gray-line)` 右边框(v7.3.1 浅灰分割线),最后一个按钮无右边框
538
-
539
- ---
540
-
541
- ## 10. 渲染流程(AI 生成卡片视图列表页时的引用顺序)
229
+ ## 9. 渲染流程(AI 生成卡片视图列表页时的引用顺序)
542
230
 
543
231
  1. **列表 pattern 路由** → 确定 layout(模式A-CARD / 模式D-CARD / 模式D + ViewToggle)
544
- 2. **读取本文件** → 通过 §1 差异矩阵确认子类型;通过 §9 确认 ItemCard / CardGrid / CardActionBar 的 variant 与 preset
232
+ 2. **读取本文件** → 通过 §1 差异矩阵确认子类型;通过 [item-card-spec.md](../_shared/item-card-spec.md) 确认 ItemCard / CardGrid / CardActionBar 的 variant 与 preset
545
233
  3. **读取 `products/{产品}/cards.json`** → 取 ItemCard slot 的业务字段映射(§8)
546
234
  4. **读取 `products/{产品}/states.json`** → 取 actions 可用性(按状态机过滤)
547
- 5. **渲染** CardGrid > ItemCard × N > slots(按 variant 决定 slot 启用/禁用,参考 §9.1.4 structureByDensity)
235
+ 5. **渲染** CardGrid > ItemCard × N > slots(按 variant 决定 slot 启用/禁用,参考 item-card-spec §1.4 structureByDensity)
548
236
  6. **应用** `rules/design-tokens.css` 变量(特别是 `--card-grid-min-*` / `--card-gap` / `--primary` / `--gray-*`)→ 完成样式
237
+ 7. **(OpenTrek 产品)** 额外读取 [card-list-opentrek.md](./card-list-opentrek.md) → 确认页面模式(OT-CL-1/2/3)与 Slot 变体(A-F)
238
+
239
+ ---
240
+
241
+ ## 10. UI 组件库完整引用索引
242
+
243
+ > 以下为卡片视图列表页中涉及的所有 UI 组件库组件的统一引用表。
244
+ > 基础路径:`packages/ui/src/components/`
245
+
246
+ | 组件路径 | 导出组件 | 在卡片列表页中的用途 |
247
+ |----------|----------|-------------------|
248
+ | `components/page-shell` | `PageShell` | L1 级页面壳(header + sidebar + children) |
249
+ | `components/sidebar` | `Sidebar`, `SidebarProvider`, `SidebarContent`, `SidebarHeader`, `SidebarFooter`, `SidebarGroup`, `SidebarGroupLabel`, `SidebarGroupContent`, `SidebarMenu`, `SidebarMenuItem`, `SidebarMenuButton`, `SidebarMenuSub`, `SidebarMenuSubItem`, `SidebarMenuSubButton`, `SidebarSeparator`, `useSidebar` | 左侧导航菜单 |
250
+ | `components/card` | `Card`, `CardHeader`, `CardTitle`, `CardDescription`, `CardAction`, `CardContent`, `CardFooter` | ContentCard 白卡容器 + ItemCard 业务卡片 |
251
+ | `components/page-header` | `PageHeader`, `PageHeaderNav`, `PageHeaderContent`, `PageHeaderHeading`, `PageHeaderDescription`, `PageHeaderActions`, `PageHeaderFooter` | 页面标题区域 |
252
+ | `components/button` | `Button`, `buttonVariants` | 创建/导入/辅助操作按钮 |
253
+ | `components/input` | `Input`, `inputVariants` | 搜索输入框 |
254
+ | `components/select` | `Select`, `SelectGroup`, `SelectValue`, `SelectTrigger`, `SelectContent`, `SelectLabel`, `SelectItem`, `SelectSeparator` | 下拉筛选/每页条数选择 |
255
+ | `components/tabs` | `Tabs`, `TabsList`, `TabsTrigger`, `TabsContent`, `tabsListVariants` | 子视图 Tab 切换(variant='line') |
256
+ | `components/toggle-group` | `ToggleGroup`, `ToggleGroupItem` | 分类筛选标签组 |
257
+ | `components/tag` | `Tag`, `CheckableTag`, `CheckableTagGroup`, `tagVariants`, `TAG_PALETTE_PRESETS` | 状态标签/分类筛选/装饰标签 |
258
+ | `components/badge` | `Badge`, `badgeVariants` | 版本号/安全扫描/类型标识 |
259
+ | `components/avatar` | `Avatar`, `AvatarImage`, `AvatarFallback`, `AvatarBadge`, `AvatarGroup`, `AvatarGroupCount` | 卡片图标(色块首字母/图片/图标) |
260
+ | `components/pagination` | `Pagination`, `PaginationContent`, `PaginationItem`, `PaginationLink`, `PaginationPrevious`, `PaginationNext`, `PaginationEllipsis` | 底部分页控件 |
261
+ | `components/data-table` | `DataTable`(引用 `_shared/column-meta-rules.md`) | OT-CL-2 / view-toggle 列表视图 |
262
+ | `components/alert` | `Alert` | 信息横幅(如"锁定的记忆不清理…") |
263
+ | `components/breadcrumb` | `Breadcrumb`, `BreadcrumbItem` | 面包屑导航(OT-CL-2) |
264
+ | `components/empty` | `Empty`, `EmptyHeader`, `EmptyMedia`, `EmptyTitle`, `EmptyDescription`, `EmptyContent` | 空数据状态 |
265
+ | `components/skeleton` | `Skeleton` | 加载占位 |
266
+ | `components/dropdown-menu` | `DropdownMenu`, `DropdownMenuTrigger`, `DropdownMenuContent`, `DropdownMenuItem`, `DropdownMenuSeparator`, `DropdownMenuLabel`, `DropdownMenuGroup` | 溢出操作菜单 |
267
+ | `components/tooltip` | `Tooltip`, `TooltipTrigger`, `TooltipContent`, `TooltipProvider` | 悬停提示 |
268
+ | `components/separator` | `Separator` | 视觉分隔线 |
269
+ | `components/dialog` | `Dialog`, `DialogContent`, `DialogHeader`, `DialogTitle`, `DialogDescription`, `DialogFooter` | 删除确认弹窗 |
270
+ | `components/sheet` | `Sheet`, `SheetContent`, `SheetHeader`, `SheetTitle`, `SheetDescription`, `SheetFooter` | 编辑抽屉 |
271
+ | `components/filter-bar` | `FilterBar`, `FilterBarItem` | 高级筛选面板(OT-CL 扩展) |
272
+ | `components/typography` | `Prose`, `Title`, `Paragraph`, `Text`, `Link` | 文本排版 |
549
273
 
550
274
  ---
551
275
 
@@ -553,6 +277,8 @@
553
277
 
554
278
  | 版本 | 变更 |
555
279
  |------|------|
556
- | v7.1 | 卡片规范从 `card-component-rules.md` 升格为 `rules/card-component.json` 业务组件 contract(ItemCard/CardGrid/CardActionBar 注册到 common-components.json) |
557
- | v7.2 | 三 patterns(pure-card-list / standard-card-list / view-toggle-list)合并为本文件;contract 修复 H1-H4 |
558
- | **v7.3** | **`rules/card-component.json` 废止**:完整规格下沉至本文件 §9(ItemCard / CardGrid / CardActionBar 的 variants / slots / states / hover / avatar / modes / constraints / tokens);术语区分迁至 §0;cards.json Schema 迁至 §8.1;pageTypeMapping 迁至 §8.2;renderingFlow 迁至 §10。`common-components.json` 中 specRef 改指本文件锚点。 |
280
+ | v7.1 | 卡片规范从 `card-component-rules.md` 升格为 `rules/card-component.json` 业务组件 contract |
281
+ | v7.2 | 三 patterns 合并为本文件;contract 修复 H1-H4 |
282
+ | **v7.3** | `rules/card-component.json` 废止:完整规格下沉至 `_shared/item-card-spec.md`;术语区分迁至 §0 |
283
+ | **v7.4** | OpenTrek 业务规则独立为 `card-list-opentrek.md`:页面级组合模式(OT-CL-1/2/3)、6 种 ItemCard Slot 变体(A-F)、ActionToolbar 组合规则、FilterRow 筛选行规则、Avatar 色块映射、视觉稿标注参考 |
284
+ | **v7.5** | 文件拆分重构:item-card-spec.md(387 行)+ card-list-opentrek.md(740 行)+ card-list.md(~280 行);内部引用更新为跨文件锚点 |