@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,4 @@
1
+ /** 事件委托接入一个作用域(缺省 document,动态插入同样生效)。 */
2
+ declare function initTooltip(root?: ParentNode): () => void;
3
+
4
+ export { initTooltip };
@@ -0,0 +1,378 @@
1
+ // src/behaviors/popover.ts
2
+ var DEFAULT_MIN_WIDTH = 220;
3
+ var DEFAULT_MAX_WIDTH = 420;
4
+ var DEFAULT_MIN_HEIGHT = 120;
5
+ var DEFAULT_MAX_HEIGHT = 420;
6
+ function clamp(value, min, max) {
7
+ if (max < min) return min;
8
+ return Math.min(max, Math.max(min, value));
9
+ }
10
+ function chooseSide(preferredSide, availableTop, availableBottom, desiredHeight) {
11
+ const preferredSpace = preferredSide === "top" ? availableTop : availableBottom;
12
+ const oppositeSpace = preferredSide === "top" ? availableBottom : availableTop;
13
+ if (preferredSpace >= desiredHeight) return preferredSide;
14
+ if (oppositeSpace >= desiredHeight) return preferredSide === "top" ? "bottom" : "top";
15
+ if (preferredSpace >= oppositeSpace) return preferredSide;
16
+ return preferredSide === "top" ? "bottom" : "top";
17
+ }
18
+ function horizontalAnchor(anchor, width, align) {
19
+ if (align === "center") return anchor.left + anchor.width / 2 - width / 2;
20
+ if (align === "end") return anchor.right - width;
21
+ return anchor.left;
22
+ }
23
+ function computePopoverLayout(anchor, viewport, opts = {}) {
24
+ const margin = opts.margin ?? 12;
25
+ const offset = opts.offset ?? 8;
26
+ const preferredSide = opts.side ?? "top";
27
+ const align = opts.align ?? "start";
28
+ if (preferredSide === "left" || preferredSide === "right") {
29
+ const minWidth2 = Math.max(1, opts.minWidth ?? DEFAULT_MIN_WIDTH);
30
+ const availableLeft = Math.max(0, anchor.left - margin - offset);
31
+ const availableRight = Math.max(0, viewport.width - anchor.right - margin - offset);
32
+ const side2 = (preferredSide === "left" ? availableLeft : availableRight) >= minWidth2 ? preferredSide : preferredSide === "left" ? "right" : "left";
33
+ const maxWidth2 = Math.min(
34
+ Math.max(opts.maxWidth ?? DEFAULT_MAX_WIDTH, minWidth2),
35
+ side2 === "left" ? availableLeft : availableRight
36
+ );
37
+ const width2 = minWidth2;
38
+ const left2 = clamp(
39
+ side2 === "left" ? anchor.left - offset - width2 : anchor.right + offset,
40
+ margin,
41
+ viewport.width - margin - width2
42
+ );
43
+ const availableHeight2 = Math.max(80, viewport.height - margin * 2);
44
+ const maxHeight2 = Math.min(opts.maxHeight ?? DEFAULT_MAX_HEIGHT, availableHeight2);
45
+ const desired = clamp(opts.contentHeightHint ?? Math.min(anchor.height, maxHeight2), 40, maxHeight2);
46
+ const anchorTop = align === "center" ? anchor.top + anchor.height / 2 - desired / 2 : align === "end" ? anchor.bottom - desired : anchor.top;
47
+ const top2 = clamp(anchorTop, margin, viewport.height - margin - desired);
48
+ return { side: side2, left: left2, top: top2, width: width2, maxHeight: maxHeight2 };
49
+ }
50
+ const availableWidth = Math.max(80, viewport.width - margin * 2);
51
+ const requestedMinWidth = Math.max(1, opts.minWidth ?? DEFAULT_MIN_WIDTH);
52
+ const requestedMaxWidth = Math.max(requestedMinWidth, opts.maxWidth ?? DEFAULT_MAX_WIDTH);
53
+ const maxWidth = Math.min(requestedMaxWidth, availableWidth);
54
+ const minWidth = Math.min(requestedMinWidth, maxWidth);
55
+ const availableTop = Math.max(0, anchor.top - margin - offset);
56
+ const availableBottom = Math.max(0, viewport.height - anchor.bottom - margin - offset);
57
+ const availableHeight = Math.max(80, viewport.height - margin * 2);
58
+ const minHeight = Math.min(Math.max(80, opts.minHeight ?? DEFAULT_MIN_HEIGHT), availableHeight);
59
+ const requestedMaxHeight = Math.max(minHeight, opts.maxHeight ?? DEFAULT_MAX_HEIGHT);
60
+ const fallbackHeight = Math.min(260, requestedMaxHeight);
61
+ const contentHeight = opts.contentHeightHint != null && opts.contentHeightHint > 0 ? opts.contentHeightHint : fallbackHeight;
62
+ const desiredHeight = clamp(contentHeight, minHeight, Math.min(requestedMaxHeight, availableHeight));
63
+ const side = chooseSide(preferredSide, availableTop, availableBottom, desiredHeight);
64
+ const sideSpace = side === "top" ? availableTop : availableBottom;
65
+ const maxHeight = Math.min(
66
+ requestedMaxHeight,
67
+ Math.max(80, sideSpace || Math.max(availableTop, availableBottom)),
68
+ availableHeight
69
+ );
70
+ const positionedHeight = clamp(desiredHeight, 40, maxHeight);
71
+ const width = align === "stretch" ? clamp(anchor.width, minWidth, maxWidth) : maxWidth;
72
+ const left = clamp(horizontalAnchor(anchor, width, align), margin, viewport.width - margin - width);
73
+ const desiredTop = side === "top" ? anchor.top - offset - positionedHeight : anchor.bottom + offset;
74
+ const top = clamp(desiredTop, margin, viewport.height - margin - positionedHeight);
75
+ return { side, left, top, width, maxHeight };
76
+ }
77
+
78
+ // src/behaviors/tooltip.ts
79
+ var HOVER_DELAY_MS = 400;
80
+ var LEAVE_TIMEOUT_MS = 240;
81
+ var POINTER_LEAVE_DELAY_MS = 80;
82
+ var OFFSET_PX = 6;
83
+ var VIEWPORT_MARGIN_PX = 8;
84
+ var WATCHED_ATTRS = ["data-icen-tooltip", "data-icen-tooltip-side", "data-icen-tooltip-align", "data-icen-tooltip-multiline"];
85
+ var scopes = /* @__PURE__ */ new WeakMap();
86
+ var handled = /* @__PURE__ */ new WeakSet();
87
+ var bubble = null;
88
+ var current = null;
89
+ var dismissed = /* @__PURE__ */ new Set();
90
+ var triggerOwners = /* @__PURE__ */ new WeakMap();
91
+ var closeTimer = null;
92
+ var pending = null;
93
+ var leaving = null;
94
+ var observer = null;
95
+ var sequence = 0;
96
+ function textOf(trigger) {
97
+ return trigger.getAttribute("data-icen-tooltip")?.trim() ?? "";
98
+ }
99
+ function sideOf(trigger) {
100
+ const side = trigger.getAttribute("data-icen-tooltip-side");
101
+ return side === "bottom" || side === "left" || side === "right" ? side : "top";
102
+ }
103
+ function alignOf(trigger) {
104
+ const align = trigger.getAttribute("data-icen-tooltip-align");
105
+ return align === "start" || align === "end" ? align : "center";
106
+ }
107
+ function focusVisible(el) {
108
+ try {
109
+ return el.matches(":focus-visible");
110
+ } catch {
111
+ return true;
112
+ }
113
+ }
114
+ function triggerFrom(target) {
115
+ return target instanceof Element ? target.closest("[data-icen-tooltip]") : null;
116
+ }
117
+ function cancelPending() {
118
+ if (!pending) return;
119
+ window.clearTimeout(pending.timer);
120
+ pending.trigger.removeAttribute("data-icen-tooltip-live");
121
+ pending = null;
122
+ }
123
+ function cancelLeaving() {
124
+ if (!leaving) return;
125
+ window.clearTimeout(leaving.timer);
126
+ leaving.node.classList.add("is-open");
127
+ leaving = null;
128
+ }
129
+ function release(trigger) {
130
+ trigger.removeAttribute("data-icen-tooltip-live");
131
+ const tokens = (trigger.getAttribute("aria-describedby") ?? "").split(/\s+/).filter((id) => id && id !== bubble?.id);
132
+ if (tokens.length) trigger.setAttribute("aria-describedby", tokens.join(" "));
133
+ else trigger.removeAttribute("aria-describedby");
134
+ }
135
+ function cancelClose() {
136
+ if (closeTimer !== null) window.clearTimeout(closeTimer);
137
+ closeTimer = null;
138
+ }
139
+ function clearDismissed(trigger) {
140
+ if (!dismissed.delete(trigger)) return;
141
+ if (current !== trigger && pending?.trigger !== trigger) trigger.removeAttribute("data-icen-tooltip-live");
142
+ }
143
+ function scheduleClose() {
144
+ cancelClose();
145
+ closeTimer = window.setTimeout(() => {
146
+ closeTimer = null;
147
+ if (current && document.activeElement !== current) hide(current);
148
+ }, POINTER_LEAVE_DELAY_MS);
149
+ }
150
+ function unwatch() {
151
+ window.removeEventListener("scroll", onViewportScroll, true);
152
+ window.removeEventListener("resize", onViewportResize);
153
+ observer?.disconnect();
154
+ observer = null;
155
+ }
156
+ function removeBubble(node) {
157
+ node.remove();
158
+ if (bubble === node) bubble = null;
159
+ }
160
+ function hide(trigger, opts) {
161
+ cancelClose();
162
+ const waiting = pending?.trigger;
163
+ cancelPending();
164
+ if (waiting && opts?.suppressFallback) {
165
+ dismissed.add(waiting);
166
+ waiting.setAttribute("data-icen-tooltip-live", "");
167
+ }
168
+ const active = current;
169
+ if (!active || trigger && active !== trigger) return;
170
+ current = null;
171
+ release(active);
172
+ if (opts?.suppressFallback) {
173
+ dismissed.add(active);
174
+ active.setAttribute("data-icen-tooltip-live", "");
175
+ }
176
+ unwatch();
177
+ if (!bubble) return;
178
+ const node = bubble;
179
+ if (opts?.instant) {
180
+ cancelLeaving();
181
+ removeBubble(node);
182
+ return;
183
+ }
184
+ node.classList.remove("is-open");
185
+ leaving = {
186
+ node,
187
+ timer: window.setTimeout(() => {
188
+ if (leaving?.node === node) leaving = null;
189
+ removeBubble(node);
190
+ }, LEAVE_TIMEOUT_MS)
191
+ };
192
+ }
193
+ function layout() {
194
+ if (!current || !bubble) return;
195
+ const anchor = current.getBoundingClientRect();
196
+ const width = bubble.offsetWidth;
197
+ const height = bubble.offsetHeight;
198
+ const out = computePopoverLayout(anchor, { width: window.innerWidth, height: window.innerHeight }, {
199
+ side: sideOf(current),
200
+ align: alignOf(current),
201
+ offset: OFFSET_PX,
202
+ margin: VIEWPORT_MARGIN_PX,
203
+ minWidth: width,
204
+ maxWidth: width,
205
+ minHeight: height,
206
+ maxHeight: height,
207
+ contentHeightHint: height
208
+ });
209
+ bubble.style.left = `${out.left}px`;
210
+ bubble.style.top = `${out.top}px`;
211
+ bubble.dataset.icenSide = out.side;
212
+ bubble.style.visibility = "";
213
+ const node = bubble, trigger = current;
214
+ requestAnimationFrame(() => {
215
+ if (bubble === node && current === trigger) node.classList.add("is-open");
216
+ });
217
+ }
218
+ function watch() {
219
+ unwatch();
220
+ window.addEventListener("scroll", onViewportScroll, { capture: true, passive: true });
221
+ window.addEventListener("resize", onViewportResize, { passive: true });
222
+ observer = new MutationObserver(() => {
223
+ if (!current) return;
224
+ const text = textOf(current);
225
+ if (!current.isConnected || !text) {
226
+ hide(null, { instant: true });
227
+ return;
228
+ }
229
+ if (bubble) {
230
+ if (bubble.textContent !== text) bubble.textContent = text;
231
+ bubble.classList.toggle("is-multiline", current.getAttribute("data-icen-tooltip-multiline") === "true");
232
+ }
233
+ layout();
234
+ });
235
+ observer.observe(document.documentElement, {
236
+ subtree: true,
237
+ childList: true,
238
+ attributes: true,
239
+ attributeFilter: WATCHED_ATTRS
240
+ });
241
+ }
242
+ function onViewportScroll() {
243
+ hide(null, { instant: true, suppressFallback: true });
244
+ }
245
+ function onViewportResize() {
246
+ hide(null, { instant: true, suppressFallback: true });
247
+ }
248
+ function show(trigger) {
249
+ if (!trigger.isConnected) return;
250
+ const text = textOf(trigger);
251
+ if (!text) return;
252
+ cancelPending();
253
+ cancelClose();
254
+ cancelLeaving();
255
+ if (current && current !== trigger) release(current);
256
+ current = trigger;
257
+ trigger.setAttribute("data-icen-tooltip-live", "");
258
+ if (!bubble) {
259
+ bubble = document.createElement("div");
260
+ bubble.className = "icen-tooltip";
261
+ bubble.setAttribute("role", "tooltip");
262
+ bubble.id = `icen-tooltip-${++sequence}`;
263
+ bubble.addEventListener("pointerenter", cancelClose);
264
+ bubble.addEventListener("pointerleave", (event) => {
265
+ if (current && event.relatedTarget instanceof Node && current.contains(event.relatedTarget)) return;
266
+ scheduleClose();
267
+ });
268
+ }
269
+ bubble.textContent = text;
270
+ bubble.classList.toggle("is-multiline", trigger.getAttribute("data-icen-tooltip-multiline") === "true");
271
+ if (!bubble.isConnected) {
272
+ bubble.style.visibility = "hidden";
273
+ document.body.appendChild(bubble);
274
+ }
275
+ const tokens = new Set((trigger.getAttribute("aria-describedby") ?? "").split(/\s+/).filter(Boolean));
276
+ tokens.add(bubble.id);
277
+ trigger.setAttribute("aria-describedby", [...tokens].join(" "));
278
+ layout();
279
+ watch();
280
+ }
281
+ function markPending(trigger) {
282
+ for (const stale of dismissed) if (!stale.isConnected) clearDismissed(stale);
283
+ cancelClose();
284
+ cancelPending();
285
+ if (current === trigger) return;
286
+ trigger.setAttribute("data-icen-tooltip-live", "");
287
+ pending = {
288
+ trigger,
289
+ timer: window.setTimeout(() => {
290
+ pending = null;
291
+ show(trigger);
292
+ }, HOVER_DELAY_MS)
293
+ };
294
+ }
295
+ function owns(trigger, scope) {
296
+ if (!trigger) return false;
297
+ return scope instanceof Node ? scope.contains(trigger) || scope === trigger : false;
298
+ }
299
+ function initTooltip(root) {
300
+ if (typeof document === "undefined") return () => {
301
+ };
302
+ const scope = root ?? document;
303
+ const existing = scopes.get(scope);
304
+ if (existing) return existing;
305
+ const onPointerOver = (event) => {
306
+ if (handled.has(event)) return;
307
+ handled.add(event);
308
+ const pointer = event;
309
+ if (pointer.pointerType === "touch") return;
310
+ const trigger = triggerFrom(pointer.target);
311
+ if (!trigger) return;
312
+ if (pointer.relatedTarget instanceof Node && trigger.contains(pointer.relatedTarget)) return;
313
+ if (dismissed.has(trigger)) return;
314
+ if (current === trigger) {
315
+ cancelClose();
316
+ return;
317
+ }
318
+ if (pending?.trigger === trigger) return;
319
+ triggerOwners.set(trigger, scope);
320
+ markPending(trigger);
321
+ };
322
+ const onPointerOut = (event) => {
323
+ const pointer = event;
324
+ const trigger = triggerFrom(pointer.target);
325
+ if (!trigger) return;
326
+ if (pointer.relatedTarget instanceof Node && trigger.contains(pointer.relatedTarget)) return;
327
+ if (document.activeElement !== trigger) clearDismissed(trigger);
328
+ if (pending?.trigger === trigger) cancelPending();
329
+ if (current === trigger && !(pointer.relatedTarget instanceof Node && bubble?.contains(pointer.relatedTarget))) scheduleClose();
330
+ };
331
+ const onFocusIn = (event) => {
332
+ if (handled.has(event)) return;
333
+ handled.add(event);
334
+ const trigger = triggerFrom(event.target);
335
+ if (!trigger || !focusVisible(trigger) || dismissed.has(trigger)) return;
336
+ triggerOwners.set(trigger, scope);
337
+ show(trigger);
338
+ };
339
+ const onFocusOut = (event) => {
340
+ const trigger = triggerFrom(event.target);
341
+ if (!trigger) return;
342
+ if (!trigger.matches(":hover")) clearDismissed(trigger);
343
+ if (pending?.trigger === trigger) cancelPending();
344
+ if (current === trigger && !trigger.matches(":hover")) hide(trigger);
345
+ };
346
+ const onPointerDown = () => {
347
+ hide(null, { suppressFallback: true });
348
+ };
349
+ const onKeyDown = (event) => {
350
+ if (event.key !== "Escape") return;
351
+ hide(null, { suppressFallback: true });
352
+ };
353
+ scope.addEventListener("pointerover", onPointerOver);
354
+ scope.addEventListener("pointerout", onPointerOut);
355
+ scope.addEventListener("focusin", onFocusIn);
356
+ scope.addEventListener("focusout", onFocusOut);
357
+ scope.addEventListener("pointerdown", onPointerDown, true);
358
+ scope.addEventListener("keydown", onKeyDown, true);
359
+ const dispose = () => {
360
+ scope.removeEventListener("pointerover", onPointerOver);
361
+ scope.removeEventListener("pointerout", onPointerOut);
362
+ scope.removeEventListener("focusin", onFocusIn);
363
+ scope.removeEventListener("focusout", onFocusOut);
364
+ scope.removeEventListener("pointerdown", onPointerDown, true);
365
+ scope.removeEventListener("keydown", onKeyDown, true);
366
+ if (owns(pending?.trigger ?? null, scope)) cancelPending();
367
+ if (owns(current, scope)) hide(null, { instant: true });
368
+ for (const trigger of dismissed) {
369
+ if (scope === document || triggerOwners.get(trigger) === scope || owns(trigger, scope)) clearDismissed(trigger);
370
+ }
371
+ scopes.delete(scope);
372
+ };
373
+ scopes.set(scope, dispose);
374
+ return dispose;
375
+ }
376
+ export {
377
+ initTooltip
378
+ };
@@ -0,0 +1,69 @@
1
+ interface TreeNode {
2
+ value: string;
3
+ label: string;
4
+ children?: TreeNode[];
5
+ disabled?: boolean;
6
+ }
7
+ interface TreeSelectOptions {
8
+ /** Accessible field name; defaults to placeholder. */
9
+ label?: string;
10
+ size?: 'sm' | 'md' | 'lg';
11
+ nodes: TreeNode[];
12
+ /** 初值(多选数组;单选取首个有效值) */
13
+ value?: string[];
14
+ multiple?: boolean;
15
+ /** 面板内搜索:过滤命中节点自动展开祖先,命中词 <mark> 高亮 */
16
+ searchable?: boolean;
17
+ /** 多选的三态勾选(父 = 子集并集,混合态);隐含多值语义 */
18
+ checkable?: boolean;
19
+ /** 单选时仅叶子可定值(默认任意级可选) */
20
+ leafOnly?: boolean;
21
+ /** 默认「请选择」 */
22
+ placeholder?: string;
23
+ clearable?: boolean;
24
+ disabled?: boolean;
25
+ /** 搜索无命中文案,默认「无匹配」 */
26
+ emptyLabel?: string;
27
+ /** 搜索框占位,默认「搜索」 */
28
+ searchPlaceholder?: string;
29
+ onChange?: (value: string[], labels: string[]) => void;
30
+ }
31
+ interface TreeSelectHandle {
32
+ getValue(): string[];
33
+ getLabels(): string[];
34
+ setValue(v: string[]): void;
35
+ clear(): void;
36
+ open(): void;
37
+ close(): void;
38
+ expandAll(): void;
39
+ collapseAll(): void;
40
+ destroy(): void;
41
+ }
42
+ interface FlatTreeEntry {
43
+ node: TreeNode;
44
+ depth: number;
45
+ parents: TreeNode[];
46
+ }
47
+ /** 深度优先拍平(文档序):节点 + 深度 + 父链(键盘导航 / chips 序 / 值序共用)。 */
48
+ declare function flattenTreeNodes(nodes: TreeNode[]): FlatTreeEntry[];
49
+ interface TreeFilterResult {
50
+ /** label 命中 query 的节点值集合(大小写不敏感) */
51
+ matched: Set<string>;
52
+ /** 需保留可见的节点值集合 = 命中 ∪ 祖先 ∪ 命中节点的子孙(上下文可见,不高亮) */
53
+ keep: Set<string>;
54
+ /** 命中节点祖先(搜索态自动展开的目标) */
55
+ expand: Set<string>;
56
+ }
57
+ /** 搜索过滤:命中节点 + 其全部祖先 + 其子孙保留可见(子孙是命中上下文,不高亮);
58
+ * 祖先进 expand(搜索态自动展开的目标)。空 query 返回空集。 */
59
+ declare function filterTreeNodes(nodes: TreeNode[], query: string): TreeFilterResult;
60
+ type TreeCheckState = 'checked' | 'unchecked' | 'mixed';
61
+ /**
62
+ * 三态求值:checked 集合(全部选中节点值)下某节点的勾选态。
63
+ * 自身 + 全部子孙都在集合 → checked;全不在 → unchecked;部分在 → mixed
64
+ * (父不在集合但全部子孙在也呈 mixed——诚实呈现部分选择,由 toggle 逻辑保证一致)。
65
+ */
66
+ declare function treeNodeCheckState(node: TreeNode, checked: ReadonlySet<string>): TreeCheckState;
67
+ declare function createTreeSelect(el: HTMLElement, opts: TreeSelectOptions): TreeSelectHandle;
68
+
69
+ export { type FlatTreeEntry, type TreeCheckState, type TreeFilterResult, type TreeNode, type TreeSelectHandle, type TreeSelectOptions, createTreeSelect, filterTreeNodes, flattenTreeNodes, treeNodeCheckState };