@icen.ai/ui 0.8.1 → 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 (335) hide show
  1. package/AGENTS.md +176 -75
  2. package/README.md +66 -88
  3. package/dist/base.css +208 -179
  4. package/dist/behaviors/accordion.mjs +8 -8
  5. package/dist/behaviors/ai-branch.d.mts +19 -0
  6. package/dist/behaviors/ai-branch.mjs +1133 -0
  7. package/dist/behaviors/ai-chat.d.mts +12 -10
  8. package/dist/behaviors/ai-chat.mjs +1125 -155
  9. package/dist/behaviors/ai-composer.d.mts +44 -12
  10. package/dist/behaviors/ai-composer.mjs +2084 -523
  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 +26 -0
  15. package/dist/behaviors/ai-feedback.mjs +1212 -0
  16. package/dist/behaviors/ai-panel.d.mts +21 -7
  17. package/dist/behaviors/ai-panel.mjs +1308 -264
  18. package/dist/behaviors/ai-provider.mjs +1003 -101
  19. package/dist/behaviors/ai-threads.d.mts +38 -0
  20. package/dist/behaviors/ai-threads.mjs +1233 -0
  21. package/dist/behaviors/ai-tool.d.mts +2 -2
  22. package/dist/behaviors/ai-tool.mjs +2042 -396
  23. package/dist/behaviors/ai-tools.d.mts +89 -16
  24. package/dist/behaviors/ai-tools.mjs +4453 -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 +174 -8
  34. package/dist/behaviors/charts.mjs +2632 -192
  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 +313 -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 +34 -0
  68. package/dist/behaviors/kb-access.mjs +2459 -0
  69. package/dist/behaviors/kb-acl.d.mts +50 -0
  70. package/dist/behaviors/kb-acl.mjs +1345 -0
  71. package/dist/behaviors/kb-answer.d.mts +38 -0
  72. package/dist/behaviors/kb-answer.mjs +3707 -0
  73. package/dist/behaviors/kb-audit.d.mts +23 -0
  74. package/dist/behaviors/kb-audit.mjs +1297 -0
  75. package/dist/behaviors/kb-canvas.d.mts +44 -0
  76. package/dist/behaviors/kb-canvas.mjs +1512 -0
  77. package/dist/behaviors/kb-chain.d.mts +15 -0
  78. package/dist/behaviors/kb-chain.mjs +1192 -0
  79. package/dist/behaviors/kb-checkpoint.d.mts +16 -0
  80. package/dist/behaviors/kb-checkpoint.mjs +1492 -0
  81. package/dist/behaviors/kb-chunks.d.mts +31 -0
  82. package/dist/behaviors/kb-chunks.mjs +1414 -0
  83. package/dist/behaviors/kb-citation.d.mts +38 -0
  84. package/dist/behaviors/kb-citation.mjs +1699 -0
  85. package/dist/behaviors/kb-clarify.d.mts +20 -0
  86. package/dist/behaviors/kb-clarify.mjs +1176 -0
  87. package/dist/behaviors/kb-conflict.d.mts +22 -0
  88. package/dist/behaviors/kb-conflict.mjs +1206 -0
  89. package/dist/behaviors/kb-connector.d.mts +17 -0
  90. package/dist/behaviors/kb-connector.mjs +1303 -0
  91. package/dist/behaviors/kb-core.d.mts +534 -0
  92. package/dist/behaviors/kb-core.mjs +1805 -0
  93. package/dist/behaviors/kb-eval.d.mts +22 -0
  94. package/dist/behaviors/kb-eval.mjs +2235 -0
  95. package/dist/behaviors/kb-explain.d.mts +11 -0
  96. package/dist/behaviors/kb-explain.mjs +1165 -0
  97. package/dist/behaviors/kb-filter.d.mts +31 -0
  98. package/dist/behaviors/kb-filter.mjs +2417 -0
  99. package/dist/behaviors/kb-gap.d.mts +27 -0
  100. package/dist/behaviors/kb-gap.mjs +1195 -0
  101. package/dist/behaviors/kb-hittest.d.mts +34 -0
  102. package/dist/behaviors/kb-hittest.mjs +1352 -0
  103. package/dist/behaviors/kb-metadata.d.mts +29 -0
  104. package/dist/behaviors/kb-metadata.mjs +1248 -0
  105. package/dist/behaviors/kb-passage.d.mts +41 -0
  106. package/dist/behaviors/kb-passage.mjs +1469 -0
  107. package/dist/behaviors/kb-pipeline.d.mts +18 -0
  108. package/dist/behaviors/kb-pipeline.mjs +1301 -0
  109. package/dist/behaviors/kb-qa.d.mts +26 -0
  110. package/dist/behaviors/kb-qa.mjs +1260 -0
  111. package/dist/behaviors/kb-rerank.d.mts +20 -0
  112. package/dist/behaviors/kb-rerank.mjs +1248 -0
  113. package/dist/behaviors/kb-retrieval.d.mts +49 -0
  114. package/dist/behaviors/kb-retrieval.mjs +2585 -0
  115. package/dist/behaviors/kb-review.d.mts +44 -0
  116. package/dist/behaviors/kb-review.mjs +2282 -0
  117. package/dist/behaviors/kb-sandbox.d.mts +33 -0
  118. package/dist/behaviors/kb-sandbox.mjs +1247 -0
  119. package/dist/behaviors/kb-segment.d.mts +32 -0
  120. package/dist/behaviors/kb-segment.mjs +1431 -0
  121. package/dist/behaviors/kb-select.d.mts +24 -0
  122. package/dist/behaviors/kb-select.mjs +1989 -0
  123. package/dist/behaviors/kb-sources.d.mts +27 -0
  124. package/dist/behaviors/kb-sources.mjs +1287 -0
  125. package/dist/behaviors/kb-sql.d.mts +43 -0
  126. package/dist/behaviors/kb-sql.mjs +1865 -0
  127. package/dist/behaviors/kb-trace.d.mts +16 -0
  128. package/dist/behaviors/kb-trace.mjs +1328 -0
  129. package/dist/behaviors/kb-visibility.d.mts +44 -0
  130. package/dist/behaviors/kb-visibility.mjs +1331 -0
  131. package/dist/behaviors/kb-who-can.d.mts +32 -0
  132. package/dist/behaviors/kb-who-can.mjs +2216 -0
  133. package/dist/behaviors/mentions.d.mts +93 -0
  134. package/dist/behaviors/mentions.mjs +2152 -0
  135. package/dist/behaviors/modal.d.mts +4 -3
  136. package/dist/behaviors/modal.mjs +1055 -33
  137. package/dist/behaviors/nav.d.mts +1 -1
  138. package/dist/behaviors/nav.mjs +6 -6
  139. package/dist/behaviors/notification.d.mts +16 -8
  140. package/dist/behaviors/notification.mjs +1615 -265
  141. package/dist/behaviors/panel.d.mts +4 -0
  142. package/dist/behaviors/panel.mjs +994 -0
  143. package/dist/behaviors/popover.d.mts +28 -5
  144. package/dist/behaviors/popover.mjs +225 -24
  145. package/dist/behaviors/select.d.mts +5 -2
  146. package/dist/behaviors/select.mjs +1410 -117
  147. package/dist/behaviors/sidebar.d.mts +1 -1
  148. package/dist/behaviors/sidebar.mjs +13 -13
  149. package/dist/behaviors/slider.d.mts +1 -1
  150. package/dist/behaviors/slider.mjs +9 -9
  151. package/dist/behaviors/split-pane.d.mts +1 -1
  152. package/dist/behaviors/split-pane.mjs +7 -7
  153. package/dist/behaviors/suggestions.d.mts +27 -0
  154. package/dist/behaviors/suggestions.mjs +1089 -0
  155. package/dist/behaviors/svg-parse.d.mts +14 -0
  156. package/dist/behaviors/svg-parse.mjs +37 -0
  157. package/dist/behaviors/tabs.d.mts +2 -2
  158. package/dist/behaviors/tabs.mjs +25 -25
  159. package/dist/behaviors/tag-input.d.mts +23 -5
  160. package/dist/behaviors/tag-input.mjs +1359 -104
  161. package/dist/behaviors/theme-switcher.d.mts +24 -0
  162. package/dist/behaviors/theme-switcher.mjs +1981 -0
  163. package/dist/behaviors/theme.d.mts +15 -8
  164. package/dist/behaviors/theme.mjs +390 -28
  165. package/dist/behaviors/toast.d.mts +24 -25
  166. package/dist/behaviors/toast.mjs +1266 -88
  167. package/dist/behaviors/tooltip.d.mts +4 -0
  168. package/dist/behaviors/tooltip.mjs +378 -0
  169. package/dist/behaviors/tree-select.d.mts +69 -0
  170. package/dist/behaviors/tree-select.mjs +1907 -0
  171. package/dist/behaviors/tree.d.mts +1 -1
  172. package/dist/behaviors/tree.mjs +15 -15
  173. package/dist/behaviors/upload.d.mts +3 -2
  174. package/dist/behaviors/upload.mjs +1076 -66
  175. package/dist/cli.mjs +5 -6
  176. package/dist/components/ai-branch.mjs +3 -0
  177. package/dist/components/ai-chat.css +846 -458
  178. package/dist/components/ai-diff.css +153 -132
  179. package/dist/components/ai-feedback.mjs +3 -0
  180. package/dist/components/ai-panel.css +495 -270
  181. package/dist/components/ai-threads.mjs +3 -0
  182. package/dist/components/ai-tool.css +393 -238
  183. package/dist/components/autocomplete.css +61 -0
  184. package/dist/components/autocomplete.mjs +3 -0
  185. package/dist/components/back-top.css +34 -31
  186. package/dist/components/badge.css +44 -41
  187. package/dist/components/breadcrumb.css +67 -46
  188. package/dist/components/btn.css +80 -74
  189. package/dist/components/card.css +117 -106
  190. package/dist/components/cascader.css +311 -0
  191. package/dist/components/cascader.mjs +3 -0
  192. package/dist/components/chart-area.css +8 -2
  193. package/dist/components/chart-bar.css +95 -33
  194. package/dist/components/chart-gauge.css +14 -11
  195. package/dist/components/chart-graph.css +60 -0
  196. package/dist/components/chart-graph.mjs +4 -0
  197. package/dist/components/chart-heatmap.css +96 -90
  198. package/dist/components/chart-line.css +8 -3
  199. package/dist/components/chart-map.mjs +3 -0
  200. package/dist/components/chart-pie.css +9 -6
  201. package/dist/components/chart-radar.css +8 -5
  202. package/dist/components/chart-scatter.css +9 -6
  203. package/dist/components/chart-scatter.mjs +1 -1
  204. package/dist/components/chart-sparkline.css +5 -2
  205. package/dist/components/chart-stack.css +14 -11
  206. package/dist/components/charts.css +190 -67
  207. package/dist/components/charts.mjs +1 -0
  208. package/dist/components/code-block.css +418 -0
  209. package/dist/components/code-block.mjs +4 -0
  210. package/dist/components/command-palette.css +138 -117
  211. package/dist/components/content.css +257 -251
  212. package/dist/components/copy.css +72 -44
  213. package/dist/components/datatable.css +423 -181
  214. package/dist/components/date-picker.css +135 -104
  215. package/dist/components/empty.css +68 -65
  216. package/dist/components/feedback.css +201 -183
  217. package/dist/components/form-validate.css +120 -0
  218. package/dist/components/form-validate.mjs +3 -0
  219. package/dist/components/form.css +150 -127
  220. package/dist/components/icon.css +102 -0
  221. package/dist/components/icon.mjs +3 -0
  222. package/dist/components/input.css +159 -104
  223. package/dist/components/kb-access.mjs +4 -0
  224. package/dist/components/kb-acl.mjs +4 -0
  225. package/dist/components/kb-agent.css +496 -0
  226. package/dist/components/kb-answer.mjs +4 -0
  227. package/dist/components/kb-audit.mjs +4 -0
  228. package/dist/components/kb-canvas.mjs +4 -0
  229. package/dist/components/kb-chain.mjs +4 -0
  230. package/dist/components/kb-checkpoint.mjs +4 -0
  231. package/dist/components/kb-chunks.mjs +4 -0
  232. package/dist/components/kb-citation.mjs +4 -0
  233. package/dist/components/kb-clarify.mjs +4 -0
  234. package/dist/components/kb-conflict.mjs +4 -0
  235. package/dist/components/kb-connector.mjs +4 -0
  236. package/dist/components/kb-data.css +653 -0
  237. package/dist/components/kb-eval.mjs +4 -0
  238. package/dist/components/kb-explain.mjs +4 -0
  239. package/dist/components/kb-filter.mjs +4 -0
  240. package/dist/components/kb-gap.mjs +4 -0
  241. package/dist/components/kb-ground.css +578 -0
  242. package/dist/components/kb-hittest.mjs +4 -0
  243. package/dist/components/kb-ingest.css +882 -0
  244. package/dist/components/kb-metadata.mjs +4 -0
  245. package/dist/components/kb-ops.css +554 -0
  246. package/dist/components/kb-passage.mjs +4 -0
  247. package/dist/components/kb-perm.css +433 -0
  248. package/dist/components/kb-pipeline.mjs +4 -0
  249. package/dist/components/kb-qa.mjs +4 -0
  250. package/dist/components/kb-rerank.mjs +4 -0
  251. package/dist/components/kb-retrieval.mjs +4 -0
  252. package/dist/components/kb-review.mjs +4 -0
  253. package/dist/components/kb-sandbox.mjs +4 -0
  254. package/dist/components/kb-search.css +897 -0
  255. package/dist/components/kb-segment.mjs +4 -0
  256. package/dist/components/kb-sources.mjs +4 -0
  257. package/dist/components/kb-sql.mjs +4 -0
  258. package/dist/components/kb-trace.mjs +4 -0
  259. package/dist/components/kb-visibility.mjs +4 -0
  260. package/dist/components/kb-who-can.mjs +4 -0
  261. package/dist/components/kb.css +263 -0
  262. package/dist/components/kb.mjs +9 -0
  263. package/dist/components/layout.css +85 -82
  264. package/dist/components/material-chinese.css +73 -0
  265. package/dist/components/material-soviet.css +76 -0
  266. package/dist/components/material.css +275 -0
  267. package/dist/components/media.css +220 -166
  268. package/dist/components/mentions.css +189 -0
  269. package/dist/components/mentions.mjs +3 -0
  270. package/dist/components/menu.css +113 -105
  271. package/dist/components/modal.css +107 -112
  272. package/dist/components/nav.css +118 -115
  273. package/dist/components/notification.css +238 -174
  274. package/dist/components/pagination.css +56 -53
  275. package/dist/components/panel.css +66 -63
  276. package/dist/components/panel.mjs +1 -0
  277. package/dist/components/pill.css +81 -71
  278. package/dist/components/popover.css +67 -53
  279. package/dist/components/scroll-area.css +113 -110
  280. package/dist/components/segmented.css +146 -143
  281. package/dist/components/select.css +206 -186
  282. package/dist/components/sidebar.css +137 -127
  283. package/dist/components/slider.css +117 -114
  284. package/dist/components/split-pane.css +112 -109
  285. package/dist/components/stat.css +112 -106
  286. package/dist/components/steps.css +109 -103
  287. package/dist/components/switch.css +138 -134
  288. package/dist/components/table.css +131 -107
  289. package/dist/components/tabs.css +114 -108
  290. package/dist/components/tag-input.css +48 -133
  291. package/dist/components/tag.css +81 -71
  292. package/dist/components/theme-switcher.css +105 -0
  293. package/dist/components/theme-switcher.mjs +3 -0
  294. package/dist/components/toast.css +100 -86
  295. package/dist/components/toolbar.css +45 -42
  296. package/dist/components/tooltip.css +102 -43
  297. package/dist/components/tooltip.mjs +1 -0
  298. package/dist/components/tree-select.css +416 -0
  299. package/dist/components/tree-select.mjs +3 -0
  300. package/dist/components/upload.css +135 -92
  301. package/dist/fonts/LICENSES/ark-pixel/OFL.txt +96 -0
  302. package/dist/fonts/LICENSES/cubic-11/OFL.txt +108 -0
  303. package/dist/fonts/LICENSES/galmuri/LICENSE.txt +93 -0
  304. package/dist/fonts/OFL.txt +96 -0
  305. package/dist/fonts/README.md +14 -0
  306. package/dist/fonts/fusion-pixel-12px-zh-hans.woff2 +0 -0
  307. package/dist/index.d.mts +64 -15
  308. package/dist/index.mjs +28049 -8595
  309. package/dist/react.d.mts +91 -0
  310. package/dist/react.mjs +8208 -0
  311. package/dist/registry.json +454 -15
  312. package/dist/tokens/chinese.css +44 -0
  313. package/dist/tokens/colors.css +365 -1222
  314. package/dist/tokens/design.css +109 -0
  315. package/dist/tokens/dtcg.json +11198 -0
  316. package/dist/tokens/figma.variables.json +7017 -0
  317. package/dist/tokens/icon-masks.css +78 -0
  318. package/dist/tokens/pixel.css +50 -0
  319. package/dist/tokens/soviet.css +44 -0
  320. package/dist/tokens/style-profiles.css +36 -547
  321. package/dist/tokens/themes.json +308 -0
  322. package/dist/tokens/tokens-studio.json +6728 -0
  323. package/dist/tokens/typography.css +21 -18
  324. package/dist/tokens.css +1555 -1801
  325. package/dist/ui.css +16147 -8597
  326. package/dist/vue.d.mts +344 -0
  327. package/dist/vue.mjs +7781 -0
  328. package/docs/spec/ai-input-experience.md +75 -0
  329. package/docs/spec/ai-native.md +238 -147
  330. package/docs/spec/design-philosophy.md +189 -0
  331. package/docs/spec/design-primitives.md +196 -0
  332. package/docs/spec/kb-family.md +475 -0
  333. package/package.json +42 -7
  334. package/dist/retro-effects.css +0 -255
  335. package/dist/tokens/retro-effects.css +0 -255
@@ -1,3 +1,4 @@
1
+ @layer icen.components {
1
2
  /*
2
3
  * @icen.ai/ui — Component: segmented(分段控件 / 切换组 / 数字步进器 / OTP)
3
4
  *
@@ -6,25 +7,25 @@
6
7
  *
7
8
  * 完整契约:
8
9
  * 1) 分段控件(排他单选):
9
- * <div class="segmented [segmented--sm|segmented--lg]" role="radiogroup">
10
- * <button class="segmented-item [.is-active]" role="radio" [aria-checked="true"]>…</button>
10
+ * <div class="icen-segmented [icen-segmented--sm|icen-segmented--lg]" role="radiogroup">
11
+ * <button class="icen-segmented-item [.is-active]" role="radio" [aria-checked="true"]>…</button>
11
12
  * </div>
12
13
  *
13
14
  * 2) 切换组(同族变体,更松散):
14
- * <div class="toggle-group [toggle-group--sm]">
15
- * <button class="toggle-item [.is-active]">…</button>
15
+ * <div class="icen-toggle-group [icen-toggle-group--sm]">
16
+ * <button class="icen-toggle-item [.is-active]">…</button>
16
17
  * </div>
17
18
  *
18
19
  * 3) 数字步进器:
19
- * <div class="stepper">
20
- * <button class="stepper-btn" data-step="-1">−</button>
21
- * <input class="stepper-input" type="number" min="0" max="100" />
22
- * <button class="stepper-btn" data-step="1">+</button>
20
+ * <div class="icen-stepper">
21
+ * <button class="icen-stepper-btn" data-icen-step="-1">−</button>
22
+ * <icen-input class="icen-stepper-input" type="number" min="0" max="100" />
23
+ * <button class="icen-stepper-btn" data-icen-step="1">+</button>
23
24
  * </div>
24
25
  *
25
26
  * 4) OTP 验证码单元格:
26
- * <div class="otp otp--sm" role="group" aria-label="一次性验证码">
27
- * <input class="otp-cell" maxlength="1" />
27
+ * <div class="icen-otp icen-otp--sm" role="group" aria-label="一次性验证码">
28
+ * <icen-input class="icen-otp-cell" maxlength="1" />
28
29
  * …
29
30
  * </div>
30
31
  *
@@ -35,310 +36,312 @@
35
36
  * 增强段(正文"增强"段):
36
37
  * 变体:segmented--block / segmented--ghost / toggle-group--block / toggle-group--ghost
37
38
  * 槽位:stepper-unit(步进器单位后缀)/ otp-separator(OTP 分组分隔符)
38
- * 状态类(消费方施加):.otp.is-complete(behavior 接线中)/ .otp.is-error /
39
- * .segmented.is-error / .segmented.is-disabled / .toggle-group.is-error / .toggle-group.is-disabled
39
+ * 状态类(消费方施加):.icen-otp.is-complete(behavior 接线中)/ .icen-otp.is-error /
40
+ * .icen-segmented.is-error / .icen-segmented.is-disabled / .icen-toggle-group.is-error / .icen-toggle-group.is-disabled
40
41
  */
41
42
 
42
43
  /* ── 分段控件(排他单选) ── */
43
- .segmented {
44
+ .icen-segmented {
44
45
  display: inline-flex;
45
46
  align-items: center;
46
47
  gap: 2px;
47
48
  padding: 2px;
48
- background: var(--token-panel);
49
- border: 1px solid var(--token-outline-soft);
50
- border-radius: var(--radius-md);
51
- box-shadow: var(--token-shadow-inset);
49
+ background: var(--icen-token-panel);
50
+ border: 1px solid var(--icen-token-outline-soft);
51
+ border-radius: var(--icen-radius-md);
52
+ box-shadow: var(--icen-token-shadow-inset);
52
53
  }
53
54
 
54
- .segmented-item {
55
+ .icen-segmented-item {
55
56
  display: flex;
56
57
  align-items: center;
57
- gap: var(--density-space-xs);
58
- padding: var(--density-space-xs) calc(var(--density-space-sm) + 2px);
59
- font-size: var(--density-font-size-sm);
58
+ gap: var(--icen-density-space-xs);
59
+ padding: var(--icen-density-space-xs) calc(var(--icen-density-space-sm) + 2px);
60
+ font-size: var(--icen-density-font-size-sm);
60
61
  font-weight: 500;
61
62
  border: none;
62
63
  background: transparent;
63
64
  cursor: pointer;
64
- border-radius: var(--radius-sm);
65
- color: var(--token-text-muted);
65
+ border-radius: var(--icen-radius-sm);
66
+ color: var(--icen-token-text-muted);
66
67
  -webkit-tap-highlight-color: transparent;
67
68
  transition:
68
69
  background-color var(--icen-tx-fast),
69
70
  color var(--icen-tx-fast),
70
71
  box-shadow var(--icen-tx-fast);
71
72
  }
72
- .segmented-item:hover:not(.is-active):not(:disabled) {
73
- color: var(--token-text);
74
- background: var(--token-surface-hover);
73
+ .icen-segmented-item:hover:not(.is-active):not(:disabled) {
74
+ color: var(--icen-token-text);
75
+ background: var(--icen-token-surface-hover);
75
76
  }
76
- .segmented-item:focus-visible {
77
+ .icen-segmented-item:focus-visible {
77
78
  outline: none;
78
79
  box-shadow: var(--icen-ring);
79
80
  }
80
- .segmented-item.is-active,
81
- .segmented-item[aria-checked='true'] {
82
- background: var(--token-accent);
83
- color: var(--token-on-accent);
84
- box-shadow: var(--token-shadow-elevated);
81
+ .icen-segmented-item.is-active,
82
+ .icen-segmented-item[aria-checked='true'] {
83
+ background: var(--icen-token-accent-strong);
84
+ color: var(--icen-token-on-accent);
85
+ box-shadow: var(--icen-token-shadow-elevated);
85
86
  }
86
- .segmented-item:disabled,
87
- .segmented-item[aria-disabled='true'] {
87
+ .icen-segmented-item:disabled,
88
+ .icen-segmented-item[aria-disabled='true'] {
88
89
  opacity: var(--icen-disabled-opacity);
89
90
  cursor: not-allowed;
90
91
  }
91
- .segmented-item svg { width: 13px; height: 13px; flex-shrink: 0; }
92
+ .icen-segmented-item svg { width: 13px; height: 13px; flex-shrink: 0; }
92
93
 
93
94
  /* 尺寸 */
94
- .segmented--sm .segmented-item {
95
- padding: 2px var(--density-space-sm);
96
- font-size: var(--density-font-size-xs);
95
+ .icen-segmented--sm .icen-segmented-item {
96
+ padding: 2px var(--icen-density-space-sm);
97
+ font-size: var(--icen-density-font-size-xs);
97
98
  }
98
- .segmented--lg .segmented-item {
99
- padding: var(--density-space-xs) var(--density-space-md);
100
- font-size: var(--density-font-size-md);
99
+ .icen-segmented--lg .icen-segmented-item {
100
+ padding: var(--icen-density-space-xs) var(--icen-density-space-md);
101
+ font-size: var(--icen-density-font-size-md);
101
102
  }
102
103
 
103
104
  /* ── 切换组(segmented 同族变体) ── */
104
- .toggle-group {
105
+ .icen-toggle-group {
105
106
  display: inline-flex;
106
107
  align-items: center;
107
- gap: var(--density-space-xs);
108
- padding: var(--density-space-xs);
109
- background: var(--token-panel);
110
- border: 1px solid var(--token-outline-soft);
111
- border-radius: var(--radius-md);
108
+ gap: var(--icen-density-space-xs);
109
+ padding: var(--icen-density-space-xs);
110
+ background: var(--icen-token-panel);
111
+ border: 1px solid var(--icen-token-outline-soft);
112
+ border-radius: var(--icen-radius-md);
112
113
  }
113
114
 
114
- .toggle-item {
115
+ .icen-toggle-item {
115
116
  display: flex;
116
117
  align-items: center;
117
- gap: var(--density-space-xs);
118
- padding: var(--density-space-xs) var(--density-space-sm);
119
- font-size: var(--density-font-size-sm);
118
+ gap: var(--icen-density-space-xs);
119
+ padding: var(--icen-density-space-xs) var(--icen-density-space-sm);
120
+ font-size: var(--icen-density-font-size-sm);
120
121
  font-weight: 500;
121
122
  border: none;
122
123
  background: transparent;
123
124
  cursor: pointer;
124
- border-radius: var(--radius-xs);
125
- color: var(--token-text-muted);
125
+ border-radius: var(--icen-radius-xs);
126
+ color: var(--icen-token-text-muted);
126
127
  transition:
127
128
  background-color var(--icen-tx-fast),
128
129
  color var(--icen-tx-fast);
129
130
  }
130
- .toggle-item:hover:not(.is-active):not(:disabled) {
131
- color: var(--token-text);
132
- background: var(--token-control-hover);
131
+ .icen-toggle-item:hover:not(.is-active):not(:disabled) {
132
+ color: var(--icen-token-text);
133
+ background: var(--icen-token-control-hover);
133
134
  }
134
- .toggle-item:focus-visible {
135
+ .icen-toggle-item:focus-visible {
135
136
  outline: none;
136
137
  box-shadow: var(--icen-ring);
137
138
  }
138
- .toggle-item.is-active,
139
- .toggle-item[aria-checked='true'] {
140
- background: var(--token-accent);
141
- color: var(--token-on-accent);
142
- box-shadow: var(--token-shadow-card);
139
+ .icen-toggle-item.is-active,
140
+ .icen-toggle-item[aria-checked='true'] {
141
+ background: var(--icen-token-accent-strong);
142
+ color: var(--icen-token-on-accent);
143
+ box-shadow: var(--icen-token-shadow-card);
143
144
  }
144
- .toggle-item:disabled,
145
- .toggle-item[aria-disabled='true'] {
145
+ .icen-toggle-item:disabled,
146
+ .icen-toggle-item[aria-disabled='true'] {
146
147
  opacity: var(--icen-disabled-opacity);
147
148
  cursor: not-allowed;
148
149
  }
149
- .toggle-group--sm .toggle-item {
150
- padding: 2px var(--density-space-sm);
151
- font-size: var(--density-font-size-xs);
150
+ .icen-toggle-group--sm .icen-toggle-item {
151
+ padding: 2px var(--icen-density-space-sm);
152
+ font-size: var(--icen-density-font-size-xs);
152
153
  }
153
154
 
154
155
  /* ── 数字步进器 ── */
155
- .stepper {
156
+ .icen-stepper {
156
157
  display: inline-flex;
157
158
  align-items: stretch;
158
- background: var(--token-control);
159
- border: 1px solid var(--token-outline-soft);
160
- border-radius: var(--radius-md);
159
+ background: var(--icen-token-control);
160
+ border: 1px solid var(--icen-token-outline-soft);
161
+ border-radius: var(--icen-radius-md);
161
162
  overflow: hidden;
162
163
  transition: border-color var(--icen-tx-fast), box-shadow var(--icen-tx-fast);
163
164
  }
164
- .stepper:hover { border-color: var(--icen-hover-border); }
165
- .stepper:focus-within {
165
+ .icen-stepper:hover { border-color: var(--icen-hover-border); }
166
+ .icen-stepper:focus-within {
166
167
  border-color: var(--icen-control-focus-border);
167
168
  box-shadow: var(--icen-control-focus-shadow);
168
169
  }
169
170
 
170
- .stepper-btn {
171
+ .icen-stepper-btn {
171
172
  display: inline-flex;
172
173
  align-items: center;
173
174
  justify-content: center;
174
- padding: 0 var(--density-space-sm);
175
+ padding: 0 var(--icen-density-space-sm);
175
176
  border: none;
176
177
  background: transparent;
177
178
  cursor: pointer;
178
- color: var(--token-text-muted);
179
- font-size: var(--density-font-size-md);
179
+ color: var(--icen-token-text-muted);
180
+ font-size: var(--icen-density-font-size-md);
180
181
  font-weight: 600;
181
182
  -webkit-tap-highlight-color: transparent;
182
183
  transition:
183
184
  background-color var(--icen-tx-fast),
184
185
  color var(--icen-tx-fast);
185
186
  }
186
- .stepper-btn:hover:not(:disabled) {
187
- background: var(--token-control-hover);
188
- color: var(--token-text);
187
+ .icen-stepper-btn:hover:not(:disabled) {
188
+ background: var(--icen-token-control-hover);
189
+ color: var(--icen-token-text);
189
190
  }
190
- .stepper-btn:focus-visible {
191
+ .icen-stepper-btn:focus-visible {
191
192
  outline: none;
192
193
  box-shadow: var(--icen-ring-inset);
193
194
  }
194
- .stepper-btn:disabled,
195
- .stepper-btn[aria-disabled='true'] {
195
+ .icen-stepper-btn:disabled,
196
+ .icen-stepper-btn[aria-disabled='true'] {
196
197
  opacity: var(--icen-disabled-opacity);
197
198
  cursor: not-allowed;
198
199
  }
199
200
 
200
- .stepper-input {
201
+ .icen-stepper-input {
201
202
  width: 56px;
202
- padding: var(--density-space-sm) 0;
203
+ padding: var(--icen-density-space-sm) 0;
203
204
  text-align: center;
204
205
  font-variant-numeric: tabular-nums;
205
206
  background: transparent;
206
207
  outline: none;
207
208
  border: none;
208
- border-left: 1px solid var(--token-outline-soft);
209
- border-right: 1px solid var(--token-outline-soft);
210
- color: var(--token-text);
209
+ border-inline-start: 1px solid var(--icen-token-outline-soft);
210
+ border-inline-end: 1px solid var(--icen-token-outline-soft);
211
+ color: var(--icen-token-text);
211
212
  font: inherit;
212
- font-size: var(--density-font-size-md);
213
+ font-size: var(--icen-density-font-size-md);
213
214
  }
214
- /* 隐藏原生 number 箭头(± 交给 .stepper-btn) */
215
- .stepper-input::-webkit-outer-spin-button,
216
- .stepper-input::-webkit-inner-spin-button {
215
+ /* 隐藏原生 number 箭头(± 交给 .icen-stepper-btn) */
216
+ .icen-stepper-input::-webkit-outer-spin-button,
217
+ .icen-stepper-input::-webkit-inner-spin-button {
217
218
  -webkit-appearance: none;
218
219
  margin: 0;
219
220
  }
220
- .stepper-input[type='number'] {
221
+ .icen-stepper-input[type='number'] {
221
222
  -moz-appearance: textfield;
222
223
  appearance: textfield;
223
224
  }
224
225
 
225
226
  /* ── OTP 验证码单元格 ── */
226
- .otp {
227
+ .icen-otp {
227
228
  display: inline-flex;
228
229
  align-items: center;
229
- gap: var(--density-space-sm);
230
+ gap: var(--icen-density-space-sm);
230
231
  }
231
- .otp-cell {
232
+ .icen-otp-cell {
232
233
  width: 40px;
233
234
  height: 48px;
234
235
  padding: 0;
235
236
  text-align: center;
236
- font-size: var(--density-font-size-xl);
237
+ font-size: var(--icen-density-font-size-xl);
237
238
  font-weight: 600;
238
- font-family: var(--font-mono);
239
- color: var(--token-text);
240
- background: var(--token-control);
241
- border: 1px solid var(--token-outline-soft);
242
- border-radius: var(--radius-md);
239
+ font-family: var(--icen-font-mono);
240
+ color: var(--icen-token-text);
241
+ background: var(--icen-token-control);
242
+ border: 1px solid var(--icen-token-outline-soft);
243
+ border-radius: var(--icen-radius-md);
243
244
  outline: none;
244
245
  transition:
245
246
  border-color var(--icen-tx-fast),
246
247
  box-shadow var(--icen-tx-fast);
247
248
  }
248
- .otp-cell:hover {
249
+ .icen-otp-cell:hover {
249
250
  border-color: var(--icen-hover-border);
250
251
  }
251
- .otp-cell:focus-visible {
252
+ .icen-otp-cell:focus-visible {
252
253
  border-color: var(--icen-control-focus-border);
253
254
  box-shadow: var(--icen-control-focus-shadow);
254
255
  }
255
- .otp-cell.is-filled {
256
- border-color: var(--token-accent);
257
- background: var(--token-accent-subtle);
256
+ .icen-otp-cell.is-filled {
257
+ border-color: var(--icen-token-accent);
258
+ background: var(--icen-token-accent-subtle);
258
259
  }
259
- .otp-cell:disabled,
260
- .otp-cell[aria-disabled='true'] {
260
+ .icen-otp-cell:disabled,
261
+ .icen-otp-cell[aria-disabled='true'] {
261
262
  opacity: var(--icen-disabled-opacity);
262
263
  cursor: not-allowed;
263
264
  }
264
- .otp--sm .otp-cell { width: 32px; height: 40px; font-size: var(--density-font-size-lg); }
265
- .otp--lg .otp-cell { width: 48px; height: 56px; font-size: var(--density-font-size-2xl); }
265
+ .icen-otp--sm .icen-otp-cell { width: 32px; height: 40px; font-size: var(--icen-density-font-size-lg); }
266
+ .icen-otp--lg .icen-otp-cell { width: 48px; height: 56px; font-size: var(--icen-density-font-size-2xl); }
266
267
 
267
268
  @media (prefers-reduced-motion: reduce) {
268
- .segmented-item, .toggle-item, .stepper-btn, .stepper, .otp-cell { transition: none; }
269
+ .icen-segmented-item, .icen-toggle-item, .icen-stepper-btn, .icen-stepper, .icen-otp-cell { transition: none; }
269
270
  }
270
271
 
271
272
  /* ── 增强 ── */
272
273
 
273
274
  /* 全宽分段(每项等宽) */
274
- .segmented--block,
275
- .toggle-group--block {
275
+ .icen-segmented--block,
276
+ .icen-toggle-group--block {
276
277
  display: flex;
277
- width: 100%;
278
+ inline-size: 100%;
278
279
  }
279
- .segmented--block .segmented-item,
280
- .toggle-group--block .toggle-item {
280
+ .icen-segmented--block .icen-segmented-item,
281
+ .icen-toggle-group--block .icen-toggle-item {
281
282
  flex: 1;
282
283
  justify-content: center;
283
284
  }
284
285
 
285
286
  /* 分段底色变体(幽灵底,用于次要分组) */
286
- .segmented--ghost,
287
- .toggle-group--ghost {
287
+ .icen-segmented--ghost,
288
+ .icen-toggle-group--ghost {
288
289
  background: transparent;
289
290
  border-color: transparent;
290
291
  box-shadow: none;
291
292
  }
292
- .segmented--ghost .segmented-item.is-active,
293
- .toggle-group--ghost .toggle-item.is-active {
294
- background: var(--token-fill-2);
295
- color: var(--token-text);
293
+ .icen-segmented--ghost .icen-segmented-item.is-active,
294
+ .icen-toggle-group--ghost .icen-toggle-item.is-active {
295
+ background: var(--icen-token-fill-2);
296
+ color: var(--icen-token-text);
296
297
  box-shadow: none;
297
298
  }
298
299
 
299
300
  /* 分段错误态 */
300
- .segmented.is-error,
301
- .toggle-group.is-error {
302
- border-color: var(--token-error);
301
+ .icen-segmented.is-error,
302
+ .icen-toggle-group.is-error {
303
+ border-color: var(--icen-token-error);
303
304
  }
304
305
 
305
306
  /* 分段禁用整体 */
306
- .segmented.is-disabled,
307
- .toggle-group.is-disabled {
307
+ .icen-segmented.is-disabled,
308
+ .icen-toggle-group.is-disabled {
308
309
  opacity: var(--icen-disabled-opacity);
309
310
  pointer-events: none;
310
311
  }
311
312
 
312
313
  /* 步进器带单位后缀 */
313
- .stepper-unit {
314
+ .icen-stepper-unit {
314
315
  display: inline-flex;
315
316
  align-items: center;
316
- padding-right: var(--density-space-sm);
317
- color: var(--token-text-faint);
317
+ padding-inline-end: var(--icen-density-space-sm);
318
+ color: var(--icen-token-text-faint);
318
319
  font-size: 0.85em;
319
320
  }
320
321
 
321
322
  /* OTP 分组分隔符(如 4-4 分两组时中间加横线) */
322
- .otp-separator {
323
+ .icen-otp-separator {
323
324
  display: inline-flex;
324
325
  align-items: center;
325
- padding: 0 var(--density-space-xs);
326
- color: var(--token-text-faint);
327
- font-size: var(--density-font-size-lg);
326
+ padding: 0 var(--icen-density-space-xs);
327
+ color: var(--icen-token-text-faint);
328
+ font-size: var(--icen-density-font-size-lg);
328
329
  font-weight: 300;
329
330
  }
330
331
 
331
332
  /* OTP 错误态 */
332
- .otp.is-error .otp-cell { border-color: var(--token-error); }
333
- .otp.is-error .otp-cell.is-filled {
334
- background: var(--token-error-muted);
335
- border-color: var(--token-error);
333
+ .icen-otp.is-error .icen-otp-cell { border-color: var(--icen-token-error); }
334
+ .icen-otp.is-error .icen-otp-cell.is-filled {
335
+ background: var(--icen-token-error-muted);
336
+ border-color: var(--icen-token-error);
336
337
  }
337
338
 
338
339
  /* OTP 完成(全部填满)态 */
339
- .otp.is-complete .otp-cell {
340
- border-color: var(--token-success);
340
+ .icen-otp.is-complete .icen-otp-cell {
341
+ border-color: var(--icen-token-success);
341
342
  }
342
- .otp.is-complete .otp-cell.is-filled {
343
- background: color-mix(in srgb, var(--token-success) 8%, transparent);
343
+ .icen-otp.is-complete .icen-otp-cell.is-filled {
344
+ background: color-mix(in srgb, var(--icen-token-success) 8%, transparent);
345
+ }
346
+
344
347
  }