@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
@@ -19,13 +19,13 @@
19
19
  font-family: var(--icen-font-mono);
20
20
  font-weight: 500;
21
21
  border-radius: var(--icen-radius-xs);
22
- border: 1px solid var(--icen-token-outline);
22
+ border: 1px solid var(--icen-token-control-border);
23
23
  background: var(--icen-token-control);
24
24
  color: var(--icen-token-text-muted);
25
- box-shadow: var(--icen-token-shadow-inset);
26
- height: 20px;
27
- min-width: 20px;
28
- padding: 0 var(--icen-density-space-xs);
25
+ box-shadow: 0 1px 0 var(--icen-token-control-border);
26
+ height: 19px;
27
+ min-width: 19px;
28
+ padding: 0 5px;
29
29
  font-size: var(--icen-density-font-size-xs);
30
30
  }
31
31
  .icen-kbd--sm {
@@ -49,10 +49,10 @@
49
49
  padding: 2px var(--icen-density-space-xs);
50
50
  border-radius: var(--icen-radius-xs);
51
51
  background: var(--icen-token-control);
52
- border: 1px solid var(--icen-token-outline-soft);
52
+ border: 1px solid var(--icen-token-separator-soft);
53
53
  font-size: 0.9em;
54
54
  font-family: var(--icen-font-mono);
55
- color: var(--icen-token-accent-text, var(--icen-token-accent));
55
+ color: var(--icen-token-accent-text);
56
56
  word-break: break-word;
57
57
  }
58
58
 
@@ -67,13 +67,14 @@
67
67
  padding: 0;
68
68
  }
69
69
  .icen-list-item {
70
- padding: var(--icen-density-space-sm);
71
- border-radius: var(--icen-radius-sm);
70
+ min-block-size: var(--icen-control-height-sm);
71
+ padding: 4px var(--icen-density-space-sm);
72
+ border-radius: var(--icen-radius-xs);
72
73
  transition: background-color var(--icen-tx-fast);
73
74
  }
74
- .icen-list-item:hover { background: var(--icen-token-control-hover); }
75
- .icen-list .icen-list-item + .icen-list-item { border-top: 1px solid var(--icen-token-outline-soft); }
76
- .icen-list--compact .icen-list-item { padding: var(--icen-density-space-xs) var(--icen-density-space-sm); }
75
+ .icen-list-item:hover { background: var(--icen-token-fill-hover); }
76
+ .icen-list .icen-list-item + .icen-list-item { border-top: 1px solid var(--icen-token-separator-soft); }
77
+ .icen-list--compact .icen-list-item { padding: 2px var(--icen-density-space-sm); }
77
78
 
78
79
  /* ══════════════ accordion · 手风琴(behaviors/accordion 配套) ══════════════
79
80
  * DOM:
@@ -87,7 +88,7 @@
87
88
  * data-icen-single:展开一项自动收起其余(behavior 实现)。
88
89
  */
89
90
  .icen-accordion-item {
90
- border-bottom: 1px solid var(--icen-token-outline-soft);
91
+ border-bottom: 1px solid var(--icen-token-separator-soft);
91
92
  }
92
93
  .icen-accordion-item:last-child { border-bottom: 0; }
93
94
  .icen-accordion-trigger {
@@ -96,19 +97,20 @@
96
97
  align-items: center;
97
98
  justify-content: space-between;
98
99
  gap: var(--icen-density-space-sm);
99
- padding: var(--icen-density-space-sm);
100
- font-size: var(--icen-density-font-size-md);
101
- font-weight: 500;
100
+ min-block-size: 32px;
101
+ padding: 5px var(--icen-density-space-sm);
102
+ font-size: var(--icen-font-size-control);
103
+ font-weight: var(--icen-font-weight-control);
102
104
  color: var(--icen-token-text);
103
105
  text-align: start;
104
106
  background: none;
105
107
  border: 0;
106
108
  cursor: pointer;
107
- border-radius: var(--icen-radius-sm);
109
+ border-radius: var(--icen-radius-xs);
108
110
  transition: background-color var(--icen-tx-fast);
109
111
  }
110
112
  .icen-accordion-trigger:hover {
111
- background: var(--icen-token-control-hover);
113
+ background: var(--icen-token-fill-hover);
112
114
  }
113
115
  .icen-accordion-trigger:focus-visible {
114
116
  outline: none;
@@ -147,21 +149,21 @@
147
149
  transition: padding-block-end var(--icen-tx-normal);
148
150
  font-size: var(--icen-density-font-size-sm);
149
151
  color: var(--icen-token-text-muted);
150
- line-height: 1.6;
152
+ line-height: 1.55;
151
153
  }
152
154
  .icen-accordion-item.is-open .icen-accordion-panel-inner { padding-block-end: var(--icen-density-space-sm); }
153
155
 
154
156
  /* 卡片式手风琴:整组包在带边框的卡片里 */
155
157
  .icen-accordion--cards {
156
- border: 1px solid var(--icen-token-outline-soft);
157
- border-radius: var(--icen-radius-md);
158
+ border: 1px solid var(--icen-token-separator-soft);
159
+ border-radius: var(--icen-control-radius-lg);
158
160
  overflow: hidden;
159
161
  }
160
162
  .icen-accordion--cards .icen-accordion-item {
161
163
  border-bottom: 0;
162
164
  }
163
165
  .icen-accordion--cards .icen-accordion-item + .icen-accordion-item {
164
- border-top: 1px solid var(--icen-token-outline-soft);
166
+ border-top: 1px solid var(--icen-token-separator-soft);
165
167
  }
166
168
 
167
169
  /* ══════════════ timeline · 时间线 ══════════════
@@ -186,7 +188,7 @@
186
188
  top: 32px;
187
189
  bottom: 0;
188
190
  width: 1px;
189
- background: var(--icen-token-outline-soft);
191
+ background: var(--icen-token-separator);
190
192
  }
191
193
  .icen-timeline-dot {
192
194
  width: 28px;
@@ -196,8 +198,8 @@
196
198
  display: flex;
197
199
  align-items: center;
198
200
  justify-content: center;
199
- background: var(--icen-token-control);
200
- border: 1px solid var(--icen-token-outline-soft);
201
+ background: var(--icen-token-surface);
202
+ border: 1px solid var(--icen-token-control-border);
201
203
  color: var(--icen-token-text-muted);
202
204
  z-index: 1;
203
205
  }
@@ -215,20 +217,21 @@
215
217
  gap: var(--icen-density-space-sm);
216
218
  }
217
219
  .icen-timeline-title {
218
- font-size: var(--icen-density-font-size-md);
219
- font-weight: 500;
220
+ font-size: var(--icen-font-size-control);
221
+ font-weight: var(--icen-font-weight-control);
220
222
  color: var(--icen-token-text);
221
223
  }
222
224
  .icen-timeline-time {
223
225
  font-size: var(--icen-density-font-size-xs);
224
- color: var(--icen-token-text-faint);
226
+ color: var(--icen-token-text-muted);
225
227
  margin-inline-start: auto;
226
228
  font-variant-numeric: tabular-nums;
229
+ letter-spacing: .01em;
227
230
  }
228
231
  .icen-timeline-desc {
229
232
  font-size: var(--icen-density-font-size-sm);
230
233
  color: var(--icen-token-text-muted);
231
- margin: 4px 0 0;
234
+ margin: 3px 0 0;
232
235
  line-height: 1.5;
233
236
  }
234
237
 
@@ -238,8 +241,8 @@
238
241
  */
239
242
  .icen-desc { display: flex; flex-direction: column; gap: var(--icen-density-space-sm); }
240
243
  .icen-desc-title {
241
- font-size: var(--icen-density-font-size-md);
242
- font-weight: 500;
244
+ font-size: var(--icen-font-size-title);
245
+ font-weight: var(--icen-font-weight-title);
243
246
  color: var(--icen-token-text);
244
247
  margin: 0;
245
248
  }
@@ -250,15 +253,15 @@
250
253
  margin: 0;
251
254
  }
252
255
  .icen-desc--bordered .icen-desc-grid {
253
- background: var(--icen-token-outline-soft);
254
- border: 1px solid var(--icen-token-outline-soft);
255
- border-radius: var(--icen-radius-md);
256
+ background: var(--icen-token-separator-soft);
257
+ border: 1px solid var(--icen-token-separator-soft);
258
+ border-radius: var(--icen-control-radius-lg);
256
259
  overflow: hidden;
257
260
  }
258
261
  .icen-desc-item { grid-column: span var(--desc-span, 1); }
259
262
  .icen-desc--bordered .icen-desc-item {
260
- background: var(--icen-token-card);
261
- padding: var(--icen-density-space-sm) var(--icen-density-space-md);
263
+ background: var(--icen-token-surface);
264
+ padding: 6px 10px;
262
265
  }
263
266
  .icen-desc:not(.icen-desc--bordered) .icen-desc-item {
264
267
  display: flex;
@@ -267,10 +270,10 @@
267
270
  }
268
271
  .icen-desc-item dt {
269
272
  font-size: var(--icen-density-font-size-xs);
270
- color: var(--icen-token-text-faint);
273
+ color: var(--icen-token-text-muted);
271
274
  }
272
275
  .icen-desc-item dd {
273
- font-size: var(--icen-density-font-size-md);
276
+ font-size: var(--icen-font-size-control);
274
277
  color: var(--icen-token-text);
275
278
  margin: 0;
276
279
  line-height: 1.5;
@@ -300,27 +303,28 @@
300
303
  .icen-tree-node {
301
304
  display: flex;
302
305
  align-items: center;
303
- gap: var(--icen-density-space-xs);
306
+ gap: var(--icen-control-gap-sm);
304
307
  /* 深度缩进沿 inline-start(RTL 下树向左侧生长) */
305
- padding-block: var(--icen-density-space-xs);
308
+ min-block-size: var(--icen-control-height-sm);
309
+ padding-block: 3px;
306
310
  padding-inline: calc(4px + var(--depth, 0) * 14px) var(--icen-density-space-sm);
307
- border-radius: var(--icen-radius-sm);
308
- font-size: var(--icen-density-font-size-md);
311
+ border-radius: var(--icen-radius-xs);
312
+ font-size: var(--icen-font-size-control);
309
313
  color: var(--icen-token-text);
310
314
  cursor: pointer;
311
315
  transition: background-color var(--icen-tx-fast);
312
316
  }
313
- .icen-tree-node:hover { background: var(--icen-token-control-hover); }
317
+ .icen-tree-node:hover { background: var(--icen-token-fill-hover); }
314
318
  .icen-tree-node:focus-visible,
315
319
  .icen-tree-node:focus-within {
316
320
  outline: none;
317
- box-shadow: var(--icen-ring);
321
+ box-shadow: var(--icen-ring-inset);
318
322
  }
319
323
  .icen-tree-node.is-selected,
320
324
  .icen-tree-node[aria-selected='true'] {
321
- background: var(--icen-token-accent-subtle);
322
- color: var(--icen-token-accent-text, var(--icen-token-accent-deep, var(--icen-token-accent)));
323
- font-weight: 500;
325
+ background: var(--icen-token-fill-selected);
326
+ color: var(--icen-token-text);
327
+ font-weight: var(--icen-font-weight-control);
324
328
  }
325
329
  .icen-tree-node.is-disabled,
326
330
  .icen-tree-node[aria-disabled='true'] {
@@ -365,11 +369,11 @@
365
369
  }
366
370
  .icen-tree-icon {
367
371
  flex-shrink: 0;
368
- width: 14px;
369
- height: 14px;
372
+ width: 15px;
373
+ height: 15px;
370
374
  color: var(--icen-token-text-muted);
371
375
  }
372
- .icen-tree-node.is-selected .icen-tree-icon { color: var(--icen-token-accent); }
376
+ .icen-tree-node.is-selected .icen-tree-icon { color: var(--icen-token-accent-strong); }
373
377
  .icen-tree-badge {
374
378
  display: inline-flex;
375
379
  align-items: center;
@@ -410,7 +414,7 @@
410
414
  gap: 1px;
411
415
  }
412
416
  .icen-list-item-title {
413
- font-size: var(--icen-density-font-size-md);
417
+ font-size: var(--icen-font-size-control);
414
418
  color: var(--icen-token-text);
415
419
  overflow: hidden;
416
420
  text-overflow: ellipsis;
@@ -418,7 +422,7 @@
418
422
  }
419
423
  .icen-list-item-meta {
420
424
  font-size: var(--icen-density-font-size-xs);
421
- color: var(--icen-token-text-faint);
425
+ color: var(--icen-token-text-muted);
422
426
  }
423
427
  .icen-list-item-trailing {
424
428
  flex-shrink: 0;
@@ -430,9 +434,9 @@
430
434
  cursor: pointer;
431
435
  }
432
436
  .icen-list-item.is-selected {
433
- background: var(--icen-token-accent-subtle);
437
+ background: var(--icen-token-fill-selected);
434
438
  }
435
- .icen-list-item.is-selected .icen-list-item-title { color: var(--icen-token-accent); font-weight: 500; }
439
+ .icen-list-item.is-selected .icen-list-item-title { color: var(--icen-token-text); font-weight: var(--icen-font-weight-control); }
436
440
 
437
441
  /* 列表项 flex 布局(leading + content + trailing) */
438
442
  .icen-list-item--flex {
@@ -477,8 +481,9 @@
477
481
  .icen-timeline-extra {
478
482
  margin-top: var(--icen-density-space-xs);
479
483
  padding: var(--icen-density-space-sm);
480
- background: var(--icen-token-bg-soft);
481
- border-radius: var(--icen-radius-sm);
484
+ background: var(--icen-token-surface-chrome);
485
+ border: 1px solid var(--icen-token-separator-soft);
486
+ border-radius: var(--icen-radius-xs);
482
487
  font-size: var(--icen-density-font-size-sm);
483
488
  }
484
489
 
@@ -533,7 +538,7 @@
533
538
  position: relative;
534
539
  margin-inline-start: 7px;
535
540
  padding-inline-start: 0;
536
- border-inline-start: 1px solid var(--icen-token-outline-soft);
541
+ border-inline-start: 1px solid var(--icen-token-separator-soft);
537
542
  }
538
543
  .icen-tree--lined .icen-tree-node {
539
544
  position: relative;
@@ -0,0 +1,2 @@
1
+ // kit: context-menu 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/context-menu.mjs';
@@ -28,12 +28,12 @@
28
28
  align-items: center;
29
29
  justify-content: center;
30
30
  gap: var(--icen-density-space-xs);
31
- height: var(--icen-density-input-height-sm);
32
- padding: 0 var(--icen-density-space-sm);
31
+ height: var(--icen-control-height-sm);
32
+ padding: 0 var(--icen-control-padding-inline-sm);
33
33
  background: var(--icen-token-control);
34
34
  color: var(--icen-token-text-muted);
35
- border: 1px solid var(--icen-token-outline-soft);
36
- border-radius: var(--icen-radius-sm);
35
+ border: 1px solid var(--icen-token-control-border);
36
+ border-radius: var(--icen-control-radius-sm);
37
37
  font: inherit;
38
38
  font-size: var(--icen-density-font-size-sm);
39
39
  cursor: pointer;
@@ -45,7 +45,7 @@
45
45
  }
46
46
  .icen-copy-btn:hover {
47
47
  color: var(--icen-token-text);
48
- border-color: var(--icen-hover-border);
48
+ border-color: var(--icen-token-control-border-hover);
49
49
  }
50
50
  .icen-copy-btn:focus-visible {
51
51
  outline: none;
@@ -61,11 +61,11 @@
61
61
  /* ghost 变体:透明底,纯描边 / hover 才显底 */
62
62
  .icen-copy-btn--ghost {
63
63
  background: transparent;
64
- border-color: var(--icen-token-line-soft);
64
+ border-color: var(--icen-token-separator-soft);
65
65
  }
66
66
  .icen-copy-btn--ghost:hover {
67
- background: var(--icen-token-fill-1);
68
- border-color: var(--icen-token-accent);
67
+ background: var(--icen-token-fill-hover);
68
+ border-color: var(--icen-token-control-border-hover);
69
69
  }
70
70
 
71
71
  /* ── 成功闪烁态(behavior 1.4s 后移除)── */
@@ -77,8 +77,8 @@
77
77
 
78
78
  /* ── 图标变体:方形按钮,仅放 svg ── */
79
79
  .icen-copy-btn--icon {
80
- inline-size: var(--icen-density-input-height-sm);
81
- block-size: var(--icen-density-input-height-sm);
80
+ inline-size: var(--icen-control-height-sm);
81
+ block-size: var(--icen-control-height-sm);
82
82
  padding: 0;
83
83
  }
84
84
  .icen-copy-btn--icon svg {
@@ -0,0 +1,2 @@
1
+ // kit: copy 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/copy.mjs';
@@ -23,11 +23,11 @@
23
23
  */
24
24
 
25
25
  .icen-datatable {
26
- border: 1px solid var(--icen-token-line-soft);
27
- border-radius: var(--icen-radius-lg);
26
+ border: 1px solid var(--icen-token-separator-soft);
27
+ border-radius: var(--icen-control-radius-lg);
28
28
  background: var(--icen-token-surface);
29
29
  overflow: hidden;
30
- font-size: var(--icen-density-font-size-md);
30
+ font-size: var(--icen-font-size-control);
31
31
  }
32
32
 
33
33
  /* ── 工具栏(搜索) ── */
@@ -35,22 +35,24 @@
35
35
  display: flex;
36
36
  align-items: center;
37
37
  gap: var(--icen-density-space-sm);
38
- padding: 10px 14px;
39
- border-bottom: 1px solid var(--icen-token-line-soft);
38
+ min-block-size: 44px;
39
+ padding: 6px 10px;
40
+ border-bottom: 1px solid var(--icen-token-separator-soft);
41
+ background: var(--icen-token-surface-chrome);
40
42
  }
41
43
  .icen-dt-search {
42
44
  display: flex;
43
45
  align-items: center;
44
- gap: 8px;
45
- height: 32px;
46
- width: 260px;
46
+ gap: 7px;
47
+ height: 30px;
48
+ width: 240px;
47
49
  max-width: 100%;
48
- padding: 0 10px;
49
- color: var(--icen-token-text-faint);
50
+ padding: 0 var(--icen-field-padding-inline-sm);
51
+ color: var(--icen-token-text-muted);
50
52
  background: var(--icen-token-control);
51
- border: 1px solid var(--icen-token-outline-soft);
52
- border-radius: var(--icen-radius-md);
53
- box-shadow: var(--icen-token-shadow-inset);
53
+ border: 1px solid var(--icen-token-control-border);
54
+ border-radius: var(--icen-control-radius);
55
+ box-shadow: var(--icen-token-shadow-field);
54
56
  transition: border-color var(--icen-tx-fast), box-shadow var(--icen-tx-fast);
55
57
  }
56
58
  .icen-dt-search:focus-within {
@@ -79,11 +81,11 @@
79
81
  .icen-dt-row {
80
82
  display: grid;
81
83
  align-items: center;
82
- border-bottom: 1px solid var(--icen-token-line-soft);
84
+ border-bottom: 1px solid var(--icen-token-separator-soft);
83
85
  transition: background var(--icen-tx-fast);
84
86
  }
85
87
  .icen-dt-body .icen-dt-row:last-child { border-bottom: 0; }
86
- .icen-dt-body .icen-dt-row:hover { background: var(--icen-token-fill-1); }
88
+ .icen-dt-body .icen-dt-row:hover { background: var(--icen-token-fill-hover); }
87
89
 
88
90
  /* 行内次要动作(columns.render 产出 .icen-dt-actions):隐式待命,行悬停/聚焦显现;
89
91
  触屏常显;按钮本体 26px 视觉 + 触屏隐形 44px 命中 */
@@ -122,18 +124,18 @@
122
124
  margin: -9px;
123
125
  }
124
126
  }
125
- .icen-dt-row.is-selected { background: var(--icen-token-accent-subtle); }
126
- .icen-dt-row.is-selected:hover { background: color-mix(in srgb, var(--icen-token-accent-subtle) 82%, var(--icen-token-fill-1)); }
127
+ .icen-dt-row.is-selected { background: var(--icen-token-fill-selected); }
128
+ .icen-dt-row.is-selected:hover { background: color-mix(in srgb, var(--icen-token-fill-selected) 82%, var(--icen-token-fill-hover)); }
127
129
  .icen-dt-row.is-clickable { cursor: pointer; }
128
130
  .icen-datatable--striped .icen-dt-body .icen-dt-row:nth-child(even):not(.is-selected) {
129
- background: color-mix(in srgb, var(--icen-token-fill-1) 55%, transparent);
131
+ background: color-mix(in srgb, var(--icen-token-fill-hover) 55%, transparent);
130
132
  }
131
133
  .icen-datatable--striped .icen-dt-body .icen-dt-row:nth-child(even):not(.is-selected):hover {
132
- background: var(--icen-token-fill-1);
134
+ background: var(--icen-token-fill-hover);
133
135
  }
134
136
 
135
137
  .icen-dt-cell {
136
- padding: 0 12px;
138
+ padding: 0 10px;
137
139
  min-width: 0;
138
140
  overflow: hidden;
139
141
  text-overflow: ellipsis;
@@ -141,8 +143,8 @@
141
143
  color: var(--icen-token-text);
142
144
  display: flex;
143
145
  align-items: center;
144
- gap: 8px;
145
- min-height: 44px;
146
+ gap: 6px;
147
+ min-height: 32px;
146
148
  }
147
149
  .icen-datatable--virtual .icen-dt-cell { min-height: 0; height: 100%; }
148
150
  .icen-dt-cell[data-icen-align='center'] { justify-content: center; text-align: center; }
@@ -150,9 +152,9 @@
150
152
  .icen-dt-cell--check, .icen-dt-cell--expand { justify-content: center; padding: 0 4px; }
151
153
 
152
154
  /* ── 表头 ── */
153
- .icen-dt-head { border-bottom: 1px solid var(--icen-token-line-soft); }
155
+ .icen-dt-head { border-bottom: 1px solid var(--icen-token-separator); }
154
156
  .icen-dt-row--head {
155
- background: var(--icen-token-bg-soft);
157
+ background: var(--icen-token-surface-chrome);
156
158
  border-bottom: 0;
157
159
  }
158
160
  .icen-datatable--virtual .icen-dt-row--head {
@@ -162,9 +164,10 @@
162
164
  }
163
165
  .icen-dt-cell--head {
164
166
  position: relative;
165
- min-height: 40px;
166
- font-size: var(--icen-density-font-size-sm);
167
+ min-height: 30px;
168
+ font-size: var(--icen-font-size-caption);
167
169
  font-weight: 600;
170
+ letter-spacing: var(--icen-letter-spacing-caption);
168
171
  color: var(--icen-token-text-muted);
169
172
  user-select: none;
170
173
  }
@@ -206,11 +209,11 @@
206
209
  z-index: var(--icen-z-popover);
207
210
  min-width: 168px;
208
211
  max-width: 240px;
209
- padding: 4px;
210
- background: var(--icen-token-card-strong);
211
- border: 1px solid var(--icen-token-outline);
212
- border-radius: var(--icen-radius-md);
213
- box-shadow: var(--icen-token-shadow-overlay);
212
+ padding: var(--icen-density-space-xs);
213
+ background: var(--icen-token-surface);
214
+ border: 1px solid var(--icen-token-material-edge);
215
+ border-radius: var(--icen-radius-lg);
216
+ box-shadow: var(--icen-token-material-light), var(--icen-token-shadow-elevated);
214
217
  font-weight: 400;
215
218
  animation: icen-pop-in var(--icen-tx-fast);
216
219
  }
@@ -223,14 +226,15 @@
223
226
  .icen-dt-filter-item {
224
227
  display: flex;
225
228
  align-items: center;
226
- gap: 8px;
227
- padding: 6px 8px;
228
- border-radius: var(--icen-radius-sm);
229
- font-size: var(--icen-density-font-size-sm);
229
+ gap: 7px;
230
+ min-block-size: var(--icen-control-height-sm);
231
+ padding: 3px var(--icen-density-space-sm);
232
+ border-radius: var(--icen-radius-xs);
233
+ font-size: var(--icen-font-size-control);
230
234
  color: var(--icen-token-text);
231
235
  cursor: pointer;
232
236
  }
233
- .icen-dt-filter-item:hover { background: var(--icen-token-fill-1); }
237
+ .icen-dt-filter-item:hover { background: var(--icen-token-fill-hover); }
234
238
  .icen-dt-filter-item > span {
235
239
  overflow: hidden;
236
240
  text-overflow: ellipsis;
@@ -246,7 +250,7 @@
246
250
  .icen-dt-filter-reset {
247
251
  border: 0;
248
252
  background: transparent;
249
- color: var(--icen-token-accent);
253
+ color: var(--icen-token-accent-text); /* 12px 链接字对白底需 AA(裸 accent 4.07:1 不达) */
250
254
  font: inherit;
251
255
  font-size: var(--icen-density-font-size-xs);
252
256
  cursor: pointer;
@@ -281,12 +285,12 @@
281
285
  .icen-dt-expand-btn:hover { color: var(--icen-token-text); background: var(--icen-token-fill-2); }
282
286
  .icen-dt-expand-btn[aria-expanded='true'] { transform: rotate(180deg); color: var(--icen-token-accent); }
283
287
  .icen-dt-expand-row {
284
- padding: 14px 16px;
285
- border-bottom: 1px solid var(--icen-token-line-soft);
286
- background: var(--icen-token-bg-soft);
288
+ padding: 10px 12px;
289
+ border-bottom: 1px solid var(--icen-token-separator-soft);
290
+ background: var(--icen-token-surface-chrome);
287
291
  color: var(--icen-token-text-muted);
288
292
  font-size: var(--icen-density-font-size-sm);
289
- line-height: 1.7;
293
+ line-height: 1.55;
290
294
  white-space: normal;
291
295
  }
292
296
 
@@ -306,10 +310,11 @@
306
310
  .icen-dt-foot {
307
311
  display: flex;
308
312
  align-items: center;
309
- gap: 12px;
313
+ gap: 10px;
310
314
  flex-wrap: wrap;
311
- padding: 10px 14px;
312
- border-top: 1px solid var(--icen-token-line-soft);
315
+ padding: 6px 10px;
316
+ border-top: 1px solid var(--icen-token-separator-soft);
317
+ background: var(--icen-token-surface-chrome);
313
318
  }
314
319
  .icen-dt-foot:empty { display: none; }
315
320
  .icen-dt-stat {
@@ -317,11 +322,11 @@
317
322
  color: var(--icen-token-text-faint);
318
323
  font-variant-numeric: tabular-nums;
319
324
  }
320
- .icen-dt-stat--sel { color: var(--icen-token-accent); display: inline-flex; align-items: center; gap: 6px; }
325
+ .icen-dt-stat--sel { color: var(--icen-token-accent-text); display: inline-flex; align-items: center; gap: 6px; }
321
326
  .icen-dt-clear-sel {
322
327
  border: 0;
323
328
  background: transparent;
324
- color: var(--icen-token-accent);
329
+ color: var(--icen-token-accent-text); /* 同 filter-reset:小号链接字走可读变体 */
325
330
  font: inherit;
326
331
  font-size: var(--icen-density-font-size-xs);
327
332
  cursor: pointer;
@@ -338,18 +343,18 @@
338
343
  .icen-dt-page-size {
339
344
  appearance: none;
340
345
  -webkit-appearance: none;
341
- height: 28px;
342
- padding: 0 8px;
346
+ height: 26px;
347
+ padding: 0 7px;
343
348
  margin-inline-end: 6px;
344
349
  font: inherit;
345
350
  font-size: var(--icen-density-font-size-xs);
346
351
  color: var(--icen-token-text-muted);
347
- background: transparent;
348
- border: 1px solid var(--icen-token-line-soft);
349
- border-radius: var(--icen-radius-sm);
352
+ background: var(--icen-token-control);
353
+ border: 1px solid var(--icen-token-control-border);
354
+ border-radius: var(--icen-radius-xs);
350
355
  cursor: pointer;
351
356
  }
352
- .icen-dt-page-size:hover { border-color: var(--icen-token-accent); color: var(--icen-token-text); }
357
+ .icen-dt-page-size:hover { border-color: var(--icen-token-control-border-hover); color: var(--icen-token-text); }
353
358
  .icen-dt-page-btn {
354
359
  min-width: 28px;
355
360
  height: 28px;
@@ -366,12 +371,12 @@
366
371
  }
367
372
  .icen-dt-page-btn:hover:not(:disabled):not(.is-active) {
368
373
  color: var(--icen-token-text);
369
- border-color: var(--icen-token-line-soft);
374
+ border-color: var(--icen-token-control-border);
370
375
  }
371
376
  .icen-dt-page-btn.is-active {
372
- color: var(--icen-token-accent);
373
- border-color: var(--icen-token-accent);
374
- background: var(--icen-token-accent-subtle);
377
+ color: var(--icen-token-text);
378
+ border-color: color-mix(in srgb, var(--icen-token-accent) 24%, transparent);
379
+ background: var(--icen-token-fill-selected);
375
380
  font-weight: 600;
376
381
  }
377
382
  .icen-dt-page-btn:disabled { opacity: 0.35; cursor: not-allowed; }
@@ -386,9 +391,9 @@
386
391
  .icen-dt-editor.is-invalid { animation: none; }
387
392
  }
388
393
 
389
- /* ── 紧凑密度(32px 行高) ── */
390
- .icen-datatable--compact .icen-dt-cell { min-height: 32px; padding: 0 10px; }
391
- .icen-datatable--compact .icen-dt-cell--head { min-height: 32px; font-size: var(--icen-density-font-size-xs); }
394
+ /* ── 紧凑密度(28px 行高) ── */
395
+ .icen-datatable--compact .icen-dt-cell { min-height: 28px; padding: 0 8px; }
396
+ .icen-datatable--compact .icen-dt-cell--head { min-height: 28px; font-size: var(--icen-density-font-size-xs); }
392
397
 
393
398
  /* ── 工具栏行内末端操作按钮组 ── */
394
399
  .icen-dt-toolbar-actions {
@@ -465,6 +470,14 @@
465
470
  .icen-datatable--frozen .icen-dt-row.is-selected:hover .icen-dt-cell--frozen {
466
471
  background: color-mix(in srgb, var(--icen-token-accent-subtle) 82%, var(--icen-token-fill-1));
467
472
  }
473
+ /* 斑马纹是行级底色,冻结格不透明面透不上来:偶数行冻结格重铺同款色,
474
+ 否则条纹在冻结边界处断掉(选中/hover 已有对应规则) */
475
+ .icen-datatable--striped .icen-dt-body .icen-dt-row:nth-child(even):not(.is-selected) .icen-dt-cell--frozen {
476
+ background: color-mix(in srgb, var(--icen-token-fill-1) 55%, transparent);
477
+ }
478
+ .icen-datatable--striped .icen-dt-body .icen-dt-row:nth-child(even):not(.is-selected):hover .icen-dt-cell--frozen {
479
+ background: var(--icen-token-fill-1);
480
+ }
468
481
 
469
482
  /* ── 行状态类(rowClassName 产出;--danger/--warning/--success 同族语义行底色) ── */
470
483
  .icen-dt-row--danger { background: color-mix(in srgb, var(--icen-token-error) 6%, transparent) !important; /* guard:allow-important 状态/守卫覆盖需压制变体优先级 */ }
@@ -0,0 +1,2 @@
1
+ // kit: datatable 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/datatable.mjs';