@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
@@ -0,0 +1,924 @@
1
+ {
2
+ "version": "4.0",
3
+ "description": "页面通用业务组件注册表。以 name 为唯一标识,子技能通过组件名引用。v4.0: 移除 G-C 编号系统,合并双层架构,shadcn 实现层不再独立注册。",
4
+ "shadcnComponents": "@teamix-evo/ui 组件通过 shadcnComponent 字段直接引用组件名(如 \"Button\"、\"Dialog\"),不再独立注册条目。完整 shadcn 组件列表见 src/atoms/*.md + src/composites/*.md。",
5
+ "components": [
6
+ {
7
+ "name": "TopNavigation",
8
+ "nameZh": "全局导航栏",
9
+ "level": "ORGANISM",
10
+ "universal": true,
11
+ "description": "全局导航栏,所有页面必需。包含Logo+产品名称(12px/500)、搜索框(胶囊形152px/border-radius:16px)、用户图标按钮组。高度48px,固定顶部。背景色为固定值#141414(非设计系统token)。Logo区域177px宽。无环境选择器。",
12
+ "layer": "business",
13
+ "children": [
14
+ "Logo",
15
+ "ProductName",
16
+ "SearchBar",
17
+ "UserMenu"
18
+ ],
19
+ "props": {
20
+ "fixed": "boolean, 默认true",
21
+ "height": "number, 默认48",
22
+ "backgroundColor": "string, 默认#141414(非设计系统token)"
23
+ },
24
+ "shadcnComponent": null
25
+ },
26
+ {
27
+ "name": "Sidebar",
28
+ "nameZh": "侧边导航",
29
+ "level": "ORGANISM",
30
+ "universal": true,
31
+ "layer": "business",
32
+ "description": "左侧导航,TWO_COL布局必需。包含品牌区(Logo+产品名)和导航分组菜单。展开宽度240px,收起宽度68px(详见 design-tokens.json sidebarRules)。768px响应式折叠为抽屉。色彩全部引用 --sidebar-* token。容器禁止任何外边框(右侧/底部分割线),品牌区与菜单区之间无分割线。",
33
+ "children": [
34
+ "NavGroup",
35
+ "MenuItem"
36
+ ],
37
+ "props": {
38
+ "collapsed": "boolean, 默认false",
39
+ "mode": "\"inline\" | \"vertical\"",
40
+ "width": "number, 默认240(收起态68,详见 design-tokens.json sidebarRules)"
41
+ },
42
+ "shadcnComponent": "Sidebar",
43
+ "shadcnRef": "boundaries.md(I2)"
44
+ },
45
+ {
46
+ "name": "Breadcrumb",
47
+ "nameZh": "面包屑基础组件",
48
+ "level": "MOLECULAR",
49
+ "universal": false,
50
+ "layer": "business",
51
+ "description": "面包屑基础组件,作为 PageHeader(PageHeader) 的内部子组件使用。不独立渲染,由 PageHeader 根据页面级别选择调用。提供层级路径展示,父级项可点击返回上一级。仅在 L2 二级页面时由 PageHeader 调用。",
52
+ "children": [],
53
+ "props": {
54
+ "items": "array, 面包屑项数组 [{label, onClick}]"
55
+ },
56
+ "visualSpec": {
57
+ "itemFontSize": "18px(与标题同字号)",
58
+ "itemFontWeight": "500 (medium)",
59
+ "parentItem": {
60
+ "color": "hsl(var(--gray-secondary))",
61
+ "hover": "hsl(var(--gray-primary))",
62
+ "clickable": true,
63
+ "note": "父级项本身即可点击返回上一级"
64
+ },
65
+ "currentItem": {
66
+ "color": "hsl(var(--gray-title))",
67
+ "clickable": false,
68
+ "note": "最后一项不可点击(cursor-default)"
69
+ },
70
+ "separator": {
71
+ "icon": "ChevronRight",
72
+ "size": "20px (w-5 h-5)",
73
+ "color": "hsl(var(--muted-foreground))"
74
+ },
75
+ "itemGap": "4px (gap-1)",
76
+ "note": "面包屑基础组件与标题基础组件不可同时出现,由 PageHeader 统一管控"
77
+ },
78
+ "shadcnComponent": "Breadcrumb"
79
+ },
80
+ {
81
+ "name": "PageHeader",
82
+ "nameZh": "页头业务组件",
83
+ "level": "ORGANISM",
84
+ "universal": true,
85
+ "layer": "business",
86
+ "description": "页头业务组件,所有页面必需。统一封装标题基础组件和面包屑基础组件,根据页面级别自动选择展示形态。L1一级页面使用标题基础组件,L2二级页面使用面包屑基础组件。必须在白卡容器内顶部渲染。",
87
+ "visualSpec": {
88
+ "height": "64px (h-16)",
89
+ "padding": "0 (水平对齐由 Card.paddingX = var(--card-padding-x) = 20px 提供;禁止重复设置)",
90
+ "background": "transparent (默认态无底色)",
91
+ "border": "无 (默认态无底边框)"
92
+ },
93
+ "modes": {
94
+ "titleMode": {
95
+ "level": "L1",
96
+ "internalComponent": "标题基础组件",
97
+ "scenario": "一级页面(管理列表页、概览页、仪表板)",
98
+ "spec": {
99
+ "titleSize": "18px",
100
+ "titleWeight": "500 (medium)",
101
+ "titleLineHeight": "36px",
102
+ "titleColor": "--gray-title",
103
+ "note": "显示页面标题文字,无返回能力"
104
+ }
105
+ },
106
+ "breadcrumbMode": {
107
+ "level": "L2",
108
+ "internalComponent": "面包屑基础组件",
109
+ "scenario": "二级页面(详情页、独占式配置页)",
110
+ "spec": {
111
+ "containerHeight": "64px (h-16)",
112
+ "containerPadding": "0(水平对齐由 Card.paddingX = var(--card-padding-x) = 20px 提供)",
113
+ "itemFontSize": "18px(与标题同字号)",
114
+ "itemFontWeight": "500 (medium)",
115
+ "parentItem": {
116
+ "color": "hsl(var(--gray-secondary))",
117
+ "hover": "hsl(var(--gray-primary))",
118
+ "clickable": true,
119
+ "note": "父级项可点击返回上一级"
120
+ },
121
+ "currentItem": {
122
+ "color": "hsl(var(--gray-title))",
123
+ "clickable": false
124
+ },
125
+ "separator": {
126
+ "icon": "ChevronRight",
127
+ "size": "20px",
128
+ "color": "hsl(var(--muted-foreground))"
129
+ },
130
+ "itemGap": "4px"
131
+ }
132
+ }
133
+ },
134
+ "breadcrumbVisualSpec": {
135
+ "description": "面包屑导航视觉规范。引用 design-tokens.json typographyTokens 和 colorMapping。",
136
+ "itemFontSize": "18px(与标题同字号)",
137
+ "itemFontWeight": "500 (medium)",
138
+ "parentItem": {
139
+ "color": "hsl(var(--gray-secondary))",
140
+ "hover": "hsl(var(--gray-primary))",
141
+ "clickable": true,
142
+ "note": "父级项本身即可点击返回"
143
+ },
144
+ "currentItem": {
145
+ "color": "hsl(var(--gray-title))",
146
+ "clickable": false,
147
+ "note": "最后一项不可点击(cursor-default)"
148
+ },
149
+ "separator": {
150
+ "icon": "ChevronRight",
151
+ "size": "20px (w-5 h-5)",
152
+ "color": "hsl(var(--muted-foreground))"
153
+ },
154
+ "itemGap": "4px (gap-1)",
155
+ "constraint": "有面包屑时禁止同时显示 showBack 返回箭头。面包屑父级项本身即可点击返回。"
156
+ },
157
+ "stickyBehavior": {
158
+ "description": "PageHeader 的 sticky 行为由白卡容器层包裹实现,不在 PageHeader 组件内部实现。",
159
+ "position": "PageHeader 必须在 Card 白卡容器内顶部,由 Card 的滚动容器包裹 sticky 外壳",
160
+ "wrapper": "sticky top-0 z-10 flex-shrink-0 (由 Card 滚动容器层包裹)",
161
+ "defaultBg": "transparent (默认态无底色)",
162
+ "scrollBg": "hsl(var(--card)) (scrollTop > 0 时切换为白色背景)",
163
+ "transition": "禁用(即时切换,避免半透明穿透)",
164
+ "width": "负 margin calc(var(--wc-pad-x) * -1) 撑满容器,抵消容器 padding"
165
+ },
166
+ "forbidden": [
167
+ "子页面内自建 header(破坏全局一致性)",
168
+ "PageHeader 放在 Card 白卡容器外部(必须在白卡内顶部渲染)",
169
+ "标题基础组件与面包屑基础组件同时出现(PageHeader 根据页面级别二选一)",
170
+ "跳过 PageHeader 直接使用标题基础组件或面包屑基础组件(必须由 PageHeader 统一管控)",
171
+ "默认态添加底色/下边框/阴影",
172
+ "页头下方添加分割线/hr/section-divider(组件间距通过 padding/margin 控制,不使用分隔元素)",
173
+ "style={{ fontSize: '18px' }} 等字面量写法",
174
+ "h-[64px] 等硬编码高度(Tailwind scale 已覆盖)",
175
+ "sticky 外壳加 transition(半透明阶段内容穿透)"
176
+ ],
177
+ "children": [
178
+ "Title",
179
+ "Description",
180
+ "ActionGroup",
181
+ "Breadcrumb"
182
+ ],
183
+ "props": {
184
+ "title": "string, 页面标题(L1 一级页面使用)",
185
+ "breadcrumbs": "array, 面包屑项 [{label, onClick}](L2 二级页面使用)",
186
+ "description": "string, 页面描述(可选,默认不显示)",
187
+ "actions": "node, 右侧操作按钮组"
188
+ },
189
+ "relatedSpec": "完整约束见 pages/detail-page/SKILL.md §4.0",
190
+ "shadcnComponent": null
191
+ },
192
+ {
193
+ "name": "Pagination",
194
+ "nameZh": "分页控件",
195
+ "level": "MOLECULAR",
196
+ "universal": true,
197
+ "layer": "business",
198
+ "description": "分页控件,ListPage必需。默认每页10条(可选5/10/20/50),显示\"共N条\"。",
199
+ "children": [],
200
+ "props": {
201
+ "defaultPageSize": "number, 默认10",
202
+ "pageSizeOptions": [
203
+ "5",
204
+ "10",
205
+ "20",
206
+ "50"
207
+ ],
208
+ "showTotal": "boolean, 显示\"共N条\"",
209
+ "showSizeChanger": "boolean, 显示每页条数选择器"
210
+ },
211
+ "shadcnComponent": "Pagination"
212
+ },
213
+ {
214
+ "name": "Dialog",
215
+ "nameZh": "弹窗/确认框",
216
+ "level": "ORGANISM",
217
+ "universal": true,
218
+ "layer": "business",
219
+ "description": "弹窗/确认框,所有页面可选。用于删除确认、二次确认、表单弹窗。由全局状态管理,不作为页面结构嵌套。",
220
+ "children": [],
221
+ "props": {
222
+ "title": "string, 弹窗标题",
223
+ "visible": "boolean, 是否可见",
224
+ "maskClosable": "boolean, 点击遮罩是否关闭",
225
+ "footer": "array, 底部按钮数组"
226
+ },
227
+ "shadcnComponent": "Dialog",
228
+ "shadcnRef": "boundaries.md(C2), rules/styling.json(S7)"
229
+ },
230
+ {
231
+ "name": "Sheet",
232
+ "nameZh": "侧滑面板",
233
+ "level": "ORGANISM",
234
+ "universal": true,
235
+ "layer": "business",
236
+ "description": "侧滑面板,所有页面可选。用于高级筛选、详情抽屉、表单抽屉。由全局状态管理。",
237
+ "children": [],
238
+ "props": {
239
+ "title": "string, 面板标题",
240
+ "visible": "boolean, 是否可见",
241
+ "placement": "\"right\" | \"left\" | \"top\" | \"bottom\"",
242
+ "width": "number, 默认320"
243
+ },
244
+ "shadcnComponent": "Sheet",
245
+ "shadcnRef": "boundaries.md(C2), rules/styling.json(S7)"
246
+ },
247
+ {
248
+ "name": "Button",
249
+ "nameZh": "按钮",
250
+ "level": "ATOMIC",
251
+ "universal": true,
252
+ "layer": "business",
253
+ "description": "按钮,所有页面通用。包含主按钮、默认按钮、文本按钮、链接按钮。实际实现使用 shadcn-Button (shadcn-Button)。",
254
+ "children": [],
255
+ "props": {
256
+ "type": "\"primary\" | \"default\" | \"text\" | \"link\"",
257
+ "text": "string, 按钮文字",
258
+ "icon": "string, 图标名称",
259
+ "disabled": "boolean, 是否禁用",
260
+ "loading": "boolean, 加载状态"
261
+ },
262
+ "shadcnComponent": "Button",
263
+ "shadcnRef": "boundaries.md(I1-I2,C4)"
264
+ },
265
+ {
266
+ "name": "Tag",
267
+ "nameZh": "标签",
268
+ "level": "ATOMIC",
269
+ "universal": true,
270
+ "layer": "business",
271
+ "description": "标签/状态标识,ListPage/DetailPage常用。用于状态、分类、标签展示。实际实现使用 shadcn-Badge (shadcn-Badge)。",
272
+ "children": [],
273
+ "props": {
274
+ "color": "string, 颜色",
275
+ "text": "string, 标签文字"
276
+ },
277
+ "shadcnComponent": "Badge",
278
+ "shadcnRef": "rules/styling.json(S8), boundaries.md(C12)"
279
+ },
280
+ {
281
+ "name": "Badge",
282
+ "nameZh": "徽章",
283
+ "level": "ATOMIC",
284
+ "universal": true,
285
+ "layer": "business",
286
+ "description": "徽章/状态指示,ListPage/DetailPage常用。用于运行状态、通知数量。",
287
+ "children": [],
288
+ "props": {
289
+ "status": "\"success\" | \"processing\" | \"error\" | \"default\" | \"warning\"",
290
+ "text": "string, 状态文字"
291
+ },
292
+ "shadcnComponent": "Badge",
293
+ "shadcnRef": "rules/styling.json(S8), boundaries.md(C12)"
294
+ },
295
+ {
296
+ "name": "Select",
297
+ "nameZh": "下拉选择器",
298
+ "level": "ATOMIC",
299
+ "universal": true,
300
+ "layer": "business",
301
+ "description": "下拉选择器,QueryFilter/Form通用。用于下拉选项、筛选条件。",
302
+ "children": [],
303
+ "props": {
304
+ "options": "array, 选项数组",
305
+ "placeholder": "string, 占位文字",
306
+ "mode": "\"single\" | \"multiple\" | \"tags\""
307
+ },
308
+ "shadcnComponent": "Select",
309
+ "shadcnRef": "boundaries.md(C1)"
310
+ },
311
+ {
312
+ "name": "Input",
313
+ "nameZh": "输入框",
314
+ "level": "ATOMIC",
315
+ "universal": true,
316
+ "layer": "business",
317
+ "description": "输入框,QueryFilter/Form通用。用于文本输入、搜索。",
318
+ "children": [],
319
+ "props": {
320
+ "placeholder": "string, 占位文字",
321
+ "type": "\"text\" | \"password\" | \"search\" | \"number\"",
322
+ "prefix": "string, 前缀图标",
323
+ "allowClear": "boolean, 允许清除"
324
+ },
325
+ "shadcnComponent": "Input",
326
+ "shadcnRef": "patterns/form-page.md §6.4 + boundaries.md(FF1-FF4)"
327
+ },
328
+ {
329
+ "name": "Tooltip",
330
+ "nameZh": "悬浮提示",
331
+ "level": "ATOMIC",
332
+ "universal": true,
333
+ "layer": "business",
334
+ "description": "悬浮提示,操作列通用。用于ID显示、长文本展开、操作说明。",
335
+ "children": [],
336
+ "props": {
337
+ "title": "string, 提示内容",
338
+ "placement": "\"top\" | \"bottom\" | \"left\" | \"right\""
339
+ },
340
+ "shadcnComponent": "Tooltip",
341
+ "shadcnRef": "rules/styling.json(S7)"
342
+ },
343
+ {
344
+ "name": "Separator",
345
+ "nameZh": "分割线",
346
+ "level": "ATOMIC",
347
+ "universal": true,
348
+ "layer": "business",
349
+ "description": "分割线,详情/表单通用。用于信息分组、区块分隔。实际实现使用 shadcn-Separator (shadcn-Separator)。",
350
+ "children": [],
351
+ "props": {
352
+ "type": "\"horizontal\" | \"vertical\"",
353
+ "variant": "\"line\" | \"dashed\""
354
+ },
355
+ "shadcnComponent": "Separator",
356
+ "shadcnRef": "boundaries.md(C10)"
357
+ },
358
+ {
359
+ "name": "Empty",
360
+ "nameZh": "空状态",
361
+ "level": "ATOMIC",
362
+ "universal": true,
363
+ "layer": "business",
364
+ "description": "空状态,ListPage/DetailPage边界。用于空数据、无权限、无关联数据。",
365
+ "children": [],
366
+ "props": {
367
+ "description": "string, 空状态描述",
368
+ "image": "string, 空状态图片",
369
+ "children": "node, 自定义操作按钮"
370
+ },
371
+ "shadcnComponent": "Empty",
372
+ "shadcnRef": "boundaries.md(C8)"
373
+ },
374
+ {
375
+ "name": "Spinner",
376
+ "nameZh": "加载状态",
377
+ "level": "ATOMIC",
378
+ "universal": true,
379
+ "layer": "business",
380
+ "description": "加载状态,所有页面边界。用于数据加载中、异步操作等待。实际实现使用 shadcn-Skeleton (shadcn-Skeleton)。",
381
+ "children": [],
382
+ "props": {
383
+ "spinning": "boolean, 是否加载",
384
+ "indicator": "node, 自定义指示器"
385
+ },
386
+ "shadcnComponent": "Skeleton",
387
+ "shadcnRef": "boundaries.md(C11)"
388
+ },
389
+ {
390
+ "name": "Alert",
391
+ "nameZh": "警告提示",
392
+ "level": "ATOMIC",
393
+ "universal": true,
394
+ "layer": "business",
395
+ "description": "警告提示,表单/操作前提示。用于危险操作预警、重要信息告知。",
396
+ "children": [],
397
+ "props": {
398
+ "type": "\"info\" | \"success\" | \"warning\" | \"error\"",
399
+ "message": "string, 提示消息",
400
+ "showIcon": "boolean, 显示图标",
401
+ "closable": "boolean, 允许关闭"
402
+ },
403
+ "shadcnComponent": "Alert",
404
+ "shadcnRef": "boundaries.md(C7)"
405
+ },
406
+ {
407
+ "name": "Sonner",
408
+ "nameZh": "全局提示",
409
+ "level": "ATOMIC",
410
+ "universal": true,
411
+ "layer": "business",
412
+ "description": "全局提示,操作反馈通用。用于成功/失败/警告/信息toast提示。实际实现使用 shadcn-Sonner (shadcn-Sonner/sonner)。",
413
+ "children": [],
414
+ "props": {
415
+ "type": "\"success\" | \"error\" | \"warning\" | \"info\"",
416
+ "content": "string, 提示内容",
417
+ "duration": "number, 显示时长(ms), 默认3000"
418
+ },
419
+ "shadcnComponent": "Sonner",
420
+ "shadcnRef": "boundaries.md(C9)"
421
+ },
422
+ {
423
+ "name": "SearchCombo",
424
+ "nameZh": "搜索组合",
425
+ "level": "ORGANISM",
426
+ "universal": false,
427
+ "layer": "business",
428
+ "description": "下拉维度选择 + 文本输入的组合搜索控件,位于 ActionToolbar 右侧。容器式 border,内部 select + divider + input + button。",
429
+ "children": [
430
+ "SearchDimension",
431
+ "SearchDivider",
432
+ "SearchInput",
433
+ "SearchButton"
434
+ ],
435
+ "props": {
436
+ "dimensions": "array, 搜索维度选项",
437
+ "defaultDimension": "string, 默认维度",
438
+ "placeholder": "string, 输入框占位符"
439
+ },
440
+ "specRef": "pages/list-page/_shared/search-combo-spec.md"
441
+ },
442
+ {
443
+ "name": "ContextSwitcher",
444
+ "nameZh": "全局上下文切换器",
445
+ "level": "ORGANISM",
446
+ "universal": false,
447
+ "layer": "business",
448
+ "description": "全局上下文切换器(组织/资源集),位于 TopNavigation 右侧(用户菜单前)。切换后影响全局数据范围。",
449
+ "children": [],
450
+ "props": {
451
+ "type": "\"organization\" | \"resourceSet\"",
452
+ "value": "string, 当前选中项",
453
+ "placeholder": "string, 未选中时占位文本",
454
+ "loading": "boolean, 加载中状态",
455
+ "onChange": "(value: string) => void"
456
+ },
457
+ "placement": "TopNavigation 右侧,用户图标前,与用户图标间距 16px"
458
+ },
459
+ {
460
+ "name": "Steps",
461
+ "nameZh": "步骤条",
462
+ "level": "MOLECULAR",
463
+ "universal": false,
464
+ "layer": "business",
465
+ "description": "流程步骤条组件,用于多步骤向导/表单的进度指示。WizardPage 核心组件。",
466
+ "children": [
467
+ "StepIndicator",
468
+ "StepLabel",
469
+ "StepConnector"
470
+ ],
471
+ "props": {
472
+ "current": "number, 当前步骤(从1开始)",
473
+ "total": "number, 总步数",
474
+ "orientation": "horizontal | vertical",
475
+ "status": "array, 每步状态 [inactive, active, completed]"
476
+ },
477
+ "componentRef": "rules/component-specs.json C27-Steps",
478
+ "relatedPageType": "WizardPage",
479
+ "examples": "page-rule-examples/wizard-form-page.html",
480
+ "shadcnComponent": "Steps"
481
+ },
482
+ {
483
+ "name": "ItemCard",
484
+ "nameZh": "业务卡片",
485
+ "aliases": [
486
+ "业务卡片",
487
+ "卡片视图列表项"
488
+ ],
489
+ "level": "ORGANISM",
490
+ "universal": false,
491
+ "layer": "business",
492
+ "description": "业务卡片组件(别名:业务卡片 / 卡片视图列表项)— 卡片视图列表的单条数据项。支持三种信息密度(minimal/standard/complex)× 两种图标变体(avatar/tile)。与白卡容器 ContentCard(shadcn-Card) 严格区分(参见 card-list.md §0 术语区分)。",
493
+ "children": [
494
+ "CardTitleRow",
495
+ "CardDescriptionRow",
496
+ "CardFieldRow",
497
+ "CardSupplementaryRow",
498
+ "CardActionBar(CardActionBar)"
499
+ ],
500
+ "props": {
501
+ "density": "'minimal' | 'standard' | 'complex',信息密度",
502
+ "iconStyle": "'avatar' | 'tile',标题区图标变体",
503
+ "data": "object, 数据项(与 products/{产品}/cards.json slot 映射)",
504
+ "actions": "Array<{ label, onClick, destructive? }>"
505
+ },
506
+ "specRef": "pages/list-page/patterns/card-list.md §9.1",
507
+ "relatedPageType": "ListPage(pure-card / standard-card / view-toggle), Dashboard, Workspace, Overview",
508
+ "shadcnComponent": "Card",
509
+ "shadcnRef": "boundaries.md(C3), rules/styling.json(S1)"
510
+ },
511
+ {
512
+ "name": "CardGrid",
513
+ "nameZh": "卡片网格",
514
+ "level": "ORGANISM",
515
+ "universal": false,
516
+ "layer": "business",
517
+ "description": "卡片网格容器 — 承载多个 ItemCard,使用 CSS Grid auto-fill + minmax 自动响应式列数。minWidth 必须使用 design-token:var(--card-grid-min-compact|standard|feature|comfortable),禁止硬编码。preset 仅决定列宽,不耦合分页/排序等列表行为。",
518
+ "children": [
519
+ "ItemCard(ItemCard)"
520
+ ],
521
+ "props": {
522
+ "preset": "'compact' | 'standard' | 'feature' | 'comfortable',列宽预设(v7.2 重命名)",
523
+ "minWidth": "string, 最小列宽 token(var(--card-grid-min-*)),由 preset 自动映射",
524
+ "gap": "number, 卡片间距,默认 16",
525
+ "alignContent": "'start',防止卡片拉伸"
526
+ },
527
+ "specRef": "pages/list-page/patterns/card-list.md §9.2",
528
+ "shadcnComponent": null
529
+ },
530
+ {
531
+ "name": "CardActionBar",
532
+ "nameZh": "卡片操作栏",
533
+ "level": "MOLECULAR",
534
+ "universal": false,
535
+ "layer": "business",
536
+ "description": "ItemCard 底部的操作栏 — 收敛为三种模式:hover-slidebar(白底 + translateY 滑入,standard/complex 默认)、hover-fade(visibility/opacity 淡入,minimal 默认)、always-visible(始终显示,可选)。v7.3.1 背景从主色底调为白底(var(--card)),文字为主要文字色(var(--gray-primary)),destructive 仅文字使用 var(--destructive)。模式由 ItemCard.density 自动映射,亦可由 pattern 显式覆盖。",
537
+ "children": [],
538
+ "props": {
539
+ "actions": "Array<{ label, onClick, destructive? }>",
540
+ "mode": "'hover-slidebar' | 'hover-fade' | 'always-visible'(v7.2 三态收敛)",
541
+ "rows": "1 | 2,complex 模式可分行"
542
+ },
543
+ "specRef": "pages/list-page/patterns/card-list.md §9.3",
544
+ "shadcnComponent": null
545
+ },
546
+ {
547
+ "name": "DescriptionList",
548
+ "nameZh": "描述列表",
549
+ "level": "ORGANISM",
550
+ "universal": false,
551
+ "layer": "business",
552
+ "description": "详情页核心展示组件 — 键值对列表容器,支持 2/3/4 列布局,响应式降级(768px 以下降为 2 列)。内部按 ListSection 分组,分组间通过 border-top 分隔。label 使用 var(--gray-secondary) 色值,value 使用 var(--gray-primary)。",
553
+ "children": [
554
+ "ListSection",
555
+ "DescriptionItem(DescriptionItem)"
556
+ ],
557
+ "props": {
558
+ "columns": "2 | 3 | 4,列数,默认 2",
559
+ "labelWidth": "string, label 固定宽度,默认 auto(由最长 label 决定)",
560
+ "layout": "'horizontal' | 'vertical',label 与 value 的排列方向",
561
+ "bordered": "boolean, 是否显示边框网格,默认 false"
562
+ },
563
+ "specRef": "pages/detail-page/SKILL.md §5",
564
+ "shadcnComponent": null
565
+ },
566
+ {
567
+ "name": "DescriptionItem",
568
+ "nameZh": "描述项",
569
+ "level": "ATOMIC",
570
+ "universal": false,
571
+ "layer": "business",
572
+ "description": "DescriptionList 内的最小展示单元 — 单个键值对。支持 6 种交互模式:默认只读、可复制(点击 icon 复制到剪贴板)、可编辑(点击切换为 inline Input)、链接跳转(蓝色 + 下划线)、状态展示(Badge 颜色)、悬浮提示(Tooltip 展开长文本)。",
573
+ "children": [],
574
+ "props": {
575
+ "label": "string, 字段名",
576
+ "value": "string | ReactNode, 字段值",
577
+ "copyable": "boolean, 可复制",
578
+ "editable": "boolean, 可行内编辑",
579
+ "link": "string, 点击跳转 URL",
580
+ "tooltip": "string, 悬浮提示完整内容",
581
+ "span": "number, 占据列数(用于跨列展示)"
582
+ },
583
+ "specRef": "pages/detail-page/SKILL.md §6.1",
584
+ "shadcnComponent": null
585
+ },
586
+ {
587
+ "name": "InfoCard",
588
+ "nameZh": "摘要信息卡",
589
+ "level": "ORGANISM",
590
+ "universal": false,
591
+ "layer": "business",
592
+ "description": "详情页顶部摘要卡片 — 展示资源核心指标/状态的快速概览区。与 ContentCard(shadcn-Card) 的区别:InfoCard 是语义化业务组件(承载摘要信息),ContentCard 是通用白卡容器(承载页面内容)。内部可嵌套 DescriptionList(DescriptionList) 或 ChartPanel(ChartPanel)(摘要区监控图表)。【v7.6 表面规则】两种实现模式:(A)独立 Card 容器模式:跟随主卡 ContentCard—border: none + box-shadow: var(--shadow-sm) + border-radius: var(--radius-lg) + background: hsl(var(--card));(B)嵌入主卡内的分组区块模式:仅采用 padding + border-bottom 分隔,不设置 box-shadow / border-radius / background。详见 pages/detail-page/SKILL.md §6.5.3。",
593
+ "children": [
594
+ "DescriptionList(DescriptionList)",
595
+ "ChartPanel(ChartPanel)"
596
+ ],
597
+ "props": {
598
+ "title": "string, 卡片标题(如'基本信息'/'监控')",
599
+ "collapsible": "boolean, 是否支持折叠,默认 false",
600
+ "defaultCollapsed": "boolean, 默认是否折叠"
601
+ },
602
+ "specRef": "pages/detail-page/SKILL.md §4",
603
+ "shadcnComponent": "Card",
604
+ "shadcnRef": "boundaries.md(C3), rules/styling.json(S1)"
605
+ },
606
+ {
607
+ "name": "CopyableText",
608
+ "nameZh": "可复制文本",
609
+ "level": "ATOMIC",
610
+ "universal": true,
611
+ "layer": "business",
612
+ "description": "可复制文本原子组件 — 文本内容 + 末尾复制图标,整体点击即复制到剪贴板并触发 Sonner 反馈。可裸用于表格单元格、DescriptionItem 值位、面板任意 ID/IP/资源名展示。区别于 DescriptionItem(DescriptionItem) 的 mode=copyable:CopyableText 是更细粒度的原子,可在任何上下文复用,不依赖 DescriptionList 父容器。",
613
+ "children": [],
614
+ "props": {
615
+ "value": "string, 实际复制的文本内容",
616
+ "display": "string, 可选 — 自定义展示文本(默认 = value)",
617
+ "onCopySuccess": "function, 复制成功回调(可选)"
618
+ },
619
+ "visualSpec": {
620
+ "layout": "inline-flex; gap: 4px; align-items: center",
621
+ "icon": "Copy(lucide), size: 14px (ic-sm)",
622
+ "iconColor": "hsl(var(--gray-tertiary))",
623
+ "iconHoverColor": "hsl(var(--gray-primary))",
624
+ "cursor": "pointer",
625
+ "feedback": "Sonner '已复制' 1500ms 自动消失(使用 sonner)"
626
+ },
627
+ "forbidden": [
628
+ "硬编码图标颜色(必须用 --gray-tertiary token)",
629
+ "省略 Sonner 反馈(无反馈用户无法确认是否复制成功)",
630
+ "在 DescriptionItem 内重复套 CopyableText(应直接用 DescriptionItem.mode=copyable)"
631
+ ],
632
+ "specRef": "pages/detail-page/SKILL.md",
633
+ "shadcnComponent": null
634
+ },
635
+ {
636
+ "name": "StatusBadge",
637
+ "nameZh": "状态徽章(带圆点)",
638
+ "level": "MOLECULAR",
639
+ "universal": true,
640
+ "layer": "business",
641
+ "description": "带前置圆点的状态徽章 — 用于资源运行态、开关态等强语义状态展示。区别于通用 Badge(shadcn-Card/shadcn-Badge):StatusBadge 强制带前置 dot,颜色语义与 status 一一映射,不接受自由色值。基于 shadcn-Badge(shadcn-Badge) 扩展。",
642
+ "children": [],
643
+ "props": {
644
+ "status": "'success' | 'warning' | 'error' | 'info' | 'neutral'",
645
+ "label": "string, 状态文字(如'运行中'/'已停止'/'已开启')"
646
+ },
647
+ "visualSpec": {
648
+ "dotSize": "6px",
649
+ "dotMarginRight": "6px",
650
+ "colorMap": {
651
+ "success": "hsl(var(--success))",
652
+ "warning": "hsl(var(--warning))",
653
+ "error": "hsl(var(--destructive))",
654
+ "info": "hsl(var(--info))",
655
+ "neutral": "hsl(var(--gray-tertiary))"
656
+ },
657
+ "badgeBg": "语义色 / 8 透明度(如 success bg = hsl(var(--success) / 0.08))",
658
+ "badgeText": "语义色实色"
659
+ },
660
+ "forbidden": [
661
+ "使用任意自由色值(必须从 status 枚举映射)",
662
+ "省略 dot(无 dot 应使用 Badge 组件)"
663
+ ],
664
+ "specRef": "pages/detail-page/SKILL.md",
665
+ "shadcnComponent": "Badge",
666
+ "shadcnRef": "rules/styling.json(S8), boundaries.md(C12)"
667
+ },
668
+ {
669
+ "name": "StatCard",
670
+ "nameZh": "统计卡(三段式)",
671
+ "level": "ORGANISM",
672
+ "universal": true,
673
+ "layer": "business",
674
+ "description": "统计卡片 — 三段式 label / value / subtitle 展示单一指标。用于详情页概览区、Dashboard、模型 API 概览、消费者概览等聚合数值展示场景。表面规范跟随 v7.6 ContentCard:border: none + box-shadow: var(--shadow-sm) + border-radius: var(--radius-lg) + background: hsl(var(--card))。多张 StatCard 必须放在 OverviewStatGrid(OverviewStatGrid) 内。",
675
+ "children": [],
676
+ "props": {
677
+ "label": "string, 顶部指标名(如'MCP 服务总数')",
678
+ "value": "string | number, 中部主指标值",
679
+ "subtitle": "string, 底部副标题(如英文名 'MCP Services')",
680
+ "trend": "object, 可选 — 趋势 { direction: 'up'|'down', delta: string }",
681
+ "onClick": "function, 可选 — 点击跳转到对应资源列表"
682
+ },
683
+ "visualSpec": {
684
+ "padding": "16px 20px",
685
+ "labelFontSize": "var(--font-size-base)",
686
+ "labelColor": "hsl(var(--gray-secondary))",
687
+ "valueFontSize": "28px",
688
+ "valueFontWeight": "600 (semibold)",
689
+ "valueColor": "hsl(var(--gray-title))",
690
+ "subtitleFontSize": "var(--font-size-sm)",
691
+ "subtitleColor": "hsl(var(--gray-tertiary))",
692
+ "verticalGap": "4px"
693
+ },
694
+ "forbidden": [
695
+ "添加 border(v7.6 surface 禁止 border)",
696
+ "使用 var(--shadow-md) 或更深阴影(仅 --shadow-sm)",
697
+ "硬编码 value 字号(除 28px 外的尺寸需先扩展 design-tokens)"
698
+ ],
699
+ "specRef": "pages/detail-page/SKILL.md",
700
+ "shadcnComponent": "Card",
701
+ "shadcnRef": "boundaries.md(C3), rules/styling.json(S1)"
702
+ },
703
+ {
704
+ "name": "OverviewStatGrid",
705
+ "nameZh": "统计卡网格容器",
706
+ "level": "MOLECULAR",
707
+ "universal": true,
708
+ "layer": "business",
709
+ "description": "StatCard(StatCard) 的响应式网格容器 — 自动按 columns 配置排列多张统计卡。常见配置:4 列(标准)/ 6 列(密集)/ auto-fill minmax(180px, 1fr)(自适应)。",
710
+ "children": [
711
+ "StatCard(StatCard)"
712
+ ],
713
+ "props": {
714
+ "columns": "number | 'auto', 列数(默认 4);'auto' 走 minmax 策略",
715
+ "gap": "string, 卡片间距(默认 var(--card-padding-x) = 20px)",
716
+ "minItemWidth": "string, columns='auto' 时的最小宽度(默认 180px)"
717
+ },
718
+ "visualSpec": {
719
+ "display": "grid",
720
+ "gridTemplateColumns": "repeat(var(--columns), 1fr) 或 repeat(auto-fill, minmax(var(--min-item-width), 1fr))",
721
+ "gap": "20px"
722
+ },
723
+ "forbidden": [
724
+ "使用 flex-wrap 实现(无法保证等高等宽)",
725
+ "在 StatCard 之间插入分割线"
726
+ ],
727
+ "specRef": "pages/detail-page/SKILL.md",
728
+ "shadcnComponent": null
729
+ },
730
+ {
731
+ "name": "ParameterTable",
732
+ "nameZh": "参数表格",
733
+ "level": "ORGANISM",
734
+ "universal": true,
735
+ "layer": "business",
736
+ "description": "API 参数结构化表格 — 展示请求/响应/Header 参数,支持嵌套展开(最多 3 级,每级缩进 24px),按 type 着色(string/number/boolean/object/array),必填标红。参数 > 30 时默认折叠选填参数 + '展示全部'。是 API 文档详情页核心组件。",
737
+ "children": [],
738
+ "props": {
739
+ "variant": "'request' | 'response' | 'header',决定列集(请求/Header 含'必填',响应不含)",
740
+ "data": "Array<Param>,参数树形数据(含 name/type/required/description/children)",
741
+ "maxNestLevel": "number,默认 3,最大嵌套层级",
742
+ "collapseOptional": "boolean,参数 > 30 时是否折叠选填"
743
+ },
744
+ "componentRef": "rules/component-specs.json C30-ParameterTable",
745
+ "specRef": "pages/detail-page/patterns/api-doc-detail.md",
746
+ "relatedPageType": "DetailPage(api-doc)",
747
+ "shadcnComponent": null
748
+ },
749
+ {
750
+ "name": "MetricCard",
751
+ "nameZh": "指标卡",
752
+ "level": "MOLECULAR",
753
+ "universal": true,
754
+ "layer": "business",
755
+ "description": "单指标数值展示卡 — 标题 + 数值 + 单位 + 趋势箭头,可选底部 sparkline 迷你图。高度 96px,padding 16px 20px,背景 hsl(var(--gray-muted)),圆角 var(--radius-md)。横排默认 grid 4 列 gap 12px,≤1200px 降为 2 列,≤768px 降为 1 列。监控页/Dashboard/概览页通用。",
756
+ "children": [],
757
+ "props": {
758
+ "title": "string,指标名(如'请求总量'/'成功率')",
759
+ "value": "string | number,主数值",
760
+ "unit": "string,单位(紧跟数值)",
761
+ "trend": "{ direction: 'up' | 'down' | 'flat', delta: string }",
762
+ "sparkline": "number[],可选 — 底部迷你趋势图数据",
763
+ "variant": "'default' | 'with-sparkline' | 'compact'"
764
+ },
765
+ "componentRef": "rules/component-specs.json C31-MetricCard",
766
+ "specRef": "pages/detail-page/patterns/monitor-detail.md",
767
+ "relatedPageType": "DetailPage(monitor), Dashboard, Overview",
768
+ "shadcnComponent": null
769
+ },
770
+ {
771
+ "name": "ChartPanel",
772
+ "nameZh": "图表面板",
773
+ "level": "ORGANISM",
774
+ "universal": true,
775
+ "layer": "business",
776
+ "description": "图表容器面板 — 封装 shadcn-Chart(shadcn-Chart)/Recharts,支持折线/柱状/面积图。全宽单图高度 280px,Grid 内 220px。标题栏 14px/500 + 右侧操作(导出/全屏)。网格线虚线、坐标轴文字 11px。Grid 布局默认 2 列 gap 16px。是 InfoCard 摘要区监控图、监控详情页 ChartPanel Grid、Dashboard 图表区的统一实现。",
777
+ "children": [
778
+ "ChartTitle",
779
+ "ChartLegend",
780
+ "ChartBody"
781
+ ],
782
+ "props": {
783
+ "variant": "'line' | 'bar' | 'area'",
784
+ "data": "Array<DataPoint>",
785
+ "size": "'full' | 'grid',决定高度(280px / 220px)",
786
+ "loading": "boolean,骨架屏占位",
787
+ "empty": "boolean,居中'暂无数据'+图表图标"
788
+ },
789
+ "componentRef": "rules/component-specs.json C32-ChartPanel",
790
+ "specRef": "pages/detail-page/patterns/monitor-detail.md",
791
+ "relatedPageType": "DetailPage(monitor), DetailPage(resource).InfoCard, Dashboard",
792
+ "shadcnComponent": null
793
+ },
794
+ {
795
+ "name": "AlertList",
796
+ "nameZh": "告警列表",
797
+ "level": "ORGANISM",
798
+ "universal": true,
799
+ "layer": "business",
800
+ "description": "告警事件列表 — 按严重度(Critical=红/Warning=橙/Info=蓝)分级展示,条目最小高度 56px,左侧 20px 圆点 + 标题 + 时间 + 描述(最多 2 行)。条目间用 border-bottom 分隔,无间距。右侧 hover 显示'确认'按钮(Ghost)。空态展示'暂无告警,系统运行正常 ✓'。",
801
+ "children": [
802
+ "AlertItem"
803
+ ],
804
+ "props": {
805
+ "items": "Array<{ id, severity: 'critical'|'warning'|'info', title, timestamp, description }>",
806
+ "variant": "'default' | 'compact',紧凑模式隐藏描述行(高度 40px)",
807
+ "onAcknowledge": "(id) => void,点击确认按钮回调"
808
+ },
809
+ "componentRef": "rules/component-specs.json C33-AlertList",
810
+ "specRef": "pages/detail-page/patterns/monitor-detail.md",
811
+ "relatedPageType": "DetailPage(monitor), Dashboard",
812
+ "shadcnComponent": null
813
+ },
814
+ {
815
+ "name": "TimeRangeSelector",
816
+ "nameZh": "时间范围选择器",
817
+ "level": "MOLECULAR",
818
+ "universal": true,
819
+ "layer": "business",
820
+ "description": "时间范围快捷选择 — SegmentedControl 样式连续按钮组,预设 1h/6h/24h/7d/30d,高度 32px,选中态背景 hsl(var(--primary)) 文字白色。最右侧可选日历图标,点击弹出 DateRangePicker 自定义范围。位置:PageHeader 右侧,与刷新按钮同行。切换时触发全局数据刷新。",
821
+ "children": [],
822
+ "props": {
823
+ "value": "string,当前选中预设(如 '24h')或 { start, end } 自定义范围",
824
+ "presets": "string[],预设列表,默认 ['1h','6h','24h','7d','30d']",
825
+ "withCustom": "boolean,是否显示自定义范围日历图标",
826
+ "onChange": "(value) => void"
827
+ },
828
+ "componentRef": "rules/component-specs.json C34-TimeRangeSelector",
829
+ "specRef": "pages/detail-page/patterns/monitor-detail.md",
830
+ "relatedPageType": "DetailPage(monitor), Dashboard",
831
+ "shadcnComponent": "ToggleGroup",
832
+ "shadcnRef": "patterns/form-page.md §6.4(F4)"
833
+ },
834
+ {
835
+ "name": "CodeBlock",
836
+ "nameZh": "代码块",
837
+ "level": "ORGANISM",
838
+ "universal": true,
839
+ "layer": "business",
840
+ "description": "代码/配置片段只读展示 — 等宽字体 13px/1.6(SF Mono/Fira Code),背景 hsl(var(--gray-muted)),圆角 var(--radius-md),padding 16px。最小高度 120px,最大 480px。支持行号(宽 40px)、复制按钮(右上角 hover 显示)、collapsible 折叠(超长内容渐变遮罩 + '展开全部(N行)')、multi-language(顶部语言 Tab)。API 文档详情页核心组件,也用于任何代码/配置/日志展示场景。",
841
+ "children": [],
842
+ "props": {
843
+ "language": "string,语法高亮语言(json/yaml/javascript/curl/...)",
844
+ "code": "string,代码内容",
845
+ "lineNumbers": "boolean,是否显示行号",
846
+ "copyable": "boolean,是否显示复制按钮,默认 true",
847
+ "variant": "'default' | 'collapsible' | 'multi-language'",
848
+ "maxLines": "number,collapsible 模式下折叠阈值"
849
+ },
850
+ "componentRef": "rules/component-specs.json C26-CodeBlock",
851
+ "specRef": "pages/detail-page/patterns/api-doc-detail.md",
852
+ "relatedPageType": "DetailPage(api-doc), DetailPage(resource), Settings",
853
+ "shadcnComponent": null
854
+ },
855
+ {
856
+ "name": "ConfigDiff",
857
+ "nameZh": "配置对比",
858
+ "level": "ORGANISM",
859
+ "universal": true,
860
+ "layer": "business",
861
+ "description": "配置版本双栏对比展示 — 标记新增(绿底 hsl(152 82% 96%))/删除(红底 hsl(0 72% 96%))/未变行。最大高度 600px,等宽字体 13px/1.6。split 双栏并排(默认,左旧右新各 50%,同步滚动)/ inline 单栏合并标记两种模式。768px 自动切换为 inline。底部统计 '+N行 / -M行'。",
862
+ "children": [
863
+ "DiffHeader",
864
+ "DiffPane",
865
+ "DiffStats"
866
+ ],
867
+ "props": {
868
+ "oldValue": "string,旧版本代码/配置",
869
+ "newValue": "string,新版本代码/配置",
870
+ "language": "string,语法高亮语言",
871
+ "mode": "'split' | 'inline',默认 'split'",
872
+ "syncScroll": "boolean,split 模式下双栏同步滚动,默认 true"
873
+ },
874
+ "componentRef": "rules/component-specs.json C27-ConfigDiff",
875
+ "specRef": "pages/detail-page/patterns/resource-detail.md",
876
+ "relatedPageType": "DetailPage(resource), DetailPage(comparison)",
877
+ "shadcnComponent": null
878
+ },
879
+ {
880
+ "name": "VersionHistory",
881
+ "nameZh": "版本历史",
882
+ "level": "ORGANISM",
883
+ "universal": true,
884
+ "layer": "business",
885
+ "description": "版本变更时间线 — 展示版本记录与回滚操作。条目最小高度 56px(紧凑模式 40px),左侧 8px 圆点(当前版本 primary 色 / 历史版本 gray-line 色)+ 1px 连接线。条目含版本号(14px/500) + 时间戳(12px/muted) + 变更摘要(12px)。hover 显示'回滚到此版本'按钮(Ghost,触发 Dialog 确认)。当前版本带 Badge'当前'(primary)。点击条目展开变更详情或触发版本对比。",
886
+ "children": [
887
+ "VersionItem",
888
+ "VersionDot",
889
+ "VersionLine"
890
+ ],
891
+ "props": {
892
+ "versions": "Array<{ id, label, timestamp, author, summary, isCurrent }>",
893
+ "variant": "'default' | 'compact',紧凑模式隐藏变更摘要",
894
+ "onSelect": "(id) => void,点击条目回调",
895
+ "onRollback": "(id) => void,回滚按钮回调(应触发 Dialog 二次确认)"
896
+ },
897
+ "componentRef": "rules/component-specs.json C28-VersionHistory",
898
+ "specRef": "pages/detail-page/patterns/resource-detail.md",
899
+ "relatedPageType": "DetailPage(resource), DetailPage(comparison)",
900
+ "shadcnComponent": null
901
+ },
902
+ {
903
+ "name": "ApiEndpoint",
904
+ "nameZh": "API 端点卡",
905
+ "level": "MOLECULAR",
906
+ "universal": true,
907
+ "layer": "business",
908
+ "description": "API 端点信息概览卡 — 高度 48px,padding 0 16px,背景 hsl(var(--gray-muted)),圆角 var(--radius-md)。HTTP 方法着色(GET=蓝/POST=绿/PUT=橙/DELETE=红/PATCH=紫,12px/600)+ 等宽字体路径(14px/500) + 状态标签(published=success / draft=muted / deprecated=destructive)。路径右侧 hover 显示复制图标(复制完整 URL)。可选 with-base-url 变体显示 baseUrl 灰色前缀 + path 主色。是 API 文档详情页必需组件。",
909
+ "children": [],
910
+ "props": {
911
+ "method": "'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'",
912
+ "path": "string,API 路径",
913
+ "baseUrl": "string,可选 — 基础 URL 前缀",
914
+ "status": "'published' | 'draft' | 'deprecated'",
915
+ "copyable": "boolean,是否显示复制按钮,默认 true",
916
+ "onClick": "() => void,可选 — 跳转到 API 调试"
917
+ },
918
+ "componentRef": "rules/component-specs.json C29-ApiEndpoint",
919
+ "specRef": "pages/detail-page/patterns/api-doc-detail.md",
920
+ "relatedPageType": "DetailPage(api-doc)",
921
+ "shadcnComponent": null
922
+ }
923
+ ]
924
+ }