@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
@@ -21,6 +21,7 @@ var ICEN_LOCALE_ZH_CN = {
21
21
  "aiChat.roleTool": "\u5DE5",
22
22
  "aiChat.roleUser": "\u6211",
23
23
  "aiChat.thinking": "\u601D\u8003 {p0}",
24
+ "aiChat.thinkingNow": "\u6B63\u5728\u601D\u8003\u2026",
24
25
  /* ── aiComposer ── */
25
26
  "aiComposer.attachAgent": "\u4EE3\u7406",
26
27
  "aiComposer.library": "\u6DFB\u52A0\u4E0A\u4E0B\u6587\u4E0E\u547D\u4EE4",
@@ -203,6 +204,19 @@ var ICEN_LOCALE_ZH_CN = {
203
204
  "charts.noData": "\u6682\u65E0\u6570\u636E",
204
205
  "charts.resetZoom": "\u91CD\u7F6E\u7F29\u653E",
205
206
  "charts.sampled": "\u5DF2\u62BD\u6837 {p0}\u2192{p1} \u70B9",
207
+ "charts.a11y.keyboardHint": "\u65B9\u5411\u952E\u9010\u70B9\u6D4F\u89C8\uFF0CHome/End \u8DF3\u9996\u5C3E\uFF0CEsc \u91CD\u7F6E\u7F29\u653E",
208
+ "charts.a11y.max": "\u6700\u5927 {p0}\uFF08{p1}\uFF09",
209
+ "charts.a11y.min": "\u6700\u5C0F {p0}\uFF08{p1}\uFF09",
210
+ "charts.a11y.point": "{p0}\uFF1A{p1}\uFF0C\u7B2C {p2}/{p3} \u70B9",
211
+ "charts.a11y.pointSeries": "{p0} \xB7 {p1}\uFF1A{p2}\uFF0C\u7B2C {p3}/{p4} \u70B9",
212
+ "charts.a11y.range": "\u7C7B\u76EE {p0} \u81F3 {p1}",
213
+ "charts.a11y.scatterRange": "x \u8303\u56F4 {p0}\u2013{p1}\uFF0Cy \u8303\u56F4 {p2}\u2013{p3}",
214
+ "charts.a11y.seriesCount": "{p0} \u4E2A\u7CFB\u5217",
215
+ "charts.a11y.tableCaption": "{p0} \u6570\u636E\u8868",
216
+ "charts.a11y.trend": "\u9996\u7CFB\u5217\u8D8B\u52BF{p0}",
217
+ "charts.a11y.trendDown": "\u4E0B\u964D",
218
+ "charts.a11y.trendFlat": "\u6301\u5E73",
219
+ "charts.a11y.trendUp": "\u4E0A\u5347",
206
220
  "charts.type.area": "\u9762\u79EF\u56FE",
207
221
  "charts.type.donut": "\u73AF\u5F62\u56FE",
208
222
  "charts.type.gauge": "\u4EEA\u8868\u76D8",
@@ -1,4 +1,4 @@
1
- export { FOCUSABLE, focusableWithin } from './focus.js';
1
+ export { FOCUSABLE, focusableWithin } from './focus.mjs';
2
2
 
3
3
  /** 焦点陷阱的可聚焦元素选择器(modal / command-palette 焦点陷阱全库共用)。 */
4
4
  /** openModal 可选项。 */
@@ -157,6 +157,7 @@ var ICEN_LOCALE_ZH_CN = {
157
157
  "aiChat.roleTool": "\u5DE5",
158
158
  "aiChat.roleUser": "\u6211",
159
159
  "aiChat.thinking": "\u601D\u8003 {p0}",
160
+ "aiChat.thinkingNow": "\u6B63\u5728\u601D\u8003\u2026",
160
161
  /* ── aiComposer ── */
161
162
  "aiComposer.attachAgent": "\u4EE3\u7406",
162
163
  "aiComposer.library": "\u6DFB\u52A0\u4E0A\u4E0B\u6587\u4E0E\u547D\u4EE4",
@@ -339,6 +340,19 @@ var ICEN_LOCALE_ZH_CN = {
339
340
  "charts.noData": "\u6682\u65E0\u6570\u636E",
340
341
  "charts.resetZoom": "\u91CD\u7F6E\u7F29\u653E",
341
342
  "charts.sampled": "\u5DF2\u62BD\u6837 {p0}\u2192{p1} \u70B9",
343
+ "charts.a11y.keyboardHint": "\u65B9\u5411\u952E\u9010\u70B9\u6D4F\u89C8\uFF0CHome/End \u8DF3\u9996\u5C3E\uFF0CEsc \u91CD\u7F6E\u7F29\u653E",
344
+ "charts.a11y.max": "\u6700\u5927 {p0}\uFF08{p1}\uFF09",
345
+ "charts.a11y.min": "\u6700\u5C0F {p0}\uFF08{p1}\uFF09",
346
+ "charts.a11y.point": "{p0}\uFF1A{p1}\uFF0C\u7B2C {p2}/{p3} \u70B9",
347
+ "charts.a11y.pointSeries": "{p0} \xB7 {p1}\uFF1A{p2}\uFF0C\u7B2C {p3}/{p4} \u70B9",
348
+ "charts.a11y.range": "\u7C7B\u76EE {p0} \u81F3 {p1}",
349
+ "charts.a11y.scatterRange": "x \u8303\u56F4 {p0}\u2013{p1}\uFF0Cy \u8303\u56F4 {p2}\u2013{p3}",
350
+ "charts.a11y.seriesCount": "{p0} \u4E2A\u7CFB\u5217",
351
+ "charts.a11y.tableCaption": "{p0} \u6570\u636E\u8868",
352
+ "charts.a11y.trend": "\u9996\u7CFB\u5217\u8D8B\u52BF{p0}",
353
+ "charts.a11y.trendDown": "\u4E0B\u964D",
354
+ "charts.a11y.trendFlat": "\u6301\u5E73",
355
+ "charts.a11y.trendUp": "\u4E0A\u5347",
342
356
  "charts.type.area": "\u9762\u79EF\u56FE",
343
357
  "charts.type.donut": "\u73AF\u5F62\u56FE",
344
358
  "charts.type.gauge": "\u4EEA\u8868\u76D8",
@@ -0,0 +1,16 @@
1
+ /** 手动覆盖值(`<html data-icen-motion>` 只认 reduce/full;无属性或非法值 = null = 跟随系统)。 */
2
+ type IcenMotionMode = 'reduce' | 'full';
3
+ /** 当前手动覆盖。SSR 返回 null。 */
4
+ declare function icenMotionOverride(): IcenMotionMode | null;
5
+ /** 是否处于降级态:手动 reduce > 手动 full > 系统偏好。SSR/无 matchMedia 返回 false(不降级)。 */
6
+ declare function icenMotionReduced(): boolean;
7
+ /**
8
+ * 订阅降级态变化(系统偏好切换 + data-icen-motion 属性改写),返回销毁函数。
9
+ * 设置属性本身即触发回调(MutationObserver 同帧),消费方无需手动补一次——但初始值不主动回调。
10
+ * SSR 返回 noop。
11
+ */
12
+ declare function onIcenMotionChange(cb: (reduced: boolean) => void): () => void;
13
+ /** 设置/清除手动覆盖(写 `<html data-icen-motion>`;null = 移除属性、跟随系统)。SSR 静默跳过。 */
14
+ declare function setIcenMotion(mode: IcenMotionMode | null): void;
15
+
16
+ export { type IcenMotionMode, icenMotionOverride, icenMotionReduced, onIcenMotionChange, setIcenMotion };
@@ -0,0 +1,39 @@
1
+ // src/behaviors/motion.ts
2
+ function icenMotionOverride() {
3
+ if (typeof document === "undefined") return null;
4
+ const v = document.documentElement.getAttribute("data-icen-motion");
5
+ return v === "reduce" || v === "full" ? v : null;
6
+ }
7
+ function icenMotionReduced() {
8
+ const override = icenMotionOverride();
9
+ if (override) return override === "reduce";
10
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return false;
11
+ return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
12
+ }
13
+ function onIcenMotionChange(cb) {
14
+ if (typeof window === "undefined" || typeof document === "undefined") return () => {
15
+ };
16
+ const notify = () => cb(icenMotionReduced());
17
+ const mq = typeof window.matchMedia === "function" ? window.matchMedia("(prefers-reduced-motion: reduce)") : null;
18
+ mq?.addEventListener("change", notify);
19
+ const mo = new MutationObserver((records) => {
20
+ if (records.some((r) => r.attributeName === "data-icen-motion")) notify();
21
+ });
22
+ mo.observe(document.documentElement, { attributes: true, attributeFilter: ["data-icen-motion"] });
23
+ return () => {
24
+ mq?.removeEventListener("change", notify);
25
+ mo.disconnect();
26
+ };
27
+ }
28
+ function setIcenMotion(mode) {
29
+ if (typeof document === "undefined") return;
30
+ const el = document.documentElement;
31
+ if (mode === null) el.removeAttribute("data-icen-motion");
32
+ else el.setAttribute("data-icen-motion", mode);
33
+ }
34
+ export {
35
+ icenMotionOverride,
36
+ icenMotionReduced,
37
+ onIcenMotionChange,
38
+ setIcenMotion
39
+ };
@@ -1,5 +1,5 @@
1
- import { FeedbackAction } from './feedback.js';
2
- import { IconName } from './icons.js';
1
+ import { FeedbackAction } from './feedback.mjs';
2
+ import { IconName } from './icons.mjs';
3
3
 
4
4
  type NotificationKind = 'success' | 'warning' | 'error' | 'info';
5
5
  interface NotificationAction {
@@ -302,6 +302,7 @@ var ICEN_LOCALE_ZH_CN = {
302
302
  "aiChat.roleTool": "\u5DE5",
303
303
  "aiChat.roleUser": "\u6211",
304
304
  "aiChat.thinking": "\u601D\u8003 {p0}",
305
+ "aiChat.thinkingNow": "\u6B63\u5728\u601D\u8003\u2026",
305
306
  /* ── aiComposer ── */
306
307
  "aiComposer.attachAgent": "\u4EE3\u7406",
307
308
  "aiComposer.library": "\u6DFB\u52A0\u4E0A\u4E0B\u6587\u4E0E\u547D\u4EE4",
@@ -484,6 +485,19 @@ var ICEN_LOCALE_ZH_CN = {
484
485
  "charts.noData": "\u6682\u65E0\u6570\u636E",
485
486
  "charts.resetZoom": "\u91CD\u7F6E\u7F29\u653E",
486
487
  "charts.sampled": "\u5DF2\u62BD\u6837 {p0}\u2192{p1} \u70B9",
488
+ "charts.a11y.keyboardHint": "\u65B9\u5411\u952E\u9010\u70B9\u6D4F\u89C8\uFF0CHome/End \u8DF3\u9996\u5C3E\uFF0CEsc \u91CD\u7F6E\u7F29\u653E",
489
+ "charts.a11y.max": "\u6700\u5927 {p0}\uFF08{p1}\uFF09",
490
+ "charts.a11y.min": "\u6700\u5C0F {p0}\uFF08{p1}\uFF09",
491
+ "charts.a11y.point": "{p0}\uFF1A{p1}\uFF0C\u7B2C {p2}/{p3} \u70B9",
492
+ "charts.a11y.pointSeries": "{p0} \xB7 {p1}\uFF1A{p2}\uFF0C\u7B2C {p3}/{p4} \u70B9",
493
+ "charts.a11y.range": "\u7C7B\u76EE {p0} \u81F3 {p1}",
494
+ "charts.a11y.scatterRange": "x \u8303\u56F4 {p0}\u2013{p1}\uFF0Cy \u8303\u56F4 {p2}\u2013{p3}",
495
+ "charts.a11y.seriesCount": "{p0} \u4E2A\u7CFB\u5217",
496
+ "charts.a11y.tableCaption": "{p0} \u6570\u636E\u8868",
497
+ "charts.a11y.trend": "\u9996\u7CFB\u5217\u8D8B\u52BF{p0}",
498
+ "charts.a11y.trendDown": "\u4E0B\u964D",
499
+ "charts.a11y.trendFlat": "\u6301\u5E73",
500
+ "charts.a11y.trendUp": "\u4E0A\u5347",
487
501
  "charts.type.area": "\u9762\u79EF\u56FE",
488
502
  "charts.type.donut": "\u73AF\u5F62\u56FE",
489
503
  "charts.type.gauge": "\u4EEA\u8868\u76D8",
@@ -1164,6 +1178,15 @@ function parseSvg(source) {
1164
1178
  return document.importNode(root, true);
1165
1179
  }
1166
1180
 
1181
+ // src/behaviors/url-safety.ts
1182
+ function safeUrl(uri) {
1183
+ const s = uri.replace(/[\t\n\r\0-\x1f\x7f]/g, "").trim().toLowerCase();
1184
+ if (!s) return void 0;
1185
+ if (s.startsWith("javascript:") || s.startsWith("vbscript:")) return void 0;
1186
+ if (/^data:\s*text\/html/.test(s)) return void 0;
1187
+ return uri;
1188
+ }
1189
+
1167
1190
  // src/behaviors/notification.ts
1168
1191
  var clocks = /* @__PURE__ */ new WeakMap();
1169
1192
  var KIND_SYMBOL = { success: "circle-check", warning: "triangle-alert", error: "circle-error", info: "circle-info" };
@@ -1378,7 +1401,7 @@ function buildIcon(record) {
1378
1401
  wrap.className = "icen-notification-icon";
1379
1402
  wrap.setAttribute("aria-hidden", "true");
1380
1403
  const { icon, avatar } = record.opts;
1381
- if (avatar) {
1404
+ if (avatar && safeUrl(avatar)) {
1382
1405
  const img = document.createElement("img");
1383
1406
  img.className = "icen-notification-avatar";
1384
1407
  img.src = avatar;
@@ -1481,12 +1504,13 @@ function buildActions(record) {
1481
1504
  }
1482
1505
  function buildLink(record) {
1483
1506
  const { link, linkLabel } = record.opts;
1484
- if (!link) return null;
1507
+ const href = link ? safeUrl(link) : void 0;
1508
+ if (!href) return null;
1485
1509
  const wrap = document.createElement("div");
1486
1510
  wrap.className = "icen-notification-link-wrap";
1487
1511
  const a = document.createElement("a");
1488
1512
  a.className = "icen-notification-link";
1489
- a.href = link;
1513
+ a.href = href;
1490
1514
  a.textContent = linkLabel ?? t("notification.viewDetails");
1491
1515
  a.addEventListener("click", (ev) => ev.stopPropagation());
1492
1516
  wrap.appendChild(a);
@@ -116,6 +116,7 @@ var ICEN_LOCALE_ZH_CN = {
116
116
  "aiChat.roleTool": "\u5DE5",
117
117
  "aiChat.roleUser": "\u6211",
118
118
  "aiChat.thinking": "\u601D\u8003 {p0}",
119
+ "aiChat.thinkingNow": "\u6B63\u5728\u601D\u8003\u2026",
119
120
  /* ── aiComposer ── */
120
121
  "aiComposer.attachAgent": "\u4EE3\u7406",
121
122
  "aiComposer.library": "\u6DFB\u52A0\u4E0A\u4E0B\u6587\u4E0E\u547D\u4EE4",
@@ -298,6 +299,19 @@ var ICEN_LOCALE_ZH_CN = {
298
299
  "charts.noData": "\u6682\u65E0\u6570\u636E",
299
300
  "charts.resetZoom": "\u91CD\u7F6E\u7F29\u653E",
300
301
  "charts.sampled": "\u5DF2\u62BD\u6837 {p0}\u2192{p1} \u70B9",
302
+ "charts.a11y.keyboardHint": "\u65B9\u5411\u952E\u9010\u70B9\u6D4F\u89C8\uFF0CHome/End \u8DF3\u9996\u5C3E\uFF0CEsc \u91CD\u7F6E\u7F29\u653E",
303
+ "charts.a11y.max": "\u6700\u5927 {p0}\uFF08{p1}\uFF09",
304
+ "charts.a11y.min": "\u6700\u5C0F {p0}\uFF08{p1}\uFF09",
305
+ "charts.a11y.point": "{p0}\uFF1A{p1}\uFF0C\u7B2C {p2}/{p3} \u70B9",
306
+ "charts.a11y.pointSeries": "{p0} \xB7 {p1}\uFF1A{p2}\uFF0C\u7B2C {p3}/{p4} \u70B9",
307
+ "charts.a11y.range": "\u7C7B\u76EE {p0} \u81F3 {p1}",
308
+ "charts.a11y.scatterRange": "x \u8303\u56F4 {p0}\u2013{p1}\uFF0Cy \u8303\u56F4 {p2}\u2013{p3}",
309
+ "charts.a11y.seriesCount": "{p0} \u4E2A\u7CFB\u5217",
310
+ "charts.a11y.tableCaption": "{p0} \u6570\u636E\u8868",
311
+ "charts.a11y.trend": "\u9996\u7CFB\u5217\u8D8B\u52BF{p0}",
312
+ "charts.a11y.trendDown": "\u4E0B\u964D",
313
+ "charts.a11y.trendFlat": "\u6301\u5E73",
314
+ "charts.a11y.trendUp": "\u4E0A\u5347",
301
315
  "charts.type.area": "\u9762\u79EF\u56FE",
302
316
  "charts.type.donut": "\u73AF\u5F62\u56FE",
303
317
  "charts.type.gauge": "\u4EEA\u8868\u76D8",
@@ -0,0 +1,17 @@
1
+ /** Native scrolling with delegated activity tracking; no replacement tracks or wheel interception. */
2
+ interface ScrollAreaOptions {
3
+ /** Delegation scope. Defaults to document; includes future descendants. */
4
+ root?: Document | HTMLElement;
5
+ /** Idle delay in milliseconds. Local data-icen-scrollbar-delay wins; CSS token is the fallback. */
6
+ idleDelay?: number;
7
+ }
8
+ /**
9
+ * Enables idle hiding for every native scroller in a scope, including portalled
10
+ * panels when mounted on document. Idempotent, SSR-safe, returns cleanup.
11
+ * CSS-only use keeps scrollbars visible; enabled scopes default to scroll mode.
12
+ * Local data-icen-scrollbars selects
13
+ * auto (scroll/hover/focus), scroll (scroll/focus), visible, or hidden.
14
+ */
15
+ declare function initScrollArea(options?: ScrollAreaOptions): () => void;
16
+
17
+ export { type ScrollAreaOptions, initScrollArea };
@@ -0,0 +1,59 @@
1
+ // src/behaviors/scroll-area.ts
2
+ var mounted = /* @__PURE__ */ new WeakSet();
3
+ var noop = () => {
4
+ };
5
+ var isDocument = (node) => node?.nodeType === 9;
6
+ function initScrollArea(options = {}) {
7
+ if (typeof document === "undefined" || typeof window === "undefined") return noop;
8
+ const root = options.root ?? document;
9
+ if (mounted.has(root)) return noop;
10
+ mounted.add(root);
11
+ const host = isDocument(root) ? root.documentElement : root;
12
+ const previous = host.getAttribute("data-icen-scrollbars-ready");
13
+ host.setAttribute("data-icen-scrollbars-ready", "");
14
+ const pending = /* @__PURE__ */ new Map();
15
+ const restore = (el, value) => {
16
+ if (value === null) el.removeAttribute("data-icen-scroll-active");
17
+ else el.setAttribute("data-icen-scroll-active", value);
18
+ };
19
+ const onScroll = (event) => {
20
+ const el = isDocument(event.target) ? event.target.documentElement : event.target;
21
+ if (!(el instanceof HTMLElement)) return;
22
+ for (let node = el; node; node = node.parentElement) {
23
+ if (!mounted.has(node)) continue;
24
+ if (node !== root) return;
25
+ break;
26
+ }
27
+ const old = pending.get(el);
28
+ if (old) clearTimeout(old.timer);
29
+ const before = old ? old.previous : el.getAttribute("data-icen-scroll-active");
30
+ el.setAttribute("data-icen-scroll-active", "");
31
+ const local = el.closest("[data-icen-scrollbar-delay]")?.dataset.icenScrollbarDelay;
32
+ const token = getComputedStyle(el).getPropertyValue("--icen-token-scrollbar-idle-delay").trim();
33
+ const parsed = local !== void 0 ? Number(local) : options.idleDelay ?? (token ? Number.parseFloat(token) * (token.endsWith("ms") ? 1 : token.endsWith("s") ? 1e3 : 1) : 900);
34
+ const delay = Number.isFinite(parsed) ? Math.max(0, Math.min(6e4, parsed)) : 900;
35
+ const timer = setTimeout(() => {
36
+ restore(el, before);
37
+ pending.delete(el);
38
+ }, delay);
39
+ pending.set(el, { timer, previous: before });
40
+ };
41
+ root.addEventListener("scroll", onScroll, { capture: true, passive: true });
42
+ let disposed = false;
43
+ return () => {
44
+ if (disposed) return;
45
+ disposed = true;
46
+ root.removeEventListener("scroll", onScroll, true);
47
+ for (const [el, state] of pending) {
48
+ clearTimeout(state.timer);
49
+ restore(el, state.previous);
50
+ }
51
+ pending.clear();
52
+ if (previous === null) host.removeAttribute("data-icen-scrollbars-ready");
53
+ else host.setAttribute("data-icen-scrollbars-ready", previous);
54
+ mounted.delete(root);
55
+ };
56
+ }
57
+ export {
58
+ initScrollArea
59
+ };
@@ -21,6 +21,7 @@ var ICEN_LOCALE_ZH_CN = {
21
21
  "aiChat.roleTool": "\u5DE5",
22
22
  "aiChat.roleUser": "\u6211",
23
23
  "aiChat.thinking": "\u601D\u8003 {p0}",
24
+ "aiChat.thinkingNow": "\u6B63\u5728\u601D\u8003\u2026",
24
25
  /* ── aiComposer ── */
25
26
  "aiComposer.attachAgent": "\u4EE3\u7406",
26
27
  "aiComposer.library": "\u6DFB\u52A0\u4E0A\u4E0B\u6587\u4E0E\u547D\u4EE4",
@@ -203,6 +204,19 @@ var ICEN_LOCALE_ZH_CN = {
203
204
  "charts.noData": "\u6682\u65E0\u6570\u636E",
204
205
  "charts.resetZoom": "\u91CD\u7F6E\u7F29\u653E",
205
206
  "charts.sampled": "\u5DF2\u62BD\u6837 {p0}\u2192{p1} \u70B9",
207
+ "charts.a11y.keyboardHint": "\u65B9\u5411\u952E\u9010\u70B9\u6D4F\u89C8\uFF0CHome/End \u8DF3\u9996\u5C3E\uFF0CEsc \u91CD\u7F6E\u7F29\u653E",
208
+ "charts.a11y.max": "\u6700\u5927 {p0}\uFF08{p1}\uFF09",
209
+ "charts.a11y.min": "\u6700\u5C0F {p0}\uFF08{p1}\uFF09",
210
+ "charts.a11y.point": "{p0}\uFF1A{p1}\uFF0C\u7B2C {p2}/{p3} \u70B9",
211
+ "charts.a11y.pointSeries": "{p0} \xB7 {p1}\uFF1A{p2}\uFF0C\u7B2C {p3}/{p4} \u70B9",
212
+ "charts.a11y.range": "\u7C7B\u76EE {p0} \u81F3 {p1}",
213
+ "charts.a11y.scatterRange": "x \u8303\u56F4 {p0}\u2013{p1}\uFF0Cy \u8303\u56F4 {p2}\u2013{p3}",
214
+ "charts.a11y.seriesCount": "{p0} \u4E2A\u7CFB\u5217",
215
+ "charts.a11y.tableCaption": "{p0} \u6570\u636E\u8868",
216
+ "charts.a11y.trend": "\u9996\u7CFB\u5217\u8D8B\u52BF{p0}",
217
+ "charts.a11y.trendDown": "\u4E0B\u964D",
218
+ "charts.a11y.trendFlat": "\u6301\u5E73",
219
+ "charts.a11y.trendUp": "\u4E0A\u5347",
206
220
  "charts.type.area": "\u9762\u79EF\u56FE",
207
221
  "charts.type.donut": "\u73AF\u5F62\u56FE",
208
222
  "charts.type.gauge": "\u4EEA\u8868\u76D8",
@@ -1209,8 +1223,13 @@ function setup(container) {
1209
1223
  el.__icenSelectInit = true;
1210
1224
  const trigger = triggerEl;
1211
1225
  const panel = panelEl;
1212
- const arrow = trigger.querySelector(".icen-select-chevron");
1213
- arrow?.remove();
1226
+ if (!trigger.querySelector(".icen-select-chevron")) {
1227
+ const chevron = createIcon("chevron-down", { size: 12, className: "icen-select-chevron" });
1228
+ if (chevron) {
1229
+ chevron.setAttribute("aria-hidden", "true");
1230
+ trigger.append(chevron);
1231
+ }
1232
+ }
1214
1233
  const isMultiple = container.hasAttribute("data-icen-select-multiple");
1215
1234
  const isSearchable = container.hasAttribute("data-icen-select-search");
1216
1235
  if (isMultiple && !trigger.hasAttribute("aria-label") && !trigger.hasAttribute("aria-labelledby")) trigger.setAttribute("aria-label", container.getAttribute("data-icen-select-label") ?? t("select.fieldLabel"));
@@ -23,7 +23,7 @@ function setupSingle(slider, native, bag) {
23
23
  const sync = () => {
24
24
  const p = pct(native);
25
25
  if (fill) fill.style.width = `${p}%`;
26
- if (thumb) thumb.style.left = `calc(${p}% - 8px)`;
26
+ if (thumb) thumb.style.left = `${p}%`;
27
27
  };
28
28
  bind(native, "input", () => {
29
29
  sync();
@@ -59,8 +59,8 @@ function setupDual(slider, natives, bag) {
59
59
  range.style.left = `${pLo}%`;
60
60
  range.style.right = `${100 - pHi}%`;
61
61
  }
62
- if (thumbLo) thumbLo.style.left = `calc(${pLo}% - 8px)`;
63
- if (thumbHi) thumbHi.style.left = `calc(${pHi}% - 8px)`;
62
+ if (thumbLo) thumbLo.style.left = `${pLo}%`;
63
+ if (thumbHi) thumbHi.style.left = `${pHi}%`;
64
64
  lo.style.clipPath = `inset(0 ${100 - pLo}% 0 0)`;
65
65
  hi.style.clipPath = `inset(0 0 0 ${pHi}%)`;
66
66
  };
@@ -48,6 +48,8 @@ function setup(container) {
48
48
  divider.setAttribute("aria-valuenow", String(Math.round(readCurrent())));
49
49
  let dragging = false;
50
50
  const onDown = (ev) => {
51
+ if (ev.pointerType === "mouse" && ev.button !== 0) return;
52
+ if (!ev.isPrimary) return;
51
53
  dragging = true;
52
54
  divider.classList.add("is-dragging");
53
55
  divider.setPointerCapture(ev.pointerId);
@@ -129,6 +129,7 @@ var ICEN_LOCALE_ZH_CN = {
129
129
  "aiChat.roleTool": "\u5DE5",
130
130
  "aiChat.roleUser": "\u6211",
131
131
  "aiChat.thinking": "\u601D\u8003 {p0}",
132
+ "aiChat.thinkingNow": "\u6B63\u5728\u601D\u8003\u2026",
132
133
  /* ── aiComposer ── */
133
134
  "aiComposer.attachAgent": "\u4EE3\u7406",
134
135
  "aiComposer.library": "\u6DFB\u52A0\u4E0A\u4E0B\u6587\u4E0E\u547D\u4EE4",
@@ -311,6 +312,19 @@ var ICEN_LOCALE_ZH_CN = {
311
312
  "charts.noData": "\u6682\u65E0\u6570\u636E",
312
313
  "charts.resetZoom": "\u91CD\u7F6E\u7F29\u653E",
313
314
  "charts.sampled": "\u5DF2\u62BD\u6837 {p0}\u2192{p1} \u70B9",
315
+ "charts.a11y.keyboardHint": "\u65B9\u5411\u952E\u9010\u70B9\u6D4F\u89C8\uFF0CHome/End \u8DF3\u9996\u5C3E\uFF0CEsc \u91CD\u7F6E\u7F29\u653E",
316
+ "charts.a11y.max": "\u6700\u5927 {p0}\uFF08{p1}\uFF09",
317
+ "charts.a11y.min": "\u6700\u5C0F {p0}\uFF08{p1}\uFF09",
318
+ "charts.a11y.point": "{p0}\uFF1A{p1}\uFF0C\u7B2C {p2}/{p3} \u70B9",
319
+ "charts.a11y.pointSeries": "{p0} \xB7 {p1}\uFF1A{p2}\uFF0C\u7B2C {p3}/{p4} \u70B9",
320
+ "charts.a11y.range": "\u7C7B\u76EE {p0} \u81F3 {p1}",
321
+ "charts.a11y.scatterRange": "x \u8303\u56F4 {p0}\u2013{p1}\uFF0Cy \u8303\u56F4 {p2}\u2013{p3}",
322
+ "charts.a11y.seriesCount": "{p0} \u4E2A\u7CFB\u5217",
323
+ "charts.a11y.tableCaption": "{p0} \u6570\u636E\u8868",
324
+ "charts.a11y.trend": "\u9996\u7CFB\u5217\u8D8B\u52BF{p0}",
325
+ "charts.a11y.trendDown": "\u4E0B\u964D",
326
+ "charts.a11y.trendFlat": "\u6301\u5E73",
327
+ "charts.a11y.trendUp": "\u4E0A\u5347",
314
328
  "charts.type.area": "\u9762\u79EF\u56FE",
315
329
  "charts.type.donut": "\u73AF\u5F62\u56FE",
316
330
  "charts.type.gauge": "\u4EEA\u8868\u76D8",
@@ -28,6 +28,13 @@ function syncInk(container, name) {
28
28
  if (!ink) return;
29
29
  ink.style.width = `${btn.offsetWidth}px`;
30
30
  ink.style.transform = `translateX(${btn.offsetLeft}px)`;
31
+ if (btn.offsetTop > 0) {
32
+ ink.style.top = `${btn.offsetTop + btn.offsetHeight}px`;
33
+ ink.style.bottom = "auto";
34
+ } else {
35
+ ink.style.top = "";
36
+ ink.style.bottom = "";
37
+ }
31
38
  }
32
39
  function activate(container, name, writeHash, emit = false) {
33
40
  const buttons = tabButtons(container);
@@ -70,6 +77,9 @@ function focusTab(container, idx) {
70
77
  const buttons = tabButtons(container);
71
78
  const target = buttons[idx];
72
79
  if (!target || isDisabled(target)) return;
80
+ buttons.forEach((b) => {
81
+ b.tabIndex = b === target ? 0 : -1;
82
+ });
73
83
  target.focus();
74
84
  }
75
85
  function nextEnabled(container, from, dir) {
@@ -116,6 +116,7 @@ var ICEN_LOCALE_ZH_CN = {
116
116
  "aiChat.roleTool": "\u5DE5",
117
117
  "aiChat.roleUser": "\u6211",
118
118
  "aiChat.thinking": "\u601D\u8003 {p0}",
119
+ "aiChat.thinkingNow": "\u6B63\u5728\u601D\u8003\u2026",
119
120
  /* ── aiComposer ── */
120
121
  "aiComposer.attachAgent": "\u4EE3\u7406",
121
122
  "aiComposer.library": "\u6DFB\u52A0\u4E0A\u4E0B\u6587\u4E0E\u547D\u4EE4",
@@ -298,6 +299,19 @@ var ICEN_LOCALE_ZH_CN = {
298
299
  "charts.noData": "\u6682\u65E0\u6570\u636E",
299
300
  "charts.resetZoom": "\u91CD\u7F6E\u7F29\u653E",
300
301
  "charts.sampled": "\u5DF2\u62BD\u6837 {p0}\u2192{p1} \u70B9",
302
+ "charts.a11y.keyboardHint": "\u65B9\u5411\u952E\u9010\u70B9\u6D4F\u89C8\uFF0CHome/End \u8DF3\u9996\u5C3E\uFF0CEsc \u91CD\u7F6E\u7F29\u653E",
303
+ "charts.a11y.max": "\u6700\u5927 {p0}\uFF08{p1}\uFF09",
304
+ "charts.a11y.min": "\u6700\u5C0F {p0}\uFF08{p1}\uFF09",
305
+ "charts.a11y.point": "{p0}\uFF1A{p1}\uFF0C\u7B2C {p2}/{p3} \u70B9",
306
+ "charts.a11y.pointSeries": "{p0} \xB7 {p1}\uFF1A{p2}\uFF0C\u7B2C {p3}/{p4} \u70B9",
307
+ "charts.a11y.range": "\u7C7B\u76EE {p0} \u81F3 {p1}",
308
+ "charts.a11y.scatterRange": "x \u8303\u56F4 {p0}\u2013{p1}\uFF0Cy \u8303\u56F4 {p2}\u2013{p3}",
309
+ "charts.a11y.seriesCount": "{p0} \u4E2A\u7CFB\u5217",
310
+ "charts.a11y.tableCaption": "{p0} \u6570\u636E\u8868",
311
+ "charts.a11y.trend": "\u9996\u7CFB\u5217\u8D8B\u52BF{p0}",
312
+ "charts.a11y.trendDown": "\u4E0B\u964D",
313
+ "charts.a11y.trendFlat": "\u6301\u5E73",
314
+ "charts.a11y.trendUp": "\u4E0A\u5347",
301
315
  "charts.type.area": "\u9762\u79EF\u56FE",
302
316
  "charts.type.donut": "\u73AF\u5F62\u56FE",
303
317
  "charts.type.gauge": "\u4EEA\u8868\u76D8",
@@ -1,5 +1,5 @@
1
- import { ThemeState } from './theme.js';
2
- import { PanelSizing } from './popover.js';
1
+ import { ThemeState } from './theme.mjs';
2
+ import { PanelSizing } from './popover.mjs';
3
3
 
4
4
  interface ThemeSwitcherOptions {
5
5
  /** all = one appearance menu; individual axes can be composed freely. */
@@ -528,8 +528,22 @@ function toggleDark() {
528
528
  var systemListenerAttached = false;
529
529
  var storageListenerAttached = false;
530
530
  function initTheme() {
531
- const t2 = getTheme();
532
- applyTheme(t2);
531
+ let t2 = getTheme();
532
+ if (isBrowser()) {
533
+ const root = document.documentElement;
534
+ if (!hasPersistedPreference() && root.hasAttribute("data-icen-preset") && root.hasAttribute("data-icen-style")) {
535
+ t2 = {
536
+ preset: root.getAttribute("data-icen-preset") ?? t2.preset,
537
+ dark: root.getAttribute("data-icen-theme") === "dark",
538
+ style: root.getAttribute("data-icen-style") ?? t2.style
539
+ };
540
+ lastApplied = { ...t2 };
541
+ } else {
542
+ applyTheme(t2);
543
+ }
544
+ } else {
545
+ applyTheme(t2);
546
+ }
533
547
  if (isBrowser() && !storageListenerAttached) {
534
548
  storageListenerAttached = true;
535
549
  window.addEventListener("storage", (event) => {
@@ -898,6 +912,7 @@ var ICEN_LOCALE_ZH_CN = {
898
912
  "aiChat.roleTool": "\u5DE5",
899
913
  "aiChat.roleUser": "\u6211",
900
914
  "aiChat.thinking": "\u601D\u8003 {p0}",
915
+ "aiChat.thinkingNow": "\u6B63\u5728\u601D\u8003\u2026",
901
916
  /* ── aiComposer ── */
902
917
  "aiComposer.attachAgent": "\u4EE3\u7406",
903
918
  "aiComposer.library": "\u6DFB\u52A0\u4E0A\u4E0B\u6587\u4E0E\u547D\u4EE4",
@@ -1080,6 +1095,19 @@ var ICEN_LOCALE_ZH_CN = {
1080
1095
  "charts.noData": "\u6682\u65E0\u6570\u636E",
1081
1096
  "charts.resetZoom": "\u91CD\u7F6E\u7F29\u653E",
1082
1097
  "charts.sampled": "\u5DF2\u62BD\u6837 {p0}\u2192{p1} \u70B9",
1098
+ "charts.a11y.keyboardHint": "\u65B9\u5411\u952E\u9010\u70B9\u6D4F\u89C8\uFF0CHome/End \u8DF3\u9996\u5C3E\uFF0CEsc \u91CD\u7F6E\u7F29\u653E",
1099
+ "charts.a11y.max": "\u6700\u5927 {p0}\uFF08{p1}\uFF09",
1100
+ "charts.a11y.min": "\u6700\u5C0F {p0}\uFF08{p1}\uFF09",
1101
+ "charts.a11y.point": "{p0}\uFF1A{p1}\uFF0C\u7B2C {p2}/{p3} \u70B9",
1102
+ "charts.a11y.pointSeries": "{p0} \xB7 {p1}\uFF1A{p2}\uFF0C\u7B2C {p3}/{p4} \u70B9",
1103
+ "charts.a11y.range": "\u7C7B\u76EE {p0} \u81F3 {p1}",
1104
+ "charts.a11y.scatterRange": "x \u8303\u56F4 {p0}\u2013{p1}\uFF0Cy \u8303\u56F4 {p2}\u2013{p3}",
1105
+ "charts.a11y.seriesCount": "{p0} \u4E2A\u7CFB\u5217",
1106
+ "charts.a11y.tableCaption": "{p0} \u6570\u636E\u8868",
1107
+ "charts.a11y.trend": "\u9996\u7CFB\u5217\u8D8B\u52BF{p0}",
1108
+ "charts.a11y.trendDown": "\u4E0B\u964D",
1109
+ "charts.a11y.trendFlat": "\u6301\u5E73",
1110
+ "charts.a11y.trendUp": "\u4E0A\u5347",
1083
1111
  "charts.type.area": "\u9762\u79EF\u56FE",
1084
1112
  "charts.type.donut": "\u73AF\u5F62\u56FE",
1085
1113
  "charts.type.gauge": "\u4EEA\u8868\u76D8",
@@ -458,8 +458,22 @@ function setPrimitive(primitive) {
458
458
  var systemListenerAttached = false;
459
459
  var storageListenerAttached = false;
460
460
  function initTheme() {
461
- const t = getTheme();
462
- applyTheme(t);
461
+ let t = getTheme();
462
+ if (isBrowser()) {
463
+ const root = document.documentElement;
464
+ if (!hasPersistedPreference() && root.hasAttribute("data-icen-preset") && root.hasAttribute("data-icen-style")) {
465
+ t = {
466
+ preset: root.getAttribute("data-icen-preset") ?? t.preset,
467
+ dark: root.getAttribute("data-icen-theme") === "dark",
468
+ style: root.getAttribute("data-icen-style") ?? t.style
469
+ };
470
+ lastApplied = { ...t };
471
+ } else {
472
+ applyTheme(t);
473
+ }
474
+ } else {
475
+ applyTheme(t);
476
+ }
463
477
  if (isBrowser() && !storageListenerAttached) {
464
478
  storageListenerAttached = true;
465
479
  window.addEventListener("storage", (event) => {
@@ -1,5 +1,5 @@
1
- import { FeedbackAction } from './feedback.js';
2
- import { IconName } from './icons.js';
1
+ import { FeedbackAction } from './feedback.mjs';
2
+ import { IconName } from './icons.mjs';
3
3
 
4
4
  type ToastKind = 'warn' | 'info' | 'success' | 'error';
5
5
  interface ToastOptions {
@@ -302,6 +302,7 @@ var ICEN_LOCALE_ZH_CN = {
302
302
  "aiChat.roleTool": "\u5DE5",
303
303
  "aiChat.roleUser": "\u6211",
304
304
  "aiChat.thinking": "\u601D\u8003 {p0}",
305
+ "aiChat.thinkingNow": "\u6B63\u5728\u601D\u8003\u2026",
305
306
  /* ── aiComposer ── */
306
307
  "aiComposer.attachAgent": "\u4EE3\u7406",
307
308
  "aiComposer.library": "\u6DFB\u52A0\u4E0A\u4E0B\u6587\u4E0E\u547D\u4EE4",
@@ -484,6 +485,19 @@ var ICEN_LOCALE_ZH_CN = {
484
485
  "charts.noData": "\u6682\u65E0\u6570\u636E",
485
486
  "charts.resetZoom": "\u91CD\u7F6E\u7F29\u653E",
486
487
  "charts.sampled": "\u5DF2\u62BD\u6837 {p0}\u2192{p1} \u70B9",
488
+ "charts.a11y.keyboardHint": "\u65B9\u5411\u952E\u9010\u70B9\u6D4F\u89C8\uFF0CHome/End \u8DF3\u9996\u5C3E\uFF0CEsc \u91CD\u7F6E\u7F29\u653E",
489
+ "charts.a11y.max": "\u6700\u5927 {p0}\uFF08{p1}\uFF09",
490
+ "charts.a11y.min": "\u6700\u5C0F {p0}\uFF08{p1}\uFF09",
491
+ "charts.a11y.point": "{p0}\uFF1A{p1}\uFF0C\u7B2C {p2}/{p3} \u70B9",
492
+ "charts.a11y.pointSeries": "{p0} \xB7 {p1}\uFF1A{p2}\uFF0C\u7B2C {p3}/{p4} \u70B9",
493
+ "charts.a11y.range": "\u7C7B\u76EE {p0} \u81F3 {p1}",
494
+ "charts.a11y.scatterRange": "x \u8303\u56F4 {p0}\u2013{p1}\uFF0Cy \u8303\u56F4 {p2}\u2013{p3}",
495
+ "charts.a11y.seriesCount": "{p0} \u4E2A\u7CFB\u5217",
496
+ "charts.a11y.tableCaption": "{p0} \u6570\u636E\u8868",
497
+ "charts.a11y.trend": "\u9996\u7CFB\u5217\u8D8B\u52BF{p0}",
498
+ "charts.a11y.trendDown": "\u4E0B\u964D",
499
+ "charts.a11y.trendFlat": "\u6301\u5E73",
500
+ "charts.a11y.trendUp": "\u4E0A\u5347",
487
501
  "charts.type.area": "\u9762\u79EF\u56FE",
488
502
  "charts.type.donut": "\u73AF\u5F62\u56FE",
489
503
  "charts.type.gauge": "\u4EEA\u8868\u76D8",