@icen.ai/ui 0.10.0 → 0.11.1

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 (362) hide show
  1. package/AGENTS.md +79 -309
  2. package/LICENSE +21 -0
  3. package/README.md +43 -54
  4. package/dist/base.css +68 -22
  5. package/dist/behaviors/accordion.mjs +1 -1
  6. package/dist/behaviors/ai-branch.mjs +14 -0
  7. package/dist/behaviors/ai-chat.d.mts +2 -2
  8. package/dist/behaviors/ai-chat.mjs +66 -10
  9. package/dist/behaviors/ai-composer.d.mts +5 -5
  10. package/dist/behaviors/ai-composer.mjs +34 -10
  11. package/dist/behaviors/ai-core.mjs +14 -0
  12. package/dist/behaviors/ai-diff.mjs +14 -0
  13. package/dist/behaviors/ai-feedback.mjs +14 -0
  14. package/dist/behaviors/ai-panel.d.mts +2 -2
  15. package/dist/behaviors/ai-panel.mjs +14 -0
  16. package/dist/behaviors/ai-provider.d.mts +1 -1
  17. package/dist/behaviors/ai-provider.mjs +14 -0
  18. package/dist/behaviors/ai-threads.mjs +14 -0
  19. package/dist/behaviors/ai-tool.d.mts +1 -1
  20. package/dist/behaviors/ai-tool.mjs +299 -24
  21. package/dist/behaviors/ai-tools.mjs +1179 -28
  22. package/dist/behaviors/autocomplete.d.mts +1 -1
  23. package/dist/behaviors/autocomplete.mjs +14 -0
  24. package/dist/behaviors/back-top.mjs +14 -0
  25. package/dist/behaviors/carousel.mjs +21 -1
  26. package/dist/behaviors/cascader.mjs +27 -0
  27. package/dist/behaviors/charts.d.mts +12 -1
  28. package/dist/behaviors/charts.mjs +298 -20
  29. package/dist/behaviors/code-block.mjs +22 -1
  30. package/dist/behaviors/command-palette.mjs +3 -3
  31. package/dist/behaviors/context-menu.d.mts +2 -2
  32. package/dist/behaviors/context-menu.mjs +14 -0
  33. package/dist/behaviors/controls.d.mts +8 -8
  34. package/dist/behaviors/controls.mjs +50 -6
  35. package/dist/behaviors/copy.mjs +14 -0
  36. package/dist/behaviors/datatable.d.mts +3 -3
  37. package/dist/behaviors/datatable.mjs +89 -11
  38. package/dist/behaviors/date-picker.mjs +14 -0
  39. package/dist/behaviors/events.d.mts +10 -10
  40. package/dist/behaviors/events.mjs +11 -1
  41. package/dist/behaviors/form-validate.d.mts +10 -1
  42. package/dist/behaviors/form-validate.mjs +279 -4611
  43. package/dist/behaviors/i18n.d.mts +14 -0
  44. package/dist/behaviors/i18n.mjs +28 -0
  45. package/dist/behaviors/input.mjs +16 -0
  46. package/dist/behaviors/kb-access.d.mts +2 -2
  47. package/dist/behaviors/kb-access.mjs +21 -2
  48. package/dist/behaviors/kb-acl.d.mts +2 -2
  49. package/dist/behaviors/kb-acl.mjs +14 -0
  50. package/dist/behaviors/kb-answer.d.mts +2 -2
  51. package/dist/behaviors/kb-answer.mjs +298 -23
  52. package/dist/behaviors/kb-audit.d.mts +2 -2
  53. package/dist/behaviors/kb-audit.mjs +14 -0
  54. package/dist/behaviors/kb-canvas.d.mts +3 -3
  55. package/dist/behaviors/kb-canvas.mjs +14 -0
  56. package/dist/behaviors/kb-chain.d.mts +2 -2
  57. package/dist/behaviors/kb-chain.mjs +14 -0
  58. package/dist/behaviors/kb-checkpoint.d.mts +2 -2
  59. package/dist/behaviors/kb-checkpoint.mjs +14 -0
  60. package/dist/behaviors/kb-chunks.d.mts +2 -2
  61. package/dist/behaviors/kb-chunks.mjs +14 -0
  62. package/dist/behaviors/kb-citation.d.mts +2 -2
  63. package/dist/behaviors/kb-citation.mjs +33 -6
  64. package/dist/behaviors/kb-clarify.d.mts +2 -2
  65. package/dist/behaviors/kb-clarify.mjs +14 -0
  66. package/dist/behaviors/kb-conflict.d.mts +2 -2
  67. package/dist/behaviors/kb-conflict.mjs +14 -0
  68. package/dist/behaviors/kb-connector.d.mts +2 -2
  69. package/dist/behaviors/kb-connector.mjs +14 -0
  70. package/dist/behaviors/kb-core.d.mts +1 -1
  71. package/dist/behaviors/kb-core.mjs +14 -0
  72. package/dist/behaviors/kb-eval.d.mts +2 -2
  73. package/dist/behaviors/kb-eval.mjs +21 -2
  74. package/dist/behaviors/kb-explain.d.mts +2 -2
  75. package/dist/behaviors/kb-explain.mjs +26 -2
  76. package/dist/behaviors/kb-filter.d.mts +2 -2
  77. package/dist/behaviors/kb-filter.mjs +21 -2
  78. package/dist/behaviors/kb-gap.d.mts +2 -2
  79. package/dist/behaviors/kb-gap.mjs +14 -0
  80. package/dist/behaviors/kb-hittest.d.mts +2 -2
  81. package/dist/behaviors/kb-hittest.mjs +15 -1
  82. package/dist/behaviors/kb-metadata.mjs +19 -0
  83. package/dist/behaviors/kb-passage.d.mts +2 -2
  84. package/dist/behaviors/kb-passage.mjs +14 -0
  85. package/dist/behaviors/kb-pipeline.d.mts +2 -2
  86. package/dist/behaviors/kb-pipeline.mjs +14 -0
  87. package/dist/behaviors/kb-qa.mjs +14 -0
  88. package/dist/behaviors/kb-rerank.d.mts +2 -2
  89. package/dist/behaviors/kb-rerank.mjs +14 -0
  90. package/dist/behaviors/kb-retrieval.d.mts +2 -2
  91. package/dist/behaviors/kb-retrieval.mjs +31 -4
  92. package/dist/behaviors/kb-review.d.mts +2 -2
  93. package/dist/behaviors/kb-review.mjs +21 -2
  94. package/dist/behaviors/kb-sandbox.d.mts +2 -2
  95. package/dist/behaviors/kb-sandbox.mjs +20 -1
  96. package/dist/behaviors/kb-segment.d.mts +2 -2
  97. package/dist/behaviors/kb-segment.mjs +15 -1
  98. package/dist/behaviors/kb-select.mjs +21 -2
  99. package/dist/behaviors/kb-sources.d.mts +2 -2
  100. package/dist/behaviors/kb-sources.mjs +14 -0
  101. package/dist/behaviors/kb-sql.d.mts +2 -2
  102. package/dist/behaviors/kb-sql.mjs +14 -0
  103. package/dist/behaviors/kb-trace.d.mts +2 -2
  104. package/dist/behaviors/kb-trace.mjs +22 -3
  105. package/dist/behaviors/kb-visibility.d.mts +2 -2
  106. package/dist/behaviors/kb-visibility.mjs +14 -0
  107. package/dist/behaviors/kb-who-can.d.mts +2 -2
  108. package/dist/behaviors/kb-who-can.mjs +21 -2
  109. package/dist/behaviors/mentions.d.mts +1 -1
  110. package/dist/behaviors/mentions.mjs +14 -0
  111. package/dist/behaviors/modal.d.mts +1 -1
  112. package/dist/behaviors/modal.mjs +14 -0
  113. package/dist/behaviors/motion.d.mts +16 -0
  114. package/dist/behaviors/motion.mjs +39 -0
  115. package/dist/behaviors/notification.d.mts +2 -2
  116. package/dist/behaviors/notification.mjs +27 -3
  117. package/dist/behaviors/panel.mjs +14 -0
  118. package/dist/behaviors/scroll-area.d.mts +17 -0
  119. package/dist/behaviors/scroll-area.mjs +59 -0
  120. package/dist/behaviors/select.mjs +21 -2
  121. package/dist/behaviors/slider.mjs +3 -3
  122. package/dist/behaviors/split-pane.mjs +2 -0
  123. package/dist/behaviors/suggestions.mjs +14 -0
  124. package/dist/behaviors/tabs.mjs +10 -0
  125. package/dist/behaviors/tag-input.mjs +14 -0
  126. package/dist/behaviors/theme-switcher.d.mts +2 -2
  127. package/dist/behaviors/theme-switcher.mjs +30 -2
  128. package/dist/behaviors/theme.mjs +16 -2
  129. package/dist/behaviors/toast.d.mts +2 -2
  130. package/dist/behaviors/toast.mjs +14 -0
  131. package/dist/behaviors/tree-select.mjs +27 -0
  132. package/dist/behaviors/tree.mjs +4 -4
  133. package/dist/behaviors/upload.mjs +14 -0
  134. package/dist/behaviors/url-safety.d.mts +8 -0
  135. package/dist/behaviors/url-safety.mjs +11 -0
  136. package/dist/components/accordion.d.mts +2 -0
  137. package/dist/components/ai-branch.d.mts +2 -0
  138. package/dist/components/ai-chat.css +40 -33
  139. package/dist/components/ai-chat.d.mts +2 -0
  140. package/dist/components/ai-composer.d.mts +2 -0
  141. package/dist/components/ai-context.d.mts +2 -0
  142. package/dist/components/ai-context.mjs +1 -0
  143. package/dist/components/ai-diff.css +6 -6
  144. package/dist/components/ai-diff.d.mts +2 -0
  145. package/dist/components/ai-feedback.d.mts +2 -0
  146. package/dist/components/ai-files.d.mts +2 -0
  147. package/dist/components/ai-message.d.mts +2 -0
  148. package/dist/components/ai-panel.css +12 -10
  149. package/dist/components/ai-reasoning.d.mts +2 -0
  150. package/dist/components/ai-subagent.d.mts +2 -0
  151. package/dist/components/ai-subagent.mjs +1 -0
  152. package/dist/components/ai-threads.d.mts +2 -0
  153. package/dist/components/ai-todo.d.mts +2 -0
  154. package/dist/components/ai-todo.mjs +1 -0
  155. package/dist/components/ai-tool-call.d.mts +2 -0
  156. package/dist/components/ai-tool-call.mjs +1 -0
  157. package/dist/components/ai-tool.css +16 -16
  158. package/dist/components/ai-usage.d.mts +2 -0
  159. package/dist/components/alert.d.mts +2 -0
  160. package/dist/components/autocomplete.css +12 -12
  161. package/dist/components/autocomplete.d.mts +2 -0
  162. package/dist/components/avatar.d.mts +2 -0
  163. package/dist/components/back-top.css +47 -16
  164. package/dist/components/back-top.d.mts +2 -0
  165. package/dist/components/badge.css +1 -1
  166. package/dist/components/badge.d.mts +2 -0
  167. package/dist/components/breadcrumb.css +26 -8
  168. package/dist/components/breadcrumb.d.mts +2 -0
  169. package/dist/components/btn.css +67 -62
  170. package/dist/components/btn.d.mts +2 -0
  171. package/dist/components/card.css +22 -22
  172. package/dist/components/card.d.mts +2 -0
  173. package/dist/components/carousel.d.mts +2 -0
  174. package/dist/components/cascader.css +56 -35
  175. package/dist/components/cascader.d.mts +2 -0
  176. package/dist/components/chart-area.css +46 -0
  177. package/dist/components/chart-area.d.mts +2 -0
  178. package/dist/components/chart-bar.css +66 -19
  179. package/dist/components/chart-bar.d.mts +2 -0
  180. package/dist/components/chart-calendar.d.mts +2 -0
  181. package/dist/components/chart-gauge.css +23 -3
  182. package/dist/components/chart-gauge.d.mts +2 -0
  183. package/dist/components/chart-graph.css +15 -3
  184. package/dist/components/chart-graph.d.mts +2 -0
  185. package/dist/components/chart-heatmap.css +117 -95
  186. package/dist/components/chart-heatmap.d.mts +2 -0
  187. package/dist/components/chart-line.css +54 -0
  188. package/dist/components/chart-line.d.mts +2 -0
  189. package/dist/components/chart-map.d.mts +2 -0
  190. package/dist/components/chart-pie.css +29 -0
  191. package/dist/components/chart-pie.d.mts +2 -0
  192. package/dist/components/chart-radar.css +50 -1
  193. package/dist/components/chart-radar.d.mts +2 -0
  194. package/dist/components/chart-scatter.css +39 -2
  195. package/dist/components/chart-scatter.d.mts +2 -0
  196. package/dist/components/chart-sparkline.css +20 -0
  197. package/dist/components/chart-sparkline.d.mts +2 -0
  198. package/dist/components/chart-stack.css +16 -5
  199. package/dist/components/chart-stack.d.mts +2 -0
  200. package/dist/components/charts.css +109 -35
  201. package/dist/components/charts.d.mts +2 -0
  202. package/dist/components/code-block.css +10 -8
  203. package/dist/components/code-block.d.mts +2 -0
  204. package/dist/components/command-palette.css +45 -38
  205. package/dist/components/command-palette.d.mts +2 -0
  206. package/dist/components/content.css +62 -57
  207. package/dist/components/context-menu.d.mts +2 -0
  208. package/dist/components/copy.css +10 -10
  209. package/dist/components/copy.d.mts +2 -0
  210. package/dist/components/datatable.css +72 -59
  211. package/dist/components/datatable.d.mts +2 -0
  212. package/dist/components/date-picker.css +26 -26
  213. package/dist/components/date-picker.d.mts +2 -0
  214. package/dist/components/desc.d.mts +2 -0
  215. package/dist/components/dropdown.d.mts +2 -0
  216. package/dist/components/empty.css +16 -16
  217. package/dist/components/empty.d.mts +2 -0
  218. package/dist/components/feedback.css +31 -29
  219. package/dist/components/form-validate.css +20 -6
  220. package/dist/components/form-validate.d.mts +2 -0
  221. package/dist/components/form.css +17 -14
  222. package/dist/components/form.d.mts +2 -0
  223. package/dist/components/icon.css +21 -10
  224. package/dist/components/icon.d.mts +2 -0
  225. package/dist/components/input.css +22 -22
  226. package/dist/components/input.d.mts +2 -0
  227. package/dist/components/kb-access.d.mts +2 -0
  228. package/dist/components/kb-acl.d.mts +2 -0
  229. package/dist/components/kb-agent.css +134 -55
  230. package/dist/components/kb-answer.d.mts +2 -0
  231. package/dist/components/kb-audit.d.mts +2 -0
  232. package/dist/components/kb-canvas.d.mts +2 -0
  233. package/dist/components/kb-chain.d.mts +2 -0
  234. package/dist/components/kb-checkpoint.d.mts +2 -0
  235. package/dist/components/kb-chunks.d.mts +2 -0
  236. package/dist/components/kb-citation.d.mts +2 -0
  237. package/dist/components/kb-clarify.d.mts +2 -0
  238. package/dist/components/kb-conflict.d.mts +2 -0
  239. package/dist/components/kb-connector.d.mts +2 -0
  240. package/dist/components/kb-data.css +192 -80
  241. package/dist/components/kb-eval.d.mts +2 -0
  242. package/dist/components/kb-explain.d.mts +2 -0
  243. package/dist/components/kb-filter.d.mts +2 -0
  244. package/dist/components/kb-gap.d.mts +2 -0
  245. package/dist/components/kb-ground.css +165 -73
  246. package/dist/components/kb-hittest.d.mts +2 -0
  247. package/dist/components/kb-ingest.css +308 -113
  248. package/dist/components/kb-metadata.d.mts +2 -0
  249. package/dist/components/kb-ops.css +189 -75
  250. package/dist/components/kb-passage.d.mts +2 -0
  251. package/dist/components/kb-perm.css +158 -87
  252. package/dist/components/kb-pipeline.d.mts +2 -0
  253. package/dist/components/kb-qa.d.mts +2 -0
  254. package/dist/components/kb-rerank.d.mts +2 -0
  255. package/dist/components/kb-retrieval.d.mts +2 -0
  256. package/dist/components/kb-review.d.mts +2 -0
  257. package/dist/components/kb-sandbox.d.mts +2 -0
  258. package/dist/components/kb-search.css +353 -116
  259. package/dist/components/kb-segment.d.mts +2 -0
  260. package/dist/components/kb-sources.d.mts +2 -0
  261. package/dist/components/kb-sql.d.mts +2 -0
  262. package/dist/components/kb-trace.d.mts +2 -0
  263. package/dist/components/kb-visibility.d.mts +2 -0
  264. package/dist/components/kb-who-can.d.mts +2 -0
  265. package/dist/components/kb.css +60 -36
  266. package/dist/components/kb.d.mts +2 -0
  267. package/dist/components/kbd.d.mts +2 -0
  268. package/dist/components/layout.css +10 -10
  269. package/dist/components/layout.d.mts +2 -0
  270. package/dist/components/list.d.mts +2 -0
  271. package/dist/components/material-chinese.css +10 -0
  272. package/dist/components/material-soviet.css +10 -0
  273. package/dist/components/material.css +61 -18
  274. package/dist/components/media-card.d.mts +2 -0
  275. package/dist/components/media.css +22 -27
  276. package/dist/components/mentions.css +18 -17
  277. package/dist/components/mentions.d.mts +2 -0
  278. package/dist/components/menu.css +32 -28
  279. package/dist/components/modal.css +30 -27
  280. package/dist/components/modal.d.mts +2 -0
  281. package/dist/components/nav.css +48 -44
  282. package/dist/components/nav.d.mts +2 -0
  283. package/dist/components/notification.css +31 -25
  284. package/dist/components/notification.d.mts +2 -0
  285. package/dist/components/pagination.css +15 -13
  286. package/dist/components/pagination.d.mts +2 -0
  287. package/dist/components/panel.css +19 -20
  288. package/dist/components/panel.d.mts +2 -0
  289. package/dist/components/pill.css +8 -7
  290. package/dist/components/pill.d.mts +2 -0
  291. package/dist/components/popover.css +32 -23
  292. package/dist/components/popover.d.mts +2 -0
  293. package/dist/components/progress.d.mts +2 -0
  294. package/dist/components/rating.d.mts +2 -0
  295. package/dist/components/result.d.mts +2 -0
  296. package/dist/components/scroll-area.css +84 -112
  297. package/dist/components/scroll-area.d.mts +2 -0
  298. package/dist/components/scroll-area.mjs +1 -0
  299. package/dist/components/segmented.css +47 -29
  300. package/dist/components/segmented.d.mts +2 -0
  301. package/dist/components/select.css +80 -41
  302. package/dist/components/select.d.mts +2 -0
  303. package/dist/components/sidebar.css +42 -38
  304. package/dist/components/sidebar.d.mts +2 -0
  305. package/dist/components/skeleton.d.mts +2 -0
  306. package/dist/components/slider.css +26 -22
  307. package/dist/components/slider.d.mts +2 -0
  308. package/dist/components/spinner.d.mts +2 -0
  309. package/dist/components/split-pane.css +16 -7
  310. package/dist/components/split-pane.d.mts +2 -0
  311. package/dist/components/stat.css +17 -16
  312. package/dist/components/stat.d.mts +2 -0
  313. package/dist/components/steps.css +26 -26
  314. package/dist/components/steps.d.mts +2 -0
  315. package/dist/components/switch.css +78 -39
  316. package/dist/components/switch.d.mts +2 -0
  317. package/dist/components/table.css +54 -32
  318. package/dist/components/table.d.mts +2 -0
  319. package/dist/components/tabs.css +53 -32
  320. package/dist/components/tabs.d.mts +2 -0
  321. package/dist/components/tag-input.css +12 -8
  322. package/dist/components/tag-input.d.mts +2 -0
  323. package/dist/components/tag.css +20 -12
  324. package/dist/components/tag.d.mts +2 -0
  325. package/dist/components/theme-switcher.css +7 -7
  326. package/dist/components/theme-switcher.d.mts +2 -0
  327. package/dist/components/timeline.d.mts +2 -0
  328. package/dist/components/toast.css +34 -30
  329. package/dist/components/toast.d.mts +2 -0
  330. package/dist/components/toolbar.css +19 -18
  331. package/dist/components/toolbar.d.mts +2 -0
  332. package/dist/components/tooltip.css +9 -8
  333. package/dist/components/tooltip.d.mts +2 -0
  334. package/dist/components/tree-select.css +63 -40
  335. package/dist/components/tree-select.d.mts +2 -0
  336. package/dist/components/tree.d.mts +2 -0
  337. package/dist/components/upload.css +9 -11
  338. package/dist/components/upload.d.mts +2 -0
  339. package/dist/index.d.mts +85 -84
  340. package/dist/index.mjs +14644 -13935
  341. package/dist/react.d.mts +18 -18
  342. package/dist/react.mjs +377 -36
  343. package/dist/registry.json +797 -64
  344. package/dist/tokens/colors.css +6 -0
  345. package/dist/tokens/design.css +137 -31
  346. package/dist/tokens/dtcg.json +9592 -2008
  347. package/dist/tokens/figma.variables.json +7451 -2141
  348. package/dist/tokens/motion.css +51 -0
  349. package/dist/tokens/pixel.css +10 -0
  350. package/dist/tokens/scrollbars.css +40 -0
  351. package/dist/tokens/tokens-studio.json +8390 -1142
  352. package/dist/tokens/typography.css +33 -0
  353. package/dist/tokens.css +402 -82
  354. package/dist/ui.css +4196 -2163
  355. package/dist/vue.d.mts +17 -17
  356. package/dist/vue.mjs +371 -34
  357. package/docs/spec/charts-scale-a11y.md +115 -0
  358. package/docs/spec/design-philosophy.md +5 -5
  359. package/docs/spec/design-primitives.md +10 -10
  360. package/docs/spec/motion-typography.md +105 -0
  361. package/docs/spec/scrollbars.md +46 -0
  362. package/package.json +17 -3
@@ -5,7 +5,7 @@
5
5
  * DOM 契约见 docs/spec/kb-family.md §5.1–5.4;behaviors/kb-citation.ts 等。
6
6
  *
7
7
  * 视觉音调(spec §2 硬约束):
8
- * - 字号:标题 13px/600 · 正文 13px · 元信息 11.5px · 徽标 10.5px;数字一律 .icen-kb-num
8
+ * - 字号:标题 13px/600 · 正文 13px · 元信息 11px · 徽标 11px;数字一律 .icen-kb-num
9
9
  * - 节奏:行 28px(data-icen-density="compact" 收 24px)· 区块 16px · 组内 8px
10
10
  * - 圆角:容器 --icen-radius-md · 行内(角标/chip)--icen-radius-sm 或全圆
11
11
  * - 色彩:证据域主角是 accent,但角标默认 faint 弱化、hover/激活才点亮;
@@ -21,17 +21,18 @@
21
21
  display: inline-flex;
22
22
  align-items: center;
23
23
  justify-content: center;
24
- min-width: 16px;
25
- height: 16px;
26
- margin: 0 1px;
27
- padding: 0 3px;
24
+ min-inline-size: 18px;
25
+ min-block-size: 18px;
26
+ margin-block: 0;
27
+ margin-inline: 1px;
28
+ padding: 0 4px;
28
29
  border: 1px solid var(--icen-token-line-soft);
29
30
  border-radius: var(--icen-radius-sm);
30
31
  background: transparent;
31
32
  color: var(--icen-token-text-faint);
32
33
  font-family: var(--icen-font-mono);
33
34
  font-variant-numeric: tabular-nums;
34
- font-size: 10px;
35
+ font-size: var(--icen-density-font-size-xs);
35
36
  line-height: 1;
36
37
  vertical-align: 2px; /* 上标视感,与正文基线对齐 */
37
38
  cursor: pointer;
@@ -40,14 +41,25 @@
40
41
  }
41
42
  /* hover 点亮 accent:引用是证据域主角,但默认弱化、悬停才给注意力 */
42
43
  .icen-kb-citation:hover {
43
- color: var(--icen-token-accent);
44
+ color: var(--icen-token-accent-text); /* 可读变体:裸 accent 叠 8% accent 底浅色仅 ~3.4:1,11px 字更需 AA */
44
45
  border-color: color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
45
46
  background: color-mix(in srgb, var(--icen-token-accent) 8%, transparent);
46
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);
51
+ }
47
52
  .icen-kb-citation:focus-visible {
48
53
  outline: none;
49
54
  box-shadow: var(--icen-ring);
50
55
  }
56
+ /* 触屏抬触达面(角标是证据域主交互,18px 打不中) */
57
+ @media (pointer: coarse) {
58
+ .icen-kb-citation {
59
+ min-inline-size: 24px;
60
+ min-block-size: 24px;
61
+ }
62
+ }
51
63
  /* 无效编号:灰显不可点(不信任模型生成编号的降级态) */
52
64
  .icen-kb-citation.is-dead {
53
65
  pointer-events: none;
@@ -66,11 +78,11 @@
66
78
  flex-direction: column;
67
79
  gap: 8px;
68
80
  max-width: 340px;
69
- padding: 10px 12px;
70
- background: var(--icen-token-surface);
81
+ padding: 12px;
82
+ background: var(--icen-token-surface-raised);
71
83
  border: 1px solid var(--icen-token-line-soft);
72
84
  border-radius: var(--icen-radius-md);
73
- box-shadow: var(--icen-token-shadow-overlay);
85
+ box-shadow: var(--icen-token-shadow-elevated);
74
86
  animation: kb-ground-card-in var(--icen-tx-fast);
75
87
  }
76
88
  @keyframes kb-ground-card-in {
@@ -95,8 +107,9 @@
95
107
  .icen-kb-citation-card-icon > svg { width: 14px; height: 14px; }
96
108
  .icen-kb-citation-card-title {
97
109
  min-width: 0;
98
- font-size: 13px;
110
+ font-size: var(--icen-density-font-size-md);
99
111
  font-weight: 600;
112
+ line-height: 1.35;
100
113
  color: var(--icen-token-text);
101
114
  white-space: nowrap;
102
115
  overflow: hidden;
@@ -104,7 +117,8 @@
104
117
  }
105
118
  .icen-kb-citation-card-domain {
106
119
  font-family: var(--icen-font-mono);
107
- font-size: 11px;
120
+ font-size: var(--icen-density-font-size-xs);
121
+ letter-spacing: 0.3px;
108
122
  color: var(--icen-token-text-faint);
109
123
  white-space: nowrap;
110
124
  overflow: hidden;
@@ -168,14 +182,13 @@
168
182
 
169
183
  .icen-kb-source {
170
184
  --kb-source-tint: var(--icen-token-accent);
171
- position: relative;
172
185
  display: grid;
173
186
  grid-template-columns: auto 1fr auto;
174
187
  align-items: center;
175
188
  gap: 10px;
176
- min-height: 28px;
177
- padding-block: 4px;
178
- padding-inline: 10px 8px;
189
+ min-height: var(--icen-density-item-height);
190
+ padding-block: 3px;
191
+ padding-inline: 8px;
179
192
  border: 1px solid transparent;
180
193
  border-radius: var(--icen-radius-sm);
181
194
  background: transparent;
@@ -183,36 +196,31 @@
183
196
  text-align: start;
184
197
  cursor: pointer;
185
198
  transition: background-color var(--icen-tx-fast), border-color var(--icen-tx-fast),
186
- transform var(--icen-tx-fast);
199
+ color var(--icen-tx-fast);
187
200
  }
188
201
  .icen-kb-sources--row .icen-kb-source { inline-size: auto; }
189
202
  .icen-kb-sources--rail .icen-kb-source { inline-size: 100%; }
190
- /* hover 浮起(1px 上移 = 轻量层级暗示,不进阴影层);仅可悬停设备生效(触屏关闭抬升) */
203
+ /* hover 只抬底色与边框,不做位移(位移会把行从阅读节奏里抖出去);仅可悬停设备生效 */
191
204
  @media (hover: hover) and (pointer: fine) {
192
205
  .icen-kb-source:hover {
193
- background: var(--icen-token-bg-soft);
206
+ background: var(--icen-token-fill-hover);
194
207
  border-color: var(--icen-token-line-soft);
195
- transform: translateY(-1px);
196
208
  }
197
209
  }
210
+ .icen-kb-source:active {
211
+ background: var(--icen-token-fill-pressed);
212
+ }
198
213
  .icen-kb-source:focus-visible {
199
214
  outline: none;
200
215
  box-shadow: var(--icen-ring);
201
216
  }
202
- /* 当前阅读位:起始缘 2px accent 证据线(宿主或 kb-passage 锚定驱动,RTL 镜像) */
217
+ /* 当前阅读位:持续选中底色 + 辅助信息提升(不画左侧竖条) */
203
218
  .icen-kb-source.is-active {
204
- background: var(--icen-token-bg-soft);
205
- border-color: color-mix(in srgb, var(--kb-source-tint) 30%, transparent);
219
+ background: var(--icen-token-fill-selected);
220
+ border-color: color-mix(in srgb, var(--kb-source-tint) 32%, transparent);
206
221
  }
207
- .icen-kb-source.is-active::before {
208
- content: '';
209
- position: absolute;
210
- inset-inline-start: 0;
211
- top: 5px;
212
- bottom: 5px;
213
- width: 2px;
214
- border-radius: 1px; /* guard:allow-radius 微构件(bar/dot/track/指示器等图形级,不属容器圆角面) */
215
- background: var(--kb-source-tint);
222
+ .icen-kb-source.is-active .icen-kb-source-sub {
223
+ color: var(--icen-token-text-muted);
216
224
  }
217
225
 
218
226
  .icen-kb-source-icon {
@@ -232,7 +240,7 @@
232
240
  gap: 1px;
233
241
  }
234
242
  .icen-kb-source-title {
235
- font-size: 13px;
243
+ font-size: var(--icen-density-font-size-md);
236
244
  line-height: 1.4;
237
245
  color: var(--icen-token-text);
238
246
  white-space: nowrap;
@@ -240,7 +248,7 @@
240
248
  text-overflow: ellipsis;
241
249
  }
242
250
  .icen-kb-source-sub {
243
- font-size: 11.5px;
251
+ font-size: var(--icen-density-font-size-xs);
244
252
  line-height: 1.4;
245
253
  color: var(--icen-token-text-faint);
246
254
  white-space: nowrap;
@@ -263,36 +271,44 @@
263
271
 
264
272
  /* 受限行内的申请访问按钮(行壳已降级为 role=button,嵌套合法) */
265
273
  .icen-kb-source-request {
274
+ display: inline-flex;
275
+ align-items: center;
276
+ justify-content: center;
266
277
  flex: 0 0 auto;
267
- padding: 2.5px 7px;
278
+ min-block-size: var(--icen-density-item-height);
279
+ padding-block: 0;
280
+ padding-inline: 12px;
268
281
  border: 1px solid var(--icen-token-line-soft);
269
282
  border-radius: var(--icen-radius-full);
270
283
  background: transparent;
271
284
  color: var(--icen-token-text-muted);
272
- font-size: 10.5px;
285
+ font-size: var(--icen-density-font-size-xs);
273
286
  line-height: 1;
274
287
  letter-spacing: 0.3px;
288
+ white-space: nowrap;
275
289
  cursor: pointer;
276
- 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);
277
292
  }
278
293
  .icen-kb-source-request:hover {
279
- color: var(--icen-token-accent);
294
+ color: var(--icen-token-accent-text);
280
295
  border-color: color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
296
+ background: var(--icen-token-fill-hover);
297
+ }
298
+ .icen-kb-source-request:active {
299
+ background: var(--icen-token-fill-pressed);
281
300
  }
282
301
  .icen-kb-source-request:focus-visible {
283
302
  outline: none;
284
303
  box-shadow: var(--icen-ring);
285
304
  }
286
305
 
287
- /* 密度 compact:行高 28 → 24 */
288
- [data-icen-density='compact'] .icen-kb-source { min-height: 24px; gap: 8px; }
289
-
290
306
  /* ══════════════════════════════════════════════
291
307
  §5.3 kb-passage 原文定位抽屉(行内末端侧 340px,RTL 镜像到左侧)
292
308
  ══════════════════════════════════════════════ */
293
309
 
294
310
  .icen-kb-passage {
295
- --kb-passage-duration: 200ms;
311
+ --kb-passage-duration: var(--icen-tx-normal);
296
312
  position: fixed;
297
313
  inset-block: 0;
298
314
  inset-inline-end: 0;
@@ -304,7 +320,7 @@
304
320
  border-inline-start: 1px solid var(--icen-token-line-soft);
305
321
  box-shadow: var(--icen-token-shadow-overlay);
306
322
  transform: translateX(100%); /* guard:allow-physical 隐藏位沿物理右缘滑出(LTR 抽屉侧),RTL 镜像规则翻为 translateX(-100%) */
307
- transition: transform var(--kb-passage-duration) var(--icen-ease-out);
323
+ transition: transform var(--kb-passage-duration);
308
324
  }
309
325
  .icen-kb-passage[hidden] { display: none; }
310
326
  .icen-kb-passage.is-open { transform: translateX(0); }
@@ -313,7 +329,7 @@
313
329
  display: flex;
314
330
  align-items: center;
315
331
  gap: 8px;
316
- padding: 10px 12px;
332
+ padding: 12px;
317
333
  border-bottom: 1px solid var(--icen-token-line-soft);
318
334
  }
319
335
  .icen-kb-passage-icon {
@@ -334,9 +350,9 @@
334
350
  gap: 2px;
335
351
  }
336
352
  .icen-kb-passage-title {
337
- font-size: 13px;
353
+ font-size: var(--icen-density-font-size-md);
338
354
  font-weight: 600;
339
- line-height: 1.4;
355
+ line-height: 1.35;
340
356
  color: var(--icen-token-text);
341
357
  white-space: nowrap;
342
358
  overflow: hidden;
@@ -344,7 +360,7 @@
344
360
  }
345
361
  .icen-kb-passage-loc {
346
362
  font-family: var(--icen-font-mono);
347
- font-size: 11px;
363
+ font-size: var(--icen-density-font-size-xs);
348
364
  letter-spacing: 0.3px;
349
365
  color: var(--icen-token-text-faint);
350
366
  white-space: nowrap;
@@ -362,12 +378,13 @@
362
378
  border-radius: var(--icen-radius-sm);
363
379
  background: transparent;
364
380
  color: var(--icen-token-text-faint);
365
- font-size: 14px;
381
+ font-size: var(--icen-density-font-size-lg);
366
382
  line-height: 1;
367
383
  cursor: pointer;
368
384
  transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast);
369
385
  }
370
- .icen-kb-passage-close:hover { color: var(--icen-token-text); background: var(--icen-token-bg-soft); }
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); }
371
388
  .icen-kb-passage-close:focus-visible { outline: none; box-shadow: var(--icen-ring); }
372
389
 
373
390
  .icen-kb-passage-body {
@@ -376,9 +393,9 @@
376
393
  overflow-y: auto;
377
394
  display: flex;
378
395
  flex-direction: column;
379
- gap: 8px;
396
+ gap: 10px;
380
397
  padding: 12px;
381
- font-size: 13px;
398
+ font-size: var(--icen-density-font-size-md);
382
399
  line-height: 1.7;
383
400
  color: var(--icen-token-text);
384
401
  }
@@ -390,7 +407,7 @@
390
407
  position: relative;
391
408
  padding-block: 2px;
392
409
  padding-inline-start: 12px;
393
- font-size: 12.5px;
410
+ font-size: var(--icen-density-font-size-xs);
394
411
  line-height: 1.7;
395
412
  color: var(--icen-token-text-faint);
396
413
  white-space: pre-wrap;
@@ -410,24 +427,31 @@
410
427
  .icen-kb-passage.is-expanded .icen-kb-passage-context { animation: kb-ground-card-in var(--icen-tx-fast); }
411
428
 
412
429
  .icen-kb-passage-expand {
430
+ display: inline-flex;
431
+ align-items: center;
432
+ justify-content: center;
413
433
  align-self: flex-start;
414
- padding: 2px 8px;
434
+ min-block-size: var(--icen-density-item-height);
435
+ padding-block: 2px;
436
+ padding-inline: 8px;
415
437
  border: none;
416
438
  border-radius: var(--icen-radius-sm);
417
439
  background: transparent;
418
440
  color: var(--icen-token-text-muted);
419
- font-size: 11.5px;
441
+ font-size: var(--icen-density-font-size-xs);
442
+ line-height: 1.4;
420
443
  cursor: pointer;
421
444
  transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast);
422
445
  }
423
- .icen-kb-passage-expand:hover { color: var(--icen-token-text); background: var(--icen-token-bg-soft); }
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); }
424
448
  .icen-kb-passage-expand:focus-visible { outline: none; box-shadow: var(--icen-ring); }
425
449
 
426
450
  /* 受限正文:citedText 打码 + 申请访问 */
427
451
  .icen-kb-passage-masked {
428
452
  filter: blur(4px);
429
453
  user-select: none;
430
- font-size: 12.5px;
454
+ font-size: var(--icen-density-font-size-md);
431
455
  line-height: 1.7;
432
456
  color: var(--icen-token-text-muted);
433
457
  white-space: pre-wrap;
@@ -436,28 +460,36 @@
436
460
  .icen-kb-passage-request {
437
461
  display: inline-flex;
438
462
  align-items: center;
439
- gap: 5px;
463
+ justify-content: center;
464
+ gap: 6px;
440
465
  align-self: flex-start;
466
+ min-block-size: var(--icen-density-item-height);
441
467
  margin-top: 4px;
442
- padding: 4px 10px;
468
+ padding-block: 3px;
469
+ padding-inline: 12px;
443
470
  border: 1px solid color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
444
- border-radius: var(--icen-radius-full);
471
+ border-radius: var(--icen-radius-sm);
445
472
  background: var(--icen-token-accent-subtle);
446
- color: var(--icen-token-accent);
447
- font-size: 11.5px;
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;
448
477
  cursor: pointer;
449
478
  transition: background-color var(--icen-tx-fast), border-color var(--icen-tx-fast);
450
479
  }
451
- .icen-kb-passage-request > svg { width: 12px; height: 12px; }
480
+ .icen-kb-passage-request > svg { width: 14px; height: 14px; }
452
481
  .icen-kb-passage-request:hover {
453
482
  border-color: var(--icen-token-accent);
483
+ background: color-mix(in srgb, var(--icen-token-accent) 14%, transparent);
484
+ }
485
+ .icen-kb-passage-request:active {
486
+ background: color-mix(in srgb, var(--icen-token-accent) 18%, transparent);
454
487
  }
455
488
  .icen-kb-passage-request:focus-visible { outline: none; box-shadow: var(--icen-ring); }
456
489
 
457
490
  /* 跳转锚定宿主([data-icen-kb-loc]):命中项 .is-current 高亮 */
458
491
  [data-icen-kb-loc].is-current {
459
- background: color-mix(in srgb, var(--icen-token-accent) 10%, transparent);
460
- box-shadow: inset 2px 0 0 var(--icen-token-accent);
492
+ background: var(--icen-token-fill-selected);
461
493
  border-radius: var(--icen-radius-sm);
462
494
  }
463
495
 
@@ -469,7 +501,7 @@
469
501
  display: flex;
470
502
  flex-direction: column;
471
503
  gap: 8px;
472
- padding: 10px 12px;
504
+ padding: 12px;
473
505
  border: 1px solid var(--icen-token-line-soft);
474
506
  border-radius: var(--icen-radius-md);
475
507
  background: var(--icen-token-bg-soft);
@@ -479,8 +511,9 @@
479
511
  display: flex;
480
512
  align-items: baseline;
481
513
  gap: 8px;
482
- font-size: 13px;
514
+ font-size: var(--icen-density-font-size-md);
483
515
  font-weight: 600;
516
+ line-height: 1.4;
484
517
  color: var(--icen-token-text);
485
518
  }
486
519
  .icen-kb-conflict-claim .icen-kb-dot { align-self: center; }
@@ -500,7 +533,8 @@
500
533
  padding: 8px 10px;
501
534
  border: 1px solid var(--icen-token-line-soft);
502
535
  border-radius: var(--icen-radius-md);
503
- background: var(--icen-token-surface);
536
+ background: var(--icen-token-surface-raised);
537
+ box-shadow: var(--icen-token-shadow-card);
504
538
  font: inherit;
505
539
  text-align: start;
506
540
  cursor: pointer;
@@ -509,14 +543,23 @@
509
543
  /* is-current:最新/官方版本,accent 高亮(唯一主角) */
510
544
  .icen-kb-conflict-ver.is-current {
511
545
  border-color: color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
512
- background: color-mix(in srgb, var(--icen-token-accent) 6%, var(--icen-token-surface));
546
+ background: var(--icen-token-fill-selected);
513
547
  }
514
548
  /* 其余版本:faded 退后 */
515
549
  .icen-kb-conflict-ver.is-older { /* 不降透明:透明会折进文字对比度;旧版语义由 muted 文案承担 */ }
516
550
  .icen-kb-conflict-ver:hover {
517
- border-color: color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
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);
518
558
  }
519
559
  .icen-kb-conflict-ver.is-older:hover { /* hover 反馈由底色承担 */ }
560
+ .icen-kb-conflict-ver:active {
561
+ background: var(--icen-token-fill-pressed);
562
+ }
520
563
  .icen-kb-conflict-ver:focus-visible { outline: none; box-shadow: var(--icen-ring); }
521
564
 
522
565
  .icen-kb-conflict-ver-head {
@@ -525,7 +568,7 @@
525
568
  gap: 8px;
526
569
  min-inline-size: 0;
527
570
  }
528
- .icen-kb-conflict-ver-date { font-size: 11px; }
571
+ .icen-kb-conflict-ver-date { font-size: var(--icen-density-font-size-xs); color: var(--icen-token-text); }
529
572
  .icen-kb-conflict-ver-badges {
530
573
  display: inline-flex;
531
574
  align-items: center;
@@ -534,7 +577,7 @@
534
577
  }
535
578
  .icen-kb-conflict-ver-badges .icen-kb-dot { width: 6px; height: 6px; }
536
579
  .icen-kb-conflict-ver-title {
537
- font-size: 12.5px;
580
+ font-size: var(--icen-density-font-size-md);
538
581
  line-height: 1.4;
539
582
  color: var(--icen-token-text);
540
583
  white-space: nowrap;
@@ -542,14 +585,34 @@
542
585
  text-overflow: ellipsis;
543
586
  }
544
587
  .icen-kb-conflict-ver-sub {
545
- font-size: 11.5px;
588
+ font-size: var(--icen-density-font-size-xs);
546
589
  line-height: 1.4;
547
- color: var(--icen-token-text-muted);
590
+ /* 卡片底色是 raised(比页面暗一档),muted 在 11–12px 下会擦到 AA 边界;
591
+ 用正文色保证可读,层级交给 13/12 字号与标题字重。 */
592
+ color: var(--icen-token-text);
548
593
  white-space: nowrap;
549
594
  overflow: hidden;
550
595
  text-overflow: ellipsis;
551
596
  }
552
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
+
553
616
  /* ══════════════════════════════════════════════
554
617
  动效守卫(reduced-motion:全退化为瞬时)
555
618
  ══════════════════════════════════════════════ */
@@ -575,4 +638,33 @@
575
638
  :is([dir='rtl']) .icen-kb-passage { transform: translateX(-100%); }
576
639
  :is([dir='rtl']) .icen-kb-passage.is-open { transform: translateX(0); }
577
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
+
578
670
  }
@@ -0,0 +1,2 @@
1
+ // kit: kb-hittest 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/kb-hittest.mjs';