@icen.ai/ui 0.8.0 → 0.9.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 (228) hide show
  1. package/AGENTS.md +63 -14
  2. package/README.md +17 -9
  3. package/dist/base.css +4 -3
  4. package/dist/behaviors/accordion.d.mts +5 -2
  5. package/dist/behaviors/accordion.mjs +36 -11
  6. package/dist/behaviors/ai-branch.d.mts +19 -0
  7. package/dist/behaviors/ai-branch.mjs +217 -0
  8. package/dist/behaviors/ai-chat.d.mts +11 -7
  9. package/dist/behaviors/ai-chat.mjs +134 -51
  10. package/dist/behaviors/ai-composer.d.mts +28 -3
  11. package/dist/behaviors/ai-composer.mjs +399 -229
  12. package/dist/behaviors/ai-core.d.mts +9 -4
  13. package/dist/behaviors/ai-core.mjs +21 -8
  14. package/dist/behaviors/ai-diff.d.mts +2 -2
  15. package/dist/behaviors/ai-diff.mjs +172 -41
  16. package/dist/behaviors/ai-feedback.d.mts +26 -0
  17. package/dist/behaviors/ai-feedback.mjs +303 -0
  18. package/dist/behaviors/ai-panel.d.mts +26 -9
  19. package/dist/behaviors/ai-panel.mjs +211 -110
  20. package/dist/behaviors/ai-provider.mjs +54 -48
  21. package/dist/behaviors/ai-threads.d.mts +38 -0
  22. package/dist/behaviors/ai-threads.mjs +319 -0
  23. package/dist/behaviors/ai-tool.d.mts +12 -4
  24. package/dist/behaviors/ai-tool.mjs +316 -263
  25. package/dist/behaviors/ai-tools.d.mts +9 -6
  26. package/dist/behaviors/ai-tools.mjs +264 -155
  27. package/dist/behaviors/back-top.mjs +16 -1
  28. package/dist/behaviors/carousel.d.mts +5 -2
  29. package/dist/behaviors/carousel.mjs +53 -26
  30. package/dist/behaviors/charts.d.mts +170 -22
  31. package/dist/behaviors/charts.mjs +1016 -150
  32. package/dist/behaviors/command-palette.d.mts +40 -6
  33. package/dist/behaviors/command-palette.mjs +143 -15
  34. package/dist/behaviors/context-menu.d.mts +21 -4
  35. package/dist/behaviors/context-menu.mjs +122 -38
  36. package/dist/behaviors/controls.d.mts +59 -0
  37. package/dist/behaviors/controls.mjs +601 -0
  38. package/dist/behaviors/copy.d.mts +5 -2
  39. package/dist/behaviors/copy.mjs +37 -12
  40. package/dist/behaviors/datatable.d.mts +12 -0
  41. package/dist/behaviors/datatable.mjs +226 -43
  42. package/dist/behaviors/date-picker.d.mts +2 -2
  43. package/dist/behaviors/date-picker.mjs +171 -32
  44. package/dist/behaviors/dropdown.d.mts +6 -2
  45. package/dist/behaviors/dropdown.mjs +164 -25
  46. package/dist/behaviors/events.d.mts +523 -0
  47. package/dist/behaviors/events.mjs +208 -0
  48. package/dist/behaviors/input.mjs +25 -12
  49. package/dist/behaviors/kb-access.d.mts +34 -0
  50. package/dist/behaviors/kb-access.mjs +569 -0
  51. package/dist/behaviors/kb-acl.d.mts +50 -0
  52. package/dist/behaviors/kb-acl.mjs +405 -0
  53. package/dist/behaviors/kb-answer.d.mts +38 -0
  54. package/dist/behaviors/kb-answer.mjs +2055 -0
  55. package/dist/behaviors/kb-audit.d.mts +23 -0
  56. package/dist/behaviors/kb-audit.mjs +375 -0
  57. package/dist/behaviors/kb-canvas.d.mts +44 -0
  58. package/dist/behaviors/kb-canvas.mjs +589 -0
  59. package/dist/behaviors/kb-chain.d.mts +15 -0
  60. package/dist/behaviors/kb-chain.mjs +270 -0
  61. package/dist/behaviors/kb-checkpoint.d.mts +16 -0
  62. package/dist/behaviors/kb-checkpoint.mjs +342 -0
  63. package/dist/behaviors/kb-chunks.d.mts +31 -0
  64. package/dist/behaviors/kb-chunks.mjs +475 -0
  65. package/dist/behaviors/kb-citation.d.mts +38 -0
  66. package/dist/behaviors/kb-citation.mjs +677 -0
  67. package/dist/behaviors/kb-clarify.d.mts +20 -0
  68. package/dist/behaviors/kb-clarify.mjs +248 -0
  69. package/dist/behaviors/kb-conflict.d.mts +22 -0
  70. package/dist/behaviors/kb-conflict.mjs +284 -0
  71. package/dist/behaviors/kb-connector.d.mts +17 -0
  72. package/dist/behaviors/kb-connector.mjs +375 -0
  73. package/dist/behaviors/kb-core.d.mts +529 -0
  74. package/dist/behaviors/kb-core.mjs +890 -0
  75. package/dist/behaviors/kb-eval.d.mts +22 -0
  76. package/dist/behaviors/kb-eval.mjs +408 -0
  77. package/dist/behaviors/kb-explain.d.mts +11 -0
  78. package/dist/behaviors/kb-explain.mjs +243 -0
  79. package/dist/behaviors/kb-filter.d.mts +31 -0
  80. package/dist/behaviors/kb-filter.mjs +587 -0
  81. package/dist/behaviors/kb-gap.d.mts +27 -0
  82. package/dist/behaviors/kb-gap.mjs +273 -0
  83. package/dist/behaviors/kb-hittest.d.mts +34 -0
  84. package/dist/behaviors/kb-hittest.mjs +409 -0
  85. package/dist/behaviors/kb-metadata.d.mts +29 -0
  86. package/dist/behaviors/kb-metadata.mjs +326 -0
  87. package/dist/behaviors/kb-passage.d.mts +41 -0
  88. package/dist/behaviors/kb-passage.mjs +529 -0
  89. package/dist/behaviors/kb-pipeline.d.mts +18 -0
  90. package/dist/behaviors/kb-pipeline.mjs +381 -0
  91. package/dist/behaviors/kb-qa.d.mts +26 -0
  92. package/dist/behaviors/kb-qa.mjs +332 -0
  93. package/dist/behaviors/kb-rerank.d.mts +20 -0
  94. package/dist/behaviors/kb-rerank.mjs +315 -0
  95. package/dist/behaviors/kb-retrieval.d.mts +49 -0
  96. package/dist/behaviors/kb-retrieval.mjs +746 -0
  97. package/dist/behaviors/kb-review.d.mts +44 -0
  98. package/dist/behaviors/kb-review.mjs +451 -0
  99. package/dist/behaviors/kb-sandbox.d.mts +33 -0
  100. package/dist/behaviors/kb-sandbox.mjs +325 -0
  101. package/dist/behaviors/kb-segment.d.mts +32 -0
  102. package/dist/behaviors/kb-segment.mjs +499 -0
  103. package/dist/behaviors/kb-sources.d.mts +27 -0
  104. package/dist/behaviors/kb-sources.mjs +373 -0
  105. package/dist/behaviors/kb-sql.d.mts +43 -0
  106. package/dist/behaviors/kb-sql.mjs +948 -0
  107. package/dist/behaviors/kb-trace.d.mts +16 -0
  108. package/dist/behaviors/kb-trace.mjs +414 -0
  109. package/dist/behaviors/kb-visibility.d.mts +44 -0
  110. package/dist/behaviors/kb-visibility.mjs +403 -0
  111. package/dist/behaviors/kb-who-can.d.mts +32 -0
  112. package/dist/behaviors/kb-who-can.mjs +379 -0
  113. package/dist/behaviors/modal.d.mts +24 -5
  114. package/dist/behaviors/modal.mjs +76 -10
  115. package/dist/behaviors/nav.d.mts +1 -1
  116. package/dist/behaviors/nav.mjs +33 -7
  117. package/dist/behaviors/notification.d.mts +20 -4
  118. package/dist/behaviors/notification.mjs +53 -73
  119. package/dist/behaviors/popover.d.mts +39 -3
  120. package/dist/behaviors/popover.mjs +90 -4
  121. package/dist/behaviors/select.d.mts +4 -2
  122. package/dist/behaviors/select.mjs +161 -24
  123. package/dist/behaviors/sidebar.d.mts +5 -2
  124. package/dist/behaviors/sidebar.mjs +43 -13
  125. package/dist/behaviors/slider.d.mts +5 -2
  126. package/dist/behaviors/slider.mjs +54 -43
  127. package/dist/behaviors/split-pane.d.mts +6 -2
  128. package/dist/behaviors/split-pane.mjs +62 -21
  129. package/dist/behaviors/tabs.d.mts +3 -2
  130. package/dist/behaviors/tabs.mjs +65 -14
  131. package/dist/behaviors/tag-input.d.mts +5 -2
  132. package/dist/behaviors/tag-input.mjs +61 -21
  133. package/dist/behaviors/theme.d.mts +13 -2
  134. package/dist/behaviors/theme.mjs +48 -4
  135. package/dist/behaviors/toast.d.mts +30 -8
  136. package/dist/behaviors/toast.mjs +74 -7
  137. package/dist/behaviors/tree.d.mts +5 -2
  138. package/dist/behaviors/tree.mjs +38 -15
  139. package/dist/behaviors/upload.mjs +21 -23
  140. package/dist/cli.mjs +1 -1
  141. package/dist/components/ai-branch.mjs +3 -0
  142. package/dist/components/ai-chat.css +295 -0
  143. package/dist/components/ai-feedback.mjs +3 -0
  144. package/dist/components/ai-panel.css +218 -1
  145. package/dist/components/ai-threads.mjs +3 -0
  146. package/dist/components/ai-tool-call.mjs +1 -1
  147. package/dist/components/badge.css +1 -1
  148. package/dist/components/breadcrumb.css +0 -32
  149. package/dist/components/chart-calendar.mjs +1 -2
  150. package/dist/components/chart-graph.css +57 -0
  151. package/dist/components/chart-graph.mjs +4 -0
  152. package/dist/components/chart-map.mjs +3 -0
  153. package/dist/components/chart-pie.css +0 -6
  154. package/dist/components/chart-scatter.mjs +1 -1
  155. package/dist/components/charts.css +33 -1
  156. package/dist/components/charts.mjs +1 -0
  157. package/dist/components/content.css +3 -16
  158. package/dist/components/datatable.css +1 -1
  159. package/dist/components/date-picker.css +1 -1
  160. package/dist/components/kb-access.mjs +4 -0
  161. package/dist/components/kb-acl.mjs +4 -0
  162. package/dist/components/kb-agent.css +481 -0
  163. package/dist/components/kb-answer.mjs +4 -0
  164. package/dist/components/kb-audit.mjs +4 -0
  165. package/dist/components/kb-canvas.mjs +4 -0
  166. package/dist/components/kb-chain.mjs +4 -0
  167. package/dist/components/kb-checkpoint.mjs +4 -0
  168. package/dist/components/kb-chunks.mjs +4 -0
  169. package/dist/components/kb-citation.mjs +4 -0
  170. package/dist/components/kb-clarify.mjs +4 -0
  171. package/dist/components/kb-conflict.mjs +4 -0
  172. package/dist/components/kb-connector.mjs +4 -0
  173. package/dist/components/kb-data.css +649 -0
  174. package/dist/components/kb-eval.mjs +4 -0
  175. package/dist/components/kb-explain.mjs +4 -0
  176. package/dist/components/kb-filter.mjs +4 -0
  177. package/dist/components/kb-gap.mjs +4 -0
  178. package/dist/components/kb-ground.css +566 -0
  179. package/dist/components/kb-hittest.mjs +4 -0
  180. package/dist/components/kb-ingest.css +898 -0
  181. package/dist/components/kb-metadata.mjs +4 -0
  182. package/dist/components/kb-ops.css +548 -0
  183. package/dist/components/kb-passage.mjs +4 -0
  184. package/dist/components/kb-perm.css +444 -0
  185. package/dist/components/kb-pipeline.mjs +4 -0
  186. package/dist/components/kb-qa.mjs +4 -0
  187. package/dist/components/kb-rerank.mjs +4 -0
  188. package/dist/components/kb-retrieval.mjs +4 -0
  189. package/dist/components/kb-review.mjs +4 -0
  190. package/dist/components/kb-sandbox.mjs +4 -0
  191. package/dist/components/kb-search.css +940 -0
  192. package/dist/components/kb-segment.mjs +4 -0
  193. package/dist/components/kb-sources.mjs +4 -0
  194. package/dist/components/kb-sql.mjs +4 -0
  195. package/dist/components/kb-trace.mjs +4 -0
  196. package/dist/components/kb-visibility.mjs +4 -0
  197. package/dist/components/kb-who-can.mjs +4 -0
  198. package/dist/components/kb.css +252 -0
  199. package/dist/components/kb.mjs +9 -0
  200. package/dist/components/notification.css +2 -3
  201. package/dist/components/pagination.css +3 -1
  202. package/dist/components/pagination.mjs +1 -0
  203. package/dist/components/rating.mjs +1 -0
  204. package/dist/components/segmented.css +9 -1
  205. package/dist/components/segmented.mjs +1 -1
  206. package/dist/components/select.css +67 -4
  207. package/dist/components/steps.css +13 -3
  208. package/dist/components/steps.mjs +1 -0
  209. package/dist/components/switch.css +3 -1
  210. package/dist/components/switch.mjs +1 -0
  211. package/dist/components/table.mjs +1 -0
  212. package/dist/components/tabs.css +23 -0
  213. package/dist/components/tag-input.css +1 -6
  214. package/dist/components/upload.css +0 -15
  215. package/dist/index.d.mts +48 -11
  216. package/dist/index.mjs +13205 -3615
  217. package/dist/registry.json +366 -15
  218. package/dist/retro-effects.css +3 -16
  219. package/dist/tokens/retro-effects.css +3 -16
  220. package/dist/tokens/style-profiles.css +3 -2
  221. package/dist/tokens/typography.css +2 -0
  222. package/dist/tokens.css +5 -2
  223. package/dist/ui.css +5713 -267
  224. package/docs/research/2026-10-03-ai-kb-components.md +392 -0
  225. package/docs/research/2026-10-03-kb-permissions.md +992 -0
  226. package/docs/spec/ai-native.md +7 -4
  227. package/docs/spec/kb-family.md +443 -0
  228. package/package.json +2 -2
@@ -0,0 +1,523 @@
1
+ import { ChartEventDetail } from './charts.js';
2
+ import { AiUsage } from './ai-core.js';
3
+ import { AiDoneEventDetail } from './ai-provider.js';
4
+ import { AiComposerRefSource } from './ai-composer.js';
5
+ import { KbCitation, KbSegmentConfig, KbRetrievalQuery, KbFilterNode, KbCheckpointScope, KbSandboxMessage, KbChainStep, KbAclEntry, KbIdentity, KbAclDecision, KbAccessRequest, KbRole, KbAuditChannel, KbHygieneIssue } from './kb-core.js';
6
+ import './popover.js';
7
+ import './ai-panel.js';
8
+
9
+ interface IcenGestureDetail {
10
+ /** 手势命中源:最近的 [data-gestures] 宿主 */
11
+ source: HTMLElement;
12
+ /** 原始 DOM 事件(click / contextmenu / pointerdown / mouseup…) */
13
+ originalEvent: Event;
14
+ /** 视口坐标(指针手势) */
15
+ x: number;
16
+ y: number;
17
+ /** 划词文本(仅 icen:text-select) */
18
+ text?: string;
19
+ }
20
+ type IcenPolicy = (e: CustomEvent<IcenGestureDetail>) => void;
21
+ /** 手势层事件名(策略层只认这五种,编译期收死)。 */
22
+ type IcenGestureEvent = 'icen:click' | 'icen:dblclick' | 'icen:contextmenu' | 'icen:longpress' | 'icen:text-select';
23
+ /**
24
+ * 全库事件注册表:事件名 → detail 契约。onIcen 推断、emitIcen 校验,双侧同表。
25
+ * 新增事件必须在此登记(模板签名兜底只留给宿主自定义事件)。
26
+ */
27
+ interface IcenEventMap {
28
+ 'icen:click': IcenGestureDetail;
29
+ 'icen:dblclick': IcenGestureDetail;
30
+ 'icen:contextmenu': IcenGestureDetail;
31
+ 'icen:longpress': IcenGestureDetail;
32
+ 'icen:text-select': IcenGestureDetail;
33
+ 'icen:chart-hover': ChartEventDetail;
34
+ 'icen:chart-click': ChartEventDetail;
35
+ 'icen:chart-dblclick': ChartEventDetail;
36
+ 'icen:chart-contextmenu': ChartEventDetail;
37
+ 'icen:chart-legend-toggle': {
38
+ key: string;
39
+ seriesIndex: number;
40
+ hidden: boolean;
41
+ };
42
+ 'icen:chart-legend-visibility': {
43
+ visible: boolean;
44
+ };
45
+ 'icen:tab-change': {
46
+ tab: HTMLElement | null;
47
+ panel: HTMLElement | null;
48
+ index: number;
49
+ };
50
+ 'icen:tags-change': {
51
+ tags: string[];
52
+ };
53
+ 'icen:otp-complete': {
54
+ code: string;
55
+ };
56
+ 'icen:slider-input': {
57
+ value?: number;
58
+ lo?: number;
59
+ hi?: number;
60
+ };
61
+ 'icen:slider-change': {
62
+ value?: number;
63
+ lo?: number;
64
+ hi?: number;
65
+ };
66
+ 'icen:switch-change': {
67
+ el: HTMLElement;
68
+ checked: boolean;
69
+ };
70
+ 'icen:check-change': {
71
+ el: HTMLElement;
72
+ checked: boolean | 'mixed';
73
+ };
74
+ 'icen:stepper-change': {
75
+ el: HTMLElement;
76
+ value: number;
77
+ delta: number;
78
+ };
79
+ 'icen:segmented-change': {
80
+ el: HTMLElement;
81
+ value: string;
82
+ index: number;
83
+ };
84
+ 'icen:step-change': {
85
+ step: HTMLElement;
86
+ index: number;
87
+ };
88
+ 'icen:rating-change': {
89
+ el: HTMLElement;
90
+ value: number;
91
+ };
92
+ 'icen:page-change': {
93
+ page: number;
94
+ };
95
+ 'icen:sort-change': {
96
+ th: HTMLElement;
97
+ key: string;
98
+ dir: 'asc' | 'desc' | null;
99
+ };
100
+ 'icen:nav-select': {
101
+ item: HTMLElement;
102
+ index: number;
103
+ };
104
+ 'icen:sidebar-toggle': {
105
+ group: HTMLElement;
106
+ open: boolean;
107
+ };
108
+ 'icen:sidebar-collapse': {
109
+ collapsed: boolean;
110
+ };
111
+ 'icen:split-change': {
112
+ value: number;
113
+ };
114
+ 'icen:copy-success': {
115
+ text: string;
116
+ };
117
+ 'icen:copy-error': {
118
+ text: string;
119
+ reason: string;
120
+ };
121
+ 'icen:back-top': Record<string, never>;
122
+ 'icen:modal-open': {
123
+ id: string;
124
+ };
125
+ 'icen:modal-close': {
126
+ id: string;
127
+ };
128
+ 'icen:command-palette-open': Record<string, never>;
129
+ 'icen:command-palette-close': Record<string, never>;
130
+ 'icen:menu-select': {
131
+ source: HTMLElement;
132
+ item: HTMLElement;
133
+ value: string;
134
+ label: string;
135
+ };
136
+ 'icen:select-change': {
137
+ value: string;
138
+ values: string[];
139
+ label: string;
140
+ };
141
+ 'icen:date-change': {
142
+ value: string;
143
+ date: Date | null;
144
+ };
145
+ 'icen:accordion-toggle': {
146
+ item: HTMLElement;
147
+ index: number;
148
+ open: boolean;
149
+ };
150
+ 'icen:tree-select': {
151
+ node: HTMLElement;
152
+ };
153
+ 'icen:tree-toggle': {
154
+ node: HTMLElement;
155
+ open: boolean;
156
+ };
157
+ 'icen:carousel-change': {
158
+ index: number;
159
+ count: number;
160
+ };
161
+ 'icen:theme-change': {
162
+ preset: string;
163
+ dark: boolean;
164
+ style: string;
165
+ };
166
+ 'icen:table-sort-change': {
167
+ key: string;
168
+ dir: 'asc' | 'desc';
169
+ };
170
+ 'icen:table-page-change': {
171
+ page: number;
172
+ pageSize: number;
173
+ };
174
+ 'icen:table-page-size-change': {
175
+ pageSize: number;
176
+ };
177
+ 'icen:table-filter-change': {
178
+ key: string;
179
+ values: string[];
180
+ };
181
+ 'icen:table-search-change': {
182
+ query: string;
183
+ };
184
+ 'icen:table-selection-change': {
185
+ selected: unknown[];
186
+ };
187
+ 'icen:table-row-click': {
188
+ row: unknown;
189
+ index: number;
190
+ };
191
+ 'icen:table-row-toggle': {
192
+ row: unknown;
193
+ index: number;
194
+ expanded: boolean;
195
+ };
196
+ 'icen:table-columns-change': {
197
+ hidden: string[];
198
+ };
199
+ 'icen:table-export': {
200
+ count: number;
201
+ };
202
+ 'icen:upload': {
203
+ files: File[];
204
+ };
205
+ 'icen:upload-error': {
206
+ file: File | null;
207
+ reason: string;
208
+ };
209
+ 'icen:upload-remove': {
210
+ file: File;
211
+ };
212
+ 'icen:ai-toggle': {
213
+ el: HTMLElement;
214
+ open: boolean;
215
+ };
216
+ 'icen:ai-copy': {
217
+ el: HTMLElement;
218
+ };
219
+ 'icen:ai-retry': {
220
+ el: HTMLElement;
221
+ };
222
+ 'icen:ai-approve': {
223
+ id: string;
224
+ kind: string;
225
+ };
226
+ 'icen:ai-reject': {
227
+ id: string;
228
+ kind: string;
229
+ };
230
+ 'icen:ai-diff-accept': {
231
+ path: string;
232
+ };
233
+ 'icen:ai-diff-reject': {
234
+ path: string;
235
+ };
236
+ 'icen:ai-send': {
237
+ text: string;
238
+ };
239
+ 'icen:ai-stop': Record<string, never>;
240
+ 'icen:ai-queue': {
241
+ text: string;
242
+ };
243
+ 'icen:ai-dequeue': {
244
+ index: number;
245
+ };
246
+ 'icen:ai-attach': {
247
+ files: File[];
248
+ };
249
+ 'icen:ai-model-change': {
250
+ provider: string;
251
+ model: string;
252
+ label: string;
253
+ context?: number;
254
+ };
255
+ 'icen:ai-command': {
256
+ name: string;
257
+ args: string;
258
+ };
259
+ 'icen:ai-ref': {
260
+ action: 'add' | 'remove';
261
+ ref: AiComposerRefSource;
262
+ };
263
+ 'icen:ai-todo-toggle': {
264
+ index: number;
265
+ status: string;
266
+ };
267
+ 'icen:ai-audit-clear': Record<string, never>;
268
+ 'icen:ai-context-open': Record<string, never>;
269
+ 'icen:ai-context-close': Record<string, never>;
270
+ 'icen:ai-tool-call': {
271
+ name: string;
272
+ input: unknown;
273
+ el: HTMLElement;
274
+ };
275
+ 'icen:ai-tool-result': {
276
+ name: string;
277
+ ok: boolean;
278
+ el: HTMLElement;
279
+ error?: string;
280
+ count: number;
281
+ };
282
+ 'icen:ai-tool-evict': {
283
+ name: string;
284
+ el: HTMLElement;
285
+ };
286
+ 'icen:ai-usage': AiUsage;
287
+ 'icen:ai-done': AiDoneEventDetail;
288
+ 'icen:ai-thread-select': {
289
+ key: string;
290
+ };
291
+ 'icen:ai-thread-action': {
292
+ action: 'rename' | 'pin' | 'archive' | 'delete' | 'move';
293
+ key: string;
294
+ };
295
+ 'icen:ai-feedback': {
296
+ value: 1 | -1 | 0;
297
+ reason?: string;
298
+ el?: HTMLElement;
299
+ };
300
+ 'icen:ai-branch-change': {
301
+ index: number;
302
+ count: number;
303
+ };
304
+ 'icen:kb-citation-open': {
305
+ citation: KbCitation;
306
+ };
307
+ 'icen:kb-source-open': {
308
+ source: KbCitation;
309
+ };
310
+ 'icen:kb-passage-jump': {
311
+ citation: KbCitation;
312
+ };
313
+ 'icen:kb-passage-close': Record<string, never>;
314
+ 'icen:kb-pipeline-toggle': {
315
+ el: HTMLElement;
316
+ open: boolean;
317
+ };
318
+ 'icen:kb-pipeline-rerun': {
319
+ documentId: string;
320
+ };
321
+ 'icen:kb-chunk-toggle': {
322
+ chunkId: string;
323
+ available: boolean;
324
+ };
325
+ 'icen:kb-chunk-edit': {
326
+ chunkId: string;
327
+ };
328
+ 'icen:kb-chunk-remove': {
329
+ chunkId: string;
330
+ };
331
+ 'icen:kb-chunk-add': {
332
+ documentId: string;
333
+ };
334
+ 'icen:kb-chunk-search': {
335
+ mode: 'text' | 'vector';
336
+ query: string;
337
+ };
338
+ 'icen:kb-segment-change': {
339
+ config: KbSegmentConfig;
340
+ };
341
+ 'icen:kb-connector-sync': {
342
+ connectorId: string;
343
+ };
344
+ 'icen:kb-connector-reauth': {
345
+ connectorId: string;
346
+ };
347
+ 'icen:kb-connector-schedule': {
348
+ connectorId: string;
349
+ schedule: string;
350
+ };
351
+ 'icen:kb-metadata-change': {
352
+ action: 'define' | 'bind' | 'remove';
353
+ key: string;
354
+ };
355
+ 'icen:kb-qa-change': {
356
+ op: 'add' | 'edit' | 'remove';
357
+ index: number;
358
+ };
359
+ 'icen:kb-qa-import': {
360
+ source: string;
361
+ };
362
+ 'icen:kb-retrieval-run': {
363
+ query: KbRetrievalQuery;
364
+ };
365
+ 'icen:kb-filter-change': {
366
+ node: KbFilterNode | null;
367
+ valid: boolean;
368
+ };
369
+ 'icen:kb-rerank-toggle': {
370
+ enabled: boolean;
371
+ model?: string;
372
+ };
373
+ 'icen:kb-hittest-add': {
374
+ question: string;
375
+ };
376
+ 'icen:kb-hittest-run': Record<string, never>;
377
+ 'icen:kb-sql-edit': {
378
+ sql: string;
379
+ };
380
+ 'icen:kb-sql-rerun': {
381
+ sql: string;
382
+ };
383
+ 'icen:kb-clarify-answer': {
384
+ id?: string;
385
+ value: string;
386
+ label: string;
387
+ };
388
+ 'icen:kb-verified-open': {
389
+ assetId: string;
390
+ };
391
+ 'icen:kb-explain-toggle': {
392
+ el: HTMLElement;
393
+ open: boolean;
394
+ };
395
+ 'icen:kb-trace-select': {
396
+ spanId: string;
397
+ };
398
+ 'icen:kb-trace-toggle': {
399
+ spanId: string;
400
+ open: boolean;
401
+ };
402
+ 'icen:kb-review-assign': {
403
+ taskId: string;
404
+ assignee: string;
405
+ };
406
+ 'icen:kb-review-score': {
407
+ taskId: string;
408
+ name: string;
409
+ value: string | number;
410
+ };
411
+ 'icen:kb-review-submit': {
412
+ taskId: string;
413
+ };
414
+ 'icen:kb-gap-action': {
415
+ query: string;
416
+ action: 'create-doc' | 'add-synonym';
417
+ };
418
+ 'icen:kb-eval-compare': {
419
+ runA: string;
420
+ runB: string;
421
+ };
422
+ 'icen:kb-canvas-ai': {
423
+ instruction: string;
424
+ selection?: {
425
+ text: string;
426
+ };
427
+ };
428
+ 'icen:kb-canvas-version': {
429
+ versionId: string;
430
+ };
431
+ 'icen:kb-checkpoint-restore': {
432
+ checkpointId: string;
433
+ scope: KbCheckpointScope;
434
+ };
435
+ 'icen:kb-sandbox-message': {
436
+ channel: 'in' | 'out';
437
+ payload: KbSandboxMessage;
438
+ };
439
+ 'icen:kb-chain-step': {
440
+ index: number;
441
+ step: KbChainStep;
442
+ };
443
+ 'icen:kb-acl-grant': {};
444
+ 'icen:kb-acl-remove': {
445
+ subject: KbAclEntry['subject'];
446
+ };
447
+ 'icen:kb-acl-inherit': {
448
+ action: 'break' | 'restore';
449
+ };
450
+ 'icen:kb-whocan-check': {
451
+ identity: KbIdentity;
452
+ decision: KbAclDecision;
453
+ };
454
+ 'icen:kb-access-request': {
455
+ request: KbAccessRequest;
456
+ };
457
+ 'icen:kb-access-decide': {
458
+ id: string;
459
+ decision: 'approve' | 'deny';
460
+ role?: KbRole;
461
+ };
462
+ 'icen:kb-access-expire': {
463
+ id: string;
464
+ };
465
+ 'icen:kb-audit-filter': {
466
+ channel: KbAuditChannel | 'all';
467
+ };
468
+ 'icen:kb-audit-export': {
469
+ channel: KbAuditChannel | 'all';
470
+ };
471
+ 'icen:kb-hygiene-action': {
472
+ issue: KbHygieneIssue;
473
+ };
474
+ 'icen:kb-visibility-identity': {
475
+ identity: KbIdentity;
476
+ };
477
+ 'icen:kb-visibility-layer': {
478
+ layer: 'pre' | 'post' | 'none';
479
+ };
480
+ [key: `icen:${string}`]: unknown;
481
+ }
482
+ interface IcenListenOptions {
483
+ /** 只监听该子树内冒泡上来的事件(组件实例级绑定)。
484
+ * 广播事件(自 document 派发)不经过元素子树:within 为 Element 时收不到,要收广播请用全局形态 */
485
+ within?: Element | Document;
486
+ /** AbortSignal:abort 即解绑(React useEffect 清理 / 批量卸载场景) */
487
+ signal?: AbortSignal;
488
+ /** 只触发一次(触发后自动解绑) */
489
+ once?: boolean;
490
+ }
491
+ /**
492
+ * 统一绑定器(全库事件一个入口):
493
+ * onIcen('icen:tab-change', (e) => e.detail.index) 全局
494
+ * onIcen('icen:chart-click', '.chart', (e) => …) 选择器委托
495
+ * onIcen('icen:upload', (e) => …, { within: formEl }) 子树限定
496
+ * onIcen('icen:ai-done', (e) => …, { signal: ctrl.signal }) 广播 + 信号解绑
497
+ * 返回解绑函数 —— React useEffect / Vue onUnmounted 直接 return。
498
+ */
499
+ declare function onIcen<K extends keyof IcenEventMap>(type: K, handler: (e: CustomEvent<IcenEventMap[K]>) => void, opts?: IcenListenOptions): () => void;
500
+ declare function onIcen<K extends keyof IcenEventMap>(type: K, selector: string, handler: (e: CustomEvent<IcenEventMap[K]>) => void, opts?: IcenListenOptions): () => void;
501
+ /**
502
+ * 全库唯一派生口:bubbles + composed + cancelable。返回 false = 被消费方 preventDefault。
503
+ * 组件作者派发领域事件一律走这里(不要裸写 new CustomEvent);detail 契约见 IcenEventMap。
504
+ * 从 document 派发 = 全局广播(传播只经 [document, window],仅 onIcen 全局形态可收;
505
+ * within 为 Element 收不到,要收广播请用全局形态)。
506
+ */
507
+ declare function emitIcen<K extends keyof IcenEventMap>(source: Element | Document, type: K, detail: IcenEventMap[K]): boolean;
508
+ /** 注册/覆盖某手势事件的全站默认行为;传 null 移除(= 禁用该默认)。
509
+ * 只接受手势层五种事件——领域事件的默认行为归组件交互契约,不会被静默忽略。 */
510
+ declare function setEventPolicy(type: IcenGestureEvent, policy: IcenPolicy | null): void;
511
+ /** 读取某手势事件当前注册的策略(与 setEventPolicy 对称的调试/测试读取器;未注册返回 undefined)。 */
512
+ declare function getEventPolicy(type: IcenGestureEvent): IcenPolicy | undefined;
513
+ /** 清空全部策略(测试/热重载用)。 */
514
+ declare function resetEventPolicies(): void;
515
+ /**
516
+ * 启动手势层(全局委托一次,幂等;重复调用安全)。
517
+ * 返回销毁函数:摘除全部 document 级委托并复位幂等标记,销毁后可重新 init。
518
+ */
519
+ declare function initGestures(): () => void;
520
+ /** 摘除手势层委托(等同 initGestures 返回的销毁函数;未启动时为 no-op)。 */
521
+ declare function destroyGestures(): void;
522
+
523
+ export { type IcenEventMap, type IcenGestureDetail, type IcenGestureEvent, type IcenListenOptions, type IcenPolicy, destroyGestures, emitIcen, getEventPolicy, initGestures, onIcen, resetEventPolicies, setEventPolicy };