@icen.ai/ui 0.9.0 → 0.11.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 (431) hide show
  1. package/AGENTS.md +82 -254
  2. package/LICENSE +21 -0
  3. package/README.md +60 -96
  4. package/dist/base.css +258 -188
  5. package/dist/behaviors/accordion.mjs +8 -8
  6. package/dist/behaviors/ai-branch.d.mts +1 -1
  7. package/dist/behaviors/ai-branch.mjs +1011 -94
  8. package/dist/behaviors/ai-chat.d.mts +9 -9
  9. package/dist/behaviors/ai-chat.mjs +1122 -169
  10. package/dist/behaviors/ai-composer.d.mts +47 -15
  11. package/dist/behaviors/ai-composer.mjs +2018 -534
  12. package/dist/behaviors/ai-core.d.mts +1 -1
  13. package/dist/behaviors/ai-core.mjs +1017 -107
  14. package/dist/behaviors/ai-diff.mjs +1020 -127
  15. package/dist/behaviors/ai-feedback.d.mts +1 -1
  16. package/dist/behaviors/ai-feedback.mjs +1036 -126
  17. package/dist/behaviors/ai-panel.d.mts +10 -10
  18. package/dist/behaviors/ai-panel.mjs +1285 -266
  19. package/dist/behaviors/ai-provider.d.mts +1 -1
  20. package/dist/behaviors/ai-provider.mjs +1004 -101
  21. package/dist/behaviors/ai-threads.d.mts +1 -1
  22. package/dist/behaviors/ai-threads.mjs +1069 -154
  23. package/dist/behaviors/ai-tool.d.mts +3 -3
  24. package/dist/behaviors/ai-tool.mjs +2087 -413
  25. package/dist/behaviors/ai-tools.d.mts +89 -16
  26. package/dist/behaviors/ai-tools.mjs +5365 -380
  27. package/dist/behaviors/autocomplete.d.mts +53 -0
  28. package/dist/behaviors/autocomplete.mjs +1601 -0
  29. package/dist/behaviors/back-top.d.mts +1 -1
  30. package/dist/behaviors/back-top.mjs +952 -14
  31. package/dist/behaviors/carousel.d.mts +1 -1
  32. package/dist/behaviors/carousel.mjs +914 -12
  33. package/dist/behaviors/cascader.d.mts +48 -0
  34. package/dist/behaviors/cascader.mjs +1867 -0
  35. package/dist/behaviors/charts.d.mts +72 -8
  36. package/dist/behaviors/charts.mjs +1953 -272
  37. package/dist/behaviors/code-block.d.mts +36 -0
  38. package/dist/behaviors/code-block.mjs +1619 -0
  39. package/dist/behaviors/command-palette.d.mts +9 -6
  40. package/dist/behaviors/command-palette.mjs +164 -62
  41. package/dist/behaviors/context-menu.d.mts +10 -9
  42. package/dist/behaviors/context-menu.mjs +1113 -44
  43. package/dist/behaviors/controls.d.mts +21 -21
  44. package/dist/behaviors/controls.mjs +1024 -134
  45. package/dist/behaviors/copy.d.mts +21 -2
  46. package/dist/behaviors/copy.mjs +1207 -42
  47. package/dist/behaviors/datatable.d.mts +55 -5
  48. package/dist/behaviors/datatable.mjs +2033 -212
  49. package/dist/behaviors/date-picker.d.mts +0 -1
  50. package/dist/behaviors/date-picker.mjs +1341 -293
  51. package/dist/behaviors/design.d.mts +54 -0
  52. package/dist/behaviors/design.mjs +109 -0
  53. package/dist/behaviors/dropdown.d.mts +5 -6
  54. package/dist/behaviors/dropdown.mjs +262 -110
  55. package/dist/behaviors/events.d.mts +127 -10
  56. package/dist/behaviors/events.mjs +58 -3
  57. package/dist/behaviors/feedback.d.mts +30 -0
  58. package/dist/behaviors/feedback.mjs +296 -0
  59. package/dist/behaviors/focus.d.mts +8 -0
  60. package/dist/behaviors/focus.mjs +24 -0
  61. package/dist/behaviors/form-validate.d.mts +111 -0
  62. package/dist/behaviors/form-validate.mjs +1746 -0
  63. package/dist/behaviors/i18n.d.mts +790 -0
  64. package/dist/behaviors/i18n.mjs +1713 -0
  65. package/dist/behaviors/icons.d.mts +93 -0
  66. package/dist/behaviors/icons.mjs +113 -0
  67. package/dist/behaviors/input.d.mts +9 -1
  68. package/dist/behaviors/input.mjs +1059 -60
  69. package/dist/behaviors/kb-access.d.mts +3 -3
  70. package/dist/behaviors/kb-access.mjs +2135 -239
  71. package/dist/behaviors/kb-acl.d.mts +8 -8
  72. package/dist/behaviors/kb-acl.mjs +1120 -179
  73. package/dist/behaviors/kb-answer.d.mts +2 -2
  74. package/dist/behaviors/kb-answer.mjs +2120 -435
  75. package/dist/behaviors/kb-audit.d.mts +3 -3
  76. package/dist/behaviors/kb-audit.mjs +1077 -154
  77. package/dist/behaviors/kb-canvas.d.mts +3 -3
  78. package/dist/behaviors/kb-canvas.mjs +1101 -177
  79. package/dist/behaviors/kb-chain.d.mts +2 -2
  80. package/dist/behaviors/kb-chain.mjs +1023 -100
  81. package/dist/behaviors/kb-checkpoint.d.mts +3 -3
  82. package/dist/behaviors/kb-checkpoint.mjs +1320 -169
  83. package/dist/behaviors/kb-chunks.d.mts +2 -2
  84. package/dist/behaviors/kb-chunks.mjs +1153 -213
  85. package/dist/behaviors/kb-citation.d.mts +3 -3
  86. package/dist/behaviors/kb-citation.mjs +1221 -185
  87. package/dist/behaviors/kb-clarify.d.mts +2 -2
  88. package/dist/behaviors/kb-clarify.mjs +1059 -130
  89. package/dist/behaviors/kb-conflict.d.mts +2 -2
  90. package/dist/behaviors/kb-conflict.mjs +1042 -119
  91. package/dist/behaviors/kb-connector.d.mts +2 -2
  92. package/dist/behaviors/kb-connector.mjs +1105 -176
  93. package/dist/behaviors/kb-core.d.mts +7 -2
  94. package/dist/behaviors/kb-core.mjs +1078 -162
  95. package/dist/behaviors/kb-eval.d.mts +2 -2
  96. package/dist/behaviors/kb-eval.mjs +1977 -144
  97. package/dist/behaviors/kb-explain.d.mts +3 -3
  98. package/dist/behaviors/kb-explain.mjs +1037 -104
  99. package/dist/behaviors/kb-filter.d.mts +2 -2
  100. package/dist/behaviors/kb-filter.mjs +2014 -178
  101. package/dist/behaviors/kb-gap.d.mts +3 -3
  102. package/dist/behaviors/kb-gap.mjs +1044 -121
  103. package/dist/behaviors/kb-hittest.d.mts +3 -3
  104. package/dist/behaviors/kb-hittest.mjs +1095 -151
  105. package/dist/behaviors/kb-metadata.mjs +1058 -130
  106. package/dist/behaviors/kb-passage.d.mts +4 -4
  107. package/dist/behaviors/kb-passage.mjs +1102 -161
  108. package/dist/behaviors/kb-pipeline.d.mts +4 -4
  109. package/dist/behaviors/kb-pipeline.mjs +1083 -162
  110. package/dist/behaviors/kb-qa.mjs +1089 -160
  111. package/dist/behaviors/kb-rerank.d.mts +2 -2
  112. package/dist/behaviors/kb-rerank.mjs +1048 -114
  113. package/dist/behaviors/kb-retrieval.d.mts +2 -2
  114. package/dist/behaviors/kb-retrieval.mjs +2079 -226
  115. package/dist/behaviors/kb-review.d.mts +2 -2
  116. package/dist/behaviors/kb-review.mjs +1996 -159
  117. package/dist/behaviors/kb-sandbox.d.mts +3 -3
  118. package/dist/behaviors/kb-sandbox.mjs +1033 -105
  119. package/dist/behaviors/kb-segment.d.mts +2 -2
  120. package/dist/behaviors/kb-segment.mjs +1112 -179
  121. package/dist/behaviors/kb-select.d.mts +24 -0
  122. package/dist/behaviors/kb-select.mjs +1995 -0
  123. package/dist/behaviors/kb-sources.d.mts +3 -3
  124. package/dist/behaviors/kb-sources.mjs +1085 -170
  125. package/dist/behaviors/kb-sql.d.mts +3 -3
  126. package/dist/behaviors/kb-sql.mjs +1144 -226
  127. package/dist/behaviors/kb-trace.d.mts +3 -3
  128. package/dist/behaviors/kb-trace.mjs +1051 -131
  129. package/dist/behaviors/kb-visibility.d.mts +2 -2
  130. package/dist/behaviors/kb-visibility.mjs +1087 -158
  131. package/dist/behaviors/kb-who-can.d.mts +2 -2
  132. package/dist/behaviors/kb-who-can.mjs +1980 -137
  133. package/dist/behaviors/mentions.d.mts +93 -0
  134. package/dist/behaviors/mentions.mjs +2153 -0
  135. package/dist/behaviors/modal.d.mts +4 -3
  136. package/dist/behaviors/modal.mjs +1056 -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 +1629 -268
  141. package/dist/behaviors/panel.d.mts +4 -0
  142. package/dist/behaviors/panel.mjs +995 -0
  143. package/dist/behaviors/popover.d.mts +28 -5
  144. package/dist/behaviors/popover.mjs +225 -24
  145. package/dist/behaviors/scroll-area.d.mts +17 -0
  146. package/dist/behaviors/scroll-area.mjs +59 -0
  147. package/dist/behaviors/select.d.mts +5 -2
  148. package/dist/behaviors/select.mjs +1416 -117
  149. package/dist/behaviors/sidebar.d.mts +1 -1
  150. package/dist/behaviors/sidebar.mjs +13 -13
  151. package/dist/behaviors/slider.d.mts +1 -1
  152. package/dist/behaviors/slider.mjs +12 -12
  153. package/dist/behaviors/split-pane.d.mts +1 -1
  154. package/dist/behaviors/split-pane.mjs +9 -7
  155. package/dist/behaviors/suggestions.d.mts +27 -0
  156. package/dist/behaviors/suggestions.mjs +1090 -0
  157. package/dist/behaviors/svg-parse.d.mts +14 -0
  158. package/dist/behaviors/svg-parse.mjs +37 -0
  159. package/dist/behaviors/tabs.d.mts +2 -2
  160. package/dist/behaviors/tabs.mjs +35 -25
  161. package/dist/behaviors/tag-input.d.mts +23 -5
  162. package/dist/behaviors/tag-input.mjs +1360 -104
  163. package/dist/behaviors/theme-switcher.d.mts +24 -0
  164. package/dist/behaviors/theme-switcher.mjs +1996 -0
  165. package/dist/behaviors/theme.d.mts +15 -8
  166. package/dist/behaviors/theme.mjs +406 -30
  167. package/dist/behaviors/toast.d.mts +24 -25
  168. package/dist/behaviors/toast.mjs +1267 -88
  169. package/dist/behaviors/tooltip.d.mts +4 -0
  170. package/dist/behaviors/tooltip.mjs +378 -0
  171. package/dist/behaviors/tree-select.d.mts +69 -0
  172. package/dist/behaviors/tree-select.mjs +1921 -0
  173. package/dist/behaviors/tree.d.mts +1 -1
  174. package/dist/behaviors/tree.mjs +18 -18
  175. package/dist/behaviors/upload.d.mts +3 -2
  176. package/dist/behaviors/upload.mjs +1077 -66
  177. package/dist/behaviors/url-safety.d.mts +8 -0
  178. package/dist/behaviors/url-safety.mjs +11 -0
  179. package/dist/cli.mjs +5 -6
  180. package/dist/components/accordion.d.mts +2 -0
  181. package/dist/components/ai-branch.d.mts +2 -0
  182. package/dist/components/ai-chat.css +682 -582
  183. package/dist/components/ai-chat.d.mts +2 -0
  184. package/dist/components/ai-composer.d.mts +2 -0
  185. package/dist/components/ai-context.d.mts +2 -0
  186. package/dist/components/ai-context.mjs +1 -0
  187. package/dist/components/ai-diff.css +153 -132
  188. package/dist/components/ai-diff.d.mts +2 -0
  189. package/dist/components/ai-feedback.d.mts +2 -0
  190. package/dist/components/ai-files.d.mts +2 -0
  191. package/dist/components/ai-message.d.mts +2 -0
  192. package/dist/components/ai-panel.css +353 -343
  193. package/dist/components/ai-reasoning.d.mts +2 -0
  194. package/dist/components/ai-subagent.d.mts +2 -0
  195. package/dist/components/ai-subagent.mjs +1 -0
  196. package/dist/components/ai-threads.d.mts +2 -0
  197. package/dist/components/ai-todo.d.mts +2 -0
  198. package/dist/components/ai-todo.mjs +1 -0
  199. package/dist/components/ai-tool-call.d.mts +2 -0
  200. package/dist/components/ai-tool-call.mjs +1 -0
  201. package/dist/components/ai-tool.css +397 -242
  202. package/dist/components/ai-usage.d.mts +2 -0
  203. package/dist/components/alert.d.mts +2 -0
  204. package/dist/components/autocomplete.css +61 -0
  205. package/dist/components/autocomplete.d.mts +2 -0
  206. package/dist/components/autocomplete.mjs +3 -0
  207. package/dist/components/avatar.d.mts +2 -0
  208. package/dist/components/back-top.css +74 -40
  209. package/dist/components/back-top.d.mts +2 -0
  210. package/dist/components/badge.css +44 -41
  211. package/dist/components/badge.d.mts +2 -0
  212. package/dist/components/breadcrumb.css +85 -46
  213. package/dist/components/breadcrumb.d.mts +2 -0
  214. package/dist/components/btn.css +105 -94
  215. package/dist/components/btn.d.mts +2 -0
  216. package/dist/components/card.css +124 -113
  217. package/dist/components/card.d.mts +2 -0
  218. package/dist/components/carousel.d.mts +2 -0
  219. package/dist/components/cascader.css +332 -0
  220. package/dist/components/cascader.d.mts +2 -0
  221. package/dist/components/cascader.mjs +3 -0
  222. package/dist/components/chart-area.css +54 -2
  223. package/dist/components/chart-area.d.mts +2 -0
  224. package/dist/components/chart-bar.css +147 -38
  225. package/dist/components/chart-bar.d.mts +2 -0
  226. package/dist/components/chart-calendar.d.mts +2 -0
  227. package/dist/components/chart-gauge.css +36 -13
  228. package/dist/components/chart-gauge.d.mts +2 -0
  229. package/dist/components/chart-graph.css +35 -20
  230. package/dist/components/chart-graph.d.mts +2 -0
  231. package/dist/components/chart-heatmap.css +67 -39
  232. package/dist/components/chart-heatmap.d.mts +2 -0
  233. package/dist/components/chart-line.css +62 -3
  234. package/dist/components/chart-line.d.mts +2 -0
  235. package/dist/components/chart-map.d.mts +2 -0
  236. package/dist/components/chart-pie.css +38 -6
  237. package/dist/components/chart-pie.d.mts +2 -0
  238. package/dist/components/chart-radar.css +57 -5
  239. package/dist/components/chart-radar.d.mts +2 -0
  240. package/dist/components/chart-scatter.css +47 -7
  241. package/dist/components/chart-scatter.d.mts +2 -0
  242. package/dist/components/chart-sparkline.css +25 -2
  243. package/dist/components/chart-sparkline.d.mts +2 -0
  244. package/dist/components/chart-stack.css +27 -13
  245. package/dist/components/chart-stack.d.mts +2 -0
  246. package/dist/components/charts.css +220 -84
  247. package/dist/components/charts.d.mts +2 -0
  248. package/dist/components/code-block.css +420 -0
  249. package/dist/components/code-block.d.mts +2 -0
  250. package/dist/components/code-block.mjs +4 -0
  251. package/dist/components/command-palette.css +150 -122
  252. package/dist/components/command-palette.d.mts +2 -0
  253. package/dist/components/content.css +274 -263
  254. package/dist/components/context-menu.d.mts +2 -0
  255. package/dist/components/copy.css +73 -45
  256. package/dist/components/copy.d.mts +2 -0
  257. package/dist/components/datatable.css +457 -202
  258. package/dist/components/datatable.d.mts +2 -0
  259. package/dist/components/date-picker.css +136 -105
  260. package/dist/components/date-picker.d.mts +2 -0
  261. package/dist/components/desc.d.mts +2 -0
  262. package/dist/components/dropdown.d.mts +2 -0
  263. package/dist/components/empty.css +72 -69
  264. package/dist/components/empty.d.mts +2 -0
  265. package/dist/components/feedback.css +211 -191
  266. package/dist/components/form-validate.css +134 -0
  267. package/dist/components/form-validate.d.mts +2 -0
  268. package/dist/components/form-validate.mjs +3 -0
  269. package/dist/components/form.css +157 -131
  270. package/dist/components/form.d.mts +2 -0
  271. package/dist/components/icon.css +113 -0
  272. package/dist/components/icon.d.mts +2 -0
  273. package/dist/components/icon.mjs +3 -0
  274. package/dist/components/input.css +163 -108
  275. package/dist/components/input.d.mts +2 -0
  276. package/dist/components/kb-access.d.mts +2 -0
  277. package/dist/components/kb-acl.d.mts +2 -0
  278. package/dist/components/kb-agent.css +300 -206
  279. package/dist/components/kb-answer.d.mts +2 -0
  280. package/dist/components/kb-audit.d.mts +2 -0
  281. package/dist/components/kb-canvas.d.mts +2 -0
  282. package/dist/components/kb-chain.d.mts +2 -0
  283. package/dist/components/kb-checkpoint.d.mts +2 -0
  284. package/dist/components/kb-chunks.d.mts +2 -0
  285. package/dist/components/kb-citation.d.mts +2 -0
  286. package/dist/components/kb-clarify.d.mts +2 -0
  287. package/dist/components/kb-conflict.d.mts +2 -0
  288. package/dist/components/kb-connector.d.mts +2 -0
  289. package/dist/components/kb-data.css +431 -315
  290. package/dist/components/kb-eval.d.mts +2 -0
  291. package/dist/components/kb-explain.d.mts +2 -0
  292. package/dist/components/kb-filter.d.mts +2 -0
  293. package/dist/components/kb-gap.d.mts +2 -0
  294. package/dist/components/kb-ground.css +333 -229
  295. package/dist/components/kb-hittest.d.mts +2 -0
  296. package/dist/components/kb-ingest.css +613 -434
  297. package/dist/components/kb-metadata.d.mts +2 -0
  298. package/dist/components/kb-ops.css +422 -302
  299. package/dist/components/kb-passage.d.mts +2 -0
  300. package/dist/components/kb-perm.css +374 -314
  301. package/dist/components/kb-pipeline.d.mts +2 -0
  302. package/dist/components/kb-qa.d.mts +2 -0
  303. package/dist/components/kb-rerank.d.mts +2 -0
  304. package/dist/components/kb-retrieval.d.mts +2 -0
  305. package/dist/components/kb-review.d.mts +2 -0
  306. package/dist/components/kb-sandbox.d.mts +2 -0
  307. package/dist/components/kb-search.css +653 -459
  308. package/dist/components/kb-segment.d.mts +2 -0
  309. package/dist/components/kb-sources.d.mts +2 -0
  310. package/dist/components/kb-sql.d.mts +2 -0
  311. package/dist/components/kb-trace.d.mts +2 -0
  312. package/dist/components/kb-visibility.d.mts +2 -0
  313. package/dist/components/kb-who-can.d.mts +2 -0
  314. package/dist/components/kb.css +170 -135
  315. package/dist/components/kb.d.mts +2 -0
  316. package/dist/components/kbd.d.mts +2 -0
  317. package/dist/components/layout.css +86 -83
  318. package/dist/components/layout.d.mts +2 -0
  319. package/dist/components/list.d.mts +2 -0
  320. package/dist/components/material-chinese.css +83 -0
  321. package/dist/components/material-soviet.css +86 -0
  322. package/dist/components/material.css +318 -0
  323. package/dist/components/media-card.d.mts +2 -0
  324. package/dist/components/media.css +225 -176
  325. package/dist/components/mentions.css +190 -0
  326. package/dist/components/mentions.d.mts +2 -0
  327. package/dist/components/mentions.mjs +3 -0
  328. package/dist/components/menu.css +121 -109
  329. package/dist/components/modal.css +116 -118
  330. package/dist/components/modal.d.mts +2 -0
  331. package/dist/components/nav.css +136 -129
  332. package/dist/components/nav.d.mts +2 -0
  333. package/dist/components/notification.css +247 -177
  334. package/dist/components/notification.d.mts +2 -0
  335. package/dist/components/pagination.css +62 -57
  336. package/dist/components/pagination.d.mts +2 -0
  337. package/dist/components/panel.css +70 -68
  338. package/dist/components/panel.d.mts +2 -0
  339. package/dist/components/panel.mjs +1 -0
  340. package/dist/components/pill.css +83 -72
  341. package/dist/components/pill.d.mts +2 -0
  342. package/dist/components/popover.css +80 -57
  343. package/dist/components/popover.d.mts +2 -0
  344. package/dist/components/progress.d.mts +2 -0
  345. package/dist/components/rating.d.mts +2 -0
  346. package/dist/components/result.d.mts +2 -0
  347. package/dist/components/scroll-area.css +29 -54
  348. package/dist/components/scroll-area.d.mts +2 -0
  349. package/dist/components/scroll-area.mjs +1 -0
  350. package/dist/components/segmented.css +167 -146
  351. package/dist/components/segmented.d.mts +2 -0
  352. package/dist/components/select.css +250 -191
  353. package/dist/components/select.d.mts +2 -0
  354. package/dist/components/sidebar.css +157 -143
  355. package/dist/components/sidebar.d.mts +2 -0
  356. package/dist/components/skeleton.d.mts +2 -0
  357. package/dist/components/slider.css +135 -128
  358. package/dist/components/slider.d.mts +2 -0
  359. package/dist/components/spinner.d.mts +2 -0
  360. package/dist/components/split-pane.css +120 -108
  361. package/dist/components/split-pane.d.mts +2 -0
  362. package/dist/components/stat.css +116 -109
  363. package/dist/components/stat.d.mts +2 -0
  364. package/dist/components/steps.css +114 -108
  365. package/dist/components/steps.d.mts +2 -0
  366. package/dist/components/switch.css +192 -149
  367. package/dist/components/switch.d.mts +2 -0
  368. package/dist/components/table.css +158 -112
  369. package/dist/components/table.d.mts +2 -0
  370. package/dist/components/tabs.css +143 -116
  371. package/dist/components/tabs.d.mts +2 -0
  372. package/dist/components/tag-input.css +52 -133
  373. package/dist/components/tag-input.d.mts +2 -0
  374. package/dist/components/tag.css +90 -72
  375. package/dist/components/tag.d.mts +2 -0
  376. package/dist/components/theme-switcher.css +105 -0
  377. package/dist/components/theme-switcher.d.mts +2 -0
  378. package/dist/components/theme-switcher.mjs +3 -0
  379. package/dist/components/timeline.d.mts +2 -0
  380. package/dist/components/toast.css +115 -97
  381. package/dist/components/toast.d.mts +2 -0
  382. package/dist/components/toolbar.css +47 -43
  383. package/dist/components/toolbar.d.mts +2 -0
  384. package/dist/components/tooltip.css +103 -43
  385. package/dist/components/tooltip.d.mts +2 -0
  386. package/dist/components/tooltip.mjs +1 -0
  387. package/dist/components/tree-select.css +439 -0
  388. package/dist/components/tree-select.d.mts +2 -0
  389. package/dist/components/tree-select.mjs +3 -0
  390. package/dist/components/tree.d.mts +2 -0
  391. package/dist/components/upload.css +138 -97
  392. package/dist/components/upload.d.mts +2 -0
  393. package/dist/fonts/LICENSES/ark-pixel/OFL.txt +96 -0
  394. package/dist/fonts/LICENSES/cubic-11/OFL.txt +108 -0
  395. package/dist/fonts/LICENSES/galmuri/LICENSE.txt +93 -0
  396. package/dist/fonts/OFL.txt +96 -0
  397. package/dist/fonts/README.md +14 -0
  398. package/dist/fonts/fusion-pixel-12px-zh-hans.woff2 +0 -0
  399. package/dist/index.d.mts +85 -70
  400. package/dist/index.mjs +17330 -5773
  401. package/dist/react.d.mts +91 -0
  402. package/dist/react.mjs +8307 -0
  403. package/dist/registry.json +918 -70
  404. package/dist/tokens/chinese.css +44 -0
  405. package/dist/tokens/colors.css +371 -1222
  406. package/dist/tokens/design.css +209 -0
  407. package/dist/tokens/dtcg.json +15926 -0
  408. package/dist/tokens/figma.variables.json +10779 -0
  409. package/dist/tokens/icon-masks.css +78 -0
  410. package/dist/tokens/pixel.css +53 -0
  411. package/dist/tokens/scrollbars.css +40 -0
  412. package/dist/tokens/soviet.css +44 -0
  413. package/dist/tokens/style-profiles.css +36 -547
  414. package/dist/tokens/themes.json +308 -0
  415. package/dist/tokens/tokens-studio.json +11648 -0
  416. package/dist/tokens/typography.css +21 -18
  417. package/dist/tokens.css +1783 -1806
  418. package/dist/ui.css +14796 -10750
  419. package/dist/vue.d.mts +344 -0
  420. package/dist/vue.mjs +7876 -0
  421. package/docs/spec/ai-input-experience.md +75 -0
  422. package/docs/spec/ai-native.md +238 -147
  423. package/docs/spec/design-philosophy.md +189 -0
  424. package/docs/spec/design-primitives.md +196 -0
  425. package/docs/spec/kb-family.md +147 -115
  426. package/docs/spec/scrollbars.md +46 -0
  427. package/package.json +56 -8
  428. package/dist/retro-effects.css +0 -255
  429. package/dist/tokens/retro-effects.css +0 -255
  430. package/docs/research/2026-10-03-ai-kb-components.md +0 -392
  431. package/docs/research/2026-10-03-kb-permissions.md +0 -992
@@ -1,227 +1,237 @@
1
+ @layer icen.components {
1
2
  /*
2
3
  * @icen.ai/ui — Component: content(内容展示族)
3
4
  *
4
5
  * 包含:kbd(按键)/ code-inline(行内代码)/ list(分隔列表)/ accordion(手风琴,behaviors/accordion 配套)/
5
6
  * timeline(时间线)/ desc(描述列表)/ tree(树形,behaviors/tree 配套)
6
7
  * markup API 变体(正文"增强"段,behavior 不产出、由手写 markup 消费):
7
- * .accordion--cards / .code-inline--success|--warning|--error /
8
- * .timeline--right|--alternate|--sm / .timeline-extra / .timeline-dot--sm 及 dot 语义色(--error 等)
8
+ * .icen-accordion--cards / .icen-code-inline--success|--warning|--error /
9
+ * .icen-timeline--right|--alternate|--sm / .icen-timeline-extra / .icen-timeline-dot--sm 及 dot 语义色(--error 等)
9
10
  * 规格源自 opengal src/presentation/ui/data/exhibit.tsx 与 data/display.tsx。
10
11
  */
11
12
 
12
13
  /* ══════════════ kbd · 按键 ══════════════ */
13
- .kbd {
14
+ .icen-kbd {
14
15
  display: inline-flex;
15
16
  align-items: center;
16
17
  justify-content: center;
17
18
  vertical-align: middle;
18
- font-family: var(--font-mono);
19
+ font-family: var(--icen-font-mono);
19
20
  font-weight: 500;
20
- border-radius: var(--radius-xs);
21
- border: 1px solid var(--token-outline);
22
- background: var(--token-control);
23
- color: var(--token-text-muted);
24
- box-shadow: var(--token-shadow-inset);
25
- height: 20px;
26
- min-width: 20px;
27
- padding: 0 var(--density-space-xs);
28
- font-size: var(--density-font-size-xs);
29
- }
30
- .kbd--sm {
21
+ border-radius: var(--icen-radius-xs);
22
+ border: 1px solid var(--icen-token-control-border);
23
+ background: var(--icen-token-control);
24
+ color: var(--icen-token-text-muted);
25
+ box-shadow: 0 1px 0 var(--icen-token-control-border);
26
+ height: 19px;
27
+ min-width: 19px;
28
+ padding: 0 5px;
29
+ font-size: var(--icen-density-font-size-xs);
30
+ }
31
+ .icen-kbd--sm {
31
32
  height: 16px;
32
33
  min-width: 16px;
33
34
  padding: 0 4px;
34
- font-size: var(--density-font-size-2xs);
35
+ font-size: var(--icen-density-font-size-2xs);
35
36
  }
36
- .kbd-group {
37
+ .icen-kbd-group {
37
38
  display: inline-flex;
38
39
  align-items: center;
39
40
  gap: 2px;
40
- font-family: var(--font-mono);
41
- font-size: var(--density-font-size-xs);
42
- color: var(--token-text-muted);
41
+ font-family: var(--icen-font-mono);
42
+ font-size: var(--icen-density-font-size-xs);
43
+ color: var(--icen-token-text-muted);
43
44
  }
44
- .kbd-group .kbd { font-size: inherit; }
45
+ .icen-kbd-group .icen-kbd { font-size: inherit; }
45
46
 
46
47
  /* ══════════════ code-inline · 行内代码 ══════════════ */
47
- .code-inline {
48
- padding: 2px var(--density-space-xs);
49
- border-radius: var(--radius-xs);
50
- background: var(--token-control);
51
- border: 1px solid var(--token-outline-soft);
48
+ .icen-code-inline {
49
+ padding: 2px var(--icen-density-space-xs);
50
+ border-radius: var(--icen-radius-xs);
51
+ background: var(--icen-token-control);
52
+ border: 1px solid var(--icen-token-separator-soft);
52
53
  font-size: 0.9em;
53
- font-family: var(--font-mono);
54
- color: var(--token-accent);
54
+ font-family: var(--icen-font-mono);
55
+ color: var(--icen-token-accent-text);
55
56
  word-break: break-word;
56
57
  }
57
58
 
58
59
  /* ══════════════ list · 分隔列表 ══════════════
59
- * DOM:<ul class="list [list--hover|list--compact]"><li class="list-item">…</li></ul>
60
+ * DOM:<ul class="icen-list [list--hover|icen-list--compact]"><li class="icen-list-item">…</li></ul>
60
61
  * list--hover:每项 hover 浮起(默认有 hover);
61
62
  * list--compact:缩小 padding。
62
63
  */
63
- .list {
64
+ .icen-list {
64
65
  list-style: none;
65
66
  margin: 0;
66
67
  padding: 0;
67
68
  }
68
- .list-item {
69
- padding: var(--density-space-sm);
70
- border-radius: var(--radius-sm);
69
+ .icen-list-item {
70
+ min-block-size: var(--icen-control-height-sm);
71
+ padding: 4px var(--icen-density-space-sm);
72
+ border-radius: var(--icen-radius-xs);
71
73
  transition: background-color var(--icen-tx-fast);
72
74
  }
73
- .list-item:hover { background: var(--token-control-hover); }
74
- .list .list-item + .list-item { border-top: 1px solid var(--token-outline-soft); }
75
- .list--compact .list-item { padding: var(--density-space-xs) var(--density-space-sm); }
75
+ .icen-list-item:hover { background: var(--icen-token-fill-hover); }
76
+ .icen-list .icen-list-item + .icen-list-item { border-top: 1px solid var(--icen-token-separator-soft); }
77
+ .icen-list--compact .icen-list-item { padding: 2px var(--icen-density-space-sm); }
76
78
 
77
79
  /* ══════════════ accordion · 手风琴(behaviors/accordion 配套) ══════════════
78
80
  * DOM:
79
- * <div class="accordion" data-single?>
80
- * <div class="accordion-item [.is-open] [.is-disabled]">
81
- * <button class="accordion-trigger" aria-expanded="true">标题 <svg class="accordion-chevron"/></button>
82
- * <div class="accordion-panel"><div class="accordion-panel-inner">内容</div></div>
81
+ * <div class="accordion" data-icen-single?>
82
+ * <div class="icen-accordion-item [.is-open] [.is-disabled]">
83
+ * <button class="icen-accordion-trigger" aria-expanded="true">标题 <svg class="icen-accordion-chevron"/></button>
84
+ * <div class="icen-accordion-panel"><div class="icen-accordion-panel-inner">内容</div></div>
83
85
  * </div>
84
86
  * </div>
85
87
  * 展开 = item 挂 .is-open;panel 用 grid-template-rows 0fr→1fr 做过渡。
86
- * data-single:展开一项自动收起其余(behavior 实现)。
88
+ * data-icen-single:展开一项自动收起其余(behavior 实现)。
87
89
  */
88
- .accordion-item {
89
- border-bottom: 1px solid var(--token-outline-soft);
90
+ .icen-accordion-item {
91
+ border-bottom: 1px solid var(--icen-token-separator-soft);
90
92
  }
91
- .accordion-item:last-child { border-bottom: 0; }
92
- .accordion-trigger {
93
+ .icen-accordion-item:last-child { border-bottom: 0; }
94
+ .icen-accordion-trigger {
93
95
  width: 100%;
94
96
  display: flex;
95
97
  align-items: center;
96
98
  justify-content: space-between;
97
- gap: var(--density-space-sm);
98
- padding: var(--density-space-sm);
99
- font-size: var(--density-font-size-md);
100
- font-weight: 500;
101
- color: var(--token-text);
102
- text-align: left;
99
+ gap: var(--icen-density-space-sm);
100
+ min-block-size: 32px;
101
+ padding: 5px var(--icen-density-space-sm);
102
+ font-size: var(--icen-font-size-control);
103
+ font-weight: var(--icen-font-weight-control);
104
+ color: var(--icen-token-text);
105
+ text-align: start;
103
106
  background: none;
104
107
  border: 0;
105
108
  cursor: pointer;
106
- border-radius: var(--radius-sm);
109
+ border-radius: var(--icen-radius-xs);
107
110
  transition: background-color var(--icen-tx-fast);
108
111
  }
109
- .accordion-trigger:hover {
110
- background: var(--token-control-hover);
112
+ .icen-accordion-trigger:hover {
113
+ background: var(--icen-token-fill-hover);
111
114
  }
112
- .accordion-trigger:focus-visible {
115
+ .icen-accordion-trigger:focus-visible {
113
116
  outline: none;
114
117
  box-shadow: var(--icen-ring);
115
118
  }
116
- .accordion-item.is-disabled .accordion-trigger,
117
- .accordion-item[aria-disabled='true'] .accordion-trigger {
119
+ .icen-accordion-item.is-disabled .icen-accordion-trigger,
120
+ .icen-accordion-item[aria-disabled='true'] .icen-accordion-trigger {
118
121
  opacity: var(--icen-disabled-opacity);
119
122
  cursor: not-allowed;
120
123
  pointer-events: none;
121
124
  }
122
- .accordion-chevron {
125
+ .icen-accordion-chevron {
123
126
  width: 14px;
124
127
  height: 14px;
125
128
  flex-shrink: 0;
126
- color: var(--token-text-faint);
129
+ color: var(--icen-token-text-faint);
127
130
  transition: transform var(--icen-tx-normal);
128
131
  }
129
- .accordion-item.is-open .accordion-chevron {
132
+ .icen-accordion-item.is-open .icen-accordion-chevron {
130
133
  transform: rotate(180deg);
131
134
  }
132
- .accordion-panel {
135
+ .icen-accordion-panel {
133
136
  display: grid;
134
137
  grid-template-rows: 0fr;
138
+ overflow: clip; /* 双保险:收起态任何残留内容都不许露出 */
135
139
  transition: grid-template-rows var(--icen-tx-normal);
136
140
  }
137
- .accordion-item.is-open .accordion-panel { grid-template-rows: 1fr; }
138
- .accordion-panel-inner {
141
+ .icen-accordion-item.is-open .icen-accordion-panel { grid-template-rows: 1fr; }
142
+ .icen-accordion-panel-inner {
139
143
  overflow: hidden;
140
144
  min-height: 0;
141
- padding: 0 var(--density-space-sm) var(--density-space-sm);
142
- font-size: var(--density-font-size-sm);
143
- color: var(--token-text-muted);
144
- line-height: 1.6;
145
+ /* 块距随开合动画:静态 padding-bottom 会成为 0fr 轨道的最小内容贡献,
146
+ 收起态露出首行文字上缘(内边距不被 overflow 裁切) */
147
+ padding: 0 var(--icen-density-space-sm);
148
+ padding-block-end: 0;
149
+ transition: padding-block-end var(--icen-tx-normal);
150
+ font-size: var(--icen-density-font-size-sm);
151
+ color: var(--icen-token-text-muted);
152
+ line-height: 1.55;
145
153
  }
154
+ .icen-accordion-item.is-open .icen-accordion-panel-inner { padding-block-end: var(--icen-density-space-sm); }
146
155
 
147
156
  /* 卡片式手风琴:整组包在带边框的卡片里 */
148
- .accordion--cards {
149
- border: 1px solid var(--token-outline-soft);
150
- border-radius: var(--radius-md);
157
+ .icen-accordion--cards {
158
+ border: 1px solid var(--icen-token-separator-soft);
159
+ border-radius: var(--icen-control-radius-lg);
151
160
  overflow: hidden;
152
161
  }
153
- .accordion--cards .accordion-item {
162
+ .icen-accordion--cards .icen-accordion-item {
154
163
  border-bottom: 0;
155
164
  }
156
- .accordion--cards .accordion-item + .accordion-item {
157
- border-top: 1px solid var(--token-outline-soft);
165
+ .icen-accordion--cards .icen-accordion-item + .icen-accordion-item {
166
+ border-top: 1px solid var(--icen-token-separator-soft);
158
167
  }
159
168
 
160
169
  /* ══════════════ timeline · 时间线 ══════════════
161
- * DOM:.timeline-item > .timeline-dot + .timeline-body
170
+ * DOM:.icen-timeline-item > .icen-timeline-dot + .icen-timeline-body
162
171
  * 连接线 = item::after(相对 item 绝对定位,从 dot 下方贯穿到下一项),末项不画。
163
172
  */
164
- .timeline {
173
+ .icen-timeline {
165
174
  display: flex;
166
175
  flex-direction: column;
167
176
  }
168
- .timeline-item {
177
+ .icen-timeline-item {
169
178
  position: relative;
170
179
  display: flex;
171
- gap: var(--density-space-sm);
172
- padding-bottom: var(--density-space-lg);
180
+ gap: var(--icen-density-space-sm);
181
+ padding-bottom: var(--icen-density-space-lg);
173
182
  }
174
- .timeline-item:last-child { padding-bottom: 0; }
175
- .timeline-item:not(:last-child)::after {
183
+ .icen-timeline-item:last-child { padding-bottom: 0; }
184
+ .icen-timeline-item:not(:last-child)::after {
176
185
  content: '';
177
186
  position: absolute;
178
- left: 13.5px; /* 28px dot 的水平中心 */
187
+ inset-inline-start: 13.5px; /* 28px dot 的水平中心(dot 在 flex 起始缘,RTL 自动镜像) */
179
188
  top: 32px;
180
189
  bottom: 0;
181
190
  width: 1px;
182
- background: var(--token-outline-soft);
191
+ background: var(--icen-token-separator);
183
192
  }
184
- .timeline-dot {
193
+ .icen-timeline-dot {
185
194
  width: 28px;
186
195
  height: 28px;
187
196
  flex-shrink: 0;
188
- border-radius: var(--radius-full);
197
+ border-radius: var(--icen-radius-full);
189
198
  display: flex;
190
199
  align-items: center;
191
200
  justify-content: center;
192
- background: var(--token-control);
193
- border: 1px solid var(--token-outline-soft);
194
- color: var(--token-text-muted);
201
+ background: var(--icen-token-surface);
202
+ border: 1px solid var(--icen-token-control-border);
203
+ color: var(--icen-token-text-muted);
195
204
  z-index: 1;
196
205
  }
197
- .timeline-dot svg { width: 13px; height: 13px; }
198
- .timeline-dot--accent { background: var(--token-accent); color: var(--token-on-accent); border-color: transparent; }
199
- .timeline-dot--success { background: var(--token-success); color: var(--token-on-accent); border-color: transparent; }
200
- .timeline-dot--warning { background: var(--token-warning); color: var(--token-on-accent); border-color: transparent; }
201
- .timeline-dot--error { background: var(--token-error); color: var(--token-on-accent); border-color: transparent; }
202
- .timeline-dot--info { background: var(--token-info); color: var(--token-on-accent); border-color: transparent; }
206
+ .icen-timeline-dot svg { width: 13px; height: 13px; }
207
+ .icen-timeline-dot--accent { background: var(--icen-token-accent-strong); color: var(--icen-token-on-accent); border-color: transparent; }
208
+ .icen-timeline-dot--success { background: var(--icen-token-success); color: var(--icen-token-on-accent); border-color: transparent; }
209
+ .icen-timeline-dot--warning { background: var(--icen-token-warning); color: var(--icen-token-on-accent); border-color: transparent; }
210
+ .icen-timeline-dot--error { background: var(--icen-token-error); color: var(--icen-token-on-accent); border-color: transparent; }
211
+ .icen-timeline-dot--info { background: var(--icen-token-info); color: var(--icen-token-on-accent); border-color: transparent; }
203
212
 
204
- .timeline-body { flex: 1; min-width: 0; }
205
- .timeline-head {
213
+ .icen-timeline-body { flex: 1; min-inline-size: 0; }
214
+ .icen-timeline-head {
206
215
  display: flex;
207
216
  align-items: center;
208
- gap: var(--density-space-sm);
217
+ gap: var(--icen-density-space-sm);
209
218
  }
210
- .timeline-title {
211
- font-size: var(--density-font-size-md);
212
- font-weight: 500;
213
- color: var(--token-text);
219
+ .icen-timeline-title {
220
+ font-size: var(--icen-font-size-control);
221
+ font-weight: var(--icen-font-weight-control);
222
+ color: var(--icen-token-text);
214
223
  }
215
- .timeline-time {
216
- font-size: var(--density-font-size-xs);
217
- color: var(--token-text-faint);
218
- margin-left: auto;
224
+ .icen-timeline-time {
225
+ font-size: var(--icen-density-font-size-xs);
226
+ color: var(--icen-token-text-muted);
227
+ margin-inline-start: auto;
219
228
  font-variant-numeric: tabular-nums;
229
+ letter-spacing: .01em;
220
230
  }
221
- .timeline-desc {
222
- font-size: var(--density-font-size-sm);
223
- color: var(--token-text-muted);
224
- margin: 4px 0 0;
231
+ .icen-timeline-desc {
232
+ font-size: var(--icen-density-font-size-sm);
233
+ color: var(--icen-token-text-muted);
234
+ margin: 3px 0 0;
225
235
  line-height: 1.5;
226
236
  }
227
237
 
@@ -229,96 +239,102 @@
229
239
  * 列数由容器 style="--desc-cols:N" 指定,默认 2;item 可用 style="--desc-span:N" 跨列。
230
240
  * --bordered 变体:gap:1px 露出容器底色形成格线。
231
241
  */
232
- .desc { display: flex; flex-direction: column; gap: var(--density-space-sm); }
233
- .desc-title {
234
- font-size: var(--density-font-size-md);
235
- font-weight: 500;
236
- color: var(--token-text);
242
+ .icen-desc { display: flex; flex-direction: column; gap: var(--icen-density-space-sm); }
243
+ .icen-desc-title {
244
+ font-size: var(--icen-font-size-title);
245
+ font-weight: var(--icen-font-weight-title);
246
+ color: var(--icen-token-text);
237
247
  margin: 0;
238
248
  }
239
- .desc-grid {
249
+ .icen-desc-grid {
240
250
  display: grid;
241
251
  grid-template-columns: repeat(var(--desc-cols, 2), minmax(0, 1fr));
242
252
  gap: 1px;
243
253
  margin: 0;
244
254
  }
245
- .desc--bordered .desc-grid {
246
- background: var(--token-outline-soft);
247
- border: 1px solid var(--token-outline-soft);
248
- border-radius: var(--radius-md);
255
+ .icen-desc--bordered .icen-desc-grid {
256
+ background: var(--icen-token-separator-soft);
257
+ border: 1px solid var(--icen-token-separator-soft);
258
+ border-radius: var(--icen-control-radius-lg);
249
259
  overflow: hidden;
250
260
  }
251
- .desc-item { grid-column: span var(--desc-span, 1); }
252
- .desc--bordered .desc-item {
253
- background: var(--token-card);
254
- padding: var(--density-space-sm) var(--density-space-md);
261
+ .icen-desc-item { grid-column: span var(--desc-span, 1); }
262
+ .icen-desc--bordered .icen-desc-item {
263
+ background: var(--icen-token-surface);
264
+ padding: 6px 10px;
255
265
  }
256
- .desc:not(.desc--bordered) .desc-item {
266
+ .icen-desc:not(.icen-desc--bordered) .icen-desc-item {
257
267
  display: flex;
258
268
  flex-direction: column;
259
269
  gap: 2px;
260
270
  }
261
- .desc-item dt {
262
- font-size: var(--density-font-size-xs);
263
- color: var(--token-text-faint);
271
+ .icen-desc-item dt {
272
+ font-size: var(--icen-density-font-size-xs);
273
+ color: var(--icen-token-text-muted);
264
274
  }
265
- .desc-item dd {
266
- font-size: var(--density-font-size-md);
267
- color: var(--token-text);
275
+ .icen-desc-item dd {
276
+ font-size: var(--icen-font-size-control);
277
+ color: var(--icen-token-text);
268
278
  margin: 0;
269
279
  line-height: 1.5;
270
280
  }
271
281
 
272
282
  @media (max-width: 640px) {
273
- .desc-grid { grid-template-columns: 1fr !important; }
283
+ .icen-desc-grid { grid-template-columns: 1fr !important; /* guard:allow-important 状态/守卫覆盖需压制变体优先级 */ }
274
284
  }
275
285
 
276
286
  /* ══════════════ tree · 树形(behaviors/tree 配套) ══════════════
277
287
  * DOM:
278
- * <ul class="tree"><li>
279
- * <div class="tree-node [.is-selected] [.is-disabled]" style="--depth:0">
280
- * <button class="tree-toggle [.is-collapsed]"><svg/></button>
281
- * <span class="tree-label">节点</span>
288
+ * <ul class="icen-tree"><li>
289
+ * <div class="icen-tree-node [.is-selected] [.is-disabled]" style="--depth:0">
290
+ * <button class="icen-tree-toggle [.is-collapsed]"><svg/></button>
291
+ * <span class="icen-tree-label">节点</span>
282
292
  * </div>
283
293
  * <ul>…子节点…</ul>
284
294
  * </li></ul>
285
295
  * 折叠 = toggle 挂 .is-collapsed(chevron 转 -90°)+ 子 ul hidden;选中 = node 挂 .is-selected。
286
296
  */
287
- .tree, .tree ul {
297
+ .icen-tree, .icen-tree ul {
288
298
  list-style: none;
289
299
  margin: 0;
290
300
  padding: 0;
291
301
  }
292
- .tree { user-select: none; }
293
- .tree-node {
302
+ .icen-tree { user-select: none; }
303
+ .icen-tree-node {
294
304
  display: flex;
295
305
  align-items: center;
296
- gap: var(--density-space-xs);
297
- padding: var(--density-space-xs) var(--density-space-sm) var(--density-space-xs) calc(4px + var(--depth, 0) * 14px);
298
- border-radius: var(--radius-sm);
299
- font-size: var(--density-font-size-md);
300
- color: var(--token-text);
306
+ gap: var(--icen-control-gap-sm);
307
+ /* 深度缩进沿 inline-start(RTL 下树向左侧生长) */
308
+ min-block-size: var(--icen-control-height-sm);
309
+ padding-block: 3px;
310
+ padding-inline: calc(4px + var(--depth, 0) * 14px) var(--icen-density-space-sm);
311
+ border-radius: var(--icen-radius-xs);
312
+ font-size: var(--icen-font-size-control);
313
+ color: var(--icen-token-text);
301
314
  cursor: pointer;
302
315
  transition: background-color var(--icen-tx-fast);
303
316
  }
304
- .tree-node:hover { background: var(--token-control-hover); }
305
- .tree-node:focus-visible,
306
- .tree-node:focus-within {
317
+ .icen-tree-node:hover { background: var(--icen-token-fill-hover); }
318
+ .icen-tree-node:focus-visible,
319
+ .icen-tree-node:focus-within {
307
320
  outline: none;
308
- box-shadow: var(--icen-ring);
321
+ box-shadow: var(--icen-ring-inset);
309
322
  }
310
- .tree-node.is-selected,
311
- .tree-node[aria-selected='true'] {
312
- background: var(--token-accent-subtle);
313
- color: var(--token-accent);
314
- font-weight: 500;
323
+ .icen-tree-node.is-selected,
324
+ .icen-tree-node[aria-selected='true'] {
325
+ background: var(--icen-token-fill-selected);
326
+ color: var(--icen-token-text);
327
+ font-weight: var(--icen-font-weight-control);
315
328
  }
316
- .tree-node.is-disabled,
317
- .tree-node[aria-disabled='true'] {
318
- opacity: var(--icen-disabled-opacity);
329
+ .icen-tree-node.is-disabled,
330
+ .icen-tree-node[aria-disabled='true'] {
319
331
  pointer-events: none;
320
332
  }
321
- .tree-toggle {
333
+ .icen-tree-node.is-disabled .icen-tree-label,
334
+ .icen-tree-node[aria-disabled='true'] .icen-tree-label {
335
+ color: var(--icen-token-text-muted); /* 禁用≠淡到不可读:不整行降透明(axe 会把透明度算进对比度),标签落 muted */
336
+ }
337
+ .icen-tree-toggle {
322
338
  width: 18px;
323
339
  height: 18px;
324
340
  flex-shrink: 0;
@@ -328,53 +344,53 @@
328
344
  padding: 0;
329
345
  border: 0;
330
346
  background: none;
331
- color: var(--token-text-muted);
347
+ color: var(--icen-token-text-muted);
332
348
  cursor: pointer;
333
349
  }
334
- .tree-toggle:hover { color: var(--token-text); }
335
- .tree-toggle:focus-visible {
350
+ .icen-tree-toggle:hover { color: var(--icen-token-text); }
351
+ .icen-tree-toggle:focus-visible {
336
352
  outline: none;
337
- border-radius: var(--radius-xs);
353
+ border-radius: var(--icen-radius-xs);
338
354
  box-shadow: var(--icen-ring);
339
355
  }
340
- .tree-toggle svg {
356
+ .icen-tree-toggle svg {
341
357
  width: 13px;
342
358
  height: 13px;
343
359
  transition: transform var(--icen-tx-fast);
344
360
  }
345
- .tree-toggle.is-collapsed svg { transform: rotate(-90deg); }
346
- .tree-toggle[aria-hidden='true'] { visibility: hidden; pointer-events: none; }
347
- .tree-label {
361
+ .icen-tree-toggle.is-collapsed svg { transform: rotate(-90deg); }
362
+ .icen-tree-toggle[aria-hidden='true'] { visibility: hidden; pointer-events: none; }
363
+ .icen-tree-label {
348
364
  flex: 1;
349
365
  min-width: 0;
350
366
  overflow: hidden;
351
367
  text-overflow: ellipsis;
352
368
  white-space: nowrap;
353
369
  }
354
- .tree-icon {
370
+ .icen-tree-icon {
355
371
  flex-shrink: 0;
356
- width: 14px;
357
- height: 14px;
358
- color: var(--token-text-muted);
372
+ width: 15px;
373
+ height: 15px;
374
+ color: var(--icen-token-text-muted);
359
375
  }
360
- .tree-node.is-selected .tree-icon { color: var(--token-accent); }
361
- .tree-badge {
376
+ .icen-tree-node.is-selected .icen-tree-icon { color: var(--icen-token-accent-strong); }
377
+ .icen-tree-badge {
362
378
  display: inline-flex;
363
379
  align-items: center;
364
380
  justify-content: center;
365
381
  min-width: 16px;
366
382
  height: 16px;
367
383
  padding: 0 4px;
368
- font-size: var(--density-font-size-2xs);
384
+ font-size: var(--icen-density-font-size-2xs);
369
385
  font-weight: 600;
370
- color: var(--token-on-accent);
371
- background: var(--token-accent);
372
- border-radius: var(--radius-full);
386
+ color: var(--icen-token-on-accent);
387
+ background: var(--icen-token-accent-strong);
388
+ border-radius: var(--icen-radius-full);
373
389
  flex-shrink: 0;
374
390
  }
375
391
 
376
392
  @media (prefers-reduced-motion: reduce) {
377
- .accordion-panel, .accordion-chevron, .tree-toggle svg, .list-item, .tree-node {
393
+ .icen-accordion-panel, .icen-accordion-chevron, .icen-tree-toggle svg, .icen-list-item, .icen-tree-node {
378
394
  transition: none;
379
395
  }
380
396
  }
@@ -382,196 +398,191 @@
382
398
  /* ── list 增强 ── */
383
399
 
384
400
  /* 列表项带前置图标/头像 */
385
- .list-item-leading {
401
+ .icen-list-item-leading {
386
402
  display: inline-flex;
387
403
  align-items: center;
388
404
  justify-content: center;
389
405
  flex-shrink: 0;
390
- margin-right: var(--density-space-sm);
406
+ margin-inline-end: var(--icen-density-space-sm);
391
407
  }
392
- .list-item-leading svg { width: 16px; height: 16px; color: var(--token-text-faint); }
393
- .list-item-content {
408
+ .icen-list-item-leading svg { width: 16px; height: 16px; color: var(--icen-token-text-faint); }
409
+ .icen-list-item-content {
394
410
  flex: 1;
395
- min-width: 0;
411
+ min-inline-size: 0;
396
412
  display: flex;
397
413
  flex-direction: column;
398
414
  gap: 1px;
399
415
  }
400
- .list-item-title {
401
- font-size: var(--density-font-size-md);
402
- color: var(--token-text);
416
+ .icen-list-item-title {
417
+ font-size: var(--icen-font-size-control);
418
+ color: var(--icen-token-text);
403
419
  overflow: hidden;
404
420
  text-overflow: ellipsis;
405
421
  white-space: nowrap;
406
422
  }
407
- .list-item-meta {
408
- font-size: var(--density-font-size-xs);
409
- color: var(--token-text-faint);
423
+ .icen-list-item-meta {
424
+ font-size: var(--icen-density-font-size-xs);
425
+ color: var(--icen-token-text-muted);
410
426
  }
411
- .list-item-trailing {
427
+ .icen-list-item-trailing {
412
428
  flex-shrink: 0;
413
- margin-left: var(--density-space-sm);
414
- font-size: var(--density-font-size-xs);
415
- color: var(--token-text-faint);
429
+ margin-inline-start: var(--icen-density-space-sm);
430
+ font-size: var(--icen-density-font-size-xs);
431
+ color: var(--icen-token-text-faint);
416
432
  }
417
- .list-item--selectable {
433
+ .icen-list-item--selectable {
418
434
  cursor: pointer;
419
435
  }
420
- .list-item.is-selected {
421
- background: var(--token-accent-subtle);
436
+ .icen-list-item.is-selected {
437
+ background: var(--icen-token-fill-selected);
422
438
  }
423
- .list-item.is-selected .list-item-title { color: var(--token-accent); font-weight: 500; }
439
+ .icen-list-item.is-selected .icen-list-item-title { color: var(--icen-token-text); font-weight: var(--icen-font-weight-control); }
424
440
 
425
441
  /* 列表项 flex 布局(leading + content + trailing) */
426
- .list-item--flex {
442
+ .icen-list-item--flex {
427
443
  display: flex;
428
444
  align-items: center;
429
445
  }
430
446
 
431
447
  /* 斑马列表 */
432
- .list--striped .list-item:nth-child(odd) {
433
- background: color-mix(in srgb, var(--token-bg-soft) 40%, transparent);
448
+ .icen-list--striped .icen-list-item:nth-child(odd) {
449
+ background: color-mix(in srgb, var(--icen-token-bg-soft) 40%, transparent);
434
450
  }
435
451
 
436
452
  /* ── timeline 增强 ── */
437
453
 
438
- /* 右侧时间线(dot 在右) */
439
- .timeline--right .timeline-item { flex-direction: row-reverse; }
440
- .timeline--right .timeline-item:not(:last-child)::after {
441
- left: auto;
442
- right: 13.5px;
454
+ /* 右侧时间线(物理变体:dot 固定在右,RTL 语义不变) */
455
+ .icen-timeline--right .icen-timeline-item { flex-direction: row-reverse; }
456
+ .icen-timeline--right .icen-timeline-item:not(:last-child)::after {
457
+ left: auto; /* guard:allow-physical --right 是按物理侧命名的变体 */
458
+ right: 13.5px; /* guard:allow-physical --right 是按物理侧命名的变体 */
443
459
  }
444
- .timeline--right .timeline-body { text-align: right; }
445
- .timeline--right .timeline-time { margin-left: 0; margin-right: auto; }
460
+ .icen-timeline--right .icen-timeline-body { text-align: right; /* guard:allow-physical --right 物理变体:正文贴物理右侧 */ }
461
+ .icen-timeline--right .icen-timeline-time { margin-left: 0; /* guard:allow-physical --right 物理变体 */ margin-right: auto; /* guard:allow-physical --right 物理变体 */ }
446
462
 
447
- /* 交替时间线(奇左偶右) */
448
- .timeline--alternate .timeline-item:nth-child(even) { flex-direction: row-reverse; }
449
- .timeline--alternate .timeline-item:nth-child(even):not(:last-child)::after {
450
- left: auto; right: 13.5px;
463
+ /* 交替时间线(奇物理左偶物理右,变体名即物理侧约定) */
464
+ .icen-timeline--alternate .icen-timeline-item:nth-child(even) { flex-direction: row-reverse; }
465
+ .icen-timeline--alternate .icen-timeline-item:nth-child(even):not(:last-child)::after {
466
+ left: auto; /* guard:allow-physical --alternate 偶数项钉在物理右侧 */
467
+ right: 13.5px; /* guard:allow-physical --alternate 偶数项钉在物理右侧 */
451
468
  }
452
- .timeline--alternate .timeline-item:nth-child(even) .timeline-body { text-align: right; }
453
- .timeline--alternate .timeline-item:nth-child(even) .timeline-time {
454
- margin-left: 0; margin-right: auto;
469
+ .icen-timeline--alternate .icen-timeline-item:nth-child(even) .icen-timeline-body { text-align: right; /* guard:allow-physical --alternate 偶数项正文贴物理右侧 */ }
470
+ .icen-timeline--alternate .icen-timeline-item:nth-child(even) .icen-timeline-time {
471
+ margin-left: 0; /* guard:allow-physical --alternate 偶数项 */
472
+ margin-right: auto; /* guard:allow-physical --alternate 偶数项 */
455
473
  }
456
474
 
457
475
  /* 自定义 dot 尺寸 */
458
- .timeline-dot--sm { width: 20px; height: 20px; }
459
- .timeline-dot--sm svg { width: 10px; height: 10px; }
460
- .timeline--sm .timeline-item:not(:last-child)::after { left: 10px; top: 24px; }
476
+ .icen-timeline-dot--sm { width: 20px; height: 20px; }
477
+ .icen-timeline-dot--sm svg { width: 10px; height: 10px; }
478
+ .icen-timeline--sm .icen-timeline-item:not(:last-child)::after { inset-inline-start: 10px; top: 24px; }
461
479
 
462
480
  /* 时间线自定义内容槽(放标签、卡片等) */
463
- .timeline-extra {
464
- margin-top: var(--density-space-xs);
465
- padding: var(--density-space-sm);
466
- background: var(--token-bg-soft);
467
- border-radius: var(--radius-sm);
468
- font-size: var(--density-font-size-sm);
481
+ .icen-timeline-extra {
482
+ margin-top: var(--icen-density-space-xs);
483
+ padding: var(--icen-density-space-sm);
484
+ background: var(--icen-token-surface-chrome);
485
+ border: 1px solid var(--icen-token-separator-soft);
486
+ border-radius: var(--icen-radius-xs);
487
+ font-size: var(--icen-density-font-size-sm);
469
488
  }
470
489
 
471
490
  /* ── desc 增强 ── */
472
491
 
473
492
  /* 行内描述(label: value 在同一行) */
474
- .desc--inline .desc-item {
493
+ .icen-desc--inline .icen-desc-item {
475
494
  display: flex;
476
495
  align-items: baseline;
477
- gap: var(--density-space-sm);
496
+ gap: var(--icen-density-space-sm);
478
497
  padding: 4px 0;
479
498
  }
480
- .desc--inline .desc-item dt {
499
+ .icen-desc--inline .icen-desc-item dt {
481
500
  flex-shrink: 0;
482
- min-width: 80px;
501
+ min-inline-size: 80px;
483
502
  }
484
- .desc--inline .desc-item dd {
503
+ .icen-desc--inline .icen-desc-item dd {
485
504
  flex: 1;
486
505
  }
487
506
 
488
507
  /* 垂直描述(label 在上,value 在下) */
489
- .desc--vertical .desc-item {
508
+ .icen-desc--vertical .icen-desc-item {
490
509
  display: flex;
491
510
  flex-direction: column;
492
511
  gap: 2px;
493
512
  }
494
513
 
495
514
  /* 可复制描述值 */
496
- .desc-copy {
515
+ .icen-desc-copy {
497
516
  display: inline-flex;
498
517
  align-items: center;
499
- gap: var(--density-space-xs);
518
+ gap: var(--icen-density-space-xs);
500
519
  }
501
- .desc-copy-btn {
520
+ .icen-desc-copy-btn {
502
521
  display: inline-flex;
503
522
  align-items: center;
504
523
  padding: 2px;
505
524
  border: 0;
506
- border-radius: var(--radius-xs);
525
+ border-radius: var(--icen-radius-xs);
507
526
  background: transparent;
508
- color: var(--token-text-faint);
527
+ color: var(--icen-token-text-faint);
509
528
  cursor: pointer;
510
529
  transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast);
511
530
  }
512
- .desc-copy-btn:hover { color: var(--token-accent); background: var(--token-fill-1); }
513
- .desc-copy-btn svg { width: 12px; height: 12px; }
531
+ .icen-desc-copy-btn:hover { color: var(--icen-token-accent); background: var(--icen-token-fill-1); }
532
+ .icen-desc-copy-btn svg { width: 12px; height: 12px; }
514
533
 
515
534
  /* ── tree 增强 ── */
516
535
 
517
- /* 带连接线的树 */
518
- .tree--lined ul {
536
+ /* 带连接线的树(连接线沿 inline-start 侧缩进,RTL 自动镜像) */
537
+ .icen-tree--lined ul {
519
538
  position: relative;
520
- margin-left: 7px;
521
- padding-left: 0;
522
- border-left: 1px solid var(--token-outline-soft);
539
+ margin-inline-start: 7px;
540
+ padding-inline-start: 0;
541
+ border-inline-start: 1px solid var(--icen-token-separator-soft);
523
542
  }
524
- .tree--lined .tree-node {
543
+ .icen-tree--lined .icen-tree-node {
525
544
  position: relative;
526
545
  }
527
- .tree--lined ul > li > .tree-node::before {
546
+ .icen-tree--lined ul > li > .icen-tree-node::before {
528
547
  content: '';
529
548
  position: absolute;
530
- left: -8px;
549
+ inset-inline-start: -8px;
531
550
  top: 50%;
532
551
  width: 8px;
533
552
  height: 1px;
534
- background: var(--token-outline-soft);
553
+ background: var(--icen-token-outline-soft);
535
554
  }
536
555
 
537
556
  /* 树搜索高亮 */
538
- .tree-label mark {
539
- background: color-mix(in srgb, var(--token-warning) 30%, transparent);
557
+ .icen-tree-label mark {
558
+ background: color-mix(in srgb, var(--icen-token-warning) 30%, transparent);
540
559
  color: inherit;
541
- border-radius: 2px;
560
+ border-radius: 2px; /* guard:allow-radius 微构件(bar/dot/track/指示器等图形级,不属容器圆角面) */
542
561
  padding: 0 1px;
543
562
  }
544
563
 
545
564
  /* ── kbd 增强 ── */
546
565
 
547
566
  /* 大号 kbd(展示用) */
548
- .kbd--lg {
567
+ .icen-kbd--lg {
549
568
  height: 28px;
550
569
  min-width: 28px;
551
- padding: 0 var(--density-space-sm);
552
- font-size: var(--density-font-size-md);
570
+ padding: 0 var(--icen-density-space-sm);
571
+ font-size: var(--icen-density-font-size-md);
553
572
  }
554
573
 
555
574
  /* kbd 按下态(动画反馈) */
556
- .kbd.is-pressed {
575
+ .icen-kbd.is-pressed {
557
576
  transform: translateY(1px);
558
577
  box-shadow: none;
559
578
  }
560
579
 
561
580
  /* ── code-inline 增强 ── */
562
- .code-inline--success { color: var(--token-success); }
563
- .code-inline--warning { color: var(--token-warning); }
564
- .code-inline--error { color: var(--token-error); }
565
-
566
- /* 代码块(多行,非行内) */
567
- .code-block {
568
- padding: var(--density-space-sm) var(--density-space-md);
569
- background: var(--token-bg-soft);
570
- border: 1px solid var(--token-outline-soft);
571
- border-radius: var(--radius-md);
572
- font-family: var(--font-mono);
573
- font-size: var(--density-font-size-sm);
574
- color: var(--token-text);
575
- overflow-x: auto;
576
- line-height: 1.6;
581
+ .icen-code-inline--success { color: var(--icen-token-success); }
582
+ .icen-code-inline--warning { color: var(--icen-token-warning); }
583
+ .icen-code-inline--error { color: var(--icen-token-error); }
584
+
585
+ /* 代码块(多行,非行内):由独立组件 code-block.css 承担(标题栏/行号/折叠/diff/
586
+ * shiki 协同),本文件不再承载 .icen-code-block 样式。 */
587
+
577
588
  }