@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
@@ -0,0 +1,2 @@
1
+ // kit: autocomplete 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/autocomplete.mjs';
@@ -0,0 +1,2 @@
1
+ // kit: avatar 类型面(构建产物,勿手改)
2
+ export {};
@@ -11,6 +11,7 @@
11
11
  * initBackTop({ autoCreate: true }) // 自动创建一个默认样式的按钮
12
12
  *
13
13
  * 默认滚动超过 320px 后出现;点击后 window.scrollTo({ top: 0, behavior: 'smooth' })。
14
+ * 视觉:36px 玻璃浮钮 + 发丝边;无 backdrop-filter 或减少透明偏好时回落实面。
14
15
  */
15
16
 
16
17
  .icen-back-top {
@@ -21,23 +22,26 @@
21
22
  display: inline-flex;
22
23
  align-items: center;
23
24
  justify-content: center;
24
- width: 40px;
25
- height: 40px;
25
+ width: 36px;
26
+ height: 36px;
26
27
  padding: 0;
27
- background: var(--icen-token-card-strong);
28
+ background: var(--icen-token-surface-glass);
29
+ -webkit-backdrop-filter: blur(var(--icen-material-blur-floating)) saturate(var(--icen-material-saturate));
30
+ backdrop-filter: blur(var(--icen-material-blur-floating)) saturate(var(--icen-material-saturate));
28
31
  color: var(--icen-token-text-muted);
29
- border: 1px solid var(--icen-token-outline-soft);
32
+ border: 1px solid var(--icen-token-material-edge);
30
33
  border-radius: var(--icen-radius-full);
31
- box-shadow: var(--icen-token-shadow-overlay);
34
+ box-shadow: var(--icen-token-material-light), var(--icen-token-shadow-elevated);
32
35
  cursor: pointer;
33
36
  -webkit-tap-highlight-color: transparent;
34
37
  opacity: 0;
35
- transform: translateY(12px) scale(0.9);
38
+ transform: translateY(10px) scale(0.94);
36
39
  pointer-events: none;
37
40
  transition:
38
41
  opacity var(--icen-tx-normal),
39
42
  transform var(--icen-tx-normal),
40
43
  color var(--icen-tx-fast),
44
+ background-color var(--icen-tx-fast),
41
45
  border-color var(--icen-tx-fast);
42
46
  }
43
47
  .icen-back-top.is-shown {
@@ -46,30 +50,35 @@
46
50
  pointer-events: auto;
47
51
  }
48
52
  .icen-back-top:hover {
49
- color: var(--icen-token-accent);
50
- border-color: var(--icen-token-accent);
53
+ color: var(--icen-token-text);
54
+ border-color: var(--icen-token-line-strong);
55
+ background: var(--icen-token-surface-raised);
56
+ }
57
+ .icen-back-top:active {
58
+ transform: translateY(0) scale(0.97);
59
+ background: var(--icen-token-surface-pressed);
51
60
  }
52
61
  .icen-back-top:focus-visible {
53
62
  outline: none;
54
- box-shadow: var(--icen-token-shadow-overlay), var(--icen-ring);
63
+ box-shadow: var(--icen-token-material-light), var(--icen-token-shadow-elevated), var(--icen-ring);
55
64
  }
56
65
  .icen-back-top svg {
57
- width: 18px;
58
- height: 18px;
66
+ width: 17px;
67
+ height: 17px;
59
68
  flex-shrink: 0;
60
69
  }
61
70
 
62
71
  /* 尺寸变体 */
63
72
  .icen-back-top--sm {
64
- width: 32px;
65
- height: 32px;
73
+ width: 28px;
74
+ height: 28px;
66
75
  }
67
76
  .icen-back-top--sm svg { width: 14px; height: 14px; }
68
77
  .icen-back-top--lg {
69
- width: 48px;
70
- height: 48px;
78
+ width: 44px;
79
+ height: 44px;
71
80
  }
72
- .icen-back-top--lg svg { width: 22px; height: 22px; }
81
+ .icen-back-top--lg svg { width: 20px; height: 20px; }
73
82
 
74
83
  /* 方向变体:箭头方向(默认上) */
75
84
  .icen-back-top[data-icen-dir='left'] svg { transform: rotate(90deg); }
@@ -83,6 +92,28 @@
83
92
  }
84
93
  }
85
94
 
95
+ /* 没有模糊能力时用实面,避免半透明底压字 */
96
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
97
+ .icen-back-top { background: var(--icen-token-surface-raised); }
98
+ }
99
+
100
+ @media (prefers-reduced-transparency: reduce) {
101
+ .icen-back-top {
102
+ background: var(--icen-token-surface-raised);
103
+ -webkit-backdrop-filter: none;
104
+ backdrop-filter: none;
105
+ }
106
+ }
107
+
108
+ @media (forced-colors: active) {
109
+ .icen-back-top {
110
+ background: Canvas;
111
+ border-color: CanvasText;
112
+ box-shadow: none;
113
+ forced-color-adjust: none;
114
+ }
115
+ }
116
+
86
117
  @media (prefers-reduced-motion: reduce) {
87
118
  .icen-back-top { transition: opacity var(--icen-tx-fast); transform: none !important; /* guard:allow-important 动效守卫:降级媒体查询需压制组件动画 */ }
88
119
  .icen-back-top.is-shown { transform: none !important; /* guard:allow-important 动效守卫:降级媒体查询需压制组件动画 */ }
@@ -0,0 +1,2 @@
1
+ // kit: back-top 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/back-top.mjs';
@@ -54,7 +54,7 @@
54
54
  background: var(--icen-token-error);
55
55
  border: 2px solid var(--icen-token-surface);
56
56
  border-radius: var(--icen-radius-full);
57
- box-shadow: var(--icen-token-shadow-inset);
57
+ box-shadow: none;
58
58
  pointer-events: none;
59
59
  white-space: nowrap;
60
60
  transform-origin: center;
@@ -0,0 +1,2 @@
1
+ // kit: badge 类型面(构建产物,勿手改)
2
+ export {};
@@ -23,7 +23,7 @@
23
23
  .icen-breadcrumb {
24
24
  display: flex;
25
25
  align-items: center;
26
- font-size: var(--icen-density-font-size-md);
26
+ font-size: var(--icen-font-size-control);
27
27
  }
28
28
  .icen-breadcrumb ol {
29
29
  display: flex;
@@ -54,7 +54,7 @@
54
54
  transition: color var(--icen-tx-fast);
55
55
  }
56
56
  .icen-breadcrumb-link:hover {
57
- color: var(--icen-token-accent);
57
+ color: var(--icen-token-text);
58
58
  text-decoration: none;
59
59
  }
60
60
  .icen-breadcrumb-link:focus-visible {
@@ -76,8 +76,8 @@
76
76
  }
77
77
  .icen-breadcrumb-sep::after { content: '';
78
78
  display: inline-block;
79
- inline-size: 16px;
80
- block-size: 16px;
79
+ inline-size: 12px;
80
+ block-size: 12px;
81
81
  flex: none;
82
82
  vertical-align: middle;
83
83
  background: currentColor;
@@ -114,16 +114,33 @@
114
114
  }
115
115
 
116
116
  /* ── 面包屑分隔符变体 ── */
117
- .icen-breadcrumb--slash .icen-breadcrumb-sep::after { content: '/'; }
117
+ /* 字符型变体必须显式撤掉基础规则的 chevron mask/背景/定宽,
118
+ 否则字被遮在实底剪影里永不显示(--arrow 全量重写所以无此问题) */
119
+ .icen-breadcrumb--slash .icen-breadcrumb-sep::after {
120
+ content: '/';
121
+ background: none;
122
+ mask: none;
123
+ inline-size: auto;
124
+ block-size: auto;
125
+ vertical-align: baseline;
126
+ }
118
127
  .icen-breadcrumb--arrow .icen-breadcrumb-sep::after { content: '';
119
128
  display: inline-block;
120
- inline-size: 16px;
121
- block-size: 16px;
129
+ inline-size: 12px;
130
+ block-size: 12px;
122
131
  flex: none;
123
132
  vertical-align: middle;
124
133
  background: currentColor;
125
134
  mask: var(--icen-token-icon-arrow-right) center / contain no-repeat; }
126
- .icen-breadcrumb--dot .icen-breadcrumb-sep::after { content: '·'; font-size: 1.2em; }
135
+ .icen-breadcrumb--dot .icen-breadcrumb-sep::after {
136
+ content: '·';
137
+ font-size: 1.2em;
138
+ background: none;
139
+ mask: none;
140
+ inline-size: auto;
141
+ block-size: auto;
142
+ vertical-align: baseline;
143
+ }
127
144
 
128
145
  /* ── 面包屑尺寸变体 ── */
129
146
  .icen-breadcrumb--sm {
@@ -143,4 +160,5 @@
143
160
  :is([dir='rtl']) .icen-breadcrumb-sep::after { transform: scaleX(-1); }
144
161
  :is([dir='rtl']) .icen-breadcrumb--arrow .icen-breadcrumb-sep::after { transform: scaleX(-1); }
145
162
 
163
+
146
164
  }
@@ -0,0 +1,2 @@
1
+ // kit: breadcrumb 类型面(构建产物,勿手改)
2
+ export {};
@@ -11,37 +11,42 @@
11
11
  * </button>
12
12
  *
13
13
  * 变体:
14
- * .icen-btn 默认(surface 底 + outline-soft 描边)
15
- * .icen-btn-primary 实心 accent
16
- * .icen-btn-danger 透明底 + error 描边(hover 实心)
17
- * .icen-btn-ghost 全透明,hover 浮起 fill-2
14
+ * .icen-btn 默认(control 面 + 中性描边)
15
+ * .icen-btn-primary 实心 accent(承文本用 accent-strong)
16
+ * .icen-btn-danger 透明底 + error 描边(hover 淡红面)
17
+ * .icen-btn-ghost 全透明,hover 浮起中性填充
18
18
  * .icen-btn-link link 文本按钮(无背景、underline on hover)
19
19
  *
20
20
  * 尺寸:默认 / .icen-btn-sm / .icen-btn-lg / .icen-btn-icon(正方形)
21
21
  * 状态:.is-loading 加 spinner + aria-busy;.is-error error 边;disabled/aria-disabled/data-icen-disabled
22
+ *
23
+ * 几何走 control token;表面物理(顶部高光、接触影)由原语适配层补。
24
+ * 按下以「面变深 + 内影」表达,不改变按钮占位或位置。
22
25
  */
23
26
 
24
27
  .icen-btn {
25
- --btn-bg: var(--icen-token-surface);
26
- --btn-fg: var(--icen-token-text);
27
- --btn-border: var(--icen-token-line-soft);
28
+ --btn-bg: var(--icen-token-control);
28
29
  --btn-bg-hover: var(--icen-token-surface-hover);
29
- --btn-border-hover: var(--icen-token-accent);
30
+ --btn-bg-active: var(--icen-token-surface-pressed);
31
+ --btn-fg: var(--icen-token-text);
32
+ --btn-border: var(--icen-token-control-border);
33
+ --btn-border-hover: var(--icen-token-control-border-hover);
30
34
 
31
35
  display: inline-flex;
32
36
  align-items: center;
33
37
  justify-content: center;
34
- gap: 6px;
35
- padding: 0 var(--icen-density-space-md);
36
- height: var(--icen-density-input-height-md);
38
+ gap: var(--icen-control-gap);
39
+ block-size: var(--icen-control-height-md);
40
+ padding: 0 var(--icen-control-padding-inline);
37
41
  background: var(--btn-bg);
38
42
  color: var(--btn-fg);
39
- border: 1px solid var(--btn-border);
40
- border-radius: var(--icen-radius-md);
43
+ border: var(--icen-control-border-width) solid var(--btn-border);
44
+ border-radius: var(--icen-control-radius);
41
45
  font-family: var(--icen-font-body);
42
- font-size: var(--icen-density-font-size-md);
43
- font-weight: 500;
44
- letter-spacing: 0.01em;
46
+ font-size: var(--icen-font-size-control);
47
+ font-weight: var(--icen-font-weight-control);
48
+ line-height: 1;
49
+ letter-spacing: var(--icen-letter-spacing-control);
45
50
  white-space: nowrap;
46
51
  cursor: pointer;
47
52
  user-select: none;
@@ -54,11 +59,14 @@
54
59
  box-shadow var(--icen-tx-fast),
55
60
  transform var(--icen-tx-fast);
56
61
  }
57
- .icen-btn:hover {
62
+ .icen-btn:hover:not(:disabled):not([aria-disabled='true']):not([data-icen-disabled]) {
58
63
  background: var(--btn-bg-hover);
59
64
  border-color: var(--btn-border-hover);
60
65
  }
61
- .icen-btn:active { transform: var(--icen-press-soft); }
66
+ .icen-btn:active:not(:disabled):not([aria-disabled='true']):not([data-icen-disabled]):not(.is-loading) {
67
+ background: var(--btn-bg-active);
68
+ transform: var(--icen-press-soft);
69
+ }
62
70
  .icen-btn:focus-visible {
63
71
  outline: none;
64
72
  box-shadow: var(--icen-ring);
@@ -76,83 +84,80 @@
76
84
  /* ── 变体 ── */
77
85
  .icen-btn-primary {
78
86
  --btn-bg: var(--icen-token-accent-strong);
87
+ --btn-bg-hover: color-mix(in srgb, var(--icen-token-accent-strong) 92%, var(--icen-token-text));
88
+ --btn-bg-active: color-mix(in srgb, var(--icen-token-accent-strong) 84%, var(--icen-token-text));
79
89
  --btn-fg: var(--icen-token-on-accent);
80
90
  --btn-border: var(--icen-token-accent-strong);
81
- --btn-bg-hover: color-mix(in srgb, var(--icen-token-accent-strong) 88%, black);
82
- --btn-border-hover: color-mix(in srgb, var(--icen-token-accent-strong) 88%, black);
83
- }
84
- /* hover 阴影抬升仅可悬停设备生效(触屏关闭,AGENTS 动效守卫) */
85
- @media (hover: hover) and (pointer: fine) {
86
- .icen-btn-primary:hover {
87
- box-shadow: var(--icen-token-shadow-elevated);
88
- }
91
+ --btn-border-hover: color-mix(in srgb, var(--icen-token-accent-strong) 92%, var(--icen-token-text));
89
92
  }
90
93
 
91
94
  .icen-btn-danger {
92
- --btn-fg: var(--icen-token-error);
93
- --btn-border: color-mix(in srgb, var(--icen-token-error) 35%, transparent);
94
95
  --btn-bg: transparent;
95
- --btn-bg-hover: var(--icen-token-error);
96
+ --btn-bg-hover: var(--icen-token-error-muted);
97
+ --btn-bg-active: color-mix(in srgb, var(--icen-token-error) 18%, transparent);
98
+ --btn-fg: var(--icen-token-error);
99
+ --btn-border: color-mix(in srgb, var(--icen-token-error) 38%, transparent);
96
100
  --btn-border-hover: var(--icen-token-error);
97
101
  }
98
- .icen-btn-danger:hover { color: var(--icen-token-on-accent); }
99
102
 
100
103
  .icen-btn-ghost {
101
104
  --btn-bg: transparent;
105
+ --btn-bg-hover: var(--icen-token-fill-hover);
106
+ --btn-bg-active: var(--icen-token-fill-pressed);
102
107
  --btn-border: transparent;
103
- --btn-bg-hover: var(--icen-token-fill-2);
104
108
  --btn-border-hover: transparent;
105
109
  }
106
110
 
107
111
  .icen-btn-link {
108
112
  --btn-bg: transparent;
109
- --btn-border: transparent;
110
- --btn-fg: var(--icen-token-accent);
111
113
  --btn-bg-hover: transparent;
114
+ --btn-bg-active: transparent;
115
+ --btn-fg: var(--icen-token-accent-text);
116
+ --btn-border: transparent;
112
117
  --btn-border-hover: transparent;
113
- height: auto;
118
+ block-size: auto;
114
119
  padding: 0;
115
120
  border: 0;
116
121
  border-radius: 0;
117
122
  text-decoration: none;
118
123
  }
119
- .icen-btn-link:hover {
120
- text-decoration: underline;
121
- text-underline-offset: 3px;
122
- background: transparent;
123
- }
124
+ .icen-btn-link:hover { text-decoration: underline; text-underline-offset: 3px; background: transparent; }
125
+ .icen-btn-link:active { transform: none; }
124
126
 
125
127
  /* ── 尺寸 ── */
126
128
  .icen-btn-sm {
127
- height: var(--icen-density-input-height-sm);
128
- padding: 0 var(--icen-density-space-sm);
129
+ block-size: var(--icen-control-height-sm);
130
+ padding: 0 var(--icen-control-padding-inline-sm);
129
131
  font-size: var(--icen-density-font-size-sm);
130
- gap: 4px;
132
+ gap: var(--icen-control-gap-sm);
133
+ border-radius: var(--icen-control-radius-sm);
131
134
  }
132
135
  .icen-btn-lg {
133
- height: var(--icen-density-input-height-lg);
134
- padding: 0 var(--icen-density-space-lg);
136
+ block-size: var(--icen-control-height-lg);
137
+ padding: 0 var(--icen-control-padding-inline-lg);
135
138
  font-size: var(--icen-density-font-size-lg);
136
139
  gap: 8px;
140
+ border-radius: var(--icen-control-radius-lg);
137
141
  }
138
142
  .icen-btn-icon {
139
- width: var(--icen-density-input-height-md);
143
+ inline-size: var(--icen-control-height-md);
140
144
  padding: 0;
141
145
  gap: 0;
142
146
  }
143
- .icen-btn-icon.icen-btn-sm { width: var(--icen-density-input-height-sm); }
144
- .icen-btn-icon.icen-btn-lg { width: var(--icen-density-input-height-lg); }
147
+ .icen-btn-icon.icen-btn-sm { inline-size: var(--icen-control-height-sm); }
148
+ .icen-btn-icon.icen-btn-lg { inline-size: var(--icen-control-height-lg); }
145
149
 
146
- .icen-btn-block {
147
- display: flex;
148
- width: 100%;
149
- }
150
+ .icen-btn-block { display: flex; inline-size: 100%; }
150
151
 
151
152
  /* ── 状态 ── */
152
153
  .icen-btn.is-error {
153
154
  --btn-border: var(--icen-token-error);
154
155
  --btn-border-hover: var(--icen-token-error);
155
156
  }
157
+ .icen-btn.is-error:focus-visible {
158
+ outline: none;
159
+ box-shadow: var(--icen-ring-error);
160
+ }
156
161
 
157
162
  /* 加载态:居中 spinner 占位 + 文本保留(避免重排)。
158
163
  behavior 在挂 .is-loading 时把 [aria-busy=true] 也挂上。 */
@@ -160,27 +165,27 @@
160
165
  .icen-btn.is-loading::after {
161
166
  content: '';
162
167
  position: absolute;
163
- top: 50%; left: 50%; /* guard:allow-physical 圆心居中:left 50% + 负边距 任意方向下均为中心 */
164
- width: 14px; height: 14px;
165
- margin: -7px 0 0 -7px; /* guard:allow-physical 居中负边距与 left 50% 配套(物理坐标对),RTL 下同样居中 */
166
- border: 2px solid color-mix(in srgb, currentColor 35%, transparent);
168
+ inset-block-start: 50%;
169
+ inset-inline-start: 50%;
170
+ inline-size: 14px;
171
+ block-size: 14px;
172
+ margin-block-start: -7px;
173
+ margin-inline-start: -7px;
174
+ color: var(--btn-fg);
175
+ border: 1.5px solid color-mix(in srgb, currentColor 30%, transparent);
167
176
  border-top-color: currentColor;
168
177
  border-radius: 50%;
169
178
  animation: icen-spin var(--btn-spin-duration, var(--icen-duration-slow)) linear infinite;
170
- opacity: 1; /* 覆盖 .icen-pressable::after 渐变(若与 .icen-pressable 同用) */
179
+ opacity: 1;
171
180
  background: none;
172
181
  pointer-events: none;
173
182
  }
174
183
 
175
184
  /* 图标按钮内部 svg 默认尺寸对齐字号 */
176
185
  .icen-btn-icon-start, .icen-btn-icon-end {
177
- width: 1.1em;
178
- height: 1.1em;
186
+ inline-size: 1.1em;
187
+ block-size: 1.1em;
179
188
  flex-shrink: 0;
180
189
  }
181
190
 
182
- @media (prefers-reduced-motion: reduce) {
183
- .icen-btn.is-loading::after { --btn-spin-duration: 1.2s; }
184
- }
185
-
186
191
  }
@@ -0,0 +1,2 @@
1
+ // kit: btn 类型面(构建产物,勿手改)
2
+ export {};
@@ -27,9 +27,9 @@
27
27
 
28
28
  .icen-card {
29
29
  position: relative;
30
- background: var(--icen-token-card);
31
- border: 1px solid var(--icen-token-outline-soft);
32
- box-shadow: var(--icen-token-shadow-inset);
30
+ background: var(--icen-token-surface);
31
+ border: 1px solid var(--icen-token-separator-soft);
32
+ box-shadow: none;
33
33
  border-radius: var(--icen-radius-lg);
34
34
  overflow: hidden;
35
35
  }
@@ -37,20 +37,21 @@
37
37
  /* ── 变体 ── */
38
38
  .icen-card--elevated {
39
39
  box-shadow: var(--icen-token-shadow-card);
40
- border-color: transparent;
40
+ border-color: var(--icen-token-separator-soft);
41
41
  }
42
42
  .icen-card--outlined {
43
- border-color: var(--icen-token-outline);
43
+ border-color: var(--icen-token-separator);
44
44
  box-shadow: none;
45
45
  }
46
46
  .icen-card--flat {
47
47
  box-shadow: none;
48
- background: var(--icen-token-bg-soft);
48
+ background: var(--icen-token-surface-chrome);
49
+ border-color: transparent;
49
50
  }
50
51
  .icen-card--glass {
51
52
  background: var(--icen-token-surface-glass);
52
- backdrop-filter: blur(12px);
53
- -webkit-backdrop-filter: blur(12px);
53
+ backdrop-filter: blur(var(--icen-material-blur-floating)) saturate(var(--icen-material-saturate));
54
+ -webkit-backdrop-filter: blur(var(--icen-material-blur-floating)) saturate(var(--icen-material-saturate));
54
55
  box-shadow: none;
55
56
  }
56
57
 
@@ -73,11 +74,9 @@
73
74
  .icen-card--interactive:focus-within {
74
75
  border-color: var(--icen-token-accent);
75
76
  }
76
- .icen-card--interactive:focus-within {
77
- border-color: var(--icen-token-accent);
78
- }
79
77
  .icen-card.is-selected {
80
- box-shadow: var(--icen-ring);
78
+ border-color: color-mix(in srgb, var(--icen-token-accent) 34%, var(--icen-token-separator));
79
+ box-shadow: var(--icen-token-shadow-control);
81
80
  }
82
81
 
83
82
  /* ── 媒体封面 ── */
@@ -86,7 +85,7 @@
86
85
  width: 100%;
87
86
  aspect-ratio: 16 / 9;
88
87
  overflow: hidden;
89
- background: var(--icen-token-bg-soft);
88
+ background: var(--icen-token-surface-raised);
90
89
  }
91
90
  /* 封面比例变体 */
92
91
  .icen-card-media--square { aspect-ratio: 1 / 1; }
@@ -105,7 +104,7 @@
105
104
  inline-size: 100%;
106
105
  height: 100%;
107
106
  object-fit: cover;
108
- transition: transform var(--icen-tx-slow) var(--icen-ease-out);
107
+ transition: transform var(--icen-duration-slow) var(--icen-ease-out);
109
108
  }
110
109
  .icen-card-tag {
111
110
  position: absolute;
@@ -127,13 +126,14 @@
127
126
  align-items: flex-start;
128
127
  justify-content: space-between;
129
128
  gap: var(--icen-density-space-sm);
130
- padding: var(--icen-density-space-md);
129
+ padding: var(--icen-density-space-md) var(--icen-density-space-md) var(--icen-density-space-xs);
131
130
  }
132
131
  .icen-card-title {
133
- font-size: var(--icen-density-font-size-lg);
134
- font-weight: 600;
132
+ font-size: var(--icen-font-size-title);
133
+ font-weight: var(--icen-font-weight-title);
135
134
  color: var(--icen-token-text);
136
135
  line-height: 1.3;
136
+ letter-spacing: -.01em;
137
137
  margin: 0;
138
138
  font-family: var(--icen-font-heading);
139
139
  }
@@ -141,13 +141,13 @@
141
141
  font-size: var(--icen-density-font-size-sm);
142
142
  color: var(--icen-token-text-muted);
143
143
  margin: 2px 0 0;
144
- line-height: 1.4;
144
+ line-height: 1.45;
145
145
  }
146
146
  .icen-card-body {
147
147
  padding: 0 var(--icen-density-space-md) var(--icen-density-space-md);
148
- font-size: var(--icen-density-font-size-md);
148
+ font-size: var(--icen-font-size-control);
149
149
  color: var(--icen-token-text-muted);
150
- line-height: 1.6;
150
+ line-height: 1.55;
151
151
  }
152
152
  .icen-card-body > p:first-child { margin-top: 0; }
153
153
  .icen-card-body > p:last-child { margin-bottom: 0; }
@@ -157,8 +157,8 @@
157
157
  align-items: center;
158
158
  gap: var(--icen-density-space-sm);
159
159
  padding: var(--icen-density-space-sm) var(--icen-density-space-md);
160
- border-top: 1px solid var(--icen-token-outline-soft);
161
- background: color-mix(in srgb, var(--icen-token-bg-soft) 50%, transparent);
160
+ border-top: 1px solid var(--icen-token-separator-soft);
161
+ background: var(--icen-token-surface-chrome);
162
162
  }
163
163
  .icen-card-meta {
164
164
  display: flex;
@@ -0,0 +1,2 @@
1
+ // kit: card 类型面(构建产物,勿手改)
2
+ export {};
@@ -0,0 +1,2 @@
1
+ // kit: carousel 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/carousel.mjs';