@kitn.ai/ui 0.18.2 → 0.20.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 (258) hide show
  1. package/LICENSE +6 -0
  2. package/NOTICE +54 -0
  3. package/dist/components/audio-visualizer/audio-visualizer.voice-fixture.d.ts +59 -0
  4. package/dist/components/audio-visualizer/aurora.glsl.d.ts +114 -0
  5. package/dist/components/audio-visualizer/index.d.ts +155 -0
  6. package/dist/components/audio-visualizer/shader-canvas.d.ts +130 -0
  7. package/dist/components/audio-visualizer/sizes.d.ts +25 -0
  8. package/dist/components/audio-visualizer/variant-aurora.d.ts +89 -0
  9. package/dist/components/audio-visualizer/variant-bar.d.ts +46 -0
  10. package/dist/components/audio-visualizer/variant-custom.d.ts +73 -0
  11. package/dist/components/audio-visualizer/variant-grid.d.ts +22 -0
  12. package/dist/components/audio-visualizer/variant-radial.d.ts +13 -0
  13. package/dist/components/audio-visualizer/variant-wave.d.ts +11 -0
  14. package/dist/components/audio-visualizer/wave.glsl.d.ts +16 -0
  15. package/dist/components/thread.d.ts +54 -0
  16. package/dist/create-tween-hvpmSuwW.js +7 -0
  17. package/dist/custom-elements.json +477 -0
  18. package/dist/elements/agent-card.js +1 -1
  19. package/dist/elements/artifact.js +1 -1
  20. package/dist/elements/attachments.js +1 -1
  21. package/dist/elements/audio-visualizer.d.ts +1 -0
  22. package/dist/elements/audio-visualizer.js +1 -0
  23. package/dist/elements/autoloader.js +1 -1
  24. package/dist/elements/avatar.js +1 -1
  25. package/dist/elements/badge.js +1 -1
  26. package/dist/elements/button.js +1 -1
  27. package/dist/elements/card.js +1 -1
  28. package/dist/elements/cards.js +1 -1
  29. package/dist/elements/chain-of-thought.js +1 -1
  30. package/dist/elements/chat-scope-picker.js +1 -1
  31. package/dist/elements/chat-workspace.js +1 -1
  32. package/dist/elements/chat.js +1 -1
  33. package/dist/elements/checkpoint.js +1 -1
  34. package/dist/elements/choice.js +1 -1
  35. package/dist/elements/chunks/{Icon-C2LTALdM.js → Icon-Tj58ES_d.js} +1 -1
  36. package/dist/elements/chunks/action-icons-ns1Fnedj.js +1 -0
  37. package/dist/elements/chunks/arrow-left-DQocUFvy.js +1 -0
  38. package/dist/elements/chunks/{attachments-DLJcWCDV.js → attachments-mCB5F1Fq.js} +1 -1
  39. package/dist/elements/chunks/audio-visualizer-BqNy7dfm.js +1 -0
  40. package/dist/elements/chunks/{badge-BTNZTODL.js → badge-B4Zuajl2.js} +1 -1
  41. package/dist/elements/chunks/{button-DBDZebGr.js → button-ZWNif3--.js} +1 -1
  42. package/dist/elements/chunks/{card-YfCyI4fH.js → card-BkHbp4BA.js} +1 -1
  43. package/dist/elements/chunks/chat-thread-CkRN6pZ7.js +1 -0
  44. package/dist/elements/chunks/check-B9-gn6SS.js +1 -0
  45. package/dist/elements/chunks/chevron-down-BNsxc2hk.js +1 -0
  46. package/dist/elements/chunks/chevron-right-Hv00StBO.js +1 -0
  47. package/dist/elements/chunks/circle-0e3KJTDr.js +1 -0
  48. package/dist/elements/chunks/circle-check-BNAS0JEy.js +1 -0
  49. package/dist/elements/chunks/{circle-x-pDtzlghQ.js → circle-x-B7faJFlY.js} +1 -1
  50. package/dist/elements/chunks/{code-block-DZ6mz6vs.js → code-block-BFUHn6Va.js} +1 -1
  51. package/dist/elements/chunks/collapsible-DM1Ckd4e.js +1 -0
  52. package/dist/elements/chunks/{composer-BZyPU6gD.js → composer-BguS0QL_.js} +7 -3
  53. package/dist/elements/chunks/{context-Cx6eQA_G.js → context-Cb7k4F-v.js} +1 -1
  54. package/dist/elements/chunks/{conversation-list-C4xTQSpT.js → conversation-list-CvoAkWhN.js} +1 -1
  55. package/dist/elements/chunks/create-tween-oVvAIG8r.js +7 -0
  56. package/dist/elements/chunks/{default-input-BZcwyKcP.js → default-input-Cqqilg9t.js} +1 -1
  57. package/dist/elements/chunks/define-D1din7Ld.js +1 -0
  58. package/dist/elements/chunks/{disclosure-BcBs--Jf.js → disclosure-CIZ5c8nO.js} +1 -1
  59. package/dist/elements/chunks/{download-BDQwcFav.js → download-Dsbg3ste.js} +1 -1
  60. package/dist/elements/chunks/{dropdown-wgs8xCJZ.js → dropdown-BDd1-Zgi.js} +1 -1
  61. package/dist/elements/chunks/{ellipsis-CUiEJ6R1.js → ellipsis-Dw6qrss-.js} +1 -1
  62. package/dist/elements/chunks/{external-link-DJUmC7g2.js → external-link-Vt74zAoL.js} +1 -1
  63. package/dist/elements/chunks/{file-text-DOYfYvrh.js → file-text-CZrZF6_v.js} +1 -1
  64. package/dist/elements/chunks/{file-tree-DQzNQrbr.js → file-tree-DF4okKyo.js} +1 -1
  65. package/dist/elements/chunks/{folder-DBDUBANz.js → folder-glP5rha4.js} +1 -1
  66. package/dist/elements/chunks/hover-card-Cmm6Q53m.js +1 -0
  67. package/dist/elements/chunks/icon-BLb8beoi.js +1 -0
  68. package/dist/elements/chunks/{info-DBQl-m6e.js → info-CIsv92JK.js} +1 -1
  69. package/dist/elements/chunks/{input-DZD67EvW.js → input-Dds1kFyt.js} +1 -1
  70. package/dist/elements/chunks/{kbd-DbyVrlnU.js → kbd-De_xbgi9.js} +1 -1
  71. package/dist/elements/chunks/{link-vko7AttA.js → link-i4r_k7z4.js} +1 -1
  72. package/dist/elements/chunks/{loader-Cg6rO8tQ.js → loader-BmQH4s3V.js} +1 -1
  73. package/dist/elements/chunks/{markdown-n3Xbj3PR.js → markdown-Zi21WhUz.js} +7 -7
  74. package/dist/elements/chunks/{message-CgKytiSB.js → message-BqyXDN3-.js} +1 -1
  75. package/dist/elements/chunks/{message-feedback-Ds3-US0e.js → message-feedback-Djr3z6Yb.js} +1 -1
  76. package/dist/elements/chunks/message-square-vFAgbDaX.js +1 -0
  77. package/dist/elements/chunks/{minimize-2-3kCdE0q3.js → minimize-2--ifeCGrl.js} +1 -1
  78. package/dist/elements/chunks/{model-switcher-BMtXGwLU.js → model-switcher-B94YAKsM.js} +1 -1
  79. package/dist/elements/chunks/{overlay-B1-MBI6h.js → overlay-kD8dwRv_.js} +1 -1
  80. package/dist/elements/chunks/{paperclip-DDEfmkHc.js → paperclip-q21dYOSK.js} +1 -1
  81. package/dist/elements/chunks/{progress-bar-Dwbiyv3s.js → progress-bar-BrAIIaaJ.js} +1 -1
  82. package/dist/elements/chunks/{prompt-suggestion-9lvgFcEa.js → prompt-suggestion-Bjn2K-fR.js} +1 -1
  83. package/dist/elements/chunks/{reasoning-DzHWsdAJ.js → reasoning-DTpCGtnY.js} +1 -1
  84. package/dist/elements/chunks/resizable-Dp4JExql.js +1 -0
  85. package/dist/elements/chunks/{rotate-cw-jpisOdOV.js → rotate-cw-CFWWkpj2.js} +1 -1
  86. package/dist/elements/chunks/{scroll-area-g5Ze3K6f.js → scroll-area-Bb0kHH1j.js} +1 -1
  87. package/dist/elements/chunks/scroll-button-B0cH5fXf.js +1 -0
  88. package/dist/elements/chunks/{separator-Bmjc5XyX.js → separator-9kRgr1X9.js} +1 -1
  89. package/dist/elements/chunks/{settings-Cz1bMJP9.js → settings-B8lmec4D.js} +1 -1
  90. package/dist/elements/chunks/{settings-group-9imY3kRA.js → settings-group-I0hEuXiN.js} +1 -1
  91. package/dist/elements/chunks/{share-BdenF0wQ.js → share-C3lTiYGt.js} +1 -1
  92. package/dist/elements/chunks/skeleton-DSXW5Yya.js +1 -0
  93. package/dist/elements/chunks/{slots-DkZ-Cmha.js → slots--V19HwUb.js} +1 -1
  94. package/dist/elements/chunks/{star-DY6z1UUH.js → star-CSJtGxgv.js} +1 -1
  95. package/dist/elements/chunks/{store-th4VyJXM.js → store-CHyW95TP.js} +1 -1
  96. package/dist/elements/chunks/{text-shimmer-CEi-tlXr.js → text-shimmer-Cn9TmNpI.js} +1 -1
  97. package/dist/elements/chunks/textarea-CUwqAX0G.js +1 -0
  98. package/dist/elements/chunks/{thumbs-up-BR33KLfA.js → thumbs-up-PNVVThEF.js} +1 -1
  99. package/dist/elements/chunks/{toast-store-BEMda0fv.js → toast-store-DKbQn3Wn.js} +1 -1
  100. package/dist/elements/chunks/{tool-TMued3WO.js → tool-DjTRpIpl.js} +1 -1
  101. package/dist/elements/chunks/tooltip-CgBZCVKp.js +1 -0
  102. package/dist/elements/chunks/{triangle-alert-B07fX3Q8.js → triangle-alert-DsHTHCPm.js} +1 -1
  103. package/dist/elements/chunks/use-card-resolution-BSu_XHjH.js +1 -0
  104. package/dist/elements/chunks/variant-aurora-Dc4nQUia.js +218 -0
  105. package/dist/elements/chunks/variant-custom-y_3kVQhS.js +1 -0
  106. package/dist/elements/chunks/variant-wave-D5OR1-9Z.js +116 -0
  107. package/dist/elements/chunks/{video-MKp3LmNT.js → video-B7vmenoC.js} +1 -1
  108. package/dist/elements/chunks/x-GRUeeQFT.js +1 -0
  109. package/dist/elements/coachmark.js +1 -1
  110. package/dist/elements/code-block.js +1 -1
  111. package/dist/elements/command.js +1 -1
  112. package/dist/elements/compare.js +1 -1
  113. package/dist/elements/composer.js +1 -1
  114. package/dist/elements/confirm-card.js +1 -1
  115. package/dist/elements/context-meter.js +1 -1
  116. package/dist/elements/conversation-list.js +1 -1
  117. package/dist/elements/define.d.ts +11 -0
  118. package/dist/elements/dialog.js +1 -1
  119. package/dist/elements/editable-label.js +1 -1
  120. package/dist/elements/embed.js +1 -1
  121. package/dist/elements/empty.js +1 -1
  122. package/dist/elements/feedback-bar.js +1 -1
  123. package/dist/elements/file-tree.js +1 -1
  124. package/dist/elements/file-upload.js +1 -1
  125. package/dist/elements/form.js +1 -1
  126. package/dist/elements/hover-card.js +1 -1
  127. package/dist/elements/icon.js +1 -1
  128. package/dist/elements/image.js +1 -1
  129. package/dist/elements/input.js +1 -1
  130. package/dist/elements/kbd.js +1 -1
  131. package/dist/elements/link-preview.js +1 -1
  132. package/dist/elements/loader.js +1 -1
  133. package/dist/elements/markdown.js +1 -1
  134. package/dist/elements/menu.js +1 -1
  135. package/dist/elements/message-skills.js +1 -1
  136. package/dist/elements/message.js +1 -1
  137. package/dist/elements/model-switcher.js +1 -1
  138. package/dist/elements/nav.js +1 -1
  139. package/dist/elements/notice.js +1 -1
  140. package/dist/elements/pane-group.js +1 -1
  141. package/dist/elements/pane.js +1 -1
  142. package/dist/elements/popover.js +1 -1
  143. package/dist/elements/progress-bar.js +1 -1
  144. package/dist/elements/prompt-dock.js +1 -1
  145. package/dist/elements/prompt-input.js +1 -1
  146. package/dist/elements/prompt-suggestions.js +1 -1
  147. package/dist/elements/reasoning.js +1 -1
  148. package/dist/elements/remote.js +1 -1
  149. package/dist/elements/resizable.js +1 -1
  150. package/dist/elements/response-stream.js +1 -1
  151. package/dist/elements/screen.js +1 -1
  152. package/dist/elements/scroll-area.js +1 -1
  153. package/dist/elements/scroll-button.js +1 -1
  154. package/dist/elements/search.js +1 -1
  155. package/dist/elements/segmented.js +1 -1
  156. package/dist/elements/separator.js +1 -1
  157. package/dist/elements/setting-item.js +1 -1
  158. package/dist/elements/settings-group.js +1 -1
  159. package/dist/elements/skeleton.js +1 -1
  160. package/dist/elements/slots.d.ts +15 -0
  161. package/dist/elements/source.js +1 -1
  162. package/dist/elements/status.js +1 -1
  163. package/dist/elements/switch.js +1 -1
  164. package/dist/elements/tabs.js +1 -1
  165. package/dist/elements/tasks.js +1 -1
  166. package/dist/elements/text-shimmer.js +1 -1
  167. package/dist/elements/thinking-bar.js +1 -1
  168. package/dist/elements/thread.d.ts +1 -0
  169. package/dist/elements/thread.js +1 -0
  170. package/dist/elements/toast.js +1 -1
  171. package/dist/elements/tool.js +1 -1
  172. package/dist/elements/tooltip.js +1 -1
  173. package/dist/elements/voice-input.js +1 -1
  174. package/dist/elements/voice-output.js +1 -1
  175. package/dist/elements.d.ts +62 -0
  176. package/dist/index.js +3411 -3328
  177. package/dist/kai.es.js +1 -1
  178. package/dist/llms/llms-full.txt +70 -4
  179. package/dist/llms/llms.txt +3 -3
  180. package/dist/primitives/audio-bands.d.ts +106 -0
  181. package/dist/primitives/create-tween.d.ts +33 -0
  182. package/dist/primitives/use-audio-analysis.d.ts +149 -0
  183. package/dist/primitives/use-sequencer.d.ts +13 -0
  184. package/dist/primitives/use-voice-recorder.d.ts +1 -0
  185. package/dist/primitives/visualizer-sequences.d.ts +39 -0
  186. package/dist/react/index.d.ts +105 -0
  187. package/dist/react/use-voice-input.d.ts +15 -0
  188. package/dist/react.js +269 -240
  189. package/dist/register-impl-DQyejdfb.js +145 -0
  190. package/dist/test-utils/fake-clock.d.ts +45 -0
  191. package/dist/ui/resizable.d.ts +9 -3
  192. package/dist/variant-aurora-DVtGqVH6.js +218 -0
  193. package/dist/variant-custom-Dif-IV4u.js +1 -0
  194. package/dist/variant-wave-DbfNdvSi.js +116 -0
  195. package/frameworks/react/index.tsx +74 -1
  196. package/frameworks/react/use-voice-input.tsx +59 -0
  197. package/llms-full.txt +70 -4
  198. package/llms.txt +3 -3
  199. package/package.json +32 -7
  200. package/src/components/audio-visualizer/audio-visualizer.voice-fixture.ts +257 -0
  201. package/src/components/audio-visualizer/aurora.glsl.ts +330 -0
  202. package/src/components/audio-visualizer/index.tsx +442 -0
  203. package/src/components/audio-visualizer/shader-canvas.tsx +846 -0
  204. package/src/components/audio-visualizer/sizes.ts +54 -0
  205. package/src/components/audio-visualizer/variant-aurora.tsx +299 -0
  206. package/src/components/audio-visualizer/variant-bar.tsx +143 -0
  207. package/src/components/audio-visualizer/variant-custom.tsx +338 -0
  208. package/src/components/audio-visualizer/variant-grid.tsx +170 -0
  209. package/src/components/audio-visualizer/variant-radial.tsx +158 -0
  210. package/src/components/audio-visualizer/variant-wave.tsx +125 -0
  211. package/src/components/audio-visualizer/wave.glsl.ts +130 -0
  212. package/src/components/component-meta.json +34 -32
  213. package/src/components/composer.tsx +5 -0
  214. package/src/components/thread.tsx +177 -0
  215. package/src/elements/audio-visualizer.tsx +183 -0
  216. package/src/elements/chat-workspace.tsx +1 -1
  217. package/src/elements/compiled.css +1 -1
  218. package/src/elements/define.tsx +12 -1
  219. package/src/elements/element-manifest.json +8 -0
  220. package/src/elements/element-meta.json +287 -0
  221. package/src/elements/element-types.d.ts +62 -0
  222. package/src/elements/icon-names.json +2 -0
  223. package/src/elements/menu.tsx +7 -4
  224. package/src/elements/register-impl.ts +3 -0
  225. package/src/elements/resizable.tsx +78 -2
  226. package/src/elements/slots.ts +42 -0
  227. package/src/elements/thread.tsx +105 -0
  228. package/src/primitives/audio-bands.ts +174 -0
  229. package/src/primitives/create-tween.ts +214 -0
  230. package/src/primitives/use-audio-analysis.ts +321 -0
  231. package/src/primitives/use-sequencer.ts +53 -0
  232. package/src/primitives/use-voice-recorder.ts +16 -4
  233. package/src/primitives/visualizer-sequences.ts +350 -0
  234. package/src/test-utils/fake-clock.ts +88 -0
  235. package/src/ui/action-icons.ts +2 -1
  236. package/src/ui/icon.tsx +4 -0
  237. package/src/ui/overlay.tsx +8 -1
  238. package/src/ui/resizable.tsx +47 -9
  239. package/dist/elements/chunks/action-icons-Dtl8Ox5D.js +0 -1
  240. package/dist/elements/chunks/arrow-left-GbBceGBE.js +0 -1
  241. package/dist/elements/chunks/chat-thread-Dz2qbzvI.js +0 -1
  242. package/dist/elements/chunks/check-fhmRksq_.js +0 -1
  243. package/dist/elements/chunks/chevron-down-DcRg1aRU.js +0 -1
  244. package/dist/elements/chunks/chevron-right-ChzBcNJ-.js +0 -1
  245. package/dist/elements/chunks/circle-B4fTe9v6.js +0 -1
  246. package/dist/elements/chunks/circle-check-CJV-3Rem.js +0 -1
  247. package/dist/elements/chunks/collapsible-CWUAShMC.js +0 -1
  248. package/dist/elements/chunks/define-CNSKFZCd.js +0 -1
  249. package/dist/elements/chunks/hover-card-BQGdGAQ3.js +0 -1
  250. package/dist/elements/chunks/icon-CAyRqVrg.js +0 -1
  251. package/dist/elements/chunks/message-square-MmRkvc-M.js +0 -1
  252. package/dist/elements/chunks/resizable-Bq_eHxUm.js +0 -1
  253. package/dist/elements/chunks/skeleton-Pjc5jiaY.js +0 -1
  254. package/dist/elements/chunks/textarea-CboigarR.js +0 -1
  255. package/dist/elements/chunks/tooltip-Cft_Rxiw.js +0 -1
  256. package/dist/elements/chunks/use-card-resolution-M36zVciB.js +0 -1
  257. package/dist/elements/chunks/x-Ckwicf6g.js +0 -1
  258. package/dist/register-impl-DcjZDELj.js +0 -141
package/dist/react.js CHANGED
@@ -1,34 +1,34 @@
1
1
  "use client";
2
- import { forwardRef as w, useRef as x, useImperativeHandle as M, useLayoutEffect as y, createElement as O, useState as T, useCallback as k, useMemo as R } from "react";
3
- const I = /* @__PURE__ */ new Set();
4
- function A(t, r) {
5
- !r || I.has(t) || typeof window > "u" || typeof customElements > "u" || (I.add(t), !customElements.get(t) && r());
2
+ import { forwardRef as M, useRef as y, useImperativeHandle as R, useLayoutEffect as T, createElement as O, useState as x, useCallback as k, useMemo as A } from "react";
3
+ const w = /* @__PURE__ */ new Set();
4
+ function E(t, r) {
5
+ !r || w.has(t) || typeof window > "u" || typeof customElements > "u" || (w.add(t), !customElements.get(t) && r());
6
6
  }
7
- function U() {
7
+ function W() {
8
8
  if (!(typeof window > "u" || typeof customElements > "u"))
9
9
  return import("@kitn.ai/ui/elements");
10
10
  }
11
- function e(t, r, s, i) {
12
- const l = Object.entries(s), d = w((o, n) => {
13
- const a = x(null);
14
- M(n, () => a.current, []);
15
- const c = o, h = x({});
16
- for (const u of Object.keys(s)) h.current[u] = c[u];
17
- return y(() => {
11
+ function e(t, r, s, n) {
12
+ const c = Object.entries(s), d = M((o, i) => {
13
+ const a = y(null);
14
+ R(i, () => a.current, []);
15
+ const l = o, h = y({});
16
+ for (const u of Object.keys(s)) h.current[u] = l[u];
17
+ return T(() => {
18
18
  const u = a.current;
19
19
  if (!u) return;
20
20
  const b = () => {
21
21
  for (const g of r)
22
- g in c && c[g] !== void 0 && (u[g] = c[g]);
22
+ g in l && l[g] !== void 0 && (u[g] = l[g]);
23
23
  };
24
24
  b(), typeof customElements < "u" && !customElements.get(t) && customElements.whenDefined(t).then(b);
25
- }), y(() => {
26
- A(t, i);
27
- }, []), y(() => {
25
+ }), T(() => {
26
+ E(t, n);
27
+ }, []), T(() => {
28
28
  const u = a.current;
29
29
  if (!u) return;
30
30
  const b = [];
31
- for (const [g, f] of l) {
31
+ for (const [g, f] of c) {
32
32
  const v = (C) => {
33
33
  const S = h.current[g];
34
34
  typeof S == "function" && S(C);
@@ -40,136 +40,136 @@ function e(t, r, s, i) {
40
40
  t,
41
41
  {
42
42
  ref: a,
43
- className: c.className,
44
- style: c.style,
45
- id: c.id
43
+ className: l.className,
44
+ style: l.style,
45
+ id: l.id
46
46
  },
47
47
  // Light-DOM children pass straight through to the element (slots).
48
- c.children ?? null
48
+ l.children ?? null
49
49
  );
50
50
  });
51
51
  return d.displayName = t, d;
52
52
  }
53
- function E(t, r) {
53
+ function V(t, r) {
54
54
  return [...t, r];
55
55
  }
56
- function V(t, r, s) {
56
+ function D(t, r, s) {
57
57
  return t.map(
58
- (i) => i.id === r ? typeof s == "function" ? s(i) : { ...i, ...s } : i
58
+ (n) => n.id === r ? typeof s == "function" ? s(n) : { ...n, ...s } : n
59
59
  );
60
60
  }
61
- function D(t, r) {
61
+ function F(t, r) {
62
62
  return t.filter((s) => s.id !== r);
63
63
  }
64
- function F(t, r) {
64
+ function B(t, r) {
65
65
  return t.includes(r) ? t.slice() : [...t, r];
66
66
  }
67
67
  function L(t, r) {
68
68
  return t.filter((s) => s !== r);
69
69
  }
70
- function B() {
70
+ function P() {
71
71
  return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : "kai-" + Math.random().toString(36).slice(2);
72
72
  }
73
- function P(t, r = {}) {
74
- const s = r.id ?? B(), i = { id: s, role: "assistant", content: "", ...r };
75
- t((o) => [...o, i]);
76
- const l = (o) => t((n) => n.map((a) => a.id === s ? o(a) : a)), d = {
73
+ function H(t, r = {}) {
74
+ const s = r.id ?? P(), n = { id: s, role: "assistant", content: "", ...r };
75
+ t((o) => [...o, n]);
76
+ const c = (o) => t((i) => i.map((a) => a.id === s ? o(a) : a)), d = {
77
77
  id: s,
78
78
  appendText(o) {
79
- return l((n) => ({ ...n, content: n.content + o })), d;
79
+ return c((i) => ({ ...i, content: i.content + o })), d;
80
80
  },
81
81
  setText(o) {
82
- return l((n) => ({ ...n, content: o })), d;
82
+ return c((i) => ({ ...i, content: o })), d;
83
83
  },
84
- appendReasoning(o, n) {
85
- return l((a) => {
86
- var c, h;
87
- return { ...a, reasoning: { text: (((c = a.reasoning) == null ? void 0 : c.text) ?? "") + o, label: n ?? ((h = a.reasoning) == null ? void 0 : h.label) } };
84
+ appendReasoning(o, i) {
85
+ return c((a) => {
86
+ var l, h;
87
+ return { ...a, reasoning: { text: (((l = a.reasoning) == null ? void 0 : l.text) ?? "") + o, label: i ?? ((h = a.reasoning) == null ? void 0 : h.label) } };
88
88
  }), d;
89
89
  },
90
- setReasoning(o, n) {
91
- return l((a) => {
92
- var c;
93
- return { ...a, reasoning: { text: o, label: n ?? ((c = a.reasoning) == null ? void 0 : c.label) } };
90
+ setReasoning(o, i) {
91
+ return c((a) => {
92
+ var l;
93
+ return { ...a, reasoning: { text: o, label: i ?? ((l = a.reasoning) == null ? void 0 : l.label) } };
94
94
  }), d;
95
95
  },
96
96
  upsertTool(o) {
97
- return l((n) => {
98
- const a = n.tools ? n.tools.slice() : [], c = o.toolCallId != null ? a.findIndex((h) => h.toolCallId === o.toolCallId) : a.findIndex((h) => h.type === o.type);
99
- return c === -1 ? a.push(o) : a[c] = o, { ...n, tools: a };
97
+ return c((i) => {
98
+ const a = i.tools ? i.tools.slice() : [], l = o.toolCallId != null ? a.findIndex((h) => h.toolCallId === o.toolCallId) : a.findIndex((h) => h.type === o.type);
99
+ return l === -1 ? a.push(o) : a[l] = o, { ...i, tools: a };
100
100
  }), d;
101
101
  },
102
- updateTool(o, n) {
103
- return l((a) => ({ ...a, tools: (a.tools ?? []).map((c) => c.toolCallId === o ? { ...c, ...n } : c) })), d;
102
+ updateTool(o, i) {
103
+ return c((a) => ({ ...a, tools: (a.tools ?? []).map((l) => l.toolCallId === o ? { ...l, ...i } : l) })), d;
104
104
  },
105
105
  patch(o) {
106
- return l((n) => ({ ...n, ...o })), d;
106
+ return c((i) => ({ ...i, ...o })), d;
107
107
  },
108
108
  done(o) {
109
- o && l((n) => ({ ...n, ...o }));
109
+ o && c((i) => ({ ...i, ...o }));
110
110
  },
111
111
  abort(o) {
112
- o ? l((n) => ({ ...n, tools: (n.tools ?? []).map((a) => ({ ...a, state: "output-error", errorText: o })) })) : t((n) => n.filter((a) => a.id !== s));
112
+ o ? c((i) => ({ ...i, tools: (i.tools ?? []).map((a) => ({ ...a, state: "output-error", errorText: o })) })) : t((i) => i.filter((a) => a.id !== s));
113
113
  }
114
114
  };
115
115
  return d;
116
116
  }
117
- function H(t, r) {
117
+ function N(t, r) {
118
118
  const s = {
119
119
  id: t.id,
120
- appendText(i) {
121
- return t.appendText(i), s;
120
+ appendText(n) {
121
+ return t.appendText(n), s;
122
122
  },
123
- setText(i) {
124
- return t.setText(i), s;
123
+ setText(n) {
124
+ return t.setText(n), s;
125
125
  },
126
- appendReasoning(i, l) {
127
- return t.appendReasoning(i, l), s;
126
+ appendReasoning(n, c) {
127
+ return t.appendReasoning(n, c), s;
128
128
  },
129
- setReasoning(i, l) {
130
- return t.setReasoning(i, l), s;
129
+ setReasoning(n, c) {
130
+ return t.setReasoning(n, c), s;
131
131
  },
132
- upsertTool(i) {
133
- return t.upsertTool(i), s;
132
+ upsertTool(n) {
133
+ return t.upsertTool(n), s;
134
134
  },
135
- updateTool(i, l) {
136
- return t.updateTool(i, l), s;
135
+ updateTool(n, c) {
136
+ return t.updateTool(n, c), s;
137
137
  },
138
- patch(i) {
139
- return t.patch(i), s;
138
+ patch(n) {
139
+ return t.patch(n), s;
140
140
  },
141
- done(i) {
142
- t.done(i), r();
141
+ done(n) {
142
+ t.done(n), r();
143
143
  },
144
- abort(i) {
145
- t.abort(i), r();
144
+ abort(n) {
145
+ t.abort(n), r();
146
146
  }
147
147
  };
148
148
  return s;
149
149
  }
150
- function W(t = {}) {
151
- const [r, s] = T(() => [...t.initialMessages ?? []]), [i, l] = T(() => [...t.initialSuggestions ?? []]), [d, o] = T(!1), n = x(t.onSubmit);
152
- n.current = t.onSubmit;
153
- const a = k((m) => s(m), []), c = k((m) => a((p) => E(p, m)), [a]), h = k(
154
- (m, p) => a((z) => V(z, m, p)),
150
+ function j(t = {}) {
151
+ const [r, s] = x(() => [...t.initialMessages ?? []]), [n, c] = x(() => [...t.initialSuggestions ?? []]), [d, o] = x(!1), i = y(t.onSubmit);
152
+ i.current = t.onSubmit;
153
+ const a = k((m) => s(m), []), l = k((m) => a((p) => V(p, m)), [a]), h = k(
154
+ (m, p) => a((I) => D(I, m, p)),
155
155
  [a]
156
- ), u = k((m) => a((p) => D(p, m)), [a]), b = k((m) => l((p) => F(p, m)), []), g = k((m) => l((p) => L(p, m)), []), f = k(() => l([]), []), v = k((m) => (o(!0), H(P(a, m), () => o(!1))), [a]), C = k(
156
+ ), u = k((m) => a((p) => F(p, m)), [a]), b = k((m) => c((p) => B(p, m)), []), g = k((m) => c((p) => L(p, m)), []), f = k(() => c([]), []), v = k((m) => (o(!0), N(H(a, m), () => o(!1))), [a]), C = k(
157
157
  (m) => {
158
158
  var p;
159
- (p = n.current) == null || p.call(n, m.detail);
159
+ (p = i.current) == null || p.call(i, m.detail);
160
160
  },
161
161
  []
162
- ), S = R(
163
- () => ({ messages: r, loading: d, suggestions: i, onSubmit: C }),
164
- [r, d, i, C]
162
+ ), S = A(
163
+ () => ({ messages: r, loading: d, suggestions: n, onSubmit: C }),
164
+ [r, d, n, C]
165
165
  );
166
166
  return {
167
167
  messages: r,
168
168
  setMessages: s,
169
- suggestions: i,
170
- setSuggestions: l,
169
+ suggestions: n,
170
+ setSuggestions: c,
171
171
  loading: d,
172
- append: c,
172
+ append: l,
173
173
  update: h,
174
174
  remove: u,
175
175
  addSuggestion: b,
@@ -179,476 +179,505 @@ function W(t = {}) {
179
179
  bind: S
180
180
  };
181
181
  }
182
- const j = /* @__PURE__ */ e(
182
+ function z() {
183
+ if (typeof window > "u") return;
184
+ const t = window;
185
+ return t.SpeechRecognition ?? t.webkitSpeechRecognition;
186
+ }
187
+ function q(t) {
188
+ const r = y(t);
189
+ r.current = t;
190
+ const s = z() !== void 0, n = k(() => {
191
+ const c = z();
192
+ if (!c) return;
193
+ const d = new c();
194
+ d.lang = "en-US", d.interimResults = !1, d.onresult = (o) => r.current(o.results[0][0].transcript), d.start();
195
+ }, []);
196
+ return { supported: s, start: n };
197
+ }
198
+ const G = /* @__PURE__ */ e(
183
199
  "kai-agent-card",
184
200
  ["theme", "name", "active", "needsAttention", "status"],
185
201
  { onActivate: "kai-activate", onMenu: "kai-menu" },
186
202
  () => import("@kitn.ai/ui/elements/agent-card")
187
- ), q = /* @__PURE__ */ e(
203
+ ), K = /* @__PURE__ */ e(
188
204
  "kai-artifact",
189
205
  ["theme", "src", "files", "tab", "defaultTab", "activeFile", "sandbox", "iframeTitle", "maximized", "expandable", "openInTab", "noNav", "noReload", "noHome", "noPathField", "noTabs", "standalone", "readonlyPath", "displayUrl"],
190
206
  { onFileSelect: "kai-file-select", onMaximizeChange: "kai-maximize-change", onNavigate: "kai-navigate", onTabChange: "kai-tab-change" },
191
207
  () => import("@kitn.ai/ui/elements/artifact")
192
- ), G = /* @__PURE__ */ e(
208
+ ), Q = /* @__PURE__ */ e(
193
209
  "kai-attachments",
194
210
  ["theme", "items", "variant", "hoverCard", "removable", "showMediaType", "emptyText"],
195
211
  { onRemove: "kai-remove" },
196
212
  () => import("@kitn.ai/ui/elements/attachments")
197
- ), K = /* @__PURE__ */ e(
213
+ ), J = /* @__PURE__ */ e(
214
+ "kai-audio-visualizer",
215
+ ["theme", "variant", "state", "size", "barCount", "count", "radius", "spread", "interval", "color", "complexity", "label", "stream", "audioElement", "bands", "shader", "animateWhenNotVisible"],
216
+ {},
217
+ () => import("@kitn.ai/ui/elements/audio-visualizer")
218
+ ), X = /* @__PURE__ */ e(
198
219
  "kai-avatar",
199
220
  ["theme", "src", "alt", "fallback", "size"],
200
221
  {},
201
222
  () => import("@kitn.ai/ui/elements/avatar")
202
- ), Q = /* @__PURE__ */ e(
223
+ ), Y = /* @__PURE__ */ e(
203
224
  "kai-badge",
204
225
  ["theme", "variant"],
205
226
  {},
206
227
  () => import("@kitn.ai/ui/elements/badge")
207
- ), J = /* @__PURE__ */ e(
228
+ ), Z = /* @__PURE__ */ e(
208
229
  "kai-button",
209
230
  ["theme", "variant", "size", "icon", "iconTrailing", "label", "disabled", "full", "align", "type"],
210
231
  { onClick: "kai-click" },
211
232
  () => import("@kitn.ai/ui/elements/button")
212
- ), X = /* @__PURE__ */ e(
233
+ ), _ = /* @__PURE__ */ e(
213
234
  "kai-card",
214
235
  ["theme", "appearance", "orientation", "collapse", "dense", "dismissible", "href", "target", "rel", "clickable"],
215
236
  { onCardClick: "kai-card-click", onDismiss: "kai-dismiss" },
216
237
  () => import("@kitn.ai/ui/elements/card")
217
- ), Y = /* @__PURE__ */ e(
238
+ ), $ = /* @__PURE__ */ e(
218
239
  "kai-cards",
219
240
  ["theme", "cards", "types", "policy"],
220
241
  { onCardResolved: "kai-card-resolved" },
221
242
  () => import("@kitn.ai/ui/elements/cards")
222
- ), Z = /* @__PURE__ */ e(
243
+ ), ee = /* @__PURE__ */ e(
223
244
  "kai-chain-of-thought",
224
245
  ["theme", "steps", "type", "value", "defaultValue"],
225
246
  { onValueChange: "kai-value-change" },
226
247
  () => import("@kitn.ai/ui/elements/chain-of-thought")
227
- ), _ = /* @__PURE__ */ e(
248
+ ), te = /* @__PURE__ */ e(
228
249
  "kai-chat",
229
250
  ["theme", "messages", "value", "placeholder", "loading", "suggestions", "suggestionMode", "persistSuggestions", "proseSize", "codeTheme", "codeHighlight", "chatTitle", "models", "currentModel", "context", "scrollButton", "headerStart", "headerEnd", "headerFull", "sidebar", "empty", "composer", "composerActions", "footer", "search", "voice", "triggers", "kindIcons", "actionsReveal"],
230
251
  { onAttachmentsChange: "kai-attachments-change", onMessageAction: "kai-message-action", onModelChange: "kai-model-change", onSearch: "kai-search", onSubmit: "kai-submit", onSuggestionClick: "kai-suggestion-click", onValueChange: "kai-value-change", onVoice: "kai-voice" },
231
252
  () => import("@kitn.ai/ui/elements/chat")
232
- ), $ = /* @__PURE__ */ e(
253
+ ), ae = /* @__PURE__ */ e(
233
254
  "kai-checkpoint",
234
255
  ["theme", "label", "tooltip", "variant", "size"],
235
256
  { onSelect: "kai-select" },
236
257
  () => import("@kitn.ai/ui/elements/checkpoint")
237
- ), ee = /* @__PURE__ */ e(
258
+ ), oe = /* @__PURE__ */ e(
238
259
  "kai-choice",
239
260
  ["theme", "data", "cardId", "heading", "resolution", "value", "defaultValue", "disabled"],
240
261
  { onValueChange: "kai-value-change" },
241
262
  () => import("@kitn.ai/ui/elements/choice")
242
- ), te = /* @__PURE__ */ e(
263
+ ), ne = /* @__PURE__ */ e(
243
264
  "kai-coachmark",
244
265
  ["theme", "open", "defaultOpen", "headline", "badge", "placement", "tone", "arrow"],
245
266
  { onDismiss: "kai-dismiss", onOpenChange: "kai-open-change" },
246
267
  () => import("@kitn.ai/ui/elements/coachmark")
247
- ), ae = /* @__PURE__ */ e(
268
+ ), ie = /* @__PURE__ */ e(
248
269
  "kai-code-block",
249
270
  ["theme", "code", "language", "codeTheme", "codeHighlight", "proseSize"],
250
271
  {},
251
272
  () => import("@kitn.ai/ui/elements/code-block")
252
- ), oe = /* @__PURE__ */ e(
273
+ ), se = /* @__PURE__ */ e(
253
274
  "kai-command",
254
275
  ["theme", "items", "placeholder", "emptyLabel"],
255
276
  { onActiveChange: "kai-active-change", onQueryChange: "kai-query-change", onSelect: "kai-select" },
256
277
  () => import("@kitn.ai/ui/elements/command")
257
- ), ne = /* @__PURE__ */ e(
278
+ ), re = /* @__PURE__ */ e(
258
279
  "kai-compare",
259
280
  ["theme", "data", "compareId", "selection", "layout", "proseSize", "codeTheme", "codeHighlight"],
260
281
  { onCompareSelect: "kai-compare-select", onError: "kai-error", onReady: "kai-ready" },
261
282
  () => import("@kitn.ai/ui/elements/compare")
262
- ), ie = /* @__PURE__ */ e(
283
+ ), ce = /* @__PURE__ */ e(
263
284
  "kai-composer",
264
285
  ["theme", "value", "placeholder", "disabled", "loading", "maxHeight", "submitOnEnter", "triggers", "highlights", "kindIcons"],
265
286
  { onBlur: "kai-blur", onEntityAdd: "kai-entity-add", onEntityRemove: "kai-entity-remove", onFocus: "kai-focus", onSubmit: "kai-submit", onTrigger: "kai-trigger", onTriggerClose: "kai-trigger-close", onValueChange: "kai-value-change" },
266
287
  () => import("@kitn.ai/ui/elements/composer")
267
- ), se = /* @__PURE__ */ e(
288
+ ), le = /* @__PURE__ */ e(
268
289
  "kai-confirm",
269
290
  ["theme", "data", "cardId", "heading", "autofocus", "resolution"],
270
291
  {},
271
292
  () => import("@kitn.ai/ui/elements/confirm-card")
272
- ), re = /* @__PURE__ */ e(
293
+ ), de = /* @__PURE__ */ e(
273
294
  "kai-context",
274
295
  ["theme", "context", "warnThreshold", "dangerThreshold"],
275
296
  { onThresholdChange: "kai-threshold-change" },
276
297
  () => import("@kitn.ai/ui/elements/context-meter")
277
- ), ce = /* @__PURE__ */ e(
298
+ ), me = /* @__PURE__ */ e(
278
299
  "kai-conversations",
279
300
  ["theme", "groups", "conversations", "activeId", "collapsed", "defaultCollapsed"],
280
301
  { onCollapseToggle: "kai-collapse-toggle", onConversationSelect: "kai-conversation-select", onNewChat: "kai-new-chat", onSearch: "kai-search", onToggleSidebar: "kai-toggle-sidebar" },
281
302
  () => import("@kitn.ai/ui/elements/conversation-list")
282
- ), le = /* @__PURE__ */ e(
303
+ ), pe = /* @__PURE__ */ e(
283
304
  "kai-dialog",
284
305
  ["theme", "open", "defaultOpen"],
285
306
  { onOpenChange: "kai-open-change" },
286
307
  () => import("@kitn.ai/ui/elements/dialog")
287
- ), de = /* @__PURE__ */ e(
308
+ ), he = /* @__PURE__ */ e(
288
309
  "kai-editable-label",
289
310
  ["theme", "value", "editing", "placeholder", "disabled"],
290
311
  { onCancel: "kai-cancel", onRename: "kai-rename" },
291
312
  () => import("@kitn.ai/ui/elements/editable-label")
292
- ), me = /* @__PURE__ */ e(
313
+ ), ue = /* @__PURE__ */ e(
293
314
  "kai-embed",
294
315
  ["theme", "cardId", "data"],
295
316
  {},
296
317
  () => import("@kitn.ai/ui/elements/embed")
297
- ), pe = /* @__PURE__ */ e(
318
+ ), ge = /* @__PURE__ */ e(
298
319
  "kai-empty",
299
320
  ["theme", "emptyTitle", "description"],
300
321
  {},
301
322
  () => import("@kitn.ai/ui/elements/empty")
302
- ), he = /* @__PURE__ */ e(
323
+ ), ke = /* @__PURE__ */ e(
303
324
  "kai-feedback-bar",
304
325
  ["theme", "barTitle", "collectDetail", "categories", "detailTitle", "detailPlaceholder", "submitLabel", "thanksMessage"],
305
326
  { onClose: "kai-close", onFeedback: "kai-feedback", onFeedbackDetail: "kai-feedback-detail" },
306
327
  () => import("@kitn.ai/ui/elements/feedback-bar")
307
- ), ue = /* @__PURE__ */ e(
328
+ ), be = /* @__PURE__ */ e(
308
329
  "kai-file-tree",
309
330
  ["theme", "files", "activeFile", "defaultExpanded", "summary"],
310
331
  { onSelect: "kai-select" },
311
332
  () => import("@kitn.ai/ui/elements/file-tree")
312
- ), ge = /* @__PURE__ */ e(
333
+ ), fe = /* @__PURE__ */ e(
313
334
  "kai-file-upload",
314
335
  ["theme", "multiple", "accept", "disabled", "label"],
315
336
  { onFilesAdded: "kai-files-added" },
316
337
  () => import("@kitn.ai/ui/elements/file-upload")
317
- ), ke = /* @__PURE__ */ e(
338
+ ), ve = /* @__PURE__ */ e(
318
339
  "kai-form",
319
340
  ["theme", "data", "cardId", "heading", "resolution", "values", "defaultValues", "disabled"],
320
341
  { onValuesChange: "kai-values-change" },
321
342
  () => import("@kitn.ai/ui/elements/form")
322
- ), be = /* @__PURE__ */ e(
343
+ ), Ce = /* @__PURE__ */ e(
323
344
  "kai-hover-card",
324
345
  ["theme", "openDelay", "closeDelay", "placement", "open", "defaultOpen", "disabled"],
325
346
  { onOpenChange: "kai-open-change" },
326
347
  () => import("@kitn.ai/ui/elements/hover-card")
327
- ), fe = /* @__PURE__ */ e(
348
+ ), Se = /* @__PURE__ */ e(
328
349
  "kai-icon",
329
350
  ["theme", "name", "size"],
330
351
  {},
331
352
  () => import("@kitn.ai/ui/elements/icon")
332
- ), ve = /* @__PURE__ */ e(
353
+ ), ye = /* @__PURE__ */ e(
333
354
  "kai-image",
334
355
  ["theme", "base64", "bytes", "alt", "mediaType"],
335
356
  {},
336
357
  () => import("@kitn.ai/ui/elements/image")
337
- ), Ce = /* @__PURE__ */ e(
358
+ ), Te = /* @__PURE__ */ e(
338
359
  "kai-input",
339
360
  ["theme", "type", "value", "placeholder", "label", "hint", "error", "size", "disabled", "readonly", "required", "invalid", "name", "autocomplete", "inputmode"],
340
361
  { onChange: "kai-change", onInput: "kai-input" },
341
362
  () => import("@kitn.ai/ui/elements/input")
342
- ), Se = /* @__PURE__ */ e(
363
+ ), xe = /* @__PURE__ */ e(
343
364
  "kai-kbd",
344
365
  ["theme", "keys", "platform", "size"],
345
366
  {},
346
367
  () => import("@kitn.ai/ui/elements/kbd")
347
- ), ye = /* @__PURE__ */ e(
368
+ ), we = /* @__PURE__ */ e(
348
369
  "kai-link-preview",
349
370
  ["theme", "cardId", "data"],
350
371
  {},
351
372
  () => import("@kitn.ai/ui/elements/link-preview")
352
- ), Te = /* @__PURE__ */ e(
373
+ ), ze = /* @__PURE__ */ e(
353
374
  "kai-loader",
354
375
  ["theme", "variant", "size", "text"],
355
376
  {},
356
377
  () => import("@kitn.ai/ui/elements/loader")
357
- ), xe = /* @__PURE__ */ e(
378
+ ), Ie = /* @__PURE__ */ e(
358
379
  "kai-markdown",
359
380
  ["theme", "content", "proseSize", "codeTheme", "codeHighlight"],
360
381
  {},
361
382
  () => import("@kitn.ai/ui/elements/markdown")
362
- ), Ie = /* @__PURE__ */ e(
383
+ ), Me = /* @__PURE__ */ e(
363
384
  "kai-menu",
364
385
  ["theme", "items", "placement", "triggerIcon", "triggerLabel", "triggerIconTrailing", "label", "open", "defaultOpen", "disabled"],
365
386
  { onOpenChange: "kai-open-change", onSelect: "kai-select" },
366
387
  () => import("@kitn.ai/ui/elements/menu")
367
- ), ze = /* @__PURE__ */ e(
388
+ ), Re = /* @__PURE__ */ e(
368
389
  "kai-message",
369
390
  ["theme", "message", "role", "content", "markdown", "proseSize", "codeTheme", "codeHighlight", "actionsReveal", "avatarSrc", "avatarFallback", "avatar"],
370
391
  { onMessageAction: "kai-message-action" },
371
392
  () => import("@kitn.ai/ui/elements/message")
372
- ), we = /* @__PURE__ */ e(
393
+ ), Oe = /* @__PURE__ */ e(
373
394
  "kai-model-switcher",
374
395
  ["theme", "models", "currentModel", "open", "defaultOpen", "disabled"],
375
396
  { onModelChange: "kai-model-change", onOpenChange: "kai-open-change" },
376
397
  () => import("@kitn.ai/ui/elements/model-switcher")
377
- ), Me = /* @__PURE__ */ e(
398
+ ), Ae = /* @__PURE__ */ e(
378
399
  "kai-nav",
379
400
  ["theme", "items", "value", "defaultValue", "defaultCollapsed"],
380
401
  { onNavItemAction: "kai-nav-item-action", onNavItemClose: "kai-nav-item-close", onNavSelect: "kai-nav-select" },
381
402
  () => import("@kitn.ai/ui/elements/nav")
382
- ), Oe = /* @__PURE__ */ e(
403
+ ), Ee = /* @__PURE__ */ e(
383
404
  "kai-notice",
384
405
  ["theme", "severity", "icon", "dismissible"],
385
406
  { onDismiss: "kai-dismiss" },
386
407
  () => import("@kitn.ai/ui/elements/notice")
387
- ), Re = /* @__PURE__ */ e(
408
+ ), Ve = /* @__PURE__ */ e(
388
409
  "kai-pane",
389
410
  ["theme", "headline", "subtitle", "maximized", "focused", "showSplit", "showDock", "status"],
390
411
  { onClose: "kai-close", onDock: "kai-dock", onMaximize: "kai-maximize", onSplit: "kai-split" },
391
412
  () => import("@kitn.ai/ui/elements/pane")
392
- ), Ae = /* @__PURE__ */ e(
413
+ ), De = /* @__PURE__ */ e(
393
414
  "kai-pane-group",
394
415
  ["theme", "tabs", "active", "focused"],
395
416
  { onTabChange: "kai-tab-change", onTabClose: "kai-tab-close", onTabMenu: "kai-tab-menu" },
396
417
  () => import("@kitn.ai/ui/elements/pane-group")
397
- ), Ee = /* @__PURE__ */ e(
418
+ ), Fe = /* @__PURE__ */ e(
398
419
  "kai-popover",
399
420
  ["theme", "placement", "gutter", "open", "defaultOpen", "disabled"],
400
421
  { onOpenChange: "kai-open-change" },
401
422
  () => import("@kitn.ai/ui/elements/popover")
402
- ), Ve = /* @__PURE__ */ e(
423
+ ), Be = /* @__PURE__ */ e(
403
424
  "kai-progress-bar",
404
425
  ["theme", "value", "max", "label", "tone"],
405
426
  {},
406
427
  () => import("@kitn.ai/ui/elements/progress-bar")
407
- ), De = /* @__PURE__ */ e(
428
+ ), Le = /* @__PURE__ */ e(
408
429
  "kai-prompt-dock",
409
430
  ["theme", "frame", "appearance"],
410
431
  {},
411
432
  () => import("@kitn.ai/ui/elements/prompt-dock")
412
- ), Fe = /* @__PURE__ */ e(
433
+ ), Pe = /* @__PURE__ */ e(
413
434
  "kai-prompt-input",
414
435
  ["theme", "value", "placeholder", "disabled", "loading", "suggestions", "suggestionMode", "search", "voice", "stoppable", "submit", "attach", "attachments", "triggers", "kindIcons"],
415
436
  { onAttachmentsChange: "kai-attachments-change", onSearch: "kai-search", onStop: "kai-stop", onSubmit: "kai-submit", onSuggestionClick: "kai-suggestion-click", onToolbarAction: "kai-toolbar-action", onValueChange: "kai-value-change", onVoice: "kai-voice" },
416
437
  () => import("@kitn.ai/ui/elements/prompt-input")
417
- ), Le = /* @__PURE__ */ e(
438
+ ), He = /* @__PURE__ */ e(
418
439
  "kai-reasoning",
419
440
  ["theme", "text", "label", "open", "defaultOpen", "streaming", "markdown", "disabled"],
420
441
  { onOpenChange: "kai-open-change" },
421
442
  () => import("@kitn.ai/ui/elements/reasoning")
422
- ), Be = /* @__PURE__ */ e(
443
+ ), Ne = /* @__PURE__ */ e(
423
444
  "kai-remote",
424
445
  ["theme", "src", "providerOrigin", "envelope", "policy"],
425
446
  {},
426
447
  () => import("@kitn.ai/ui/elements/remote")
427
- ), Pe = /* @__PURE__ */ e(
448
+ ), Ue = /* @__PURE__ */ e(
428
449
  "kai-resizable",
429
- ["theme", "orientation", "maximizedIndex"],
450
+ ["theme", "orientation", "maximizedIndex", "handle"],
430
451
  { onChange: "kai-change", onMaximizeChange: "kai-maximize-change" },
431
452
  () => import("@kitn.ai/ui/elements/resizable")
432
- ), He = /* @__PURE__ */ e(
453
+ ), We = /* @__PURE__ */ e(
433
454
  "kai-resizable-item",
434
455
  ["theme", "size", "min", "max", "locked", "hidden", "collapsed"],
435
456
  { onChange: "kai-change", onMaximizeChange: "kai-maximize-change" },
436
457
  () => import("@kitn.ai/ui/elements/resizable")
437
- ), Ne = /* @__PURE__ */ e(
458
+ ), je = /* @__PURE__ */ e(
438
459
  "kai-response-stream",
439
460
  ["theme", "text", "mode", "speed", "as"],
440
461
  { onComplete: "kai-complete" },
441
462
  () => import("@kitn.ai/ui/elements/response-stream")
442
- ), Ue = /* @__PURE__ */ e(
463
+ ), qe = /* @__PURE__ */ e(
443
464
  "kai-scope-picker",
444
465
  ["theme", "availableAuthors", "availableTags", "currentLabel", "open", "defaultOpen", "disabled"],
445
466
  { onOpenChange: "kai-open-change", onScopeChange: "kai-scope-change" },
446
467
  () => import("@kitn.ai/ui/elements/chat-scope-picker")
447
- ), We = /* @__PURE__ */ e(
468
+ ), Ge = /* @__PURE__ */ e(
448
469
  "kai-screen",
449
470
  ["theme", "open", "defaultOpen", "headline", "back", "noInert"],
450
471
  { onBack: "kai-back", onOpenChange: "kai-open-change" },
451
472
  () => import("@kitn.ai/ui/elements/screen")
452
- ), je = /* @__PURE__ */ e(
473
+ ), Ke = /* @__PURE__ */ e(
453
474
  "kai-scroll-area",
454
475
  ["theme", "orientation"],
455
476
  {},
456
477
  () => import("@kitn.ai/ui/elements/scroll-area")
457
- ), qe = /* @__PURE__ */ e(
478
+ ), Qe = /* @__PURE__ */ e(
458
479
  "kai-scroll-button",
459
480
  ["theme", "for", "variant", "size"],
460
481
  { onScroll: "kai-scroll" },
461
482
  () => import("@kitn.ai/ui/elements/scroll-button")
462
- ), Ge = /* @__PURE__ */ e(
483
+ ), Je = /* @__PURE__ */ e(
463
484
  "kai-search",
464
485
  ["theme", "value", "placeholder", "icon", "debounce", "loading", "shortcut"],
465
486
  { onChange: "kai-change", onSearch: "kai-search", onSubmit: "kai-submit" },
466
487
  () => import("@kitn.ai/ui/elements/search")
467
- ), Ke = /* @__PURE__ */ e(
488
+ ), Xe = /* @__PURE__ */ e(
468
489
  "kai-segmented",
469
490
  ["theme", "options", "value", "size"],
470
491
  { onChange: "kai-change" },
471
492
  () => import("@kitn.ai/ui/elements/segmented")
472
- ), Qe = /* @__PURE__ */ e(
493
+ ), Ye = /* @__PURE__ */ e(
473
494
  "kai-separator",
474
495
  ["theme", "orientation"],
475
496
  {},
476
497
  () => import("@kitn.ai/ui/elements/separator")
477
- ), Je = /* @__PURE__ */ e(
498
+ ), Ze = /* @__PURE__ */ e(
478
499
  "kai-setting-item",
479
500
  ["theme", "label", "description"],
480
501
  {},
481
502
  () => import("@kitn.ai/ui/elements/setting-item")
482
- ), Xe = /* @__PURE__ */ e(
503
+ ), _e = /* @__PURE__ */ e(
483
504
  "kai-settings-group",
484
505
  ["theme", "heading", "description"],
485
506
  {},
486
507
  () => import("@kitn.ai/ui/elements/settings-group")
487
- ), Ye = /* @__PURE__ */ e(
508
+ ), $e = /* @__PURE__ */ e(
488
509
  "kai-skeleton",
489
510
  ["theme", "variant", "width", "height", "lines"],
490
511
  {},
491
512
  () => import("@kitn.ai/ui/elements/skeleton")
492
- ), Ze = /* @__PURE__ */ e(
513
+ ), et = /* @__PURE__ */ e(
493
514
  "kai-skills",
494
515
  ["theme", "skills"],
495
516
  {},
496
517
  () => import("@kitn.ai/ui/elements/message-skills")
497
- ), _e = /* @__PURE__ */ e(
518
+ ), tt = /* @__PURE__ */ e(
498
519
  "kai-source",
499
520
  ["theme", "href", "label", "headline", "description", "showFavicon"],
500
521
  {},
501
522
  () => import("@kitn.ai/ui/elements/source")
502
- ), $e = /* @__PURE__ */ e(
523
+ ), at = /* @__PURE__ */ e(
503
524
  "kai-sources",
504
525
  ["theme", "sources", "showFavicon", "numbered"],
505
526
  {},
506
527
  () => import("@kitn.ai/ui/elements/source")
507
- ), et = /* @__PURE__ */ e(
528
+ ), ot = /* @__PURE__ */ e(
508
529
  "kai-status",
509
530
  ["theme", "status", "pulse", "label", "size"],
510
531
  {},
511
532
  () => import("@kitn.ai/ui/elements/status")
512
- ), tt = /* @__PURE__ */ e(
533
+ ), nt = /* @__PURE__ */ e(
513
534
  "kai-suggestions",
514
535
  ["theme", "suggestions", "variant", "size", "layout", "block", "highlight"],
515
536
  { onSelect: "kai-select" },
516
537
  () => import("@kitn.ai/ui/elements/prompt-suggestions")
517
- ), at = /* @__PURE__ */ e(
538
+ ), it = /* @__PURE__ */ e(
518
539
  "kai-switch",
519
540
  ["theme", "checked", "defaultChecked", "disabled", "label", "name", "value"],
520
541
  { onChange: "kai-change" },
521
542
  () => import("@kitn.ai/ui/elements/switch")
522
- ), ot = /* @__PURE__ */ e(
543
+ ), st = /* @__PURE__ */ e(
523
544
  "kai-tabs",
524
545
  ["theme", "items", "value", "defaultValue", "variant", "block", "disabled"],
525
546
  { onTabChange: "kai-tab-change" },
526
547
  () => import("@kitn.ai/ui/elements/tabs")
527
- ), nt = /* @__PURE__ */ e(
548
+ ), rt = /* @__PURE__ */ e(
528
549
  "kai-tasks",
529
550
  ["theme", "data", "cardId", "heading", "resolution", "value", "defaultValue", "disabled", "readonly"],
530
551
  { onValueChange: "kai-value-change" },
531
552
  () => import("@kitn.ai/ui/elements/tasks")
532
- ), it = /* @__PURE__ */ e(
553
+ ), ct = /* @__PURE__ */ e(
533
554
  "kai-text-shimmer",
534
555
  ["theme", "text", "as", "duration", "spread"],
535
556
  {},
536
557
  () => import("@kitn.ai/ui/elements/text-shimmer")
537
- ), st = /* @__PURE__ */ e(
558
+ ), lt = /* @__PURE__ */ e(
538
559
  "kai-thinking-bar",
539
560
  ["theme", "text", "stoppable", "stopLabel"],
540
561
  { onStop: "kai-stop" },
541
562
  () => import("@kitn.ai/ui/elements/thinking-bar")
542
- ), rt = /* @__PURE__ */ e(
563
+ ), dt = /* @__PURE__ */ e(
564
+ "kai-thread",
565
+ ["theme", "messages", "loading", "proseSize", "codeTheme", "codeHighlight", "actionsReveal", "scrollButton", "class"],
566
+ { onMessageAction: "kai-message-action" },
567
+ () => import("@kitn.ai/ui/elements/thread")
568
+ ), mt = /* @__PURE__ */ e(
543
569
  "kai-toast-region",
544
570
  ["theme", "toasts", "position", "max", "stack", "appearance", "inverse", "target"],
545
571
  { onAction: "kai-action", onDismiss: "kai-dismiss" },
546
572
  () => import("@kitn.ai/ui/elements/toast")
547
- ), ct = /* @__PURE__ */ e(
573
+ ), pt = /* @__PURE__ */ e(
548
574
  "kai-tool",
549
575
  ["theme", "tool", "open", "defaultOpen", "disabled"],
550
576
  { onOpenChange: "kai-open-change" },
551
577
  () => import("@kitn.ai/ui/elements/tool")
552
- ), lt = /* @__PURE__ */ e(
578
+ ), ht = /* @__PURE__ */ e(
553
579
  "kai-tooltip",
554
580
  ["theme", "content", "openDelay", "closeDelay", "placement", "open", "defaultOpen", "disabled"],
555
581
  { onOpenChange: "kai-open-change" },
556
582
  () => import("@kitn.ai/ui/elements/tooltip")
557
- ), dt = /* @__PURE__ */ e(
583
+ ), ut = /* @__PURE__ */ e(
558
584
  "kai-voice-input",
559
585
  ["theme", "transcribe", "disabled", "recognitionLang", "interim"],
560
586
  { onAudioCaptured: "kai-audio-captured", onRecordingChange: "kai-recording-change", onTranscriptInterim: "kai-transcript-interim", onTranscription: "kai-transcription" },
561
587
  () => import("@kitn.ai/ui/elements/voice-input")
562
- ), mt = /* @__PURE__ */ e(
588
+ ), gt = /* @__PURE__ */ e(
563
589
  "kai-voice-output",
564
590
  ["theme", "text", "autoplay", "synthesize", "disabled"],
565
591
  { onSpeakingChange: "kai-speaking-change", onSynthesized: "kai-synthesized" },
566
592
  () => import("@kitn.ai/ui/elements/voice-output")
567
- ), pt = /* @__PURE__ */ e(
593
+ ), kt = /* @__PURE__ */ e(
568
594
  "kai-workspace",
569
595
  ["theme", "groups", "conversations", "activeId", "messages", "value", "placeholder", "loading", "suggestions", "suggestionMode", "proseSize", "codeTheme", "codeHighlight", "chatTitle", "models", "currentModel", "context", "scrollButton", "search", "voice", "triggers", "kindIcons", "sidebarWidth", "sidebarMinWidth", "sidebarMaxWidth", "sidebarCollapsed", "defaultSidebarCollapsed", "collapseBelow", "compact", "noConversations"],
570
596
  { onConversationSelect: "kai-conversation-select", onMessageAction: "kai-message-action", onModelChange: "kai-model-change", onNewChat: "kai-new-chat", onSearch: "kai-search", onSidebarToggle: "kai-sidebar-toggle", onSubmit: "kai-submit", onSuggestionClick: "kai-suggestion-click", onValueChange: "kai-value-change", onVoice: "kai-voice" },
571
597
  () => import("@kitn.ai/ui/elements/chat-workspace")
572
598
  );
573
599
  export {
574
- j as AgentCard,
575
- q as Artifact,
576
- G as Attachments,
577
- K as Avatar,
578
- Q as Badge,
579
- J as Button,
580
- X as Card,
581
- Y as Cards,
582
- Z as ChainOfThought,
583
- _ as Chat,
584
- $ as Checkpoint,
585
- ee as Choice,
586
- te as Coachmark,
587
- ae as CodeBlock,
588
- oe as Command,
589
- ne as Compare,
590
- ie as Composer,
591
- se as Confirm,
592
- re as Context,
593
- ce as Conversations,
594
- le as Dialog,
595
- de as EditableLabel,
596
- me as Embed,
597
- pe as Empty,
598
- he as FeedbackBar,
599
- ue as FileTree,
600
- ge as FileUpload,
601
- ke as Form,
602
- be as HoverCard,
603
- fe as Icon,
604
- ve as Image,
605
- Ce as Input,
606
- Se as Kbd,
607
- ye as LinkPreview,
608
- Te as Loader,
609
- xe as Markdown,
610
- Ie as Menu,
611
- ze as Message,
612
- we as ModelSwitcher,
613
- Me as Nav,
614
- Oe as Notice,
615
- Re as Pane,
616
- Ae as PaneGroup,
617
- Ee as Popover,
618
- Ve as ProgressBar,
619
- De as PromptDock,
620
- Fe as PromptInput,
621
- Le as Reasoning,
622
- Be as Remote,
623
- Pe as Resizable,
624
- He as ResizableItem,
625
- Ne as ResponseStream,
626
- Ue as ScopePicker,
627
- We as Screen,
628
- je as ScrollArea,
629
- qe as ScrollButton,
630
- Ge as Search,
631
- Ke as Segmented,
632
- Qe as Separator,
633
- Je as SettingItem,
634
- Xe as SettingsGroup,
635
- Ye as Skeleton,
636
- Ze as Skills,
637
- _e as Source,
638
- $e as Sources,
639
- et as Status,
640
- tt as Suggestions,
641
- at as Switch,
642
- ot as Tabs,
643
- nt as Tasks,
644
- it as TextShimmer,
645
- st as ThinkingBar,
646
- rt as ToastRegion,
647
- ct as Tool,
648
- lt as Tooltip,
649
- dt as VoiceInput,
650
- mt as VoiceOutput,
651
- pt as Workspace,
652
- U as registerAll,
653
- W as useKaiChat
600
+ G as AgentCard,
601
+ K as Artifact,
602
+ Q as Attachments,
603
+ J as AudioVisualizer,
604
+ X as Avatar,
605
+ Y as Badge,
606
+ Z as Button,
607
+ _ as Card,
608
+ $ as Cards,
609
+ ee as ChainOfThought,
610
+ te as Chat,
611
+ ae as Checkpoint,
612
+ oe as Choice,
613
+ ne as Coachmark,
614
+ ie as CodeBlock,
615
+ se as Command,
616
+ re as Compare,
617
+ ce as Composer,
618
+ le as Confirm,
619
+ de as Context,
620
+ me as Conversations,
621
+ pe as Dialog,
622
+ he as EditableLabel,
623
+ ue as Embed,
624
+ ge as Empty,
625
+ ke as FeedbackBar,
626
+ be as FileTree,
627
+ fe as FileUpload,
628
+ ve as Form,
629
+ Ce as HoverCard,
630
+ Se as Icon,
631
+ ye as Image,
632
+ Te as Input,
633
+ xe as Kbd,
634
+ we as LinkPreview,
635
+ ze as Loader,
636
+ Ie as Markdown,
637
+ Me as Menu,
638
+ Re as Message,
639
+ Oe as ModelSwitcher,
640
+ Ae as Nav,
641
+ Ee as Notice,
642
+ Ve as Pane,
643
+ De as PaneGroup,
644
+ Fe as Popover,
645
+ Be as ProgressBar,
646
+ Le as PromptDock,
647
+ Pe as PromptInput,
648
+ He as Reasoning,
649
+ Ne as Remote,
650
+ Ue as Resizable,
651
+ We as ResizableItem,
652
+ je as ResponseStream,
653
+ qe as ScopePicker,
654
+ Ge as Screen,
655
+ Ke as ScrollArea,
656
+ Qe as ScrollButton,
657
+ Je as Search,
658
+ Xe as Segmented,
659
+ Ye as Separator,
660
+ Ze as SettingItem,
661
+ _e as SettingsGroup,
662
+ $e as Skeleton,
663
+ et as Skills,
664
+ tt as Source,
665
+ at as Sources,
666
+ ot as Status,
667
+ nt as Suggestions,
668
+ it as Switch,
669
+ st as Tabs,
670
+ rt as Tasks,
671
+ ct as TextShimmer,
672
+ lt as ThinkingBar,
673
+ dt as Thread,
674
+ mt as ToastRegion,
675
+ pt as Tool,
676
+ ht as Tooltip,
677
+ ut as VoiceInput,
678
+ gt as VoiceOutput,
679
+ kt as Workspace,
680
+ W as registerAll,
681
+ j as useKaiChat,
682
+ q as useVoiceInput
654
683
  };