@icen.ai/ui 0.8.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.
Files changed (106) hide show
  1. package/AGENTS.md +15 -9
  2. package/README.md +8 -3
  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-chat.d.mts +3 -1
  7. package/dist/behaviors/ai-chat.mjs +66 -43
  8. package/dist/behaviors/ai-composer.d.mts +28 -3
  9. package/dist/behaviors/ai-composer.mjs +291 -209
  10. package/dist/behaviors/ai-core.d.mts +9 -4
  11. package/dist/behaviors/ai-core.mjs +21 -8
  12. package/dist/behaviors/ai-diff.d.mts +2 -2
  13. package/dist/behaviors/ai-diff.mjs +172 -41
  14. package/dist/behaviors/ai-panel.d.mts +11 -8
  15. package/dist/behaviors/ai-panel.mjs +185 -110
  16. package/dist/behaviors/ai-provider.mjs +54 -48
  17. package/dist/behaviors/ai-tool.d.mts +12 -4
  18. package/dist/behaviors/ai-tool.mjs +311 -263
  19. package/dist/behaviors/ai-tools.d.mts +9 -6
  20. package/dist/behaviors/ai-tools.mjs +259 -155
  21. package/dist/behaviors/back-top.mjs +16 -1
  22. package/dist/behaviors/carousel.d.mts +5 -2
  23. package/dist/behaviors/carousel.mjs +53 -26
  24. package/dist/behaviors/charts.d.mts +68 -22
  25. package/dist/behaviors/charts.mjs +221 -150
  26. package/dist/behaviors/command-palette.d.mts +40 -6
  27. package/dist/behaviors/command-palette.mjs +143 -15
  28. package/dist/behaviors/context-menu.d.mts +21 -4
  29. package/dist/behaviors/context-menu.mjs +122 -38
  30. package/dist/behaviors/controls.d.mts +59 -0
  31. package/dist/behaviors/controls.mjs +601 -0
  32. package/dist/behaviors/copy.d.mts +5 -2
  33. package/dist/behaviors/copy.mjs +37 -12
  34. package/dist/behaviors/datatable.d.mts +12 -0
  35. package/dist/behaviors/datatable.mjs +226 -43
  36. package/dist/behaviors/date-picker.d.mts +2 -2
  37. package/dist/behaviors/date-picker.mjs +171 -32
  38. package/dist/behaviors/dropdown.d.mts +6 -2
  39. package/dist/behaviors/dropdown.mjs +164 -25
  40. package/dist/behaviors/events.d.mts +330 -0
  41. package/dist/behaviors/events.mjs +208 -0
  42. package/dist/behaviors/input.mjs +25 -12
  43. package/dist/behaviors/modal.d.mts +24 -5
  44. package/dist/behaviors/modal.mjs +76 -10
  45. package/dist/behaviors/nav.d.mts +1 -1
  46. package/dist/behaviors/nav.mjs +33 -7
  47. package/dist/behaviors/notification.d.mts +20 -4
  48. package/dist/behaviors/notification.mjs +53 -73
  49. package/dist/behaviors/popover.d.mts +39 -3
  50. package/dist/behaviors/popover.mjs +90 -4
  51. package/dist/behaviors/select.d.mts +4 -2
  52. package/dist/behaviors/select.mjs +161 -24
  53. package/dist/behaviors/sidebar.d.mts +5 -2
  54. package/dist/behaviors/sidebar.mjs +43 -13
  55. package/dist/behaviors/slider.d.mts +5 -2
  56. package/dist/behaviors/slider.mjs +54 -43
  57. package/dist/behaviors/split-pane.d.mts +6 -2
  58. package/dist/behaviors/split-pane.mjs +62 -21
  59. package/dist/behaviors/tabs.d.mts +3 -2
  60. package/dist/behaviors/tabs.mjs +65 -14
  61. package/dist/behaviors/tag-input.d.mts +5 -2
  62. package/dist/behaviors/tag-input.mjs +61 -21
  63. package/dist/behaviors/theme.d.mts +13 -2
  64. package/dist/behaviors/theme.mjs +48 -4
  65. package/dist/behaviors/toast.d.mts +30 -8
  66. package/dist/behaviors/toast.mjs +74 -7
  67. package/dist/behaviors/tree.d.mts +5 -2
  68. package/dist/behaviors/tree.mjs +38 -15
  69. package/dist/behaviors/upload.mjs +21 -23
  70. package/dist/cli.mjs +1 -1
  71. package/dist/components/ai-panel.css +1 -1
  72. package/dist/components/ai-tool-call.mjs +1 -1
  73. package/dist/components/badge.css +1 -1
  74. package/dist/components/breadcrumb.css +0 -32
  75. package/dist/components/chart-calendar.mjs +1 -2
  76. package/dist/components/chart-pie.css +0 -6
  77. package/dist/components/charts.css +1 -1
  78. package/dist/components/content.css +3 -16
  79. package/dist/components/datatable.css +1 -1
  80. package/dist/components/date-picker.css +1 -1
  81. package/dist/components/notification.css +2 -3
  82. package/dist/components/pagination.css +3 -1
  83. package/dist/components/pagination.mjs +1 -0
  84. package/dist/components/rating.mjs +1 -0
  85. package/dist/components/segmented.css +9 -1
  86. package/dist/components/segmented.mjs +1 -1
  87. package/dist/components/select.css +67 -4
  88. package/dist/components/steps.css +13 -3
  89. package/dist/components/steps.mjs +1 -0
  90. package/dist/components/switch.css +3 -1
  91. package/dist/components/switch.mjs +1 -0
  92. package/dist/components/table.mjs +1 -0
  93. package/dist/components/tabs.css +23 -0
  94. package/dist/components/tag-input.css +1 -6
  95. package/dist/components/upload.css +0 -15
  96. package/dist/index.d.mts +12 -10
  97. package/dist/index.mjs +2700 -1460
  98. package/dist/registry.json +42 -13
  99. package/dist/retro-effects.css +3 -16
  100. package/dist/tokens/retro-effects.css +3 -16
  101. package/dist/tokens/style-profiles.css +3 -2
  102. package/dist/tokens/typography.css +2 -0
  103. package/dist/tokens.css +5 -2
  104. package/dist/ui.css +138 -98
  105. package/docs/spec/ai-native.md +7 -4
  106. package/package.json +1 -1
@@ -4,14 +4,24 @@
4
4
  *
5
5
  * 完整契约:
6
6
  * <div class="select [data-disabled] [.is-open]" data-select
7
- * [data-select-search] [data-select-multiple] [data-select-max="3"]>
7
+ * [data-select-search] [data-select-multiple] [data-select-max="3"]
8
+ * [data-panel-width="220"] [data-panel-min="200"]
9
+ * [data-panel-max="360"] [data-panel-max-height="320"]>
10
+ * <!-- 选项 .select-option 内支持任意 HTML(色卡 / 图标 / 多行);
11
+ * 面板尺寸为全库统一 PanelSizing 契约(behaviors/popover.ts) -->
8
12
  * <button class="select-trigger pressable focus-ring [--sm|--lg]" aria-haspopup="listbox"
9
13
  * aria-expanded="false" [disabled]>
10
14
  * <span class="select-leading">…</span> 可选前缀
11
- * <span class="select-value is-empty">占位</span>
12
- * <button class="select-clear" aria-label="清除">×</button> ← 多选时可选
15
+ * <span class="select-value is-empty">占位</span> 多选有选中时 behavior 隐藏它
16
+ * <span class="select-chips"> ← 多选选中态由 behavior 渲染(勿手写)
17
+ * <span class="select-chip">标签<span class="select-chip-x" role="button" tabindex="-1">×</span></span>
18
+ * <span class="select-chip select-chip--more">+2</span>
19
+ * </span>
13
20
  * <svg class="select-chevron">…</svg>
14
21
  * </button>
22
+ * <button class="select-clear" aria-label="清除全部" hidden>×</button> ← 多选可选:
23
+ * 与 trigger 同级(不能嵌套在 button 内),绝对定位叠进 trigger 右侧;
24
+ * behavior 在有选中时自动显示
15
25
  * <div class="select-panel" hidden role="listbox">
16
26
  * <div class="select-search"> ← data-select-search 时 behavior 自动注入
17
27
  * <input class="select-search-input" placeholder="搜索…" />
@@ -209,8 +219,13 @@
209
219
  box-shadow: var(--icen-control-focus-shadow);
210
220
  }
211
221
 
212
- /* ── 多选清除按钮 ── */
222
+ /* ── 多选清除按钮(与 trigger 同级,绝对定位叠进 trigger 右侧、chevron 左侧) ── */
213
223
  .select-clear {
224
+ position: absolute;
225
+ top: 50%;
226
+ right: calc(var(--density-space-sm) + 20px);
227
+ transform: translateY(-50%);
228
+ z-index: 1;
214
229
  display: inline-flex;
215
230
  align-items: center;
216
231
  justify-content: center;
@@ -231,6 +246,53 @@
231
246
  color: var(--token-text);
232
247
  background: var(--token-fill-1);
233
248
  }
249
+ /* 有清除钮时 trigger 右侧让位(clear 18px + chevron 14px + 间距) */
250
+ .select:has(.select-clear) .select-trigger { padding-right: 52px; }
251
+
252
+ /* ── 多选 chips(tag 式展示;× 仅 hover 对应 chip 时出现) ── */
253
+ .select-chips {
254
+ display: inline-flex;
255
+ flex-wrap: wrap;
256
+ align-items: center;
257
+ gap: 4px;
258
+ flex: 1;
259
+ min-width: 0;
260
+ }
261
+ .select-chip {
262
+ display: inline-flex;
263
+ align-items: center;
264
+ max-width: 100%;
265
+ font-size: var(--density-font-size-xs);
266
+ line-height: 1.6;
267
+ color: var(--token-text);
268
+ background: var(--token-fill-2);
269
+ border-radius: var(--radius-sm);
270
+ padding: 0 7px;
271
+ white-space: nowrap;
272
+ }
273
+ .select-chip-x {
274
+ display: inline-flex;
275
+ align-items: center;
276
+ justify-content: center;
277
+ width: 0;
278
+ opacity: 0;
279
+ overflow: hidden;
280
+ margin-left: 0;
281
+ color: var(--token-text-faint);
282
+ border-radius: var(--radius-full);
283
+ font-size: var(--density-font-size-md);
284
+ line-height: 1;
285
+ cursor: pointer;
286
+ transition:
287
+ width var(--icen-tx-fast),
288
+ opacity var(--icen-tx-fast),
289
+ margin-left var(--icen-tx-fast),
290
+ color var(--icen-tx-fast);
291
+ }
292
+ .select-chip:hover .select-chip-x,
293
+ .select-chip-x:focus-visible { width: 12px; opacity: 1; margin-left: 4px; }
294
+ .select-chip-x:hover { color: var(--token-error); }
295
+ .select-chip--more { color: var(--token-text-muted); background: var(--token-fill-1); }
234
296
 
235
297
  /* ── 多选 trigger 高度自适应(chips 可能换行) ── */
236
298
  .select[data-select-multiple] .select-trigger {
@@ -263,5 +325,6 @@
263
325
  @media (prefers-reduced-motion: reduce) {
264
326
  .select-panel { animation: none; }
265
327
  .select-search-input,
328
+ .select-chip-x,
266
329
  .select-clear { transition: none; }
267
330
  }
@@ -2,7 +2,8 @@
2
2
  * @icen.ai/ui — Component: steps(步骤条,横向默认 / .steps--vertical 垂直)
3
3
  *
4
4
  * 完整契约:
5
- * <ol class="steps [steps--vertical] [steps--sm|steps--lg]" aria-label="进度">
5
+ * <ol class="steps [steps--vertical] [steps--sm|steps--lg] [steps--dots|steps--progress|steps--connected]"
6
+ * aria-label="进度">
6
7
  * <li class="step [step--finish|step--process|step--wait] [.step--error]">
7
8
  * <span class="step-line"></span> ← 横向:右半段连线;末步自动隐藏
8
9
  * <span class="step-dot">[✓ | ! | 数字]</span>
@@ -14,7 +15,11 @@
14
15
  * </ol>
15
16
  *
16
17
  * 四态:finish / process / wait / error(错误用 error 色 dot + 描边)。
17
- * 点击 .step[role=button] 由使用方实现跳转。
18
+ * 变体与增强(正文下半段):--dots 纯点紧凑 / --progress 步骤间填充进度线 / --connected 虚线连接;
19
+ * dot 内可放 svg.step-dot-icon;step-desc 旁可加 .step-extra 富化描述;
20
+ * 可点击步骤标 .step--clickable(与 controls.ts initSteps 的 JSDoc 同口径)。
21
+ * 点击 .step[role=button] 由 behaviors/controls.ts 的 initSteps() 接线(激活态位移 +
22
+ * icen:step-change);跳转业务仍由使用方监听事件实现。
18
23
  */
19
24
 
20
25
  .steps {
@@ -141,7 +146,9 @@
141
146
  padding: 0;
142
147
  font-size: 0;
143
148
  }
144
- .steps--dots .step-line { top: 20px; }
149
+ /* 线 top = dot 高度一半:默认 32→16 / sm 24→12 / lg 40→20 / dots 10→5;
150
+ 本块位于尺寸变体之后,同等特异性下靠源顺序生效,dots 与 --sm/--lg 叠加时以 5px 为准 */
151
+ .steps--dots .step-line { top: 5px; }
145
152
  .steps--dots .step-title,
146
153
  .steps--dots .step-desc { display: none; }
147
154
  .steps--dots .step { flex: none; }
@@ -171,8 +178,11 @@
171
178
  }
172
179
 
173
180
  /* ── 进度条变体(步骤间的填充进度,非离散连线) ── */
181
+ /* 高度 1px→3px 时线只向下扩张 2px,整体上移 1px 使线心与 1px 基线居中一致;
182
+ 用 translateY 而非改 top,可同时适配 --sm(12px)/--lg(20px) 的不同基线 */
174
183
  .steps--progress .step-line {
175
184
  height: 3px;
185
+ transform: translateY(-1px);
176
186
  border-radius: var(--radius-full);
177
187
  background: var(--token-fill-2);
178
188
  overflow: hidden;
@@ -1,2 +1,3 @@
1
1
  // @icen.ai/ui — kit: steps(CSS + behavior 一行入口;构建产物,勿手改)
2
2
  import './steps.css';
3
+ export { initSteps } from '../behaviors/controls.mjs';
@@ -1,6 +1,8 @@
1
1
  /*
2
2
  * @icen.ai/ui — Component: switch / checkbox / radio(开关 / 勾选 / 单选行)
3
- * 纯 CSS 状态组件:状态全走 aria-checked / .is-selected;交互由使用方或演示页脚本切换。
3
+ * 状态组件:状态全走 aria-checked / .is-selected;交互由 behaviors/controls.ts 的
4
+ * initSwitch() 接线(点击 / Space / Enter 翻转并派 icen:switch-change / icen:check-change),
5
+ * 不接线时亦可由使用方自行驱动状态。
4
6
  *
5
7
  * 完整契约:
6
8
  * <button class="switch [--sm|--lg]" role="switch" aria-checked="true|false" [disabled]>
@@ -1,2 +1,3 @@
1
1
  // @icen.ai/ui — kit: switch(CSS + behavior 一行入口;构建产物,勿手改)
2
2
  import './switch.css';
3
+ export { initSwitch } from '../behaviors/controls.mjs';
@@ -1,2 +1,3 @@
1
1
  // @icen.ai/ui — kit: table(CSS + behavior 一行入口;构建产物,勿手改)
2
2
  import './table.css';
3
+ export { initTableSort } from '../behaviors/controls.mjs';
@@ -221,3 +221,26 @@
221
221
  @media (prefers-reduced-motion: reduce) {
222
222
  .page-tab, .tabs a, .page-tab-close { transition: none; }
223
223
  }
224
+
225
+ /* ── 指示条([data-tabs-ink],与 behaviors/tabs 配套;本节为追加)── */
226
+ /* tablist(.tabs)挂 data-tabs-ink 时,行为层创建并移动 .tabs-ink:
227
+ 宽 / translateX 由 JS 内联写入(布局定位,同 popover 模式);
228
+ 此处只负责视觉(高度 / 圆角 / 背景)与位移过渡(--duration / --ease token)。 */
229
+ .tabs[data-tabs-ink] {
230
+ position: relative;
231
+ }
232
+ .tabs-ink {
233
+ position: absolute;
234
+ bottom: -1px; /* 盖在容器 1px 底边线上,与活动 tab 的 2px 下划线同高 */
235
+ left: 0;
236
+ height: 2px;
237
+ border-radius: var(--radius-full);
238
+ background: var(--token-accent);
239
+ pointer-events: none;
240
+ transition:
241
+ width var(--duration-normal) var(--ease-out),
242
+ transform var(--duration-normal) var(--ease-out);
243
+ }
244
+ @media (prefers-reduced-motion: reduce) {
245
+ .tabs-ink { transition: none; }
246
+ }
@@ -70,12 +70,7 @@
70
70
  max-width: 100%;
71
71
  animation: tag-pop var(--icen-tx-fast);
72
72
  }
73
- .tag-chip-label {
74
- white-space: nowrap;
75
- overflow: hidden;
76
- text-overflow: ellipsis;
77
- max-width: 200px;
78
- }
73
+ /* readonly 变体(消费方手写标记,behavior 不产出) */
79
74
  .tag-chip--readonly { background: var(--token-fill-2); color: var(--token-text-muted); }
80
75
 
81
76
  @keyframes tag-pop {
@@ -195,21 +195,6 @@
195
195
  box-shadow: var(--icen-ring);
196
196
  }
197
197
 
198
- /* 进度条(behavior 可选注入 .upload-list-item-progress) */
199
- .upload-list-item-progress {
200
- height: 2px;
201
- width: 100%;
202
- background: var(--token-fill-2);
203
- border-radius: var(--radius-full);
204
- overflow: hidden;
205
- margin-top: 2px;
206
- }
207
- .upload-list-item-progress-bar {
208
- height: 100%;
209
- background: var(--token-accent);
210
- border-radius: var(--radius-full);
211
- transition: width var(--icen-tx-normal) var(--ease-out);
212
- }
213
198
  .upload-list-item.is-error {
214
199
  border-color: var(--token-error);
215
200
  }
package/dist/index.d.mts CHANGED
@@ -1,31 +1,33 @@
1
- export { PRESETS, STORAGE_KEY, STYLES, ThemeState, applyTheme, getDefaultTheme, getTheme, initTheme, setTheme, toggleDark } from './behaviors/theme.js';
2
- export { ToastConfig, ToastKind, ToastOptions, toast } from './behaviors/toast.js';
1
+ export { PRESETS, STORAGE_KEY, STYLES, ThemeState, applyTheme, getDefaultTheme, getTheme, initTheme, listThemePresets, registerThemePreset, setStyle, setTheme, toggleDark } from './behaviors/theme.js';
2
+ export { IcenEventMap, IcenGestureDetail, IcenGestureEvent, IcenListenOptions, IcenPolicy, destroyGestures, emitIcen, getEventPolicy, initGestures, onIcen, resetEventPolicies, setEventPolicy } from './behaviors/events.js';
3
+ export { ToastConfig, ToastHandle, ToastKind, ToastOptions, toast } from './behaviors/toast.js';
3
4
  export { initTabs } from './behaviors/tabs.js';
4
5
  export { initCopy } from './behaviors/copy.js';
5
6
  export { initInput } from './behaviors/input.js';
7
+ export { initPagination, initRating, initSegmented, initStepper, initSteps, initSwitch, initTableSort } from './behaviors/controls.js';
6
8
  export { initSelect } from './behaviors/select.js';
7
9
  export { initSlider } from './behaviors/slider.js';
8
10
  export { initTagInput } from './behaviors/tag-input.js';
9
11
  export { initUpload } from './behaviors/upload.js';
10
- export { closeModal, initModal, openModal } from './behaviors/modal.js';
12
+ export { FOCUSABLE, ModalOpenOptions, closeModal, initModal, openModal } from './behaviors/modal.js';
11
13
  export { initDropdown } from './behaviors/dropdown.js';
12
- export { ContextMenuEntry, ContextMenuHeader, ContextMenuItem, ContextMenuOptions, ContextMenuSeparator, closeMenu, initContextMenu, openContextMenu, registerContextMenu } from './behaviors/context-menu.js';
13
- export { OpenPopoverOptions, PopoverAlign, PopoverLayout, PopoverLayoutOptions, PopoverRect, PopoverSide, PopoverViewport, closePopover, computePopoverLayout, openPopover } from './behaviors/popover.js';
14
+ export { ContextMenuEntry, ContextMenuHeader, ContextMenuItem, ContextMenuOptions, ContextMenuSeparator, closeContextMenu, closeMenu, emitMenuSelect, initContextMenu, openContextMenu, registerContextMenu } from './behaviors/context-menu.js';
15
+ export { OpenPopoverOptions, PanelSizing, PopoverAlign, PopoverLayout, PopoverLayoutOptions, PopoverRect, PopoverSide, PopoverViewport, applyPanelSizing, closePopover, computePopoverLayout, openPopover, readPanelSizing, resolvePanelSizing, sizingToLayout } from './behaviors/popover.js';
14
16
  export { initAccordion } from './behaviors/accordion.js';
15
17
  export { initTree } from './behaviors/tree.js';
16
18
  export { initCarousel } from './behaviors/carousel.js';
17
- export { ChartCalendarOptions, ChartChromeOptions, ChartDims, ChartEventDetail, ChartEventName, ChartGaugeOptions, ChartHandle, ChartHeatmapOptions, ChartLegendState, ChartLineOptions, ChartMarkData, ChartPointSpec, ChartRadarOptions, ChartScatterOptions, ChartSegment, ChartSegmentsOptions, ChartSeriesOptions, ChartSeriesSpec, ChartSpec, ChartTone, ChartType, ChartVBarOptions, ChartValueFormat, HeatmapDatum, RadarSeries, chartFormatValue, inferChartType, normalizeChartSpec, renderArea, renderCalendar, renderChart, renderDonut, renderGauge, renderHBar, renderHeatmap, renderLine, renderRadar, renderScatter, renderSparkline, renderStack, renderVBar } from './behaviors/charts.js';
19
+ export { ChartCalendarOptions, ChartChromeOptions, ChartDims, ChartEventDetail, ChartEventName, ChartGaugeOptions, ChartHandle, ChartHeatmapOptions, ChartI18nLabels, ChartLineOptions, ChartMarkData, ChartPointSpec, ChartRadarOptions, ChartScatterOptions, ChartSegment, ChartSegmentsOptions, ChartSeriesOptions, ChartSeriesSpec, ChartSpec, ChartTone, ChartType, ChartVBarOptions, ChartValueFormat, HeatmapDatum, RadarSeries, bindChartEvents, chartFormatValue, inferChartType, normalizeChartSpec, registerChartTone, renderArea, renderCalendar, renderChart, renderDonut, renderGauge, renderHBar, renderHeatmap, renderLine, renderRadar, renderScatter, renderSparkline, renderStack, renderVBar } from './behaviors/charts.js';
18
20
  export { initNav } from './behaviors/nav.js';
19
21
  export { initSidebar } from './behaviors/sidebar.js';
20
- export { NotificationAction, NotificationCenterHandle, NotificationConfig, NotificationConfirmOptions, NotificationHandle, NotificationKind, NotificationOptions, NotificationPushInput, NotificationUpdatePatch, createNotificationCenter, initNotification, notify } from './behaviors/notification.js';
22
+ export { NotificationAction, NotificationCenterHandle, NotificationConfig, NotificationConfirmOptions, NotificationHandle, NotificationKind, NotificationOptions, NotificationPushInput, NotificationRecord, NotificationUpdatePatch, createNotificationCenter, initNotification, notify } from './behaviors/notification.js';
21
23
  export { initBackTop } from './behaviors/back-top.js';
22
- export { closeCommandPalette, initCommandPalette, openCommandPalette } from './behaviors/command-palette.js';
24
+ export { CommandPaletteCommand, CommandPaletteOpenOptions, closeCommandPalette, initCommandPalette, openCommandPalette } from './behaviors/command-palette.js';
23
25
  export { initDatePicker } from './behaviors/date-picker.js';
24
26
  export { initSplitPane } from './behaviors/split-pane.js';
25
27
  export { TableColumn, TableHandle, TableOptions, createTable } from './behaviors/datatable.js';
26
- export { AiAudioPart, AiContent, AiContentPart, AiFilePart, AiImagePart, AiKindDef, AiKindTint, AiMediaPart, AiResourceLinkPart, AiStatus, AiTextPart, AiToolCallModel, AiUsage, AiVideoPart, aiContentUrl, aiStatusLabel, contentToText, contextEstimate, estimateTokens, formatDuration, formatTokens, getAiKind, inferKind, isAiContentPart, isAiContentPartArray, normalizeContentParts, normalizeMcpContent, normalizeToolCall, normalizeUsage, registerAiKind, svgIcon } from './behaviors/ai-core.js';
28
+ export { AI_STATUSES, AiAudioPart, AiContent, AiContentPart, AiFilePart, AiImagePart, AiKindDef, AiKindTint, AiMediaPart, AiResourceLinkPart, AiStatus, AiTextPart, AiToolCallModel, AiUsage, AiVideoPart, addUsage, aiContentUrl, aiStatusLabel, contentToText, contextEstimate, estimateTokens, formatDuration, formatTokens, getAiKind, h, inferKind, isAiContentPart, normalizeContentParts, normalizeMcpContent, normalizeToolCall, normalizeUsage, registerAiKind, svgIcon } from './behaviors/ai-core.js';
27
29
  export { AiMessageHandle, AiMessageModel, AiStreamHandle, createAiStream, initAiChat, renderAiContentPart, renderAiMessage } from './behaviors/ai-chat.js';
28
- export { AiComposerBindOpts, AiComposerBinding, AiComposerCommand, AiComposerCurrentModel, AiComposerRefKind, AiComposerRefSource, AiProviderModelOption, AiProviderOption, bindComposer, initAiComposer, setComposerCommands, setComposerModels, setComposerRefs, setComposerRunning, setComposerTodo, setComposerUsage } from './behaviors/ai-composer.js';
30
+ export { AiComposerBindOpts, AiComposerBinding, AiComposerCommand, AiComposerCurrentModel, AiComposerRefDef, AiComposerRefKind, AiComposerRefSource, AiProviderModelOption, AiProviderOption, bindComposer, initAiComposer, registerRefKind, setComposerCommands, setComposerModels, setComposerRefs, setComposerRunning, setComposerTodo, setComposerUsage } from './behaviors/ai-composer.js';
29
31
  export { AiSubagentHandle, AiToolCallHandle, initAiSubagent, initAiTool, renderAiSubagent, renderAiToolCall } from './behaviors/ai-tool.js';
30
32
  export { AiDiffFile, AiDiffFileStatus, AiDiffHunk, AiDiffLine, AiDiffModel, initAiDiff, parseUnifiedDiff, renderAiDiff } from './behaviors/ai-diff.js';
31
33
  export { AiAuditRenderOpts, AiContextFile, AiContextMcpServer, AiContextModel, AiContextSkill, AiTodoItem, AiUsageRenderOpts, AiUsageRingOpts, initAiContext, initAiTodo, renderAiAudit, renderAiContext, renderAiTodo, renderAiUsage, renderAiUsageRing } from './behaviors/ai-panel.js';