@icen.ai/ui 0.5.0 → 0.8.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 (138) hide show
  1. package/AGENTS.md +256 -0
  2. package/README.md +47 -13
  3. package/dist/base.css +31 -4
  4. package/dist/behaviors/accordion.d.mts +4 -0
  5. package/dist/behaviors/accordion.mjs +4 -3
  6. package/dist/behaviors/ai-chat.d.mts +57 -0
  7. package/dist/behaviors/ai-chat.mjs +557 -0
  8. package/dist/behaviors/ai-composer.d.mts +112 -0
  9. package/dist/behaviors/ai-composer.mjs +2032 -0
  10. package/dist/behaviors/ai-core.d.mts +151 -0
  11. package/dist/behaviors/ai-core.mjs +491 -0
  12. package/dist/behaviors/ai-diff.d.mts +53 -0
  13. package/dist/behaviors/ai-diff.mjs +282 -0
  14. package/dist/behaviors/ai-panel.d.mts +98 -0
  15. package/dist/behaviors/ai-panel.mjs +1012 -0
  16. package/dist/behaviors/ai-provider.d.mts +198 -0
  17. package/dist/behaviors/ai-provider.mjs +1055 -0
  18. package/dist/behaviors/ai-tool.d.mts +18 -0
  19. package/dist/behaviors/ai-tool.mjs +2125 -0
  20. package/dist/behaviors/ai-tools.d.mts +81 -0
  21. package/dist/behaviors/ai-tools.mjs +1658 -0
  22. package/dist/behaviors/back-top.d.mts +20 -0
  23. package/dist/behaviors/back-top.mjs +49 -32
  24. package/dist/behaviors/carousel.d.mts +4 -0
  25. package/dist/behaviors/carousel.mjs +34 -16
  26. package/dist/behaviors/charts.d.mts +250 -0
  27. package/dist/behaviors/charts.mjs +1301 -448
  28. package/dist/behaviors/command-palette.d.mts +8 -0
  29. package/dist/behaviors/command-palette.mjs +24 -12
  30. package/dist/behaviors/context-menu.d.mts +36 -0
  31. package/dist/behaviors/context-menu.mjs +6 -2
  32. package/dist/behaviors/copy.d.mts +4 -0
  33. package/dist/behaviors/copy.mjs +7 -6
  34. package/dist/behaviors/datatable.d.mts +78 -0
  35. package/dist/behaviors/datatable.mjs +54 -11
  36. package/dist/behaviors/date-picker.d.mts +4 -0
  37. package/dist/behaviors/date-picker.mjs +104 -36
  38. package/dist/behaviors/dropdown.d.mts +4 -0
  39. package/dist/behaviors/dropdown.mjs +7 -3
  40. package/dist/behaviors/input.d.mts +4 -0
  41. package/dist/behaviors/input.mjs +29 -22
  42. package/dist/behaviors/modal.d.mts +11 -0
  43. package/dist/behaviors/modal.mjs +11 -6
  44. package/dist/behaviors/nav.d.mts +7 -0
  45. package/dist/behaviors/nav.mjs +25 -9
  46. package/dist/behaviors/notification.d.mts +172 -0
  47. package/dist/behaviors/notification.mjs +243 -89
  48. package/dist/behaviors/popover.d.mts +46 -0
  49. package/dist/behaviors/popover.mjs +2 -1
  50. package/dist/behaviors/select.d.mts +4 -0
  51. package/dist/behaviors/select.mjs +131 -26
  52. package/dist/behaviors/sidebar.d.mts +4 -0
  53. package/dist/behaviors/sidebar.mjs +4 -3
  54. package/dist/behaviors/slider.d.mts +4 -0
  55. package/dist/behaviors/slider.mjs +4 -3
  56. package/dist/behaviors/split-pane.d.mts +4 -0
  57. package/dist/behaviors/split-pane.mjs +13 -13
  58. package/dist/behaviors/tabs.d.mts +8 -0
  59. package/dist/behaviors/tabs.mjs +44 -19
  60. package/dist/behaviors/tag-input.d.mts +4 -0
  61. package/dist/behaviors/tag-input.mjs +12 -3
  62. package/dist/behaviors/theme.d.mts +25 -0
  63. package/dist/behaviors/theme.mjs +3 -1
  64. package/dist/behaviors/toast.d.mts +26 -0
  65. package/dist/behaviors/toast.mjs +24 -18
  66. package/dist/behaviors/tree.d.mts +4 -0
  67. package/dist/behaviors/tree.mjs +4 -3
  68. package/dist/behaviors/upload.d.mts +4 -0
  69. package/dist/behaviors/upload.mjs +63 -26
  70. package/dist/components/ai-chat.css +1037 -0
  71. package/dist/components/ai-chat.mjs +3 -0
  72. package/dist/components/ai-composer.mjs +3 -0
  73. package/dist/components/ai-context.mjs +2 -0
  74. package/dist/components/ai-diff.css +311 -0
  75. package/dist/components/ai-diff.mjs +3 -0
  76. package/dist/components/ai-files.mjs +3 -0
  77. package/dist/components/ai-message.mjs +3 -0
  78. package/dist/components/ai-panel.css +682 -0
  79. package/dist/components/ai-reasoning.mjs +3 -0
  80. package/dist/components/ai-subagent.mjs +2 -0
  81. package/dist/components/ai-todo.mjs +2 -0
  82. package/dist/components/ai-tool-call.mjs +2 -0
  83. package/dist/components/ai-tool.css +532 -0
  84. package/dist/components/ai-usage.mjs +3 -0
  85. package/dist/components/badge.css +4 -8
  86. package/dist/components/breadcrumb.css +1 -5
  87. package/dist/components/btn.css +4 -7
  88. package/dist/components/card.css +3 -6
  89. package/dist/components/chart-bar.css +10 -0
  90. package/dist/components/chart-calendar.mjs +5 -0
  91. package/dist/components/chart-gauge.css +1 -1
  92. package/dist/components/chart-heatmap.css +40 -0
  93. package/dist/components/chart-scatter.css +24 -0
  94. package/dist/components/chart-scatter.mjs +4 -0
  95. package/dist/components/charts.css +86 -1
  96. package/dist/components/charts.mjs +1 -0
  97. package/dist/components/command-palette.css +2 -2
  98. package/dist/components/content.css +8 -9
  99. package/dist/components/copy.css +8 -8
  100. package/dist/components/datatable.css +4 -8
  101. package/dist/components/date-picker.css +3 -7
  102. package/dist/components/empty.css +0 -4
  103. package/dist/components/feedback.css +10 -17
  104. package/dist/components/form.css +13 -14
  105. package/dist/components/input.css +2 -2
  106. package/dist/components/layout.css +36 -36
  107. package/dist/components/media.css +12 -8
  108. package/dist/components/menu.css +2 -2
  109. package/dist/components/modal.css +1 -1
  110. package/dist/components/nav.css +11 -6
  111. package/dist/components/notification.css +28 -28
  112. package/dist/components/pagination.css +1 -1
  113. package/dist/components/panel.css +16 -16
  114. package/dist/components/pill.css +15 -15
  115. package/dist/components/segmented.css +5 -5
  116. package/dist/components/segmented.mjs +1 -0
  117. package/dist/components/select.css +12 -20
  118. package/dist/components/sidebar.css +1 -1
  119. package/dist/components/split-pane.css +0 -1
  120. package/dist/components/stat.css +14 -18
  121. package/dist/components/steps.css +2 -2
  122. package/dist/components/switch.css +8 -12
  123. package/dist/components/table.css +46 -47
  124. package/dist/components/tabs.css +35 -46
  125. package/dist/components/tag-input.css +4 -4
  126. package/dist/components/toast.css +16 -13
  127. package/dist/components/tooltip.css +2 -2
  128. package/dist/index.d.mts +37 -0
  129. package/dist/index.mjs +7890 -1199
  130. package/dist/registry.json +113 -4
  131. package/dist/retro-effects.css +21 -17
  132. package/dist/tokens/colors.css +4 -1
  133. package/dist/tokens/retro-effects.css +21 -17
  134. package/dist/tokens/style-profiles.css +21 -0
  135. package/dist/tokens.css +25 -1
  136. package/dist/ui.css +3168 -433
  137. package/docs/spec/ai-native.md +659 -0
  138. package/package.json +15 -5
@@ -0,0 +1,81 @@
1
+ /** 一个 UI 工具:模型可调用的可视化/交互能力 */
2
+ interface AiToolDef<TInput = unknown> {
3
+ /** 工具名(模型侧 function name;建议 snake_case) */
4
+ name: string;
5
+ /** 给模型看的一段说明(何时用、返回什么) */
6
+ description: string;
7
+ /** 输入 JSON Schema(OpenAI function.parameters / MCP inputSchema 兼容) */
8
+ inputSchema: Record<string, unknown>;
9
+ /** 执行:input → 在 mount 上渲染;返回值作为工具结果(进回执/审计) */
10
+ run: (input: TInput, mount: HTMLElement) => unknown;
11
+ /** 结果呈现:'mount'(默认,渲染即呈现)/ 'data'(run 返回值为准,不占挂载位) */
12
+ present?: 'mount' | 'data';
13
+ }
14
+ interface AiToolRecord {
15
+ def: AiToolDef;
16
+ /** 挂载元素(present='mount' 时有值) */
17
+ el?: HTMLElement;
18
+ /** render_chart 等返回的句柄(可 update/destroy) */
19
+ handle?: unknown;
20
+ ts: number;
21
+ input: unknown;
22
+ result: unknown;
23
+ }
24
+ /** 注册(或覆盖同名)一个工具;第三方扩展入口 */
25
+ declare function registerAiTool(def: AiToolDef): void;
26
+ /** 全局下架一个工具(所有区域随即不可再调用它) */
27
+ declare function unregisterAiTool(name: string): void;
28
+ declare function getAiTool(name: string): AiToolDef | undefined;
29
+ declare function listAiTools(): AiToolDef[];
30
+ interface AiToolAreaOptions {
31
+ /** 工具白名单(精确名或 'chart-*' 通配;缺省 = 全部已注册工具) */
32
+ tools?: string[];
33
+ /** 最多同时挂载数(超出 LRU 淘汰最旧;缺省不限) */
34
+ max?: number;
35
+ /** 挂载项的最小高度提示(px,默认 240) */
36
+ itemMinHeight?: number;
37
+ }
38
+ interface AiToolArea {
39
+ el: HTMLElement;
40
+ /** 当前挂载数 */
41
+ readonly count: number;
42
+ /** 调用一个工具(模型 tool_call 的落地入口):白名单外或未注册返回 null */
43
+ call(name: string, input: unknown): AiToolRecord | null;
44
+ /** 白名单内且未注册? */
45
+ can(name: string): boolean;
46
+ /** 运行时改白名单 / 上限 */
47
+ setTools(tools: string[] | undefined): void;
48
+ setMax(max: number | undefined): void;
49
+ /** 清空全部挂载 */
50
+ clear(): void;
51
+ /** 挂载变化回调(call/evict/clear 后触发) */
52
+ onChange(fn: (records: AiToolRecord[]) => void): () => void;
53
+ }
54
+ /**
55
+ * 创建 AI 工具挂载区:宿主声明「这块区域归 AI 用」——可白名单工具、限数量
56
+ * (LRU 淘汰)。每次 call 渲染为一个 .ai-tools-item 卡(标题行 = 工具名 +
57
+ * 时间 + 移除钮,体 = 工具自己的渲染)。事件 icen:ai-tool-call / -result /
58
+ * -evict(bubbles),area 上也可原生 addEventListener。
59
+ */
60
+ declare function createAiToolArea(el: HTMLElement, opts?: AiToolAreaOptions): AiToolArea;
61
+ /** 导出为 OpenAI chat.completions tools 参数格式(可传 names / 通配过滤) */
62
+ declare function aiToolsToOpenAI(names?: string[]): Array<{
63
+ type: 'function';
64
+ function: {
65
+ name: string;
66
+ description: string;
67
+ parameters: Record<string, unknown>;
68
+ };
69
+ }>;
70
+ /** 导出为 MCP tools 格式(name / description / inputSchema) */
71
+ declare function aiToolsToMcp(names?: string[]): Array<{
72
+ name: string;
73
+ description: string;
74
+ inputSchema: Record<string, unknown>;
75
+ }>;
76
+ /** 能力清单文本(贴 system prompt:可用工具 × 数据形态一览) */
77
+ declare function aiToolsManifest(names?: string[]): string;
78
+ /** 模型 tool_call 参数容错解析(JSON 字符串 / 对象直给 / 坏 JSON 返回 {}) */
79
+ declare function parseAiToolArgs(raw: unknown): Record<string, unknown>;
80
+
81
+ export { type AiToolArea, type AiToolAreaOptions, type AiToolDef, type AiToolRecord, aiToolsManifest, aiToolsToMcp, aiToolsToOpenAI, createAiToolArea, getAiTool, listAiTools, parseAiToolArgs, registerAiTool, unregisterAiTool };