@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,6 +1,7 @@
1
+ @layer icen.components {
1
2
  /*
2
3
  * @icen.ai/ui — kb-agent.css(工作台域:kb-canvas / kb-checkpoint / kb-sandbox / kb-chain)
3
- * 共享原语在 kb.css(.kb-num/.kb-dot/.kb-key/kb-pulse 等,全部 kb-* slug 经 EXTRA_CSS 引入);
4
+ * 共享原语在 kb.css(.icen-kb-num/.icen-kb-dot/.icen-kb-key/kb-pulse 等,全部 kb-* slug 经 EXTRA_CSS 引入);
4
5
  * 本文件只做本域专属结构。DOM 契约见 docs/spec/kb-family.md §5.23–5.26 与各 behavior 头注释。
5
6
  *
6
7
  * 域纪律(spec §2):工作台域的运动感来自动效(120–240ms ease-out),不来自颜色——
@@ -11,15 +12,15 @@
11
12
 
12
13
  /* ═══════════════ kb-canvas 双栏工作台(§5.23) ═══════════════ */
13
14
 
14
- .kb-canvas {
15
+ .icen-kb-canvas {
15
16
  --kb-canvas-ratio: 0.42; /* JS 拖拽时原位覆写(0–1,无单位) */
16
- position: relative; /* 划词工具条(.kb-canvas-selbar)的定位包含块 */
17
+ position: relative; /* 划词工具条(.icen-kb-canvas-selbar)的定位包含块 */
17
18
  display: flex;
18
19
  flex-direction: column;
19
20
  min-height: 320px;
20
21
  }
21
22
 
22
- .kb-canvas-main {
23
+ .icen-kb-canvas-main {
23
24
  display: grid;
24
25
  grid-template-columns:
25
26
  minmax(0, calc(var(--kb-canvas-ratio) * 100%))
@@ -29,8 +30,8 @@
29
30
  min-height: 0;
30
31
  }
31
32
 
32
- .kb-canvas-chat,
33
- .kb-canvas-doc {
33
+ .icen-kb-canvas-chat,
34
+ .icen-kb-canvas-doc {
34
35
  min-height: 0;
35
36
  min-width: 0;
36
37
  overflow-y: auto;
@@ -39,339 +40,367 @@
39
40
  }
40
41
 
41
42
  /* 分隔条:6px 命中区 + 中央 grip 视觉;hover/拖拽点亮 accent(唯一强调处) */
42
- .kb-canvas-divider {
43
+ .icen-kb-canvas-divider {
43
44
  position: relative;
44
45
  margin: 0;
45
46
  border: none;
46
- border-radius: 2px;
47
- background: var(--token-line-soft);
47
+ border-radius: 2px; /* guard:allow-radius 分隔条的图形圆角 */
48
+ background: var(--icen-token-line-soft);
48
49
  cursor: col-resize;
49
50
  touch-action: none; /* 拖拽需接管触摸滚动(指针事件 preventDefault 的对偶) */
50
- transition: background-color 0.16s ease-out;
51
+ transition: background-color var(--icen-tx-fast);
51
52
  }
52
- .kb-canvas-divider::after {
53
+ .icen-kb-canvas-divider::after {
53
54
  content: '';
54
55
  position: absolute;
55
- left: 50%;
56
+ left: 50%; /* guard:allow-physical 分隔条圆点居中(translate(-50%,-50%) 配套) */
56
57
  top: 50%;
57
58
  transform: translate(-50%, -50%);
58
59
  width: 2px;
59
60
  height: 18px;
60
- border-radius: 1px;
61
- background: var(--token-line);
62
- transition: background-color 0.16s ease-out;
61
+ border-radius: 1px; /* guard:allow-radius 拖动握柄的图形圆角 */
62
+ background: var(--icen-token-line);
63
+ transition: background-color var(--icen-tx-fast);
63
64
  }
64
- .kb-canvas-divider:hover,
65
- .kb-canvas-divider.is-active {
66
- background: color-mix(in srgb, var(--token-accent) 22%, transparent);
65
+ .icen-kb-canvas-divider:hover,
66
+ .icen-kb-canvas-divider.is-active {
67
+ background: color-mix(in srgb, var(--icen-token-accent) 22%, transparent);
67
68
  }
68
- .kb-canvas-divider:hover::after,
69
- .kb-canvas-divider.is-active::after {
70
- background: var(--token-accent);
69
+ .icen-kb-canvas-divider:hover::after,
70
+ .icen-kb-canvas-divider.is-active::after {
71
+ background: var(--icen-token-accent);
71
72
  }
72
- .kb-canvas-divider:focus-visible {
73
- outline: 2px solid var(--token-accent);
74
- outline-offset: -2px;
73
+ .icen-kb-canvas-divider:focus-visible {
74
+ outline: none;
75
+ box-shadow: var(--icen-ring);
75
76
  }
76
77
 
77
78
  /* 拖拽中:禁文本选择(防划词误触)+ 冻结两栏 hover 抖动 */
78
- .kb-canvas.is-dragging {
79
+ .icen-kb-canvas.is-dragging {
79
80
  user-select: none;
80
81
  }
81
- .kb-canvas.is-dragging .kb-canvas-chat,
82
- .kb-canvas.is-dragging .kb-canvas-doc {
82
+ .icen-kb-canvas.is-dragging .icen-kb-canvas-chat,
83
+ .icen-kb-canvas.is-dragging .icen-kb-canvas-doc {
83
84
  pointer-events: none;
84
85
  }
85
86
 
86
- /* 右栏内联 diff 间距(渲染复用 ai-diff.css 的 .ai-diff) */
87
- .kb-canvas-diff {
87
+ /* 右栏内联 diff 间距(渲染复用 ai-diff.css 的 .icen-ai-diff) */
88
+ .icen-kb-canvas-diff {
88
89
  margin-bottom: 12px;
89
90
  }
90
- .kb-canvas-diff:last-child {
91
+ .icen-kb-canvas-diff:last-child {
91
92
  margin-bottom: 0;
92
93
  }
93
94
 
94
95
  /* 底部版本时间轴:横向节点流;display:flex 会压掉 UA 的 [hidden],须显式声明 */
95
- .kb-canvas-versions {
96
+ .icen-kb-canvas-versions {
96
97
  display: flex;
97
98
  align-items: center;
98
99
  gap: 6px;
99
100
  flex: 0 0 auto;
100
101
  padding: 6px 10px;
101
- border-top: 1px solid var(--token-line-soft);
102
+ border-top: 1px solid var(--icen-token-line-soft);
102
103
  overflow-x: auto;
103
104
  }
104
- .kb-canvas-versions[hidden] {
105
+ .icen-kb-canvas-versions[hidden] {
105
106
  display: none;
106
107
  }
107
108
 
108
- .kb-canvas-ver {
109
+ .icen-kb-canvas-ver {
109
110
  display: inline-flex;
110
111
  align-items: center;
112
+ justify-content: center;
111
113
  gap: 6px;
112
114
  flex: 0 0 auto;
113
- padding: 2px 9px;
114
- border: 1px solid var(--token-line-soft);
115
- border-radius: 999px;
116
- background: var(--token-bg-soft);
115
+ min-block-size: 24px;
116
+ padding: 0 9px;
117
+ border: 1px solid var(--icen-token-line-soft);
118
+ border-radius: var(--icen-radius-full);
119
+ background: var(--icen-token-bg-soft);
117
120
  font: inherit;
118
- font-size: 11.5px;
119
- color: var(--token-text-muted);
121
+ font-size: var(--icen-font-size-caption);
122
+ line-height: 1;
123
+ color: var(--icen-token-text-muted);
120
124
  cursor: pointer;
121
- transition: color 0.16s ease-out, border-color 0.16s ease-out;
125
+ transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast), border-color var(--icen-tx-fast);
126
+ }
127
+ .icen-kb-canvas-ver:hover {
128
+ color: var(--icen-token-text);
129
+ border-color: var(--icen-token-line);
130
+ background: var(--icen-token-fill-hover);
122
131
  }
123
- .kb-canvas-ver:hover {
124
- color: var(--token-text);
125
- border-color: var(--token-line);
132
+ .icen-kb-canvas-ver:active {
133
+ background: var(--icen-token-fill-pressed);
126
134
  }
127
- .kb-canvas-ver:focus-visible {
128
- outline: 2px solid var(--token-accent);
129
- outline-offset: -2px;
135
+ .icen-kb-canvas-ver:focus-visible {
136
+ outline: none;
137
+ box-shadow: var(--icen-ring);
130
138
  }
131
- .kb-canvas-ver-dot {
139
+ .icen-kb-canvas-ver-dot {
132
140
  width: 6px;
133
141
  height: 6px;
134
142
  border-radius: 50%;
135
143
  flex: 0 0 auto;
136
- background: var(--token-text-faint);
137
- transition: background-color 0.16s ease-out;
144
+ background: var(--icen-token-text-faint);
145
+ transition: background-color var(--icen-tx-fast);
138
146
  }
139
- .kb-canvas-ver-label {
147
+ .icen-kb-canvas-ver-label {
148
+ color: var(--icen-token-text);
140
149
  max-width: 180px;
141
150
  overflow: hidden;
142
151
  text-overflow: ellipsis;
143
152
  white-space: nowrap;
144
153
  }
145
- /* current 高亮:点线同色 accent(语义=当前所在版本,非装饰) */
146
- .kb-canvas-ver.is-current {
147
- color: var(--token-accent);
148
- border-color: color-mix(in srgb, var(--token-accent) 45%, transparent);
154
+ /* current 高亮:点线同色 accent + 选中底色(语义=当前所在版本,非装饰) */
155
+ .icen-kb-canvas-ver.is-current {
156
+ color: var(--icen-token-accent-text);
157
+ border-color: color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
158
+ background: var(--icen-token-fill-selected);
149
159
  }
150
- .kb-canvas-ver.is-current .kb-canvas-ver-dot {
151
- background: var(--token-accent);
160
+ .icen-kb-canvas-ver.is-current .icen-kb-canvas-ver-dot {
161
+ background: var(--icen-token-accent);
152
162
  }
153
163
 
154
- /* 划词工具条:浮层三档材质(--z-panel 缺省回落 --z-popover);1.5s 无操作由 JS 隐藏 */
155
- .kb-canvas-selbar {
164
+ /* 划词工具条:浮层三档材质;1.5s 无操作由 JS 隐藏 */
165
+ .icen-kb-canvas-selbar {
156
166
  position: absolute;
157
- z-index: var(--z-panel, var(--z-popover));
167
+ z-index: var(--icen-z-popover);
158
168
  display: flex;
159
169
  gap: 2px;
160
170
  padding: 3px;
161
- border-radius: var(--radius-md, 10px);
162
- background: color-mix(in srgb, var(--token-card-strong, var(--token-bg)) 94%, transparent);
163
- border: 1px solid var(--token-outline, var(--token-line));
164
- box-shadow: var(--token-shadow-overlay, 0 8px 24px rgba(0, 0, 0, 0.14));
165
- animation: icen-pop-in var(--icen-tx-fast, 160ms) ease-out;
171
+ border-radius: var(--icen-radius-md);
172
+ background: var(--icen-token-surface-raised);
173
+ border: 1px solid var(--icen-token-line-soft);
174
+ box-shadow: var(--icen-token-shadow-elevated);
175
+ animation: icen-pop-in var(--icen-tx-fast);
166
176
  user-select: none;
167
177
  }
168
- .kb-canvas-selbar[hidden] {
178
+ .icen-kb-canvas-selbar[hidden] {
169
179
  display: none;
170
180
  }
171
- .kb-canvas-selbar-btn {
181
+ .icen-kb-canvas-selbar-btn {
182
+ display: inline-flex;
183
+ align-items: center;
184
+ justify-content: center;
185
+ min-block-size: 24px;
186
+ padding: 0 9px;
172
187
  border: none;
173
188
  background: none;
174
- border-radius: var(--radius-sm, 6px);
175
- padding: 3px 9px;
189
+ border-radius: var(--icen-radius-sm);
176
190
  font: inherit;
177
- font-size: 12px;
178
- color: var(--token-text-muted);
191
+ font-size: var(--icen-font-size-caption);
192
+ line-height: 1;
193
+ color: var(--icen-token-text-muted);
179
194
  cursor: pointer;
180
195
  white-space: nowrap;
181
- transition: color 0.16s ease-out, background-color 0.16s ease-out;
196
+ transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast);
197
+ }
198
+ .icen-kb-canvas-selbar-btn:hover {
199
+ color: var(--icen-token-text);
200
+ background: var(--icen-token-fill-hover);
182
201
  }
183
- .kb-canvas-selbar-btn:hover {
184
- color: var(--token-text);
185
- background: var(--token-bg-soft);
202
+ .icen-kb-canvas-selbar-btn:active {
203
+ background: var(--icen-token-fill-pressed);
186
204
  }
187
- .kb-canvas-selbar-btn:focus-visible {
188
- outline: 2px solid var(--token-accent);
189
- outline-offset: -2px;
205
+ .icen-kb-canvas-selbar-btn:focus-visible {
206
+ outline: none;
207
+ box-shadow: var(--icen-ring);
190
208
  }
191
209
 
192
210
  /* ═══════════════ kb-checkpoint 检查点(§5.24) ═══════════════ */
193
211
 
194
- .kb-checkpoints {
212
+ .icen-kb-checkpoints {
195
213
  display: flex;
196
214
  align-items: center;
197
215
  gap: 8px;
198
216
  flex-wrap: wrap;
199
217
  }
200
218
 
201
- .kb-checkpoint {
219
+ .icen-kb-checkpoint {
202
220
  display: inline-flex;
203
221
  align-items: center;
204
222
  gap: 6px;
205
- min-height: 28px;
206
- padding: 2px 10px;
207
- border: 1px solid var(--token-line-soft);
208
- border-radius: var(--radius-sm, 6px);
209
- background: var(--token-bg-soft);
223
+ min-height: var(--icen-density-item-height);
224
+ padding: 0 10px;
225
+ border: 1px solid var(--icen-token-line-soft);
226
+ border-radius: var(--icen-radius-sm);
227
+ background: var(--icen-token-bg-soft);
210
228
  font: inherit;
211
- font-size: 12px;
212
- color: var(--token-text-muted);
229
+ font-size: var(--icen-font-size-caption);
230
+ color: var(--icen-token-text-muted);
213
231
  cursor: pointer;
214
- transition: color 0.16s ease-out, border-color 0.16s ease-out;
232
+ transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast), border-color var(--icen-tx-fast);
233
+ }
234
+ .icen-kb-checkpoint:hover {
235
+ color: var(--icen-token-text);
236
+ border-color: var(--icen-token-line);
237
+ background: var(--icen-token-fill-hover);
215
238
  }
216
- .kb-checkpoint:hover {
217
- color: var(--token-text);
218
- border-color: var(--token-line);
239
+ .icen-kb-checkpoint:active {
240
+ background: var(--icen-token-fill-pressed);
219
241
  }
220
- .kb-checkpoint:focus-visible {
221
- outline: 2px solid var(--token-accent);
222
- outline-offset: -2px;
242
+ .icen-kb-checkpoint:focus-visible {
243
+ outline: none;
244
+ box-shadow: var(--icen-ring);
223
245
  }
224
- .kb-checkpoint-icon {
246
+ .icen-kb-checkpoint-icon {
225
247
  display: inline-flex;
226
- color: var(--token-text-faint);
248
+ color: var(--icen-token-text-faint);
227
249
  }
228
- .kb-checkpoint-icon svg {
250
+ .icen-kb-checkpoint-icon svg {
229
251
  width: 14px;
230
252
  height: 14px;
231
253
  }
232
- .kb-checkpoint-time {
233
- font-size: 11px;
254
+ .icen-kb-checkpoint-time {
255
+ font-size: var(--icen-density-font-size-xs);
234
256
  }
235
- .kb-checkpoint-label {
257
+ .icen-kb-checkpoint-label {
236
258
  max-width: 180px;
237
259
  overflow: hidden;
238
260
  text-overflow: ellipsis;
239
261
  white-space: nowrap;
240
262
  }
241
263
 
242
- /* 恢复菜单:fixed 浮层(body 挂载),160ms 进场;默认预选项带 ✓ 与审计说明 */
243
- .kb-checkpoint-menu {
264
+ /* 恢复菜单:复用浮层材质;选中范围用克制的内嵌表面表达。 */
265
+ .icen-kb-checkpoint-menu {
244
266
  position: fixed;
245
- z-index: var(--z-popover);
246
- min-width: 248px;
247
- max-width: 320px;
267
+ z-index: var(--icen-z-popover);
268
+ min-inline-size: min(248px, calc(100vw - 24px));
269
+ max-inline-size: min(320px, calc(100vw - 24px));
270
+ overflow: auto;
271
+ overscroll-behavior: contain;
248
272
  margin: 0;
249
273
  padding: 6px;
250
- background: color-mix(in srgb, var(--token-card-strong, var(--token-bg)) 94%, transparent);
251
- border: 1px solid var(--token-outline, var(--token-line));
252
- box-shadow: var(--token-shadow-overlay);
253
- border-radius: var(--radius-md, 10px);
254
- animation: icen-pop-in var(--icen-tx-fast, 160ms) ease-out;
255
- }
256
- .kb-checkpoint-menu-title {
257
- font-size: 11.5px;
258
- color: var(--token-text-faint);
274
+ background: var(--icen-token-surface-raised);
275
+ border: 1px solid var(--icen-token-line-soft);
276
+ box-shadow: var(--icen-token-shadow-elevated);
277
+ border-radius: var(--icen-radius-md);
278
+ animation: icen-pop-in var(--icen-tx-fast);
279
+ }
280
+ .icen-kb-checkpoint-menu-title {
281
+ font-size: var(--icen-density-font-size-xs);
282
+ letter-spacing: 0.3px;
283
+ color: var(--icen-token-text-faint);
259
284
  padding: 4px 8px 6px;
260
285
  }
261
- .kb-checkpoint-menu-item {
286
+ .icen-kb-checkpoint-menu-item {
262
287
  display: flex;
263
288
  align-items: flex-start;
264
289
  gap: 8px;
265
- width: 100%;
290
+ inline-size: 100%;
291
+ min-block-size: var(--icen-density-item-height);
266
292
  padding: 6px 8px;
267
293
  border: none;
268
294
  background: none;
269
- border-radius: var(--radius-sm, 6px);
295
+ border-radius: var(--icen-radius-xs);
270
296
  font: inherit;
271
- font-size: 12.5px;
272
- color: var(--token-text);
273
- text-align: left;
297
+ font-size: var(--icen-font-size-control);
298
+ color: var(--icen-token-text);
299
+ text-align: start;
274
300
  cursor: pointer;
275
- transition: background-color 0.16s ease-out;
301
+ transition: background-color var(--icen-tx-fast), color var(--icen-tx-fast);
302
+ }
303
+ .icen-kb-checkpoint-menu-item:hover {
304
+ background: var(--icen-token-fill-hover);
276
305
  }
277
- .kb-checkpoint-menu-item:hover {
278
- background: var(--token-bg-soft);
306
+ .icen-kb-checkpoint-menu-item:active {
307
+ background: var(--icen-token-fill-pressed);
279
308
  }
280
- .kb-checkpoint-menu-item:focus-visible {
281
- outline: 2px solid var(--token-accent);
282
- outline-offset: -2px;
309
+ .icen-kb-checkpoint-menu-item:focus-visible {
310
+ outline: none;
311
+ box-shadow: var(--icen-ring);
283
312
  }
284
- .kb-checkpoint-menu-item.is-disabled,
285
- .kb-checkpoint-menu-item:disabled {
286
- opacity: 0.45;
313
+ @media (pointer: coarse) {
314
+ .icen-kb-checkpoint-menu-item { min-block-size: 44px; }
315
+ }
316
+ .icen-kb-checkpoint-menu-item.is-disabled,
317
+ .icen-kb-checkpoint-menu-item:disabled {
318
+ opacity: var(--icen-disabled-opacity);
287
319
  cursor: not-allowed;
288
320
  }
289
- .kb-checkpoint-menu-item:disabled:hover {
321
+ .icen-kb-checkpoint-menu-item:disabled:hover {
290
322
  background: none;
291
323
  }
292
- .kb-checkpoint-menu-check {
324
+ .icen-kb-checkpoint-menu-check {
293
325
  flex: 0 0 14px;
294
326
  display: inline-flex;
295
327
  justify-content: center;
296
- color: var(--token-accent);
297
- font-size: 12px;
328
+ color: var(--icen-token-accent);
329
+ font-size: var(--icen-density-font-size-xs);
298
330
  line-height: 1.4;
299
331
  }
300
- .kb-checkpoint-menu-item.is-checked .kb-checkpoint-menu-check::before {
301
- content: '✓';
302
- }
303
- .kb-checkpoint-menu-main {
332
+ .icen-kb-checkpoint-menu-main {
304
333
  display: flex;
305
334
  flex-direction: column;
306
335
  gap: 2px;
307
336
  min-width: 0;
308
337
  }
309
- .kb-checkpoint-menu-note {
310
- font-size: 11px;
311
- color: var(--token-text-faint);
338
+ .icen-kb-checkpoint-menu-note {
339
+ font-size: var(--icen-density-font-size-xs);
340
+ color: var(--icen-token-text-faint);
312
341
  }
313
342
 
314
343
  /* ═══════════════ kb-sandbox 沙箱工具容器(§5.25) ═══════════════ */
315
344
 
316
- .kb-sandbox {
345
+ .icen-kb-sandbox {
317
346
  position: relative;
318
347
  display: block;
319
348
  }
320
349
 
321
- .kb-sandbox-stage {
350
+ .icen-kb-sandbox-stage {
322
351
  position: relative;
323
352
  aspect-ratio: 16 / 9;
324
353
  min-height: 320px;
325
- border: 1px solid var(--token-line-soft);
326
- border-radius: var(--radius-md, 10px);
354
+ border: 1px solid var(--icen-token-line-soft);
355
+ border-radius: var(--icen-radius-md);
327
356
  overflow: hidden;
328
- background: var(--token-bg);
357
+ background: var(--icen-token-bg);
329
358
  }
330
359
 
331
- .kb-sandbox-frame {
360
+ .icen-kb-sandbox-frame {
332
361
  display: block;
333
362
  width: 100%;
334
363
  height: 100%;
335
364
  border: 0;
336
365
  background: transparent;
337
366
  }
338
- .kb-sandbox[data-state='idle'] .kb-sandbox-frame {
367
+ .icen-kb-sandbox[data-icen-state='idle'] .icen-kb-sandbox-frame {
339
368
  display: none; /* 未 load 前不露空白帧 */
340
369
  }
341
370
 
342
- /* 三态由 data-state 驱动(纯 CSS 状态优先纪律);loading 走共享 icen-spin */
343
- .kb-sandbox-loading,
344
- .kb-sandbox-err {
371
+ /* 三态由 data-icen-state 驱动(纯 CSS 状态优先纪律);loading 走共享 icen-spin */
372
+ .icen-kb-sandbox-loading,
373
+ .icen-kb-sandbox-err {
345
374
  position: absolute;
346
375
  inset: 0;
347
376
  display: none;
348
377
  place-items: center;
349
378
  padding: 16px;
350
- background: var(--token-bg);
379
+ background: var(--icen-token-bg);
351
380
  }
352
- .kb-sandbox[data-state='loading'] .kb-sandbox-loading {
381
+ .icen-kb-sandbox[data-icen-state='loading'] .icen-kb-sandbox-loading {
353
382
  display: grid;
354
383
  }
355
- .kb-sandbox[data-state='error'] .kb-sandbox-err {
384
+ .icen-kb-sandbox[data-icen-state='error'] .icen-kb-sandbox-err {
356
385
  display: grid;
357
386
  }
358
- .kb-sandbox-spin {
387
+ .icen-kb-sandbox-spin {
359
388
  width: 18px;
360
389
  height: 18px;
361
390
  border-radius: 50%;
362
- border: 2px solid var(--token-line-soft);
363
- border-top-color: var(--token-accent);
391
+ border: 2px solid var(--icen-token-line-soft);
392
+ border-top-color: var(--icen-token-accent);
364
393
  animation: icen-spin 0.8s linear infinite;
365
394
  }
366
- .kb-sandbox-err {
367
- color: var(--token-danger, var(--token-error));
368
- font-size: 12.5px;
395
+ .icen-kb-sandbox-err {
396
+ color: var(--icen-token-error);
397
+ font-size: var(--icen-font-size-control);
369
398
  text-align: center;
370
399
  }
371
400
 
372
401
  /* ═══════════════ kb-chain 工具链条(§5.26) ═══════════════ */
373
402
 
374
- .kb-chain {
403
+ .icen-kb-chain {
375
404
  display: flex;
376
405
  align-items: center;
377
406
  min-width: 0;
@@ -379,103 +408,168 @@
379
408
  overflow-x: auto;
380
409
  }
381
410
 
382
- .kb-chain-step {
411
+ .icen-kb-chain-step {
383
412
  display: inline-flex;
384
413
  align-items: center;
414
+ justify-content: center;
385
415
  gap: 6px;
386
416
  flex: 0 0 auto;
387
- padding: 3px 10px;
388
- border-radius: 999px;
389
- font-size: 12px;
390
- color: var(--token-text-muted);
391
- transition: color 0.16s ease-out, background-color 0.16s ease-out;
417
+ min-block-size: var(--icen-density-item-height);
418
+ padding: 0 10px;
419
+ border-radius: var(--icen-radius-full);
420
+ font-size: var(--icen-font-size-caption);
421
+ line-height: 1;
422
+ color: var(--icen-token-text-muted);
423
+ transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast);
392
424
  }
393
425
  /* 可点(running 及之前):hover 提供可点暗示,仍走中性色 */
394
- .kb-chain-step[aria-disabled='false'] {
426
+ .icen-kb-chain-step[aria-disabled='false'] {
395
427
  cursor: pointer;
396
428
  }
397
- .kb-chain-step[aria-disabled='false']:hover {
398
- color: var(--token-text);
399
- background: var(--token-bg-soft);
429
+ .icen-kb-chain-step[aria-disabled='false']:hover {
430
+ color: var(--icen-token-text);
431
+ background: var(--icen-token-fill-hover);
400
432
  }
401
- .kb-chain-step[aria-disabled='false']:focus-visible {
402
- outline: 2px solid var(--token-accent);
403
- outline-offset: -2px;
433
+ .icen-kb-chain-step[aria-disabled='false']:active {
434
+ background: var(--icen-token-fill-pressed);
404
435
  }
405
- .kb-chain-step[aria-disabled='true'] {
406
- color: var(--token-text-faint);
436
+ .icen-kb-chain-step[aria-disabled='false']:focus-visible {
437
+ outline: none;
438
+ box-shadow: var(--icen-ring);
439
+ }
440
+ .icen-kb-chain-step[aria-disabled='true'] {
441
+ color: var(--icen-token-text-faint);
407
442
  cursor: default;
408
443
  }
409
444
 
410
445
  /* 状态点:空心灰(pending)/ accent 脉冲(running)/ 实心绿(done)/ 实心红(error) */
411
- .kb-chain-dot {
446
+ .icen-kb-chain-dot {
412
447
  box-sizing: border-box;
413
448
  width: 8px;
414
449
  height: 8px;
415
450
  border-radius: 50%;
416
451
  flex: 0 0 auto;
417
- transition: background-color 0.16s ease-out, border-color 0.16s ease-out;
452
+ transition: background-color var(--icen-tx-fast), border-color var(--icen-tx-fast);
418
453
  }
419
- .kb-chain-step.is-pending .kb-chain-dot {
420
- border: 1.5px solid var(--token-line);
454
+ .icen-kb-chain-step.is-pending .icen-kb-chain-dot {
455
+ border: 1.5px solid var(--icen-token-line);
421
456
  background: transparent;
422
457
  }
423
- .kb-chain-step.is-running .kb-chain-dot {
424
- background: var(--token-accent);
458
+ .icen-kb-chain-step.is-running .icen-kb-chain-dot {
459
+ background: var(--icen-token-accent);
425
460
  animation: kb-pulse 1.6s ease-in-out infinite; /* kb.css 共享脉冲 */
426
461
  }
427
- .kb-chain-step.is-done .kb-chain-dot {
428
- background: var(--token-success);
462
+ .icen-kb-chain-step.is-done .icen-kb-chain-dot {
463
+ background: var(--icen-token-success);
429
464
  }
430
- .kb-chain-step.is-error .kb-chain-dot {
431
- background: var(--token-danger, var(--token-error));
465
+ .icen-kb-chain-step.is-error .icen-kb-chain-dot {
466
+ background: var(--icen-token-error);
432
467
  }
433
468
 
434
- .kb-chain-label {
469
+ .icen-kb-chain-label {
435
470
  white-space: nowrap;
436
471
  }
437
472
 
438
- /* 步骤间箭头连线:基线 + 45° 折角箭头,中性层级色 */
439
- .kb-chain-link {
473
+ /* 步骤间箭头连线:基线 + 45° 折角箭头(指向行进方向),中性层级色;RTL 镜像规则移到行内末端并翻转为左指 */
474
+ .icen-kb-chain-link {
440
475
  position: relative;
441
476
  flex: 0 0 18px;
442
477
  height: 1px;
443
478
  margin: 0 2px;
444
- background: var(--token-line-soft);
479
+ background: var(--icen-token-line-soft);
445
480
  }
446
- .kb-chain-link::after {
481
+ .icen-kb-chain-link::after {
447
482
  content: '';
448
483
  position: absolute;
449
- right: 1px;
484
+ right: 1px; /* guard:allow-physical 箭头钉在连线物理末端(LTR 行进方向),RTL 镜像规则改到 left 并翻转指向 */
450
485
  top: 50%;
451
486
  width: 5px;
452
487
  height: 5px;
453
- border-top: 1px solid var(--token-line);
454
- border-right: 1px solid var(--token-line);
488
+ border-top: 1px solid var(--icen-token-line); /* guard:allow-physical 折角箭头半边构成(与 rotate(45deg) 配套) */
489
+ border-right: 1px solid var(--icen-token-line); /* guard:allow-physical 折角箭头半边构成 */
455
490
  transform: translateY(-50%) rotate(45deg);
456
491
  }
457
492
 
458
493
  /* ═══════════════ 动效纪律(reduced-motion 全退化) ═══════════════ */
459
494
 
460
495
  @media (prefers-reduced-motion: reduce) {
461
- .kb-canvas-divider,
462
- .kb-canvas-divider::after,
463
- .kb-canvas-ver,
464
- .kb-canvas-ver-dot,
465
- .kb-canvas-selbar,
466
- .kb-canvas-selbar-btn,
467
- .kb-checkpoint,
468
- .kb-checkpoint-menu,
469
- .kb-checkpoint-menu-item,
470
- .kb-chain-step,
471
- .kb-chain-dot {
496
+ .icen-kb-canvas-divider,
497
+ .icen-kb-canvas-divider::after,
498
+ .icen-kb-canvas-ver,
499
+ .icen-kb-canvas-ver-dot,
500
+ .icen-kb-canvas-selbar,
501
+ .icen-kb-canvas-selbar-btn,
502
+ .icen-kb-checkpoint,
503
+ .icen-kb-checkpoint-menu,
504
+ .icen-kb-checkpoint-menu-item,
505
+ .icen-kb-chain-step,
506
+ .icen-kb-chain-dot {
472
507
  transition: none;
473
508
  animation: none;
474
509
  }
475
- .kb-chain-step.is-running .kb-chain-dot {
510
+ .icen-kb-chain-step.is-running .icen-kb-chain-dot {
476
511
  animation: none; /* 脉冲退化为静态 accent 点 */
477
512
  }
478
- .kb-sandbox-spin {
513
+ .icen-kb-sandbox-spin {
479
514
  animation-duration: 1.6s; /* 旋转保留但放慢,避免频闪不适 */
480
515
  }
481
516
  }
517
+
518
+ /* ═══════════════ 密度档(compact:收紧留白,可点面保持 24px 下限) ═══════════════ */
519
+
520
+ [data-icen-density='compact'] .icen-kb-canvas-chat,
521
+ [data-icen-density='compact'] .icen-kb-canvas-doc { padding: 8px 10px; }
522
+ [data-icen-density='compact'] .icen-kb-canvas-versions { padding-block: 4px; }
523
+ [data-icen-density='compact'] .icen-kb-checkpoints { gap: 6px; }
524
+ [data-icen-density='compact'] .icen-kb-checkpoint { min-height: var(--icen-density-item-height); }
525
+ [data-icen-density='compact'] .icen-kb-checkpoint-menu-item { min-block-size: 24px; padding-block: 4px; }
526
+ [data-icen-density='compact'] .icen-kb-chain-step { min-block-size: 24px; }
527
+ [data-icen-density='compact'] .icen-kb-sandbox-stage { min-height: 280px; }
528
+
529
+ /* ── RTL:步骤链行进箭头镜像(翻转到行内末端并改为左指) ── */
530
+ :is([dir='rtl']) .icen-kb-chain-link::after {
531
+ right: auto; /* guard:allow-physical RTL 镜像规则:箭头移到行内末端(视觉左) */
532
+ left: 1px; /* guard:allow-physical RTL 镜像规则:箭头钉在视觉左端 */
533
+ transform: translateY(-50%) rotate(45deg) scaleX(-1);
534
+ }
535
+
536
+ /* ═══════════════ 高对比模式:材质回落到系统面,选中/焦点换 Highlight ═══════════════ */
537
+
538
+ @media (forced-colors: active) {
539
+ .icen-kb-canvas-selbar,
540
+ .icen-kb-checkpoint-menu {
541
+ background: Canvas;
542
+ border-color: CanvasText;
543
+ box-shadow: none;
544
+ }
545
+ .icen-kb-canvas-selbar-btn,
546
+ .icen-kb-checkpoint-menu-item { border: 1px solid CanvasText; }
547
+ .icen-kb-canvas-ver.is-current,
548
+ .icen-kb-chain-step.is-running,
549
+ .icen-kb-chain-step.is-error {
550
+ outline: 2px solid Highlight;
551
+ outline-offset: -2px;
552
+ }
553
+ .icen-kb-canvas-divider { background: CanvasText; }
554
+ .icen-kb-canvas-divider::after { background: Canvas; }
555
+ .icen-kb-chain-link { background: CanvasText; }
556
+ .icen-kb-chain-link::after { border-color: CanvasText; }
557
+ .icen-kb-chain-dot { border: 1px solid CanvasText; }
558
+ .icen-kb-chain-step.is-running .icen-kb-chain-dot,
559
+ .icen-kb-chain-step.is-done .icen-kb-chain-dot,
560
+ .icen-kb-chain-step.is-error .icen-kb-chain-dot { background: CanvasText; }
561
+ .icen-kb-sandbox-stage { border-color: CanvasText; }
562
+ .icen-kb-sandbox-err { border: 1px solid CanvasText; }
563
+ .icen-kb-canvas-divider:focus-visible,
564
+ .icen-kb-canvas-ver:focus-visible,
565
+ .icen-kb-canvas-selbar-btn:focus-visible,
566
+ .icen-kb-checkpoint:focus-visible,
567
+ .icen-kb-checkpoint-menu-item:focus-visible,
568
+ .icen-kb-chain-step[aria-disabled='false']:focus-visible {
569
+ outline: 2px solid Highlight;
570
+ outline-offset: -2px;
571
+ box-shadow: none;
572
+ }
573
+ }
574
+
575
+ }