@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,14 +1,15 @@
1
+ @layer icen.components {
1
2
  /*
2
3
  * @icen.ai/ui — kb-ground.css(证据域:kb-citation / kb-sources / kb-passage / kb-conflict)
3
- * 共享原语在 kb.css(.kb-row/.kb-quote/.kb-badge/.kb-num…),本文件只做本域专属结构。
4
+ * 共享原语在 kb.css(.icen-kb-row/.icen-kb-quote/.icen-kb-badge/.icen-kb-num…),本文件只做本域专属结构。
4
5
  * DOM 契约见 docs/spec/kb-family.md §5.1–5.4;behaviors/kb-citation.ts 等。
5
6
  *
6
7
  * 视觉音调(spec §2 硬约束):
7
- * - 字号:标题 13px/600 · 正文 13px · 元信息 11.5px · 徽标 10.5px;数字一律 .kb-num
8
- * - 节奏:行 28px(data-density="compact" 收 24px)· 区块 16px · 组内 8px
9
- * - 圆角:容器 --radius-md · 行内(角标/chip)--radius-sm 或全圆
8
+ * - 字号:标题 13px/600 · 正文 13px · 元信息 11px · 徽标 11px;数字一律 .icen-kb-num
9
+ * - 节奏:行 28px(data-icen-density="compact" 收 24px)· 区块 16px · 组内 8px
10
+ * - 圆角:容器 --icen-radius-md · 行内(角标/chip)--icen-radius-sm 或全圆
10
11
  * - 色彩:证据域主角是 accent,但角标默认 faint 弱化、hover/激活才点亮;
11
- * 阴影只用 --token-shadow-overlay(不自造阴影层),z 尺只借 --z-* 标尺
12
+ * 阴影只用 --icen-token-shadow-overlay(不自造阴影层),z 尺只借 --icen-z-* 标尺
12
13
  * - 动效:滑入 200ms / hover 反馈 --icen-tx-fast / 折叠 160ms;reduced-motion 全退化为瞬时
13
14
  */
14
15
 
@@ -16,21 +17,22 @@
16
17
  §5.1 kb-citation 行内引用角标
17
18
  ══════════════════════════════════════════════ */
18
19
 
19
- .kb-citation {
20
+ .icen-kb-citation {
20
21
  display: inline-flex;
21
22
  align-items: center;
22
23
  justify-content: center;
23
- min-width: 16px;
24
- height: 16px;
25
- margin: 0 1px;
26
- padding: 0 3px;
27
- border: 1px solid var(--token-line-soft);
28
- border-radius: var(--radius-sm, 6px);
24
+ min-inline-size: 18px;
25
+ min-block-size: 18px;
26
+ margin-block: 0;
27
+ margin-inline: 1px;
28
+ padding: 0 4px;
29
+ border: 1px solid var(--icen-token-line-soft);
30
+ border-radius: var(--icen-radius-sm);
29
31
  background: transparent;
30
- color: var(--token-text-faint);
31
- font-family: var(--font-mono, ui-monospace, monospace);
32
+ color: var(--icen-token-text-faint);
33
+ font-family: var(--icen-font-mono);
32
34
  font-variant-numeric: tabular-nums;
33
- font-size: 10px;
35
+ font-size: var(--icen-density-font-size-xs);
34
36
  line-height: 1;
35
37
  vertical-align: 2px; /* 上标视感,与正文基线对齐 */
36
38
  cursor: pointer;
@@ -38,17 +40,28 @@
38
40
  background-color var(--icen-tx-fast);
39
41
  }
40
42
  /* hover 点亮 accent:引用是证据域主角,但默认弱化、悬停才给注意力 */
41
- .kb-citation:hover {
42
- color: var(--token-accent);
43
- border-color: color-mix(in srgb, var(--token-accent) 45%, transparent);
44
- background: color-mix(in srgb, var(--token-accent) 8%, transparent);
43
+ .icen-kb-citation:hover {
44
+ color: var(--icen-token-accent-text); /* 可读变体:裸 accent 叠 8% accent 底浅色仅 ~3.4:1,11px 字更需 AA */
45
+ border-color: color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
46
+ background: color-mix(in srgb, var(--icen-token-accent) 8%, transparent);
47
+ }
48
+ .icen-kb-citation:active {
49
+ border-color: color-mix(in srgb, var(--icen-token-accent) 62%, transparent);
50
+ background: color-mix(in srgb, var(--icen-token-accent) 14%, transparent);
45
51
  }
46
- .kb-citation:focus-visible {
52
+ .icen-kb-citation:focus-visible {
47
53
  outline: none;
48
54
  box-shadow: var(--icen-ring);
49
55
  }
56
+ /* 触屏抬触达面(角标是证据域主交互,18px 打不中) */
57
+ @media (pointer: coarse) {
58
+ .icen-kb-citation {
59
+ min-inline-size: 24px;
60
+ min-block-size: 24px;
61
+ }
62
+ }
50
63
  /* 无效编号:灰显不可点(不信任模型生成编号的降级态) */
51
- .kb-citation.is-dead {
64
+ .icen-kb-citation.is-dead {
52
65
  pointer-events: none;
53
66
  cursor: default;
54
67
  opacity: 0.5;
@@ -58,63 +71,65 @@
58
71
 
59
72
  /* ── hover 引用卡(openPopover portal 挂 body;left/top/width 由 popover 布局引擎内联) ── */
60
73
 
61
- .kb-citation-card {
74
+ .icen-kb-citation-card {
62
75
  position: fixed;
63
- z-index: var(--z-popover);
76
+ z-index: var(--icen-z-popover);
64
77
  display: flex;
65
78
  flex-direction: column;
66
79
  gap: 8px;
67
80
  max-width: 340px;
68
- padding: 10px 12px;
69
- background: var(--token-surface);
70
- border: 1px solid var(--token-line-soft);
71
- border-radius: var(--radius-md);
72
- box-shadow: var(--token-shadow-overlay);
81
+ padding: 12px;
82
+ background: var(--icen-token-surface-raised);
83
+ border: 1px solid var(--icen-token-line-soft);
84
+ border-radius: var(--icen-radius-md);
85
+ box-shadow: var(--icen-token-shadow-elevated);
73
86
  animation: kb-ground-card-in var(--icen-tx-fast);
74
87
  }
75
88
  @keyframes kb-ground-card-in {
76
89
  from { opacity: 0; transform: translateY(2px); }
77
90
  to { opacity: 1; transform: none; }
78
91
  }
79
- .kb-citation-card-head {
92
+ .icen-kb-citation-card-head {
80
93
  display: flex;
81
94
  align-items: center;
82
95
  gap: 6px;
83
96
  min-width: 0;
84
97
  }
85
- .kb-citation-card-icon {
98
+ .icen-kb-citation-card-icon {
86
99
  display: inline-flex;
87
100
  align-items: center;
88
101
  justify-content: center;
89
102
  flex: 0 0 auto;
90
103
  width: 14px;
91
104
  height: 14px;
92
- color: var(--token-text-muted);
105
+ color: var(--icen-token-text-muted);
93
106
  }
94
- .kb-citation-card-icon > svg { width: 14px; height: 14px; }
95
- .kb-citation-card-title {
107
+ .icen-kb-citation-card-icon > svg { width: 14px; height: 14px; }
108
+ .icen-kb-citation-card-title {
96
109
  min-width: 0;
97
- font-size: 13px;
110
+ font-size: var(--icen-density-font-size-md);
98
111
  font-weight: 600;
99
- color: var(--token-text);
112
+ line-height: 1.35;
113
+ color: var(--icen-token-text);
100
114
  white-space: nowrap;
101
115
  overflow: hidden;
102
116
  text-overflow: ellipsis;
103
117
  }
104
- .kb-citation-card-domain {
105
- font-family: var(--font-mono, ui-monospace, monospace);
106
- font-size: 11px;
107
- color: var(--token-text-faint);
118
+ .icen-kb-citation-card-domain {
119
+ font-family: var(--icen-font-mono);
120
+ font-size: var(--icen-density-font-size-xs);
121
+ letter-spacing: 0.3px;
122
+ color: var(--icen-token-text-faint);
108
123
  white-space: nowrap;
109
124
  overflow: hidden;
110
125
  text-overflow: ellipsis;
111
126
  }
112
127
  /* 受限来源:citedText 视觉打码(原文未下发,blur 只是提示层) */
113
- .kb-citation-card-quote.kb-citation-card-masked {
128
+ .icen-kb-citation-card-quote.icen-kb-citation-card-masked {
114
129
  filter: blur(4px);
115
130
  user-select: none;
116
131
  }
117
- .kb-citation-card-badges {
132
+ .icen-kb-citation-card-badges {
118
133
  display: inline-flex;
119
134
  align-items: center;
120
135
  gap: 4px;
@@ -125,27 +140,27 @@
125
140
  §5.2 kb-sources 来源列表(--row 横排 / --rail 纵列)
126
141
  ══════════════════════════════════════════════ */
127
142
 
128
- .kb-sources {
143
+ .icen-kb-sources {
129
144
  display: flex;
130
145
  gap: 8px;
131
146
  min-width: 0;
132
147
  }
133
148
  /* 答案上方横排:内容宽、可换行 */
134
- .kb-sources--row {
149
+ .icen-kb-sources--row {
135
150
  flex-direction: row;
136
151
  flex-wrap: wrap;
137
152
  align-items: stretch;
138
153
  }
139
154
  /* 侧栏纵列:整行宽。side 收进 main(kb-sources.ts rail DOM)——标题独占两行、
140
155
  meta 行与徽章行各自换行,绝不把标题挤成一行省略号再压徽章 */
141
- .kb-sources--rail {
156
+ .icen-kb-sources--rail {
142
157
  flex-direction: column;
143
158
  }
144
- .kb-sources--rail .kb-source {
159
+ .icen-kb-sources--rail .icen-kb-source {
145
160
  grid-template-columns: auto minmax(0, 1fr);
146
161
  align-items: flex-start;
147
162
  }
148
- .kb-sources--rail .kb-source-title {
163
+ .icen-kb-sources--rail .icen-kb-source-title {
149
164
  display: -webkit-box;
150
165
  -webkit-box-orient: vertical;
151
166
  -webkit-line-clamp: 2;
@@ -153,200 +168,206 @@
153
168
  white-space: normal;
154
169
  overflow: hidden;
155
170
  }
156
- .kb-sources--rail .kb-source-sub {
171
+ .icen-kb-sources--rail .icen-kb-source-sub {
157
172
  white-space: normal;
158
173
  word-break: break-word;
159
174
  overflow: visible;
160
175
  text-overflow: unset;
161
176
  }
162
- .kb-sources--rail .kb-source-main .kb-source-side {
177
+ .icen-kb-sources--rail .icen-kb-source-main .icen-kb-source-side {
163
178
  flex-wrap: wrap;
164
179
  align-items: center;
165
180
  margin-top: 3px;
166
181
  }
167
182
 
168
- .kb-source {
169
- --kb-source-tint: var(--token-accent);
170
- position: relative;
183
+ .icen-kb-source {
184
+ --kb-source-tint: var(--icen-token-accent);
171
185
  display: grid;
172
186
  grid-template-columns: auto 1fr auto;
173
187
  align-items: center;
174
188
  gap: 10px;
175
- min-height: 28px;
176
- padding: 4px 8px 4px 10px;
189
+ min-height: var(--icen-density-item-height);
190
+ padding-block: 3px;
191
+ padding-inline: 8px;
177
192
  border: 1px solid transparent;
178
- border-radius: var(--radius-sm, 6px);
193
+ border-radius: var(--icen-radius-sm);
179
194
  background: transparent;
180
195
  font: inherit;
181
- text-align: left;
196
+ text-align: start;
182
197
  cursor: pointer;
183
198
  transition: background-color var(--icen-tx-fast), border-color var(--icen-tx-fast),
184
- transform var(--icen-tx-fast);
199
+ color var(--icen-tx-fast);
200
+ }
201
+ .icen-kb-sources--row .icen-kb-source { inline-size: auto; }
202
+ .icen-kb-sources--rail .icen-kb-source { inline-size: 100%; }
203
+ /* hover 只抬底色与边框,不做位移(位移会把行从阅读节奏里抖出去);仅可悬停设备生效 */
204
+ @media (hover: hover) and (pointer: fine) {
205
+ .icen-kb-source:hover {
206
+ background: var(--icen-token-fill-hover);
207
+ border-color: var(--icen-token-line-soft);
208
+ }
185
209
  }
186
- .kb-sources--row .kb-source { width: auto; }
187
- .kb-sources--rail .kb-source { width: 100%; }
188
- /* hover 浮起(1px 上移 = 轻量层级暗示,不进阴影层) */
189
- .kb-source:hover {
190
- background: var(--token-bg-soft);
191
- border-color: var(--token-line-soft);
192
- transform: translateY(-1px);
210
+ .icen-kb-source:active {
211
+ background: var(--icen-token-fill-pressed);
193
212
  }
194
- .kb-source:focus-visible {
213
+ .icen-kb-source:focus-visible {
195
214
  outline: none;
196
215
  box-shadow: var(--icen-ring);
197
216
  }
198
- /* 当前阅读位:左侧 2px accent 证据线(宿主或 kb-passage 锚定驱动) */
199
- .kb-source.is-active {
200
- background: var(--token-bg-soft);
201
- border-color: color-mix(in srgb, var(--kb-source-tint) 30%, transparent);
217
+ /* 当前阅读位:持续选中底色 + 辅助信息提升(不画左侧竖条) */
218
+ .icen-kb-source.is-active {
219
+ background: var(--icen-token-fill-selected);
220
+ border-color: color-mix(in srgb, var(--kb-source-tint) 32%, transparent);
202
221
  }
203
- .kb-source.is-active::before {
204
- content: '';
205
- position: absolute;
206
- left: 0;
207
- top: 5px;
208
- bottom: 5px;
209
- width: 2px;
210
- border-radius: 1px;
211
- background: var(--kb-source-tint);
222
+ .icen-kb-source.is-active .icen-kb-source-sub {
223
+ color: var(--icen-token-text-muted);
212
224
  }
213
225
 
214
- .kb-source-icon {
226
+ .icen-kb-source-icon {
215
227
  display: inline-flex;
216
228
  align-items: center;
217
229
  justify-content: center;
218
230
  flex: 0 0 auto;
219
231
  width: 16px;
220
232
  height: 16px;
221
- color: var(--token-text-muted);
233
+ color: var(--icen-token-text-muted);
222
234
  }
223
- .kb-source-icon > svg { width: 14px; height: 14px; }
224
- .kb-source-main {
235
+ .icen-kb-source-icon > svg { width: 14px; height: 14px; }
236
+ .icen-kb-source-main {
225
237
  min-width: 0;
226
238
  display: flex;
227
239
  flex-direction: column;
228
240
  gap: 1px;
229
241
  }
230
- .kb-source-title {
231
- font-size: 13px;
242
+ .icen-kb-source-title {
243
+ font-size: var(--icen-density-font-size-md);
232
244
  line-height: 1.4;
233
- color: var(--token-text);
245
+ color: var(--icen-token-text);
234
246
  white-space: nowrap;
235
247
  overflow: hidden;
236
248
  text-overflow: ellipsis;
237
249
  }
238
- .kb-source-sub {
239
- font-size: 11.5px;
250
+ .icen-kb-source-sub {
251
+ font-size: var(--icen-density-font-size-xs);
240
252
  line-height: 1.4;
241
- color: var(--token-text-faint);
253
+ color: var(--icen-token-text-faint);
242
254
  white-space: nowrap;
243
255
  overflow: hidden;
244
256
  text-overflow: ellipsis;
245
257
  }
246
- .kb-source-side {
258
+ .icen-kb-source-side {
247
259
  display: inline-flex;
248
260
  align-items: center;
249
261
  gap: 8px;
250
262
  flex: 0 0 auto;
251
263
  }
252
- .kb-source-badges {
264
+ .icen-kb-source-badges {
253
265
  display: inline-flex;
254
266
  align-items: center;
255
267
  gap: 4px;
256
268
  flex-wrap: wrap;
257
269
  }
258
- .kb-source-badges .kb-dot { width: 6px; height: 6px; }
270
+ .icen-kb-source-badges .icen-kb-dot { width: 6px; height: 6px; }
259
271
 
260
272
  /* 受限行内的申请访问按钮(行壳已降级为 role=button,嵌套合法) */
261
- .kb-source-request {
273
+ .icen-kb-source-request {
274
+ display: inline-flex;
275
+ align-items: center;
276
+ justify-content: center;
262
277
  flex: 0 0 auto;
263
- padding: 2.5px 7px;
264
- border: 1px solid var(--token-line-soft);
265
- border-radius: 999px;
278
+ min-block-size: var(--icen-density-item-height);
279
+ padding-block: 0;
280
+ padding-inline: 12px;
281
+ border: 1px solid var(--icen-token-line-soft);
282
+ border-radius: var(--icen-radius-full);
266
283
  background: transparent;
267
- color: var(--token-text-muted);
268
- font-size: 10.5px;
284
+ color: var(--icen-token-text-muted);
285
+ font-size: var(--icen-density-font-size-xs);
269
286
  line-height: 1;
270
287
  letter-spacing: 0.3px;
288
+ white-space: nowrap;
271
289
  cursor: pointer;
272
- transition: color var(--icen-tx-fast), border-color var(--icen-tx-fast);
290
+ transition: color var(--icen-tx-fast), border-color var(--icen-tx-fast),
291
+ background-color var(--icen-tx-fast);
292
+ }
293
+ .icen-kb-source-request:hover {
294
+ color: var(--icen-token-accent-text);
295
+ border-color: color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
296
+ background: var(--icen-token-fill-hover);
273
297
  }
274
- .kb-source-request:hover {
275
- color: var(--token-accent);
276
- border-color: color-mix(in srgb, var(--token-accent) 45%, transparent);
298
+ .icen-kb-source-request:active {
299
+ background: var(--icen-token-fill-pressed);
277
300
  }
278
- .kb-source-request:focus-visible {
301
+ .icen-kb-source-request:focus-visible {
279
302
  outline: none;
280
303
  box-shadow: var(--icen-ring);
281
304
  }
282
305
 
283
- /* 密度 compact:行高 28 → 24 */
284
- [data-density='compact'] .kb-source { min-height: 24px; gap: 8px; }
285
-
286
306
  /* ══════════════════════════════════════════════
287
- §5.3 kb-passage 原文定位抽屉(右侧 340px)
307
+ §5.3 kb-passage 原文定位抽屉(行内末端侧 340px,RTL 镜像到左侧)
288
308
  ══════════════════════════════════════════════ */
289
309
 
290
- .kb-passage {
291
- --kb-passage-duration: 200ms;
310
+ .icen-kb-passage {
311
+ --kb-passage-duration: var(--icen-tx-normal);
292
312
  position: fixed;
293
- inset: 0 0 0 auto;
294
- width: min(340px, 92vw);
295
- z-index: var(--z-panel, var(--z-chrome));
313
+ inset-block: 0;
314
+ inset-inline-end: 0;
315
+ inline-size: min(340px, 92vw);
316
+ z-index: var(--icen-z-chrome);
296
317
  display: flex;
297
318
  flex-direction: column;
298
- background: var(--token-surface);
299
- border-left: 1px solid var(--token-line-soft);
300
- box-shadow: var(--token-shadow-overlay);
301
- transform: translateX(100%);
302
- transition: transform var(--kb-passage-duration) var(--ease-out);
303
- }
304
- .kb-passage[hidden] { display: none; }
305
- .kb-passage.is-open { transform: translateX(0); }
319
+ background: var(--icen-token-surface);
320
+ border-inline-start: 1px solid var(--icen-token-line-soft);
321
+ box-shadow: var(--icen-token-shadow-overlay);
322
+ transform: translateX(100%); /* guard:allow-physical 隐藏位沿物理右缘滑出(LTR 抽屉侧),RTL 镜像规则翻为 translateX(-100%) */
323
+ transition: transform var(--kb-passage-duration);
324
+ }
325
+ .icen-kb-passage[hidden] { display: none; }
326
+ .icen-kb-passage.is-open { transform: translateX(0); }
306
327
 
307
- .kb-passage-head {
328
+ .icen-kb-passage-head {
308
329
  display: flex;
309
330
  align-items: center;
310
331
  gap: 8px;
311
- padding: 10px 12px;
312
- border-bottom: 1px solid var(--token-line-soft);
332
+ padding: 12px;
333
+ border-bottom: 1px solid var(--icen-token-line-soft);
313
334
  }
314
- .kb-passage-icon {
335
+ .icen-kb-passage-icon {
315
336
  display: inline-flex;
316
337
  align-items: center;
317
338
  justify-content: center;
318
339
  flex: 0 0 auto;
319
340
  width: 16px;
320
341
  height: 16px;
321
- color: var(--token-text-muted);
342
+ color: var(--icen-token-text-muted);
322
343
  }
323
- .kb-passage-icon > svg { width: 16px; height: 16px; }
324
- .kb-passage-titlewrap {
344
+ .icen-kb-passage-icon > svg { width: 16px; height: 16px; }
345
+ .icen-kb-passage-titlewrap {
325
346
  flex: 1 1 auto;
326
347
  min-width: 0;
327
348
  display: flex;
328
349
  flex-direction: column;
329
350
  gap: 2px;
330
351
  }
331
- .kb-passage-title {
332
- font-size: 13px;
352
+ .icen-kb-passage-title {
353
+ font-size: var(--icen-density-font-size-md);
333
354
  font-weight: 600;
334
- line-height: 1.4;
335
- color: var(--token-text);
355
+ line-height: 1.35;
356
+ color: var(--icen-token-text);
336
357
  white-space: nowrap;
337
358
  overflow: hidden;
338
359
  text-overflow: ellipsis;
339
360
  }
340
- .kb-passage-loc {
341
- font-family: var(--font-mono, ui-monospace, monospace);
342
- font-size: 11px;
361
+ .icen-kb-passage-loc {
362
+ font-family: var(--icen-font-mono);
363
+ font-size: var(--icen-density-font-size-xs);
343
364
  letter-spacing: 0.3px;
344
- color: var(--token-text-faint);
365
+ color: var(--icen-token-text-faint);
345
366
  white-space: nowrap;
346
367
  overflow: hidden;
347
368
  text-overflow: ellipsis;
348
369
  }
349
- .kb-passage-close {
370
+ .icen-kb-passage-close {
350
371
  flex: 0 0 auto;
351
372
  width: 24px;
352
373
  height: 24px;
@@ -354,213 +375,296 @@
354
375
  align-items: center;
355
376
  justify-content: center;
356
377
  border: none;
357
- border-radius: var(--radius-sm, 6px);
378
+ border-radius: var(--icen-radius-sm);
358
379
  background: transparent;
359
- color: var(--token-text-faint);
360
- font-size: 14px;
380
+ color: var(--icen-token-text-faint);
381
+ font-size: var(--icen-density-font-size-lg);
361
382
  line-height: 1;
362
383
  cursor: pointer;
363
384
  transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast);
364
385
  }
365
- .kb-passage-close:hover { color: var(--token-text); background: var(--token-bg-soft); }
366
- .kb-passage-close:focus-visible { outline: none; box-shadow: var(--icen-ring); }
386
+ .icen-kb-passage-close:hover { color: var(--icen-token-text); background: var(--icen-token-fill-hover); }
387
+ .icen-kb-passage-close:active { background: var(--icen-token-fill-pressed); }
388
+ .icen-kb-passage-close:focus-visible { outline: none; box-shadow: var(--icen-ring); }
367
389
 
368
- .kb-passage-body {
390
+ .icen-kb-passage-body {
369
391
  flex: 1 1 auto;
370
392
  min-height: 0;
371
393
  overflow-y: auto;
372
394
  display: flex;
373
395
  flex-direction: column;
374
- gap: 8px;
396
+ gap: 10px;
375
397
  padding: 12px;
376
- font-size: 13px;
398
+ font-size: var(--icen-density-font-size-md);
377
399
  line-height: 1.7;
378
- color: var(--token-text);
400
+ color: var(--icen-token-text);
379
401
  }
380
- .kb-passage-text { min-width: 0; word-break: break-word; white-space: pre-wrap; }
402
+ .icen-kb-passage-text { min-inline-size: 0; word-break: break-word; white-space: pre-wrap; }
381
403
  /* 多命中分色 mark(.kb-passage-hit)与基础 mark 底色均由 kb.css 统一供给 */
382
404
 
383
- /* 上下文(默认隐藏,expand 展开;弱化为 faint 引导体) */
384
- .kb-passage-context {
405
+ /* 上下文(默认隐藏,expand 展开;弱化为 faint 引导体;引导线沿 inline-start,RTL 镜像) */
406
+ .icen-kb-passage-context {
385
407
  position: relative;
386
- padding: 2px 0 2px 12px;
387
- font-size: 12.5px;
408
+ padding-block: 2px;
409
+ padding-inline-start: 12px;
410
+ font-size: var(--icen-density-font-size-xs);
388
411
  line-height: 1.7;
389
- color: var(--token-text-faint);
412
+ color: var(--icen-token-text-faint);
390
413
  white-space: pre-wrap;
391
414
  word-break: break-word;
392
415
  }
393
- .kb-passage-context::before {
416
+ .icen-kb-passage-context::before {
394
417
  content: '';
395
418
  position: absolute;
396
- left: 0;
419
+ inset-inline-start: 0;
397
420
  top: 4px;
398
421
  bottom: 4px;
399
422
  width: 2px;
400
- border-radius: 1px;
401
- background: var(--token-line-soft);
423
+ border-radius: 1px; /* guard:allow-radius 微构件(bar/dot/track/指示器等图形级,不属容器圆角面) */
424
+ background: var(--icen-token-line-soft);
402
425
  }
403
- .kb-passage-context[hidden] { display: none; }
404
- .kb-passage.is-expanded .kb-passage-context { animation: kb-ground-card-in var(--icen-tx-fast); }
426
+ .icen-kb-passage-context[hidden] { display: none; }
427
+ .icen-kb-passage.is-expanded .icen-kb-passage-context { animation: kb-ground-card-in var(--icen-tx-fast); }
405
428
 
406
- .kb-passage-expand {
429
+ .icen-kb-passage-expand {
430
+ display: inline-flex;
431
+ align-items: center;
432
+ justify-content: center;
407
433
  align-self: flex-start;
408
- padding: 2px 8px;
434
+ min-block-size: var(--icen-density-item-height);
435
+ padding-block: 2px;
436
+ padding-inline: 8px;
409
437
  border: none;
410
- border-radius: var(--radius-sm, 6px);
438
+ border-radius: var(--icen-radius-sm);
411
439
  background: transparent;
412
- color: var(--token-text-muted);
413
- font-size: 11.5px;
440
+ color: var(--icen-token-text-muted);
441
+ font-size: var(--icen-density-font-size-xs);
442
+ line-height: 1.4;
414
443
  cursor: pointer;
415
444
  transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast);
416
445
  }
417
- .kb-passage-expand:hover { color: var(--token-text); background: var(--token-bg-soft); }
418
- .kb-passage-expand:focus-visible { outline: none; box-shadow: var(--icen-ring); }
446
+ .icen-kb-passage-expand:hover { color: var(--icen-token-text); background: var(--icen-token-fill-hover); }
447
+ .icen-kb-passage-expand:active { background: var(--icen-token-fill-pressed); }
448
+ .icen-kb-passage-expand:focus-visible { outline: none; box-shadow: var(--icen-ring); }
419
449
 
420
450
  /* 受限正文:citedText 打码 + 申请访问 */
421
- .kb-passage-masked {
451
+ .icen-kb-passage-masked {
422
452
  filter: blur(4px);
423
453
  user-select: none;
424
- font-size: 12.5px;
454
+ font-size: var(--icen-density-font-size-md);
425
455
  line-height: 1.7;
426
- color: var(--token-text-muted);
456
+ color: var(--icen-token-text-muted);
427
457
  white-space: pre-wrap;
428
458
  word-break: break-word;
429
459
  }
430
- .kb-passage-request {
460
+ .icen-kb-passage-request {
431
461
  display: inline-flex;
432
462
  align-items: center;
433
- gap: 5px;
463
+ justify-content: center;
464
+ gap: 6px;
434
465
  align-self: flex-start;
466
+ min-block-size: var(--icen-density-item-height);
435
467
  margin-top: 4px;
436
- padding: 4px 10px;
437
- border: 1px solid color-mix(in srgb, var(--token-accent) 45%, transparent);
438
- border-radius: 999px;
439
- background: var(--token-accent-subtle, transparent);
440
- color: var(--token-accent);
441
- font-size: 11.5px;
468
+ padding-block: 3px;
469
+ padding-inline: 12px;
470
+ border: 1px solid color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
471
+ border-radius: var(--icen-radius-sm);
472
+ background: var(--icen-token-accent-subtle);
473
+ color: var(--icen-token-accent-text);
474
+ font-size: var(--icen-density-font-size-xs);
475
+ font-weight: 500;
476
+ line-height: 1.35;
442
477
  cursor: pointer;
443
478
  transition: background-color var(--icen-tx-fast), border-color var(--icen-tx-fast);
444
479
  }
445
- .kb-passage-request > svg { width: 12px; height: 12px; }
446
- .kb-passage-request:hover {
447
- border-color: var(--token-accent);
480
+ .icen-kb-passage-request > svg { width: 14px; height: 14px; }
481
+ .icen-kb-passage-request:hover {
482
+ border-color: var(--icen-token-accent);
483
+ background: color-mix(in srgb, var(--icen-token-accent) 14%, transparent);
448
484
  }
449
- .kb-passage-request:focus-visible { outline: none; box-shadow: var(--icen-ring); }
485
+ .icen-kb-passage-request:active {
486
+ background: color-mix(in srgb, var(--icen-token-accent) 18%, transparent);
487
+ }
488
+ .icen-kb-passage-request:focus-visible { outline: none; box-shadow: var(--icen-ring); }
450
489
 
451
- /* 跳转锚定宿主([data-kb-loc]):命中项 .is-current 高亮 */
452
- [data-kb-loc].is-current {
453
- background: color-mix(in srgb, var(--token-accent) 10%, transparent);
454
- box-shadow: inset 2px 0 0 var(--token-accent);
455
- border-radius: var(--radius-sm, 6px);
490
+ /* 跳转锚定宿主([data-icen-kb-loc]):命中项 .is-current 高亮 */
491
+ [data-icen-kb-loc].is-current {
492
+ background: var(--icen-token-fill-selected);
493
+ border-radius: var(--icen-radius-sm);
456
494
  }
457
495
 
458
496
  /* ══════════════════════════════════════════════
459
497
  §5.4 kb-conflict 来源冲突组
460
498
  ══════════════════════════════════════════════ */
461
499
 
462
- .kb-conflict {
500
+ .icen-kb-conflict {
463
501
  display: flex;
464
502
  flex-direction: column;
465
503
  gap: 8px;
466
- padding: 10px 12px;
467
- border: 1px solid var(--token-line-soft);
468
- border-radius: var(--radius-md);
469
- background: var(--token-bg-soft);
504
+ padding: 12px;
505
+ border: 1px solid var(--icen-token-line-soft);
506
+ border-radius: var(--icen-radius-md);
507
+ background: var(--icen-token-bg-soft);
470
508
  }
471
- .kb-conflict + .kb-conflict { margin-top: 16px; } /* 区块间距纪律 */
472
- .kb-conflict-claim {
509
+ .icen-kb-conflict + .icen-kb-conflict { margin-top: 16px; } /* 区块间距纪律 */
510
+ .icen-kb-conflict-claim {
473
511
  display: flex;
474
512
  align-items: baseline;
475
513
  gap: 8px;
476
- font-size: 13px;
514
+ font-size: var(--icen-density-font-size-md);
477
515
  font-weight: 600;
478
- color: var(--token-text);
516
+ line-height: 1.4;
517
+ color: var(--icen-token-text);
479
518
  }
480
- .kb-conflict-claim .kb-dot { align-self: center; }
481
- .kb-conflict-versions {
519
+ .icen-kb-conflict-claim .icen-kb-dot { align-self: center; }
520
+ .icen-kb-conflict-versions {
482
521
  display: flex;
483
522
  flex-direction: row;
484
523
  flex-wrap: wrap;
485
524
  gap: 8px;
486
525
  }
487
526
 
488
- .kb-conflict-ver {
527
+ .icen-kb-conflict-ver {
489
528
  flex: 1 1 160px;
490
- min-width: 0;
529
+ min-inline-size: 0;
491
530
  display: flex;
492
531
  flex-direction: column;
493
532
  gap: 4px;
494
533
  padding: 8px 10px;
495
- border: 1px solid var(--token-line-soft);
496
- border-radius: var(--radius-md);
497
- background: var(--token-surface);
534
+ border: 1px solid var(--icen-token-line-soft);
535
+ border-radius: var(--icen-radius-md);
536
+ background: var(--icen-token-surface-raised);
537
+ box-shadow: var(--icen-token-shadow-card);
498
538
  font: inherit;
499
- text-align: left;
539
+ text-align: start;
500
540
  cursor: pointer;
501
541
  transition: border-color var(--icen-tx-fast), background-color var(--icen-tx-fast);
502
542
  }
503
543
  /* is-current:最新/官方版本,accent 高亮(唯一主角) */
504
- .kb-conflict-ver.is-current {
505
- border-color: color-mix(in srgb, var(--token-accent) 45%, transparent);
506
- background: color-mix(in srgb, var(--token-accent) 6%, var(--token-surface));
544
+ .icen-kb-conflict-ver.is-current {
545
+ border-color: color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
546
+ background: var(--icen-token-fill-selected);
507
547
  }
508
548
  /* 其余版本:faded 退后 */
509
- .kb-conflict-ver.is-older { opacity: 0.62; }
510
- .kb-conflict-ver:hover {
511
- border-color: color-mix(in srgb, var(--token-accent) 45%, transparent);
549
+ .icen-kb-conflict-ver.is-older { /* 不降透明:透明会折进文字对比度;旧版语义由 muted 文案承担 */ }
550
+ .icen-kb-conflict-ver:hover {
551
+ border-color: var(--icen-token-line-strong);
552
+ background: var(--icen-token-fill-hover);
553
+ }
554
+ /* 选中版本悬停时仍保持 accent 底色,不退化成普通 hover */
555
+ .icen-kb-conflict-ver.is-current:hover {
556
+ border-color: color-mix(in srgb, var(--icen-token-accent) 62%, transparent);
557
+ background: color-mix(in srgb, var(--icen-token-accent) 16%, transparent);
558
+ }
559
+ .icen-kb-conflict-ver.is-older:hover { /* hover 反馈由底色承担 */ }
560
+ .icen-kb-conflict-ver:active {
561
+ background: var(--icen-token-fill-pressed);
512
562
  }
513
- .kb-conflict-ver.is-older:hover { opacity: 1; }
514
- .kb-conflict-ver:focus-visible { outline: none; box-shadow: var(--icen-ring); }
563
+ .icen-kb-conflict-ver:focus-visible { outline: none; box-shadow: var(--icen-ring); }
515
564
 
516
- .kb-conflict-ver-head {
565
+ .icen-kb-conflict-ver-head {
517
566
  display: flex;
518
567
  align-items: center;
519
568
  gap: 8px;
520
- min-width: 0;
569
+ min-inline-size: 0;
521
570
  }
522
- .kb-conflict-ver-date { font-size: 11px; }
523
- .kb-conflict-ver-badges {
571
+ .icen-kb-conflict-ver-date { font-size: var(--icen-density-font-size-xs); color: var(--icen-token-text); }
572
+ .icen-kb-conflict-ver-badges {
524
573
  display: inline-flex;
525
574
  align-items: center;
526
575
  gap: 4px;
527
- margin-left: auto;
576
+ margin-inline-start: auto;
528
577
  }
529
- .kb-conflict-ver-badges .kb-dot { width: 6px; height: 6px; }
530
- .kb-conflict-ver-title {
531
- font-size: 12.5px;
578
+ .icen-kb-conflict-ver-badges .icen-kb-dot { width: 6px; height: 6px; }
579
+ .icen-kb-conflict-ver-title {
580
+ font-size: var(--icen-density-font-size-md);
532
581
  line-height: 1.4;
533
- color: var(--token-text);
582
+ color: var(--icen-token-text);
534
583
  white-space: nowrap;
535
584
  overflow: hidden;
536
585
  text-overflow: ellipsis;
537
586
  }
538
- .kb-conflict-ver-sub {
539
- font-size: 11.5px;
587
+ .icen-kb-conflict-ver-sub {
588
+ font-size: var(--icen-density-font-size-xs);
540
589
  line-height: 1.4;
541
- color: var(--token-text-faint);
590
+ /* 卡片底色是 raised(比页面暗一档),muted 在 11–12px 下会擦到 AA 边界;
591
+ 用正文色保证可读,层级交给 13/12 字号与标题字重。 */
592
+ color: var(--icen-token-text);
542
593
  white-space: nowrap;
543
594
  overflow: hidden;
544
595
  text-overflow: ellipsis;
545
596
  }
546
597
 
598
+ /* ══════════════════════════════════════════════
599
+ 密度:compact 档统一收紧内距,不缩可读字号
600
+ ══════════════════════════════════════════════ */
601
+
602
+ [data-icen-density='compact'] .icen-kb-source {
603
+ min-block-size: 24px;
604
+ gap: 8px;
605
+ padding-block: 2px;
606
+ }
607
+ [data-icen-density='compact'] .icen-kb-citation-card {
608
+ gap: 6px;
609
+ padding: 10px;
610
+ }
611
+ [data-icen-density='compact'] .icen-kb-passage-head { padding-block: 8px; }
612
+ [data-icen-density='compact'] .icen-kb-passage-body { gap: 8px; padding: 10px; }
613
+ [data-icen-density='compact'] .icen-kb-conflict { gap: 6px; padding: 8px 10px; }
614
+ [data-icen-density='compact'] .icen-kb-conflict-ver { gap: 3px; padding: 6px 8px; }
615
+
547
616
  /* ══════════════════════════════════════════════
548
617
  动效守卫(reduced-motion:全退化为瞬时)
549
618
  ══════════════════════════════════════════════ */
550
619
 
551
620
  @media (prefers-reduced-motion: reduce) {
552
- .kb-citation,
553
- .kb-source,
554
- .kb-source-request,
555
- .kb-passage,
556
- .kb-passage-close,
557
- .kb-passage-expand,
558
- .kb-passage-request,
559
- .kb-conflict-ver {
621
+ .icen-kb-citation,
622
+ .icen-kb-source,
623
+ .icen-kb-source-request,
624
+ .icen-kb-passage,
625
+ .icen-kb-passage-close,
626
+ .icen-kb-passage-expand,
627
+ .icen-kb-passage-request,
628
+ .icen-kb-conflict-ver {
560
629
  transition: none;
561
630
  }
562
- .kb-citation-card,
563
- .kb-passage.is-expanded .kb-passage-context {
631
+ .icen-kb-citation-card,
632
+ .icen-kb-passage.is-expanded .icen-kb-passage-context {
564
633
  animation: none;
565
634
  }
566
635
  }
636
+
637
+ /* ── RTL:kb-passage 抽屉隐藏位镜像(抽屉改贴行内末端左侧,滑出方向同步翻转) ── */
638
+ :is([dir='rtl']) .icen-kb-passage { transform: translateX(-100%); }
639
+ :is([dir='rtl']) .icen-kb-passage.is-open { transform: translateX(0); }
640
+
641
+ /* ── 高对比模式:证据边界与选中态不能只靠底色差 ── */
642
+ @media (forced-colors: active) {
643
+ .icen-kb-citation,
644
+ .icen-kb-source,
645
+ .icen-kb-source-request,
646
+ .icen-kb-conflict-ver { border-color: CanvasText; }
647
+ .icen-kb-citation-card,
648
+ .icen-kb-passage { border-color: CanvasText; background: Canvas; }
649
+ .icen-kb-source.is-active,
650
+ [data-icen-kb-loc].is-current { background: Highlight; color: HighlightText; }
651
+ .icen-kb-source.is-active .icen-kb-source-title,
652
+ .icen-kb-source.is-active .icen-kb-source-sub { color: HighlightText; }
653
+ .icen-kb-conflict-ver.is-current { border-color: Highlight; background: Canvas; }
654
+ .icen-kb-passage-request { border-color: Highlight; background: Canvas; }
655
+ .icen-kb-source-badges .icen-kb-dot,
656
+ .icen-kb-conflict-ver-badges .icen-kb-dot { forced-color-adjust: none; } /* 状态点保留语义色 */
657
+ .icen-kb-citation:focus-visible,
658
+ .icen-kb-source:focus-visible,
659
+ .icen-kb-source-request:focus-visible,
660
+ .icen-kb-passage-close:focus-visible,
661
+ .icen-kb-passage-expand:focus-visible,
662
+ .icen-kb-passage-request:focus-visible,
663
+ .icen-kb-conflict-ver:focus-visible {
664
+ outline: 2px solid Highlight;
665
+ outline-offset: 1px;
666
+ box-shadow: none;
667
+ }
668
+ }
669
+
670
+ }