@icen.ai/ui 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/AGENTS.md +82 -254
  2. package/LICENSE +21 -0
  3. package/README.md +60 -96
  4. package/dist/base.css +258 -188
  5. package/dist/behaviors/accordion.mjs +8 -8
  6. package/dist/behaviors/ai-branch.d.mts +1 -1
  7. package/dist/behaviors/ai-branch.mjs +1011 -94
  8. package/dist/behaviors/ai-chat.d.mts +9 -9
  9. package/dist/behaviors/ai-chat.mjs +1122 -169
  10. package/dist/behaviors/ai-composer.d.mts +47 -15
  11. package/dist/behaviors/ai-composer.mjs +2018 -534
  12. package/dist/behaviors/ai-core.d.mts +1 -1
  13. package/dist/behaviors/ai-core.mjs +1017 -107
  14. package/dist/behaviors/ai-diff.mjs +1020 -127
  15. package/dist/behaviors/ai-feedback.d.mts +1 -1
  16. package/dist/behaviors/ai-feedback.mjs +1036 -126
  17. package/dist/behaviors/ai-panel.d.mts +10 -10
  18. package/dist/behaviors/ai-panel.mjs +1285 -266
  19. package/dist/behaviors/ai-provider.d.mts +1 -1
  20. package/dist/behaviors/ai-provider.mjs +1004 -101
  21. package/dist/behaviors/ai-threads.d.mts +1 -1
  22. package/dist/behaviors/ai-threads.mjs +1069 -154
  23. package/dist/behaviors/ai-tool.d.mts +3 -3
  24. package/dist/behaviors/ai-tool.mjs +2087 -413
  25. package/dist/behaviors/ai-tools.d.mts +89 -16
  26. package/dist/behaviors/ai-tools.mjs +5365 -380
  27. package/dist/behaviors/autocomplete.d.mts +53 -0
  28. package/dist/behaviors/autocomplete.mjs +1601 -0
  29. package/dist/behaviors/back-top.d.mts +1 -1
  30. package/dist/behaviors/back-top.mjs +952 -14
  31. package/dist/behaviors/carousel.d.mts +1 -1
  32. package/dist/behaviors/carousel.mjs +914 -12
  33. package/dist/behaviors/cascader.d.mts +48 -0
  34. package/dist/behaviors/cascader.mjs +1867 -0
  35. package/dist/behaviors/charts.d.mts +72 -8
  36. package/dist/behaviors/charts.mjs +1953 -272
  37. package/dist/behaviors/code-block.d.mts +36 -0
  38. package/dist/behaviors/code-block.mjs +1619 -0
  39. package/dist/behaviors/command-palette.d.mts +9 -6
  40. package/dist/behaviors/command-palette.mjs +164 -62
  41. package/dist/behaviors/context-menu.d.mts +10 -9
  42. package/dist/behaviors/context-menu.mjs +1113 -44
  43. package/dist/behaviors/controls.d.mts +21 -21
  44. package/dist/behaviors/controls.mjs +1024 -134
  45. package/dist/behaviors/copy.d.mts +21 -2
  46. package/dist/behaviors/copy.mjs +1207 -42
  47. package/dist/behaviors/datatable.d.mts +55 -5
  48. package/dist/behaviors/datatable.mjs +2033 -212
  49. package/dist/behaviors/date-picker.d.mts +0 -1
  50. package/dist/behaviors/date-picker.mjs +1341 -293
  51. package/dist/behaviors/design.d.mts +54 -0
  52. package/dist/behaviors/design.mjs +109 -0
  53. package/dist/behaviors/dropdown.d.mts +5 -6
  54. package/dist/behaviors/dropdown.mjs +262 -110
  55. package/dist/behaviors/events.d.mts +127 -10
  56. package/dist/behaviors/events.mjs +58 -3
  57. package/dist/behaviors/feedback.d.mts +30 -0
  58. package/dist/behaviors/feedback.mjs +296 -0
  59. package/dist/behaviors/focus.d.mts +8 -0
  60. package/dist/behaviors/focus.mjs +24 -0
  61. package/dist/behaviors/form-validate.d.mts +111 -0
  62. package/dist/behaviors/form-validate.mjs +1746 -0
  63. package/dist/behaviors/i18n.d.mts +790 -0
  64. package/dist/behaviors/i18n.mjs +1713 -0
  65. package/dist/behaviors/icons.d.mts +93 -0
  66. package/dist/behaviors/icons.mjs +113 -0
  67. package/dist/behaviors/input.d.mts +9 -1
  68. package/dist/behaviors/input.mjs +1059 -60
  69. package/dist/behaviors/kb-access.d.mts +3 -3
  70. package/dist/behaviors/kb-access.mjs +2135 -239
  71. package/dist/behaviors/kb-acl.d.mts +8 -8
  72. package/dist/behaviors/kb-acl.mjs +1120 -179
  73. package/dist/behaviors/kb-answer.d.mts +2 -2
  74. package/dist/behaviors/kb-answer.mjs +2120 -435
  75. package/dist/behaviors/kb-audit.d.mts +3 -3
  76. package/dist/behaviors/kb-audit.mjs +1077 -154
  77. package/dist/behaviors/kb-canvas.d.mts +3 -3
  78. package/dist/behaviors/kb-canvas.mjs +1101 -177
  79. package/dist/behaviors/kb-chain.d.mts +2 -2
  80. package/dist/behaviors/kb-chain.mjs +1023 -100
  81. package/dist/behaviors/kb-checkpoint.d.mts +3 -3
  82. package/dist/behaviors/kb-checkpoint.mjs +1320 -169
  83. package/dist/behaviors/kb-chunks.d.mts +2 -2
  84. package/dist/behaviors/kb-chunks.mjs +1153 -213
  85. package/dist/behaviors/kb-citation.d.mts +3 -3
  86. package/dist/behaviors/kb-citation.mjs +1221 -185
  87. package/dist/behaviors/kb-clarify.d.mts +2 -2
  88. package/dist/behaviors/kb-clarify.mjs +1059 -130
  89. package/dist/behaviors/kb-conflict.d.mts +2 -2
  90. package/dist/behaviors/kb-conflict.mjs +1042 -119
  91. package/dist/behaviors/kb-connector.d.mts +2 -2
  92. package/dist/behaviors/kb-connector.mjs +1105 -176
  93. package/dist/behaviors/kb-core.d.mts +7 -2
  94. package/dist/behaviors/kb-core.mjs +1078 -162
  95. package/dist/behaviors/kb-eval.d.mts +2 -2
  96. package/dist/behaviors/kb-eval.mjs +1977 -144
  97. package/dist/behaviors/kb-explain.d.mts +3 -3
  98. package/dist/behaviors/kb-explain.mjs +1037 -104
  99. package/dist/behaviors/kb-filter.d.mts +2 -2
  100. package/dist/behaviors/kb-filter.mjs +2014 -178
  101. package/dist/behaviors/kb-gap.d.mts +3 -3
  102. package/dist/behaviors/kb-gap.mjs +1044 -121
  103. package/dist/behaviors/kb-hittest.d.mts +3 -3
  104. package/dist/behaviors/kb-hittest.mjs +1095 -151
  105. package/dist/behaviors/kb-metadata.mjs +1058 -130
  106. package/dist/behaviors/kb-passage.d.mts +4 -4
  107. package/dist/behaviors/kb-passage.mjs +1102 -161
  108. package/dist/behaviors/kb-pipeline.d.mts +4 -4
  109. package/dist/behaviors/kb-pipeline.mjs +1083 -162
  110. package/dist/behaviors/kb-qa.mjs +1089 -160
  111. package/dist/behaviors/kb-rerank.d.mts +2 -2
  112. package/dist/behaviors/kb-rerank.mjs +1048 -114
  113. package/dist/behaviors/kb-retrieval.d.mts +2 -2
  114. package/dist/behaviors/kb-retrieval.mjs +2079 -226
  115. package/dist/behaviors/kb-review.d.mts +2 -2
  116. package/dist/behaviors/kb-review.mjs +1996 -159
  117. package/dist/behaviors/kb-sandbox.d.mts +3 -3
  118. package/dist/behaviors/kb-sandbox.mjs +1033 -105
  119. package/dist/behaviors/kb-segment.d.mts +2 -2
  120. package/dist/behaviors/kb-segment.mjs +1112 -179
  121. package/dist/behaviors/kb-select.d.mts +24 -0
  122. package/dist/behaviors/kb-select.mjs +1995 -0
  123. package/dist/behaviors/kb-sources.d.mts +3 -3
  124. package/dist/behaviors/kb-sources.mjs +1085 -170
  125. package/dist/behaviors/kb-sql.d.mts +3 -3
  126. package/dist/behaviors/kb-sql.mjs +1144 -226
  127. package/dist/behaviors/kb-trace.d.mts +3 -3
  128. package/dist/behaviors/kb-trace.mjs +1051 -131
  129. package/dist/behaviors/kb-visibility.d.mts +2 -2
  130. package/dist/behaviors/kb-visibility.mjs +1087 -158
  131. package/dist/behaviors/kb-who-can.d.mts +2 -2
  132. package/dist/behaviors/kb-who-can.mjs +1980 -137
  133. package/dist/behaviors/mentions.d.mts +93 -0
  134. package/dist/behaviors/mentions.mjs +2153 -0
  135. package/dist/behaviors/modal.d.mts +4 -3
  136. package/dist/behaviors/modal.mjs +1056 -33
  137. package/dist/behaviors/nav.d.mts +1 -1
  138. package/dist/behaviors/nav.mjs +6 -6
  139. package/dist/behaviors/notification.d.mts +16 -8
  140. package/dist/behaviors/notification.mjs +1629 -268
  141. package/dist/behaviors/panel.d.mts +4 -0
  142. package/dist/behaviors/panel.mjs +995 -0
  143. package/dist/behaviors/popover.d.mts +28 -5
  144. package/dist/behaviors/popover.mjs +225 -24
  145. package/dist/behaviors/scroll-area.d.mts +17 -0
  146. package/dist/behaviors/scroll-area.mjs +59 -0
  147. package/dist/behaviors/select.d.mts +5 -2
  148. package/dist/behaviors/select.mjs +1416 -117
  149. package/dist/behaviors/sidebar.d.mts +1 -1
  150. package/dist/behaviors/sidebar.mjs +13 -13
  151. package/dist/behaviors/slider.d.mts +1 -1
  152. package/dist/behaviors/slider.mjs +12 -12
  153. package/dist/behaviors/split-pane.d.mts +1 -1
  154. package/dist/behaviors/split-pane.mjs +9 -7
  155. package/dist/behaviors/suggestions.d.mts +27 -0
  156. package/dist/behaviors/suggestions.mjs +1090 -0
  157. package/dist/behaviors/svg-parse.d.mts +14 -0
  158. package/dist/behaviors/svg-parse.mjs +37 -0
  159. package/dist/behaviors/tabs.d.mts +2 -2
  160. package/dist/behaviors/tabs.mjs +35 -25
  161. package/dist/behaviors/tag-input.d.mts +23 -5
  162. package/dist/behaviors/tag-input.mjs +1360 -104
  163. package/dist/behaviors/theme-switcher.d.mts +24 -0
  164. package/dist/behaviors/theme-switcher.mjs +1996 -0
  165. package/dist/behaviors/theme.d.mts +15 -8
  166. package/dist/behaviors/theme.mjs +406 -30
  167. package/dist/behaviors/toast.d.mts +24 -25
  168. package/dist/behaviors/toast.mjs +1267 -88
  169. package/dist/behaviors/tooltip.d.mts +4 -0
  170. package/dist/behaviors/tooltip.mjs +378 -0
  171. package/dist/behaviors/tree-select.d.mts +69 -0
  172. package/dist/behaviors/tree-select.mjs +1921 -0
  173. package/dist/behaviors/tree.d.mts +1 -1
  174. package/dist/behaviors/tree.mjs +18 -18
  175. package/dist/behaviors/upload.d.mts +3 -2
  176. package/dist/behaviors/upload.mjs +1077 -66
  177. package/dist/behaviors/url-safety.d.mts +8 -0
  178. package/dist/behaviors/url-safety.mjs +11 -0
  179. package/dist/cli.mjs +5 -6
  180. package/dist/components/accordion.d.mts +2 -0
  181. package/dist/components/ai-branch.d.mts +2 -0
  182. package/dist/components/ai-chat.css +682 -582
  183. package/dist/components/ai-chat.d.mts +2 -0
  184. package/dist/components/ai-composer.d.mts +2 -0
  185. package/dist/components/ai-context.d.mts +2 -0
  186. package/dist/components/ai-context.mjs +1 -0
  187. package/dist/components/ai-diff.css +153 -132
  188. package/dist/components/ai-diff.d.mts +2 -0
  189. package/dist/components/ai-feedback.d.mts +2 -0
  190. package/dist/components/ai-files.d.mts +2 -0
  191. package/dist/components/ai-message.d.mts +2 -0
  192. package/dist/components/ai-panel.css +353 -343
  193. package/dist/components/ai-reasoning.d.mts +2 -0
  194. package/dist/components/ai-subagent.d.mts +2 -0
  195. package/dist/components/ai-subagent.mjs +1 -0
  196. package/dist/components/ai-threads.d.mts +2 -0
  197. package/dist/components/ai-todo.d.mts +2 -0
  198. package/dist/components/ai-todo.mjs +1 -0
  199. package/dist/components/ai-tool-call.d.mts +2 -0
  200. package/dist/components/ai-tool-call.mjs +1 -0
  201. package/dist/components/ai-tool.css +397 -242
  202. package/dist/components/ai-usage.d.mts +2 -0
  203. package/dist/components/alert.d.mts +2 -0
  204. package/dist/components/autocomplete.css +61 -0
  205. package/dist/components/autocomplete.d.mts +2 -0
  206. package/dist/components/autocomplete.mjs +3 -0
  207. package/dist/components/avatar.d.mts +2 -0
  208. package/dist/components/back-top.css +74 -40
  209. package/dist/components/back-top.d.mts +2 -0
  210. package/dist/components/badge.css +44 -41
  211. package/dist/components/badge.d.mts +2 -0
  212. package/dist/components/breadcrumb.css +85 -46
  213. package/dist/components/breadcrumb.d.mts +2 -0
  214. package/dist/components/btn.css +105 -94
  215. package/dist/components/btn.d.mts +2 -0
  216. package/dist/components/card.css +124 -113
  217. package/dist/components/card.d.mts +2 -0
  218. package/dist/components/carousel.d.mts +2 -0
  219. package/dist/components/cascader.css +332 -0
  220. package/dist/components/cascader.d.mts +2 -0
  221. package/dist/components/cascader.mjs +3 -0
  222. package/dist/components/chart-area.css +54 -2
  223. package/dist/components/chart-area.d.mts +2 -0
  224. package/dist/components/chart-bar.css +147 -38
  225. package/dist/components/chart-bar.d.mts +2 -0
  226. package/dist/components/chart-calendar.d.mts +2 -0
  227. package/dist/components/chart-gauge.css +36 -13
  228. package/dist/components/chart-gauge.d.mts +2 -0
  229. package/dist/components/chart-graph.css +35 -20
  230. package/dist/components/chart-graph.d.mts +2 -0
  231. package/dist/components/chart-heatmap.css +67 -39
  232. package/dist/components/chart-heatmap.d.mts +2 -0
  233. package/dist/components/chart-line.css +62 -3
  234. package/dist/components/chart-line.d.mts +2 -0
  235. package/dist/components/chart-map.d.mts +2 -0
  236. package/dist/components/chart-pie.css +38 -6
  237. package/dist/components/chart-pie.d.mts +2 -0
  238. package/dist/components/chart-radar.css +57 -5
  239. package/dist/components/chart-radar.d.mts +2 -0
  240. package/dist/components/chart-scatter.css +47 -7
  241. package/dist/components/chart-scatter.d.mts +2 -0
  242. package/dist/components/chart-sparkline.css +25 -2
  243. package/dist/components/chart-sparkline.d.mts +2 -0
  244. package/dist/components/chart-stack.css +27 -13
  245. package/dist/components/chart-stack.d.mts +2 -0
  246. package/dist/components/charts.css +220 -84
  247. package/dist/components/charts.d.mts +2 -0
  248. package/dist/components/code-block.css +420 -0
  249. package/dist/components/code-block.d.mts +2 -0
  250. package/dist/components/code-block.mjs +4 -0
  251. package/dist/components/command-palette.css +150 -122
  252. package/dist/components/command-palette.d.mts +2 -0
  253. package/dist/components/content.css +274 -263
  254. package/dist/components/context-menu.d.mts +2 -0
  255. package/dist/components/copy.css +73 -45
  256. package/dist/components/copy.d.mts +2 -0
  257. package/dist/components/datatable.css +457 -202
  258. package/dist/components/datatable.d.mts +2 -0
  259. package/dist/components/date-picker.css +136 -105
  260. package/dist/components/date-picker.d.mts +2 -0
  261. package/dist/components/desc.d.mts +2 -0
  262. package/dist/components/dropdown.d.mts +2 -0
  263. package/dist/components/empty.css +72 -69
  264. package/dist/components/empty.d.mts +2 -0
  265. package/dist/components/feedback.css +211 -191
  266. package/dist/components/form-validate.css +134 -0
  267. package/dist/components/form-validate.d.mts +2 -0
  268. package/dist/components/form-validate.mjs +3 -0
  269. package/dist/components/form.css +157 -131
  270. package/dist/components/form.d.mts +2 -0
  271. package/dist/components/icon.css +113 -0
  272. package/dist/components/icon.d.mts +2 -0
  273. package/dist/components/icon.mjs +3 -0
  274. package/dist/components/input.css +163 -108
  275. package/dist/components/input.d.mts +2 -0
  276. package/dist/components/kb-access.d.mts +2 -0
  277. package/dist/components/kb-acl.d.mts +2 -0
  278. package/dist/components/kb-agent.css +300 -206
  279. package/dist/components/kb-answer.d.mts +2 -0
  280. package/dist/components/kb-audit.d.mts +2 -0
  281. package/dist/components/kb-canvas.d.mts +2 -0
  282. package/dist/components/kb-chain.d.mts +2 -0
  283. package/dist/components/kb-checkpoint.d.mts +2 -0
  284. package/dist/components/kb-chunks.d.mts +2 -0
  285. package/dist/components/kb-citation.d.mts +2 -0
  286. package/dist/components/kb-clarify.d.mts +2 -0
  287. package/dist/components/kb-conflict.d.mts +2 -0
  288. package/dist/components/kb-connector.d.mts +2 -0
  289. package/dist/components/kb-data.css +431 -315
  290. package/dist/components/kb-eval.d.mts +2 -0
  291. package/dist/components/kb-explain.d.mts +2 -0
  292. package/dist/components/kb-filter.d.mts +2 -0
  293. package/dist/components/kb-gap.d.mts +2 -0
  294. package/dist/components/kb-ground.css +333 -229
  295. package/dist/components/kb-hittest.d.mts +2 -0
  296. package/dist/components/kb-ingest.css +613 -434
  297. package/dist/components/kb-metadata.d.mts +2 -0
  298. package/dist/components/kb-ops.css +422 -302
  299. package/dist/components/kb-passage.d.mts +2 -0
  300. package/dist/components/kb-perm.css +374 -314
  301. package/dist/components/kb-pipeline.d.mts +2 -0
  302. package/dist/components/kb-qa.d.mts +2 -0
  303. package/dist/components/kb-rerank.d.mts +2 -0
  304. package/dist/components/kb-retrieval.d.mts +2 -0
  305. package/dist/components/kb-review.d.mts +2 -0
  306. package/dist/components/kb-sandbox.d.mts +2 -0
  307. package/dist/components/kb-search.css +653 -459
  308. package/dist/components/kb-segment.d.mts +2 -0
  309. package/dist/components/kb-sources.d.mts +2 -0
  310. package/dist/components/kb-sql.d.mts +2 -0
  311. package/dist/components/kb-trace.d.mts +2 -0
  312. package/dist/components/kb-visibility.d.mts +2 -0
  313. package/dist/components/kb-who-can.d.mts +2 -0
  314. package/dist/components/kb.css +170 -135
  315. package/dist/components/kb.d.mts +2 -0
  316. package/dist/components/kbd.d.mts +2 -0
  317. package/dist/components/layout.css +86 -83
  318. package/dist/components/layout.d.mts +2 -0
  319. package/dist/components/list.d.mts +2 -0
  320. package/dist/components/material-chinese.css +83 -0
  321. package/dist/components/material-soviet.css +86 -0
  322. package/dist/components/material.css +318 -0
  323. package/dist/components/media-card.d.mts +2 -0
  324. package/dist/components/media.css +225 -176
  325. package/dist/components/mentions.css +190 -0
  326. package/dist/components/mentions.d.mts +2 -0
  327. package/dist/components/mentions.mjs +3 -0
  328. package/dist/components/menu.css +121 -109
  329. package/dist/components/modal.css +116 -118
  330. package/dist/components/modal.d.mts +2 -0
  331. package/dist/components/nav.css +136 -129
  332. package/dist/components/nav.d.mts +2 -0
  333. package/dist/components/notification.css +247 -177
  334. package/dist/components/notification.d.mts +2 -0
  335. package/dist/components/pagination.css +62 -57
  336. package/dist/components/pagination.d.mts +2 -0
  337. package/dist/components/panel.css +70 -68
  338. package/dist/components/panel.d.mts +2 -0
  339. package/dist/components/panel.mjs +1 -0
  340. package/dist/components/pill.css +83 -72
  341. package/dist/components/pill.d.mts +2 -0
  342. package/dist/components/popover.css +80 -57
  343. package/dist/components/popover.d.mts +2 -0
  344. package/dist/components/progress.d.mts +2 -0
  345. package/dist/components/rating.d.mts +2 -0
  346. package/dist/components/result.d.mts +2 -0
  347. package/dist/components/scroll-area.css +29 -54
  348. package/dist/components/scroll-area.d.mts +2 -0
  349. package/dist/components/scroll-area.mjs +1 -0
  350. package/dist/components/segmented.css +167 -146
  351. package/dist/components/segmented.d.mts +2 -0
  352. package/dist/components/select.css +250 -191
  353. package/dist/components/select.d.mts +2 -0
  354. package/dist/components/sidebar.css +157 -143
  355. package/dist/components/sidebar.d.mts +2 -0
  356. package/dist/components/skeleton.d.mts +2 -0
  357. package/dist/components/slider.css +135 -128
  358. package/dist/components/slider.d.mts +2 -0
  359. package/dist/components/spinner.d.mts +2 -0
  360. package/dist/components/split-pane.css +120 -108
  361. package/dist/components/split-pane.d.mts +2 -0
  362. package/dist/components/stat.css +116 -109
  363. package/dist/components/stat.d.mts +2 -0
  364. package/dist/components/steps.css +114 -108
  365. package/dist/components/steps.d.mts +2 -0
  366. package/dist/components/switch.css +192 -149
  367. package/dist/components/switch.d.mts +2 -0
  368. package/dist/components/table.css +158 -112
  369. package/dist/components/table.d.mts +2 -0
  370. package/dist/components/tabs.css +143 -116
  371. package/dist/components/tabs.d.mts +2 -0
  372. package/dist/components/tag-input.css +52 -133
  373. package/dist/components/tag-input.d.mts +2 -0
  374. package/dist/components/tag.css +90 -72
  375. package/dist/components/tag.d.mts +2 -0
  376. package/dist/components/theme-switcher.css +105 -0
  377. package/dist/components/theme-switcher.d.mts +2 -0
  378. package/dist/components/theme-switcher.mjs +3 -0
  379. package/dist/components/timeline.d.mts +2 -0
  380. package/dist/components/toast.css +115 -97
  381. package/dist/components/toast.d.mts +2 -0
  382. package/dist/components/toolbar.css +47 -43
  383. package/dist/components/toolbar.d.mts +2 -0
  384. package/dist/components/tooltip.css +103 -43
  385. package/dist/components/tooltip.d.mts +2 -0
  386. package/dist/components/tooltip.mjs +1 -0
  387. package/dist/components/tree-select.css +439 -0
  388. package/dist/components/tree-select.d.mts +2 -0
  389. package/dist/components/tree-select.mjs +3 -0
  390. package/dist/components/tree.d.mts +2 -0
  391. package/dist/components/upload.css +138 -97
  392. package/dist/components/upload.d.mts +2 -0
  393. package/dist/fonts/LICENSES/ark-pixel/OFL.txt +96 -0
  394. package/dist/fonts/LICENSES/cubic-11/OFL.txt +108 -0
  395. package/dist/fonts/LICENSES/galmuri/LICENSE.txt +93 -0
  396. package/dist/fonts/OFL.txt +96 -0
  397. package/dist/fonts/README.md +14 -0
  398. package/dist/fonts/fusion-pixel-12px-zh-hans.woff2 +0 -0
  399. package/dist/index.d.mts +85 -70
  400. package/dist/index.mjs +17330 -5773
  401. package/dist/react.d.mts +91 -0
  402. package/dist/react.mjs +8307 -0
  403. package/dist/registry.json +918 -70
  404. package/dist/tokens/chinese.css +44 -0
  405. package/dist/tokens/colors.css +371 -1222
  406. package/dist/tokens/design.css +209 -0
  407. package/dist/tokens/dtcg.json +15926 -0
  408. package/dist/tokens/figma.variables.json +10779 -0
  409. package/dist/tokens/icon-masks.css +78 -0
  410. package/dist/tokens/pixel.css +53 -0
  411. package/dist/tokens/scrollbars.css +40 -0
  412. package/dist/tokens/soviet.css +44 -0
  413. package/dist/tokens/style-profiles.css +36 -547
  414. package/dist/tokens/themes.json +308 -0
  415. package/dist/tokens/tokens-studio.json +11648 -0
  416. package/dist/tokens/typography.css +21 -18
  417. package/dist/tokens.css +1783 -1806
  418. package/dist/ui.css +14796 -10750
  419. package/dist/vue.d.mts +344 -0
  420. package/dist/vue.mjs +7876 -0
  421. package/docs/spec/ai-input-experience.md +75 -0
  422. package/docs/spec/ai-native.md +238 -147
  423. package/docs/spec/design-philosophy.md +189 -0
  424. package/docs/spec/design-primitives.md +196 -0
  425. package/docs/spec/kb-family.md +147 -115
  426. package/docs/spec/scrollbars.md +46 -0
  427. package/package.json +56 -8
  428. package/dist/retro-effects.css +0 -255
  429. package/dist/tokens/retro-effects.css +0 -255
  430. package/docs/research/2026-10-03-ai-kb-components.md +0 -392
  431. package/docs/research/2026-10-03-kb-permissions.md +0 -992
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @icen.ai/ui — 内联 SVG 字符串 → 消毒 SVGElement(全库单点,ai-core.svgIcon / notification / toast /
3
+ * back-top / charts 全部经此)。SSR 安全:无 document/DOMParser 返回 null。
4
+ *
5
+ * 纪律:
6
+ * - 缺 xmlns 自动补——image/svg+xml 是 XML 严格解析,无 xmlns 的 <svg> 落在空命名空间,
7
+ * 浏览器一律不渲染(图标作者按 HTML 习惯常省 xmlns,曾致库内 19 处图标存量隐身);
8
+ * - 消毒:剥全部 on* 事件属性、剔除 script/foreignObject 子树、剔除 javascript: 协议的
9
+ * href/xlink:href(纵深防御);
10
+ * - 只接纳 <svg> 根元素,解析失败/含 parsererror 返回 null(不猜不兜底)。
11
+ */
12
+ declare function parseSvg(source: string): SVGElement | null;
13
+
14
+ export { parseSvg };
@@ -0,0 +1,37 @@
1
+ // src/behaviors/svg-parse.ts
2
+ function parseSvg(source) {
3
+ if (typeof document === "undefined" || typeof DOMParser === "undefined") return null;
4
+ const trimmed = source.trimStart();
5
+ if (!trimmed.startsWith("<svg")) return null;
6
+ const src = /^<svg(?![^>]*\bxmlns[=:])/i.test(trimmed) ? trimmed.replace(/^<svg/i, '<svg xmlns="http://www.w3.org/2000/svg"') : trimmed;
7
+ let parsed;
8
+ try {
9
+ parsed = new DOMParser().parseFromString(src, "image/svg+xml");
10
+ } catch {
11
+ return null;
12
+ }
13
+ const root = parsed.documentElement;
14
+ if (!root || root.tagName.toLowerCase() !== "svg" || parsed.querySelector("parsererror")) return null;
15
+ const sanitize = (el) => {
16
+ for (const attr of Array.from(el.attributes)) {
17
+ const name = attr.name.toLowerCase();
18
+ if (name.startsWith("on")) el.removeAttribute(attr.name);
19
+ if ((name === "href" || name === "xlink:href") && attr.value.trim().toLowerCase().startsWith("javascript:")) {
20
+ el.removeAttribute(attr.name);
21
+ }
22
+ }
23
+ for (const child of Array.from(el.children)) {
24
+ const tag = child.tagName.toLowerCase();
25
+ if (tag === "script" || tag === "foreignobject") {
26
+ child.remove();
27
+ continue;
28
+ }
29
+ sanitize(child);
30
+ }
31
+ };
32
+ sanitize(root);
33
+ return document.importNode(root, true);
34
+ }
35
+ export {
36
+ parseSvg
37
+ };
@@ -1,7 +1,7 @@
1
1
  /**
2
- * 为 root 下每个 [data-tabs] 容器初始化(root 自身是 [data-tabs] 也算)。
2
+ * 为 root 下每个 [data-icen-tabs] 容器初始化(root 自身是 [data-icen-tabs] 也算)。
3
3
  * 返回销毁函数:调用后移除所有容器监听、window hashchange/resize 监听与行为层创建的
4
- * .tabs-ink 元素,并复位幂等标记(销毁后的容器可被再次 initTabs 重新接管)。
4
+ * .icen-tabs-ink 元素,并复位幂等标记(销毁后的容器可被再次 initTabs 重新接管)。
5
5
  * SSR 下返回 no-op 函数。
6
6
  */
7
7
  declare function initTabs(root?: ParentNode): () => void;
@@ -7,33 +7,40 @@ function emitIcen(source, type, detail) {
7
7
 
8
8
  // src/behaviors/tabs.ts
9
9
  function tabButtons(container) {
10
- return Array.from(container.querySelectorAll("[data-tab]"));
10
+ return Array.from(container.querySelectorAll("[data-icen-tab]"));
11
11
  }
12
12
  function tabNames(container) {
13
- return tabButtons(container).map((t) => t.getAttribute("data-tab")).filter((n) => n !== null);
13
+ return tabButtons(container).map((t) => t.getAttribute("data-icen-tab")).filter((n) => n !== null);
14
14
  }
15
15
  function currentHash() {
16
16
  return window.location.hash.replace(/^#/, "");
17
17
  }
18
18
  function hashWriteMethod(container) {
19
- const raw = container.getAttribute("data-tabs-hash");
19
+ const raw = container.getAttribute("data-icen-tabs-hash");
20
20
  if (raw === null || raw === "false") return null;
21
21
  return raw === "push" ? "push" : "replace";
22
22
  }
23
23
  function syncInk(container, name) {
24
- const btn = tabButtons(container).find((b) => b.getAttribute("data-tab") === name);
24
+ const btn = tabButtons(container).find((b) => b.getAttribute("data-icen-tab") === name);
25
25
  const tablist = btn?.parentElement;
26
26
  if (!btn || !tablist) return;
27
- const ink = tablist.querySelector(":scope > .tabs-ink");
27
+ const ink = tablist.querySelector(":scope > .icen-tabs-ink");
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);
34
41
  let matched = false;
35
42
  buttons.forEach((t) => {
36
- const on = t.getAttribute("data-tab") === name;
43
+ const on = t.getAttribute("data-icen-tab") === name;
37
44
  if (on) matched = true;
38
45
  t.classList.toggle("is-active", on);
39
46
  t.setAttribute("aria-selected", String(on));
@@ -41,13 +48,13 @@ function activate(container, name, writeHash, emit = false) {
41
48
  });
42
49
  if (!matched) return;
43
50
  let panel = null;
44
- container.querySelectorAll("[data-tab-panel]").forEach((p) => {
45
- const isOn = p.getAttribute("data-tab-panel") === name;
51
+ container.querySelectorAll("[data-icen-tab-panel]").forEach((p) => {
52
+ const isOn = p.getAttribute("data-icen-tab-panel") === name;
46
53
  p.hidden = !isOn;
47
54
  if (isOn) {
48
55
  panel = p;
49
56
  if (!p.getAttribute("aria-labelledby")) {
50
- const btn = buttons.find((b) => b.getAttribute("data-tab") === name);
57
+ const btn = buttons.find((b) => b.getAttribute("data-icen-tab") === name);
51
58
  if (btn?.id) p.setAttribute("aria-labelledby", btn.id);
52
59
  }
53
60
  }
@@ -58,7 +65,7 @@ function activate(container, name, writeHash, emit = false) {
58
65
  }
59
66
  syncInk(container, name);
60
67
  if (emit) {
61
- const index = buttons.findIndex((b) => b.getAttribute("data-tab") === name);
68
+ const index = buttons.findIndex((b) => b.getAttribute("data-icen-tab") === name);
62
69
  const tab = buttons[index] ?? null;
63
70
  emitIcen(container, "icen:tab-change", { tab, panel, index });
64
71
  }
@@ -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) {
@@ -86,7 +96,7 @@ function setup(container) {
86
96
  const el = container;
87
97
  if (el.__icenTabsInit) return void 0;
88
98
  const useHash = hashWriteMethod(container) !== null;
89
- const autoActivate = container.getAttribute("data-tabs-activation") === "auto";
99
+ const autoActivate = container.getAttribute("data-icen-tabs-activation") === "auto";
90
100
  const names = tabNames(container);
91
101
  if (names.length === 0) return;
92
102
  el.__icenTabsInit = true;
@@ -98,11 +108,11 @@ function setup(container) {
98
108
  const tablist = buttons[0]?.parentElement;
99
109
  if (tablist && !tablist.getAttribute("role")) tablist.setAttribute("role", "tablist");
100
110
  let ink = null;
101
- if (tablist instanceof HTMLElement && tablist.hasAttribute("data-tabs-ink")) {
111
+ if (tablist instanceof HTMLElement && tablist.hasAttribute("data-icen-tabs-ink")) {
102
112
  ink = document.createElement("div");
103
- ink.className = "tabs-ink";
113
+ ink.className = "icen-tabs-ink";
104
114
  ink.setAttribute("aria-hidden", "true");
105
- const initialBtn = buttons.find((b) => b.classList.contains("is-active")) ?? buttons.find((b) => b.getAttribute("data-tab") === names[0]);
115
+ const initialBtn = buttons.find((b) => b.classList.contains("is-active")) ?? buttons.find((b) => b.getAttribute("data-icen-tab") === names[0]);
106
116
  if (initialBtn) {
107
117
  ink.style.width = `${initialBtn.offsetWidth}px`;
108
118
  ink.style.transform = `translateX(${initialBtn.offsetLeft}px)`;
@@ -112,10 +122,10 @@ function setup(container) {
112
122
  const onClick = (ev) => {
113
123
  const target = ev.target;
114
124
  if (!(target instanceof Element)) return;
115
- const btn = target.closest("[data-tab]");
116
- if (!btn || btn.closest("[data-tabs]") !== container) return;
125
+ const btn = target.closest("[data-icen-tab]");
126
+ if (!btn || btn.closest("[data-icen-tabs]") !== container) return;
117
127
  if (btn instanceof HTMLElement && isDisabled(btn)) return;
118
- const name = btn.getAttribute("data-tab");
128
+ const name = btn.getAttribute("data-icen-tab");
119
129
  if (name) activate(container, name, useHash, true);
120
130
  };
121
131
  const followFocus = (idx) => {
@@ -123,15 +133,15 @@ function setup(container) {
123
133
  if (!autoActivate) return;
124
134
  const target = tabButtons(container)[idx];
125
135
  if (!target || isDisabled(target)) return;
126
- const name = target.getAttribute("data-tab");
136
+ const name = target.getAttribute("data-icen-tab");
127
137
  if (name) activate(container, name, useHash, true);
128
138
  };
129
139
  const onKeyDown = (ev) => {
130
140
  const kev = ev;
131
141
  const target = kev.target;
132
142
  if (!(target instanceof Element)) return;
133
- const btn = target.closest("[data-tab]");
134
- if (!btn || btn.closest("[data-tabs]") !== container) return;
143
+ const btn = target.closest("[data-icen-tab]");
144
+ if (!btn || btn.closest("[data-icen-tabs]") !== container) return;
135
145
  const buttonsList = tabButtons(container);
136
146
  const currentIdx = buttonsList.indexOf(btn);
137
147
  if (currentIdx === -1) return;
@@ -162,7 +172,7 @@ function setup(container) {
162
172
  case " ": {
163
173
  if (btn instanceof HTMLElement && !isDisabled(btn)) {
164
174
  kev.preventDefault();
165
- const name = btn.getAttribute("data-tab");
175
+ const name = btn.getAttribute("data-icen-tab");
166
176
  if (name) activate(container, name, useHash, true);
167
177
  }
168
178
  break;
@@ -176,7 +186,7 @@ function setup(container) {
176
186
  const h = currentHash();
177
187
  if (names.includes(h)) initial = h;
178
188
  } else {
179
- const n = container.querySelector("[data-tab].is-active")?.getAttribute("data-tab");
189
+ const n = container.querySelector("[data-icen-tab].is-active")?.getAttribute("data-icen-tab");
180
190
  if (n && names.includes(n)) initial = n;
181
191
  }
182
192
  activate(container, initial ?? names[0], false);
@@ -189,7 +199,7 @@ function setup(container) {
189
199
  }
190
200
  const onResize = () => {
191
201
  const active = tabButtons(container).find((b) => b.classList.contains("is-active"));
192
- const name = active?.getAttribute("data-tab");
202
+ const name = active?.getAttribute("data-icen-tab");
193
203
  if (name) syncInk(container, name);
194
204
  };
195
205
  if (ink && typeof window !== "undefined") {
@@ -213,8 +223,8 @@ function initTabs(root) {
213
223
  if (typeof document !== "undefined") {
214
224
  const scope = root ?? document;
215
225
  const containers = [];
216
- if (scope instanceof Element && scope.matches("[data-tabs]")) containers.push(scope);
217
- containers.push(...Array.from(scope.querySelectorAll("[data-tabs]")));
226
+ if (scope instanceof Element && scope.matches("[data-icen-tabs]")) containers.push(scope);
227
+ containers.push(...Array.from(scope.querySelectorAll("[data-icen-tabs]")));
218
228
  for (const c of containers) {
219
229
  const cleanup = setup(c);
220
230
  if (cleanup) cleanups.push(cleanup);
@@ -1,7 +1,25 @@
1
- /**
2
- * 为 root 下每个 .tag-input 容器初始化(root 自身匹配也算;data-tags 为可选初始值配置)。
3
- * 返回销毁函数:移除本次挂上的全部监听并复位幂等标记(销毁后可重新 init)。SSR 下返回 no-op。
4
- */
1
+ interface TagInputOptions {
2
+ value?: string[];
3
+ max?: number;
4
+ allowDuplicates?: boolean;
5
+ disabled?: boolean;
6
+ readOnly?: boolean;
7
+ /** Repeated native form entries, one per committed tag. Defaults to input.name. */
8
+ name?: string;
9
+ }
10
+ interface TagInputHandle {
11
+ getValue(): string[];
12
+ setValue(value: string[], options?: {
13
+ emit?: boolean;
14
+ }): void;
15
+ update(options: Omit<TagInputOptions, 'value'>): void;
16
+ focus(): void;
17
+ destroy(): void;
18
+ }
19
+ /** Explicit lifecycle handle; repeated creation reuses the editor and updates options. */
20
+ declare function createTagInput(root: HTMLElement, options?: TagInputOptions): TagInputHandle;
21
+ /** Dynamic scoped initialization. Overlapping scopes share each editor and only
22
+ * the last scope disposes it; an explicit createTagInput handle owns its lifecycle. */
5
23
  declare function initTagInput(root?: ParentNode): () => void;
6
24
 
7
- export { initTagInput };
25
+ export { type TagInputHandle, type TagInputOptions, createTagInput, initTagInput };