@kitn.ai/ui 0.20.1 → 0.22.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 (510) hide show
  1. package/README.md +44 -45
  2. package/dist/components/artifact-card.d.ts +51 -0
  3. package/dist/components/artifact.d.ts +1 -1
  4. package/dist/components/attachments.d.ts +2 -2
  5. package/dist/components/audio-visualizer/index.d.ts +3 -3
  6. package/dist/components/audio-visualizer/labs/lab-choreography.d.ts +59 -0
  7. package/dist/components/audio-visualizer/labs/lab-shaders.d.ts +22 -0
  8. package/dist/components/audio-visualizer/labs/lab-visualizer.d.ts +18 -0
  9. package/dist/components/audio-visualizer/variant-aurora.d.ts +2 -2
  10. package/dist/components/audio-visualizer/variant-bar.d.ts +2 -2
  11. package/dist/components/audio-visualizer/variant-custom.d.ts +2 -2
  12. package/dist/components/audio-visualizer/variant-grid.d.ts +1 -1
  13. package/dist/components/audio-visualizer/variant-radial.d.ts +1 -1
  14. package/dist/components/audio-visualizer/variant-wave.d.ts +1 -1
  15. package/dist/components/card-fallback.d.ts +12 -2
  16. package/dist/components/card-renderer.d.ts +63 -2
  17. package/dist/components/chat-container.d.ts +3 -0
  18. package/dist/components/chat-scope-picker.d.ts +2 -2
  19. package/dist/components/chat-thread.d.ts +77 -18
  20. package/dist/components/choice-card.d.ts +3 -28
  21. package/dist/components/composer-dom.d.ts +1 -1
  22. package/dist/components/composer-highlight.d.ts +1 -1
  23. package/dist/components/composer-history.d.ts +1 -1
  24. package/dist/components/composer.d.ts +1 -1
  25. package/dist/components/confirm-card.d.ts +3 -18
  26. package/dist/components/context.d.ts +8 -4
  27. package/dist/components/conversation-item.d.ts +1 -1
  28. package/dist/components/conversation-list.d.ts +4 -3
  29. package/dist/components/embed.d.ts +3 -3
  30. package/dist/components/file-tree.d.ts +11 -22
  31. package/dist/components/form-widgets.d.ts +1 -1
  32. package/dist/components/form.d.ts +3 -44
  33. package/dist/components/link-preview.d.ts +3 -3
  34. package/dist/components/loader.d.ts +30 -48
  35. package/dist/components/message-skills.d.ts +4 -0
  36. package/dist/components/message.d.ts +84 -21
  37. package/dist/components/model-switcher.d.ts +2 -2
  38. package/dist/components/prompt-input.d.ts +2 -2
  39. package/dist/components/response-compare-types.d.ts +11 -2
  40. package/dist/components/response-compare.d.ts +3 -3
  41. package/dist/components/source.d.ts +12 -3
  42. package/dist/components/tasks-card.d.ts +3 -31
  43. package/dist/components/thread.d.ts +17 -5
  44. package/dist/components/toast.d.ts +2 -2
  45. package/dist/components/tool-classify.d.ts +8 -0
  46. package/dist/components/tool-types.d.ts +29 -1
  47. package/dist/components/tool.d.ts +3 -3
  48. package/dist/components/use-card-resolution.d.ts +1 -1
  49. package/dist/create-tween-COnPwAQN.js +338 -0
  50. package/dist/create-tween-DmTUaXWE.js +341 -0
  51. package/dist/create-tween-qs-jjvNA.js +7 -0
  52. package/dist/custom-elements.json +1726 -463
  53. package/dist/elements/agent-card.js +1 -1
  54. package/dist/elements/artifact.js +1 -1
  55. package/dist/elements/attachments.js +1 -1
  56. package/dist/elements/audio-visualizer.js +1 -1
  57. package/dist/elements/avatar.js +1 -1
  58. package/dist/elements/badge.js +1 -1
  59. package/dist/elements/button.js +1 -1
  60. package/dist/elements/card.js +1 -1
  61. package/dist/elements/cards.js +1 -1
  62. package/dist/elements/chain-of-thought.js +1 -1
  63. package/dist/elements/chat-scope-picker.js +1 -1
  64. package/dist/elements/chat-types.d.ts +70 -10
  65. package/dist/elements/chat-workspace.js +1 -1
  66. package/dist/elements/chat.js +1 -1
  67. package/dist/elements/checkpoint.js +1 -1
  68. package/dist/elements/choice.js +1 -1
  69. package/dist/elements/chunks/{Icon-Tj58ES_d.js → Icon-CHG5z5L7.js} +1 -1
  70. package/dist/elements/chunks/{action-icons-ns1Fnedj.js → action-icons-BAtCEEgg.js} +1 -1
  71. package/dist/elements/chunks/arrow-left-CFPTeL1Y.js +1 -0
  72. package/dist/elements/chunks/artifact-fBZOE4SO.js +1 -0
  73. package/dist/elements/chunks/{attachments-mCB5F1Fq.js → attachments-DpYMe5VQ.js} +1 -1
  74. package/dist/elements/chunks/audio-visualizer-DFwzAcuL.js +1 -0
  75. package/dist/elements/chunks/{badge-B4Zuajl2.js → badge-D6zodm6E.js} +1 -1
  76. package/dist/elements/chunks/{button-ZWNif3--.js → button-C42vrGvO.js} +1 -1
  77. package/dist/elements/chunks/card-renderer-DMZsSuvU.js +1 -0
  78. package/dist/elements/chunks/card-tags-D8lZ-C_U.js +1 -0
  79. package/dist/elements/chunks/chat-thread-CNNEhol-.js +1 -0
  80. package/dist/elements/chunks/check-7Q3K-iXE.js +1 -0
  81. package/dist/elements/chunks/chevron-down-CpNYLn7E.js +1 -0
  82. package/dist/elements/chunks/chevron-right-DrH85Fha.js +1 -0
  83. package/dist/elements/chunks/choice-card-YoWjpsFV.js +1 -0
  84. package/dist/elements/chunks/circle-C9KRjKYv.js +1 -0
  85. package/dist/elements/chunks/circle-check-Dmi7Y4zw.js +1 -0
  86. package/dist/elements/chunks/{circle-x-B7faJFlY.js → circle-x-QIxXda6k.js} +1 -1
  87. package/dist/elements/chunks/code-block-CqeugReY.js +1 -0
  88. package/dist/elements/chunks/{collapsible-DM1Ckd4e.js → collapsible-sTv-_5lF.js} +1 -1
  89. package/dist/elements/chunks/{composer-BguS0QL_.js → composer-ldQyeVEB.js} +2 -2
  90. package/dist/elements/chunks/confirm-card-C0RNOwfn.js +1 -0
  91. package/dist/elements/chunks/context-5qgypNHC.js +1 -0
  92. package/dist/elements/chunks/conversation-list-DLzOacXz.js +1 -0
  93. package/dist/elements/chunks/create-tween-V4TXZ93X.js +7 -0
  94. package/dist/elements/chunks/default-input-DeeRSDHc.js +1 -0
  95. package/dist/elements/chunks/define-lE-QvQFn.js +1 -0
  96. package/dist/elements/chunks/{disclosure-CIZ5c8nO.js → disclosure-DZSa9jog.js} +1 -1
  97. package/dist/elements/chunks/{download-Dsbg3ste.js → download-B2ZmnGqW.js} +1 -1
  98. package/dist/elements/chunks/{dropdown-BDd1-Zgi.js → dropdown-R3B7cSRE.js} +1 -1
  99. package/dist/elements/chunks/{ellipsis-Dw6qrss-.js → ellipsis-BmxceY4l.js} +1 -1
  100. package/dist/elements/chunks/embed-BVrtTZPo.js +1 -0
  101. package/dist/elements/chunks/{external-link-Vt74zAoL.js → external-link-BbdR7YO7.js} +1 -1
  102. package/dist/elements/chunks/{file-text-CZrZF6_v.js → file-text-D7dijo1A.js} +1 -1
  103. package/dist/elements/chunks/{file-tree-DF4okKyo.js → file-tree-0upJ5jeb.js} +1 -1
  104. package/dist/elements/chunks/{folder-glP5rha4.js → folder-D8z58t7B.js} +1 -1
  105. package/dist/elements/chunks/form-p5BKJNw5.js +1 -0
  106. package/dist/elements/chunks/hover-card-CN9s2md5.js +1 -0
  107. package/dist/elements/chunks/{icon-BLb8beoi.js → icon-CNiKP37E.js} +1 -1
  108. package/dist/elements/chunks/{info-CIsv92JK.js → info-BSnuJiHI.js} +1 -1
  109. package/dist/elements/chunks/{input-Dds1kFyt.js → input-BauDmzxX.js} +1 -1
  110. package/dist/elements/chunks/{kbd-De_xbgi9.js → kbd-BlHJaP9b.js} +1 -1
  111. package/dist/elements/chunks/{link-i4r_k7z4.js → link-DEi5iUWC.js} +1 -1
  112. package/dist/elements/chunks/link-preview-BaHyM6W4.js +1 -0
  113. package/dist/elements/chunks/{loader-BmQH4s3V.js → loader-CmJG_Fkq.js} +1 -1
  114. package/dist/elements/chunks/{markdown-Zi21WhUz.js → markdown-D2jaMpCN.js} +1 -1
  115. package/dist/elements/chunks/message-C5UfXZ2Z.js +1 -0
  116. package/dist/elements/chunks/message-CXWLmmLn.js +1 -0
  117. package/dist/elements/chunks/message-square-hXylwsy0.js +1 -0
  118. package/dist/elements/chunks/{minimize-2--ifeCGrl.js → minimize-2-C9ytZFMU.js} +1 -1
  119. package/dist/elements/chunks/model-switcher-CivGfD7-.js +1 -0
  120. package/dist/elements/chunks/{overlay-kD8dwRv_.js → overlay-DJL_sbOm.js} +1 -1
  121. package/dist/elements/chunks/{paperclip-q21dYOSK.js → paperclip-CFaB8naM.js} +1 -1
  122. package/dist/elements/chunks/{progress-bar-BrAIIaaJ.js → progress-bar-Br5SksfR.js} +1 -1
  123. package/dist/elements/chunks/{prompt-suggestion-Bjn2K-fR.js → prompt-suggestion-CMIvtAhU.js} +1 -1
  124. package/dist/elements/chunks/reasoning-DpZcNzLq.js +1 -0
  125. package/dist/elements/chunks/{resizable-Dp4JExql.js → resizable-Q8i3T9a_.js} +1 -1
  126. package/dist/elements/chunks/{rotate-cw-CFWWkpj2.js → rotate-cw-B5IHCBFV.js} +1 -1
  127. package/dist/elements/chunks/{scroll-area-Bb0kHH1j.js → scroll-area-eLeydBje.js} +1 -1
  128. package/dist/elements/chunks/scroll-button-DWbz0yA1.js +1 -0
  129. package/dist/elements/chunks/{separator-9kRgr1X9.js → separator-Xic78AD_.js} +1 -1
  130. package/dist/elements/chunks/{settings-B8lmec4D.js → settings-B8H51pAx.js} +1 -1
  131. package/dist/elements/chunks/{settings-group-I0hEuXiN.js → settings-group-CsG9eYLe.js} +1 -1
  132. package/dist/elements/chunks/{share-C3lTiYGt.js → share-CNTx0z__.js} +1 -1
  133. package/dist/elements/chunks/skeleton-CLlHTcMI.js +1 -0
  134. package/dist/elements/chunks/slots-CIw9RlAe.js +1 -0
  135. package/dist/elements/chunks/source-BoVcU5ok.js +1 -0
  136. package/dist/elements/chunks/{star-CSJtGxgv.js → star-CxQVTVhI.js} +1 -1
  137. package/dist/elements/chunks/{store-CHyW95TP.js → store-CLtS5CUG.js} +1 -1
  138. package/dist/elements/chunks/tasks-card-CzlkLmUt.js +1 -0
  139. package/dist/elements/chunks/{text-shimmer-Cn9TmNpI.js → text-shimmer-D5NhpIQ1.js} +1 -1
  140. package/dist/elements/chunks/textarea-x5Uxsmtm.js +1 -0
  141. package/dist/elements/chunks/{thumbs-up-PNVVThEF.js → thumbs-up-UobcJnx9.js} +1 -1
  142. package/dist/elements/chunks/{toast-store-DKbQn3Wn.js → toast-store-BOfs9eXq.js} +1 -1
  143. package/dist/elements/chunks/{tool-DjTRpIpl.js → tool-Be6Dh_dt.js} +1 -1
  144. package/dist/elements/chunks/tooltip-RxMxyCLF.js +1 -0
  145. package/dist/elements/chunks/{triangle-alert-DsHTHCPm.js → triangle-alert-C4yxH2XN.js} +1 -1
  146. package/dist/elements/chunks/use-card-resolution-jva9ehH6.js +1 -0
  147. package/dist/elements/chunks/{variant-aurora-Dc4nQUia.js → variant-aurora-Dx4VRcjS.js} +2 -2
  148. package/dist/elements/chunks/{variant-custom-y_3kVQhS.js → variant-custom-Y1ZTWgEa.js} +1 -1
  149. package/dist/elements/chunks/{variant-wave-D5OR1-9Z.js → variant-wave-B9gml9Cg.js} +2 -2
  150. package/dist/elements/chunks/{video-B7vmenoC.js → video-CrPHsytT.js} +1 -1
  151. package/dist/elements/chunks/x-_-OPHept.js +1 -0
  152. package/dist/elements/coachmark.js +1 -1
  153. package/dist/elements/code-block.js +1 -1
  154. package/dist/elements/command.js +1 -1
  155. package/dist/elements/compare.js +1 -1
  156. package/dist/elements/composer.js +1 -1
  157. package/dist/elements/confirm-card.js +1 -1
  158. package/dist/elements/context-meter.js +1 -1
  159. package/dist/elements/conversation-list.js +1 -1
  160. package/dist/elements/default-input.d.ts +34 -7
  161. package/dist/elements/define.d.ts +1 -0
  162. package/dist/elements/dialog.js +1 -1
  163. package/dist/elements/disclosure.d.ts +1 -1
  164. package/dist/elements/editable-label.js +1 -1
  165. package/dist/elements/element-data-types.d.ts +107 -0
  166. package/dist/elements/embed.js +1 -1
  167. package/dist/elements/empty.js +1 -1
  168. package/dist/elements/feedback-bar.js +1 -1
  169. package/dist/elements/file-tree.js +1 -1
  170. package/dist/elements/file-upload.js +1 -1
  171. package/dist/elements/form.js +1 -1
  172. package/dist/elements/hover-card.js +1 -1
  173. package/dist/elements/icon.js +1 -1
  174. package/dist/elements/image.js +1 -1
  175. package/dist/elements/input.js +1 -1
  176. package/dist/elements/kbd.js +1 -1
  177. package/dist/elements/link-preview.js +1 -1
  178. package/dist/elements/loader.js +1 -1
  179. package/dist/elements/markdown.js +1 -1
  180. package/dist/elements/menu.js +1 -1
  181. package/dist/elements/message-skills.js +1 -1
  182. package/dist/elements/message.js +1 -1
  183. package/dist/elements/model-switcher.js +1 -1
  184. package/dist/elements/nav.js +1 -1
  185. package/dist/elements/notice.js +1 -1
  186. package/dist/elements/pane-group.js +1 -1
  187. package/dist/elements/pane.js +1 -1
  188. package/dist/elements/popover.js +1 -1
  189. package/dist/elements/progress-bar.js +1 -1
  190. package/dist/elements/prompt-dock.js +1 -1
  191. package/dist/elements/prompt-input.js +1 -1
  192. package/dist/elements/prompt-suggestions.js +1 -1
  193. package/dist/elements/reasoning.js +1 -1
  194. package/dist/elements/register.d.ts +8 -6
  195. package/dist/elements/remote.js +1 -1
  196. package/dist/elements/resizable.js +1 -1
  197. package/dist/elements/response-stream.js +1 -1
  198. package/dist/elements/screen.js +1 -1
  199. package/dist/elements/scroll-area.js +1 -1
  200. package/dist/elements/scroll-button.js +1 -1
  201. package/dist/elements/search.js +1 -1
  202. package/dist/elements/segmented.js +1 -1
  203. package/dist/elements/separator.js +1 -1
  204. package/dist/elements/setting-item.js +1 -1
  205. package/dist/elements/settings-group.js +1 -1
  206. package/dist/elements/skeleton.js +1 -1
  207. package/dist/elements/slot-text.d.ts +51 -0
  208. package/dist/elements/slots.d.ts +21 -0
  209. package/dist/elements/source.js +1 -1
  210. package/dist/elements/status.js +1 -1
  211. package/dist/elements/switch.js +1 -1
  212. package/dist/elements/tabs.js +1 -1
  213. package/dist/elements/tasks.js +1 -1
  214. package/dist/elements/text-shimmer.js +1 -1
  215. package/dist/elements/thinking-bar.js +1 -1
  216. package/dist/elements/thread.js +1 -1
  217. package/dist/elements/toast.js +1 -1
  218. package/dist/elements/tool.js +1 -1
  219. package/dist/elements/tooltip.js +1 -1
  220. package/dist/elements/validate-messages.d.ts +25 -0
  221. package/dist/elements/voice-input.js +1 -1
  222. package/dist/elements/voice-output.js +1 -1
  223. package/dist/elements.d.ts +2734 -217
  224. package/dist/index.d.ts +163 -125
  225. package/dist/index.js +6572 -5990
  226. package/dist/index.server.d.ts +5 -0
  227. package/dist/index.server.js +5403 -4860
  228. package/dist/kai-provider.es.d.ts +5 -0
  229. package/dist/kai-provider.es.js +79 -77
  230. package/dist/kai.es.d.ts +5 -0
  231. package/dist/kai.es.js +1 -1
  232. package/dist/llms/llms-full.txt +774 -151
  233. package/dist/llms/llms.txt +57 -5
  234. package/dist/mcp.es.js +4756 -782
  235. package/dist/primitives/card-component-types.d.ts +11 -0
  236. package/dist/primitives/card-data-types.d.ts +196 -0
  237. package/dist/primitives/card-host.d.ts +1 -1
  238. package/dist/primitives/card-recovery.d.ts +3 -3
  239. package/dist/primitives/card-registry.d.ts +4 -14
  240. package/dist/primitives/card-resolution.d.ts +1 -1
  241. package/dist/primitives/card-routing.d.ts +1 -1
  242. package/dist/primitives/card-tags.d.ts +11 -0
  243. package/dist/primitives/card-validate-cards.d.ts +57 -0
  244. package/dist/primitives/card-validate-generator.testlib.d.ts +20 -0
  245. package/dist/primitives/card-validate-schemas.d.ts +17 -0
  246. package/dist/primitives/card-validate.d.ts +24 -0
  247. package/dist/primitives/create-kai-chat.d.ts +3 -3
  248. package/dist/primitives/embed-providers.d.ts +1 -1
  249. package/dist/primitives/link-preview.d.ts +1 -1
  250. package/dist/primitives/message-feedback.d.ts +2 -2
  251. package/dist/primitives/toast-store.d.ts +1 -1
  252. package/dist/react/index.d.ts +730 -302
  253. package/dist/react/use-kai-chat.d.ts +8 -4
  254. package/dist/react.d.ts +5 -0
  255. package/dist/react.js +418 -317
  256. package/dist/register-impl-AxIlqjo7.js +145 -0
  257. package/dist/remote/host-embed.d.ts +1 -1
  258. package/dist/remote/index.d.ts +2 -2
  259. package/dist/remote/provider-runtime.d.ts +2 -2
  260. package/dist/remote/provider.d.ts +2 -2
  261. package/dist/remote/validate.d.ts +1 -1
  262. package/dist/remote/wire.d.ts +1 -1
  263. package/dist/schemas/artifact.schema.json +92 -0
  264. package/dist/schemas/embed.schema.json +0 -2
  265. package/dist/schemas/from-tool-call.d.ts +48 -0
  266. package/dist/schemas/index.d.ts +48 -0
  267. package/dist/schemas/link.schema.json +0 -2
  268. package/dist/schemas/provider-subsets.d.ts +136 -0
  269. package/dist/schemas/registry.d.ts +140 -0
  270. package/dist/schemas/tool-defs.d.ts +121 -0
  271. package/dist/schemas.d.ts +5 -0
  272. package/dist/schemas.js +717 -0
  273. package/dist/solid-BGYSJyHG.js +22960 -0
  274. package/dist/solid-Dt2nEwfl.js +20194 -0
  275. package/dist/solid.d.ts +66 -0
  276. package/dist/solid.js +261 -0
  277. package/dist/solid.server.d.ts +5 -0
  278. package/dist/solid.server.js +261 -0
  279. package/dist/state/index.d.ts +14 -4
  280. package/dist/state/messages.d.ts +8 -3
  281. package/dist/state/mock.d.ts +46 -0
  282. package/dist/state/parts.d.ts +85 -0
  283. package/dist/state/stream.d.ts +15 -9
  284. package/dist/state.d.ts +5 -0
  285. package/dist/state.js +253 -84
  286. package/dist/ui/action-icons.d.ts +1 -1
  287. package/dist/ui/collapsible.d.ts +11 -6
  288. package/dist/ui/dropdown.d.ts +47 -42
  289. package/dist/ui/pane-group.d.ts +1 -1
  290. package/dist/{variant-aurora-DVtGqVH6.js → variant-aurora-B44X69AG.js} +1 -1
  291. package/dist/variant-aurora-BRhV8Flk.js +391 -0
  292. package/dist/variant-aurora-Ds5ou9BH.js +381 -0
  293. package/dist/variant-custom-B20FhtYj.js +170 -0
  294. package/dist/{variant-custom-Dif-IV4u.js → variant-custom-BvA1Schl.js} +1 -1
  295. package/dist/variant-custom-D6Rtvneb.js +200 -0
  296. package/dist/{variant-wave-DbfNdvSi.js → variant-wave-BUQtkryq.js} +1 -1
  297. package/dist/variant-wave-BVYnqy9L.js +218 -0
  298. package/dist/variant-wave-DXC6_LcH.js +208 -0
  299. package/dist/wire/chunk.d.ts +171 -0
  300. package/dist/wire/consume.d.ts +26 -0
  301. package/dist/wire/encode.d.ts +221 -0
  302. package/dist/wire/files.d.ts +116 -0
  303. package/dist/wire/formats/anthropic.d.ts +2 -0
  304. package/dist/wire/formats/openai.d.ts +5 -0
  305. package/dist/wire/index.d.ts +16 -0
  306. package/dist/wire/media-types.d.ts +106 -0
  307. package/dist/wire/read.d.ts +26 -0
  308. package/dist/wire/sink-helpers.d.ts +21 -0
  309. package/dist/wire/sse.d.ts +33 -0
  310. package/dist/wire.d.ts +5 -53
  311. package/dist/wire.js +1126 -0
  312. package/frameworks/react/index.tsx +191 -158
  313. package/frameworks/react/runtime.tsx +21 -1
  314. package/frameworks/react/use-kai-chat.tsx +11 -1
  315. package/llms-full.txt +774 -151
  316. package/llms.txt +57 -5
  317. package/package.json +62 -8
  318. package/src/agent-tooling/archetypes.ts +127 -0
  319. package/src/agent-tooling/integrations/anthropic.ts +436 -0
  320. package/src/agent-tooling/integrations/cloudflare.ts +141 -52
  321. package/src/agent-tooling/integrations/langgraph.ts +80 -13
  322. package/src/agent-tooling/integrations/mastra.ts +161 -12
  323. package/src/agent-tooling/integrations/mock.ts +47 -8
  324. package/src/agent-tooling/integrations/ollama.ts +68 -24
  325. package/src/agent-tooling/integrations/openai.ts +89 -0
  326. package/src/agent-tooling/integrations/openrouter.ts +58 -8
  327. package/src/agent-tooling/integrations/pi.ts +104 -23
  328. package/src/agent-tooling/integrations/pydantic-ai.ts +61 -5
  329. package/src/agent-tooling/integrations/vercel-ai-sdk.ts +120 -13
  330. package/src/agent-tooling/mcp/manifest.ts +206 -25
  331. package/src/agent-tooling/mcp/tools/debug.ts +13 -7
  332. package/src/agent-tooling/mcp/tools/reference.ts +285 -6
  333. package/src/agent-tooling/mcp/tools/scaffold.ts +4152 -661
  334. package/src/agent-tooling/registry.ts +74 -0
  335. package/src/agent-tooling/types.ts +361 -1
  336. package/src/components/artifact-card.tsx +120 -0
  337. package/src/components/audio-visualizer/index.tsx +9 -0
  338. package/src/components/audio-visualizer/labs/lab-choreography.ts +187 -0
  339. package/src/components/audio-visualizer/labs/lab-shaders.ts +363 -0
  340. package/src/components/audio-visualizer/labs/lab-visualizer.tsx +102 -0
  341. package/src/components/audio-visualizer/shader-canvas.tsx +31 -1
  342. package/src/components/card-fallback.tsx +42 -10
  343. package/src/components/card-renderer.tsx +146 -9
  344. package/src/components/chat-container.tsx +4 -0
  345. package/src/components/chat-thread.tsx +128 -52
  346. package/src/components/choice-card.tsx +17 -29
  347. package/src/components/composer.tsx +12 -2
  348. package/src/components/confirm-card.tsx +24 -20
  349. package/src/components/context.tsx +30 -16
  350. package/src/components/conversation-item.tsx +6 -0
  351. package/src/components/conversation-list.tsx +18 -2
  352. package/src/components/file-tree.tsx +11 -22
  353. package/src/components/file-upload.tsx +14 -8
  354. package/src/components/form.tsx +14 -47
  355. package/src/components/loader.tsx +39 -12
  356. package/src/components/message-skills.tsx +4 -0
  357. package/src/components/message.tsx +294 -46
  358. package/src/components/model-switcher.tsx +38 -8
  359. package/src/components/reasoning.tsx +92 -5
  360. package/src/components/response-compare-types.ts +25 -0
  361. package/src/components/response-compare.tsx +4 -9
  362. package/src/components/source.tsx +50 -24
  363. package/src/components/tasks-card.tsx +10 -33
  364. package/src/components/thread.tsx +84 -42
  365. package/src/components/toast.tsx +17 -6
  366. package/src/components/tool-classify.ts +26 -0
  367. package/src/components/tool-types.ts +31 -1
  368. package/src/elements/agent-card.tsx +11 -11
  369. package/src/elements/artifact.tsx +15 -7
  370. package/src/elements/attachments.tsx +6 -4
  371. package/src/elements/avatar.tsx +1 -1
  372. package/src/elements/button.tsx +29 -6
  373. package/src/elements/card.tsx +2 -2
  374. package/src/elements/cards.tsx +109 -14
  375. package/src/elements/chain-of-thought.tsx +14 -10
  376. package/src/elements/chat-scope-picker.tsx +9 -7
  377. package/src/elements/chat-types.ts +59 -6
  378. package/src/elements/chat-workspace.tsx +50 -9
  379. package/src/elements/chat.tsx +90 -3
  380. package/src/elements/choice.tsx +8 -8
  381. package/src/elements/coachmark.tsx +1 -1
  382. package/src/elements/command.tsx +8 -23
  383. package/src/elements/compare.tsx +7 -6
  384. package/src/elements/compiled.css +1 -1
  385. package/src/elements/composer.tsx +8 -8
  386. package/src/elements/confirm-card.tsx +9 -9
  387. package/src/elements/context-meter.tsx +4 -18
  388. package/src/elements/conversation-list.tsx +14 -9
  389. package/src/elements/default-input.tsx +131 -8
  390. package/src/elements/define.tsx +178 -43
  391. package/src/elements/editable-label.tsx +17 -2
  392. package/src/elements/element-data-types.ts +112 -0
  393. package/src/elements/element-meta.json +1624 -306
  394. package/src/elements/element-types.d.ts +2645 -214
  395. package/src/elements/feedback-bar.tsx +1 -1
  396. package/src/elements/file-tree.tsx +1 -1
  397. package/src/elements/file-upload.tsx +1 -1
  398. package/src/elements/form.tsx +14 -6
  399. package/src/elements/input.tsx +1 -1
  400. package/src/elements/kbd.tsx +1 -1
  401. package/src/elements/menu.tsx +40 -32
  402. package/src/elements/message-skills.tsx +7 -9
  403. package/src/elements/message.tsx +200 -32
  404. package/src/elements/model-switcher.tsx +5 -3
  405. package/src/elements/pane.tsx +1 -1
  406. package/src/elements/prompt-dock.tsx +8 -8
  407. package/src/elements/prompt-input.tsx +10 -10
  408. package/src/elements/prompt-suggestions.tsx +7 -4
  409. package/src/elements/reasoning.tsx +1 -1
  410. package/src/elements/register.ts +9 -0
  411. package/src/elements/resizable.globals.d.ts +36 -0
  412. package/src/elements/resizable.tsx +24 -13
  413. package/src/elements/response-stream.tsx +1 -1
  414. package/src/elements/scroll-button.tsx +1 -1
  415. package/src/elements/search.tsx +6 -1
  416. package/src/elements/segmented.tsx +5 -11
  417. package/src/elements/separator.tsx +1 -1
  418. package/src/elements/slot-text.ts +73 -0
  419. package/src/elements/slots.ts +67 -24
  420. package/src/elements/source.tsx +21 -22
  421. package/src/elements/switch.tsx +3 -3
  422. package/src/elements/tasks.tsx +5 -4
  423. package/src/elements/thread.tsx +36 -4
  424. package/src/elements/toast.tsx +3 -2
  425. package/src/elements/tool.tsx +1 -1
  426. package/src/elements/validate-messages.ts +76 -0
  427. package/src/elements/voice-input.tsx +7 -7
  428. package/src/elements/voice-output.tsx +4 -4
  429. package/src/index.ts +145 -6
  430. package/src/primitives/card-component-types.ts +63 -0
  431. package/src/primitives/card-data-types.ts +312 -0
  432. package/src/primitives/card-recovery.ts +13 -2
  433. package/src/primitives/card-registry.tsx +34 -23
  434. package/src/primitives/card-schemas/artifact.schema.json +92 -0
  435. package/src/primitives/card-schemas/embed.schema.json +0 -2
  436. package/src/primitives/card-schemas/link.schema.json +0 -2
  437. package/src/primitives/card-tags.ts +61 -0
  438. package/src/primitives/card-validate-cards.ts +255 -0
  439. package/src/primitives/card-validate-generator.testlib.ts +38 -0
  440. package/src/primitives/card-validate-schemas.ts +58 -0
  441. package/src/primitives/card-validate.ts +48 -20
  442. package/src/primitives/create-tween.ts +54 -2
  443. package/src/primitives/message-feedback.ts +3 -2
  444. package/src/primitives/use-audio-analysis.ts +20 -1
  445. package/src/primitives/use-sequencer.ts +20 -1
  446. package/src/schemas/from-tool-call.ts +151 -0
  447. package/src/schemas/index.ts +340 -0
  448. package/src/schemas/provider-subsets.ts +538 -0
  449. package/src/schemas/registry.ts +355 -0
  450. package/src/schemas/tool-defs.ts +492 -0
  451. package/src/solid.ts +150 -0
  452. package/src/state/index.ts +27 -1
  453. package/src/state/messages.ts +21 -4
  454. package/src/state/mock.ts +211 -0
  455. package/src/state/parts.ts +295 -0
  456. package/src/state/stream.ts +56 -58
  457. package/src/ui/collapsible.tsx +17 -5
  458. package/src/ui/dropdown.tsx +46 -12
  459. package/src/ui/overlay.tsx +10 -4
  460. package/src/wire/chunk.ts +201 -0
  461. package/src/wire/consume.ts +440 -0
  462. package/src/wire/encode.ts +689 -0
  463. package/src/wire/files.ts +342 -0
  464. package/src/wire/formats/anthropic.ts +267 -0
  465. package/src/wire/formats/openai.ts +187 -0
  466. package/src/wire/index.ts +73 -0
  467. package/src/wire/media-types.ts +344 -0
  468. package/src/wire/read.ts +152 -0
  469. package/src/wire/sink-helpers.ts +50 -0
  470. package/src/wire/sse.ts +140 -0
  471. package/dist/create-tween-hvpmSuwW.js +0 -7
  472. package/dist/elements/chunks/arrow-left-DQocUFvy.js +0 -1
  473. package/dist/elements/chunks/audio-visualizer-BqNy7dfm.js +0 -1
  474. package/dist/elements/chunks/card-BkHbp4BA.js +0 -1
  475. package/dist/elements/chunks/chat-thread-CkRN6pZ7.js +0 -1
  476. package/dist/elements/chunks/check-B9-gn6SS.js +0 -1
  477. package/dist/elements/chunks/chevron-down-BNsxc2hk.js +0 -1
  478. package/dist/elements/chunks/chevron-right-Hv00StBO.js +0 -1
  479. package/dist/elements/chunks/circle-0e3KJTDr.js +0 -1
  480. package/dist/elements/chunks/circle-check-BNAS0JEy.js +0 -1
  481. package/dist/elements/chunks/code-block-BFUHn6Va.js +0 -1
  482. package/dist/elements/chunks/context-Cb7k4F-v.js +0 -1
  483. package/dist/elements/chunks/conversation-list-CvoAkWhN.js +0 -1
  484. package/dist/elements/chunks/create-tween-oVvAIG8r.js +0 -7
  485. package/dist/elements/chunks/default-input-Cqqilg9t.js +0 -1
  486. package/dist/elements/chunks/define-D1din7Ld.js +0 -1
  487. package/dist/elements/chunks/hover-card-Cmm6Q53m.js +0 -1
  488. package/dist/elements/chunks/message-BqyXDN3-.js +0 -1
  489. package/dist/elements/chunks/message-feedback-Djr3z6Yb.js +0 -1
  490. package/dist/elements/chunks/message-square-vFAgbDaX.js +0 -1
  491. package/dist/elements/chunks/model-switcher-B94YAKsM.js +0 -1
  492. package/dist/elements/chunks/reasoning-DTpCGtnY.js +0 -1
  493. package/dist/elements/chunks/scroll-button-B0cH5fXf.js +0 -1
  494. package/dist/elements/chunks/skeleton-DSXW5Yya.js +0 -1
  495. package/dist/elements/chunks/slots--V19HwUb.js +0 -1
  496. package/dist/elements/chunks/textarea-CUwqAX0G.js +0 -1
  497. package/dist/elements/chunks/tooltip-CgBZCVKp.js +0 -1
  498. package/dist/elements/chunks/use-card-resolution-BSu_XHjH.js +0 -1
  499. package/dist/elements/chunks/x-GRUeeQFT.js +0 -1
  500. package/dist/host-embed.d.ts +0 -33
  501. package/dist/kai-provider.d.ts +0 -2
  502. package/dist/origin.d.ts +0 -5
  503. package/dist/provider-runtime.d.ts +0 -27
  504. package/dist/register-impl-DQyejdfb.js +0 -145
  505. package/dist/validate.d.ts +0 -4
  506. package/dist/version.d.ts +0 -4
  507. package/src/components/component-meta.json +0 -4550
  508. package/src/elements/card-media.jpg +0 -0
  509. package/src/elements/resizable.d.ts +0 -27
  510. package/src/elements/video-poster.jpg +0 -0
@@ -1,10 +1,14 @@
1
- import { ComposerDoc } from '../primitives/composer-model';
2
- import { AttachmentData } from './attachments';
3
- import { MessageActionDetail } from '../primitives/message-feedback';
4
- import { TriggerDef } from './composer';
5
- import { ChatMessage } from '../elements/chat-types';
6
- import { ProseSize } from '../primitives/chat-config';
7
- import { ModelOption } from '../types';
1
+ import { ComposerDoc } from '../primitives/composer-model.js';
2
+ import { AttachmentData } from './attachments.js';
3
+ import { MessageActionDetail } from '../primitives/message-feedback.js';
4
+ import { RejectedAttachment } from '../elements/default-input.js';
5
+ import { MediaTypeFilter } from '../wire/media-types.js';
6
+ import { TriggerDef } from './composer.js';
7
+ import { ChatMessage } from '../elements/chat-types.js';
8
+ import { ProseSize } from '../primitives/chat-config.js';
9
+ import { ModelOption } from '../types.js';
10
+ import { CardComponentMap } from '../primitives/card-registry.js';
11
+ import { CardSchemaMap } from './card-renderer.js';
8
12
  export interface ChatThreadContextUsage {
9
13
  usedTokens: number;
10
14
  maxTokens: number;
@@ -16,9 +20,19 @@ export interface ChatThreadProps {
16
20
  /** Extra classes for the thread root (e.g. `h-full`). */
17
21
  class?: string;
18
22
  /** The full message thread to render, newest last. Each entry carries its role,
19
- * content, and optional reasoning/tools/attachments/actions. Set as a JS
20
- * property (`el.messages = [...]`). */
23
+ * ordered `parts`, and optional actions/avatar/feedback. Set as a JS property
24
+ * (`el.messages = [...]`). */
21
25
  messages: ChatMessage[];
26
+ /** Add/override card type -> component entries, forwarded to `CardRenderer`
27
+ * for `card` parts. */
28
+ cardTypes?: CardComponentMap;
29
+ /** JSON Schemas for the card types this app renders, keyed by envelope type,
30
+ * forwarded to `CardRenderer` for `card` parts. The companion of `cardTypes`:
31
+ * that says what DRAWS a card, this says what a VALID one looks like.
32
+ * `createCardRegistry(...).validationSchemas` is exactly this shape. Without it
33
+ * the kit checks its own seven built-ins and leaves your own card type
34
+ * unvalidated. A schema here WINS over a built-in of the same name. */
35
+ cardSchemas?: CardSchemaMap;
22
36
  /** Value of the input. A **string** is controlled (the host owns the text and
23
37
  * updates it on `kai-value-change`). A **ComposerDoc** is a one-time seed that
24
38
  * pre-populates pills; the user then edits freely. Leave unset for uncontrolled. */
@@ -59,29 +73,36 @@ export interface ChatThreadProps {
59
73
  context?: ChatThreadContextUsage;
60
74
  /** Show the scroll-to-bottom button inside the scroll area. Default true. */
61
75
  scrollButton?: boolean;
62
- /** Whether the host has `slot="header-start"` content (left of the title)
63
- * set by the `<kai-chat>` facade so a custom control forces the header open. */
76
+ /** Whether the host has `slot="header-start"` content (left of the title). Set
77
+ * by the `<kai-chat>` facade so a custom control forces the header open. */
64
78
  headerStart?: boolean;
65
79
  /** Whether the host has `slot="header-end"` content (right of the controls). */
66
80
  headerEnd?: boolean;
67
- /** REPLACE full custom header in place of the built-in title/model/context bar. */
81
+ /** REPLACE: full custom header in place of the built-in title/model/context bar. */
68
82
  headerFull?: boolean;
69
- /** INJECT left sidebar column (e.g. a conversation list / your own nav). */
83
+ /** INJECT: left sidebar column (e.g. a conversation list / your own nav). */
70
84
  sidebar?: boolean;
71
- /** REPLACE custom zero-state rendered in the message area while the thread is empty (replaces the empty message list only; the composer and its suggestions still render). */
85
+ /** REPLACE: custom zero-state rendered in the message area while the thread is empty (replaces the empty message list only; the composer and its suggestions still render). */
72
86
  empty?: boolean;
73
- /** REPLACE full custom composer in place of the built-in prompt input. The
87
+ /** REPLACE: full custom composer in place of the built-in prompt input. The
74
88
  * projected content wires its own submit (the data-flow boundary). */
75
89
  composer?: boolean;
76
- /** INJECT accessory row just above the composer (e.g. extra actions). */
90
+ /** INJECT: accessory row just above the composer (e.g. extra actions). */
77
91
  composerActions?: boolean;
78
- /** INJECT footer row below the composer (disclaimers, token meter, …). */
92
+ /** INJECT: footer row below the composer (disclaimers, token meter, …). */
79
93
  footer?: boolean;
94
+ /** Which attachment media types the user may stage, in HTML `accept` syntax
95
+ * (`'image/*,application/pdf'`). Omitted means no filter. Narrowed by what the
96
+ * encoders can actually send — the same string, and the same resolver, as
97
+ * `toOpenAIMessages(msgs, { accept })`. */
98
+ accept?: MediaTypeFilter;
99
+ /** Files the composer refused because `accept` excluded them. */
100
+ onAttachmentsRejected?: (rejected: RejectedAttachment[]) => void;
80
101
  /** Show a Search (Globe) button in the input toolbar; fires a `search` event. */
81
102
  search?: boolean;
82
103
  /** Show a Voice (Mic) button in the input toolbar; fires a `voice` event. */
83
104
  voice?: boolean;
84
- /** Rich entity triggers each `{ char, kind, items }` opens a caret-anchored
105
+ /** Rich entity triggers. Each `{ char, kind, items }` opens a caret-anchored
85
106
  * menu that inserts an atomic pill (`/` skills, `@` agents/plugins). Set as a
86
107
  * JS property; forwarded to the input. */
87
108
  triggers?: TriggerDef[];
@@ -113,4 +134,42 @@ export interface ChatThreadController {
113
134
  send(): void;
114
135
  scrollToBottom(behavior?: ScrollBehavior): void;
115
136
  }
137
+ /**
138
+ * THE MESSAGE LIST'S KEY, and the reason it is not the message object. This is
139
+ * the canonical note; `thread.tsx` keys its identical list the same way and
140
+ * points here.
141
+ *
142
+ * `<For>` is REFERENCE-keyed, and a streaming assistant message gets a brand
143
+ * new object identity on every delta — `createAssistantStream` rebuilds it as
144
+ * `{ ...prev[i], parts: next }` because a new reference IS the re-render
145
+ * signal. Keyed on the objects, every chunk therefore looks like an entirely
146
+ * new list: the whole message row is torn down and rebuilt, and everything the
147
+ * user did inside it dies with it. Expanding a tool or reasoning panel
148
+ * mid-stream did nothing at all — the disclosure opened and was discarded
149
+ * microseconds later by the next token. (`MessageBody` keys its PARTS by
150
+ * position for exactly this reason; that fix was dead while its parent kept
151
+ * destroying the subtree above it.)
152
+ *
153
+ * So key on `message.id`, which is stable across the object churn: `<For>` over
154
+ * the id array diffs by string value, a delta produces an identical id list,
155
+ * and no row moves. The row then reads its message through `messages[i()]` —
156
+ * `<For>`'s index accessor, which it keeps current across inserts, removals and
157
+ * moves — so the CONTENT keeps updating through accessors while the DOM stays
158
+ * put.
159
+ *
160
+ * WHY NOT `<Index>`, the other way to survive the churn: `<Index>` keys by
161
+ * POSITION, so a row's local state (an open panel, a half-filled form card)
162
+ * belongs to the slot rather than to the message. Appends and tail truncations
163
+ * (regenerate/edit) are fine, but prepending older turns — load-earlier-history,
164
+ * which every real chat grows — shifts every row, and each open disclosure
165
+ * stays behind with the wrong message. Position IS a valid key inside a
166
+ * message, where the folds only ever append or patch a part in place; it is not
167
+ * one for the message list, where the host owns the array and splices it.
168
+ * Both approaches require the row to read through accessors — that is inherent
169
+ * in keeping a row mounted while its object is replaced, not a cost unique to
170
+ * either.
171
+ *
172
+ * Contract: `id` must be unique per message. It already had to be — the
173
+ * feedback/copy state above this list is keyed by it.
174
+ */
116
175
  export declare function ChatThread(props: ChatThreadProps): import("solid-js").JSX.Element;
@@ -1,32 +1,7 @@
1
1
  import { JSX } from 'solid-js';
2
- import { CardEnvelope, CardHost, CardResolution } from '../primitives/card-contract';
3
- export interface ChoiceOptionMedia {
4
- image?: string;
5
- imageAlt?: string;
6
- icon?: string;
7
- }
8
- export interface ChoiceOption {
9
- id: string;
10
- label: string;
11
- description?: string;
12
- media?: ChoiceOptionMedia;
13
- meta?: string;
14
- recommended?: boolean;
15
- disabled?: boolean;
16
- payload?: unknown;
17
- }
18
- export type ChoiceAllowOther = boolean | {
19
- label?: string;
20
- placeholder?: string;
21
- };
22
- export interface ChoiceCardData {
23
- prompt?: string;
24
- options: ChoiceOption[];
25
- allowOther?: ChoiceAllowOther;
26
- submitLabel?: string;
27
- dismissible?: boolean;
28
- }
29
- export type ChoiceCardEnvelope = CardEnvelope<'choice', ChoiceCardData>;
2
+ import { CardHost, CardResolution } from '../primitives/card-contract.js';
3
+ import { ChoiceAllowOther, ChoiceCardData, ChoiceOption } from '../primitives/card-data-types.js';
4
+ export type { ChoiceAllowOther, ChoiceCardData, ChoiceCardEnvelope, ChoiceOption, ChoiceOptionMedia, } from '../primitives/card-data-types.js';
30
5
  export declare const CHOICE_CARD_TYPE: "choice";
31
6
  /** The reserved action id emitted by the `allowOther` free-text submit. */
32
7
  export declare const OTHER_ACTION: "__other__";
@@ -1,4 +1,4 @@
1
- import { EntityRef, ComposerDoc } from '../primitives/composer-model';
1
+ import { EntityRef, ComposerDoc } from '../primitives/composer-model.js';
2
2
  export declare const ZWSP = "\u200B";
3
3
  export declare const ENTITY_ATTR = "data-kai-entity";
4
4
  export declare const entityStore: WeakMap<HTMLElement, EntityRef>;
@@ -1,4 +1,4 @@
1
- import { HighlightRule } from './composer';
1
+ import { HighlightRule } from './composer.js';
2
2
  export interface HighlightMatch {
3
3
  start: number;
4
4
  end: number;
@@ -1,4 +1,4 @@
1
- import { ComposerDoc } from '../primitives/composer-model';
1
+ import { ComposerDoc } from '../primitives/composer-model.js';
2
2
  /**
3
3
  * Undo/redo history for the composer.
4
4
  *
@@ -1,5 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
- import { ComposerDoc, EntityRef } from '../primitives/composer-model';
2
+ import { ComposerDoc, EntityRef } from '../primitives/composer-model.js';
3
3
  export interface TriggerItem {
4
4
  id: string;
5
5
  label: string;
@@ -1,22 +1,7 @@
1
1
  import { JSX } from 'solid-js';
2
- import { CardEnvelope, CardHost, CardResolution } from '../primitives/card-contract';
3
- export type ConfirmActionStyle = 'primary' | 'default' | 'destructive';
4
- export type ConfirmTone = 'default' | 'warning' | 'danger';
5
- export interface ConfirmAction {
6
- id: string;
7
- label: string;
8
- style?: ConfirmActionStyle;
9
- payload?: unknown;
10
- default?: boolean;
11
- }
12
- export interface ConfirmCardData {
13
- heading?: string;
14
- body?: string;
15
- tone?: ConfirmTone;
16
- actions: ConfirmAction[];
17
- dismissible?: boolean;
18
- }
19
- export type ConfirmCardEnvelope = CardEnvelope<'confirm', ConfirmCardData>;
2
+ import { CardHost, CardResolution } from '../primitives/card-contract.js';
3
+ import { ConfirmAction, ConfirmActionStyle, ConfirmCardData } from '../primitives/card-data-types.js';
4
+ export type { ConfirmAction, ConfirmActionStyle, ConfirmCardData, ConfirmCardEnvelope, ConfirmTone, } from '../primitives/card-data-types.js';
20
5
  export declare const CONFIRM_CARD_TYPE: "confirm";
21
6
  /** Map an action's `style` to a Button variant (falls back + warns on unknown). */
22
7
  export declare function buttonVariantForStyle(style: ConfirmActionStyle | undefined): 'default' | 'outline' | 'destructive';
@@ -59,7 +59,11 @@ export interface ContextUsageRowProps {
59
59
  class?: string;
60
60
  children?: JSX.Element;
61
61
  }
62
- export declare function ContextInputUsage(props: ContextUsageRowProps): JSX.Element;
63
- export declare function ContextOutputUsage(props: ContextUsageRowProps): JSX.Element;
64
- export declare function ContextReasoningUsage(props: ContextUsageRowProps): JSX.Element;
65
- export declare function ContextCacheUsage(props: ContextUsageRowProps): JSX.Element;
62
+ export type ContextInputUsageProps = ContextUsageRowProps;
63
+ export type ContextOutputUsageProps = ContextUsageRowProps;
64
+ export type ContextReasoningUsageProps = ContextUsageRowProps;
65
+ export type ContextCacheUsageProps = ContextUsageRowProps;
66
+ export declare function ContextInputUsage(props: ContextInputUsageProps): JSX.Element;
67
+ export declare function ContextOutputUsage(props: ContextOutputUsageProps): JSX.Element;
68
+ export declare function ContextReasoningUsage(props: ContextReasoningUsageProps): JSX.Element;
69
+ export declare function ContextCacheUsage(props: ContextCacheUsageProps): JSX.Element;
@@ -1,4 +1,4 @@
1
- import { ConversationSummary } from '../types';
1
+ import { ConversationSummary } from '../types.js';
2
2
  export interface ConversationItemProps {
3
3
  conversation: ConversationSummary;
4
4
  isActive: boolean;
@@ -1,5 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
- import { ConversationSummary, ConversationGroup } from '../types';
2
+ import { ConversationSummary, ConversationGroup } from '../types.js';
3
3
  /**
4
4
  * The collapsed-rail fallback: a floating reopen button shown when the
5
5
  * conversation sidebar is collapsed. Shared by `kai-workspace` (its collapsed
@@ -8,10 +8,11 @@ import { ConversationSummary, ConversationGroup } from '../types';
8
8
  * surrounding region (the workspace puts the thread beside it, the standalone
9
9
  * element stands alone). `onExpand` reopens the rail.
10
10
  */
11
- export declare function CollapsedRail(props: {
11
+ export interface CollapsedRailProps {
12
12
  onExpand: () => void;
13
13
  class?: string;
14
- }): JSX.Element;
14
+ }
15
+ export declare function CollapsedRail(props: CollapsedRailProps): JSX.Element;
15
16
  export interface ConversationListProps {
16
17
  groups: ConversationGroup[];
17
18
  conversations: ConversationSummary[];
@@ -1,6 +1,6 @@
1
1
  import { JSX } from 'solid-js';
2
- import { CardEvent } from '../primitives/card-contract';
3
- import { EmbedCardData } from '../primitives/embed-providers';
2
+ import { CardEvent } from '../primitives/card-contract.js';
3
+ import { EmbedCardData } from '../primitives/embed-providers.js';
4
4
  export interface EmbedProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onError'> {
5
5
  /** The card id correlating every emitted event. */
6
6
  cardId: string;
@@ -18,4 +18,4 @@ export interface EmbedProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'on
18
18
  * emits are lifecycle `ready`, `open`, and failure `error`.
19
19
  */
20
20
  export declare function Embed(props: EmbedProps): JSX.Element;
21
- export type { EmbedCardData } from '../primitives/embed-providers';
21
+ export type { EmbedCardData } from '../primitives/embed-providers.js';
@@ -1,26 +1,15 @@
1
1
  import { JSX } from 'solid-js';
2
- /** A single artifact file the tree can show + the preview can load. */
3
- export interface FileTreeFile {
4
- /** Tree label/key. Folders are built from `/`-delimited segments. */
5
- path: string;
6
- /** Where the preview loads it (CDN/S3/dev-server/API). */
7
- url?: string;
8
- /** Source for the Code tab. */
9
- code?: string;
10
- /** Language id for syntax highlighting (e.g. `html`, `css`, `tsx`). */
11
- language?: string;
12
- /** Kind drives the icon + whether Code applies. */
13
- type?: 'html' | 'pdf' | 'image' | 'other';
14
- /** Lines added vs the base. Rendered as a trailing `+N` stat (success hue,
15
- * tabular-nums). Only shown when present; omit for a plain file row. */
16
- additions?: number;
17
- /** Lines removed vs the base. Rendered as a trailing `-N` stat (error hue). */
18
- deletions?: number;
19
- /** Change status vs the base. Drives a small trailing status letter in the
20
- * conventional VCS hue (added=green, modified=amber, deleted=red,
21
- * renamed=blue, untracked=muted). Only shown when present. */
22
- status?: 'added' | 'modified' | 'deleted' | 'renamed' | 'untracked';
23
- }
2
+ import { ArtifactCardFile as FileTreeFile } from '../primitives/card-data-types.js';
3
+ /** A single artifact file the tree can show + the preview can load.
4
+ *
5
+ * AUTHORED IN ../primitives/card-data-types.ts as `ArtifactCardFile`, and aliased
6
+ * here rather than declared, so there is ONE shape and not a copy of one. It has
7
+ * to live in that `.ts` because `ArtifactCardData.files` reaches it: a type import
8
+ * still has to RESOLVE, and a Node/no-DOM project (tsconfig.mcp.json has no `jsx`
9
+ * on purpose) cannot resolve a `.tsx` at all — so leaving this declaration here
10
+ * would put TS6142 back on any backend that names an artifact card payload. See
11
+ * that file's header. */
12
+ export type { ArtifactCardFile as FileTreeFile } from '../primitives/card-data-types.js';
24
13
  /** A change status a file can carry. */
25
14
  export type FileStatus = NonNullable<FileTreeFile['status']>;
26
15
  /** A folder node in the built tree. */
@@ -1,5 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
- import { FormField } from './form';
2
+ import { FormField } from './form.js';
3
3
  /** The shared prop shape every leaf widget receives from FieldRow. */
4
4
  export interface WidgetProps {
5
5
  id: string;
@@ -1,48 +1,7 @@
1
1
  import { JSX } from 'solid-js';
2
- import { CardEnvelope, CardHost, CardResolution } from '../primitives/card-contract';
3
- /** A field definition (the JSON Schema subset kai-form renders). */
4
- export interface FormField {
5
- type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object';
6
- title?: string;
7
- description?: string;
8
- default?: unknown;
9
- enum?: unknown[];
10
- format?: 'email' | 'uri' | 'url' | 'date' | 'date-time' | 'time';
11
- minimum?: number;
12
- maximum?: number;
13
- minLength?: number;
14
- maxLength?: number;
15
- pattern?: string;
16
- minItems?: number;
17
- maxItems?: number;
18
- items?: FormField | {
19
- enum: unknown[];
20
- };
21
- properties?: Record<string, FormField>;
22
- required?: string[];
23
- readOnly?: boolean;
24
- 'x-kai-widget'?: 'textarea' | 'slider' | 'rating' | 'radio' | 'select' | 'checkbox' | 'password' | 'switch';
25
- 'x-kai-placeholder'?: string;
26
- 'x-kai-step'?: number;
27
- }
28
- /** The form definition = CardEnvelope.data for type:'form'. */
29
- export interface FormDefinition {
30
- type: 'object';
31
- title?: string;
32
- description?: string;
33
- required?: string[];
34
- properties: Record<string, FormField>;
35
- 'x-kai-order'?: string[];
36
- 'x-kai-inlineMax'?: number;
37
- 'x-kai-submitLabel'?: string;
38
- 'x-kai-dismissible'?: boolean;
39
- 'x-kai-actions'?: {
40
- id: string;
41
- label: string;
42
- variant?: 'default' | 'ghost' | 'outline';
43
- }[];
44
- }
45
- export type FormCardEnvelope = CardEnvelope<'form', FormDefinition>;
2
+ import { CardHost, CardResolution } from '../primitives/card-contract.js';
3
+ import { FormDefinition, FormField } from '../primitives/card-data-types.js';
4
+ export type { FormCardEnvelope, FormDefinition, FormField, } from '../primitives/card-data-types.js';
46
5
  /** The internal widget identifiers `widgetFor` resolves to. */
47
6
  export type WidgetKind = 'text' | 'textarea' | 'password' | 'email' | 'url' | 'date' | 'datetime' | 'time' | 'number' | 'slider' | 'rating' | 'switch' | 'checkbox' | 'radio' | 'select' | 'checkbox-group' | 'multiselect' | 'repeater' | 'taglist' | 'fieldset' | 'unsupported';
48
7
  export declare const DEFAULT_INLINE_MAX = 4;
@@ -1,6 +1,6 @@
1
1
  import { JSX } from 'solid-js';
2
- import { CardEvent } from '../primitives/card-contract';
3
- import { LinkPreviewData } from '../primitives/link-preview';
2
+ import { CardEvent } from '../primitives/card-contract.js';
3
+ import { LinkPreviewData } from '../primitives/link-preview.js';
4
4
  export interface LinkPreviewProps {
5
5
  /** The card id correlating every emitted event. */
6
6
  cardId: string;
@@ -20,4 +20,4 @@ export interface LinkPreviewProps {
20
20
  * host policy performs the navigation so it can veto/redirect.
21
21
  */
22
22
  export declare function LinkPreview(props: LinkPreviewProps): JSX.Element;
23
- export type { LinkPreviewData } from '../primitives/link-preview';
23
+ export type { LinkPreviewData } from '../primitives/link-preview.js';
@@ -6,55 +6,37 @@ export interface LoaderProps {
6
6
  text?: string;
7
7
  class?: string;
8
8
  }
9
- export declare function CircularLoader(props: {
9
+ /** Props of the shape-only loader variants (no label). */
10
+ export interface LoaderShapeProps {
10
11
  class?: string;
11
12
  size?: LoaderSize;
12
- }): import("solid-js").JSX.Element;
13
- export declare function ClassicLoader(props: {
14
- class?: string;
15
- size?: LoaderSize;
16
- }): import("solid-js").JSX.Element;
17
- export declare function PulseLoader(props: {
18
- class?: string;
19
- size?: LoaderSize;
20
- }): import("solid-js").JSX.Element;
21
- export declare function PulseDotLoader(props: {
22
- class?: string;
23
- size?: LoaderSize;
24
- }): import("solid-js").JSX.Element;
25
- export declare function DotsLoader(props: {
26
- class?: string;
27
- size?: LoaderSize;
28
- }): import("solid-js").JSX.Element;
29
- export declare function TypingLoader(props: {
30
- class?: string;
31
- size?: LoaderSize;
32
- }): import("solid-js").JSX.Element;
33
- export declare function WaveLoader(props: {
34
- class?: string;
35
- size?: LoaderSize;
36
- }): import("solid-js").JSX.Element;
37
- export declare function BarsLoader(props: {
38
- class?: string;
39
- size?: LoaderSize;
40
- }): import("solid-js").JSX.Element;
41
- export declare function TerminalLoader(props: {
42
- class?: string;
43
- size?: LoaderSize;
44
- }): import("solid-js").JSX.Element;
45
- export declare function TextBlinkLoader(props: {
46
- text?: string;
47
- class?: string;
48
- size?: LoaderSize;
49
- }): import("solid-js").JSX.Element;
50
- export declare function TextShimmerLoader(props: {
51
- text?: string;
52
- class?: string;
53
- size?: LoaderSize;
54
- }): import("solid-js").JSX.Element;
55
- export declare function TextDotsLoader(props: {
13
+ }
14
+ /** Props of the text-based loader variants, which also take the label. */
15
+ export interface LoaderTextProps extends LoaderShapeProps {
56
16
  text?: string;
57
- class?: string;
58
- size?: LoaderSize;
59
- }): import("solid-js").JSX.Element;
17
+ }
18
+ export type CircularLoaderProps = LoaderShapeProps;
19
+ export type ClassicLoaderProps = LoaderShapeProps;
20
+ export type PulseLoaderProps = LoaderShapeProps;
21
+ export type PulseDotLoaderProps = LoaderShapeProps;
22
+ export type DotsLoaderProps = LoaderShapeProps;
23
+ export type TypingLoaderProps = LoaderShapeProps;
24
+ export type WaveLoaderProps = LoaderShapeProps;
25
+ export type BarsLoaderProps = LoaderShapeProps;
26
+ export type TerminalLoaderProps = LoaderShapeProps;
27
+ export type TextBlinkLoaderProps = LoaderTextProps;
28
+ export type TextShimmerLoaderProps = LoaderTextProps;
29
+ export type TextDotsLoaderProps = LoaderTextProps;
30
+ export declare function CircularLoader(props: CircularLoaderProps): import("solid-js").JSX.Element;
31
+ export declare function ClassicLoader(props: ClassicLoaderProps): import("solid-js").JSX.Element;
32
+ export declare function PulseLoader(props: PulseLoaderProps): import("solid-js").JSX.Element;
33
+ export declare function PulseDotLoader(props: PulseDotLoaderProps): import("solid-js").JSX.Element;
34
+ export declare function DotsLoader(props: DotsLoaderProps): import("solid-js").JSX.Element;
35
+ export declare function TypingLoader(props: TypingLoaderProps): import("solid-js").JSX.Element;
36
+ export declare function WaveLoader(props: WaveLoaderProps): import("solid-js").JSX.Element;
37
+ export declare function BarsLoader(props: BarsLoaderProps): import("solid-js").JSX.Element;
38
+ export declare function TerminalLoader(props: TerminalLoaderProps): import("solid-js").JSX.Element;
39
+ export declare function TextBlinkLoader(props: TextBlinkLoaderProps): import("solid-js").JSX.Element;
40
+ export declare function TextShimmerLoader(props: TextShimmerLoaderProps): import("solid-js").JSX.Element;
41
+ export declare function TextDotsLoader(props: TextDotsLoaderProps): import("solid-js").JSX.Element;
60
42
  export declare function Loader(props: LoaderProps): import("solid-js").JSX.Element;
@@ -1,6 +1,10 @@
1
1
  import { JSX } from 'solid-js';
2
+ /** One skill badge. Also the shape of `<kai-skills>`' `skills` property and of a
3
+ * `<kai-skill>` light-DOM child. */
2
4
  export interface Skill {
5
+ /** Stable identifier for the skill. */
3
6
  id: string;
7
+ /** Human-readable skill name shown on the badge. */
4
8
  name: string;
5
9
  }
6
10
  export interface MessageSkillsProps {
@@ -1,14 +1,43 @@
1
1
  import { JSX } from 'solid-js';
2
- import { ChatMessageAction, CustomAction, FeedbackVote } from '../elements/chat-types';
3
- import { ToolPart } from './tool';
4
- import { AttachmentData } from './attachments';
5
- export interface MessageProps extends JSX.HTMLAttributes<HTMLDivElement> {
2
+ import { ChatMessageAction, CustomAction, FeedbackVote, MessagePart } from '../elements/chat-types.js';
3
+ import { CardSchemaMap } from './card-renderer.js';
4
+ import { CardComponentMap } from '../primitives/card-registry.js';
5
+ /** Who is speaking in a message row. This is the SEMANTIC role of the message,
6
+ * not an ARIA role — see `MessageProps['role']`. */
7
+ export type MessageRole = 'user' | 'assistant' | 'system';
8
+ export interface MessageProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'role'> {
6
9
  children: JSX.Element;
10
+ /** Who is speaking: `'user'`, `'assistant'` or `'system'`.
11
+ *
12
+ * This SHADOWS the inherited ARIA `role` attribute on purpose, and is the
13
+ * reason `JSX.HTMLAttributes` is `Omit`ted above. Before this existed, `role`
14
+ * resolved to ARIA and was spread straight onto the row, so `<Message
15
+ * role="user">` shipped `role="user"` on a div — not a valid ARIA role, and a
16
+ * critical axe `aria-roles` violation ("Role must be one of the valid ARIA
17
+ * roles: user") on every message that used the prop. Chromium discards the
18
+ * unknown token and computes `generic`, so the damage was a failed a11y audit
19
+ * and a row with no accessible role or name at all, not a mis-announced one.
20
+ *
21
+ * It is now consumed here and never reaches the DOM. What the row gets
22
+ * instead is a VALID ARIA role that can carry a name — `role="article"` plus
23
+ * an `aria-label` naming the speaker — and `data-role` for styling and
24
+ * querying. Omit the prop and the row stays an unlabelled `<div>`, exactly as
25
+ * before, so the many role-less call sites are untouched.
26
+ *
27
+ * The trade-off: the row's ARIA role can no longer be set through this prop.
28
+ * Pass `aria-label` (or any other ARIA attribute) to override the default
29
+ * naming — the spread below still wins over what this computes. */
30
+ role?: MessageRole;
7
31
  }
8
32
  declare function Message(props: MessageProps): JSX.Element;
9
33
  export interface MessageAvatarProps {
10
- src: string;
11
- alt: string;
34
+ /** Avatar image URL. Optional: with no `src` the component renders `fallback`
35
+ * (initials), which is the whole point of having a fallback — requiring `src`
36
+ * forced `<MessageAvatar src="" …/>` at every initials-only call site. */
37
+ src?: string;
38
+ /** Alt text for the image. Only meaningful alongside `src`; defaults to `''`
39
+ * so an avatar stays decorative rather than announcing a filename. */
40
+ alt?: string;
12
41
  fallback?: string;
13
42
  class?: string;
14
43
  }
@@ -60,21 +89,26 @@ export interface MessageActionBarProps {
60
89
  */
61
90
  declare function MessageActionBar(props: MessageActionBarProps): JSX.Element;
62
91
  export interface MessageBodyProps {
63
- /** The message text/markdown. */
64
- content: string;
65
- /** Optional collapsible reasoning block, rendered above the content. */
66
- reasoning?: {
67
- text: string;
68
- label?: string;
69
- };
70
- /** Tool-call parts, rendered above the content. */
71
- tools?: ToolPart[];
72
- /** Inline attachment previews, rendered above the content. */
73
- attachments?: AttachmentData[];
92
+ /** The message's ordered parts (text, reasoning, tool, card, source, file),
93
+ * rendered in a single pass in the order they appear. A run of consecutive
94
+ * `source` parts renders as ONE citation row (`part="citations"`), placed
95
+ * OUTSIDE the message bubble so a citation is never confused with a link the
96
+ * model typed into its prose. */
97
+ parts: MessagePart[];
98
+ /** Add/override card type -> component entries, forwarded to `CardRenderer`
99
+ * for `card` parts. */
100
+ cardTypes?: CardComponentMap;
101
+ /** JSON Schemas for the card types this app renders, keyed by envelope type,
102
+ * forwarded to `CardRenderer` for `card` parts. The companion of `cardTypes`:
103
+ * that says what DRAWS a card, this says what a VALID one looks like.
104
+ * `createCardRegistry(...).validationSchemas` is exactly this shape. Without it
105
+ * the kit checks its own seven built-ins and leaves your own card type
106
+ * unvalidated. A schema here WINS over a built-in of the same name. */
107
+ cardSchemas?: CardSchemaMap;
74
108
  /** Whether this is a user message (right-aligned bubble) vs an assistant
75
109
  * message (full-width transparent). */
76
110
  isUser: boolean;
77
- /** Whether the content renders as markdown. */
111
+ /** Whether text parts render as markdown. */
78
112
  markdown: boolean;
79
113
  /** Action-bar entries — built-in names and/or custom descriptors. When empty
80
114
  * the bar is not rendered. */
@@ -98,10 +132,39 @@ export interface MessageBodyProps {
98
132
  * shadow this is `<slot name="after-body" />`. */
99
133
  afterBody?: JSX.Element;
100
134
  }
135
+ /** One render group over an ordered `parts` array. Two part types collapse runs:
136
+ * consecutive `file` parts become a single `'files'` group so they share one
137
+ * `<Attachments>` row (matching the pre-parts layout) instead of each opening
138
+ * its own, and consecutive `source` parts become a single `'sources'` group so
139
+ * the N citations one search produced are ONE wrapped row rather than N stacked
140
+ * rows. Every other part is its own `'single'` group. Pure and order-preserving:
141
+ * it only decides where the wrapper boundaries fall, never reorders or drops
142
+ * anything, so a group sits exactly where its parts sat in `parts`. */
143
+ export type MessagePartGroup = {
144
+ kind: 'single';
145
+ part: Exclude<MessagePart, {
146
+ type: 'file';
147
+ } | {
148
+ type: 'source';
149
+ }>;
150
+ } | {
151
+ kind: 'files';
152
+ parts: Extract<MessagePart, {
153
+ type: 'file';
154
+ }>[];
155
+ } | {
156
+ kind: 'sources';
157
+ parts: Extract<MessagePart, {
158
+ type: 'source';
159
+ }>[];
160
+ };
161
+ export declare function groupMessageParts(parts: MessagePart[]): MessagePartGroup[];
101
162
  /**
102
- * The shared message body: an optional reasoning block, tool calls, inline
103
- * attachments, the content bubble, and the action bar — in that order. This is
104
- * the single source of truth for how a message renders, consumed by `ChatThread`
163
+ * The shared message body: the message's `parts` rendered in a single ordered
164
+ * pass (text, reasoning, tool calls, generative-UI cards, citations and file
165
+ * attachments interleaved exactly as they appear), followed by the action bar.
166
+ * Runs of `source` and `file` parts each collapse into one row. This is the
167
+ * single source of truth for how a message renders, consumed by `ChatThread`
105
168
  * (the `<For>` over `messages`), the standalone `<kai-message>` facade, and (in
106
169
  * future) `kai-compare` for each candidate. Pure/prop-driven: all interaction
107
170
  * state (copied, feedback vote) is owned above and passed in.