@icen.ai/ui 0.9.0 → 0.10.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 (281) hide show
  1. package/AGENTS.md +138 -80
  2. package/README.md +66 -91
  3. package/dist/base.css +208 -179
  4. package/dist/behaviors/accordion.mjs +8 -8
  5. package/dist/behaviors/ai-branch.d.mts +1 -1
  6. package/dist/behaviors/ai-branch.mjs +1010 -94
  7. package/dist/behaviors/ai-chat.d.mts +7 -7
  8. package/dist/behaviors/ai-chat.mjs +1071 -161
  9. package/dist/behaviors/ai-composer.d.mts +44 -12
  10. package/dist/behaviors/ai-composer.mjs +1997 -524
  11. package/dist/behaviors/ai-core.d.mts +1 -1
  12. package/dist/behaviors/ai-core.mjs +1016 -107
  13. package/dist/behaviors/ai-diff.mjs +1019 -127
  14. package/dist/behaviors/ai-feedback.d.mts +1 -1
  15. package/dist/behaviors/ai-feedback.mjs +1035 -126
  16. package/dist/behaviors/ai-panel.d.mts +8 -8
  17. package/dist/behaviors/ai-panel.mjs +1284 -266
  18. package/dist/behaviors/ai-provider.mjs +1003 -101
  19. package/dist/behaviors/ai-threads.d.mts +1 -1
  20. package/dist/behaviors/ai-threads.mjs +1068 -154
  21. package/dist/behaviors/ai-tool.d.mts +2 -2
  22. package/dist/behaviors/ai-tool.mjs +2037 -396
  23. package/dist/behaviors/ai-tools.d.mts +89 -16
  24. package/dist/behaviors/ai-tools.mjs +4448 -372
  25. package/dist/behaviors/autocomplete.d.mts +53 -0
  26. package/dist/behaviors/autocomplete.mjs +1600 -0
  27. package/dist/behaviors/back-top.d.mts +1 -1
  28. package/dist/behaviors/back-top.mjs +951 -14
  29. package/dist/behaviors/carousel.d.mts +1 -1
  30. package/dist/behaviors/carousel.mjs +906 -11
  31. package/dist/behaviors/cascader.d.mts +48 -0
  32. package/dist/behaviors/cascader.mjs +1853 -0
  33. package/dist/behaviors/charts.d.mts +72 -8
  34. package/dist/behaviors/charts.mjs +1901 -256
  35. package/dist/behaviors/code-block.d.mts +36 -0
  36. package/dist/behaviors/code-block.mjs +1611 -0
  37. package/dist/behaviors/command-palette.d.mts +9 -6
  38. package/dist/behaviors/command-palette.mjs +161 -59
  39. package/dist/behaviors/context-menu.d.mts +9 -8
  40. package/dist/behaviors/context-menu.mjs +1112 -44
  41. package/dist/behaviors/controls.d.mts +13 -13
  42. package/dist/behaviors/controls.mjs +989 -130
  43. package/dist/behaviors/copy.d.mts +21 -2
  44. package/dist/behaviors/copy.mjs +1206 -42
  45. package/dist/behaviors/datatable.d.mts +53 -3
  46. package/dist/behaviors/datatable.mjs +1963 -207
  47. package/dist/behaviors/date-picker.d.mts +0 -1
  48. package/dist/behaviors/date-picker.mjs +1340 -293
  49. package/dist/behaviors/design.d.mts +54 -0
  50. package/dist/behaviors/design.mjs +109 -0
  51. package/dist/behaviors/dropdown.d.mts +5 -6
  52. package/dist/behaviors/dropdown.mjs +262 -110
  53. package/dist/behaviors/events.d.mts +120 -3
  54. package/dist/behaviors/events.mjs +47 -2
  55. package/dist/behaviors/feedback.d.mts +30 -0
  56. package/dist/behaviors/feedback.mjs +296 -0
  57. package/dist/behaviors/focus.d.mts +8 -0
  58. package/dist/behaviors/focus.mjs +24 -0
  59. package/dist/behaviors/form-validate.d.mts +102 -0
  60. package/dist/behaviors/form-validate.mjs +6091 -0
  61. package/dist/behaviors/i18n.d.mts +789 -0
  62. package/dist/behaviors/i18n.mjs +1711 -0
  63. package/dist/behaviors/icons.d.mts +93 -0
  64. package/dist/behaviors/icons.mjs +113 -0
  65. package/dist/behaviors/input.d.mts +9 -1
  66. package/dist/behaviors/input.mjs +1056 -60
  67. package/dist/behaviors/kb-access.d.mts +1 -1
  68. package/dist/behaviors/kb-access.mjs +2129 -239
  69. package/dist/behaviors/kb-acl.d.mts +6 -6
  70. package/dist/behaviors/kb-acl.mjs +1119 -179
  71. package/dist/behaviors/kb-answer.mjs +2070 -418
  72. package/dist/behaviors/kb-audit.d.mts +1 -1
  73. package/dist/behaviors/kb-audit.mjs +1076 -154
  74. package/dist/behaviors/kb-canvas.mjs +1100 -177
  75. package/dist/behaviors/kb-chain.mjs +1022 -100
  76. package/dist/behaviors/kb-checkpoint.d.mts +1 -1
  77. package/dist/behaviors/kb-checkpoint.mjs +1319 -169
  78. package/dist/behaviors/kb-chunks.mjs +1152 -213
  79. package/dist/behaviors/kb-citation.d.mts +1 -1
  80. package/dist/behaviors/kb-citation.mjs +1201 -179
  81. package/dist/behaviors/kb-clarify.mjs +1058 -130
  82. package/dist/behaviors/kb-conflict.mjs +1041 -119
  83. package/dist/behaviors/kb-connector.mjs +1104 -176
  84. package/dist/behaviors/kb-core.d.mts +6 -1
  85. package/dist/behaviors/kb-core.mjs +1077 -162
  86. package/dist/behaviors/kb-eval.mjs +1971 -144
  87. package/dist/behaviors/kb-explain.d.mts +1 -1
  88. package/dist/behaviors/kb-explain.mjs +1024 -102
  89. package/dist/behaviors/kb-filter.mjs +2008 -178
  90. package/dist/behaviors/kb-gap.d.mts +1 -1
  91. package/dist/behaviors/kb-gap.mjs +1043 -121
  92. package/dist/behaviors/kb-hittest.d.mts +1 -1
  93. package/dist/behaviors/kb-hittest.mjs +1093 -150
  94. package/dist/behaviors/kb-metadata.mjs +1052 -130
  95. package/dist/behaviors/kb-passage.d.mts +2 -2
  96. package/dist/behaviors/kb-passage.mjs +1101 -161
  97. package/dist/behaviors/kb-pipeline.d.mts +2 -2
  98. package/dist/behaviors/kb-pipeline.mjs +1082 -162
  99. package/dist/behaviors/kb-qa.mjs +1088 -160
  100. package/dist/behaviors/kb-rerank.mjs +1047 -114
  101. package/dist/behaviors/kb-retrieval.mjs +2063 -224
  102. package/dist/behaviors/kb-review.mjs +1990 -159
  103. package/dist/behaviors/kb-sandbox.d.mts +1 -1
  104. package/dist/behaviors/kb-sandbox.mjs +1026 -104
  105. package/dist/behaviors/kb-segment.mjs +1111 -179
  106. package/dist/behaviors/kb-select.d.mts +24 -0
  107. package/dist/behaviors/kb-select.mjs +1989 -0
  108. package/dist/behaviors/kb-sources.d.mts +1 -1
  109. package/dist/behaviors/kb-sources.mjs +1084 -170
  110. package/dist/behaviors/kb-sql.d.mts +1 -1
  111. package/dist/behaviors/kb-sql.mjs +1143 -226
  112. package/dist/behaviors/kb-trace.d.mts +1 -1
  113. package/dist/behaviors/kb-trace.mjs +1042 -128
  114. package/dist/behaviors/kb-visibility.mjs +1086 -158
  115. package/dist/behaviors/kb-who-can.mjs +1974 -137
  116. package/dist/behaviors/mentions.d.mts +93 -0
  117. package/dist/behaviors/mentions.mjs +2152 -0
  118. package/dist/behaviors/modal.d.mts +4 -3
  119. package/dist/behaviors/modal.mjs +1055 -33
  120. package/dist/behaviors/nav.d.mts +1 -1
  121. package/dist/behaviors/nav.mjs +6 -6
  122. package/dist/behaviors/notification.d.mts +16 -8
  123. package/dist/behaviors/notification.mjs +1615 -265
  124. package/dist/behaviors/panel.d.mts +4 -0
  125. package/dist/behaviors/panel.mjs +994 -0
  126. package/dist/behaviors/popover.d.mts +28 -5
  127. package/dist/behaviors/popover.mjs +225 -24
  128. package/dist/behaviors/select.d.mts +5 -2
  129. package/dist/behaviors/select.mjs +1410 -117
  130. package/dist/behaviors/sidebar.d.mts +1 -1
  131. package/dist/behaviors/sidebar.mjs +13 -13
  132. package/dist/behaviors/slider.d.mts +1 -1
  133. package/dist/behaviors/slider.mjs +9 -9
  134. package/dist/behaviors/split-pane.d.mts +1 -1
  135. package/dist/behaviors/split-pane.mjs +7 -7
  136. package/dist/behaviors/suggestions.d.mts +27 -0
  137. package/dist/behaviors/suggestions.mjs +1089 -0
  138. package/dist/behaviors/svg-parse.d.mts +14 -0
  139. package/dist/behaviors/svg-parse.mjs +37 -0
  140. package/dist/behaviors/tabs.d.mts +2 -2
  141. package/dist/behaviors/tabs.mjs +25 -25
  142. package/dist/behaviors/tag-input.d.mts +23 -5
  143. package/dist/behaviors/tag-input.mjs +1359 -104
  144. package/dist/behaviors/theme-switcher.d.mts +24 -0
  145. package/dist/behaviors/theme-switcher.mjs +1981 -0
  146. package/dist/behaviors/theme.d.mts +15 -8
  147. package/dist/behaviors/theme.mjs +390 -28
  148. package/dist/behaviors/toast.d.mts +24 -25
  149. package/dist/behaviors/toast.mjs +1266 -88
  150. package/dist/behaviors/tooltip.d.mts +4 -0
  151. package/dist/behaviors/tooltip.mjs +378 -0
  152. package/dist/behaviors/tree-select.d.mts +69 -0
  153. package/dist/behaviors/tree-select.mjs +1907 -0
  154. package/dist/behaviors/tree.d.mts +1 -1
  155. package/dist/behaviors/tree.mjs +15 -15
  156. package/dist/behaviors/upload.d.mts +3 -2
  157. package/dist/behaviors/upload.mjs +1076 -66
  158. package/dist/cli.mjs +5 -6
  159. package/dist/components/ai-chat.css +666 -573
  160. package/dist/components/ai-diff.css +153 -132
  161. package/dist/components/ai-panel.css +351 -343
  162. package/dist/components/ai-tool.css +393 -238
  163. package/dist/components/autocomplete.css +61 -0
  164. package/dist/components/autocomplete.mjs +3 -0
  165. package/dist/components/back-top.css +34 -31
  166. package/dist/components/badge.css +44 -41
  167. package/dist/components/breadcrumb.css +67 -46
  168. package/dist/components/btn.css +80 -74
  169. package/dist/components/card.css +117 -106
  170. package/dist/components/cascader.css +311 -0
  171. package/dist/components/cascader.mjs +3 -0
  172. package/dist/components/chart-area.css +8 -2
  173. package/dist/components/chart-bar.css +95 -33
  174. package/dist/components/chart-gauge.css +14 -11
  175. package/dist/components/chart-graph.css +20 -17
  176. package/dist/components/chart-heatmap.css +96 -90
  177. package/dist/components/chart-line.css +8 -3
  178. package/dist/components/chart-pie.css +9 -6
  179. package/dist/components/chart-radar.css +8 -5
  180. package/dist/components/chart-scatter.css +9 -6
  181. package/dist/components/chart-sparkline.css +5 -2
  182. package/dist/components/chart-stack.css +14 -11
  183. package/dist/components/charts.css +164 -73
  184. package/dist/components/code-block.css +418 -0
  185. package/dist/components/code-block.mjs +4 -0
  186. package/dist/components/command-palette.css +138 -117
  187. package/dist/components/content.css +257 -251
  188. package/dist/components/copy.css +72 -44
  189. package/dist/components/datatable.css +423 -181
  190. package/dist/components/date-picker.css +135 -104
  191. package/dist/components/empty.css +68 -65
  192. package/dist/components/feedback.css +201 -183
  193. package/dist/components/form-validate.css +120 -0
  194. package/dist/components/form-validate.mjs +3 -0
  195. package/dist/components/form.css +150 -127
  196. package/dist/components/icon.css +102 -0
  197. package/dist/components/icon.mjs +3 -0
  198. package/dist/components/input.css +159 -104
  199. package/dist/components/kb-agent.css +188 -173
  200. package/dist/components/kb-data.css +257 -253
  201. package/dist/components/kb-ground.css +197 -185
  202. package/dist/components/kb-ingest.css +334 -350
  203. package/dist/components/kb-ops.css +265 -259
  204. package/dist/components/kb-perm.css +260 -271
  205. package/dist/components/kb-search.css +317 -360
  206. package/dist/components/kb.css +120 -109
  207. package/dist/components/layout.css +85 -82
  208. package/dist/components/material-chinese.css +73 -0
  209. package/dist/components/material-soviet.css +76 -0
  210. package/dist/components/material.css +275 -0
  211. package/dist/components/media.css +220 -166
  212. package/dist/components/mentions.css +189 -0
  213. package/dist/components/mentions.mjs +3 -0
  214. package/dist/components/menu.css +113 -105
  215. package/dist/components/modal.css +107 -112
  216. package/dist/components/nav.css +118 -115
  217. package/dist/components/notification.css +238 -174
  218. package/dist/components/pagination.css +56 -53
  219. package/dist/components/panel.css +66 -63
  220. package/dist/components/panel.mjs +1 -0
  221. package/dist/components/pill.css +81 -71
  222. package/dist/components/popover.css +67 -53
  223. package/dist/components/scroll-area.css +113 -110
  224. package/dist/components/segmented.css +146 -143
  225. package/dist/components/select.css +206 -186
  226. package/dist/components/sidebar.css +137 -127
  227. package/dist/components/slider.css +117 -114
  228. package/dist/components/split-pane.css +112 -109
  229. package/dist/components/stat.css +112 -106
  230. package/dist/components/steps.css +109 -103
  231. package/dist/components/switch.css +138 -134
  232. package/dist/components/table.css +131 -107
  233. package/dist/components/tabs.css +114 -108
  234. package/dist/components/tag-input.css +48 -133
  235. package/dist/components/tag.css +81 -71
  236. package/dist/components/theme-switcher.css +105 -0
  237. package/dist/components/theme-switcher.mjs +3 -0
  238. package/dist/components/toast.css +100 -86
  239. package/dist/components/toolbar.css +45 -42
  240. package/dist/components/tooltip.css +102 -43
  241. package/dist/components/tooltip.mjs +1 -0
  242. package/dist/components/tree-select.css +416 -0
  243. package/dist/components/tree-select.mjs +3 -0
  244. package/dist/components/upload.css +135 -92
  245. package/dist/fonts/LICENSES/ark-pixel/OFL.txt +96 -0
  246. package/dist/fonts/LICENSES/cubic-11/OFL.txt +108 -0
  247. package/dist/fonts/LICENSES/galmuri/LICENSE.txt +93 -0
  248. package/dist/fonts/OFL.txt +96 -0
  249. package/dist/fonts/README.md +14 -0
  250. package/dist/fonts/fusion-pixel-12px-zh-hans.woff2 +0 -0
  251. package/dist/index.d.mts +28 -14
  252. package/dist/index.mjs +20705 -9601
  253. package/dist/react.d.mts +91 -0
  254. package/dist/react.mjs +8208 -0
  255. package/dist/registry.json +130 -13
  256. package/dist/tokens/chinese.css +44 -0
  257. package/dist/tokens/colors.css +365 -1222
  258. package/dist/tokens/design.css +109 -0
  259. package/dist/tokens/dtcg.json +11198 -0
  260. package/dist/tokens/figma.variables.json +7017 -0
  261. package/dist/tokens/icon-masks.css +78 -0
  262. package/dist/tokens/pixel.css +50 -0
  263. package/dist/tokens/soviet.css +44 -0
  264. package/dist/tokens/style-profiles.css +36 -547
  265. package/dist/tokens/themes.json +308 -0
  266. package/dist/tokens/tokens-studio.json +6728 -0
  267. package/dist/tokens/typography.css +21 -18
  268. package/dist/tokens.css +1555 -1801
  269. package/dist/ui.css +11975 -9831
  270. package/dist/vue.d.mts +344 -0
  271. package/dist/vue.mjs +7781 -0
  272. package/docs/spec/ai-input-experience.md +75 -0
  273. package/docs/spec/ai-native.md +238 -147
  274. package/docs/spec/design-philosophy.md +189 -0
  275. package/docs/spec/design-primitives.md +196 -0
  276. package/docs/spec/kb-family.md +147 -115
  277. package/package.json +43 -8
  278. package/dist/retro-effects.css +0 -255
  279. package/dist/tokens/retro-effects.css +0 -255
  280. package/docs/research/2026-10-03-ai-kb-components.md +0 -392
  281. package/docs/research/2026-10-03-kb-permissions.md +0 -992
@@ -1,60 +1,61 @@
1
+ @layer icen.components {
1
2
  /*
2
- * @icen.ai/ui — Component: steps(步骤条,横向默认 / .steps--vertical 垂直)
3
+ * @icen.ai/ui — Component: steps(步骤条,横向默认 / .icen-steps--vertical 垂直)
3
4
  *
4
5
  * 完整契约:
5
- * <ol class="steps [steps--vertical] [steps--sm|steps--lg] [steps--dots|steps--progress|steps--connected]"
6
+ * <ol class="icen-steps [icen-steps--vertical] [icen-steps--sm|icen-steps--lg] [icen-steps--dots|icen-steps--progress|icen-steps--connected]"
6
7
  * aria-label="进度">
7
- * <li class="step [step--finish|step--process|step--wait] [.step--error]">
8
- * <span class="step-line"></span> ← 横向:右半段连线;末步自动隐藏
9
- * <span class="step-dot">[✓ | ! | 数字]</span>
10
- * <div class="step-body">
11
- * <div class="step-title">已完成</div>
12
- * <div class="step-desc">描述(可选)</div>
8
+ * <li class="icen-step [icen-step--finish|icen-step--process|icen-step--wait] [.icen-step--error]">
9
+ * <span class="icen-step-line"></span> ← 横向:朝下一棒的行进半段连线(RTL 镜像);末步自动隐藏
10
+ * <span class="icen-step-dot">[✓ | ! | 数字]</span>
11
+ * <div class="icen-step-body">
12
+ * <div class="icen-step-title">已完成</div>
13
+ * <div class="icen-step-desc">描述(可选)</div>
13
14
  * </div>
14
15
  * </li>
15
16
  * </ol>
16
17
  *
17
18
  * 四态:finish / process / wait / error(错误用 error 色 dot + 描边)。
18
19
  * 变体与增强(正文下半段):--dots 纯点紧凑 / --progress 步骤间填充进度线 / --connected 虚线连接;
19
- * dot 内可放 svg.step-dot-icon;step-desc 旁可加 .step-extra 富化描述;
20
- * 可点击步骤标 .step--clickable(与 controls.ts initSteps 的 JSDoc 同口径)。
21
- * 点击 .step[role=button] 由 behaviors/controls.ts 的 initSteps() 接线(激活态位移 +
20
+ * dot 内可放 svg.icen-step-dot-icon;step-desc 旁可加 .icen-step-extra 富化描述;
21
+ * 可点击步骤标 .icen-step--clickable(与 controls.ts initSteps 的 JSDoc 同口径)。
22
+ * 点击 .icen-step[role=button] 由 behaviors/controls.ts 的 initSteps() 接线(激活态位移 +
22
23
  * icen:step-change);跳转业务仍由使用方监听事件实现。
23
24
  */
24
25
 
25
- .steps {
26
+ .icen-steps {
26
27
  display: flex;
27
28
  list-style: none;
28
29
  margin: 0;
29
30
  padding: 0;
30
31
  }
31
- .step {
32
+ .icen-step {
32
33
  flex: 1;
33
34
  position: relative;
34
35
  text-align: center;
35
- padding: 0 var(--density-space-xs);
36
+ padding: 0 var(--icen-density-space-xs);
36
37
  }
37
38
 
38
- .step-line {
39
+ .icen-step-line {
39
40
  position: absolute;
40
41
  top: 16px;
41
- left: calc(50% + 20px);
42
- width: calc(100% - 40px);
42
+ inset-inline-start: calc(50% + 20px);
43
+ inline-size: calc(100% - 40px);
43
44
  height: 1px;
44
- background: var(--token-outline-soft);
45
+ background: var(--icen-token-outline-soft);
45
46
  transition: background-color var(--icen-tx-normal);
46
47
  }
47
- .step:last-child .step-line { display: none; }
48
- .step--finish .step-line { background: color-mix(in srgb, var(--token-accent) 40%, transparent); }
48
+ .icen-step:last-child .icen-step-line { display: none; }
49
+ .icen-step--finish .icen-step-line { background: color-mix(in srgb, var(--icen-token-accent) 40%, transparent); }
49
50
 
50
- .step-dot {
51
+ .icen-step-dot {
51
52
  width: 32px;
52
53
  height: 32px;
53
- border-radius: var(--radius-full);
54
+ border-radius: var(--icen-radius-full);
54
55
  display: inline-flex;
55
56
  align-items: center;
56
57
  justify-content: center;
57
- font-size: var(--density-font-size-sm);
58
+ font-size: var(--icen-density-font-size-sm);
58
59
  font-weight: 600;
59
60
  font-variant-numeric: tabular-nums;
60
61
  position: relative;
@@ -64,38 +65,38 @@
64
65
  border-color var(--icen-tx-fast),
65
66
  color var(--icen-tx-fast);
66
67
  }
67
- .step--finish .step-dot {
68
- background: var(--token-accent);
69
- color: var(--token-on-accent);
68
+ .icen-step--finish .icen-step-dot {
69
+ background: var(--icen-token-accent-strong);
70
+ color: var(--icen-token-on-accent);
70
71
  }
71
- .step--process .step-dot {
72
- background: var(--token-accent-subtle);
73
- color: var(--token-accent);
74
- border: 2px solid var(--token-accent);
72
+ .icen-step--process .icen-step-dot {
73
+ background: var(--icen-token-accent-subtle);
74
+ color: var(--icen-token-accent);
75
+ border: 2px solid var(--icen-token-accent);
75
76
  box-shadow: var(--icen-ring-soft);
76
77
  }
77
- .step--wait .step-dot {
78
- background: var(--token-control);
79
- color: var(--token-text-faint);
80
- border: 1px solid var(--token-outline-soft);
78
+ .icen-step--wait .icen-step-dot {
79
+ background: var(--icen-token-control);
80
+ color: var(--icen-token-text-faint);
81
+ border: 1px solid var(--icen-token-outline-soft);
81
82
  }
82
- .step--error .step-dot {
83
- background: var(--token-error-muted);
84
- color: var(--token-error);
85
- border: 2px solid var(--token-error);
83
+ .icen-step--error .icen-step-dot {
84
+ background: var(--icen-token-error-muted);
85
+ color: var(--icen-token-error);
86
+ border: 2px solid var(--icen-token-error);
86
87
  }
87
88
 
88
- .step-title {
89
- font-size: var(--density-font-size-md);
89
+ .icen-step-title {
90
+ font-size: var(--icen-density-font-size-md);
90
91
  font-weight: 500;
91
- margin-top: var(--density-space-xs);
92
- color: var(--token-text);
93
- }
94
- .step--wait .step-title { color: var(--token-text-muted); }
95
- .step--error .step-title { color: var(--token-error); }
96
- .step-desc {
97
- font-size: var(--density-font-size-xs);
98
- color: var(--token-text-faint);
92
+ margin-top: var(--icen-density-space-xs);
93
+ color: var(--icen-token-text);
94
+ }
95
+ .icen-step--wait .icen-step-title { color: var(--icen-token-text-muted); }
96
+ .icen-step--error .icen-step-title { color: var(--icen-token-error); }
97
+ .icen-step-desc {
98
+ font-size: var(--icen-density-font-size-xs);
99
+ color: var(--icen-token-text-faint);
99
100
  margin-top: 2px;
100
101
  max-width: 160px;
101
102
  margin-inline: auto;
@@ -103,44 +104,44 @@
103
104
  }
104
105
 
105
106
  /* 尺寸变体 */
106
- .steps--sm .step-dot { width: 24px; height: 24px; font-size: var(--density-font-size-xs); }
107
- .steps--sm .step-line { top: 12px; }
108
- .steps--lg .step-dot { width: 40px; height: 40px; font-size: var(--density-font-size-md); }
109
- .steps--lg .step-line { top: 20px; }
107
+ .icen-steps--sm .icen-step-dot { width: 24px; height: 24px; font-size: var(--icen-density-font-size-xs); }
108
+ .icen-steps--sm .icen-step-line { top: 12px; }
109
+ .icen-steps--lg .icen-step-dot { width: 40px; height: 40px; font-size: var(--icen-density-font-size-md); }
110
+ .icen-steps--lg .icen-step-line { top: 20px; }
110
111
 
111
112
  /* ── 垂直变体 ── */
112
- .steps--vertical {
113
+ .icen-steps--vertical {
113
114
  flex-direction: column;
114
- gap: var(--density-space-md);
115
+ gap: var(--icen-density-space-md);
115
116
  }
116
- .steps--vertical .step {
117
+ .icen-steps--vertical .icen-step {
117
118
  flex: none;
118
119
  display: flex;
119
- gap: var(--density-space-sm);
120
- text-align: left;
120
+ gap: var(--icen-density-space-sm);
121
+ text-align: start;
121
122
  padding: 0;
122
123
  }
123
- .steps--vertical .step-line {
124
+ .icen-steps--vertical .icen-step-line {
124
125
  top: 36px;
125
- bottom: calc(-1 * var(--density-space-md));
126
- left: 16px;
126
+ bottom: calc(-1 * var(--icen-density-space-md));
127
+ inset-inline-start: 16px;
127
128
  width: 1px;
128
129
  height: auto;
129
130
  }
130
- .steps--vertical .step-dot { flex-shrink: 0; }
131
- .steps--vertical .step-body { padding-top: 4px; }
132
- .steps--vertical .step-title { margin-top: 0; }
133
- .steps--vertical .step-desc {
134
- max-width: none;
131
+ .icen-steps--vertical .icen-step-dot { flex-shrink: 0; }
132
+ .icen-steps--vertical .icen-step-body { padding-top: 4px; }
133
+ .icen-steps--vertical .icen-step-title { margin-top: 0; }
134
+ .icen-steps--vertical .icen-step-desc {
135
+ max-inline-size: none;
135
136
  margin-inline: 0;
136
137
  }
137
138
 
138
139
  @media (prefers-reduced-motion: reduce) {
139
- .step-dot, .step-line { transition: none; }
140
+ .icen-step-dot, .icen-step-line { transition: none; }
140
141
  }
141
142
 
142
143
  /* ── 纯点变体(无数字/无标签,紧凑进度指示) ── */
143
- .steps--dots .step-dot {
144
+ .icen-steps--dots .icen-step-dot {
144
145
  width: 10px;
145
146
  height: 10px;
146
147
  padding: 0;
@@ -148,95 +149,100 @@
148
149
  }
149
150
  /* 线 top = dot 高度一半:默认 32→16 / sm 24→12 / lg 40→20 / dots 10→5;
150
151
  本块位于尺寸变体之后,同等特异性下靠源顺序生效,dots 与 --sm/--lg 叠加时以 5px 为准 */
151
- .steps--dots .step-line { top: 5px; }
152
- .steps--dots .step-title,
153
- .steps--dots .step-desc { display: none; }
154
- .steps--dots .step { flex: none; }
155
- .steps--dots { gap: var(--density-space-xs); }
152
+ .icen-steps--dots .icen-step-line { top: 5px; }
153
+ .icen-steps--dots .icen-step-title,
154
+ .icen-steps--dots .icen-step-desc { display: none; }
155
+ .icen-steps--dots .icen-step { flex: none; }
156
+ .icen-steps--dots { gap: var(--icen-density-space-xs); }
156
157
 
157
158
  /* ── 自定义图标槽(step-dot 内放 svg) ── */
158
- .step-dot-icon {
159
+ .icen-step-dot-icon {
159
160
  width: 16px;
160
161
  height: 16px;
161
162
  }
162
- .step--finish .step-dot-icon { color: var(--token-on-accent); }
163
- .step--process .step-dot-icon { color: var(--token-accent); }
164
- .step--wait .step-dot-icon { color: var(--token-text-faint); }
165
- .step--error .step-dot-icon { color: var(--token-error); }
163
+ .icen-step--finish .icen-step-dot-icon { color: var(--icen-token-on-accent); }
164
+ .icen-step--process .icen-step-dot-icon { color: var(--icen-token-accent); }
165
+ .icen-step--wait .icen-step-dot-icon { color: var(--icen-token-text-faint); }
166
+ .icen-step--error .icen-step-dot-icon { color: var(--icen-token-error); }
166
167
 
167
168
  /* ── 可点击步骤 ── */
168
- .step--clickable {
169
+ .icen-step--clickable {
169
170
  cursor: pointer;
170
171
  transition: opacity var(--icen-tx-fast);
171
172
  }
172
- .step--clickable:hover .step-dot {
173
- transform: scale(1.08);
174
- box-shadow: var(--icen-ring-soft);
173
+ /* hover 圆点放大+光晕仅可悬停设备生效(触屏关闭抬升,AGENTS 动效守卫);标题变色保留 */
174
+ @media (hover: hover) and (pointer: fine) {
175
+ .icen-step--clickable:hover .icen-step-dot {
176
+ transform: scale(1.08);
177
+ box-shadow: var(--icen-ring-soft);
178
+ }
175
179
  }
176
- .step--clickable:hover .step-title {
177
- color: var(--token-accent);
180
+ .icen-step--clickable:hover .icen-step-title {
181
+ color: var(--icen-token-accent);
178
182
  }
179
183
 
180
184
  /* ── 进度条变体(步骤间的填充进度,非离散连线) ── */
181
185
  /* 高度 1px→3px 时线只向下扩张 2px,整体上移 1px 使线心与 1px 基线居中一致;
182
186
  用 translateY 而非改 top,可同时适配 --sm(12px)/--lg(20px) 的不同基线 */
183
- .steps--progress .step-line {
187
+ .icen-steps--progress .icen-step-line {
184
188
  height: 3px;
185
189
  transform: translateY(-1px);
186
- border-radius: var(--radius-full);
187
- background: var(--token-fill-2);
190
+ border-radius: var(--icen-radius-full);
191
+ background: var(--icen-token-fill-2);
188
192
  overflow: hidden;
189
193
  }
190
- .steps--progress .step-line::after {
194
+ .icen-steps--progress .icen-step-line::after {
191
195
  content: '';
192
196
  position: absolute;
193
197
  inset: 0;
194
- background: var(--token-accent);
198
+ background: var(--icen-token-accent);
195
199
  transform-origin: left;
196
200
  transform: scaleX(0);
197
- transition: transform var(--icen-tx-slow) var(--ease-out);
201
+ transition: transform var(--icen-tx-slow) var(--icen-ease-out);
198
202
  }
199
- .steps--progress .step--finish .step-line::after { transform: scaleX(1); }
203
+ .icen-steps--progress .icen-step--finish .icen-step-line::after { transform: scaleX(1); }
200
204
 
201
205
  /* ── 垂直模式的进度条变体 ── */
202
- .steps--vertical.steps--progress .step-line::after {
206
+ .icen-steps--vertical.icen-steps--progress .icen-step-line::after {
203
207
  transform-origin: top;
204
208
  transform: scaleY(0);
205
209
  }
206
- .steps--vertical.steps--progress .step--finish .step-line::after {
210
+ .icen-steps--vertical.icen-steps--progress .icen-step--finish .icen-step-line::after {
207
211
  transform: scaleY(1);
208
212
  }
209
213
 
210
214
  /* ── 步骤描述富化(可选 icon + text) ── */
211
- .step-extra {
215
+ .icen-step-extra {
212
216
  display: flex;
213
217
  align-items: center;
214
218
  gap: 4px;
215
219
  margin-top: 4px;
216
- font-size: var(--density-font-size-xs);
217
- color: var(--token-text-faint);
220
+ font-size: var(--icen-density-font-size-xs);
221
+ color: var(--icen-token-text-faint);
218
222
  justify-content: center;
219
223
  }
220
- .step--error .step-extra { color: var(--token-error); }
224
+ .icen-step--error .icen-step-extra { color: var(--icen-token-error); }
221
225
 
222
226
  /* ── 数字步骤的连接箭头(可选替代纯线条) ── */
223
- .steps--connected .step-line {
227
+ .icen-steps--connected .icen-step-line {
224
228
  height: 0;
225
229
  background: transparent;
226
230
  }
227
- .steps--connected .step-line::before {
231
+ .icen-steps--connected .icen-step-line::before {
228
232
  content: '';
229
233
  position: absolute;
230
234
  inset: 0;
231
- border-top: 1px dashed var(--token-outline-soft);
235
+ border-top: 1px dashed var(--icen-token-outline-soft);
232
236
  }
233
- .steps--connected .step--finish .step-line::before {
237
+ .icen-steps--connected .icen-step--finish .icen-step-line::before {
234
238
  border-top-style: solid;
235
- border-top-color: var(--token-accent);
239
+ border-top-color: var(--icen-token-accent);
236
240
  }
237
241
 
238
242
  @media (max-width: 640px) {
239
243
  /* 小屏:横向 steps 变为可横向滚动 */
240
- .steps { overflow-x: auto; flex-wrap: nowrap; }
241
- .step { min-width: 80px; }
244
+ .icen-steps { overflow-x: auto; flex-wrap: nowrap; }
245
+ .icen-step { min-width: 80px; }
246
+ }
247
+
242
248
  }