@kitn.ai/ui 0.16.0 → 0.18.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 (493) hide show
  1. package/README.md +55 -17
  2. package/dist/components/artifact.d.ts +39 -1
  3. package/dist/components/attachment-types.d.ts +12 -0
  4. package/dist/components/attachments.d.ts +2 -10
  5. package/dist/components/card.d.ts +27 -0
  6. package/dist/components/chain-of-thought.d.ts +78 -2
  7. package/dist/components/chat-scope-picker.d.ts +7 -0
  8. package/dist/components/chat-thread.d.ts +39 -16
  9. package/dist/components/choice-card.d.ts +27 -0
  10. package/dist/components/coachmark.d.ts +49 -0
  11. package/dist/components/composer-dom.d.ts +35 -0
  12. package/dist/components/composer-highlight.d.ts +48 -0
  13. package/dist/components/composer-history.d.ts +34 -0
  14. package/dist/components/composer.d.ts +86 -0
  15. package/dist/components/confirm-card.d.ts +17 -0
  16. package/dist/components/conversation-item.d.ts +9 -0
  17. package/dist/components/conversation-list.d.ts +36 -1
  18. package/dist/components/dismissed-stub.d.ts +22 -0
  19. package/dist/components/file-tree.d.ts +15 -0
  20. package/dist/components/form.d.ts +34 -0
  21. package/dist/components/markdown.d.ts +3 -0
  22. package/dist/components/message.d.ts +71 -2
  23. package/dist/components/model-switcher.d.ts +7 -0
  24. package/dist/components/prompt-input.d.ts +13 -4
  25. package/dist/components/prompt-suggestion.d.ts +9 -1
  26. package/dist/components/reasoning.d.ts +14 -1
  27. package/dist/components/response-compare-types.d.ts +66 -0
  28. package/dist/components/response-compare.d.ts +65 -0
  29. package/dist/components/screen.d.ts +46 -0
  30. package/dist/components/tasks-card.d.ts +50 -1
  31. package/dist/components/toast.d.ts +58 -0
  32. package/dist/components/tool-types.d.ts +10 -0
  33. package/dist/components/tool.d.ts +8 -8
  34. package/dist/components/use-card-resolution.d.ts +10 -6
  35. package/dist/components/voice-input.d.ts +27 -0
  36. package/dist/components/voice-output.d.ts +33 -0
  37. package/dist/core-C8fzo39E.js +12 -0
  38. package/dist/custom-elements.json +8472 -1691
  39. package/dist/elements/agent-card.d.ts +1 -0
  40. package/dist/elements/agent-card.js +1 -0
  41. package/dist/elements/artifact.js +1 -0
  42. package/dist/elements/attachments.js +1 -0
  43. package/dist/elements/autoloader.d.ts +2 -0
  44. package/dist/elements/autoloader.js +1 -0
  45. package/dist/elements/avatar.d.ts +1 -0
  46. package/dist/elements/avatar.js +1 -0
  47. package/dist/elements/badge.d.ts +1 -0
  48. package/dist/elements/badge.js +1 -0
  49. package/dist/elements/button.d.ts +1 -0
  50. package/dist/elements/button.js +1 -0
  51. package/dist/elements/card.js +1 -0
  52. package/dist/elements/cards.d.ts +1 -0
  53. package/dist/elements/cards.js +1 -0
  54. package/dist/elements/chain-of-thought.d.ts +0 -12
  55. package/dist/elements/chain-of-thought.js +1 -0
  56. package/dist/elements/chat-scope-picker.js +1 -0
  57. package/dist/elements/chat-types.d.ts +8 -2
  58. package/dist/elements/chat-workspace.js +1 -0
  59. package/dist/elements/chat.js +1 -0
  60. package/dist/elements/checkpoint.js +1 -0
  61. package/dist/elements/choice.js +1 -0
  62. package/dist/elements/chunks/Icon-DLLBeLG5.js +1 -0
  63. package/dist/elements/chunks/action-icons-UB4V5FNq.js +1 -0
  64. package/dist/elements/chunks/arrow-left-C-gwlUmx.js +1 -0
  65. package/dist/elements/chunks/attachments-CgbErf1r.js +1 -0
  66. package/dist/elements/chunks/badge-DTQpgB6N.js +1 -0
  67. package/dist/elements/chunks/bash-InADTalH.js +1 -0
  68. package/dist/elements/chunks/button-XDUM6lXs.js +1 -0
  69. package/dist/elements/chunks/card-CBlFZ-7I.js +1 -0
  70. package/dist/elements/chunks/card-routing-C986KuUA.js +1 -0
  71. package/dist/elements/chunks/chat-thread-BIhmqwNL.js +1 -0
  72. package/dist/elements/chunks/check-hGUoVIKb.js +1 -0
  73. package/dist/elements/chunks/chevron-down-DDoaSUtO.js +1 -0
  74. package/dist/elements/chunks/chevron-right-CdGEUakB.js +1 -0
  75. package/dist/elements/chunks/circle-BKAZdmzb.js +1 -0
  76. package/dist/elements/chunks/circle-check-CmYG-y3I.js +1 -0
  77. package/dist/elements/chunks/circle-x-DewgAEym.js +1 -0
  78. package/dist/elements/chunks/cn-CU7UAWzk.js +1 -0
  79. package/dist/elements/chunks/code-block-DedwxwFI.js +1 -0
  80. package/dist/elements/chunks/collapsible-FfgmTHtM.js +1 -0
  81. package/dist/elements/chunks/composer-Cfbw5HKT.js +65 -0
  82. package/dist/elements/chunks/context-DwJmxlRE.js +1 -0
  83. package/dist/elements/chunks/conversation-list-DsCQMfPq.js +1 -0
  84. package/dist/elements/chunks/core-AYMC6_lb.js +12 -0
  85. package/dist/elements/chunks/css-M7EaDHN_.js +1 -0
  86. package/dist/elements/chunks/default-input-BuqsoENC.js +1 -0
  87. package/dist/elements/chunks/define-rGsaWsLL.js +1 -0
  88. package/dist/elements/chunks/disclosure-CwoAkpMH.js +1 -0
  89. package/dist/elements/chunks/download-DJ06G3Bz.js +1 -0
  90. package/dist/elements/chunks/dropdown-BFg8ri_R.js +1 -0
  91. package/dist/elements/chunks/ellipsis-dlN6YvGw.js +1 -0
  92. package/dist/elements/chunks/engine-javascript-vq0WuIJl.js +141 -0
  93. package/dist/elements/chunks/external-link-DBX2lc_R.js +1 -0
  94. package/dist/elements/chunks/file-text-HfwUx4F9.js +1 -0
  95. package/dist/elements/chunks/file-tree-C6Toj71u.js +1 -0
  96. package/dist/elements/chunks/folder-MYuqa9Xp.js +1 -0
  97. package/dist/elements/chunks/github-dark-dimmed-DUshB20C.js +1 -0
  98. package/dist/elements/chunks/github-light-JYsPkUQd.js +1 -0
  99. package/dist/elements/chunks/hover-card-gE7iyXdW.js +1 -0
  100. package/dist/elements/chunks/html-CPZ3oZQ7.js +1 -0
  101. package/dist/elements/chunks/icon-Vqz4ivrY.js +1 -0
  102. package/dist/elements/chunks/index-BCRhi84a.js +1 -0
  103. package/dist/elements/chunks/info-B_toFS0l.js +1 -0
  104. package/dist/elements/chunks/input-gzbHYZvQ.js +1 -0
  105. package/dist/elements/chunks/javascript-C25yR2R2.js +1 -0
  106. package/dist/elements/chunks/json-DxJze_jm.js +1 -0
  107. package/dist/elements/chunks/kbd-n49c4KZm.js +1 -0
  108. package/dist/elements/chunks/link-CKPs9yM0.js +1 -0
  109. package/dist/elements/chunks/loader-q6MamGus.js +1 -0
  110. package/dist/elements/chunks/markdown-DBrcqq4S.js +64 -0
  111. package/dist/elements/chunks/message-CTqaYI0s.js +1 -0
  112. package/dist/elements/chunks/message-feedback-Cvzm03w0.js +1 -0
  113. package/dist/elements/chunks/message-square-CUg9eRCi.js +1 -0
  114. package/dist/elements/chunks/minimize-2-l2klxP6K.js +1 -0
  115. package/dist/elements/chunks/model-switcher-CmyjiHO1.js +1 -0
  116. package/dist/elements/chunks/overlay-C8sOYqjT.js +1 -0
  117. package/dist/elements/chunks/paperclip-42Ia7xHD.js +1 -0
  118. package/dist/elements/chunks/progress-bar-tzKMWAwO.js +1 -0
  119. package/dist/elements/chunks/prompt-suggestion-D3F6vP_A.js +1 -0
  120. package/dist/elements/chunks/reasoning-BJNmmyov.js +1 -0
  121. package/dist/elements/chunks/resizable-BRsk19qI.js +1 -0
  122. package/dist/elements/chunks/rotate-cw-BgcggLHC.js +1 -0
  123. package/dist/elements/chunks/scroll-area-CgGbFFbT.js +1 -0
  124. package/dist/elements/chunks/separator-8hM4GdHE.js +1 -0
  125. package/dist/elements/chunks/settings-CaUIYOg-.js +1 -0
  126. package/dist/elements/chunks/settings-group-CYjOVIZQ.js +1 -0
  127. package/dist/elements/chunks/share-BTYM3Ddt.js +1 -0
  128. package/dist/elements/chunks/skeleton-DsTYrPUe.js +1 -0
  129. package/dist/elements/chunks/slots-DkZ-Cmha.js +1 -0
  130. package/dist/elements/chunks/star-9R3LBQ9n.js +1 -0
  131. package/dist/elements/chunks/store-CYl5Y0_u.js +1 -0
  132. package/dist/elements/chunks/svelte--5p79yCD.js +1 -0
  133. package/dist/elements/chunks/text-shimmer-CaYGv8Se.js +1 -0
  134. package/dist/elements/chunks/textarea-NEr2SLcD.js +1 -0
  135. package/dist/elements/chunks/thumbs-up-DZYZkFfc.js +1 -0
  136. package/dist/elements/chunks/toast-store-ClxVZRcc.js +1 -0
  137. package/dist/elements/chunks/tool-CHZOmoe9.js +1 -0
  138. package/dist/elements/chunks/tooltip-WpHElELC.js +1 -0
  139. package/dist/elements/chunks/triangle-alert-BlS80PUg.js +1 -0
  140. package/dist/elements/chunks/tsx-B8rCNbgL.js +1 -0
  141. package/dist/elements/chunks/typescript-RycA9KXf.js +1 -0
  142. package/dist/elements/chunks/use-card-resolution-VSVoxDeJ.js +1 -0
  143. package/dist/elements/chunks/video-DxTPZqT8.js +1 -0
  144. package/dist/elements/chunks/vue-BmIZj4XD.js +1 -0
  145. package/dist/elements/chunks/x-C1qtndxn.js +1 -0
  146. package/dist/elements/coachmark.d.ts +1 -0
  147. package/dist/elements/coachmark.js +1 -0
  148. package/dist/elements/code-block.js +1 -0
  149. package/dist/elements/command.d.ts +1 -0
  150. package/dist/elements/command.js +1 -0
  151. package/dist/elements/compare.d.ts +1 -0
  152. package/dist/elements/compare.js +1 -0
  153. package/dist/elements/composer.d.ts +1 -0
  154. package/dist/elements/composer.js +1 -0
  155. package/dist/elements/confirm-card.js +1 -0
  156. package/dist/elements/context-meter.js +1 -0
  157. package/dist/elements/conversation-list.d.ts +1 -11
  158. package/dist/elements/conversation-list.js +1 -0
  159. package/dist/elements/default-input.d.ts +20 -9
  160. package/dist/elements/define.d.ts +11 -0
  161. package/dist/elements/dialog.d.ts +1 -0
  162. package/dist/elements/dialog.js +1 -0
  163. package/dist/elements/disclosure.d.ts +37 -0
  164. package/dist/elements/editable-label.d.ts +1 -0
  165. package/dist/elements/editable-label.js +1 -0
  166. package/dist/elements/embed.js +1 -0
  167. package/dist/elements/empty.js +1 -0
  168. package/dist/elements/feedback-bar.js +1 -0
  169. package/dist/elements/file-tree.js +1 -0
  170. package/dist/elements/file-upload.js +1 -0
  171. package/dist/elements/form.js +1 -0
  172. package/dist/elements/hover-card.d.ts +1 -0
  173. package/dist/elements/hover-card.js +1 -0
  174. package/dist/elements/icon.d.ts +1 -0
  175. package/dist/elements/icon.js +1 -0
  176. package/dist/elements/image.js +1 -0
  177. package/dist/elements/input.d.ts +1 -0
  178. package/dist/elements/input.js +1 -0
  179. package/dist/elements/kbd.d.ts +1 -0
  180. package/dist/elements/kbd.js +1 -0
  181. package/dist/elements/link-preview.js +1 -0
  182. package/dist/elements/loader.js +1 -0
  183. package/dist/elements/markdown.js +1 -0
  184. package/dist/elements/menu.d.ts +1 -0
  185. package/dist/elements/menu.js +1 -0
  186. package/dist/elements/message-skills.d.ts +0 -16
  187. package/dist/elements/message-skills.js +1 -0
  188. package/dist/elements/message.js +1 -0
  189. package/dist/elements/model-switcher.d.ts +1 -11
  190. package/dist/elements/model-switcher.js +1 -0
  191. package/dist/elements/nav.d.ts +1 -0
  192. package/dist/elements/nav.js +1 -0
  193. package/dist/elements/notice.d.ts +1 -0
  194. package/dist/elements/notice.js +1 -0
  195. package/dist/elements/pane-group.d.ts +1 -0
  196. package/dist/elements/pane-group.js +1 -0
  197. package/dist/elements/pane.d.ts +1 -0
  198. package/dist/elements/pane.js +1 -0
  199. package/dist/elements/popover.js +1 -0
  200. package/dist/elements/progress-bar.d.ts +1 -0
  201. package/dist/elements/progress-bar.js +1 -0
  202. package/dist/elements/prompt-dock.d.ts +1 -0
  203. package/dist/elements/prompt-dock.js +1 -0
  204. package/dist/elements/prompt-input.d.ts +1 -9
  205. package/dist/elements/prompt-input.js +1 -0
  206. package/dist/elements/prompt-suggestions.d.ts +0 -6
  207. package/dist/elements/prompt-suggestions.js +1 -0
  208. package/dist/elements/reasoning.js +1 -0
  209. package/dist/elements/register.d.ts +10 -0
  210. package/dist/elements/remote.js +1 -0
  211. package/dist/elements/resizable.d.ts +1 -17
  212. package/dist/elements/resizable.js +1 -0
  213. package/dist/elements/response-stream.js +14 -0
  214. package/dist/elements/screen.d.ts +1 -0
  215. package/dist/elements/screen.js +1 -0
  216. package/dist/elements/scroll-area.d.ts +1 -0
  217. package/dist/elements/scroll-area.js +1 -0
  218. package/dist/elements/scroll-button.js +1 -0
  219. package/dist/elements/search.d.ts +1 -0
  220. package/dist/elements/search.js +1 -0
  221. package/dist/elements/segmented.d.ts +1 -0
  222. package/dist/elements/segmented.js +1 -0
  223. package/dist/elements/separator.d.ts +1 -0
  224. package/dist/elements/separator.js +1 -0
  225. package/dist/elements/setting-item.d.ts +1 -0
  226. package/dist/elements/setting-item.js +1 -0
  227. package/dist/elements/settings-group.d.ts +1 -0
  228. package/dist/elements/settings-group.js +1 -0
  229. package/dist/elements/skeleton.d.ts +1 -0
  230. package/dist/elements/skeleton.js +1 -0
  231. package/dist/elements/slots.d.ts +176 -0
  232. package/dist/elements/source.d.ts +0 -17
  233. package/dist/elements/source.js +1 -0
  234. package/dist/elements/status.d.ts +1 -0
  235. package/dist/elements/status.js +1 -0
  236. package/dist/elements/switch.js +1 -0
  237. package/dist/elements/tabs.d.ts +1 -0
  238. package/dist/elements/tabs.js +1 -0
  239. package/dist/elements/tasks.js +1 -0
  240. package/dist/elements/text-shimmer.js +1 -0
  241. package/dist/elements/thinking-bar.js +1 -0
  242. package/dist/elements/toast.d.ts +1 -0
  243. package/dist/elements/toast.js +1 -0
  244. package/dist/elements/tool.js +1 -0
  245. package/dist/elements/tooltip.d.ts +1 -0
  246. package/dist/elements/tooltip.js +1 -0
  247. package/dist/elements/voice-input.js +1 -0
  248. package/dist/elements/voice-output.d.ts +1 -0
  249. package/dist/elements/voice-output.js +1 -0
  250. package/dist/elements.d.ts +772 -61
  251. package/dist/engine-javascript-C1x7zo1_.js +141 -0
  252. package/dist/index.d.ts +15 -2
  253. package/dist/index.js +14405 -9810
  254. package/dist/kai.es.js +1 -0
  255. package/dist/llms/llms-full.txt +1234 -107
  256. package/dist/llms/llms.txt +4 -4
  257. package/dist/mcp.es.js +217 -6
  258. package/dist/primitives/card-contract.d.ts +20 -4
  259. package/dist/primitives/card-recovery.d.ts +55 -0
  260. package/dist/primitives/composer-model.d.ts +22 -0
  261. package/dist/primitives/composer-triggers.d.ts +19 -0
  262. package/dist/primitives/create-kai-chat.d.ts +38 -0
  263. package/dist/primitives/message-feedback.d.ts +35 -0
  264. package/dist/primitives/toast-store.d.ts +118 -0
  265. package/dist/primitives/use-speech-recognition.d.ts +26 -0
  266. package/dist/react/index.d.ts +1166 -98
  267. package/dist/react/runtime.d.ts +9 -2
  268. package/dist/react/use-kai-chat.d.ts +41 -0
  269. package/dist/react.js +575 -186
  270. package/dist/register-impl-CYWGkgbI.js +141 -0
  271. package/dist/schemas/choice.schema.json +5 -0
  272. package/dist/schemas/tasks.schema.json +7 -2
  273. package/dist/state/index.d.ts +4 -0
  274. package/dist/state/messages.d.ts +11 -0
  275. package/dist/state/stream.d.ts +22 -0
  276. package/dist/state/suggestions.d.ts +4 -0
  277. package/dist/state.js +117 -0
  278. package/dist/theme.tokens.css +87 -0
  279. package/dist/types.d.ts +4 -0
  280. package/dist/ui/agent-card.d.ts +61 -0
  281. package/dist/ui/button.d.ts +5 -2
  282. package/dist/ui/card.d.ts +61 -0
  283. package/dist/ui/collapsible.d.ts +15 -1
  284. package/dist/ui/command.d.ts +33 -0
  285. package/dist/ui/dialog.d.ts +42 -0
  286. package/dist/ui/dropdown.d.ts +95 -1
  287. package/dist/ui/editable-label.d.ts +26 -0
  288. package/dist/ui/hover-card.d.ts +13 -1
  289. package/dist/ui/icon.d.ts +18 -0
  290. package/dist/ui/input.d.ts +33 -0
  291. package/dist/ui/kbd.d.ts +21 -0
  292. package/dist/ui/nav.d.ts +62 -0
  293. package/dist/ui/notice.d.ts +31 -0
  294. package/dist/ui/overlay.d.ts +12 -0
  295. package/dist/ui/pane-grid.d.ts +58 -0
  296. package/dist/ui/pane-group.d.ts +75 -0
  297. package/dist/ui/pane.d.ts +78 -0
  298. package/dist/ui/popover.d.ts +11 -1
  299. package/dist/ui/progress-bar.d.ts +23 -0
  300. package/dist/ui/prompt-dock.d.ts +96 -0
  301. package/dist/ui/resizable.d.ts +12 -0
  302. package/dist/ui/scroll-area.d.ts +4 -0
  303. package/dist/ui/segmented.d.ts +28 -0
  304. package/dist/ui/settings-group.d.ts +32 -0
  305. package/dist/ui/skeleton.d.ts +12 -0
  306. package/dist/ui/stat.d.ts +16 -0
  307. package/dist/ui/status.d.ts +13 -0
  308. package/dist/ui/switch.d.ts +8 -1
  309. package/dist/ui/tabs.d.ts +35 -0
  310. package/dist/ui/tooltip.d.ts +20 -1
  311. package/frameworks/react/index.tsx +1100 -163
  312. package/frameworks/react/runtime.tsx +30 -1
  313. package/frameworks/react/use-kai-chat.tsx +87 -0
  314. package/llms-full.txt +1234 -107
  315. package/llms.txt +4 -4
  316. package/package.json +36 -12
  317. package/src/agent-tooling/mcp/manifest.ts +14 -0
  318. package/src/agent-tooling/mcp/tools/debug.ts +194 -6
  319. package/src/agent-tooling/mcp/tools/reference.ts +32 -0
  320. package/src/agent-tooling/mcp/tools/scaffold.ts +162 -1
  321. package/src/components/artifact.tsx +98 -13
  322. package/src/components/attachment-types.ts +13 -0
  323. package/src/components/attachments.tsx +4 -14
  324. package/src/components/card.tsx +109 -15
  325. package/src/components/chain-of-thought.tsx +210 -1
  326. package/src/components/chat-scope-picker.tsx +13 -3
  327. package/src/components/chat-thread.tsx +238 -137
  328. package/src/components/choice-card.tsx +136 -15
  329. package/src/components/coachmark.tsx +245 -0
  330. package/src/components/component-meta.json +921 -108
  331. package/src/components/composer-dom.ts +159 -0
  332. package/src/components/composer-highlight.ts +242 -0
  333. package/src/components/composer-history.ts +82 -0
  334. package/src/components/composer.tsx +979 -0
  335. package/src/components/confirm-card.tsx +69 -2
  336. package/src/components/conversation-item.tsx +69 -7
  337. package/src/components/conversation-list.tsx +134 -37
  338. package/src/components/dismissed-stub.tsx +80 -0
  339. package/src/components/file-tree.tsx +197 -47
  340. package/src/components/form-widgets.tsx +9 -7
  341. package/src/components/form.tsx +161 -20
  342. package/src/components/image.tsx +3 -5
  343. package/src/components/link-preview.tsx +5 -4
  344. package/src/components/markdown.tsx +5 -2
  345. package/src/components/message.tsx +174 -14
  346. package/src/components/model-switcher.tsx +19 -4
  347. package/src/components/prompt-input.tsx +46 -75
  348. package/src/components/prompt-suggestion.tsx +48 -16
  349. package/src/components/reasoning.tsx +29 -6
  350. package/src/components/response-compare-types.ts +127 -0
  351. package/src/components/response-compare.tsx +460 -0
  352. package/src/components/screen.tsx +176 -0
  353. package/src/components/tasks-card.tsx +374 -23
  354. package/src/components/toast.tsx +486 -0
  355. package/src/components/tool-types.ts +10 -0
  356. package/src/components/tool.tsx +22 -16
  357. package/src/components/use-card-resolution.ts +24 -8
  358. package/src/components/voice-input.tsx +102 -19
  359. package/src/components/voice-output.tsx +202 -0
  360. package/src/elements/agent-card.tsx +67 -0
  361. package/src/elements/artifact.tsx +53 -4
  362. package/src/elements/attachments.tsx +1 -0
  363. package/src/elements/autoloader.ts +89 -0
  364. package/src/elements/avatar.tsx +33 -0
  365. package/src/elements/badge.tsx +32 -0
  366. package/src/elements/button.tsx +126 -0
  367. package/src/elements/card-media.jpg +0 -0
  368. package/src/elements/card.tsx +124 -31
  369. package/src/elements/cards.tsx +81 -7
  370. package/src/elements/chain-of-thought.tsx +77 -32
  371. package/src/elements/chat-scope-picker.tsx +35 -8
  372. package/src/elements/chat-types.ts +9 -2
  373. package/src/elements/chat-workspace.tsx +157 -43
  374. package/src/elements/chat.tsx +49 -25
  375. package/src/elements/choice.tsx +71 -19
  376. package/src/elements/coachmark.tsx +90 -0
  377. package/src/elements/command.tsx +209 -0
  378. package/src/elements/compare.tsx +110 -0
  379. package/src/elements/compiled.css +1 -1
  380. package/src/elements/composer.tsx +151 -0
  381. package/src/elements/confirm-card.tsx +36 -11
  382. package/src/elements/conversation-list.tsx +80 -11
  383. package/src/elements/default-input.tsx +75 -53
  384. package/src/elements/define.tsx +47 -6
  385. package/src/elements/dialog.tsx +98 -0
  386. package/src/elements/disclosure.ts +73 -0
  387. package/src/elements/editable-label.tsx +125 -0
  388. package/src/elements/element-manifest.json +310 -0
  389. package/src/elements/element-meta.json +5954 -1605
  390. package/src/elements/element-types.d.ts +771 -60
  391. package/src/elements/file-tree.tsx +12 -2
  392. package/src/elements/file-upload.tsx +1 -1
  393. package/src/elements/form.tsx +54 -11
  394. package/src/elements/hover-card.tsx +80 -0
  395. package/src/elements/icon-names.json +48 -0
  396. package/src/elements/icon.tsx +41 -0
  397. package/src/elements/input.tsx +203 -0
  398. package/src/elements/kbd.tsx +45 -0
  399. package/src/elements/menu.tsx +217 -0
  400. package/src/elements/message.tsx +84 -55
  401. package/src/elements/model-switcher.tsx +27 -1
  402. package/src/elements/nav.tsx +87 -0
  403. package/src/elements/notice.tsx +53 -0
  404. package/src/elements/pane-group.tsx +119 -0
  405. package/src/elements/pane.tsx +129 -0
  406. package/src/elements/popover.tsx +39 -17
  407. package/src/elements/progress-bar.tsx +39 -0
  408. package/src/elements/prompt-dock.tsx +81 -0
  409. package/src/elements/prompt-input.tsx +112 -63
  410. package/src/elements/prompt-suggestions.tsx +25 -9
  411. package/src/elements/reasoning.tsx +30 -9
  412. package/src/elements/register-impl.ts +41 -3
  413. package/src/elements/register.ts +20 -3
  414. package/src/elements/remote.tsx +4 -0
  415. package/src/elements/resizable.tsx +48 -11
  416. package/src/elements/screen.tsx +90 -0
  417. package/src/elements/scroll-area.tsx +33 -0
  418. package/src/elements/search.tsx +180 -0
  419. package/src/elements/segmented.tsx +135 -0
  420. package/src/elements/separator.tsx +36 -0
  421. package/src/elements/setting-item.tsx +50 -0
  422. package/src/elements/settings-group.tsx +37 -0
  423. package/src/elements/skeleton.tsx +45 -0
  424. package/src/elements/slots.ts +607 -0
  425. package/src/elements/source.tsx +13 -6
  426. package/src/elements/status.tsx +42 -0
  427. package/src/elements/styles.css +19 -0
  428. package/src/elements/switch.tsx +89 -14
  429. package/src/elements/tabs.tsx +95 -0
  430. package/src/elements/tasks.tsx +70 -14
  431. package/src/elements/toast.tsx +89 -0
  432. package/src/elements/tool.tsx +43 -9
  433. package/src/elements/tooltip.tsx +85 -0
  434. package/src/elements/video-poster.jpg +0 -0
  435. package/src/elements/voice-input.tsx +66 -16
  436. package/src/elements/voice-output.tsx +69 -0
  437. package/src/index.ts +35 -2
  438. package/src/primitives/card-contract.ts +14 -5
  439. package/src/primitives/card-recovery.ts +149 -0
  440. package/src/primitives/card-routing.ts +3 -0
  441. package/src/primitives/card-schemas/choice.schema.json +5 -0
  442. package/src/primitives/card-schemas/tasks.schema.json +7 -2
  443. package/src/primitives/composer-model.ts +49 -0
  444. package/src/primitives/composer-triggers.ts +35 -0
  445. package/src/primitives/create-kai-chat.ts +66 -0
  446. package/src/primitives/message-feedback.ts +123 -0
  447. package/src/primitives/toast-store.ts +276 -0
  448. package/src/primitives/use-speech-recognition.ts +135 -0
  449. package/src/state/index.ts +6 -0
  450. package/src/state/messages.ts +36 -0
  451. package/src/state/stream.ts +92 -0
  452. package/src/state/suggestions.ts +9 -0
  453. package/src/types.ts +4 -0
  454. package/src/ui/agent-card.tsx +212 -0
  455. package/src/ui/button.tsx +16 -5
  456. package/src/ui/card.tsx +245 -0
  457. package/src/ui/collapsible.tsx +30 -4
  458. package/src/ui/command.tsx +99 -0
  459. package/src/ui/dialog.tsx +217 -0
  460. package/src/ui/dropdown.tsx +375 -13
  461. package/src/ui/editable-label.tsx +112 -0
  462. package/src/ui/hover-card.tsx +28 -5
  463. package/src/ui/icon.tsx +110 -0
  464. package/src/ui/input.tsx +132 -0
  465. package/src/ui/kbd.tsx +118 -0
  466. package/src/ui/nav.tsx +282 -0
  467. package/src/ui/notice.tsx +84 -0
  468. package/src/ui/overlay.tsx +108 -2
  469. package/src/ui/pane-grid.tsx +116 -0
  470. package/src/ui/pane-group.tsx +280 -0
  471. package/src/ui/pane.tsx +193 -0
  472. package/src/ui/popover.tsx +16 -2
  473. package/src/ui/progress-bar.tsx +83 -0
  474. package/src/ui/prompt-dock.tsx +145 -0
  475. package/src/ui/resizable.tsx +69 -1
  476. package/src/ui/scroll-area.tsx +14 -3
  477. package/src/ui/segmented.tsx +109 -0
  478. package/src/ui/settings-group.tsx +67 -0
  479. package/src/ui/skeleton.tsx +62 -5
  480. package/src/ui/stat.tsx +41 -0
  481. package/src/ui/status.tsx +48 -0
  482. package/src/ui/switch.tsx +49 -23
  483. package/src/ui/tabs.tsx +168 -0
  484. package/src/ui/tooltip.tsx +57 -7
  485. package/theme.css +113 -0
  486. package/dist/components/slash-command.d.ts +0 -15
  487. package/dist/kitn-chat.es.js +0 -1
  488. package/dist/register-impl-wCsFPoh9.js +0 -77
  489. package/dist/register-ujhr1nBS.js +0 -1
  490. package/src/components/slash-command.tsx +0 -232
  491. package/src/elements/framework-usage.json +0 -563
  492. /package/dist/{kitn-chat-provider.d.ts → kai-provider.d.ts} +0 -0
  493. /package/dist/{kitn-chat-provider.es.js → kai-provider.es.js} +0 -0
@@ -0,0 +1,65 @@
1
+ import { JSX, Accessor } from 'solid-js';
2
+ import { CompareSelection, ResponseCompareData } from './response-compare-types';
3
+ export type { CompareCandidate, ComparePair, CompareCollapse, ResponseCompareData, CompareSelection, } from './response-compare-types';
4
+ export { normalizeCandidates, buildSelection, isAnyStreaming } from './response-compare-types';
5
+ export type CompareLayout = 'auto' | 'columns' | 'tabs';
6
+ /** Imperative handle exposed via `controllerRef` — surfaces the compare's latent
7
+ * capabilities (commit a pick by candidate id, focus the roving tab stop) so the
8
+ * `<kai-compare>` facade can forward them as instance methods (Pattern C). */
9
+ export interface ResponseCompareController {
10
+ /** Commit a pick by candidate id — same path as the "Pick this" button: emits
11
+ * onSelect + optimistically collapses (single-shot; inert while streaming or
12
+ * already resolved). No-op for an unknown id. */
13
+ select(candidateId: string): void;
14
+ /** Focus the current roving tab stop (the focused candidate's "Pick this" radio). */
15
+ focus(options?: FocusOptions): void;
16
+ }
17
+ export interface ResolvedController<T> {
18
+ value: Accessor<T | undefined>;
19
+ isResolved: Accessor<boolean>;
20
+ isOptimistic: Accessor<boolean>;
21
+ setLocal: (v: T) => void;
22
+ }
23
+ export declare function useResolved<T>(opts: {
24
+ prop: Accessor<T | undefined>;
25
+ data: Accessor<unknown>;
26
+ }): ResolvedController<T>;
27
+ export interface ResponseCompareProps {
28
+ /** The compare definition (prompt + the two candidates). */
29
+ data?: ResponseCompareData;
30
+ /** Stable id correlating every emitted event. */
31
+ compareId?: string;
32
+ /** Re-hydrate / control the selection. Renders the collapsed winner. Set as a
33
+ * JS property: `el.selection = { chosenId, rejectedIds }`. */
34
+ selection?: CompareSelection;
35
+ /** Layout. `'columns'` = side-by-side; `'tabs'` = one candidate at a time with
36
+ * pills to switch; `'auto'` (default) uses a CONTAINER query — columns when the
37
+ * component is ≥640px wide, tabs when narrower (e.g. on a phone). */
38
+ layout?: CompareLayout;
39
+ class?: string;
40
+ /** Receive the imperative controller once mounted. The `<kai-compare>` facade
41
+ * forwards these as element methods (select/focus). */
42
+ controllerRef?: (controller: ResponseCompareController) => void;
43
+ /** Fired when the user commits a pick. */
44
+ onSelect?: (sel: CompareSelection) => void;
45
+ /** Fired once both candidates have settled (stopped streaming) and a valid
46
+ * definition is shown. */
47
+ onReady?: () => void;
48
+ /** Fired for an unusable definition (inline error state). */
49
+ onError?: (message: string) => void;
50
+ }
51
+ /**
52
+ * `ResponseCompare` — a dual-response comparison. Two assistant candidates for the
53
+ * same prompt render side-by-side (or as tabs), each via `MessageBody` so a
54
+ * candidate reads exactly like an assistant message (reasoning + tools +
55
+ * attachments + markdown). The pick is a COMMIT, not a Submit: clicking "Pick this"
56
+ * (or Enter on the focused column) computes `{ chosenId, rejectedIds:[other], at }`,
57
+ * optimistically collapses to the chosen candidate's body, and calls `onSelect` for
58
+ * the consumer to send a `(prompt, chosen, rejected)` preference pair. Single-shot.
59
+ *
60
+ * While EITHER candidate is `streaming`, both pick controls are disabled and the
61
+ * streaming column shows a `TextShimmer`; `onReady` fires once both settle. The two
62
+ * columns are a WAI-ARIA radiogroup with roving tabindex (Arrow keys move A↔B,
63
+ * Enter/Space picks). Emits `onError` for a malformed definition.
64
+ */
65
+ export declare function ResponseCompare(props: ResponseCompareProps): JSX.Element;
@@ -0,0 +1,46 @@
1
+ import { Accessor, JSX } from 'solid-js';
2
+ /** Imperative open controller, handed to a parent (the kai-screen facade) via
3
+ * `controllerRef` so it can drive/observe open state with `wireDisclosure`. */
4
+ export interface ScreenController {
5
+ open: Accessor<boolean>;
6
+ setOpen: (v: boolean) => void;
7
+ }
8
+ export interface ScreenProps {
9
+ /** The screen body. */
10
+ children?: JSX.Element;
11
+ /** Header title text. A projected `title` slot overrides this. */
12
+ title?: JSX.Element;
13
+ /** Header title slot content (the facade's `<slot name="title" />`). Overrides `title`. */
14
+ titleSlot?: JSX.Element;
15
+ /** Header trailing cluster (the facade's `<slot name="actions" />`). */
16
+ actions?: JSX.Element;
17
+ /** Controlled open state. When set, the component never changes it itself;
18
+ * drive it from `onOpenChange`. Omit for uncontrolled (internal) state. */
19
+ open?: boolean;
20
+ /** Initial open state when uncontrolled. */
21
+ defaultOpen?: boolean;
22
+ /** Show the back button (default true). */
23
+ back?: boolean;
24
+ /** Skip marking sibling elements inert/aria-hidden while open. */
25
+ noInert?: boolean;
26
+ /** The custom-element host, whose siblings get inert-ed while open. */
27
+ host?: () => HTMLElement | undefined;
28
+ /** Fires whenever open wants to change (back button / method). */
29
+ onOpenChange?: (open: boolean) => void;
30
+ /** Back navigation intent: the back button or Escape. */
31
+ onBack?: () => void;
32
+ /** Receive the open controller once mounted. */
33
+ controllerRef?: (api: ScreenController) => void;
34
+ /** Receive the focusable surface node so the facade's `focus()` can target it. */
35
+ surfaceRef?: (el: HTMLElement) => void;
36
+ }
37
+ /**
38
+ * Screen is the presentational full-bleed overlay surface. It owns the hard parts
39
+ * of being a takeover: it fills its mount point while open, marks sibling
40
+ * elements `inert` + `aria-hidden` (the standard modal pattern), moves focus into
41
+ * the surface on open and restores it on close, fires `onBack` on Escape, and
42
+ * runs an enter/exit transition that honors `prefers-reduced-motion`. When closed
43
+ * it is removed from layout (no space, not focusable). The developer owns the swap
44
+ * (their own routing flips `open`); this owns being the overlay.
45
+ */
46
+ export declare function Screen(props: ScreenProps): JSX.Element;
@@ -8,7 +8,15 @@ export interface TasksTask {
8
8
  disabled?: boolean;
9
9
  }
10
10
  export interface TasksCardData {
11
- mode?: 'select';
11
+ /**
12
+ * `select` (default) = checkbox rows + a confirm button that emits the contract
13
+ * `submit`. `progress` = an onboarding/checklist look: a header `done / total`
14
+ * count, circular indicators, per-item title + muted description, and NO confirm
15
+ * button (checking a row is itself the terminal action). Both share the same
16
+ * selection model (toggle by id, the `max` gate, `kai-value-change`); `progress`
17
+ * is purely a presentational variant.
18
+ */
19
+ mode?: 'select' | 'progress';
12
20
  heading?: string;
13
21
  tasks: TasksTask[];
14
22
  selectAll?: boolean;
@@ -16,6 +24,7 @@ export interface TasksCardData {
16
24
  allowEmpty?: boolean;
17
25
  min?: number;
18
26
  max?: number;
27
+ dismissible?: boolean;
19
28
  }
20
29
  export interface TasksCardResult {
21
30
  selected: string[];
@@ -39,12 +48,36 @@ export declare function selectAllState(tasks: TasksTask[], selected: Set<string>
39
48
  /** Whether select-all should be shown: requested AND not blocked by `max` (since
40
49
  * "all" would violate max). */
41
50
  export declare function showSelectAll(data: TasksCardData, tasks: TasksTask[]): boolean;
51
+ /** Whether the card is in the onboarding-checklist `progress` look (no confirm). */
52
+ export declare function isProgressMode(data: TasksCardData): boolean;
53
+ /** The header progress count (`done` checked / `total` rows) for `progress` mode. */
54
+ export declare function progressCount(tasks: TasksTask[], selected: Set<string>): {
55
+ done: number;
56
+ total: number;
57
+ };
42
58
  /** Whether confirm is enabled for the current selection count. */
43
59
  export declare function canConfirm(data: TasksCardData, count: number): boolean;
44
60
  /** Whether an unchecked row is blocked because `max` is reached. */
45
61
  export declare function isMaxReached(data: TasksCardData, count: number): boolean;
46
62
  /** The disabled-reason text for confirm (for aria-describedby), or undefined. */
47
63
  export declare function confirmReason(data: TasksCardData, count: number): string | undefined;
64
+ /** Imperative handle exposed via `controllerRef` — surfaces the tasks card's latent
65
+ * selection model (set the checked ids, toggle one, confirm, focus the group,
66
+ * dismiss/reopen) so the `<kai-tasks>` facade can forward them as instance methods. */
67
+ export interface TasksCardController {
68
+ /** Set the checked ids (local-only, no emit), respecting disabled/max. No arg = select all toggleable rows. */
69
+ select(taskIds?: string[]): void;
70
+ /** Toggle one task by id, honoring the max gate. */
71
+ toggle(taskId: string, checked?: boolean): void;
72
+ /** Confirm the current selection (only when allowed) — emits `submit` + resolves. */
73
+ send(): void;
74
+ /** Focus the task group (select-all checkbox if shown, else the first row). */
75
+ focus(options?: FocusOptions): void;
76
+ /** Trigger the dismiss path (emit `dismiss` + collapse to the re-openable stub). */
77
+ dismiss(): void;
78
+ /** Re-open a dismissed card from its stub (emit `reopen`). */
79
+ reopen(): void;
80
+ }
48
81
  export interface TasksCardProps {
49
82
  /** The tasks definition (CardEnvelope.data). */
50
83
  data?: TasksCardData;
@@ -60,6 +93,22 @@ export interface TasksCardProps {
60
93
  class?: string;
61
94
  /** When set, render the chromed read-only summary instead of the interactive controls. */
62
95
  resolution?: CardResolution;
96
+ /** Controlled selection (task ids) — when set, this wins over internal state. */
97
+ value?: string[];
98
+ /** Uncontrolled initial selection (task ids), overlaying per-task `checked`. */
99
+ defaultValue?: string[];
100
+ /** Freeze the whole list + Confirm. */
101
+ disabled?: boolean;
102
+ /** Display-only: rows can't be toggled and show the default cursor (no pointer,
103
+ * no hover background, no focus ring). Keeps the visual content as-is — this only
104
+ * drops the interactive affordances + a11y exposure. */
105
+ readonly?: boolean;
106
+ /** Fires on every selection change with the selected ids (distinct from submit). */
107
+ onValueChange?: (payload: {
108
+ value: string[];
109
+ }) => void;
110
+ /** Receive the imperative controller once mounted. */
111
+ controllerRef?: (controller: TasksCardController) => void;
63
112
  }
64
113
  /**
65
114
  * `TasksCard` — a selectable task/plan list (checkbox rows + optional select-all
@@ -0,0 +1,58 @@
1
+ import { ToastItem, ToastVariant, ToastAppearance } from '../primitives/toast-store';
2
+ export type { ToastItem, ToastVariant, ToastAppearance };
3
+ /** Why a toast went away — surfaced to `onDismiss` (and the facade event). */
4
+ export type ToastDismissReason = 'timeout' | 'close' | 'action';
5
+ export type ToastPosition = 'top-center' | 'top-right' | 'top-left' | 'bottom-center' | 'bottom-right' | 'bottom-left';
6
+ export interface ToastRegionProps {
7
+ /** The toasts to render. Newest is shown on top. Set as a JS property on the
8
+ * element; mutate by passing a new array reference. */
9
+ toasts: ToastItem[];
10
+ /** Where the stack anchors. Defaults to `'top-center'`. */
11
+ position?: ToastPosition;
12
+ /** Max simultaneously-visible toasts; the rest queue and promote as slots
13
+ * free up. Defaults to `3`. */
14
+ max?: number;
15
+ /** Stacking: 'expanded' (default, full column) | 'collapsed' (Sonner-style
16
+ * pile that expands on hover/focus). Attribute: stack. */
17
+ stack?: 'expanded' | 'collapsed';
18
+ /** Region-level default appearance for toasts that don't set their own. A
19
+ * per-toast `appearance` always wins. Defaults to `'pill'`. */
20
+ appearance?: ToastAppearance;
21
+ /** Region-level default inverse treatment for toasts that don't set their own.
22
+ * A per-toast `inverse` always wins. Defaults to `false`. */
23
+ inverse?: boolean;
24
+ /** When set, this region renders only the toasts scoped to that element and
25
+ * anchors over its bounds (top-center), following it on scroll/resize. Unset =
26
+ * the global, viewport-anchored region. */
27
+ target?: HTMLElement;
28
+ /** Fired when a toast leaves, with the reason. */
29
+ onDismiss?: (id: string, reason: ToastDismissReason) => void;
30
+ /** Fired when a toast's action button is pressed. */
31
+ onAction?: (id: string, label: string) => void;
32
+ }
33
+ interface ToastProps {
34
+ item: ToastItem;
35
+ onDismiss: (reason: ToastDismissReason) => void;
36
+ onAction?: (label: string) => void;
37
+ /** Hold the auto-dismiss timer (the region sets this true while the whole stack
38
+ * is hovered/expanded, so peers don't dismiss out from under the cursor). */
39
+ paused?: boolean;
40
+ /** Region-level default appearance, used when the item doesn't set its own. */
41
+ appearance?: ToastAppearance;
42
+ /** Region-level default inverse, used when the item doesn't set its own. */
43
+ inverse?: boolean;
44
+ }
45
+ /**
46
+ * A single toast pill. Auto-dismisses after its (action-floored) duration, holds
47
+ * the timer while hovered (this pill) OR while `paused` (the whole stack is
48
+ * hovered), and animates in/out via `createPresence`. Pure + prop-driven — the
49
+ * parent `ToastRegion` owns the list + queue.
50
+ */
51
+ export declare function Toast(props: ToastProps): import("solid-js").JSX.Element;
52
+ /**
53
+ * Renders a stack of toasts at a viewport edge. Caps the visible count at `max`
54
+ * (newest on top); overflow waits in a queue and is promoted as visible toasts
55
+ * leave. `aria-live=polite` / `role=region` so screen readers announce new
56
+ * toasts without stealing focus.
57
+ */
58
+ export declare function ToastRegion(props: ToastRegionProps): import("solid-js").JSX.Element;
@@ -0,0 +1,10 @@
1
+ /** A tool-call part rendered by <Tool>. Pure type — kept JSX-free so it can be
2
+ * imported by the framework-neutral state core and the React typecheck pass. */
3
+ export interface ToolPart {
4
+ type: string;
5
+ state: 'input-streaming' | 'input-available' | 'output-available' | 'output-error';
6
+ input?: Record<string, unknown>;
7
+ output?: Record<string, unknown>;
8
+ toolCallId?: string;
9
+ errorText?: string;
10
+ }
@@ -1,15 +1,15 @@
1
1
  import { JSX } from 'solid-js';
2
- export interface ToolPart {
3
- type: string;
4
- state: 'input-streaming' | 'input-available' | 'output-available' | 'output-error';
5
- input?: Record<string, unknown>;
6
- output?: Record<string, unknown>;
7
- toolCallId?: string;
8
- errorText?: string;
9
- }
2
+ import { CollapsibleController } from '../ui/collapsible';
3
+ import { ToolPart } from './tool-types';
4
+ export type { ToolPart } from './tool-types';
10
5
  export interface ToolProps {
11
6
  toolPart: ToolPart;
12
7
  defaultOpen?: boolean;
8
+ /** Gate the disclosure trigger (programmatic control still works). */
9
+ disabled?: boolean;
10
+ /** Receive the open controller once mounted (forwarded from the Collapsible),
11
+ * so a parent (the kai-tool facade) can drive/observe open state. */
12
+ controllerRef?: (api: CollapsibleController) => void;
13
13
  class?: string;
14
14
  }
15
15
  declare function Tool(props: ToolProps): JSX.Element;
@@ -1,12 +1,16 @@
1
1
  import { Accessor } from 'solid-js';
2
2
  import { CardResolution } from '../primitives/card-contract';
3
- export interface ResolutionController {
4
- resolution: Accessor<CardResolution | undefined>;
3
+ export interface ResolutionController<R extends CardResolution = CardResolution> {
4
+ resolution: Accessor<R | undefined>;
5
5
  isResolved: Accessor<boolean>;
6
+ /** A finished resolution the user can't take back here (action | submit | expired). */
7
+ isTerminal: Accessor<boolean>;
8
+ /** A deferred resolution (`dismissed`) — set aside, still re-openable. */
9
+ isDeferred: Accessor<boolean>;
6
10
  isOptimistic: Accessor<boolean>;
7
- setLocal: (r: CardResolution) => void;
11
+ setLocal: (r: R) => void;
8
12
  }
9
- export declare function useCardResolution(opts: {
10
- prop: Accessor<CardResolution | undefined>;
13
+ export declare function useCardResolution<R extends CardResolution = CardResolution>(opts: {
14
+ prop: Accessor<R | undefined>;
11
15
  data: Accessor<unknown>;
12
- }): ResolutionController;
16
+ }): ResolutionController<R>;
@@ -1,7 +1,34 @@
1
+ /** Imperative handle exposed via `controllerRef` — surfaces the recorder's latent
2
+ * start/stop so the `<kai-voice-input>` facade can forward them as instance
3
+ * methods (push-to-talk). Both run the SAME getUserMedia → blob → transcription
4
+ * path as clicking the mic, so manual + programmatic emit identically. */
5
+ export interface VoiceInputController {
6
+ /** Begin recording programmatically (same path as clicking the mic). */
7
+ start(): void;
8
+ /** Stop the in-progress recording (produces the blob → onTranscribe). */
9
+ stop(): void;
10
+ }
1
11
  export interface VoiceInputProps {
2
12
  onTranscribe: (audio: Blob) => Promise<string>;
3
13
  onTranscription: (text: string) => void;
4
14
  disabled?: boolean;
5
15
  class?: string;
16
+ /** Host supplied a `transcribe` callback. When true the MediaRecorder →
17
+ * onTranscribe path runs. When false the component prefers native
18
+ * SpeechRecognition (capable browsers), falling back to record-only. */
19
+ hasTranscribe?: boolean;
20
+ /** BCP-47 language tag for native recognition (e.g. `en-US`). */
21
+ lang?: string;
22
+ /** Emit live partial transcripts via `onInterim` (native path only). */
23
+ interim?: boolean;
24
+ /** Live partial transcript from native recognition (when `interim`). */
25
+ onInterim?: (text: string) => void;
26
+ /** Fires whenever recording starts or stops. Guarded against the spurious
27
+ * initial `false` — only true transitions emit (the facade maps this to
28
+ * kai-recording-change). */
29
+ onRecordingChange?: (recording: boolean) => void;
30
+ /** Receive the imperative controller once mounted. The `<kai-voice-input>`
31
+ * facade forwards these as element methods (start/stop). */
32
+ controllerRef?: (controller: VoiceInputController) => void;
6
33
  }
7
34
  export declare function VoiceInput(props: VoiceInputProps): import("solid-js").JSX.Element;
@@ -0,0 +1,33 @@
1
+ /** Imperative handle exposed via `controllerRef` — surfaces the playback controls
2
+ * so the `<kai-voice-output>` facade can forward them as instance methods. Both
3
+ * the native (speechSynthesis) and model (synthesize → Audio) paths run through
4
+ * these, so manual clicks and programmatic calls behave identically. */
5
+ export interface VoiceOutputController {
6
+ /** Speak the current `text` (native by default, model if `synthesize` is set). */
7
+ speak(): void;
8
+ /** Pause playback (resumable). */
9
+ pause(): void;
10
+ /** Resume paused playback. */
11
+ resume(): void;
12
+ /** Stop playback and reset. */
13
+ stop(): void;
14
+ }
15
+ export interface VoiceOutputProps {
16
+ /** The utterance to read aloud. */
17
+ text: string;
18
+ /** Speak automatically when `text` is set/changed. */
19
+ autoplay?: boolean;
20
+ /** TTS model seam: given text, return an audio Blob to play. When set, the
21
+ * native speechSynthesis path is bypassed. Mirrors VoiceInput's `onTranscribe`. */
22
+ onSynthesize?: (text: string) => Promise<Blob>;
23
+ /** Fires whenever playback starts or stops. */
24
+ onSpeakingChange?: (speaking: boolean) => void;
25
+ /** Fires once the model path resolves audio (model path only). */
26
+ onSynthesized?: (blob: Blob) => void;
27
+ disabled?: boolean;
28
+ class?: string;
29
+ /** Receive the imperative controller once mounted. The `<kai-voice-output>`
30
+ * facade forwards these as element methods (speak/pause/resume/stop). */
31
+ controllerRef?: (controller: VoiceOutputController) => void;
32
+ }
33
+ export declare function VoiceOutput(props: VoiceOutputProps): import("solid-js").JSX.Element;