@icen.ai/ui 0.5.0 → 0.8.1
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 +262 -0
- package/README.md +52 -13
- package/dist/base.css +33 -5
- package/dist/behaviors/accordion.d.mts +7 -0
- package/dist/behaviors/accordion.mjs +37 -11
- package/dist/behaviors/ai-chat.d.mts +59 -0
- package/dist/behaviors/ai-chat.mjs +580 -0
- package/dist/behaviors/ai-composer.d.mts +137 -0
- package/dist/behaviors/ai-composer.mjs +2114 -0
- package/dist/behaviors/ai-core.d.mts +156 -0
- package/dist/behaviors/ai-core.mjs +504 -0
- package/dist/behaviors/ai-diff.d.mts +53 -0
- package/dist/behaviors/ai-diff.mjs +413 -0
- package/dist/behaviors/ai-panel.d.mts +101 -0
- package/dist/behaviors/ai-panel.mjs +1087 -0
- package/dist/behaviors/ai-provider.d.mts +198 -0
- package/dist/behaviors/ai-provider.mjs +1061 -0
- package/dist/behaviors/ai-tool.d.mts +26 -0
- package/dist/behaviors/ai-tool.mjs +2173 -0
- package/dist/behaviors/ai-tools.d.mts +84 -0
- package/dist/behaviors/ai-tools.mjs +1762 -0
- package/dist/behaviors/back-top.d.mts +20 -0
- package/dist/behaviors/back-top.mjs +64 -32
- package/dist/behaviors/carousel.d.mts +7 -0
- package/dist/behaviors/carousel.mjs +72 -27
- package/dist/behaviors/charts.d.mts +296 -0
- package/dist/behaviors/charts.mjs +1364 -440
- package/dist/behaviors/command-palette.d.mts +42 -0
- package/dist/behaviors/command-palette.mjs +167 -27
- package/dist/behaviors/context-menu.d.mts +53 -0
- package/dist/behaviors/context-menu.mjs +127 -39
- package/dist/behaviors/controls.d.mts +59 -0
- package/dist/behaviors/controls.mjs +601 -0
- package/dist/behaviors/copy.d.mts +7 -0
- package/dist/behaviors/copy.mjs +41 -15
- package/dist/behaviors/datatable.d.mts +90 -0
- package/dist/behaviors/datatable.mjs +279 -53
- package/dist/behaviors/date-picker.d.mts +4 -0
- package/dist/behaviors/date-picker.mjs +276 -69
- package/dist/behaviors/dropdown.d.mts +8 -0
- package/dist/behaviors/dropdown.mjs +171 -28
- package/dist/behaviors/events.d.mts +330 -0
- package/dist/behaviors/events.mjs +208 -0
- package/dist/behaviors/input.d.mts +4 -0
- package/dist/behaviors/input.mjs +52 -32
- package/dist/behaviors/modal.d.mts +30 -0
- package/dist/behaviors/modal.mjs +87 -16
- package/dist/behaviors/nav.d.mts +7 -0
- package/dist/behaviors/nav.mjs +57 -15
- package/dist/behaviors/notification.d.mts +188 -0
- package/dist/behaviors/notification.mjs +274 -140
- package/dist/behaviors/popover.d.mts +82 -0
- package/dist/behaviors/popover.mjs +92 -5
- package/dist/behaviors/select.d.mts +6 -0
- package/dist/behaviors/select.mjs +287 -45
- package/dist/behaviors/sidebar.d.mts +7 -0
- package/dist/behaviors/sidebar.mjs +44 -13
- package/dist/behaviors/slider.d.mts +7 -0
- package/dist/behaviors/slider.mjs +55 -43
- package/dist/behaviors/split-pane.d.mts +8 -0
- package/dist/behaviors/split-pane.mjs +70 -29
- package/dist/behaviors/tabs.d.mts +9 -0
- package/dist/behaviors/tabs.mjs +102 -26
- package/dist/behaviors/tag-input.d.mts +7 -0
- package/dist/behaviors/tag-input.mjs +66 -17
- package/dist/behaviors/theme.d.mts +36 -0
- package/dist/behaviors/theme.mjs +51 -5
- package/dist/behaviors/toast.d.mts +48 -0
- package/dist/behaviors/toast.mjs +98 -25
- package/dist/behaviors/tree.d.mts +7 -0
- package/dist/behaviors/tree.mjs +39 -15
- package/dist/behaviors/upload.d.mts +4 -0
- package/dist/behaviors/upload.mjs +79 -44
- package/dist/cli.mjs +1 -1
- package/dist/components/ai-chat.css +1037 -0
- package/dist/components/ai-chat.mjs +3 -0
- package/dist/components/ai-composer.mjs +3 -0
- package/dist/components/ai-context.mjs +2 -0
- package/dist/components/ai-diff.css +311 -0
- package/dist/components/ai-diff.mjs +3 -0
- package/dist/components/ai-files.mjs +3 -0
- package/dist/components/ai-message.mjs +3 -0
- package/dist/components/ai-panel.css +682 -0
- package/dist/components/ai-reasoning.mjs +3 -0
- package/dist/components/ai-subagent.mjs +2 -0
- package/dist/components/ai-todo.mjs +2 -0
- package/dist/components/ai-tool-call.mjs +2 -0
- package/dist/components/ai-tool.css +532 -0
- package/dist/components/ai-usage.mjs +3 -0
- package/dist/components/badge.css +5 -9
- package/dist/components/breadcrumb.css +0 -36
- package/dist/components/btn.css +4 -7
- package/dist/components/card.css +3 -6
- package/dist/components/chart-bar.css +10 -0
- package/dist/components/chart-calendar.mjs +4 -0
- package/dist/components/chart-gauge.css +1 -1
- package/dist/components/chart-heatmap.css +40 -0
- package/dist/components/chart-pie.css +0 -6
- package/dist/components/chart-scatter.css +24 -0
- package/dist/components/chart-scatter.mjs +4 -0
- package/dist/components/charts.css +87 -2
- package/dist/components/charts.mjs +1 -0
- package/dist/components/command-palette.css +2 -2
- package/dist/components/content.css +11 -25
- package/dist/components/copy.css +8 -8
- package/dist/components/datatable.css +5 -9
- package/dist/components/date-picker.css +4 -8
- package/dist/components/empty.css +0 -4
- package/dist/components/feedback.css +10 -17
- package/dist/components/form.css +13 -14
- package/dist/components/input.css +2 -2
- package/dist/components/layout.css +36 -36
- package/dist/components/media.css +12 -8
- package/dist/components/menu.css +2 -2
- package/dist/components/modal.css +1 -1
- package/dist/components/nav.css +11 -6
- package/dist/components/notification.css +27 -28
- package/dist/components/pagination.css +4 -2
- package/dist/components/pagination.mjs +1 -0
- package/dist/components/panel.css +16 -16
- package/dist/components/pill.css +15 -15
- package/dist/components/rating.mjs +1 -0
- package/dist/components/segmented.css +14 -6
- package/dist/components/segmented.mjs +1 -0
- package/dist/components/select.css +79 -24
- package/dist/components/sidebar.css +1 -1
- package/dist/components/split-pane.css +0 -1
- package/dist/components/stat.css +14 -18
- package/dist/components/steps.css +15 -5
- package/dist/components/steps.mjs +1 -0
- package/dist/components/switch.css +11 -13
- package/dist/components/switch.mjs +1 -0
- package/dist/components/table.css +46 -47
- package/dist/components/table.mjs +1 -0
- package/dist/components/tabs.css +57 -45
- package/dist/components/tag-input.css +5 -10
- package/dist/components/toast.css +16 -13
- package/dist/components/tooltip.css +2 -2
- package/dist/components/upload.css +0 -15
- package/dist/index.d.mts +39 -0
- package/dist/index.mjs +11243 -3312
- package/dist/registry.json +147 -9
- package/dist/retro-effects.css +23 -32
- package/dist/tokens/colors.css +4 -1
- package/dist/tokens/retro-effects.css +23 -32
- package/dist/tokens/style-profiles.css +24 -2
- package/dist/tokens/typography.css +2 -0
- package/dist/tokens.css +30 -3
- package/dist/ui.css +3420 -645
- package/docs/spec/ai-native.md +662 -0
- package/package.json +15 -5
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { AiUsage } from './ai-core.js';
|
|
2
|
+
import { PanelSizing } from './popover.js';
|
|
3
|
+
import { AiTodoItem, AiUsageRingOpts } from './ai-panel.js';
|
|
4
|
+
import { AiClient, AiAuditor } from './ai-provider.js';
|
|
5
|
+
|
|
6
|
+
interface AiProviderModelOption {
|
|
7
|
+
id: string;
|
|
8
|
+
label: string;
|
|
9
|
+
/** 上下文窗口 token 数(如 1_000_000 → 弹层显示 1M) */
|
|
10
|
+
context?: number;
|
|
11
|
+
}
|
|
12
|
+
interface AiProviderOption {
|
|
13
|
+
id: string;
|
|
14
|
+
label: string;
|
|
15
|
+
/** 单色 SVG 字符串(经 svgIcon 消毒);缺失时用首字母圆形章(token 色) */
|
|
16
|
+
icon?: string;
|
|
17
|
+
models: AiProviderModelOption[];
|
|
18
|
+
}
|
|
19
|
+
interface AiComposerCurrentModel {
|
|
20
|
+
provider: string;
|
|
21
|
+
model: string;
|
|
22
|
+
}
|
|
23
|
+
interface AiComposerCommand {
|
|
24
|
+
name: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
/** 参数提示(如 "<path>"),弹层命令行右侧灰色展示 */
|
|
27
|
+
argsHint?: string;
|
|
28
|
+
}
|
|
29
|
+
/** 引用 kind:内置 4 种 + 开放注册;`string & {}` 保自动补全同时放行 registerRefKind 注册的任意 kind(照 charts.ts ChartTone 手法) */
|
|
30
|
+
type AiComposerRefKind = 'file' | 'folder' | 'doc' | 'agent' | (string & {});
|
|
31
|
+
interface AiComposerRefSource {
|
|
32
|
+
kind: AiComposerRefKind;
|
|
33
|
+
id: string;
|
|
34
|
+
label: string;
|
|
35
|
+
sub?: string;
|
|
36
|
+
}
|
|
37
|
+
/** 引用 kind 定义(registerRefKind 的注册面)。 */
|
|
38
|
+
interface AiComposerRefDef {
|
|
39
|
+
/** 分组标题(弹层 group label;未知 kind 兜底为 kind 原文) */
|
|
40
|
+
label: string;
|
|
41
|
+
/** 单色 SVG 字符串(经 svgIcon 消毒);缺省用通用文档图标 */
|
|
42
|
+
icon?: string;
|
|
43
|
+
/** 分组排序权重(小者在前);缺省排在已知 kind 之后(最后) */
|
|
44
|
+
order?: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 注册(或覆盖)一个引用 kind(第三方扩展入口,照 registerAiKind 的 Map + 兜底模式)。
|
|
48
|
+
* 注册后弹层分组标题/图标/排序取注册表值;未注册的未知 kind 不再静默丢弃——
|
|
49
|
+
* 标题用 kind 原文、图标用通用文档图标、排序排最后。
|
|
50
|
+
*/
|
|
51
|
+
declare function registerRefKind(kind: string, def: AiComposerRefDef): void;
|
|
52
|
+
/**
|
|
53
|
+
* 运行态切换(spec §4.3):
|
|
54
|
+
* el 传 composer 容器或其内部任意元素(含发送钮自身),就近解析 [data-ai-composer]。
|
|
55
|
+
*/
|
|
56
|
+
declare function setComposerRunning(el: HTMLElement, running: boolean): void;
|
|
57
|
+
/**
|
|
58
|
+
* 初始化 root 下的全部 [data-ai-composer](root 自身匹配时包含自身)。
|
|
59
|
+
* 幂等;返回销毁函数(复刻 initBackTop 约定)。
|
|
60
|
+
*/
|
|
61
|
+
declare function initAiComposer(root?: ParentNode): () => void;
|
|
62
|
+
/**
|
|
63
|
+
* 配置模型切换(§8):工具条出现模型钮,弹层按 provider 分组 + 搜索过滤 + 当前勾选。
|
|
64
|
+
* current 缺省取第一个 provider 的第一个模型(静默选中,不派事件)。
|
|
65
|
+
* 选择派 icen:ai-model-change {provider, model, label, context};
|
|
66
|
+
* 选中模型的 context 自动成为 setComposerUsage 的 total 默认值(显式 opts.total 优先)。
|
|
67
|
+
* providers 传空数组 = 清除配置(移除 JS 自动创建的模型钮)。
|
|
68
|
+
*/
|
|
69
|
+
declare function setComposerModels(el: HTMLElement, providers: AiProviderOption[], current?: AiComposerCurrentModel): void;
|
|
70
|
+
/**
|
|
71
|
+
* 配置斜杠命令(§8):输入开头 `/` 触发命令弹层(随输入过滤,↑↓/Enter/Tab/Esc)。
|
|
72
|
+
* 选中派 icen:ai-command {name, args} 并清空输入(命令被拦截执行、不进消息流)。
|
|
73
|
+
* commands 传空数组 = 清除配置。
|
|
74
|
+
*/
|
|
75
|
+
declare function setComposerCommands(el: HTMLElement, commands: AiComposerCommand[]): void;
|
|
76
|
+
/**
|
|
77
|
+
* 配置 @ 引用源(§8):任意位置 token 起点 `@` 触发引用弹层(按 kind 分组:内置
|
|
78
|
+
* file/folder/doc/agent,可经 registerRefKind 扩展/覆盖;未知 kind 不丢弃——通用文档
|
|
79
|
+
* 图标 + kind 原文兜底,排序缺省排最后)。
|
|
80
|
+
* 选中后文本插入 `@label ` + refs chip +1,派 icen:ai-ref {action:'add', ref};
|
|
81
|
+
* chip × 移除 chip 并删文本里首个 `@label`,派 {action:'remove', ref}。
|
|
82
|
+
*/
|
|
83
|
+
declare function setComposerRefs(el: HTMLElement, sources: AiComposerRefSource[]): void;
|
|
84
|
+
/**
|
|
85
|
+
* 配置用量环(§8):工具条右侧挂 renderAiUsageRing(点击环弹出完整分段分解)。
|
|
86
|
+
* total 缺省时用选中模型的 context(setComposerModels 闭环);显式 opts.total 优先。
|
|
87
|
+
* usage 传 null = 清除配置(移除 JS 自动创建的挂载点)。
|
|
88
|
+
*/
|
|
89
|
+
declare function setComposerUsage(el: HTMLElement, usage: AiUsage | null, opts?: AiUsageRingOpts): void;
|
|
90
|
+
/**
|
|
91
|
+
* 输入框旁的实时待办(业界模式:plan/todo 是工具调用,实时状态挂在输入区而非对话流):
|
|
92
|
+
* chip = 图标 + x/y,状态色随进度(进行中 accent / 全部完成 success / 有失败 warning);
|
|
93
|
+
* 点击弹出完整清单(popover + renderAiTodo,只读)。传 null 清除。
|
|
94
|
+
*/
|
|
95
|
+
declare function setComposerTodo(el: HTMLElement, items: AiTodoItem[] | null): void;
|
|
96
|
+
interface AiComposerBindOpts {
|
|
97
|
+
/**
|
|
98
|
+
* 传入即托管对话(client 模式):icen:ai-send → renderAiMessage 用户消息 + running +
|
|
99
|
+
* client.stream → assistant 消息 + createAiStream 逐 chunk 追加 → done 收尾(meta 自动填
|
|
100
|
+
* token/成本);错误 → setError + fail;stop → session.cancel();排队消息每轮完成自动发送。
|
|
101
|
+
* 需要 messages 容器。history 由绑定层维护(system 消息可先经 client 直接对话时自带)。
|
|
102
|
+
*/
|
|
103
|
+
client?: AiClient;
|
|
104
|
+
/** 消息挂载容器(.ai-chat-scroll 或任意元素;client 模式必填) */
|
|
105
|
+
messages?: HTMLElement;
|
|
106
|
+
/**
|
|
107
|
+
* 用量环自动更新(监听 document 的 icen:ai-done):
|
|
108
|
+
* 'context'(默认)= 上下文估算口径(ai-core contextEstimate——环语义正确);
|
|
109
|
+
* 'billing' = 请求用量累加(计费视角);传 AiAuditor 实例 = auditor.summary()。
|
|
110
|
+
* total 缺省沿用 setComposerModels 的模型 context 闭环。
|
|
111
|
+
*/
|
|
112
|
+
usage?: {
|
|
113
|
+
from: 'context' | 'billing' | AiAuditor;
|
|
114
|
+
total?: number;
|
|
115
|
+
};
|
|
116
|
+
/** 运行态自动管理(默认 true):icen:ai-send → running;icen:ai-done → 解除 */
|
|
117
|
+
running?: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* 三弹层(模型/命令/引用)尺寸的整体程序覆盖(PanelSizing 契约):
|
|
120
|
+
* 优先于 composer 根上的 data-panel-*(三弹层共用的用户覆盖面)与各弹层内置默认,
|
|
121
|
+
* 一次设置对三个弹层同时生效。
|
|
122
|
+
*/
|
|
123
|
+
popoverSizing?: PanelSizing;
|
|
124
|
+
}
|
|
125
|
+
interface AiComposerBinding {
|
|
126
|
+
/** 解绑全部监听并中止进行中的托管会话(composer 本身的 init 不受影响) */
|
|
127
|
+
unbind(): void;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* composer ↔ 消息区 ↔ client ↔ 用量环的闭环绑定(事件驱动,传输会话所有权仍归消费方)。
|
|
131
|
+
* 不传 client 时为纯状态绑定(send→running、done→解除、环更新),渐进采用。
|
|
132
|
+
* 注意:running 自动管理依赖 client 派发的 icen:ai-done;无 client 的纯事件用法需
|
|
133
|
+
* 自行派发该事件或传 running:false。
|
|
134
|
+
*/
|
|
135
|
+
declare function bindComposer(el: HTMLElement, opts?: AiComposerBindOpts): AiComposerBinding;
|
|
136
|
+
|
|
137
|
+
export { type AiComposerBindOpts, type AiComposerBinding, type AiComposerCommand, type AiComposerCurrentModel, type AiComposerRefDef, type AiComposerRefKind, type AiComposerRefSource, type AiProviderModelOption, type AiProviderOption, bindComposer, initAiComposer, registerRefKind, setComposerCommands, setComposerModels, setComposerRefs, setComposerRunning, setComposerTodo, setComposerUsage };
|