@icen.ai/ui 0.8.1 → 0.10.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 (335) hide show
  1. package/AGENTS.md +176 -75
  2. package/README.md +66 -88
  3. package/dist/base.css +208 -179
  4. package/dist/behaviors/accordion.mjs +8 -8
  5. package/dist/behaviors/ai-branch.d.mts +19 -0
  6. package/dist/behaviors/ai-branch.mjs +1133 -0
  7. package/dist/behaviors/ai-chat.d.mts +12 -10
  8. package/dist/behaviors/ai-chat.mjs +1125 -155
  9. package/dist/behaviors/ai-composer.d.mts +44 -12
  10. package/dist/behaviors/ai-composer.mjs +2084 -523
  11. package/dist/behaviors/ai-core.d.mts +1 -1
  12. package/dist/behaviors/ai-core.mjs +1016 -107
  13. package/dist/behaviors/ai-diff.mjs +1019 -127
  14. package/dist/behaviors/ai-feedback.d.mts +26 -0
  15. package/dist/behaviors/ai-feedback.mjs +1212 -0
  16. package/dist/behaviors/ai-panel.d.mts +21 -7
  17. package/dist/behaviors/ai-panel.mjs +1308 -264
  18. package/dist/behaviors/ai-provider.mjs +1003 -101
  19. package/dist/behaviors/ai-threads.d.mts +38 -0
  20. package/dist/behaviors/ai-threads.mjs +1233 -0
  21. package/dist/behaviors/ai-tool.d.mts +2 -2
  22. package/dist/behaviors/ai-tool.mjs +2042 -396
  23. package/dist/behaviors/ai-tools.d.mts +89 -16
  24. package/dist/behaviors/ai-tools.mjs +4453 -372
  25. package/dist/behaviors/autocomplete.d.mts +53 -0
  26. package/dist/behaviors/autocomplete.mjs +1600 -0
  27. package/dist/behaviors/back-top.d.mts +1 -1
  28. package/dist/behaviors/back-top.mjs +951 -14
  29. package/dist/behaviors/carousel.d.mts +1 -1
  30. package/dist/behaviors/carousel.mjs +906 -11
  31. package/dist/behaviors/cascader.d.mts +48 -0
  32. package/dist/behaviors/cascader.mjs +1853 -0
  33. package/dist/behaviors/charts.d.mts +174 -8
  34. package/dist/behaviors/charts.mjs +2632 -192
  35. package/dist/behaviors/code-block.d.mts +36 -0
  36. package/dist/behaviors/code-block.mjs +1611 -0
  37. package/dist/behaviors/command-palette.d.mts +9 -6
  38. package/dist/behaviors/command-palette.mjs +161 -59
  39. package/dist/behaviors/context-menu.d.mts +9 -8
  40. package/dist/behaviors/context-menu.mjs +1112 -44
  41. package/dist/behaviors/controls.d.mts +13 -13
  42. package/dist/behaviors/controls.mjs +989 -130
  43. package/dist/behaviors/copy.d.mts +21 -2
  44. package/dist/behaviors/copy.mjs +1206 -42
  45. package/dist/behaviors/datatable.d.mts +53 -3
  46. package/dist/behaviors/datatable.mjs +1963 -207
  47. package/dist/behaviors/date-picker.d.mts +0 -1
  48. package/dist/behaviors/date-picker.mjs +1340 -293
  49. package/dist/behaviors/design.d.mts +54 -0
  50. package/dist/behaviors/design.mjs +109 -0
  51. package/dist/behaviors/dropdown.d.mts +5 -6
  52. package/dist/behaviors/dropdown.mjs +262 -110
  53. package/dist/behaviors/events.d.mts +313 -3
  54. package/dist/behaviors/events.mjs +47 -2
  55. package/dist/behaviors/feedback.d.mts +30 -0
  56. package/dist/behaviors/feedback.mjs +296 -0
  57. package/dist/behaviors/focus.d.mts +8 -0
  58. package/dist/behaviors/focus.mjs +24 -0
  59. package/dist/behaviors/form-validate.d.mts +102 -0
  60. package/dist/behaviors/form-validate.mjs +6091 -0
  61. package/dist/behaviors/i18n.d.mts +789 -0
  62. package/dist/behaviors/i18n.mjs +1711 -0
  63. package/dist/behaviors/icons.d.mts +93 -0
  64. package/dist/behaviors/icons.mjs +113 -0
  65. package/dist/behaviors/input.d.mts +9 -1
  66. package/dist/behaviors/input.mjs +1056 -60
  67. package/dist/behaviors/kb-access.d.mts +34 -0
  68. package/dist/behaviors/kb-access.mjs +2459 -0
  69. package/dist/behaviors/kb-acl.d.mts +50 -0
  70. package/dist/behaviors/kb-acl.mjs +1345 -0
  71. package/dist/behaviors/kb-answer.d.mts +38 -0
  72. package/dist/behaviors/kb-answer.mjs +3707 -0
  73. package/dist/behaviors/kb-audit.d.mts +23 -0
  74. package/dist/behaviors/kb-audit.mjs +1297 -0
  75. package/dist/behaviors/kb-canvas.d.mts +44 -0
  76. package/dist/behaviors/kb-canvas.mjs +1512 -0
  77. package/dist/behaviors/kb-chain.d.mts +15 -0
  78. package/dist/behaviors/kb-chain.mjs +1192 -0
  79. package/dist/behaviors/kb-checkpoint.d.mts +16 -0
  80. package/dist/behaviors/kb-checkpoint.mjs +1492 -0
  81. package/dist/behaviors/kb-chunks.d.mts +31 -0
  82. package/dist/behaviors/kb-chunks.mjs +1414 -0
  83. package/dist/behaviors/kb-citation.d.mts +38 -0
  84. package/dist/behaviors/kb-citation.mjs +1699 -0
  85. package/dist/behaviors/kb-clarify.d.mts +20 -0
  86. package/dist/behaviors/kb-clarify.mjs +1176 -0
  87. package/dist/behaviors/kb-conflict.d.mts +22 -0
  88. package/dist/behaviors/kb-conflict.mjs +1206 -0
  89. package/dist/behaviors/kb-connector.d.mts +17 -0
  90. package/dist/behaviors/kb-connector.mjs +1303 -0
  91. package/dist/behaviors/kb-core.d.mts +534 -0
  92. package/dist/behaviors/kb-core.mjs +1805 -0
  93. package/dist/behaviors/kb-eval.d.mts +22 -0
  94. package/dist/behaviors/kb-eval.mjs +2235 -0
  95. package/dist/behaviors/kb-explain.d.mts +11 -0
  96. package/dist/behaviors/kb-explain.mjs +1165 -0
  97. package/dist/behaviors/kb-filter.d.mts +31 -0
  98. package/dist/behaviors/kb-filter.mjs +2417 -0
  99. package/dist/behaviors/kb-gap.d.mts +27 -0
  100. package/dist/behaviors/kb-gap.mjs +1195 -0
  101. package/dist/behaviors/kb-hittest.d.mts +34 -0
  102. package/dist/behaviors/kb-hittest.mjs +1352 -0
  103. package/dist/behaviors/kb-metadata.d.mts +29 -0
  104. package/dist/behaviors/kb-metadata.mjs +1248 -0
  105. package/dist/behaviors/kb-passage.d.mts +41 -0
  106. package/dist/behaviors/kb-passage.mjs +1469 -0
  107. package/dist/behaviors/kb-pipeline.d.mts +18 -0
  108. package/dist/behaviors/kb-pipeline.mjs +1301 -0
  109. package/dist/behaviors/kb-qa.d.mts +26 -0
  110. package/dist/behaviors/kb-qa.mjs +1260 -0
  111. package/dist/behaviors/kb-rerank.d.mts +20 -0
  112. package/dist/behaviors/kb-rerank.mjs +1248 -0
  113. package/dist/behaviors/kb-retrieval.d.mts +49 -0
  114. package/dist/behaviors/kb-retrieval.mjs +2585 -0
  115. package/dist/behaviors/kb-review.d.mts +44 -0
  116. package/dist/behaviors/kb-review.mjs +2282 -0
  117. package/dist/behaviors/kb-sandbox.d.mts +33 -0
  118. package/dist/behaviors/kb-sandbox.mjs +1247 -0
  119. package/dist/behaviors/kb-segment.d.mts +32 -0
  120. package/dist/behaviors/kb-segment.mjs +1431 -0
  121. package/dist/behaviors/kb-select.d.mts +24 -0
  122. package/dist/behaviors/kb-select.mjs +1989 -0
  123. package/dist/behaviors/kb-sources.d.mts +27 -0
  124. package/dist/behaviors/kb-sources.mjs +1287 -0
  125. package/dist/behaviors/kb-sql.d.mts +43 -0
  126. package/dist/behaviors/kb-sql.mjs +1865 -0
  127. package/dist/behaviors/kb-trace.d.mts +16 -0
  128. package/dist/behaviors/kb-trace.mjs +1328 -0
  129. package/dist/behaviors/kb-visibility.d.mts +44 -0
  130. package/dist/behaviors/kb-visibility.mjs +1331 -0
  131. package/dist/behaviors/kb-who-can.d.mts +32 -0
  132. package/dist/behaviors/kb-who-can.mjs +2216 -0
  133. package/dist/behaviors/mentions.d.mts +93 -0
  134. package/dist/behaviors/mentions.mjs +2152 -0
  135. package/dist/behaviors/modal.d.mts +4 -3
  136. package/dist/behaviors/modal.mjs +1055 -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 +1615 -265
  141. package/dist/behaviors/panel.d.mts +4 -0
  142. package/dist/behaviors/panel.mjs +994 -0
  143. package/dist/behaviors/popover.d.mts +28 -5
  144. package/dist/behaviors/popover.mjs +225 -24
  145. package/dist/behaviors/select.d.mts +5 -2
  146. package/dist/behaviors/select.mjs +1410 -117
  147. package/dist/behaviors/sidebar.d.mts +1 -1
  148. package/dist/behaviors/sidebar.mjs +13 -13
  149. package/dist/behaviors/slider.d.mts +1 -1
  150. package/dist/behaviors/slider.mjs +9 -9
  151. package/dist/behaviors/split-pane.d.mts +1 -1
  152. package/dist/behaviors/split-pane.mjs +7 -7
  153. package/dist/behaviors/suggestions.d.mts +27 -0
  154. package/dist/behaviors/suggestions.mjs +1089 -0
  155. package/dist/behaviors/svg-parse.d.mts +14 -0
  156. package/dist/behaviors/svg-parse.mjs +37 -0
  157. package/dist/behaviors/tabs.d.mts +2 -2
  158. package/dist/behaviors/tabs.mjs +25 -25
  159. package/dist/behaviors/tag-input.d.mts +23 -5
  160. package/dist/behaviors/tag-input.mjs +1359 -104
  161. package/dist/behaviors/theme-switcher.d.mts +24 -0
  162. package/dist/behaviors/theme-switcher.mjs +1981 -0
  163. package/dist/behaviors/theme.d.mts +15 -8
  164. package/dist/behaviors/theme.mjs +390 -28
  165. package/dist/behaviors/toast.d.mts +24 -25
  166. package/dist/behaviors/toast.mjs +1266 -88
  167. package/dist/behaviors/tooltip.d.mts +4 -0
  168. package/dist/behaviors/tooltip.mjs +378 -0
  169. package/dist/behaviors/tree-select.d.mts +69 -0
  170. package/dist/behaviors/tree-select.mjs +1907 -0
  171. package/dist/behaviors/tree.d.mts +1 -1
  172. package/dist/behaviors/tree.mjs +15 -15
  173. package/dist/behaviors/upload.d.mts +3 -2
  174. package/dist/behaviors/upload.mjs +1076 -66
  175. package/dist/cli.mjs +5 -6
  176. package/dist/components/ai-branch.mjs +3 -0
  177. package/dist/components/ai-chat.css +846 -458
  178. package/dist/components/ai-diff.css +153 -132
  179. package/dist/components/ai-feedback.mjs +3 -0
  180. package/dist/components/ai-panel.css +495 -270
  181. package/dist/components/ai-threads.mjs +3 -0
  182. package/dist/components/ai-tool.css +393 -238
  183. package/dist/components/autocomplete.css +61 -0
  184. package/dist/components/autocomplete.mjs +3 -0
  185. package/dist/components/back-top.css +34 -31
  186. package/dist/components/badge.css +44 -41
  187. package/dist/components/breadcrumb.css +67 -46
  188. package/dist/components/btn.css +80 -74
  189. package/dist/components/card.css +117 -106
  190. package/dist/components/cascader.css +311 -0
  191. package/dist/components/cascader.mjs +3 -0
  192. package/dist/components/chart-area.css +8 -2
  193. package/dist/components/chart-bar.css +95 -33
  194. package/dist/components/chart-gauge.css +14 -11
  195. package/dist/components/chart-graph.css +60 -0
  196. package/dist/components/chart-graph.mjs +4 -0
  197. package/dist/components/chart-heatmap.css +96 -90
  198. package/dist/components/chart-line.css +8 -3
  199. package/dist/components/chart-map.mjs +3 -0
  200. package/dist/components/chart-pie.css +9 -6
  201. package/dist/components/chart-radar.css +8 -5
  202. package/dist/components/chart-scatter.css +9 -6
  203. package/dist/components/chart-scatter.mjs +1 -1
  204. package/dist/components/chart-sparkline.css +5 -2
  205. package/dist/components/chart-stack.css +14 -11
  206. package/dist/components/charts.css +190 -67
  207. package/dist/components/charts.mjs +1 -0
  208. package/dist/components/code-block.css +418 -0
  209. package/dist/components/code-block.mjs +4 -0
  210. package/dist/components/command-palette.css +138 -117
  211. package/dist/components/content.css +257 -251
  212. package/dist/components/copy.css +72 -44
  213. package/dist/components/datatable.css +423 -181
  214. package/dist/components/date-picker.css +135 -104
  215. package/dist/components/empty.css +68 -65
  216. package/dist/components/feedback.css +201 -183
  217. package/dist/components/form-validate.css +120 -0
  218. package/dist/components/form-validate.mjs +3 -0
  219. package/dist/components/form.css +150 -127
  220. package/dist/components/icon.css +102 -0
  221. package/dist/components/icon.mjs +3 -0
  222. package/dist/components/input.css +159 -104
  223. package/dist/components/kb-access.mjs +4 -0
  224. package/dist/components/kb-acl.mjs +4 -0
  225. package/dist/components/kb-agent.css +496 -0
  226. package/dist/components/kb-answer.mjs +4 -0
  227. package/dist/components/kb-audit.mjs +4 -0
  228. package/dist/components/kb-canvas.mjs +4 -0
  229. package/dist/components/kb-chain.mjs +4 -0
  230. package/dist/components/kb-checkpoint.mjs +4 -0
  231. package/dist/components/kb-chunks.mjs +4 -0
  232. package/dist/components/kb-citation.mjs +4 -0
  233. package/dist/components/kb-clarify.mjs +4 -0
  234. package/dist/components/kb-conflict.mjs +4 -0
  235. package/dist/components/kb-connector.mjs +4 -0
  236. package/dist/components/kb-data.css +653 -0
  237. package/dist/components/kb-eval.mjs +4 -0
  238. package/dist/components/kb-explain.mjs +4 -0
  239. package/dist/components/kb-filter.mjs +4 -0
  240. package/dist/components/kb-gap.mjs +4 -0
  241. package/dist/components/kb-ground.css +578 -0
  242. package/dist/components/kb-hittest.mjs +4 -0
  243. package/dist/components/kb-ingest.css +882 -0
  244. package/dist/components/kb-metadata.mjs +4 -0
  245. package/dist/components/kb-ops.css +554 -0
  246. package/dist/components/kb-passage.mjs +4 -0
  247. package/dist/components/kb-perm.css +433 -0
  248. package/dist/components/kb-pipeline.mjs +4 -0
  249. package/dist/components/kb-qa.mjs +4 -0
  250. package/dist/components/kb-rerank.mjs +4 -0
  251. package/dist/components/kb-retrieval.mjs +4 -0
  252. package/dist/components/kb-review.mjs +4 -0
  253. package/dist/components/kb-sandbox.mjs +4 -0
  254. package/dist/components/kb-search.css +897 -0
  255. package/dist/components/kb-segment.mjs +4 -0
  256. package/dist/components/kb-sources.mjs +4 -0
  257. package/dist/components/kb-sql.mjs +4 -0
  258. package/dist/components/kb-trace.mjs +4 -0
  259. package/dist/components/kb-visibility.mjs +4 -0
  260. package/dist/components/kb-who-can.mjs +4 -0
  261. package/dist/components/kb.css +263 -0
  262. package/dist/components/kb.mjs +9 -0
  263. package/dist/components/layout.css +85 -82
  264. package/dist/components/material-chinese.css +73 -0
  265. package/dist/components/material-soviet.css +76 -0
  266. package/dist/components/material.css +275 -0
  267. package/dist/components/media.css +220 -166
  268. package/dist/components/mentions.css +189 -0
  269. package/dist/components/mentions.mjs +3 -0
  270. package/dist/components/menu.css +113 -105
  271. package/dist/components/modal.css +107 -112
  272. package/dist/components/nav.css +118 -115
  273. package/dist/components/notification.css +238 -174
  274. package/dist/components/pagination.css +56 -53
  275. package/dist/components/panel.css +66 -63
  276. package/dist/components/panel.mjs +1 -0
  277. package/dist/components/pill.css +81 -71
  278. package/dist/components/popover.css +67 -53
  279. package/dist/components/scroll-area.css +113 -110
  280. package/dist/components/segmented.css +146 -143
  281. package/dist/components/select.css +206 -186
  282. package/dist/components/sidebar.css +137 -127
  283. package/dist/components/slider.css +117 -114
  284. package/dist/components/split-pane.css +112 -109
  285. package/dist/components/stat.css +112 -106
  286. package/dist/components/steps.css +109 -103
  287. package/dist/components/switch.css +138 -134
  288. package/dist/components/table.css +131 -107
  289. package/dist/components/tabs.css +114 -108
  290. package/dist/components/tag-input.css +48 -133
  291. package/dist/components/tag.css +81 -71
  292. package/dist/components/theme-switcher.css +105 -0
  293. package/dist/components/theme-switcher.mjs +3 -0
  294. package/dist/components/toast.css +100 -86
  295. package/dist/components/toolbar.css +45 -42
  296. package/dist/components/tooltip.css +102 -43
  297. package/dist/components/tooltip.mjs +1 -0
  298. package/dist/components/tree-select.css +416 -0
  299. package/dist/components/tree-select.mjs +3 -0
  300. package/dist/components/upload.css +135 -92
  301. package/dist/fonts/LICENSES/ark-pixel/OFL.txt +96 -0
  302. package/dist/fonts/LICENSES/cubic-11/OFL.txt +108 -0
  303. package/dist/fonts/LICENSES/galmuri/LICENSE.txt +93 -0
  304. package/dist/fonts/OFL.txt +96 -0
  305. package/dist/fonts/README.md +14 -0
  306. package/dist/fonts/fusion-pixel-12px-zh-hans.woff2 +0 -0
  307. package/dist/index.d.mts +64 -15
  308. package/dist/index.mjs +28049 -8595
  309. package/dist/react.d.mts +91 -0
  310. package/dist/react.mjs +8208 -0
  311. package/dist/registry.json +454 -15
  312. package/dist/tokens/chinese.css +44 -0
  313. package/dist/tokens/colors.css +365 -1222
  314. package/dist/tokens/design.css +109 -0
  315. package/dist/tokens/dtcg.json +11198 -0
  316. package/dist/tokens/figma.variables.json +7017 -0
  317. package/dist/tokens/icon-masks.css +78 -0
  318. package/dist/tokens/pixel.css +50 -0
  319. package/dist/tokens/soviet.css +44 -0
  320. package/dist/tokens/style-profiles.css +36 -547
  321. package/dist/tokens/themes.json +308 -0
  322. package/dist/tokens/tokens-studio.json +6728 -0
  323. package/dist/tokens/typography.css +21 -18
  324. package/dist/tokens.css +1555 -1801
  325. package/dist/ui.css +16147 -8597
  326. package/dist/vue.d.mts +344 -0
  327. package/dist/vue.mjs +7781 -0
  328. package/docs/spec/ai-input-experience.md +75 -0
  329. package/docs/spec/ai-native.md +238 -147
  330. package/docs/spec/design-philosophy.md +189 -0
  331. package/docs/spec/design-primitives.md +196 -0
  332. package/docs/spec/kb-family.md +475 -0
  333. package/package.json +42 -7
  334. package/dist/retro-effects.css +0 -255
  335. package/dist/tokens/retro-effects.css +0 -255
package/README.md CHANGED
@@ -1,121 +1,99 @@
1
- # @icen.ai/ui — Icen Design System
2
-
3
- icen.ai 全生态的统一设计系统:**设计 tokens(6 色彩预设 × 明暗双模 × 3 风格 profile)+ 无框架组件 CSS(56 组件)+ 行为 JS(35 behaviors)+ 统一事件体系 + AI 原生组件族 + 图表通用层 + AI 工具体系**。工程形态与 `@icen.ai/cli` 一致(Bun + TS + tsup + ESM + MIT)。
4
-
5
- - 色彩预设:`clay`(默认,陶土橙 × 纸白 = icen 品牌)/ `piano` / `art` / `vangogh` / `ink` / `retro`,各含 `.dark` 变体
6
- - 风格配置:`.style-modern` / `.style-retro` / `.style-terminal`(几何 / 密度 / 动效 / 字体 token,与色彩正交)
7
- - 可选效果层:`retro-effects.css`(CRT 扫描线 / 颗粒 / 像素边框 / 打字机光标 —— 仅 `.style-retro` 激活时生效,按需 import)
8
- - 组件:btn / form / input / select / slider / switch / tag-input / upload / modal / popover / tooltip / menu(含 dropdown + context-menu)/ tabs / nav / sidebar / breadcrumb / pagination / steps / segmented / accordion / tree / carousel / charts / table / stat / card / panel / pill / tag / badge / empty / feedback / content / media / toolbar / split-pane / date-picker / command-palette / notification / copy / scroll-area / back-top / datatable / layout(56 个组件 CSS,含 charts 基座 + 11 个细分图表 kit,贡献日历样式并入基座);浮层尺寸统一 PanelSizing 契约(`data-panel-width/-min/-max/-min-height/-max-height` 属性面 + 程序面对象,含视口夹取)
9
- - 图表通用层(v0.8):`renderChart(el, spec)` 统一入口——纯 JSON 规格(type 缺省自动推断;data[] + dims 任意维度透视)、多系列折线/分组堆叠柱、内置 tooltip、`icen:chart-hover/click/dblclick/contextmenu` 交互事件族、图例点击切换系列;新增贡献日历 renderCalendar(GitHub 同款)与散点气泡 renderScatter
10
- - AI 原生组件族(v0.7,11 个 slug):ai-chat(会话容器)/ ai-message(消息行)/ ai-reasoning(推理块)/ ai-composer(输入台)/ ai-tool-call(工具调用卡)/ ai-subagent(子智能体卡)/ ai-diff(差异审阅)/ ai-files(文件标签)/ ai-todo(任务清单)/ ai-context(上下文抽屉)/ ai-usage(用量条)——共享 7 态状态机与 kind 注册表,事件统一 `icen:ai-*` 前缀
11
- - 标准化内容模型 `AiContent`(v0.7.1,对标 AI SDK v5 parts / MCP / OpenAI / Anthropic,2026-10 调研):一套 `AiContentPart[]`(text / image / audio / video / file / resource-link)表达任意输入——消息渲染(renderAiMessage 多模态 + 错误变体)、工具回执(MCP content 数组零改动进卡片)、传输层(parts → 两族 wire,含 anthropic `cache_control` 与 tool_result 回灌)全部只认这一套;`normalizeContentParts` 一函数归一四族来源,`estimateTokens` / `contextEstimate` 提供粗估与上下文口径
12
- - ai-provider 适配层(v0.7.1 增强):五家厂商注册表(含定价表,`estimateCost` 未命中不猜价)、chat + stream 双族线协议多模态传输、审计闭环(`createAiAuditor` 条目含 cost 定价估算与 ttftMs 首 token 延迟,`renderAiAudit` 面板 + `ai-context` 抽屉审计节)、请求收尾派 `icen:ai-done`(status/usage/cost/error/durationMs/ttftMs)
13
- - 绑定层 `bindComposer`(v0.7.1,「零接线全链路」):一行把 composer ↔ 消息区(renderAiMessage)↔ client(stream + 停止 + 排队续发 + 错误路径)↔ 上下文环(`usage.from: 'context'` 正确口径 / `'billing'` 计费口径 / auditor)接成闭环;不传 client 为纯状态绑定(渐进采用);附件三入口(钮选 / 粘贴 / 拖放)
14
- - AI 工具体系(v0.8,`ai-tools`):UI 能力注册为模型可调用的工具(内置 `render_chart` 吃 ChartSpec 纯 JSON);`createAiToolArea` 挂载区三层控制(白名单 / max LRU / 运行时调节);模型侧 `aiToolsToOpenAI()` 直接给 tools 参数、`aiToolsManifest()` 贴 system prompt;工具回执内嵌图(output 为 chart spec → 工具卡展开区直接渲染)
15
- - 事件体系(events):`onIcen` 一个入口(类型化 `IcenEventMap` + 选择器委托 + `{ within, signal, once }`)+ `emitIcen` 唯一派生口 + `setEventPolicy` 手势默认行为 + `data-gestures` 声明式手势(click/dblclick/contextmenu/longpress/text-select,位移守卫与消歧内建)
16
- - 控件族(controls):`initSwitch`(开关/三态勾选/单选组)/ `initStepper` / `initSegmented` / `initSteps` / `initRating` / `initPagination` / `initTableSort`——纯 CSS 控件的行为承载与 `icen:*-change` 事件
17
- - 行为:theme / tabs / toast / copy / input / select / slider / tag-input / upload / modal / dropdown / popover / context-menu / accordion / tree / carousel / charts / nav / sidebar / datatable / notification / back-top / command-palette / date-picker / split-pane / events / controls / ai-core / ai-chat / ai-composer / ai-tool / ai-provider / ai-diff / ai-panel / ai-tools(35 个,全部 SSR 守卫 + 幂等 init + 返回销毁函数 + textContent-only)
18
-
19
- ## 使用
1
+ # @icen.ai/ui
20
2
 
21
- ```bash
22
- bun add @icen.ai/ui
23
- ```
3
+ icen.ai 的设计系统。组件、图表和 AI 界面,共用一套设计令牌——换肤不用改代码,UI 也能直接交给模型调用。无框架,零运行时依赖,MIT。
4
+
5
+ - 文档与实时演示:<https://ui.icen.ai>
6
+ - 安装:`bun add @icen.ai/ui`
7
+
8
+ ## 快速开始
24
9
 
25
10
  ```css
26
- @import '@icen.ai/ui/tokens.css';
27
- @import '@icen.ai/ui/ui.css'; /* tokens + base + 全部组件;也可按 ./components/btn.css 单引 */
28
- /* 可选:仅 .style-retro 下生效的像素效果层 */
29
- @import '@icen.ai/ui/retro-effects.css';
11
+ @import '@icen.ai/ui/tokens.css'; /* 设计令牌:预设 + 明暗 + 原语 */
12
+ @import '@icen.ai/ui/ui.css'; /* 全部组件;也可只引 ./components/btn.css */
30
13
  ```
31
14
 
32
15
  ```html
33
- <html class="piano dark"> <!-- 预设类 + 可选 dark;clay 为 :root 默认 -->
16
+ <html data-icen-preset="piano" data-icen-theme="dark">
34
17
  ```
35
18
 
36
19
  ```ts
37
- import {
38
- initTheme, toggleDark, setTheme,
39
- initTabs, initCopy, initInput, initSelect, initSlider, initTagInput,
40
- initUpload, initModal, initDropdown, initContextMenu,
41
- initAccordion, initTree, initCarousel, initNav, initSidebar,
42
- openPopover, closePopover,
43
- renderLine, renderVBar,
44
- toast,
45
- } from '@icen.ai/ui';
46
-
47
- initTheme(); // 尽早调用(或内联同步脚本防闪烁,见 accounts Base.astro)
48
- setStyle('retro'); // 切风格画像(modern/retro),与主题正交
49
- registerThemePreset('brand'); // 登记自建预设(宿主 CSS 先写好 .brand/.brand.dark token 面)
50
- listThemePresets(); // 枚举全部预设(含注册的),UI 切换器用
51
- initTabs(); // [data-tabs] > [data-tab] + [data-tab-panel] 契约;切换派发 icen:tab-change
52
- initCopy(); // .copy-btn[data-copy] 委托
53
- toast.ok('已保存'); // 或 toast.action('已删除', '撤销', undo);类名 .toast--success 等
54
- renderLine(el, { labels, series }); // 函数式组件(charts / datatable):无 init,直接渲染
20
+ import { initTheme, initTabs, toast, renderLine } from '@icen.ai/ui';
21
+
22
+ initTheme(); // 尽早调用,跟随系统偏好
23
+ initTabs(); // [data-icen-tabs] 契约自动生效
24
+ toast.success('已保存');
25
+ renderLine(el, { labels, series }); // 函数式组件:无 init,直接渲染
55
26
  ```
56
27
 
57
- AI 全链路(零接线):
28
+ 每个组件一页文档,页面里就是可点的真实组件:<https://ui.icen.ai/components/>
58
29
 
59
- ```ts
60
- import { initAiChat } from '@icen.ai/ui/kit/ai-chat';
61
- import { initAiComposer, bindComposer } from '@icen.ai/ui/kit/ai-composer';
62
- import { createAiClient, createAiAuditor } from '@icen.ai/ui';
63
-
64
- initAiChat();
65
- initAiComposer();
66
- const auditor = createAiAuditor({ persist: 'my-audit' });
67
- const client = createAiClient({ provider: 'kimi', apiKey, auditor });
68
-
69
- // 一行接通:发送 → 消息渲染 → 流式追加 → 停止/排队续发/错误路径 → 上下文环(正确口径)
70
- const binding = bindComposer(composer, {
71
- client,
72
- messages: chatEl.querySelector('.ai-chat-scroll'),
73
- usage: { from: 'context' }, // 或 'billing' / auditor
74
- });
75
- ```
30
+ ## 里面有什么
76
31
 
77
- ## 文档站(已上线 <https://ui.icen.ai>)
32
+ **组件。** 129 个无框架组件——表单、浮层、导航、数据展示、反馈。纯 CSS 契约加按需行为 JS:类名统一 `.icen-*`,钩子统一 `data-icen-*`,变量统一 `--icen-*`,产物全部进 cascade layers,与任何第三方 CSS 共存零冲突。
78
33
 
79
- `site/` 是公开文档站(首页 / 色彩预设色板 / 组件演示,导航栏实时换肤换明暗)。部署:
34
+ **图表。** 一份 JSON,十三种图。悬停、点击、右键、图例开关全部内建,不依赖任何图表库。缩放、降采样、标记线、流式追加、PNG 导出都写在规格里。
80
35
 
81
- ```bash
82
- cd site && bun install && bun run build
83
- bunx wrangler pages deploy dist --project-name=icen-ui # 需 CLOUDFLARE_ACCOUNT_ID
84
- ```
36
+ **AI 界面。** 做 AI 产品要用的零件都在:对话、推理、工具调用、审批、任务清单、用量与审计。兼容 OpenAI / Anthropic / MCP / AI SDK 四家协议,token 和成本自动记账。一行 `bindComposer` 接通输入台、流式渲染与上下文环;UI 能力可以注册成模型直接调用的工具。
37
+
38
+ **知识库。** 32 个组件覆盖 RAG 全链路:摄取、检索、问数、治理、权限。引用可溯源,过程可观测,答案可验证;权限域对授权侧诚实、对受限侧沉默。
39
+
40
+ **主题。** 六套预设,明暗双模,现代、中式、苏式与像素四种原语,全部挂在 `<html>` 的 data 属性上。配色与原语独立:中式推荐「东韵」,苏式推荐「巨构」,也可自由组合其它主题。自建品牌只需在自家 CSS 写一块 token 面,组件代码一行不动。
85
41
 
86
- Pages 项目 `icen-ui`(aidoll 账号),自定义域 `ui.icen.ai` → CNAME `icen-ui.pages.dev`。**已接 Git 自动部署**:push 到 `main` 即由 Cloudflare 构建(根目录 `site`,命令 `bun install && bun run build`,输出 `dist`),无需 wrangler 手动部署、无需任何 token/secret。
42
+ **React / Vue。** 官方薄封装 `@icen.ai/ui/react`、`@icen.ai/ui/vue`:只做生命周期接线和事件桥,底下是同一个命令式内核。详见 <https://ui.icen.ai/frameworks/>
43
+
44
+ 还内建:RTL 全面支持(逻辑属性 + 方向图标自动镜像,`<html dir="rtl">` 即生效)、i18n 文案注册表(683 个 key,中英双语,`setIcenLocale` 一句切换)、统一事件体系(`onIcen` 一个入口:类型化、选择器委托、策略层)、表单校验(原生约束即 schema,零新词汇)。
45
+
46
+ ## 工程信任
47
+
48
+ 生产环境依赖一个 0.x 库之前该问的问题,直接给证据:
49
+
50
+ - **800+ 个测试 + 10 项纪律守卫**挂在每个 PR 的 CI 上,本地 `bun run verify` 同口径。
51
+ - **[SECURITY.md](https://github.com/icen-ai/ui/blob/main/SECURITY.md)**:支持版本矩阵与漏洞响应承诺;textContent-only 渲染、权限域 fail-closed、OIDC provenance 发布链,逐条可验证。
52
+ - **[CONTRIBUTING.md](https://github.com/icen-ai/ui/blob/main/CONTRIBUTING.md)**:加组件的完整仪式与守卫速查表。
53
+ - **[docs/versioning.md](https://github.com/icen-ai/ui/blob/main/docs/versioning.md)**:0.x 破坏性变更纪律——只在 minor 发生,CHANGELOG 逐条写明契约变化。
54
+ - **发布链**:`git tag v<x.y.z>` → GitHub Actions 经 OIDC trusted publishing 发 npm,无长期 token,每次发布带 provenance 可审计。
55
+
56
+ ## 文档站
57
+
58
+ `site/` 是公开文档站:首页、色彩色板、129 个组件页、[知识库工作台](https://ui.icen.ai/kb/)(全真接线的成品页,导航栏实时换肤换明暗)。push 到 `main` 即由 Cloudflare Pages 自动构建(根目录 `site`,命令 `bun install && bun run build`,输出 `dist`),无需手动部署。
87
59
 
88
60
  ## 构建
89
61
 
90
62
  ```bash
91
63
  bun install
92
- bun run build # tsup(behaviors → dist/*.mjs + .d.mts 类型面)+ scripts/dts-ext.mjs + scripts/build-css.ts(css → dist/)
64
+ bun run build # tsup + CSS 拼合 + 设计 token 导出 → dist/
65
+ bun run verify # tsc + 守卫 + 800+ 测试 + 构建,四道门
93
66
  ```
94
67
 
95
- 产物:`dist/tokens.css`(colors + style-profiles + typography 拼合)、`dist/ui.css`(tokens+base+组件)、`dist/base.css`、`dist/retro-effects.css`(按需)、`dist/tokens/*`、`dist/components/*`、`dist/behaviors/*.mjs` + `.d.mts`(34 个声明,JSDoc 约束注释存活)、`dist/index.mjs`、`dist/registry.json`(含 tokens/tokensExtras/base/components/behaviors 清单)。
68
+ 产物:`dist/tokens.css`、`dist/ui.css`、`dist/base.css`、`dist/components/*`、`dist/behaviors/*.mjs` + `.d.mts`、`dist/registry.json`、`dist/index.mjs`。
69
+
70
+ ## 设计 token 导出
71
+
72
+ 构建链末尾自动导出设计工具格式(`scripts/dtcg.mjs` + `scripts/design-tokens.mjs`);设计侧改 token 可走插件回灌,闭环到 `src/tokens/`:
73
+
74
+ - `dist/tokens/dtcg.json`:W3C DTCG 经典版,每个预设的明暗两态各一份有效级联结果;`var()` 引用转为规范别名,文件内自洽、无环。
75
+ - `dist/tokens/tokens-studio.json`:Tokens Studio 的 `$themes` 覆盖全部预设的明暗矩阵,导入后按 theme 切换即对齐 CSS。
76
+ - `dist/tokens/figma.variables.json`:Figma Variables,每预设一个 collection,light / dark 双 mode;rem 按 ×16 记 px。
77
+ - **诚实口径**:color-mix、box-shadow 等规范无法表示的值一律跳过并打印清单,不猜、不静默。
96
78
 
97
79
  ## 目录
98
80
 
99
81
  ```
100
- src/tokens/colors.css # 6 预设 × 明暗(clay 基值已校准到 accounts.icen.ai 视觉)
101
- src/tokens/style-profiles.css # density/motion/typography + .style-modern/.retro/.terminal
102
- # retro 段选择器引用 base.css 的 .pressable/.control/.lift
103
- src/tokens/typography.css # icen canonical 字体栈(IBM Plex Mono + CJK 宋体)
104
- src/tokens/retro-effects.css # 可选效果层:CRT/扫描线/像素工具类(不进 tokens.css 拼合)
105
- src/base.css # 元素基线 + 滚动条 + z-index 标尺 + 6 个交互基元
106
- # .pressable / .control / .field / .lift / .surface-elevated / .focus-ring
107
- # + a11y 工具类 .sr-only / .skip-link + 工具类 .mono/.dim/.faint/.numeric
108
- src/components/*.css # 56 个无框架组件 CSS(含 4 个 AI 族合并文件)
109
- src/behaviors/*.ts # 33 个 behaviors(含 8 个 AI 族)
110
- scripts/build-css.ts # CSS 产物构建(拼合 + registry.json)
111
- site/ # 文档站骨架(ui.icen.ai,独立 Astro 应用)
82
+ src/tokens/ # 设计令牌:色彩、原语、字体(单一事实源 themes.json,改动后 bun run colors)
83
+ src/base.css # 元素基线 + 6 个交互基元 + a11y 工具类
84
+ src/components/ # 74 个组件 CSS
85
+ src/behaviors/ # 86 个行为模块(全部 SSR 守卫 + 幂等 init + 返回销毁函数)
86
+ docs/spec/ # 族规格(知识库族、设计原语…)
87
+ site/ # 文档站(独立 Astro 应用)
88
+ scripts/ # 构建与导出脚本
112
89
  ```
113
90
 
114
91
  ## 消费方接入
115
92
 
116
- `@icen.ai/ui` 已发布 npm(OIDC trusted publishing,打 `v*` tag 即自动发版)。两种消费方式均可:
117
-
118
93
  - **包引入(推荐)**:`bun add @icen.ai/ui`,按 `./tokens.css` / `./ui.css` / `./kit/<slug>` 引入。
119
- - **vendor 复制**:accounts 目前走这条路——`bun run sync:ui`(accounts 仓库内)把本仓库 `dist/` 复制到 `src/styles/vendor/icen/`,布局里 import 对应 CSS/JS。适合需要锁定版本或离线构建的场景。
94
+ - **vendor 复制**:锁定版本或离线构建场景,把 `dist/` 复制进自家仓库(accounts 走这条路,`bun run sync:ui`)。
95
+ - **给 AI 代理**:包内 `AGENTS.md` + `dist/**/*.d.mts`;站点 <https://ui.icen.ai/llms.txt>(索引)与 `/llms-full.txt`(全文 + 类型面);场景配方 skill `icen-ui`(skill.icen.ai)。
96
+
97
+ ## 现代原语
120
98
 
121
- 给 AI 代理的文档层:npm 包内 `AGENTS.md`(消费方速查)+ `dist/**/*.d.mts`(类型真相);站点 <https://ui.icen.ai/llms.txt>(索引)与 `/llms-full.txt`(全文 + 类型面快照);场景配方 skill `icen-ui`(skill.icen.ai)。
99
+ 默认原语「现代」:瓷白内容面、轻盈磨砂操作层、系统排版、统一的几何节奏。想调成自己的品牌,改 `--icen-design-*` 种子即可,`createDesign` 会编译出带明暗与对比度验证的完整配方——本地文档站 `/modern/` 有实时工作台。规范与接入见 [设计原语](docs/spec/design-primitives.md)。