@kitn.ai/ui 0.20.1 → 0.21.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 (500) 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 +68 -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-D3Y5qiij.js +338 -0
  50. package/dist/create-tween-DGKY1FDY.js +341 -0
  51. package/dist/create-tween-paho5Rh-.js +7 -0
  52. package/dist/custom-elements.json +1681 -454
  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-C-2LvGDG.js} +1 -1
  70. package/dist/elements/chunks/{action-icons-ns1Fnedj.js → action-icons-CaYoImEk.js} +1 -1
  71. package/dist/elements/chunks/arrow-left-Bb46H7w9.js +1 -0
  72. package/dist/elements/chunks/artifact-BBIscOxJ.js +1 -0
  73. package/dist/elements/chunks/{attachments-mCB5F1Fq.js → attachments-BB56zoji.js} +1 -1
  74. package/dist/elements/chunks/audio-visualizer-BxOx4THz.js +1 -0
  75. package/dist/elements/chunks/{badge-B4Zuajl2.js → badge-SxLSZ19R.js} +1 -1
  76. package/dist/elements/chunks/{button-ZWNif3--.js → button-CmkUkz6c.js} +1 -1
  77. package/dist/elements/chunks/card-renderer-Db4ffkWv.js +1 -0
  78. package/dist/elements/chunks/card-tags-D8lZ-C_U.js +1 -0
  79. package/dist/elements/chunks/chat-thread-B3Ks-cKr.js +1 -0
  80. package/dist/elements/chunks/check-C8desc_h.js +1 -0
  81. package/dist/elements/chunks/chevron-down-DKtc2HNB.js +1 -0
  82. package/dist/elements/chunks/chevron-right-Dw4GPhwL.js +1 -0
  83. package/dist/elements/chunks/choice-card-Q9cYYDyM.js +1 -0
  84. package/dist/elements/chunks/circle-BeokBsvB.js +1 -0
  85. package/dist/elements/chunks/circle-check-wJSqt859.js +1 -0
  86. package/dist/elements/chunks/{circle-x-B7faJFlY.js → circle-x-D0MEfxOM.js} +1 -1
  87. package/dist/elements/chunks/code-block-C8VzAraE.js +1 -0
  88. package/dist/elements/chunks/{collapsible-DM1Ckd4e.js → collapsible-Cvj61obE.js} +1 -1
  89. package/dist/elements/chunks/{composer-BguS0QL_.js → composer-D86ztyL0.js} +2 -2
  90. package/dist/elements/chunks/confirm-card-BdyDAGLw.js +1 -0
  91. package/dist/elements/chunks/context-WHDl-xSx.js +1 -0
  92. package/dist/elements/chunks/conversation-list-CdR14_Y4.js +1 -0
  93. package/dist/elements/chunks/create-tween-C_A_B638.js +7 -0
  94. package/dist/elements/chunks/{default-input-Cqqilg9t.js → default-input-CSZqUM81.js} +1 -1
  95. package/dist/elements/chunks/define-BzPnNsXg.js +1 -0
  96. package/dist/elements/chunks/{disclosure-CIZ5c8nO.js → disclosure-DVKsoc1F.js} +1 -1
  97. package/dist/elements/chunks/{download-Dsbg3ste.js → download-BjA54IMJ.js} +1 -1
  98. package/dist/elements/chunks/{dropdown-BDd1-Zgi.js → dropdown-BjVVHWXH.js} +1 -1
  99. package/dist/elements/chunks/{ellipsis-Dw6qrss-.js → ellipsis-BNedmqfi.js} +1 -1
  100. package/dist/elements/chunks/embed-DQsl4XEq.js +1 -0
  101. package/dist/elements/chunks/{external-link-Vt74zAoL.js → external-link-Di-dw2CU.js} +1 -1
  102. package/dist/elements/chunks/{file-text-CZrZF6_v.js → file-text-B3sAODCV.js} +1 -1
  103. package/dist/elements/chunks/{file-tree-DF4okKyo.js → file-tree-Dgto-bMn.js} +1 -1
  104. package/dist/elements/chunks/{folder-glP5rha4.js → folder-D6rMadFV.js} +1 -1
  105. package/dist/elements/chunks/form-CILxvhQ7.js +1 -0
  106. package/dist/elements/chunks/hover-card-BtiF4XiU.js +1 -0
  107. package/dist/elements/chunks/{icon-BLb8beoi.js → icon-DKkmze3y.js} +1 -1
  108. package/dist/elements/chunks/{info-CIsv92JK.js → info-CWRjZkuy.js} +1 -1
  109. package/dist/elements/chunks/{input-Dds1kFyt.js → input--QJBK6BA.js} +1 -1
  110. package/dist/elements/chunks/{kbd-De_xbgi9.js → kbd-C3zuKh8R.js} +1 -1
  111. package/dist/elements/chunks/{link-i4r_k7z4.js → link-BL5JA7Q0.js} +1 -1
  112. package/dist/elements/chunks/link-preview-CU37bbXh.js +1 -0
  113. package/dist/elements/chunks/{loader-BmQH4s3V.js → loader-XmpyxyRH.js} +1 -1
  114. package/dist/elements/chunks/{markdown-Zi21WhUz.js → markdown-3Gv5UZ_o.js} +1 -1
  115. package/dist/elements/chunks/message-CnBA2OUt.js +1 -0
  116. package/dist/elements/chunks/message-X5NZbq-W.js +1 -0
  117. package/dist/elements/chunks/message-square-CnpAm_P0.js +1 -0
  118. package/dist/elements/chunks/{minimize-2--ifeCGrl.js → minimize-2-DwyrUTcM.js} +1 -1
  119. package/dist/elements/chunks/{model-switcher-B94YAKsM.js → model-switcher-CclaJEHt.js} +1 -1
  120. package/dist/elements/chunks/{overlay-kD8dwRv_.js → overlay-Cepd-KcS.js} +1 -1
  121. package/dist/elements/chunks/{paperclip-q21dYOSK.js → paperclip-CdwKjrlu.js} +1 -1
  122. package/dist/elements/chunks/{progress-bar-BrAIIaaJ.js → progress-bar-DMVXBD3b.js} +1 -1
  123. package/dist/elements/chunks/{prompt-suggestion-Bjn2K-fR.js → prompt-suggestion-Di_WZE_5.js} +1 -1
  124. package/dist/elements/chunks/reasoning-D0jMch5u.js +1 -0
  125. package/dist/elements/chunks/{resizable-Dp4JExql.js → resizable-1znbL1Gv.js} +1 -1
  126. package/dist/elements/chunks/{rotate-cw-CFWWkpj2.js → rotate-cw-DVhhgx8n.js} +1 -1
  127. package/dist/elements/chunks/{scroll-area-Bb0kHH1j.js → scroll-area-Bs4bFS1P.js} +1 -1
  128. package/dist/elements/chunks/scroll-button-Bet5NLc4.js +1 -0
  129. package/dist/elements/chunks/{separator-9kRgr1X9.js → separator-C5Gh8qGC.js} +1 -1
  130. package/dist/elements/chunks/{settings-B8lmec4D.js → settings-5vmEFg0K.js} +1 -1
  131. package/dist/elements/chunks/{settings-group-I0hEuXiN.js → settings-group-BWLB38kz.js} +1 -1
  132. package/dist/elements/chunks/{share-C3lTiYGt.js → share-BZ3G_DaB.js} +1 -1
  133. package/dist/elements/chunks/skeleton-DafPJQTp.js +1 -0
  134. package/dist/elements/chunks/slots-CIw9RlAe.js +1 -0
  135. package/dist/elements/chunks/source-D_qj_6uJ.js +1 -0
  136. package/dist/elements/chunks/{star-CSJtGxgv.js → star-Cuv7j2IE.js} +1 -1
  137. package/dist/elements/chunks/{store-CHyW95TP.js → store-C1StPHfW.js} +1 -1
  138. package/dist/elements/chunks/tasks-card-EyoBZfpA.js +1 -0
  139. package/dist/elements/chunks/{text-shimmer-Cn9TmNpI.js → text-shimmer-D9gRSh34.js} +1 -1
  140. package/dist/elements/chunks/textarea-DuhtHfcm.js +1 -0
  141. package/dist/elements/chunks/{thumbs-up-PNVVThEF.js → thumbs-up-B9hwv43w.js} +1 -1
  142. package/dist/elements/chunks/{toast-store-DKbQn3Wn.js → toast-store-Bm3DUEDe.js} +1 -1
  143. package/dist/elements/chunks/{tool-DjTRpIpl.js → tool-CDtW7L0z.js} +1 -1
  144. package/dist/elements/chunks/tooltip-eB226mGK.js +1 -0
  145. package/dist/elements/chunks/{triangle-alert-DsHTHCPm.js → triangle-alert-C1SNzTqK.js} +1 -1
  146. package/dist/elements/chunks/use-card-resolution-YZh2MvI5.js +1 -0
  147. package/dist/elements/chunks/{variant-aurora-Dc4nQUia.js → variant-aurora-Cj1F7D0l.js} +2 -2
  148. package/dist/elements/chunks/{variant-custom-y_3kVQhS.js → variant-custom-T9gpt7QE.js} +1 -1
  149. package/dist/elements/chunks/{variant-wave-D5OR1-9Z.js → variant-wave-CxU9z-TE.js} +2 -2
  150. package/dist/elements/chunks/{video-B7vmenoC.js → video-CK4R7Rus.js} +1 -1
  151. package/dist/elements/chunks/x-D1qx0aLd.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 +7 -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 +2 -2
  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/slots.d.ts +16 -0
  208. package/dist/elements/source.js +1 -1
  209. package/dist/elements/status.js +1 -1
  210. package/dist/elements/switch.js +1 -1
  211. package/dist/elements/tabs.js +1 -1
  212. package/dist/elements/tasks.js +1 -1
  213. package/dist/elements/text-shimmer.js +1 -1
  214. package/dist/elements/thinking-bar.js +1 -1
  215. package/dist/elements/thread.js +1 -1
  216. package/dist/elements/toast.js +1 -1
  217. package/dist/elements/tool.js +1 -1
  218. package/dist/elements/tooltip.js +1 -1
  219. package/dist/elements/validate-messages.d.ts +25 -0
  220. package/dist/elements/voice-input.js +1 -1
  221. package/dist/elements/voice-output.js +1 -1
  222. package/dist/elements.d.ts +2725 -214
  223. package/dist/index.d.ts +163 -125
  224. package/dist/index.js +6336 -5802
  225. package/dist/index.server.d.ts +5 -0
  226. package/dist/index.server.js +5446 -4937
  227. package/dist/kai-provider.es.d.ts +5 -0
  228. package/dist/kai-provider.es.js +79 -77
  229. package/dist/kai.es.d.ts +5 -0
  230. package/dist/kai.es.js +1 -1
  231. package/dist/llms/llms-full.txt +762 -148
  232. package/dist/llms/llms.txt +57 -5
  233. package/dist/mcp.es.js +4010 -770
  234. package/dist/primitives/card-component-types.d.ts +11 -0
  235. package/dist/primitives/card-data-types.d.ts +196 -0
  236. package/dist/primitives/card-host.d.ts +1 -1
  237. package/dist/primitives/card-recovery.d.ts +3 -3
  238. package/dist/primitives/card-registry.d.ts +4 -14
  239. package/dist/primitives/card-resolution.d.ts +1 -1
  240. package/dist/primitives/card-routing.d.ts +1 -1
  241. package/dist/primitives/card-tags.d.ts +11 -0
  242. package/dist/primitives/card-validate-cards.d.ts +57 -0
  243. package/dist/primitives/card-validate-generator.testlib.d.ts +20 -0
  244. package/dist/primitives/card-validate-schemas.d.ts +17 -0
  245. package/dist/primitives/card-validate.d.ts +24 -0
  246. package/dist/primitives/create-kai-chat.d.ts +3 -3
  247. package/dist/primitives/embed-providers.d.ts +1 -1
  248. package/dist/primitives/link-preview.d.ts +1 -1
  249. package/dist/primitives/message-feedback.d.ts +2 -2
  250. package/dist/primitives/toast-store.d.ts +1 -1
  251. package/dist/react/index.d.ts +717 -299
  252. package/dist/react/use-kai-chat.d.ts +8 -4
  253. package/dist/react.d.ts +5 -0
  254. package/dist/react.js +417 -316
  255. package/dist/register-impl-bzrZ44ft.js +145 -0
  256. package/dist/remote/host-embed.d.ts +1 -1
  257. package/dist/remote/index.d.ts +2 -2
  258. package/dist/remote/provider-runtime.d.ts +2 -2
  259. package/dist/remote/provider.d.ts +2 -2
  260. package/dist/remote/validate.d.ts +1 -1
  261. package/dist/remote/wire.d.ts +1 -1
  262. package/dist/schemas/artifact.schema.json +92 -0
  263. package/dist/schemas/embed.schema.json +0 -2
  264. package/dist/schemas/from-tool-call.d.ts +48 -0
  265. package/dist/schemas/index.d.ts +48 -0
  266. package/dist/schemas/link.schema.json +0 -2
  267. package/dist/schemas/provider-subsets.d.ts +136 -0
  268. package/dist/schemas/registry.d.ts +140 -0
  269. package/dist/schemas/tool-defs.d.ts +121 -0
  270. package/dist/schemas.d.ts +5 -0
  271. package/dist/schemas.js +717 -0
  272. package/dist/solid-BCJUQqwS.js +22750 -0
  273. package/dist/solid-BdENBcEq.js +20108 -0
  274. package/dist/solid.d.ts +66 -0
  275. package/dist/solid.js +261 -0
  276. package/dist/solid.server.d.ts +5 -0
  277. package/dist/solid.server.js +261 -0
  278. package/dist/state/index.d.ts +14 -4
  279. package/dist/state/messages.d.ts +8 -3
  280. package/dist/state/mock.d.ts +46 -0
  281. package/dist/state/parts.d.ts +85 -0
  282. package/dist/state/stream.d.ts +15 -9
  283. package/dist/state.d.ts +5 -0
  284. package/dist/state.js +253 -84
  285. package/dist/ui/action-icons.d.ts +1 -1
  286. package/dist/ui/collapsible.d.ts +11 -6
  287. package/dist/ui/dropdown.d.ts +47 -42
  288. package/dist/ui/pane-group.d.ts +1 -1
  289. package/dist/variant-aurora-1wMcXRUS.js +381 -0
  290. package/dist/variant-aurora-BKHHiOgL.js +391 -0
  291. package/dist/{variant-aurora-DVtGqVH6.js → variant-aurora-DOb_o4pC.js} +1 -1
  292. package/dist/{variant-custom-Dif-IV4u.js → variant-custom-CJGB0Kbw.js} +1 -1
  293. package/dist/variant-custom-Co0CkXJF.js +200 -0
  294. package/dist/variant-custom-DWSSgmd2.js +170 -0
  295. package/dist/variant-wave-C3-45cL6.js +218 -0
  296. package/dist/{variant-wave-DbfNdvSi.js → variant-wave-CEODq-9q.js} +1 -1
  297. package/dist/variant-wave-jdXBnCUZ.js +208 -0
  298. package/dist/wire/chunk.d.ts +171 -0
  299. package/dist/wire/consume.d.ts +26 -0
  300. package/dist/wire/encode.d.ts +148 -0
  301. package/dist/wire/formats/anthropic.d.ts +2 -0
  302. package/dist/wire/formats/openai.d.ts +5 -0
  303. package/dist/wire/index.d.ts +14 -0
  304. package/dist/wire/read.d.ts +26 -0
  305. package/dist/wire/sink-helpers.d.ts +21 -0
  306. package/dist/wire/sse.d.ts +33 -0
  307. package/dist/wire.d.ts +5 -53
  308. package/dist/wire.js +898 -0
  309. package/frameworks/react/index.tsx +183 -154
  310. package/frameworks/react/runtime.tsx +21 -1
  311. package/frameworks/react/use-kai-chat.tsx +11 -1
  312. package/llms-full.txt +762 -148
  313. package/llms.txt +57 -5
  314. package/package.json +61 -8
  315. package/src/agent-tooling/archetypes.ts +96 -0
  316. package/src/agent-tooling/integrations/anthropic.ts +412 -0
  317. package/src/agent-tooling/integrations/cloudflare.ts +136 -52
  318. package/src/agent-tooling/integrations/langgraph.ts +67 -13
  319. package/src/agent-tooling/integrations/mastra.ts +120 -12
  320. package/src/agent-tooling/integrations/mock.ts +43 -8
  321. package/src/agent-tooling/integrations/ollama.ts +61 -24
  322. package/src/agent-tooling/integrations/openai.ts +87 -0
  323. package/src/agent-tooling/integrations/openrouter.ts +56 -8
  324. package/src/agent-tooling/integrations/pi.ts +79 -23
  325. package/src/agent-tooling/integrations/pydantic-ai.ts +24 -2
  326. package/src/agent-tooling/integrations/vercel-ai-sdk.ts +84 -13
  327. package/src/agent-tooling/mcp/manifest.ts +206 -25
  328. package/src/agent-tooling/mcp/tools/debug.ts +13 -7
  329. package/src/agent-tooling/mcp/tools/reference.ts +285 -6
  330. package/src/agent-tooling/mcp/tools/scaffold.ts +3345 -675
  331. package/src/agent-tooling/registry.ts +17 -0
  332. package/src/agent-tooling/types.ts +229 -1
  333. package/src/components/artifact-card.tsx +120 -0
  334. package/src/components/audio-visualizer/index.tsx +9 -0
  335. package/src/components/audio-visualizer/labs/lab-choreography.ts +187 -0
  336. package/src/components/audio-visualizer/labs/lab-shaders.ts +363 -0
  337. package/src/components/audio-visualizer/labs/lab-visualizer.tsx +102 -0
  338. package/src/components/audio-visualizer/shader-canvas.tsx +31 -1
  339. package/src/components/card-fallback.tsx +42 -10
  340. package/src/components/card-renderer.tsx +146 -9
  341. package/src/components/chat-container.tsx +4 -0
  342. package/src/components/chat-thread.tsx +118 -51
  343. package/src/components/choice-card.tsx +17 -29
  344. package/src/components/composer.tsx +12 -2
  345. package/src/components/confirm-card.tsx +24 -20
  346. package/src/components/context.tsx +12 -4
  347. package/src/components/conversation-list.tsx +18 -2
  348. package/src/components/file-tree.tsx +11 -22
  349. package/src/components/file-upload.tsx +14 -8
  350. package/src/components/form.tsx +14 -47
  351. package/src/components/loader.tsx +39 -12
  352. package/src/components/message-skills.tsx +4 -0
  353. package/src/components/message.tsx +294 -46
  354. package/src/components/reasoning.tsx +92 -5
  355. package/src/components/response-compare-types.ts +25 -0
  356. package/src/components/response-compare.tsx +4 -9
  357. package/src/components/source.tsx +50 -24
  358. package/src/components/tasks-card.tsx +10 -33
  359. package/src/components/thread.tsx +84 -42
  360. package/src/components/toast.tsx +11 -5
  361. package/src/components/tool-classify.ts +26 -0
  362. package/src/components/tool-types.ts +31 -1
  363. package/src/elements/agent-card.tsx +11 -11
  364. package/src/elements/artifact.tsx +15 -7
  365. package/src/elements/attachments.tsx +6 -4
  366. package/src/elements/avatar.tsx +1 -1
  367. package/src/elements/button.tsx +3 -3
  368. package/src/elements/card.tsx +2 -2
  369. package/src/elements/cards.tsx +109 -14
  370. package/src/elements/chain-of-thought.tsx +14 -10
  371. package/src/elements/chat-scope-picker.tsx +9 -7
  372. package/src/elements/chat-types.ts +59 -6
  373. package/src/elements/chat-workspace.tsx +50 -9
  374. package/src/elements/chat.tsx +64 -3
  375. package/src/elements/choice.tsx +8 -8
  376. package/src/elements/coachmark.tsx +1 -1
  377. package/src/elements/command.tsx +8 -23
  378. package/src/elements/compare.tsx +7 -6
  379. package/src/elements/compiled.css +1 -1
  380. package/src/elements/composer.tsx +8 -8
  381. package/src/elements/confirm-card.tsx +9 -9
  382. package/src/elements/context-meter.tsx +4 -18
  383. package/src/elements/conversation-list.tsx +14 -9
  384. package/src/elements/default-input.tsx +3 -3
  385. package/src/elements/define.tsx +178 -43
  386. package/src/elements/editable-label.tsx +17 -2
  387. package/src/elements/element-data-types.ts +112 -0
  388. package/src/elements/element-meta.json +1596 -304
  389. package/src/elements/element-types.d.ts +2636 -211
  390. package/src/elements/feedback-bar.tsx +1 -1
  391. package/src/elements/file-tree.tsx +1 -1
  392. package/src/elements/file-upload.tsx +1 -1
  393. package/src/elements/form.tsx +14 -6
  394. package/src/elements/input.tsx +1 -1
  395. package/src/elements/kbd.tsx +1 -1
  396. package/src/elements/menu.tsx +10 -29
  397. package/src/elements/message-skills.tsx +7 -9
  398. package/src/elements/message.tsx +200 -32
  399. package/src/elements/model-switcher.tsx +5 -3
  400. package/src/elements/pane.tsx +1 -1
  401. package/src/elements/prompt-dock.tsx +8 -8
  402. package/src/elements/prompt-input.tsx +10 -10
  403. package/src/elements/prompt-suggestions.tsx +7 -4
  404. package/src/elements/reasoning.tsx +1 -1
  405. package/src/elements/register.ts +9 -0
  406. package/src/elements/resizable.globals.d.ts +36 -0
  407. package/src/elements/resizable.tsx +24 -13
  408. package/src/elements/response-stream.tsx +1 -1
  409. package/src/elements/scroll-button.tsx +1 -1
  410. package/src/elements/search.tsx +6 -1
  411. package/src/elements/segmented.tsx +5 -11
  412. package/src/elements/separator.tsx +1 -1
  413. package/src/elements/slots.ts +57 -24
  414. package/src/elements/source.tsx +21 -22
  415. package/src/elements/switch.tsx +3 -3
  416. package/src/elements/tasks.tsx +5 -4
  417. package/src/elements/thread.tsx +36 -4
  418. package/src/elements/toast.tsx +3 -2
  419. package/src/elements/tool.tsx +1 -1
  420. package/src/elements/validate-messages.ts +76 -0
  421. package/src/elements/voice-input.tsx +7 -7
  422. package/src/elements/voice-output.tsx +4 -4
  423. package/src/index.ts +141 -6
  424. package/src/primitives/card-component-types.ts +63 -0
  425. package/src/primitives/card-data-types.ts +312 -0
  426. package/src/primitives/card-recovery.ts +13 -2
  427. package/src/primitives/card-registry.tsx +34 -23
  428. package/src/primitives/card-schemas/artifact.schema.json +92 -0
  429. package/src/primitives/card-schemas/embed.schema.json +0 -2
  430. package/src/primitives/card-schemas/link.schema.json +0 -2
  431. package/src/primitives/card-tags.ts +61 -0
  432. package/src/primitives/card-validate-cards.ts +255 -0
  433. package/src/primitives/card-validate-generator.testlib.ts +38 -0
  434. package/src/primitives/card-validate-schemas.ts +58 -0
  435. package/src/primitives/card-validate.ts +48 -20
  436. package/src/primitives/create-tween.ts +54 -2
  437. package/src/primitives/message-feedback.ts +3 -2
  438. package/src/primitives/use-audio-analysis.ts +20 -1
  439. package/src/primitives/use-sequencer.ts +20 -1
  440. package/src/schemas/from-tool-call.ts +151 -0
  441. package/src/schemas/index.ts +340 -0
  442. package/src/schemas/provider-subsets.ts +538 -0
  443. package/src/schemas/registry.ts +355 -0
  444. package/src/schemas/tool-defs.ts +492 -0
  445. package/src/solid.ts +150 -0
  446. package/src/state/index.ts +27 -1
  447. package/src/state/messages.ts +21 -4
  448. package/src/state/mock.ts +211 -0
  449. package/src/state/parts.ts +295 -0
  450. package/src/state/stream.ts +56 -58
  451. package/src/ui/collapsible.tsx +17 -5
  452. package/src/ui/dropdown.tsx +46 -12
  453. package/src/ui/overlay.tsx +10 -4
  454. package/src/wire/chunk.ts +201 -0
  455. package/src/wire/consume.ts +440 -0
  456. package/src/wire/encode.ts +474 -0
  457. package/src/wire/formats/anthropic.ts +267 -0
  458. package/src/wire/formats/openai.ts +187 -0
  459. package/src/wire/index.ts +52 -0
  460. package/src/wire/read.ts +152 -0
  461. package/src/wire/sink-helpers.ts +50 -0
  462. package/src/wire/sse.ts +140 -0
  463. package/dist/create-tween-hvpmSuwW.js +0 -7
  464. package/dist/elements/chunks/arrow-left-DQocUFvy.js +0 -1
  465. package/dist/elements/chunks/audio-visualizer-BqNy7dfm.js +0 -1
  466. package/dist/elements/chunks/card-BkHbp4BA.js +0 -1
  467. package/dist/elements/chunks/chat-thread-CkRN6pZ7.js +0 -1
  468. package/dist/elements/chunks/check-B9-gn6SS.js +0 -1
  469. package/dist/elements/chunks/chevron-down-BNsxc2hk.js +0 -1
  470. package/dist/elements/chunks/chevron-right-Hv00StBO.js +0 -1
  471. package/dist/elements/chunks/circle-0e3KJTDr.js +0 -1
  472. package/dist/elements/chunks/circle-check-BNAS0JEy.js +0 -1
  473. package/dist/elements/chunks/code-block-BFUHn6Va.js +0 -1
  474. package/dist/elements/chunks/context-Cb7k4F-v.js +0 -1
  475. package/dist/elements/chunks/conversation-list-CvoAkWhN.js +0 -1
  476. package/dist/elements/chunks/create-tween-oVvAIG8r.js +0 -7
  477. package/dist/elements/chunks/define-D1din7Ld.js +0 -1
  478. package/dist/elements/chunks/hover-card-Cmm6Q53m.js +0 -1
  479. package/dist/elements/chunks/message-BqyXDN3-.js +0 -1
  480. package/dist/elements/chunks/message-feedback-Djr3z6Yb.js +0 -1
  481. package/dist/elements/chunks/message-square-vFAgbDaX.js +0 -1
  482. package/dist/elements/chunks/reasoning-DTpCGtnY.js +0 -1
  483. package/dist/elements/chunks/scroll-button-B0cH5fXf.js +0 -1
  484. package/dist/elements/chunks/skeleton-DSXW5Yya.js +0 -1
  485. package/dist/elements/chunks/slots--V19HwUb.js +0 -1
  486. package/dist/elements/chunks/textarea-CUwqAX0G.js +0 -1
  487. package/dist/elements/chunks/tooltip-CgBZCVKp.js +0 -1
  488. package/dist/elements/chunks/use-card-resolution-BSu_XHjH.js +0 -1
  489. package/dist/elements/chunks/x-GRUeeQFT.js +0 -1
  490. package/dist/host-embed.d.ts +0 -33
  491. package/dist/kai-provider.d.ts +0 -2
  492. package/dist/origin.d.ts +0 -5
  493. package/dist/provider-runtime.d.ts +0 -27
  494. package/dist/register-impl-DQyejdfb.js +0 -145
  495. package/dist/validate.d.ts +0 -4
  496. package/dist/version.d.ts +0 -4
  497. package/src/components/component-meta.json +0 -4550
  498. package/src/elements/card-media.jpg +0 -0
  499. package/src/elements/resizable.d.ts +0 -27
  500. package/src/elements/video-poster.jpg +0 -0
@@ -0,0 +1,76 @@
1
+ import type { ChatMessage } from './chat-types';
2
+
3
+ /**
4
+ * Boundary validation for the untyped `message` / `messages` properties.
5
+ *
6
+ * A web component's properties are an untyped boundary: nothing stops a consumer
7
+ * from assigning the pre-0.20.0 `{ id, role, content }` shape, and TypeScript is
8
+ * not there at runtime to catch it. `parts` is REQUIRED internally, so a message
9
+ * without one throws inside a Solid render pass (`groupMessageParts` iterating
10
+ * `undefined`), and an uncaught exception there blanks the WHOLE element, not
11
+ * just the offending message. Validating here turns that into a skipped message
12
+ * plus one clear console error naming the element and the expected shape.
13
+ */
14
+
15
+ /** True when `m` carries the required `parts` array. */
16
+ export function hasParts(m: unknown): m is ChatMessage {
17
+ return !!m && typeof m === 'object' && Array.isArray((m as { parts?: unknown }).parts);
18
+ }
19
+
20
+ /** Shared tail of every diagnostic, so all facades say the same thing. */
21
+ const EXPECTED =
22
+ "each entry needs a 'parts' array (e.g. parts: [{ type: 'text', text: 'Hi' }]). " +
23
+ "The 'content' string field was removed in 0.20.0.";
24
+
25
+ const EMPTY: ChatMessage[] = [];
26
+
27
+ /**
28
+ * Creates a per-element-instance validator for a `messages` array. Returns the
29
+ * INPUT array unchanged when every entry is valid (no allocation, so streaming
30
+ * identity checks upstream still hold), a filtered copy when some are not, and
31
+ * `[]` when the property itself is not an array.
32
+ *
33
+ * Logs at most one `console.error` per validation pass, and never re-logs for a
34
+ * message object it has already reported, so an unrelated re-render during
35
+ * streaming does not spam the console.
36
+ */
37
+ export function createMessagesGuard(tag: string): (messages: unknown) => ChatMessage[] {
38
+ const warned = new WeakSet<object>();
39
+ // WeakSet only holds objects, so primitive entries (a stray string/null in the
40
+ // array) get one shared latch instead.
41
+ let warnedPrimitive = false;
42
+ let warnedNonArray = false;
43
+
44
+ return (messages: unknown): ChatMessage[] => {
45
+ if (!Array.isArray(messages)) {
46
+ if (messages != null && !warnedNonArray) {
47
+ warnedNonArray = true;
48
+ console.error(`<${tag}>: 'messages' must be an array. Ignoring it.`);
49
+ }
50
+ return EMPTY;
51
+ }
52
+ // Fast path: nothing to report, hand back the same reference.
53
+ if (messages.every(hasParts)) return messages as ChatMessage[];
54
+
55
+ let invalid = 0;
56
+ let unreported = 0;
57
+ for (const m of messages) {
58
+ if (hasParts(m)) continue;
59
+ invalid++;
60
+ if (m !== null && typeof m === 'object') {
61
+ if (warned.has(m as object)) continue;
62
+ warned.add(m as object);
63
+ } else {
64
+ if (warnedPrimitive) continue;
65
+ warnedPrimitive = true;
66
+ }
67
+ unreported++;
68
+ }
69
+ if (unreported > 0) {
70
+ console.error(
71
+ `<${tag}>: skipped ${invalid} of ${messages.length} messages: ${EXPECTED}`,
72
+ );
73
+ }
74
+ return messages.filter(hasParts);
75
+ };
76
+ }
@@ -3,7 +3,7 @@ import { VoiceInput, type VoiceInputController } from '../components/voice-input
3
3
 
4
4
  interface Props extends Record<string, unknown> {
5
5
  /**
6
- * Transcriber the host supplies records audio, returns the text. This is a
6
+ * Transcriber the host supplies: records audio, returns the text. This is a
7
7
  * **function-valued property** (`el.transcribe = async blob => '...'`) because
8
8
  * a value-returning callback can't be modelled as a fire-and-forget event.
9
9
  */
@@ -24,18 +24,18 @@ interface Props extends Record<string, unknown> {
24
24
 
25
25
  /** Events fired by `<kai-voice-input>`. */
26
26
  interface Events {
27
- /** Raw audio captured (before transcription) for hosts that prefer to
28
- * handle transcription themselves instead of via the `transcribe` property.
29
- * Also the unsupported-fallback signal: no `transcribe`, no SpeechRecognition,
30
- * so only the blob is produced (no text). */
27
+ /** Raw audio captured (before transcription), for hosts that prefer to handle
28
+ * transcription themselves instead of via the `transcribe` property. Also the
29
+ * unsupported-fallback signal: no `transcribe`, no SpeechRecognition, so only
30
+ * the blob is produced (no text). */
31
31
  'kai-audio-captured': { blob: Blob };
32
- /** Final transcript the `transcribe` property resolved, OR native
32
+ /** Final transcript: the `transcribe` property resolved, OR native
33
33
  * `SpeechRecognition` produced final text (no `transcribe` set). */
34
34
  'kai-transcription': { text: string };
35
35
  /** Live partial transcript during native recognition (only when `interim` is
36
36
  * set). Fires repeatedly before the final `kai-transcription`. */
37
37
  'kai-transcript-interim': { text: string };
38
- /** Recording started or stopped lets the host drive its own UI (waveform,
38
+ /** Recording started or stopped. Lets the host drive its own UI (waveform,
39
39
  * push-to-talk indicator) in sync with the mic. Fires on real transitions
40
40
  * only (manual click and programmatic start()/stop()), never on mount. */
41
41
  'kai-recording-change': { recording: boolean };
@@ -7,7 +7,7 @@ interface Props extends Record<string, unknown> {
7
7
  /** Speak automatically when `text` is set/changed. */
8
8
  autoplay?: boolean;
9
9
  /**
10
- * TTS model seam the host supplies given text, returns an audio `Blob` to
10
+ * TTS model seam the host supplies: given text, returns an audio `Blob` to
11
11
  * play. This is a **function-valued property** (`el.synthesize = async text =>
12
12
  * blob`); when set, the native `speechSynthesis` path is bypassed. Mirrors
13
13
  * `<kai-voice-input>`'s `transcribe`. A value-returning callback can't be
@@ -20,10 +20,10 @@ interface Props extends Record<string, unknown> {
20
20
 
21
21
  /** Events fired by `<kai-voice-output>`. */
22
22
  interface Events {
23
- /** Playback started or stopped drive your own UI in sync. Fires on real
24
- * transitions only (manual click and programmatic speak()/stop()), never on mount. */
23
+ /** Playback started or stopped. Drive your own UI in sync. Fires on real transitions
24
+ * only (manual click and programmatic speak()/stop()), never on mount. */
25
25
  'kai-speaking-change': { speaking: boolean };
26
- /** The model path (`synthesize`) resolved audio the raw `Blob` before playback. */
26
+ /** The model path (`synthesize`) resolved audio: the raw `Blob` before playback. */
27
27
  'kai-synthesized': { blob: Blob };
28
28
  }
29
29
 
package/src/index.ts CHANGED
@@ -1,3 +1,22 @@
1
+ // The package root entry (".").
2
+ //
3
+ // SCOPE — read before adding an export here.
4
+ // -----------------------------------------
5
+ // Every consumer of `@kitn.ai/ui` pays for this barrel, INCLUDING React/Vue/
6
+ // Svelte consumers who never render a Solid component. It is therefore frozen at
7
+ // the surface that shipped: adding a Solid component here taxes four frameworks
8
+ // to serve one. Closing the 79/79 element coverage gaps on this file grew it
9
+ // 591,359 -> 705,031 bytes (+19.2%), which is what motivated the split.
10
+ //
11
+ // The COMPLETE SolidJS surface — all 79 elements' components plus a `<Name>Props`
12
+ // type for every public component — lives on `@kitn.ai/ui/solid` (src/solid.ts),
13
+ // which is its own build target so only Solid consumers pay for it. `./solid`
14
+ // re-exports this file, so it is a strict superset: anything here is reachable
15
+ // there too, and a Solid consumer only ever needs the one import.
16
+ //
17
+ // Rule of thumb: a NEW Solid component export belongs in src/solid.ts.
18
+ // Type-only exports are free (fully erased by the build) and may live in either.
19
+
1
20
  // Shared types (folded in from @tab-zen/shared)
2
21
  export type { ModelOption, SearchFilters, ConversationScope, ConversationSummary, ConversationGroup } from './types';
3
22
 
@@ -27,7 +46,7 @@ export type {
27
46
  } from './primitives/toast-store';
28
47
  export { Toast, ToastRegion } from './components/toast';
29
48
  export type {
30
- ToastRegionProps, ToastDismissReason, ToastPosition,
49
+ ToastProps, ToastRegionProps, ToastDismissReason, ToastPosition,
31
50
  } from './components/toast';
32
51
 
33
52
  // Card Contract (generative-UI foundation)
@@ -160,32 +179,64 @@ export type { ButtonProps } from './ui/button';
160
179
  export { Avatar } from './ui/avatar';
161
180
  export type { AvatarProps } from './ui/avatar';
162
181
  export { Tooltip } from './ui/tooltip';
182
+ export type { TooltipProps, TooltipController } from './ui/tooltip';
163
183
  export { HoverCard } from './ui/hover-card';
184
+ export type { HoverCardProps, HoverCardController } from './ui/hover-card';
164
185
  export { Collapsible, CollapsibleTrigger, CollapsibleContent } from './ui/collapsible';
186
+ export type {
187
+ CollapsibleProps, CollapsibleTriggerProps, CollapsibleContentProps, CollapsibleController,
188
+ } from './ui/collapsible';
165
189
  export { ScrollArea } from './ui/scroll-area';
190
+ export type { ScrollAreaProps, ScrollOrientation } from './ui/scroll-area';
166
191
  export { Dropdown, DropdownTrigger, DropdownContent, DropdownItem } from './ui/dropdown';
192
+ export type {
193
+ DropdownProps, DropdownTriggerProps, DropdownContentProps, DropdownItemProps, DropdownController,
194
+ } from './ui/dropdown';
167
195
  export { Textarea } from './ui/textarea';
168
196
  export type { TextareaProps } from './ui/textarea';
169
197
  export { Badge } from './ui/badge';
170
198
  export type { BadgeProps } from './ui/badge';
171
199
  export { Separator } from './ui/separator';
200
+ export type { SeparatorProps } from './ui/separator';
172
201
  export { ResizablePanelGroup, ResizablePanel, ResizableHandle, Resizable, normalizeSize, resolveToPx } from './ui/resizable';
173
202
  export type { ResizablePanelGroupProps, ResizablePanelProps, ResizableHandleProps, ResizableProps, SizeValue } from './ui/resizable';
174
203
  export { Skeleton } from './ui/skeleton';
204
+ export type { SkeletonProps, SkeletonVariant } from './ui/skeleton';
175
205
  export { FileTree, buildFileTree } from './components/file-tree';
176
206
  export type {
177
207
  FileTreeProps, FileTreeFile, FileTreeNode, FileTreeFolderNode, FileTreeFileNode,
178
208
  } from './components/file-tree';
179
209
  export { Artifact } from './components/artifact';
180
210
  export type { ArtifactProps, ArtifactFile, ArtifactTab } from './components/artifact';
211
+ export { ArtifactCard, DEFAULT_ARTIFACT_CARD_HEIGHT } from './components/artifact-card';
212
+ // `ArtifactCardFile` is the SAME declaration `FileTreeFile` and `ArtifactFile`
213
+ // alias, authored in primitives/card-data-types.ts because `ArtifactCardData.files`
214
+ // reaches it and that module has to stay resolvable from a Node/no-DOM project.
215
+ // It is exported here under its authored name because that is the name the
216
+ // generated element metadata records for `kai-artifact.files` / `kai-file-tree.files`,
217
+ // and tests/elements/prop-types-exported.ts requires every named prop type to be
218
+ // importable from this entry. The two aliases stay exported above, unchanged.
219
+ export type {
220
+ ArtifactCardProps,
221
+ ArtifactCardData,
222
+ ArtifactCardEnvelope,
223
+ ArtifactCardFile,
224
+ ArtifactCardTab,
225
+ } from './components/artifact-card';
181
226
 
182
227
  // Layer 3: AI/Feature Components
183
228
  export {
184
229
  ChatContainer, ChatContainerRoot, ChatContainerContent, ChatContainerScrollAnchor,
185
230
  useChatContainer,
186
231
  } from './components/chat-container';
187
- export { Message, MessageAvatar, MessageContent, MessageActions, MessageAction, MessageCopyButton } from './components/message';
188
- export type { MessageCopyButtonProps } from './components/message';
232
+ export type {
233
+ ChatContainerProps, ChatContainerRootProps, ChatContainerContentProps, ChatContainerScrollAnchorProps,
234
+ } from './components/chat-container';
235
+ export { Message, MessageAvatar, MessageContent, MessageActions, MessageAction, MessageCopyButton, MessageBody } from './components/message';
236
+ export type {
237
+ MessageProps, MessageAvatarProps, MessageContentProps, MessageActionsProps,
238
+ MessageActionProps, MessageCopyButtonProps, MessageBodyProps,
239
+ } from './components/message';
189
240
  export { ResponseCompare, useResolved } from './components/response-compare';
190
241
  export type { ResponseCompareProps, CompareLayout, ResolvedController } from './components/response-compare';
191
242
  export {
@@ -201,14 +252,20 @@ export type {
201
252
  CompareSelection,
202
253
  } from './components/response-compare';
203
254
  export { MessageSkills } from './components/message-skills';
204
- export type { Skill as MessageSkill } from './components/message-skills';
255
+ export type { MessageSkillsProps, Skill as MessageSkill } from './components/message-skills';
205
256
  export {
206
257
  PromptInput, PromptInputTextarea, PromptInputActions, PromptInputAction,
207
258
  usePromptInput,
208
259
  } from './components/prompt-input';
260
+ export type {
261
+ PromptInputProps, PromptInputTextareaProps, PromptInputActionsProps, PromptInputActionProps,
262
+ } from './components/prompt-input';
209
263
  export { ResponseStream } from './components/response-stream';
264
+ export type { ResponseStreamProps } from './components/response-stream';
210
265
  export { Markdown } from './components/markdown';
266
+ export type { MarkdownProps } from './components/markdown';
211
267
  export { CodeBlock, CodeBlockCode, CodeBlockGroup } from './components/code-block';
268
+ export type { CodeBlockProps, CodeBlockCodeProps, CodeBlockGroupProps } from './components/code-block';
212
269
  export { Loader } from './components/loader';
213
270
  export type { LoaderVariant, LoaderSize, LoaderProps } from './components/loader';
214
271
  export {
@@ -216,13 +273,26 @@ export {
216
273
  DotsLoader, TypingLoader, WaveLoader, BarsLoader,
217
274
  TerminalLoader, TextBlinkLoader, TextShimmerLoader, TextDotsLoader,
218
275
  } from './components/loader';
219
- export { FeedbackBar, type FeedbackValue, type FeedbackDetail } from './components/feedback-bar';
276
+ export type {
277
+ LoaderShapeProps, LoaderTextProps,
278
+ CircularLoaderProps, ClassicLoaderProps, PulseLoaderProps, PulseDotLoaderProps,
279
+ DotsLoaderProps, TypingLoaderProps, WaveLoaderProps, BarsLoaderProps,
280
+ TerminalLoaderProps, TextBlinkLoaderProps, TextShimmerLoaderProps, TextDotsLoaderProps,
281
+ } from './components/loader';
282
+ export { FeedbackBar, type FeedbackValue, type FeedbackDetail, type FeedbackBarProps } from './components/feedback-bar';
220
283
  export {
221
284
  ChainOfThought, ChainOfThoughtStep, ChainOfThoughtTrigger,
222
285
  ChainOfThoughtContent, ChainOfThoughtItem,
223
286
  } from './components/chain-of-thought';
287
+ export type {
288
+ ChainOfThoughtProps, ChainOfThoughtStepProps, ChainOfThoughtTriggerProps,
289
+ ChainOfThoughtContentProps, ChainOfThoughtItemProps,
290
+ ChainOfThoughtType, ChainOfThoughtStepData, ChainOfThoughtController,
291
+ } from './components/chain-of-thought';
224
292
  export { Source, SourceTrigger, SourceContent, SourceList } from './components/source';
293
+ export type { SourceProps, SourceTriggerProps, SourceContentProps, SourceListProps } from './components/source';
225
294
  export { PromptSuggestion } from './components/prompt-suggestion';
295
+ export type { PromptSuggestionProps } from './components/prompt-suggestion';
226
296
  export {
227
297
  Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent, emptyMediaVariants,
228
298
  } from './components/empty';
@@ -230,7 +300,9 @@ export type {
230
300
  EmptyProps, EmptyHeaderProps, EmptyMediaProps, EmptyTitleProps, EmptyDescriptionProps, EmptyContentProps,
231
301
  } from './components/empty';
232
302
  export { ScrollButton } from './components/scroll-button';
303
+ export type { ScrollButtonProps } from './components/scroll-button';
233
304
  export { TextShimmer } from './components/text-shimmer';
305
+ export type { TextShimmerProps } from './components/text-shimmer';
234
306
  export { Checkpoint, CheckpointIcon, CheckpointTrigger } from './components/checkpoint';
235
307
  export type { CheckpointProps, CheckpointIconProps, CheckpointTriggerProps } from './components/checkpoint';
236
308
  export {
@@ -253,14 +325,29 @@ export type {
253
325
  ContextContentBodyProps,
254
326
  ContextContentFooterProps,
255
327
  ContextUsageRowProps,
328
+ ContextInputUsageProps,
329
+ ContextOutputUsageProps,
330
+ ContextReasoningUsageProps,
331
+ ContextCacheUsageProps,
256
332
  } from './components/context';
257
333
  export { VoiceInput } from './components/voice-input';
334
+ export type { VoiceInputProps, VoiceInputController } from './components/voice-input';
258
335
  export { ConversationList } from './components/conversation-list';
336
+ export type { ConversationListProps, ConversationListController } from './components/conversation-list';
259
337
  export { ConversationItem } from './components/conversation-item';
338
+ export type { ConversationItemProps } from './components/conversation-item';
260
339
  export { ModelSwitcher } from './components/model-switcher';
340
+ export type { ModelSwitcherProps } from './components/model-switcher';
261
341
  export { ChatScopePicker } from './components/chat-scope-picker';
342
+ export type { ChatScopePickerProps } from './components/chat-scope-picker';
262
343
  export { Tool } from './components/tool';
263
344
  export type { ToolPart, ToolProps } from './components/tool';
345
+ // ToolPart.kind's doc comment says "Derive with `classifyTool(type)`", so the
346
+ // function has to be reachable from every entry that surfaces ToolPart. It is
347
+ // total, deterministic and terminates in 'generic', so it is safe public API and
348
+ // genuinely useful to anyone rendering tool calls themselves.
349
+ export { classifyTool } from './components/tool-classify';
350
+ export type { ToolKind } from './components/tool-classify';
264
351
  export { ThinkingBar } from './components/thinking-bar';
265
352
  export type { ThinkingBarProps } from './components/thinking-bar';
266
353
  export { Reasoning, ReasoningTrigger, ReasoningContent } from './components/reasoning';
@@ -283,4 +370,52 @@ export type {
283
370
  } from './components/attachments';
284
371
 
285
372
  // Chat message types — public API for consumers who need to type their own message arrays.
286
- export type { ChatMessage, ChatMessageAction, CustomAction, AvatarData, FeedbackVote } from './elements/chat-types';
373
+ // NOTE: chat-types.ts also exports an unrelated `Source` interface (a citation), and
374
+ // `Source` is already a public component export (./components/source, a citation
375
+ // chip/trigger), so re-exporting both under that name is a duplicate-identifier error.
376
+ // The citation type therefore ships under its alias `MessageSource`, which is also the
377
+ // argument type of the public `AssistantStream.addSource(source)`.
378
+ export type {
379
+ ChatMessage, ChatMessageAction, CustomAction, AvatarData, FeedbackVote, MessagePart,
380
+ MessageSource, RawOrigin,
381
+ } from './elements/chat-types';
382
+
383
+ // Composer document model. This belongs on "." rather than "./solid" because it
384
+ // is part of the ELEMENT contract, not the Solid-only surface: `ComposerDoc` is
385
+ // the non-string half of `kai-prompt-input` / `kai-composer` / `kai-default-input`'s
386
+ // `value` property, and `doc` + `entities` on their `kai-submit` /
387
+ // `kai-value-change` details. The shipped prop docs name `ComposerDoc` by name,
388
+ // so a React or Vue consumer reading them has to be able to import it. Type-only,
389
+ // so it is erased by the build and costs the root barrel nothing.
390
+ export type { ComposerDoc, Segment, EntityRef } from './primitives/composer-model';
391
+
392
+ // ---------------------------------------------------------------------------
393
+ // Named types for the remaining kai-* array/object PROPERTIES.
394
+ //
395
+ // Same rationale as `ComposerDoc` above, applied to the whole class instead of
396
+ // one instance: the generated `./elements` declarations and React wrappers expand
397
+ // every prop type structurally (deliberately — see the `IMPORTS = {}` note in
398
+ // scripts/gen-element-api.mjs), so a consumer who wants to NAME the shape had to
399
+ // write `NonNullable<KaiPromptInputElementProps['triggers']>`. Every element-prop
400
+ // type that has a name in source is now reachable from "." — the entry a React /
401
+ // Vue / Svelte / vanilla consumer imports — not only from "./solid".
402
+ //
403
+ // Type-only, so the root barrel pays nothing at runtime.
404
+ // Guarded by tests/elements/prop-types-exported.test.ts, which re-derives the
405
+ // list from the facades with the TS checker and fails on a new unexported one.
406
+ // ---------------------------------------------------------------------------
407
+ export type { TriggerDef, TriggerItem } from './components/composer';
408
+ export type { ChatThreadContextUsage } from './components/chat-thread';
409
+ export type { Skill } from './components/message-skills';
410
+ export type { AgentStatus } from './ui/agent-card';
411
+ export type { KaiNavItem } from './ui/nav';
412
+ export type { KaiTabItem } from './ui/tabs';
413
+ export type { PaneStatus } from './ui/pane';
414
+ export type { PaneTab } from './ui/pane-group';
415
+ export type {
416
+ KaiCommandItem, KaiContextUsage, KaiMenuItem, KaiSegmentedOption, KaiSourceItem,
417
+ } from './elements/element-data-types';
418
+ // `kai-audio-visualizer.shader` takes a ShaderSpec. The element arrived from main
419
+ // after this block was written, and prop-types-exported.test.ts caught it, which
420
+ // is the point of deriving that list from the facades rather than maintaining it.
421
+ export type { ShaderSpec } from './components/audio-visualizer';
@@ -0,0 +1,63 @@
1
+ // src/primitives/card-component-types.ts
2
+ // `CardEnvelope.type` -> the Solid component that renders it, as a TYPE.
3
+ //
4
+ // TYPES ONLY, AND THAT IS THE WHOLE FILE. `BUILTIN_CARD_COMPONENTS` and
5
+ // `mergeCardComponents` stay in card-registry.tsx and cannot follow them here: they
6
+ // ARE JSX. So this is not the same split card-tags.ts made — that one moved data and
7
+ // its type; this one moves only the type, because the value half has nowhere else to
8
+ // go. Do not try to "finish" the symmetry by dragging the component map over.
9
+ //
10
+ // WHY THE TYPES ARE ALONE IN A `.ts`
11
+ // ----------------------------------
12
+ // The same reason, one layer along, that card-tags.ts exists — read that file's header
13
+ // first; this is the second instance of its problem, not a new one.
14
+ //
15
+ // `@kitn.ai/ui/schemas` is the server-safe entry, and src/schemas/registry.ts declares
16
+ // `CustomCardSpec.component` and `CardRegistry.components` in terms of
17
+ // `CardComponentMap`. That is a TYPE import and erases at runtime, but a type import
18
+ // still has to RESOLVE, and while these two types lived in card-registry.tsx it
19
+ // resolved to a `.tsx`. tsconfig.mcp.json has no `jsx` on purpose, so the `kai` MCP's
20
+ // typecheck pass reported, on any tree that had not been built:
21
+ //
22
+ // src/schemas/registry.ts(61,51): error TS6142: Module '../primitives/card-registry'
23
+ // was resolved to '.../card-registry.tsx', but '--jsx' is not set.
24
+ //
25
+ // Exactly one error, and the last one standing on an unbuilt tree. Moving the two type
26
+ // aliases into this file takes that pass to 0. Measured on this tree, both directions.
27
+ //
28
+ // Relaxing tsconfig.mcp.json instead is not an option, and that is measured too, not
29
+ // recalled: giving that project `jsx: "preserve"` + `jsxImportSource: "solid-js"` —
30
+ // the settings the main tsconfig.json actually uses — takes it from 1 error to 130,
31
+ // almost all `TS2304: Cannot find name 'HTMLDivElement' / 'window'`, because a `jsx`
32
+ // setting drags the whole Solid component tree into a Node-only, `lib: ["ESNext"]`
33
+ // pass. (`jsx: "preserve"` with no import source is worse still: 838.) card-tags.ts
34
+ // records 1364 for the broader case. The figures differ because the reachable set
35
+ // differs; the conclusion does not. The Node/no-DOM boundary is load-bearing.
36
+ //
37
+ // `import type { Component } from 'solid-js'` below does NOT reintroduce the problem
38
+ // it just solved. Type-importing from solid-js resolves to a `.d.ts`, and a
39
+ // declaration file needs no `jsx` to be read; `skipLibCheck` covers what is inside it.
40
+ // It is resolving a `.tsx` SOURCE file that TS6142 objects to, and this file resolves
41
+ // none.
42
+ //
43
+ // WHAT THIS SPLIT DOES NOT DO
44
+ // ---------------------------
45
+ // It changes nothing at runtime, and must not be sold as if it did. This module is
46
+ // types only, so it compiles to nothing and there is no emitted module to compare:
47
+ // `verify:ssr` and `verify:schemas` read the BUILT entry and cannot tell the two
48
+ // arrangements apart even in principle. card-tags.ts records the same finding for its
49
+ // own case from the harder direction, where there WAS a bundle to diff and it came out
50
+ // byte-identical. The boundary this file defends is a compile-time one. The
51
+ // discriminating check is `tsc --noEmit -p tsconfig.mcp.json` on an UNBUILT tree, and
52
+ // nothing else is evidence for it.
53
+
54
+ import type { Component } from 'solid-js';
55
+ import type { CardEnvelope, CardHost } from './card-contract';
56
+
57
+ /** Solid renderer for one envelope. `host` is the resolved CardHost so each wrapper
58
+ * can bridge its card's emit convention (form/confirm/tasks take `host`;
59
+ * link/embed take `onEmit`). */
60
+ export type CardComponent = Component<{ envelope: CardEnvelope; host?: CardHost }>;
61
+
62
+ /** Solid layer: envelope type → the component that draws it. */
63
+ export type CardComponentMap = Record<string, CardComponent>;