@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,189 @@
1
+ # Icen 设计哲学(Design Philosophy)
2
+
3
+ > 本文件是 icen 设计系统的**美学宪法**:不只规定"值是多少",更规定"为什么"。
4
+ > 工程契约(类名/事件/守卫)在 `AGENTS.md`;本文件回答的是设计判断题——当两个实现都合法时,选哪个。
5
+ > 读者:组件作者、消费方设计师、以及要写第七套预设的人。
6
+
7
+ ---
8
+
9
+ ## 0. 元原则(八条,按优先级排序)
10
+
11
+ 1. **诚实呈现**:不装饰不确定,不隐藏不确定。加载有骨架、截断有省略号、权限缺失打码并给申请口——UI 永远如实反映数据与系统状态。
12
+ 2. **单一事实源**:任何设计决策只有一个权威出处。颜色/圆角/间距/时长/字体全部 token 化;组件不写死任何设计值。
13
+ 3. **语义先于字面**:组件消费语义 token(`--icen-token-accent`),不消费原始色值。语义层的存在让"换肤"成为改语义映射,而不是改组件。
14
+ 4. **几何同心**:嵌套圆角共圆心(内圆角 = 外圆角 − 间距)。视觉上的"不对齐"比"没设计"更廉价。
15
+ 5. **克制动效**:动效是语义(抬升=可及、脉冲=活动、渐隐=去权),不是装饰。所有动画 ≤320ms,`prefers-reduced-motion` 归零,触屏无 hover 漂浮。
16
+ 6. **密度弹性**:同一组件在紧凑管理台与宽松营销页都成立。密度是连续标尺(`--icen-density-*`),不是两套断点。
17
+ 7. **无障碍底线是设计的一部分**:AA 对比度是硬约束(accent 明度三档由此而来)、焦点环永可见、状态不只靠颜色传达(图标/文字/形状冗余编码)。
18
+ 8. **明暗同构**:dark 不是反色,是同一空间换了灯光。同一组件在两态下结构、节奏、层级完全一致,只有"光照"变化。
19
+
20
+ 正交轴:**主题配色 × 原语 × 明暗 × 密度** 四个轴自由组合,任何一轴的切换不应破坏其它轴的决策。现代同时是默认原语与默认主题的名字;另有中式、苏式、像素三套原语。
21
+
22
+ ---
23
+
24
+ ## 1. 色彩
25
+
26
+ ### 1.1 语义纪律
27
+ - 语义色只有五个:success 绿 / warning 黄 / error 红 / info 蓝 / accent 品牌色。语义色不表达装饰,只表达含义;装饰用中性层(fill-1/2、line-soft)。
28
+ - 中性阶梯是界面骨架:`bg → bg-soft → surface → surface-strong`(明度递进),`text → text-muted → text-faint`(注意力递减),`line-soft → line → line-strong`(分隔强度递进)。三级皆有意图:soft 是"分区"、line 是"边界"、strong 是"结构"。
29
+ - 派生色一律 `color-mix()` 从 token 现场推导(`accent-subtle = accent 14%`),不写死第二个色值——单一事实源在色彩上的体现。
30
+
31
+ ### 1.2 accent 明度三档
32
+ | 档 | 角色 | 用于 |
33
+ |---|---|---|
34
+ | `accent` 亮档 | 品牌色 | 图标、边框、数据可视化等纯图形面 |
35
+ | `accent-strong` | 承文本填充 | 实心按钮/选中态等「accent 底 + on-accent 字」的面(AA 硬达标) |
36
+ | `accent-text` | 浅底文字 | 链接、弱强调文本 |
37
+
38
+ `--icen-token-on-accent` 是填充上的文字色:浅色模式多为白字深底;深色模式翻转为亮底深字(Material You 夜间惯例)。**承文本填充面禁止消费 accent 亮档**(守卫红线的设计理由:2.96:1 的品牌脸事故)。
39
+
40
+ ### 1.3 业界参照
41
+ GitHub Primer 的语义色纪律、Radix Colors 的阶梯尺、Stripe 的"深档承文本"按钮。六套主题共享同一语义骨架;主题改变配色,原语决定几何、材质、排版与动效。
42
+
43
+ ---
44
+
45
+ ## 2. 几何(圆角与线)
46
+
47
+ ### 2.1 圆角六档职责
48
+ | 档 | 现代默认值(随 design-radius 联动) | 职责 |
49
+ |---|---|---|
50
+ | `xs` | 5px | 微型件内角:复选框、菜单项、日期格、小标签 |
51
+ | `sm` | 8px | 控件:按钮、输入框、选择器 |
52
+ | `md` | 10px | 内嵌块、大控件 |
53
+ | `lg` | 14px | 卡片、面板、菜单与 popover |
54
+ | `xl` | 20px | 弹窗与页面级展示面 |
55
+ | `full` | 999px | **胶囊语义专用**(跑道形) |
56
+
57
+ ### 2.2 同心圆法则(Concentric Corners,取法 Apple HIG)
58
+ 嵌套圆角必须共圆心:**`R_inner = R_outer − gap`**(gap = 两层间距/padding)。
59
+
60
+ ```css
61
+ .card { border-radius: var(--icen-radius-lg); padding: 12px; }
62
+ .card .thumb { border-radius: calc(var(--icen-radius-lg) - 12px); } /* 同心 */
63
+ ```
64
+
65
+ - 同心结果小于 0 时内层**直角**(0),不要出现 1–3px 的"近似圆角差"——那是视觉噪声。
66
+ - `calc()` 不保档位时允许,但外层必须 token。
67
+ - 守卫强制:禁裸 999px、禁撞档裸值(6/8/10/12/16)、微构件裸值须登记。
68
+
69
+ ### 2.3 胶囊与正圆的区分
70
+ - `full`(999px 跑道形)只给**胶囊语义件**:pill / badge / chip / switch 轨道与拇指 / 进度与 slider 轨道 / 分段控件。胶囊的水平拉伸语义是"可延展的容器"。
71
+ - `50%` 只给**几何正圆**:avatar、状态点、图标底。正圆的语义是"点",不是"容器"。
72
+ - **容器永不用 full**:跑道形卡片是业余信号。modal/popover/panel/card 走 xs–xl 档。
73
+
74
+ ### 2.4 线的角色
75
+ 线(hairline)优先于阴影:能用 1px `line-soft` 分区就不用投影分隔。阴影只表达"海拔"(浮起),不表达"边界"。`dashed` 线表达"待定/可投放"(拖放区、占位)。
76
+
77
+ ---
78
+
79
+ ## 3. 深度与海拔
80
+
81
+ 四层模型(从低到高):`canvas(页面底)→ panel/sidebar(分区)→ card/control(内容件)→ overlay(浮层)`。
82
+
83
+ - 每个海拔有对应的 surface 色 + 阴影档(`shadow-card → shadow-elevated → shadow-overlay`)+ 可选 glow。
84
+ - **dark 模式减影加光**:深色下阴影不可见,海拔靠 surface 明度阶梯 + glow(accent-glow 微光)表达。直接复用浅色阴影是 dark 模式最常见的败笔。
85
+ - 浮层才投影。页面内静态件只用线与 surface 差分层。
86
+ - 参照:Fluent 的 elevation 分层、Material 3 的 tonal elevation(我们不用 tint 叠层,用明度阶梯+glow)、Linear 的克制。
87
+
88
+ ## 4. 动效
89
+
90
+ - 三档时长:`tx-fast`(≈120–160ms,微反馈:hover/按压)、`tx-normal`(≈200–240ms,状态切换:展开/切换)、`tx-slow`(≤320ms,入场/大位移)。UI 反馈永不超 320ms——超过即动画,不是反馈。
91
+ - 缓动选型:进场 `ease-out`(快入慢停,回应感)、退场略快于进场、循环脉冲用 `ease-in-out`。
92
+ - 语义映射:`translateY(-N)` 抬升 = 可交互/可及;`pulse` 脉冲 = 进行中活动;`fade` = 出现/消失;`pop-in` = 新内容到达。
93
+ - 红线:`prefers-reduced-motion` 下全部压 0ms;`pointer: coarse` 下关 hover 抬升;`forced-colors` 保留焦点环。
94
+ - 参照:Material 的 emphasized easing、Apple 的弹簧哲学(CSS 里以 ease-out 近拟)、业界动效疲劳的教训(Stripe/Linear 的动效时长都极短)。
95
+
96
+ ## 5. 字体排印
97
+
98
+ - 三族分工:`--icen-font-body`(界面与 prose)/ `--icen-font-mono`(代码、标识、需要等宽的数字)/ `--icen-font-heading`(标题)。现代的 body 与 heading 默认使用系统无衬线;像素原语决定自己的排版。数值对齐优先使用 tabular-nums,无需把所有界面文字改为等宽。
99
+ - **CJK 纪律**:小字号中文不走宋体/通用 monospace 回退(糊);中文正文 ≥12px;数据用 tabular-nums。
100
+ - 字号/行高由 density token 出(`--icen-density-font-size-*`),组件不写死字号。
101
+ - 行长纪律:prose 60–75 字符;表单标签与控件同行(水平表单)或顶置(纵向表单)二选一不混用。
102
+ - 参照:IBM Plex 的"工程感人文"、Apple SF 的中性、iA 的行长研究。
103
+
104
+ ## 6. 密度
105
+
106
+ - 密度是连续标尺不是断点:`--icen-density-space-*` / `--icen-density-font-size-*` / `--icen-density-input-height-*` 三族联动。
107
+ - 档位语义:`compact`(管理台/数据密集型)/ `normal`(默认)/ AI 族另有 `summary`(压淡次要信息,纯 CSS 实现)。
108
+ - compact 是"信息密度",不是"缩小"——触控底线 40px 在任何档都不破(触屏守卫)。
109
+ - 参照:Carbon 的 density 系统、Salesforce 的 compact 变体。
110
+
111
+ ## 7. 图标
112
+
113
+ - 线性图标族:`viewBox="0 0 24 24"`、stroke currentColor、stroke-width 2(通用)/ 1.5(kb 族细线)、圆头线帽。
114
+ - **尺寸契约**:图标 svg 必须自带 `width/height` 属性或有 CSS 类尺寸约束——无尺寸 svg 在 CSS 失效时会失控(默认 300×150)。这是血泪条款。
115
+ - `xmlns` 必备(DOMParser XML 严格解析的空命名空间陷阱——svg-parse 单点已兜底,作者仍应写全)。
116
+ - 图标不携带文字意义(旁边必有文本或 aria-label);状态图标用语义色。
117
+
118
+ ## 8. 材质与预设哲学(六套预设的人格)
119
+
120
+ | 预设 | 材质隐喻 | 气质 | 关键决策 |
121
+ |---|---|---|---|
122
+ | **modern** 现代 | 瓷面 × 柔光 | 清透、精确、安静 | 中性瓷白、冷蓝动作、冷调石墨夜间;独立校准 |
123
+ | **dongyun** 东韵 | 绢本 × 青瓷 × 沉墨 | 温润、疏朗、克制 | 宣纸暖白与低饱和青瓷,细边界和轻微纸面层次 |
124
+ | **jugou** 巨构 | 混凝土 × 搪瓷 × 氧化铁 | 坚实、纪念性、结构感 | 石灰白与炭黑承重,深朱红只标记关键动作 |
125
+ | **piano** 钢琴 | 象牙琴键 × 乌木 × 大漆 | 精致、对比、仪式感 | 高对比黑白骨架、金棕点缀(金底乌木字是 AA 设计)、漆面冷反光 glow |
126
+ | **monet** 莫奈 | 睡莲 × 水面柔光 | 静谧、通透、含蓄 | 蓝绿水面的柔光层叠,紫调只作含蓄点缀;取自莫奈《睡莲》 |
127
+ | **vangogh** 梵高 | 麦田 × 星空 × 杏花 | 浓烈、厚涂、浪漫 | 高饱和黄蓝对撞;粉底深字(杏花气质)——亮色承深字而非白字 |
128
+
129
+ 每套预设都必须是**完整 token 面**(12 base + glow + derived + semantic + fill + shadow + outline + depth + scrollbar),不是改六个色——换预设 = 换材质,不是换滤镜。新增预设的完整清单见 `colors.css` 头注释与本文件 §11。
130
+
131
+ ## 9. 原语(与配色主题独立)
132
+
133
+ - **现代 modern**(默认):连续几何、系统排版、轻盈材料、双层柔影。
134
+ - **中式 chinese**:低曲率轮廓、宋体展示字、舒展行距、纤细边线与浅淡纸面投影;小字号和密集信息仍用无衬线。
135
+ - **苏式 soviet**:方正体块、凝练展示字、清楚结构线、定向投影与短促反馈;力量来自比例而非装饰符号。
136
+ - **像素 pixel**:整数网格、中英文点阵、实色材料、直角与阶梯投影、机械按压。
137
+ - 现代同时是一套独立的瓷白+冷蓝主题。六个主题均可与四套原语组合。
138
+ - 最新架构、种子与配方以 `design-primitives.md` 为准。
139
+
140
+ ## 10. 业界对标矩阵(我们取法谁,以及不抄什么)
141
+
142
+ | 维度 | 取法 | 不抄 |
143
+ |---|---|---|
144
+ | 圆角同心 | Apple HIG concentric corners | iOS 超大圆角泛滥(圆角过敏) |
145
+ | 语义色 | GitHub Primer | Material 的 60+ 语义角色(学习成本爆炸) |
146
+ | 明度阶梯 | Radix Colors 12 步 | 不强制 12 步——三级有意图的阶梯够用 |
147
+ | 海拔分层 | Fluent / Material tonal | Material 3 的 tonal overlay tint(污染品牌色) |
148
+ | 动效 | Material emphasized + Linear 克制 | 弹簧物理库的过度弹性(UI 不是玩具) |
149
+ | 密度 | Carbon / Salesforce | Salesforce 的三档断点跳跃(我们要连续标尺) |
150
+ | 暗色 | Apple Dark Mode 重打光 | 简单反相/降亮度 |
151
+ | 主题架构 | Radix Themes / shadcn token 面 | CSS-in-JS 运行时主题(性能与闪烁) |
152
+ | 无障碍 | Shopify Polaris 的"内建而非选配" | 事后补钉式 a11y |
153
+
154
+ ## 11. 统一覆盖架构(消费方怎么改我们)
155
+
156
+ 三层覆盖面,从轻到重:
157
+
158
+ **① 旋钮面(改几个变量)**——90% 定制只需动少数旋钮:
159
+
160
+ ```css
161
+ /* 你的样式表(无层,恒赢库的三层 @layer) */
162
+ :root {
163
+ --icen-token-accent: #5b6ee1; /* 品牌色换档(strong/text 建议同步) */
164
+ --icen-token-accent-strong: #4353c8;
165
+ --icen-token-accent-text: #3a49b8;
166
+ --icen-radius-md: 6px; /* 全局圆角基准降一档 */
167
+ }
168
+ ```
169
+
170
+ 高频旋钮清单:`accent 三档` / `radius 六档` / `--icen-density-*` 三族 / 字体三族 / `tx-*` 动效三档 / `--icen-token-text-muted|faint`。文档站「定制」页的主题工作台可在线调这些旋钮并生成这段 CSS。
171
+
172
+ **② 预设作者面(写新一套)**:在 `themes.json` 新增完整明暗色板与材料参数,运行 `bun run colors`;运行时、站点与导出自动同步。要求:明暗双面完整、accent 三档实测 AA、语义五色齐备、depth 阶梯完整。
173
+
174
+ **③ 正交组合面**:`<html data-icen-preset="dongyun" data-icen-theme="dark" data-icen-style="chinese">` + 容器级 `data-icen-density="compact"`——四轴自由组合。
175
+
176
+ 兜底纪律:`@layer icen.tokens/base/components` 保证消费方无层样式恒赢;Tokens Studio / Figma Variables 导出(`bun run design-tokens`)让设计稿与代码同值。
177
+
178
+ ## 12. 红线(违反 = 守卫/评审必打回)
179
+
180
+ 1. 组件写死颜色/圆角/间距/字号/时长(绕过 token)。
181
+ 2. 承文本填充面消费 `accent` 亮档(必须 `accent-strong`)。
182
+ 3. 容器用 `full` 跑道形圆角;正圆用 999px(应 50%)或反之。
183
+ 4. 嵌套圆角不共圆心且无豁免注释。
184
+ 5. 动效超 320ms / 无 reduced-motion 归零 / 触屏 hover 漂浮。
185
+ 6. 图标 svg 无尺寸契约、缺 xmlns。
186
+ 7. dark 模式直接复用浅色阴影(不打光改明度阶梯)。
187
+ 8. 语义五色之外发明第六种"语义色"。
188
+ 9. 状态只靠颜色传达(无图标/文字/形状冗余)。
189
+ 10. 截断不声明(裸 nowrap 无省略号是文本 bleed 事故的同义词)。
@@ -0,0 +1,196 @@
1
+ # 设计原语与「现代」
2
+
3
+ 现代(modern)是 ICEN UI 的第一套完整设计方案。它把材料、字体、几何、密度、光影与反馈组织成同一套规则:内容安静,操作轻盈。它不宣称在主观审美上胜过某个平台;验收对象是可读性、层次、定制成本与真实交互品质。
4
+
5
+ ## 启用
6
+
7
+ ```css
8
+ @import '@icen.ai/ui/tokens.css';
9
+ @import '@icen.ai/ui/base.css';
10
+ @import '@icen.ai/ui/components/btn.css';
11
+ ```
12
+
13
+ ```html
14
+ <html lang="zh-CN" data-icen-preset="modern">
15
+ ```
16
+
17
+ 明暗继续使用 `data-icen-theme="dark"`;去掉这个属性就是亮色。支持 SSR,把属性在首屏直接写入 HTML 即可,无需客户端初始化。若产品跟随系统,在自己的首屏主题脚本中解析系统偏好。`data-icen-preset` 必须挂在 html,body portal 的菜单与弹窗才能继承同样的原语。
18
+
19
+ 主题与原语是独立轴:`data-icen-preset` 选择配色主题,`data-icen-style` 选择原语。现代同时是默认主题和默认原语;另有中式、苏式、像素三套原语。共六套主题:现代、东韵、巨构、钢琴、莫奈、梵高;modern 为默认原语。
20
+
21
+ ## 四层结构
22
+
23
+ 1. **作者种子** `--icen-design-*`:品牌色、表面、文字、几何、节奏、字体、材料参数。
24
+ 2. **语义映射**:推导已有 `--icen-token-* / --icen-radius-* / --icen-density-*`,让现有组件受益。
25
+ 3. **材料角色**:content / chrome / floating,共享边缘、实面和阴影配方。
26
+ 4. **组件适配**:按钮、输入、分段选择、菜单、弹窗等,处理仅靠变量无法表达的细节。
27
+
28
+ 现代主题为中性瓷白+冷蓝,独立校准,不继承其它主题的配色。
29
+
30
+ 代码真相:`src/tokens/themes.json` 是全部主题的明暗配色与材料参数,`colors.css` 是生成的语义映射;`src/tokens/design.css` 是原语的几何与光影配方;`src/components/material.css` 是材料与组件规则;`src/behaviors/design.ts` 是可选的品牌编译 API。材料规则随 tokens.css 进入 icen.components layer,单组件按需引入同样成立,不要求导入全量 ui.css。不写属性时也默认使用现代。
31
+
32
+ ## 材料
33
+
34
+ ```html
35
+ <article data-icen-material="content">正文、表格、表单</article>
36
+ <nav data-icen-material="chrome">导航和工具栏</nav>
37
+ <aside data-icen-material="floating">临时操作</aside>
38
+ ```
39
+
40
+ | 角色 | 背景 | 光与影 | 用途 |
41
+ | --- | --- | --- | --- |
42
+ | content | 不透明 | 轻边界,不投影 | 阅读与编辑 |
43
+ | chrome | 不透明 | 顶部微光 | 导航与操作 |
44
+ | floating | 不透明 | 接触影+环境影+顶部微光 | 临时面板 |
45
+
46
+ 布局、定位和内边距归业务页面。材料不携带固定宽高,不强行让所有内容成为卡片。`data-icen-material` 的通用外轮廓使用 lg 圆角;需要贴边的站栏可由布局覆盖。
47
+
48
+ modern 的内容、操作与临时面板始终使用不透明表面,不启用背景模糊。`glass-*` 参数保留供自有材料和既有品牌配方兼容使用;不会让 modern 的标准操作面变成玻璃。`prefers-reduced-transparency: reduce` 与 `<html data-icen-transparency="reduced">` 继续提供跨原语的实面降级。
49
+
50
+ ## 修改与新增品牌
51
+
52
+ 简单微调只写 CSS,消费方无 layer 的样式优先于库:
53
+
54
+ ```css
55
+ :root[data-icen-preset="modern"] {
56
+ --icen-design-radius: 12px;
57
+ --icen-design-glass-blur: 16px;
58
+ }
59
+ ```
60
+
61
+ 任何合法的新名字都可以复用配方。它默认继承现代种子;独立品牌建议提供完整明暗文字与表面色,并按需求替换语义色。
62
+
63
+ ```css
64
+ :root[data-icen-preset="my-brand"] {
65
+ --icen-design-accent: #244f87;
66
+ --icen-design-accent-strong: #244f87;
67
+ --icen-design-accent-text: #244f87;
68
+ --icen-design-on-accent: #ffffff;
69
+ --icen-design-radius: 12px;
70
+ }
71
+ :root[data-icen-preset="my-brand"][data-icen-theme="dark"] {
72
+ --icen-design-accent: #aac9f1;
73
+ --icen-design-accent-strong: #aac9f1;
74
+ --icen-design-accent-text: #aac9f1;
75
+ --icen-design-on-accent: #18283f;
76
+ }
77
+ ```
78
+
79
+ 更完整的品牌可以用可选 API 编译 CSS,适用于构建时、SSR 或浏览器。它要求两套明暗基础色,验证正文/辅助文字/链接在 canvas 与 surface 上、按钮标签在 accent 上都至少达到 4.5:1。颜色接受不透明的六位 hex,避免无法确定合成背景的对比度估计。
80
+
81
+ ```ts
82
+ import { createDesign, mountDesign, setDesign } from '@icen.ai/ui/behaviors/design';
83
+
84
+ const brand = createDesign({
85
+ name: 'my-brand', radius: 12, space: 4, controlHeight: 40,
86
+ fontSize: 14, glassOpacity: 86, glassBlur: 18,
87
+ light: {
88
+ canvas: '#f5f6f8', surface: '#ffffff',
89
+ ink: '#202124', muted: '#616671',
90
+ accent: '#244f87', onAccent: '#ffffff',
91
+ },
92
+ dark: {
93
+ canvas: '#15171b', surface: '#25282e',
94
+ ink: '#f2f4f7', muted: '#aeb5c2',
95
+ accent: '#aac9f1', onAccent: '#18283f',
96
+ },
97
+ });
98
+
99
+ // 构建时:把 brand.cssText 写入自己的品牌样式表。
100
+ // 浏览器:也可动态挂载,支持可选 CSP nonce;卸载函数只移除这份样式。
101
+ const unmount = mountDesign(brand);
102
+ setDesign(brand.name);
103
+ // 恢复现代主题:setDesign(null); unmount();
104
+ ```
105
+
106
+ `createDesign` 不自动改写作者颜色;对比度不够时抛错。工作室里的颜色选择器会演示按明暗分别调节色调的做法,导出的是处理后的真实配方。`mountDesign` 的参数应来自可信作者代码;它不是用于渲染任意终端用户 CSS 的安全沙箱。CSP 不允许内联样式时使用静态 CSS;需要内联时可传 `mountDesign(brand, nonce)`。
107
+
108
+ ## 作者旋钮
109
+
110
+ | 名称(均以 --icen-design- 开头) | 现代亮 / 暗默认 | 意义 |
111
+ | --- | --- | --- |
112
+ | canvas / surface | #f5f6f8 / #fff;#15171b / #25282e | 页面与内容面 |
113
+ | ink / muted | #202124 / #616671;#f2f4f7 / #aeb5c2 | 正文与辅助字 |
114
+ | accent / on-accent | #0062cc / #fff;#89b9ff / #10223c | 动作与按钮文字 |
115
+ | success / warning / error / info | 明暗各有独立值,见源码 | 语义色 |
116
+ | radius | 10px | 六档轮廓的共同起点 |
117
+ | space | 4px | 布局节奏单位 |
118
+ | control-height | 34px | 标准操作高度(density compact 28 / comfortable 38) |
119
+ | font-size / font | 13px / 系统无衬线 | 界面阅读基准;中文下限 12px |
120
+ | glass-opacity / glass-blur | 84% / 24px;90% / 24px | 自有材料的兼容参数,modern 标准组件不消费模糊 |
121
+ | shadow-color / shadow-strength | 中性灰 11%;黑 28% | 接触影与环境影 |
122
+ | light / highlight-strength | 白 70%;白 9% | 表面边缘光 |
123
+ | edge-strength | 12% / 14% | 材料边界 |
124
+ | motion | 1 | 动效比例,0 为静止 |
125
+
126
+ CSS 作者可以直接覆盖全部种子;类型 API 暴露常用旋钮,并对数值范围进行检查。需要新材料配方时,用自有 data 属性消费既有语义 token,或扩展材料文件中的角色;无需复制每个组件。
127
+
128
+ ## 现代的具体判断
129
+
130
+ - **文字**:界面系统无衬线;代码单独等宽;数据才使用 tabular-nums。取消全局 Numeric Math 混排。正文阅读可在业务排版中提高到 16px。
131
+ - **几何**:xs/sm/md/lg/xl 为 5/8/10/14/20px,从共同基准推导。控件 8px、卡片与面板 14px、弹窗 20px;贴合内外轮廓同心,独立控件保留自身半径。分段选择内角扣掉外壳 padding 与边框。
132
+ - **密度**:normal / compact / comfortable 改变间距和控件高度,不缩小文字;嵌套密度可恢复 normal。触摸环境控件至少 44px。KB 行内操作使用 `--icen-density-item-height`(normal 28 / compact 24 / comfortable 32px),嵌套密度重新计算字号角色。
133
+ - **反馈**:hover 以中性变化为主,主要动作用品牌色;键盘焦点始终明确。按压轻缩放,减少位置漂移。
134
+ - **选择**:分段选择使用中性表面和接触影,不把每次选择都变成品牌强调。
135
+ - **光照**:暗色保留遮挡阴影,降低高光并重新设置边缘,避免照搬亮色投影。
136
+ - **降级**:不支持 backdrop-filter、减少透明、减少动效、高对比度模式都有明确路径。
137
+
138
+ ## 验收与边界
139
+
140
+ 工作室 `/modern/` 使用库的真实 CSS 与行为,不是图片。三个场景覆盖资料保存、开关、资料搜索、新建笔记、菜单 portal、弹窗和本地对话反馈;不连接真实账户或 AI 服务。配方编译 API、DOM 生命周期与浏览器用例见 `tests/{unit,dom}/design.test.ts` 和 `tests/e2e/design.pw.ts`。
141
+
142
+ 框架、用户字体和背后内容可能改变最终阅读效果;品牌作者仍应在目标系统与复杂背景中检查。任何“极其优雅”或“胜过 Apple”的判断都需要人的实际使用评审,本实现不以测试通过冒充审美结论。
143
+
144
+ ## 像素原语
145
+
146
+ `<html data-icen-preset="modern" data-icen-style="pixel">`。顶部原语菜单可独立切换现代/中式/苏式/像素。
147
+
148
+ 像素采用 4px 网格、12px 原生中英文点阵、24/36/48px 标题、直角、2px 轮廓、2/4/8px 阶梯投影、机械按压和局部排线。内容与浮层都不透明,所有颜色继承当前主题;不附加 CRT 扫描线或闪烁。代码见 `src/tokens/pixel.css`,适配见 material.css。Fusion Pixel Font 按 OFL 1.1 本地分发,版本、校验和与上游许可证见 `src/fonts/README.md`。
149
+
150
+ 运行时使用 `setPrimitive("pixel")`;自建原语先 `registerPrimitive("brand-shape")`,再用 `[data-icen-style="brand-shape"]` 覆盖几何、字体、光影参数。主题仍单独由 setTheme({preset:...}) 选择。
151
+
152
+ 现代实现以内容/操作分层、同心几何、文字可读性为准则;使用稳定实面、细边与接触影建立空间。
153
+
154
+ ## 中式与苏式原语
155
+
156
+ **中式 chinese** 从宋式器物的比例与书卷的疏朗出发:纤细边界、低曲率轮廓、宋体标题、舒展行距和浅淡投影。表单正文保留清楚的界面字体;标题负责书写气息,操作保持安静而明确。推荐与宣纸、青瓷、朱砂组成的「东韵 dongyun」主题搭配。
157
+
158
+ **苏式 soviet** 从构成主义与纪念建筑的结构出发:方正轮廓、有分量的字重、清楚的分区和定向投影;主次通过比例与结构线建立。推荐与石灰岩、炭黑、氧化红组成的「巨构 jugou」主题搭配。
159
+
160
+ ```ts
161
+ setTheme({ preset: 'dongyun' });
162
+ setPrimitive('chinese');
163
+ // 两轴分别控制;保留东韵配色也可以切换苏式几何。
164
+ setPrimitive('soviet');
165
+ ```
166
+
167
+ 两套原语的几何与排版分别位于 `src/tokens/chinese.css`、`src/tokens/soviet.css`,组件适配位于 `src/components/material-chinese.css`、`src/components/material-soviet.css`。与现代、像素相同,随 tokens.css 分发;切换不会强制修改当前配色与明暗,首屏恢复、跨页面与跨标签页使用同一持久化状态。
168
+
169
+ ## 六套主题的校准
170
+
171
+ | 主题 | 日间 | 夜间 | 材料取向 |
172
+ | --- | --- | --- | --- |
173
+ | 现代 | 瓷白、清晰冷蓝 | 冷调石墨、浅蓝动作 | 清透、柔光,弱化边框 |
174
+ | 东韵 | 宣纸、青瓷与朱砂 | 深墨、温润玉色 | 纸与瓷的细腻层次,疏朗而克制 |
175
+ | 巨构 | 石灰岩、炭黑与氧化红 | 深炭、暖石与朱红 | 厚重实色,清楚的结构层次 |
176
+ | 钢琴 | 象牙白、乌木字、克制金棕 | 黑漆、香槟金 | 清晰边缘与细薄反光 |
177
+ | 莫奈 | 青灰水面、睡莲绿 | 深潭蓝绿、微光紫意 | 低反光、柔光,紫调含蓄 |
178
+ | 梵高 | 麦色画布、钴蓝动作 | 深蓝、星光金 | 保留暖冷对照,控制大面积饱和度 |
179
+
180
+ 每套显式配置 bg / surface / raised 三层,正文/辅助/次要文字、文字强调和四类语义色在三层均验证 4.5:1;按钮另验 accentStrong × onAccent。图形强调、按钮填充、文字强调分别配置,使用原语或更换主题不会混淆其职责。
181
+
182
+ 原始目录可通过 `@icen.ai/ui/tokens/themes.json` 读取。编辑本仓库主题先改目录,再运行 `bun run colors`;CSS 构建和 DTCG 导出也会确保生成文件新鲜。自定义品牌 API 会自动补齐强调色三个角色,手写 CSS 时应明确同时配置这三档。
183
+
184
+ ## 操作符号与显隐节奏
185
+
186
+ 界面图标采用同一套原创 SVG 光学网格。DOM、SSR 和 CSS mask 读取同一份路径,避免图标字体受平台字形、基线和字重影响。共享入口:
187
+
188
+ ```ts
189
+ import { createIcon, iconHTML } from '@icen.ai/ui/kit/icon';
190
+ button.append(createIcon('close')); // button 自己提供 aria-label
191
+ const html = iconHTML('check', { size: 16, label: '已完成' });
192
+ ```
193
+
194
+ 次要操作占用稳定的命中槽位,通过 opacity 和轻微缩放出现;不会推开内容。键盘 focus-within 与 hover 等价,触屏没有 hover 时持续可见。主要入口与关键状态持续可见。多动作控件分别保留展开和清除槽位,不能通过重复末端 padding 把图标挤入文字区。级联面板按列扩展并限制在视口内,内部滚动不得带动文档。
195
+
196
+ 图形保持克制、可辨认和对齐;参考 [Apple 的按钮设计指引](https://developer.apple.com/design/human-interface-guidelines/buttons) 中关于跨尺寸一致性的原则。具体 SVG 路径是本库自己的绘制,不依赖平台字体。