@icen.ai/ui 0.9.0 → 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.
- package/AGENTS.md +138 -80
- package/README.md +66 -91
- package/dist/base.css +208 -179
- package/dist/behaviors/accordion.mjs +8 -8
- package/dist/behaviors/ai-branch.d.mts +1 -1
- package/dist/behaviors/ai-branch.mjs +1010 -94
- package/dist/behaviors/ai-chat.d.mts +7 -7
- package/dist/behaviors/ai-chat.mjs +1071 -161
- package/dist/behaviors/ai-composer.d.mts +44 -12
- package/dist/behaviors/ai-composer.mjs +1997 -524
- package/dist/behaviors/ai-core.d.mts +1 -1
- package/dist/behaviors/ai-core.mjs +1016 -107
- package/dist/behaviors/ai-diff.mjs +1019 -127
- package/dist/behaviors/ai-feedback.d.mts +1 -1
- package/dist/behaviors/ai-feedback.mjs +1035 -126
- package/dist/behaviors/ai-panel.d.mts +8 -8
- package/dist/behaviors/ai-panel.mjs +1284 -266
- package/dist/behaviors/ai-provider.mjs +1003 -101
- package/dist/behaviors/ai-threads.d.mts +1 -1
- package/dist/behaviors/ai-threads.mjs +1068 -154
- package/dist/behaviors/ai-tool.d.mts +2 -2
- package/dist/behaviors/ai-tool.mjs +2037 -396
- package/dist/behaviors/ai-tools.d.mts +89 -16
- package/dist/behaviors/ai-tools.mjs +4448 -372
- package/dist/behaviors/autocomplete.d.mts +53 -0
- package/dist/behaviors/autocomplete.mjs +1600 -0
- package/dist/behaviors/back-top.d.mts +1 -1
- package/dist/behaviors/back-top.mjs +951 -14
- package/dist/behaviors/carousel.d.mts +1 -1
- package/dist/behaviors/carousel.mjs +906 -11
- package/dist/behaviors/cascader.d.mts +48 -0
- package/dist/behaviors/cascader.mjs +1853 -0
- package/dist/behaviors/charts.d.mts +72 -8
- package/dist/behaviors/charts.mjs +1901 -256
- package/dist/behaviors/code-block.d.mts +36 -0
- package/dist/behaviors/code-block.mjs +1611 -0
- package/dist/behaviors/command-palette.d.mts +9 -6
- package/dist/behaviors/command-palette.mjs +161 -59
- package/dist/behaviors/context-menu.d.mts +9 -8
- package/dist/behaviors/context-menu.mjs +1112 -44
- package/dist/behaviors/controls.d.mts +13 -13
- package/dist/behaviors/controls.mjs +989 -130
- package/dist/behaviors/copy.d.mts +21 -2
- package/dist/behaviors/copy.mjs +1206 -42
- package/dist/behaviors/datatable.d.mts +53 -3
- package/dist/behaviors/datatable.mjs +1963 -207
- package/dist/behaviors/date-picker.d.mts +0 -1
- package/dist/behaviors/date-picker.mjs +1340 -293
- package/dist/behaviors/design.d.mts +54 -0
- package/dist/behaviors/design.mjs +109 -0
- package/dist/behaviors/dropdown.d.mts +5 -6
- package/dist/behaviors/dropdown.mjs +262 -110
- package/dist/behaviors/events.d.mts +120 -3
- package/dist/behaviors/events.mjs +47 -2
- package/dist/behaviors/feedback.d.mts +30 -0
- package/dist/behaviors/feedback.mjs +296 -0
- package/dist/behaviors/focus.d.mts +8 -0
- package/dist/behaviors/focus.mjs +24 -0
- package/dist/behaviors/form-validate.d.mts +102 -0
- package/dist/behaviors/form-validate.mjs +6091 -0
- package/dist/behaviors/i18n.d.mts +789 -0
- package/dist/behaviors/i18n.mjs +1711 -0
- package/dist/behaviors/icons.d.mts +93 -0
- package/dist/behaviors/icons.mjs +113 -0
- package/dist/behaviors/input.d.mts +9 -1
- package/dist/behaviors/input.mjs +1056 -60
- package/dist/behaviors/kb-access.d.mts +1 -1
- package/dist/behaviors/kb-access.mjs +2129 -239
- package/dist/behaviors/kb-acl.d.mts +6 -6
- package/dist/behaviors/kb-acl.mjs +1119 -179
- package/dist/behaviors/kb-answer.mjs +2070 -418
- package/dist/behaviors/kb-audit.d.mts +1 -1
- package/dist/behaviors/kb-audit.mjs +1076 -154
- package/dist/behaviors/kb-canvas.mjs +1100 -177
- package/dist/behaviors/kb-chain.mjs +1022 -100
- package/dist/behaviors/kb-checkpoint.d.mts +1 -1
- package/dist/behaviors/kb-checkpoint.mjs +1319 -169
- package/dist/behaviors/kb-chunks.mjs +1152 -213
- package/dist/behaviors/kb-citation.d.mts +1 -1
- package/dist/behaviors/kb-citation.mjs +1201 -179
- package/dist/behaviors/kb-clarify.mjs +1058 -130
- package/dist/behaviors/kb-conflict.mjs +1041 -119
- package/dist/behaviors/kb-connector.mjs +1104 -176
- package/dist/behaviors/kb-core.d.mts +6 -1
- package/dist/behaviors/kb-core.mjs +1077 -162
- package/dist/behaviors/kb-eval.mjs +1971 -144
- package/dist/behaviors/kb-explain.d.mts +1 -1
- package/dist/behaviors/kb-explain.mjs +1024 -102
- package/dist/behaviors/kb-filter.mjs +2008 -178
- package/dist/behaviors/kb-gap.d.mts +1 -1
- package/dist/behaviors/kb-gap.mjs +1043 -121
- package/dist/behaviors/kb-hittest.d.mts +1 -1
- package/dist/behaviors/kb-hittest.mjs +1093 -150
- package/dist/behaviors/kb-metadata.mjs +1052 -130
- package/dist/behaviors/kb-passage.d.mts +2 -2
- package/dist/behaviors/kb-passage.mjs +1101 -161
- package/dist/behaviors/kb-pipeline.d.mts +2 -2
- package/dist/behaviors/kb-pipeline.mjs +1082 -162
- package/dist/behaviors/kb-qa.mjs +1088 -160
- package/dist/behaviors/kb-rerank.mjs +1047 -114
- package/dist/behaviors/kb-retrieval.mjs +2063 -224
- package/dist/behaviors/kb-review.mjs +1990 -159
- package/dist/behaviors/kb-sandbox.d.mts +1 -1
- package/dist/behaviors/kb-sandbox.mjs +1026 -104
- package/dist/behaviors/kb-segment.mjs +1111 -179
- package/dist/behaviors/kb-select.d.mts +24 -0
- package/dist/behaviors/kb-select.mjs +1989 -0
- package/dist/behaviors/kb-sources.d.mts +1 -1
- package/dist/behaviors/kb-sources.mjs +1084 -170
- package/dist/behaviors/kb-sql.d.mts +1 -1
- package/dist/behaviors/kb-sql.mjs +1143 -226
- package/dist/behaviors/kb-trace.d.mts +1 -1
- package/dist/behaviors/kb-trace.mjs +1042 -128
- package/dist/behaviors/kb-visibility.mjs +1086 -158
- package/dist/behaviors/kb-who-can.mjs +1974 -137
- package/dist/behaviors/mentions.d.mts +93 -0
- package/dist/behaviors/mentions.mjs +2152 -0
- package/dist/behaviors/modal.d.mts +4 -3
- package/dist/behaviors/modal.mjs +1055 -33
- package/dist/behaviors/nav.d.mts +1 -1
- package/dist/behaviors/nav.mjs +6 -6
- package/dist/behaviors/notification.d.mts +16 -8
- package/dist/behaviors/notification.mjs +1615 -265
- package/dist/behaviors/panel.d.mts +4 -0
- package/dist/behaviors/panel.mjs +994 -0
- package/dist/behaviors/popover.d.mts +28 -5
- package/dist/behaviors/popover.mjs +225 -24
- package/dist/behaviors/select.d.mts +5 -2
- package/dist/behaviors/select.mjs +1410 -117
- package/dist/behaviors/sidebar.d.mts +1 -1
- package/dist/behaviors/sidebar.mjs +13 -13
- package/dist/behaviors/slider.d.mts +1 -1
- package/dist/behaviors/slider.mjs +9 -9
- package/dist/behaviors/split-pane.d.mts +1 -1
- package/dist/behaviors/split-pane.mjs +7 -7
- package/dist/behaviors/suggestions.d.mts +27 -0
- package/dist/behaviors/suggestions.mjs +1089 -0
- package/dist/behaviors/svg-parse.d.mts +14 -0
- package/dist/behaviors/svg-parse.mjs +37 -0
- package/dist/behaviors/tabs.d.mts +2 -2
- package/dist/behaviors/tabs.mjs +25 -25
- package/dist/behaviors/tag-input.d.mts +23 -5
- package/dist/behaviors/tag-input.mjs +1359 -104
- package/dist/behaviors/theme-switcher.d.mts +24 -0
- package/dist/behaviors/theme-switcher.mjs +1981 -0
- package/dist/behaviors/theme.d.mts +15 -8
- package/dist/behaviors/theme.mjs +390 -28
- package/dist/behaviors/toast.d.mts +24 -25
- package/dist/behaviors/toast.mjs +1266 -88
- package/dist/behaviors/tooltip.d.mts +4 -0
- package/dist/behaviors/tooltip.mjs +378 -0
- package/dist/behaviors/tree-select.d.mts +69 -0
- package/dist/behaviors/tree-select.mjs +1907 -0
- package/dist/behaviors/tree.d.mts +1 -1
- package/dist/behaviors/tree.mjs +15 -15
- package/dist/behaviors/upload.d.mts +3 -2
- package/dist/behaviors/upload.mjs +1076 -66
- package/dist/cli.mjs +5 -6
- package/dist/components/ai-chat.css +666 -573
- package/dist/components/ai-diff.css +153 -132
- package/dist/components/ai-panel.css +351 -343
- package/dist/components/ai-tool.css +393 -238
- package/dist/components/autocomplete.css +61 -0
- package/dist/components/autocomplete.mjs +3 -0
- package/dist/components/back-top.css +34 -31
- package/dist/components/badge.css +44 -41
- package/dist/components/breadcrumb.css +67 -46
- package/dist/components/btn.css +80 -74
- package/dist/components/card.css +117 -106
- package/dist/components/cascader.css +311 -0
- package/dist/components/cascader.mjs +3 -0
- package/dist/components/chart-area.css +8 -2
- package/dist/components/chart-bar.css +95 -33
- package/dist/components/chart-gauge.css +14 -11
- package/dist/components/chart-graph.css +20 -17
- package/dist/components/chart-heatmap.css +96 -90
- package/dist/components/chart-line.css +8 -3
- package/dist/components/chart-pie.css +9 -6
- package/dist/components/chart-radar.css +8 -5
- package/dist/components/chart-scatter.css +9 -6
- package/dist/components/chart-sparkline.css +5 -2
- package/dist/components/chart-stack.css +14 -11
- package/dist/components/charts.css +164 -73
- package/dist/components/code-block.css +418 -0
- package/dist/components/code-block.mjs +4 -0
- package/dist/components/command-palette.css +138 -117
- package/dist/components/content.css +257 -251
- package/dist/components/copy.css +72 -44
- package/dist/components/datatable.css +423 -181
- package/dist/components/date-picker.css +135 -104
- package/dist/components/empty.css +68 -65
- package/dist/components/feedback.css +201 -183
- package/dist/components/form-validate.css +120 -0
- package/dist/components/form-validate.mjs +3 -0
- package/dist/components/form.css +150 -127
- package/dist/components/icon.css +102 -0
- package/dist/components/icon.mjs +3 -0
- package/dist/components/input.css +159 -104
- package/dist/components/kb-agent.css +188 -173
- package/dist/components/kb-data.css +257 -253
- package/dist/components/kb-ground.css +197 -185
- package/dist/components/kb-ingest.css +334 -350
- package/dist/components/kb-ops.css +265 -259
- package/dist/components/kb-perm.css +260 -271
- package/dist/components/kb-search.css +317 -360
- package/dist/components/kb.css +120 -109
- package/dist/components/layout.css +85 -82
- package/dist/components/material-chinese.css +73 -0
- package/dist/components/material-soviet.css +76 -0
- package/dist/components/material.css +275 -0
- package/dist/components/media.css +220 -166
- package/dist/components/mentions.css +189 -0
- package/dist/components/mentions.mjs +3 -0
- package/dist/components/menu.css +113 -105
- package/dist/components/modal.css +107 -112
- package/dist/components/nav.css +118 -115
- package/dist/components/notification.css +238 -174
- package/dist/components/pagination.css +56 -53
- package/dist/components/panel.css +66 -63
- package/dist/components/panel.mjs +1 -0
- package/dist/components/pill.css +81 -71
- package/dist/components/popover.css +67 -53
- package/dist/components/scroll-area.css +113 -110
- package/dist/components/segmented.css +146 -143
- package/dist/components/select.css +206 -186
- package/dist/components/sidebar.css +137 -127
- package/dist/components/slider.css +117 -114
- package/dist/components/split-pane.css +112 -109
- package/dist/components/stat.css +112 -106
- package/dist/components/steps.css +109 -103
- package/dist/components/switch.css +138 -134
- package/dist/components/table.css +131 -107
- package/dist/components/tabs.css +114 -108
- package/dist/components/tag-input.css +48 -133
- package/dist/components/tag.css +81 -71
- package/dist/components/theme-switcher.css +105 -0
- package/dist/components/theme-switcher.mjs +3 -0
- package/dist/components/toast.css +100 -86
- package/dist/components/toolbar.css +45 -42
- package/dist/components/tooltip.css +102 -43
- package/dist/components/tooltip.mjs +1 -0
- package/dist/components/tree-select.css +416 -0
- package/dist/components/tree-select.mjs +3 -0
- package/dist/components/upload.css +135 -92
- package/dist/fonts/LICENSES/ark-pixel/OFL.txt +96 -0
- package/dist/fonts/LICENSES/cubic-11/OFL.txt +108 -0
- package/dist/fonts/LICENSES/galmuri/LICENSE.txt +93 -0
- package/dist/fonts/OFL.txt +96 -0
- package/dist/fonts/README.md +14 -0
- package/dist/fonts/fusion-pixel-12px-zh-hans.woff2 +0 -0
- package/dist/index.d.mts +28 -14
- package/dist/index.mjs +20705 -9601
- package/dist/react.d.mts +91 -0
- package/dist/react.mjs +8208 -0
- package/dist/registry.json +130 -13
- package/dist/tokens/chinese.css +44 -0
- package/dist/tokens/colors.css +365 -1222
- package/dist/tokens/design.css +109 -0
- package/dist/tokens/dtcg.json +11198 -0
- package/dist/tokens/figma.variables.json +7017 -0
- package/dist/tokens/icon-masks.css +78 -0
- package/dist/tokens/pixel.css +50 -0
- package/dist/tokens/soviet.css +44 -0
- package/dist/tokens/style-profiles.css +36 -547
- package/dist/tokens/themes.json +308 -0
- package/dist/tokens/tokens-studio.json +6728 -0
- package/dist/tokens/typography.css +21 -18
- package/dist/tokens.css +1555 -1801
- package/dist/ui.css +11975 -9831
- package/dist/vue.d.mts +344 -0
- package/dist/vue.mjs +7781 -0
- package/docs/spec/ai-input-experience.md +75 -0
- package/docs/spec/ai-native.md +238 -147
- package/docs/spec/design-philosophy.md +189 -0
- package/docs/spec/design-primitives.md +196 -0
- package/docs/spec/kb-family.md +147 -115
- package/package.json +43 -8
- package/dist/retro-effects.css +0 -255
- package/dist/tokens/retro-effects.css +0 -255
- package/docs/research/2026-10-03-ai-kb-components.md +0 -392
- package/docs/research/2026-10-03-kb-permissions.md +0 -992
package/README.md
CHANGED
|
@@ -1,124 +1,99 @@
|
|
|
1
|
-
# @icen.ai/ui
|
|
2
|
-
|
|
3
|
-
icen.ai 全生态的统一设计系统:**设计 tokens(6 色彩预设 × 明暗双模 × 3 风格 profile)+ 无框架组件 CSS(65 组件)+ 行为 JS(70 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(65 个组件 CSS:charts 基座 + 13 个细分图表 kit + kb.css 基座 + 7 个 kb 域文件 + 4 个 AI 族合并文件);浮层尺寸统一 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,14 个 slug):ai-chat(会话容器)/ ai-message(消息行)/ ai-reasoning(推理块,流式展开完成后自动折叠一次)/ ai-composer(输入台)/ ai-tool-call(工具调用卡)/ ai-subagent(子智能体卡)/ ai-diff(差异审阅)/ ai-files(文件标签)/ ai-todo(任务清单)/ ai-context(上下文抽屉)/ ai-usage(用量条)/ ai-threads(会话线程树)/ ai-feedback(👍👎 + 理由)/ ai-branch(消息分支切换)——共享 7 态状态机与 kind 注册表,事件统一 `icen:ai-*` 前缀
|
|
11
|
-
- 知识库组件族(v0.9,32 个 slug,规格 `docs/spec/kb-family.md`):**ai 族描述思考(过程),kb 族呈现证据(知识从哪来 / 可信吗 / 怎么用);权限域呈现边界(谁能看到什么,以及为什么)**。七域——证据(kb-citation 角标三型定位 / kb-sources / kb-passage 高亮回看 / kb-conflict)、摄取(kb-pipeline / kb-chunks 分块审阅 / kb-segment / kb-connector 连接器健康 / kb-metadata / kb-qa 问答对)、检索(kb-retrieval playground / kb-filter → Mongo·OData 双 DSL / kb-rerank A/B 对比 / kb-hittest 召回测试)、问数(kb-sql / kb-answer / kb-clarify)、治理(kb-explain / kb-trace / kb-review / kb-gap / kb-eval 四级评测)、工作台(kb-canvas / kb-checkpoint 范围显式回滚 / kb-sandbox MCP 沙箱 / kb-chain)、**权限(kb-acl 继承四件套+双区 / kb-who-can view-as 原因链 / kb-access 九态申请流 / kb-audit 审计+异味 / kb-visibility admin 可见性对照器)**;契约层 `kb-core.ts`(60+ normalize,`evaluateAcl` 纯函数:先 deny→并集→默认拒绝;分数纪律与**安全呈现纪律**全族统一——对授权侧诚实、对受限侧沉默),事件统一 `icen:kb-*`
|
|
12
|
-
- 标准化内容模型 `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` 提供粗估与上下文口径
|
|
13
|
-
- ai-provider 适配层(v0.7.1 增强):五家厂商注册表(含定价表,`estimateCost` 未命中不猜价)、chat + stream 双族线协议多模态传输、审计闭环(`createAiAuditor` 条目含 cost 定价估算与 ttftMs 首 token 延迟,`renderAiAudit` 面板 + `ai-context` 抽屉审计节)、请求收尾派 `icen:ai-done`(status/usage/cost/error/durationMs/ttftMs)
|
|
14
|
-
- 绑定层 `bindComposer`(v0.7.1,「零接线全链路」):一行把 composer ↔ 消息区(renderAiMessage)↔ client(stream + 停止 + 排队续发 + 错误路径)↔ 上下文环(`usage.from: 'context'` 正确口径 / `'billing'` 计费口径 / auditor)接成闭环;不传 client 为纯状态绑定(渐进采用);附件三入口(钮选 / 粘贴 / 拖放)
|
|
15
|
-
- AI 工具体系(v0.8,`ai-tools`):UI 能力注册为模型可调用的工具(内置 `render_chart` 吃 ChartSpec 纯 JSON);`createAiToolArea` 挂载区三层控制(白名单 / max LRU / 运行时调节);模型侧 `aiToolsToOpenAI()` 直接给 tools 参数、`aiToolsManifest()` 贴 system prompt;工具回执内嵌图(output 为 chart spec → 工具卡展开区直接渲染)
|
|
16
|
-
- 事件体系(events):`onIcen` 一个入口(类型化 `IcenEventMap` + 选择器委托 + `{ within, signal, once }`)+ `emitIcen` 唯一派生口 + `setEventPolicy` 手势默认行为 + `data-gestures` 声明式手势(click/dblclick/contextmenu/longpress/text-select,位移守卫与消歧内建)
|
|
17
|
-
- 控件族(controls):`initSwitch`(开关/三态勾选/单选组)/ `initStepper` / `initSegmented` / `initSteps` / `initRating` / `initPagination` / `initTableSort`——纯 CSS 控件的行为承载与 `icen:*-change` 事件
|
|
18
|
-
- 行为: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 / ai-threads / ai-feedback / ai-branch / kb-core + 31 个 kb-*(70 个,全部 SSR 守卫 + 幂等 init + 返回销毁函数 + textContent-only)
|
|
19
|
-
|
|
20
|
-
## 使用
|
|
1
|
+
# @icen.ai/ui
|
|
21
2
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
icen.ai 的设计系统。组件、图表和 AI 界面,共用一套设计令牌——换肤不用改代码,UI 也能直接交给模型调用。无框架,零运行时依赖,MIT。
|
|
4
|
+
|
|
5
|
+
- 文档与实时演示:<https://ui.icen.ai>
|
|
6
|
+
- 安装:`bun add @icen.ai/ui`
|
|
7
|
+
|
|
8
|
+
## 快速开始
|
|
25
9
|
|
|
26
10
|
```css
|
|
27
|
-
@import '@icen.ai/ui/tokens.css';
|
|
28
|
-
@import '@icen.ai/ui/ui.css';
|
|
29
|
-
/* 可选:仅 .style-retro 下生效的像素效果层 */
|
|
30
|
-
@import '@icen.ai/ui/retro-effects.css';
|
|
11
|
+
@import '@icen.ai/ui/tokens.css'; /* 设计令牌:预设 + 明暗 + 原语 */
|
|
12
|
+
@import '@icen.ai/ui/ui.css'; /* 全部组件;也可只引 ./components/btn.css */
|
|
31
13
|
```
|
|
32
14
|
|
|
33
15
|
```html
|
|
34
|
-
<html
|
|
16
|
+
<html data-icen-preset="piano" data-icen-theme="dark">
|
|
35
17
|
```
|
|
36
18
|
|
|
37
19
|
```ts
|
|
38
|
-
import {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
renderLine, renderVBar,
|
|
45
|
-
toast,
|
|
46
|
-
} from '@icen.ai/ui';
|
|
47
|
-
|
|
48
|
-
initTheme(); // 尽早调用(或内联同步脚本防闪烁,见 accounts Base.astro)
|
|
49
|
-
setStyle('retro'); // 切风格画像(modern/retro),与主题正交
|
|
50
|
-
registerThemePreset('brand'); // 登记自建预设(宿主 CSS 先写好 .brand/.brand.dark token 面)
|
|
51
|
-
listThemePresets(); // 枚举全部预设(含注册的),UI 切换器用
|
|
52
|
-
initTabs(); // [data-tabs] > [data-tab] + [data-tab-panel] 契约;切换派发 icen:tab-change
|
|
53
|
-
initCopy(); // .copy-btn[data-copy] 委托
|
|
54
|
-
toast.ok('已保存'); // 或 toast.action('已删除', '撤销', undo);类名 .toast--success 等
|
|
55
|
-
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,直接渲染
|
|
56
26
|
```
|
|
57
27
|
|
|
58
|
-
|
|
28
|
+
每个组件一页文档,页面里就是可点的真实组件:<https://ui.icen.ai/components/>
|
|
59
29
|
|
|
60
|
-
|
|
61
|
-
import { initAiChat } from '@icen.ai/ui/kit/ai-chat';
|
|
62
|
-
import { initAiComposer, bindComposer } from '@icen.ai/ui/kit/ai-composer';
|
|
63
|
-
import { createAiClient, createAiAuditor } from '@icen.ai/ui';
|
|
64
|
-
|
|
65
|
-
initAiChat();
|
|
66
|
-
initAiComposer();
|
|
67
|
-
const auditor = createAiAuditor({ persist: 'my-audit' });
|
|
68
|
-
const client = createAiClient({ provider: 'kimi', apiKey, auditor });
|
|
69
|
-
|
|
70
|
-
// 一行接通:发送 → 消息渲染 → 流式追加 → 停止/排队续发/错误路径 → 上下文环(正确口径)
|
|
71
|
-
const binding = bindComposer(composer, {
|
|
72
|
-
client,
|
|
73
|
-
messages: chatEl.querySelector('.ai-chat-scroll'),
|
|
74
|
-
usage: { from: 'context' }, // 或 'billing' / auditor
|
|
75
|
-
});
|
|
76
|
-
```
|
|
30
|
+
## 里面有什么
|
|
77
31
|
|
|
78
|
-
|
|
32
|
+
**组件。** 129 个无框架组件——表单、浮层、导航、数据展示、反馈。纯 CSS 契约加按需行为 JS:类名统一 `.icen-*`,钩子统一 `data-icen-*`,变量统一 `--icen-*`,产物全部进 cascade layers,与任何第三方 CSS 共存零冲突。
|
|
79
33
|
|
|
80
|
-
|
|
34
|
+
**图表。** 一份 JSON,十三种图。悬停、点击、右键、图例开关全部内建,不依赖任何图表库。缩放、降采样、标记线、流式追加、PNG 导出都写在规格里。
|
|
81
35
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
36
|
+
**AI 界面。** 做 AI 产品要用的零件都在:对话、推理、工具调用、审批、任务清单、用量与审计。兼容 OpenAI / Anthropic / MCP / AI SDK 四家协议,token 和成本自动记账。一行 `bindComposer` 接通输入台、流式渲染与上下文环;UI 能力可以注册成模型直接调用的工具。
|
|
37
|
+
|
|
38
|
+
**知识库。** 32 个组件覆盖 RAG 全链路:摄取、检索、问数、治理、权限。引用可溯源,过程可观测,答案可验证;权限域对授权侧诚实、对受限侧沉默。
|
|
39
|
+
|
|
40
|
+
**主题。** 六套预设,明暗双模,现代、中式、苏式与像素四种原语,全部挂在 `<html>` 的 data 属性上。配色与原语独立:中式推荐「东韵」,苏式推荐「巨构」,也可自由组合其它主题。自建品牌只需在自家 CSS 写一块 token 面,组件代码一行不动。
|
|
86
41
|
|
|
87
|
-
|
|
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`),无需手动部署。
|
|
88
59
|
|
|
89
60
|
## 构建
|
|
90
61
|
|
|
91
62
|
```bash
|
|
92
63
|
bun install
|
|
93
|
-
bun run build
|
|
64
|
+
bun run build # tsup + CSS 拼合 + 设计 token 导出 → dist/
|
|
65
|
+
bun run verify # tsc + 守卫 + 800+ 测试 + 构建,四道门
|
|
94
66
|
```
|
|
95
67
|
|
|
96
|
-
产物:`dist/tokens.css
|
|
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 等规范无法表示的值一律跳过并打印清单,不猜、不静默。
|
|
97
78
|
|
|
98
79
|
## 目录
|
|
99
80
|
|
|
100
81
|
```
|
|
101
|
-
src/tokens/
|
|
102
|
-
src/
|
|
103
|
-
|
|
104
|
-
src/
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
# + a11y 工具类 .sr-only / .skip-link + 工具类 .mono/.dim/.faint/.numeric
|
|
109
|
-
src/components/*.css # 65 个无框架组件 CSS(4 个 AI 族合并文件 + kb.css 基座 + 7 个 kb 域文件 + chart-graph)
|
|
110
|
-
src/behaviors/*.ts # 70 个 behaviors(AI 族 11 个 + kb 族 32 个)
|
|
111
|
-
docs/spec/kb-family.md # 知识库族规格(顶层设计唯一事实源,§9 权限域)
|
|
112
|
-
docs/research/ # 两轮调研归档(组件选型 + 权限安全,100+ 来源查证)
|
|
113
|
-
scripts/build-css.ts # CSS 产物构建(拼合 + registry.json)
|
|
114
|
-
site/ # 文档站骨架(ui.icen.ai,独立 Astro 应用,含 /kb 工作台)
|
|
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/ # 构建与导出脚本
|
|
115
89
|
```
|
|
116
90
|
|
|
117
91
|
## 消费方接入
|
|
118
92
|
|
|
119
|
-
`@icen.ai/ui` 已发布 npm(OIDC trusted publishing,打 `v*` tag 即自动发版)。两种消费方式均可:
|
|
120
|
-
|
|
121
93
|
- **包引入(推荐)**:`bun add @icen.ai/ui`,按 `./tokens.css` / `./ui.css` / `./kit/<slug>` 引入。
|
|
122
|
-
- **vendor
|
|
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
|
+
## 现代原语
|
|
123
98
|
|
|
124
|
-
|
|
99
|
+
默认原语「现代」:瓷白内容面、轻盈磨砂操作层、系统排版、统一的几何节奏。想调成自己的品牌,改 `--icen-design-*` 种子即可,`createDesign` 会编译出带明暗与对比度验证的完整配方——本地文档站 `/modern/` 有实时工作台。规范与接入见 [设计原语](docs/spec/design-primitives.md)。
|