@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
@@ -2,20 +2,19 @@
2
2
  * @icen.ai/ui — Component: tabs(分区导航 / 子导航)
3
3
  *
4
4
  * 完整契约:
5
- * <div class="page-tabs" role="tablist"> ← 页面内分区
6
- * <button class="page-tab [.active]" role="tab" [aria-selected="true"]>…</button>
5
+ * <div class="tabs" role="tablist"> ← 页面内分区
6
+ * <button class="page-tab [.is-active]" role="tab" [aria-selected="true"]>…</button>
7
7
  * </div>
8
8
  *
9
- * <nav class="admin-tabs" role="navigation"> ← 顶部子导航(a 链接)
10
- * <a class="[.active]" [aria-current="page"] href="…">…</a>
9
+ * <nav class="tabs" role="navigation"> ← 顶部子导航(a 链接)
10
+ * <a class="[.is-active]" [aria-current="page"] href="…">…</a>
11
11
  * </nav>
12
12
  *
13
13
  * 与 behaviors/tabs 配套:[data-tabs] > [data-tab] + [data-tab-panel],行为层维护 aria。
14
- * 窄屏换行不滚动(CLAUDE.md 纪律:tab 条永不出现滚动条)。
14
+ * 窄屏换行不滚动(纪律:tab 条永不出现滚动条,一律 flex-wrap: wrap)。
15
15
  */
16
16
 
17
- .page-tabs,
18
- .admin-tabs {
17
+ .tabs {
19
18
  display: flex;
20
19
  gap: 2px;
21
20
  flex-wrap: wrap;
@@ -47,14 +46,14 @@
47
46
  border-radius: var(--radius-sm);
48
47
  box-shadow: var(--icen-ring);
49
48
  }
50
- .page-tab.active,
49
+ .page-tab.is-active,
51
50
  .page-tab[aria-selected='true'] {
52
51
  color: var(--token-accent);
53
52
  border-bottom-color: var(--token-accent);
54
53
  font-weight: 700;
55
54
  }
56
55
 
57
- .admin-tabs a {
56
+ .tabs a {
58
57
  padding: var(--density-space-sm) var(--density-space-md);
59
58
  font-size: var(--density-font-size-md);
60
59
  color: var(--token-text-muted);
@@ -66,44 +65,44 @@
66
65
  color var(--icen-tx-fast),
67
66
  border-color var(--icen-tx-fast);
68
67
  }
69
- .admin-tabs a:hover {
68
+ .tabs a:hover {
70
69
  color: var(--token-accent);
71
70
  text-decoration: none;
72
71
  }
73
- .admin-tabs a:focus-visible {
72
+ .tabs a:focus-visible {
74
73
  outline: none;
75
74
  border-radius: var(--radius-sm);
76
75
  box-shadow: var(--icen-ring);
77
76
  }
78
- .admin-tabs a.active,
79
- .admin-tabs a[aria-current='page'] {
77
+ .tabs a.is-active,
78
+ .tabs a[aria-current='page'] {
80
79
  color: var(--token-accent);
81
80
  border-bottom-color: var(--token-accent);
82
81
  }
83
82
 
84
- /* 卡片变体(可选 .page-tabs--cards):tab 变成 pill,没有底边线 */
85
- .page-tabs--cards {
83
+ /* 卡片变体(可选 .tabs--cards):tab 变成 pill,没有底边线 */
84
+ .tabs--cards {
86
85
  border-bottom: 0;
87
86
  gap: var(--density-space-xs);
88
87
  margin-bottom: var(--density-space-md);
89
88
  }
90
- .page-tabs--cards .page-tab {
89
+ .tabs--cards .page-tab {
91
90
  padding: var(--density-space-xs) var(--density-space-md);
92
91
  border: 1px solid var(--token-outline-soft);
93
92
  border-radius: var(--radius-full);
94
93
  margin-bottom: 0;
95
94
  }
96
- .page-tabs--cards .page-tab.active,
97
- .page-tabs--cards .page-tab[aria-selected='true'] {
95
+ .tabs--cards .page-tab.is-active,
96
+ .tabs--cards .page-tab[aria-selected='true'] {
98
97
  background: var(--token-accent);
99
- color: var(--token-on-accent, #fff);
98
+ color: var(--token-on-accent);
100
99
  border-color: var(--token-accent);
101
100
  font-weight: 500;
102
101
  }
103
102
 
104
103
  /* 等宽变体:tab 平均占满容器 */
105
- .page-tabs--equal .page-tab,
106
- .admin-tabs--equal a {
104
+ .tabs--equal .page-tab,
105
+ .tabs--equal a {
107
106
  flex: 1;
108
107
  text-align: center;
109
108
  }
@@ -111,11 +110,11 @@
111
110
  /* ── 增强 ── */
112
111
 
113
112
  /* 尺寸变体 */
114
- .page-tabs--sm .page-tab {
113
+ .tabs--sm .page-tab {
115
114
  padding: var(--density-space-xs) var(--density-space-sm);
116
115
  font-size: var(--density-font-size-sm);
117
116
  }
118
- .page-tabs--lg .page-tab {
117
+ .tabs--lg .page-tab {
119
118
  padding: var(--density-space-md) calc(var(--density-space-md) + 4px);
120
119
  font-size: var(--density-font-size-lg);
121
120
  }
@@ -137,7 +136,7 @@
137
136
  height: 18px;
138
137
  padding: 0 5px;
139
138
  margin-left: var(--density-space-xs);
140
- font-size: 10px;
139
+ font-size: var(--density-font-size-2xs);
141
140
  font-weight: 600;
142
141
  color: var(--token-text-faint);
143
142
  background: var(--token-fill-2);
@@ -145,10 +144,10 @@
145
144
  font-variant-numeric: tabular-nums;
146
145
  line-height: 1;
147
146
  }
148
- .page-tab.active .page-tab-badge,
147
+ .page-tab.is-active .page-tab-badge,
149
148
  .page-tab[aria-selected='true'] .page-tab-badge {
150
149
  background: var(--token-accent);
151
- color: var(--token-on-accent, #fff);
150
+ color: var(--token-on-accent);
152
151
  }
153
152
 
154
153
  /* 可关闭 tab */
@@ -175,7 +174,7 @@
175
174
  .page-tab-close svg { width: 10px; height: 10px; }
176
175
 
177
176
  /* 分段式 tab(替代底边线,用 segmented 视觉) */
178
- .page-tabs--segment {
177
+ .tabs--segment {
179
178
  display: inline-flex;
180
179
  border-bottom: none;
181
180
  gap: 2px;
@@ -185,50 +184,40 @@
185
184
  border-radius: var(--radius-md);
186
185
  box-shadow: var(--token-shadow-inset);
187
186
  }
188
- .page-tabs--segment .page-tab {
187
+ .tabs--segment .page-tab {
189
188
  border-bottom: none;
190
189
  margin-bottom: 0;
191
190
  padding: var(--density-space-xs) var(--density-space-md);
192
191
  border-radius: var(--radius-sm);
193
192
  }
194
- .page-tabs--segment .page-tab.active,
195
- .page-tabs--segment .page-tab[aria-selected='true'] {
193
+ .tabs--segment .page-tab.is-active,
194
+ .tabs--segment .page-tab[aria-selected='true'] {
196
195
  background: var(--token-accent);
197
- color: var(--token-on-accent, #fff);
196
+ color: var(--token-on-accent);
198
197
  border-bottom-color: transparent;
199
198
  font-weight: 500;
200
199
  }
201
200
 
202
201
  /* 垂直 tab(侧栏式) */
203
- .page-tabs--vertical {
202
+ .tabs--vertical {
204
203
  flex-direction: column;
205
204
  border-bottom: none;
206
205
  border-right: 1px solid var(--token-line-soft);
207
206
  margin-bottom: 0;
208
207
  min-width: 160px;
209
208
  }
210
- .page-tabs--vertical .page-tab {
209
+ .tabs--vertical .page-tab {
211
210
  border-bottom: none;
212
211
  border-right: 2px solid transparent;
213
212
  margin-bottom: 0;
214
213
  margin-right: -1px;
215
214
  }
216
- .page-tabs--vertical .page-tab.active,
217
- .page-tabs--vertical .page-tab[aria-selected='true'] {
215
+ .tabs--vertical .page-tab.is-active,
216
+ .tabs--vertical .page-tab[aria-selected='true'] {
218
217
  border-right-color: var(--token-accent);
219
218
  border-bottom-color: transparent;
220
219
  }
221
220
 
222
- /* tab 溢出渐变提示(窄屏溢出时右侧渐变遮罩——纯视觉提示,不违反"不滚动"纪律,仍 flex-wrap) */
223
- .page-tabs--scroll {
224
- flex-wrap: nowrap;
225
- overflow-x: auto;
226
- overflow-y: hidden;
227
- scrollbar-width: none;
228
- -ms-overflow-style: none;
229
- }
230
- .page-tabs--scroll::-webkit-scrollbar { display: none; }
231
-
232
221
  @media (prefers-reduced-motion: reduce) {
233
- .page-tab, .admin-tabs a, .page-tab-close { transition: none; }
222
+ .page-tab, .tabs a, .page-tab-close { transition: none; }
234
223
  }
@@ -40,7 +40,7 @@
40
40
  .tag-input.is-max,
41
41
  .tag-input.is-max:focus-within {
42
42
  border-color: color-mix(in srgb, var(--token-warning) 60%, transparent);
43
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--token-warning) 14%, transparent);
43
+ box-shadow: var(--icen-ring-warning);
44
44
  }
45
45
  .tag-input.is-disabled,
46
46
  .tag-input[aria-disabled='true'],
@@ -98,7 +98,7 @@
98
98
  cursor: pointer;
99
99
  border-radius: var(--radius-full);
100
100
  color: inherit;
101
- font-size: 11px;
101
+ font-size: var(--density-font-size-xs);
102
102
  line-height: 1;
103
103
  opacity: 0.7;
104
104
  transition:
@@ -109,7 +109,7 @@
109
109
  .tag-chip-x:hover {
110
110
  opacity: 1;
111
111
  background: color-mix(in srgb, currentColor 18%, transparent);
112
- color: var(--token-on-accent, #fff);
112
+ color: var(--token-on-accent);
113
113
  }
114
114
  .tag-chip-x:focus-visible {
115
115
  outline: none;
@@ -135,7 +135,7 @@
135
135
 
136
136
  /* 重复值抖动反馈(behavior 短暂挂 is-shake) */
137
137
  .tag-input.is-shake {
138
- animation: tag-shake 0.32s var(--ease-out);
138
+ animation: tag-shake var(--tag-shake-duration, 0.32s) var(--ease-out);
139
139
  }
140
140
  @keyframes tag-shake {
141
141
  0%, 100% { transform: translateX(0); }
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * 完整契约:
7
7
  * <div class="toast-container" role="status" aria-live="polite">
8
- * <div class="toast [ok|err|warn]" role="status|alert">
8
+ * <div class="toast [toast--success|toast--error|toast--warning|toast--info]" role="status|alert">
9
9
  * <span class="toast-msg">文本</span>
10
10
  * <button class="toast-action">撤销</button> ← 可选 action
11
11
  * </div>
@@ -28,6 +28,8 @@
28
28
 
29
29
  .toast {
30
30
  pointer-events: auto;
31
+ position: relative;
32
+ overflow: hidden;
31
33
  display: inline-flex;
32
34
  align-items: center;
33
35
  gap: var(--density-space-sm);
@@ -45,9 +47,10 @@
45
47
  }
46
48
 
47
49
  /* 语义色:左缘 3px 强调 */
48
- .toast.ok { border-left-color: var(--token-success); }
49
- .toast.err { border-left-color: var(--token-error); }
50
- .toast.warn { border-left-color: var(--token-warning); }
50
+ .toast--success { border-left-color: var(--token-success); }
51
+ .toast--error { border-left-color: var(--token-error); }
52
+ .toast--warning { border-left-color: var(--token-warning); }
53
+ .toast--info { border-left-color: var(--token-info); }
51
54
 
52
55
  .toast-msg {
53
56
  flex: 1;
@@ -88,9 +91,10 @@
88
91
  color: var(--token-text-faint);
89
92
  }
90
93
  .toast-icon svg { width: 16px; height: 16px; }
91
- .toast.ok .toast-icon { color: var(--token-success); }
92
- .toast.err .toast-icon { color: var(--token-error); }
93
- .toast.warn .toast-icon { color: var(--token-warning); }
94
+ .toast--success .toast-icon { color: var(--token-success); }
95
+ .toast--error .toast-icon { color: var(--token-error); }
96
+ .toast--warning .toast-icon { color: var(--token-warning); }
97
+ .toast--info .toast-icon { color: var(--token-info); }
94
98
 
95
99
  /* 关闭按钮 */
96
100
  .toast-close {
@@ -149,16 +153,15 @@
149
153
  transform-origin: left;
150
154
  animation: toast-countdown linear forwards;
151
155
  }
152
- .toast.ok .toast-progress-fill { background: var(--token-success); }
153
- .toast.err .toast-progress-fill { background: var(--token-error); }
154
- .toast.warn .toast-progress-fill { background: var(--token-warning); }
156
+ .toast--success .toast-progress-fill { background: var(--token-success); }
157
+ .toast--error .toast-progress-fill { background: var(--token-error); }
158
+ .toast--warning .toast-progress-fill { background: var(--token-warning); }
159
+ .toast--info .toast-progress-fill { background: var(--token-info); }
155
160
  @keyframes toast-countdown {
156
161
  from { transform: scaleX(1); }
157
162
  to { transform: scaleX(0); }
158
163
  }
159
164
 
160
- .toast { position: relative; overflow: hidden; }
161
-
162
165
  /* 容器定位变体 */
163
166
  .toast-container[data-position='top-left'] {
164
167
  right: auto;
@@ -191,7 +194,7 @@
191
194
  align-items: center;
192
195
  }
193
196
 
194
- .toast.leaving {
197
+ .toast.is-leaving {
195
198
  opacity: 0;
196
199
  transform: translateY(8px);
197
200
  transition:
@@ -7,7 +7,7 @@
7
7
  * 无障碍:键盘 :focus-visible 立即出现(无延迟),鼠标 hover 延迟 400ms。
8
8
  */
9
9
 
10
- [data-tooltip] { position: relative; }
10
+ [data-tooltip] { position: relative; --tooltip-delay: 400ms; }
11
11
 
12
12
  [data-tooltip]::after {
13
13
  content: attr(data-tooltip);
@@ -32,7 +32,7 @@
32
32
  transition:
33
33
  opacity var(--icen-tx-fast),
34
34
  transform var(--icen-tx-fast);
35
- transition-delay: 400ms;
35
+ transition-delay: var(--tooltip-delay);
36
36
 
37
37
  /* 默认:上方、水平居中 */
38
38
  bottom: calc(100% + 6px);
@@ -0,0 +1,37 @@
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';
3
+ export { initTabs } from './behaviors/tabs.js';
4
+ export { initCopy } from './behaviors/copy.js';
5
+ export { initInput } from './behaviors/input.js';
6
+ export { initSelect } from './behaviors/select.js';
7
+ export { initSlider } from './behaviors/slider.js';
8
+ export { initTagInput } from './behaviors/tag-input.js';
9
+ export { initUpload } from './behaviors/upload.js';
10
+ export { closeModal, initModal, openModal } from './behaviors/modal.js';
11
+ 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 { initAccordion } from './behaviors/accordion.js';
15
+ export { initTree } from './behaviors/tree.js';
16
+ 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';
18
+ export { initNav } from './behaviors/nav.js';
19
+ export { initSidebar } from './behaviors/sidebar.js';
20
+ export { NotificationAction, NotificationCenterHandle, NotificationConfig, NotificationConfirmOptions, NotificationHandle, NotificationKind, NotificationOptions, NotificationPushInput, NotificationUpdatePatch, createNotificationCenter, initNotification, notify } from './behaviors/notification.js';
21
+ export { initBackTop } from './behaviors/back-top.js';
22
+ export { closeCommandPalette, initCommandPalette, openCommandPalette } from './behaviors/command-palette.js';
23
+ export { initDatePicker } from './behaviors/date-picker.js';
24
+ export { initSplitPane } from './behaviors/split-pane.js';
25
+ 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';
27
+ 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';
29
+ export { AiSubagentHandle, AiToolCallHandle, initAiSubagent, initAiTool, renderAiSubagent, renderAiToolCall } from './behaviors/ai-tool.js';
30
+ export { AiDiffFile, AiDiffFileStatus, AiDiffHunk, AiDiffLine, AiDiffModel, initAiDiff, parseUnifiedDiff, renderAiDiff } from './behaviors/ai-diff.js';
31
+ export { AiAuditRenderOpts, AiContextFile, AiContextMcpServer, AiContextModel, AiContextSkill, AiTodoItem, AiUsageRenderOpts, AiUsageRingOpts, initAiContext, initAiTodo, renderAiAudit, renderAiContext, renderAiTodo, renderAiUsage, renderAiUsageRing } from './behaviors/ai-panel.js';
32
+ export { AiAuditEntry, AiAuditTotals, AiAuditor, AiAuditorOptions, AiChatMessage, AiChatRequest, AiChatResult, AiChatRole, AiClient, AiClientConfig, AiClientOptions, AiDoneEventDetail, AiPricing, AiProviderDef, AiProviderError, AiProviderModel, AiStreamChunk, AiStreamSession, createAiAuditor, createAiClient, estimateCost, getAiProvider, listAiProviders, registerAiProvider } from './behaviors/ai-provider.js';
33
+ export { AiToolArea, AiToolAreaOptions, AiToolDef, AiToolRecord, aiToolsManifest, aiToolsToMcp, aiToolsToOpenAI, createAiToolArea, getAiTool, listAiTools, parseAiToolArgs, registerAiTool, unregisterAiTool } from './behaviors/ai-tools.js';
34
+
35
+ declare const VERSION: string;
36
+
37
+ export { VERSION };