@kitn.ai/ui 0.28.0 → 0.30.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 (615) hide show
  1. package/README.md +11 -7
  2. package/dist/{Icon-DObhsRtm.js → Icon-BzBET3E-.js} +1 -1
  3. package/dist/{action-icons-CcgNN2oT.js → action-icons-DaW2pU6m.js} +1 -1
  4. package/dist/agent-tooling/construct/public.d.ts +15 -0
  5. package/dist/agent-tooling/construct/schema.d.ts +111 -0
  6. package/dist/arrow-down-D783iMJj.js +1 -0
  7. package/dist/arrow-left-0VLM5kyg.js +1 -0
  8. package/dist/artifact-DGjzHYUT.js +1 -0
  9. package/dist/{attachments-Qr4kg-2b.js → attachments-YvXHlg88.js} +1 -1
  10. package/dist/{audio-visualizer-DToYdfSc.js → audio-visualizer-9lz5IHsL.js} +1 -1
  11. package/dist/{badge-CdEu_jn2.js → badge-Dh_vp8A5.js} +1 -1
  12. package/dist/{bell-DQAAOpDz.js → bell-CT7_WUwS.js} +1 -1
  13. package/dist/{button-DkuOnGLy.js → button-C_3te6fm.js} +1 -1
  14. package/dist/{card-renderer-Jx70m6_l.js → card-renderer-DZVaGH2e.js} +1 -1
  15. package/dist/check-CiEOVnEN.js +1 -0
  16. package/dist/{checkbox-D7iRB3nL.js → checkbox-Bu2T2e0U.js} +1 -1
  17. package/dist/{checkbox-group-B2_rpoPM.js → checkbox-group-BiryEXPQ.js} +1 -1
  18. package/dist/chevron-down-CSobuZRG.js +1 -0
  19. package/dist/chevron-right-DR9ZAP-2.js +1 -0
  20. package/dist/{choice-card-m0BYqqOK.js → choice-card-CM6IjkmL.js} +1 -1
  21. package/dist/circle-BC66EYF7.js +1 -0
  22. package/dist/circle-check-BqmahW0O.js +1 -0
  23. package/dist/{circle-x-BPG0iPst.js → circle-x-Bk-dA5Wf.js} +1 -1
  24. package/dist/{code-block-ClMLKb7C.js → code-block-B26t-Q7q.js} +1 -1
  25. package/dist/{collapsible-B4DlWicL.js → collapsible-Bhc636Cf.js} +1 -1
  26. package/dist/components/builder-composer-triggers.d.ts +62 -0
  27. package/dist/components/builder-layout.d.ts +54 -0
  28. package/dist/components/builder-message-actions.d.ts +72 -0
  29. package/dist/components/builder-panel.d.ts +189 -0
  30. package/dist/components/builder-preview.d.ts +11 -0
  31. package/dist/components/builder-shell-controls.d.ts +69 -0
  32. package/dist/components/builder-skeleton.d.ts +58 -0
  33. package/dist/components/builder-start.d.ts +75 -0
  34. package/dist/components/builder-workspace-variants.d.ts +23 -0
  35. package/dist/components/captions.d.ts +66 -0
  36. package/dist/{composer-sQ0HcvyG.js → composer-DMI85B6j.js} +1 -1
  37. package/dist/{confirm-card-rQWDQsnC.js → confirm-card-B0YIAwXp.js} +1 -1
  38. package/dist/construct-cli.es.js +3 -3
  39. package/dist/construct.d.ts +5 -0
  40. package/dist/construct.js +327 -0
  41. package/dist/{context-0kg4ZX1J.js → context-DWgfhqWp.js} +1 -1
  42. package/dist/controllable-BagRpyHv.js +1 -0
  43. package/dist/{conversation-item-BxwQLaFJ.js → conversation-item-BsOsVGmT.js} +1 -1
  44. package/dist/{conversation-list-BCfGN1JU.js → conversation-list-aX3Vtc7L.js} +1 -1
  45. package/dist/{copy-n9u9rqpi.js → copy-BmEwsNhJ.js} +1 -1
  46. package/dist/core-C8fzo39E.js +1 -12
  47. package/dist/{create-tween-uPkArjIG.js → create-tween-CNOAU3Fx.js} +1 -1
  48. package/dist/{create-tween-C-q-JCM-.js → create-tween-WfqiENls.js} +1 -1
  49. package/dist/{create-tween-CRrJXxBd.js → create-tween-wlFtW9Kh.js} +1 -1
  50. package/dist/{create-tween-DZ3RRDHD.js → create-tween-zt79ba32.js} +1 -1
  51. package/dist/{default-input-CaMrJkgH.js → default-input-DMV5Eaze.js} +1 -1
  52. package/dist/define-CI0y3eE4.js +1 -0
  53. package/dist/define.js +40 -40
  54. package/dist/define.server.js +45 -45
  55. package/dist/{disclosure-WUImBbDv.js → disclosure-NnACBxsC.js} +1 -1
  56. package/dist/{dropdown-wZVeJOMd.js → dropdown-DT7G0RGR.js} +1 -1
  57. package/dist/elements/agent-card.js +1 -1
  58. package/dist/elements/artifact.js +1 -1
  59. package/dist/elements/attachments.js +1 -1
  60. package/dist/elements/audio-visualizer.js +1 -1
  61. package/dist/elements/avatar.js +1 -1
  62. package/dist/elements/badge.js +1 -1
  63. package/dist/elements/button.js +1 -1
  64. package/dist/elements/card.js +1 -1
  65. package/dist/elements/cards.js +1 -1
  66. package/dist/elements/chain-of-thought.js +1 -1
  67. package/dist/elements/chat-scope-picker.js +1 -1
  68. package/dist/elements/chat-workspace.js +1 -1
  69. package/dist/elements/chat.js +1 -1
  70. package/dist/elements/checkbox-group.js +1 -1
  71. package/dist/elements/checkbox.js +1 -1
  72. package/dist/elements/checkpoint.js +1 -1
  73. package/dist/elements/choice.js +1 -1
  74. package/dist/elements/coachmark.js +1 -1
  75. package/dist/elements/code-block.js +1 -1
  76. package/dist/elements/command.js +1 -1
  77. package/dist/elements/compare.js +1 -1
  78. package/dist/elements/composer.js +1 -1
  79. package/dist/elements/confirm-card.js +1 -1
  80. package/dist/elements/context-meter.js +1 -1
  81. package/dist/elements/conversation-item.js +1 -1
  82. package/dist/elements/conversation-list.js +1 -1
  83. package/dist/elements/dialog.js +1 -1
  84. package/dist/elements/dock.js +1 -1
  85. package/dist/elements/dropdown.js +1 -1
  86. package/dist/elements/editable-label.js +1 -1
  87. package/dist/elements/embed.js +1 -1
  88. package/dist/elements/empty.js +1 -1
  89. package/dist/elements/feedback-bar.js +1 -1
  90. package/dist/elements/file-tree.js +1 -1
  91. package/dist/elements/file-upload.js +1 -1
  92. package/dist/elements/form.js +1 -1
  93. package/dist/elements/hover-card.js +1 -1
  94. package/dist/elements/icon.js +1 -1
  95. package/dist/elements/image.js +1 -1
  96. package/dist/elements/input.js +1 -1
  97. package/dist/elements/kbd.js +1 -1
  98. package/dist/elements/link-preview.js +1 -1
  99. package/dist/elements/loader.js +1 -1
  100. package/dist/elements/markdown.js +1 -1
  101. package/dist/elements/menu.js +1 -1
  102. package/dist/elements/message-skills.js +1 -1
  103. package/dist/elements/message.js +1 -1
  104. package/dist/elements/model-switcher.js +1 -1
  105. package/dist/elements/nav.js +1 -1
  106. package/dist/elements/notice.js +1 -1
  107. package/dist/elements/pane-grid.js +1 -1
  108. package/dist/elements/pane-group.js +1 -1
  109. package/dist/elements/pane.js +1 -1
  110. package/dist/elements/popover.js +1 -1
  111. package/dist/elements/progress-bar.js +1 -1
  112. package/dist/elements/prompt-dock.js +1 -1
  113. package/dist/elements/prompt-input.js +1 -1
  114. package/dist/elements/prompt-suggestions.js +1 -1
  115. package/dist/elements/radio-group.js +1 -1
  116. package/dist/elements/reasoning.js +1 -1
  117. package/dist/elements/remote.js +1 -1
  118. package/dist/elements/resizable.js +1 -1
  119. package/dist/elements/response-stream.js +1 -1
  120. package/dist/elements/screen.js +1 -1
  121. package/dist/elements/scroll-area.js +1 -1
  122. package/dist/elements/scroll-button.js +1 -1
  123. package/dist/elements/search.js +1 -1
  124. package/dist/elements/segmented.js +1 -1
  125. package/dist/elements/select.js +1 -1
  126. package/dist/elements/separator.js +1 -1
  127. package/dist/elements/setting-item.js +1 -1
  128. package/dist/elements/settings-group.js +1 -1
  129. package/dist/elements/skeleton.js +1 -1
  130. package/dist/elements/slider.js +1 -1
  131. package/dist/elements/source.js +1 -1
  132. package/dist/elements/status.js +1 -1
  133. package/dist/elements/switch.js +1 -1
  134. package/dist/elements/tabs.js +1 -1
  135. package/dist/elements/tasks.js +1 -1
  136. package/dist/elements/text-shimmer.js +1 -1
  137. package/dist/elements/thinking-bar.js +1 -1
  138. package/dist/elements/thread.js +1 -1
  139. package/dist/elements/toast.js +1 -1
  140. package/dist/elements/tool.js +1 -1
  141. package/dist/elements/tooltip.js +1 -1
  142. package/dist/elements/voice-input.js +1 -1
  143. package/dist/elements/voice-output.js +1 -1
  144. package/dist/{ellipsis-CbOpJnU3.js → ellipsis-6pJ7SxYT.js} +1 -1
  145. package/dist/{embed-CrfjkbUG.js → embed-BMje-nxj.js} +1 -1
  146. package/dist/engine-javascript-C1x7zo1_.js +1 -141
  147. package/dist/{external-link-ByXAwBBQ.js → external-link-Beh9DKeR.js} +1 -1
  148. package/dist/{file-text-DMib2qwt.js → file-text-D1GPfZ8Q.js} +1 -1
  149. package/dist/{file-tree-CJqM2aP7.js → file-tree-Dwj2lqg-.js} +1 -1
  150. package/dist/{folder-_BAb929C.js → folder-b6D8x1DY.js} +1 -1
  151. package/dist/{form-DSZgZQZk.js → form-DWgdxDXu.js} +1 -1
  152. package/dist/{hover-card-BQbul9eq.js → hover-card-CWRkqm40.js} +1 -1
  153. package/dist/{icon-CdcfRhYI.js → icon-CL0jdhsf.js} +1 -1
  154. package/dist/index.js +1741 -1725
  155. package/dist/index.server.js +1582 -1566
  156. package/dist/{info-DsFjGuI_.js → info-0cOUherQ.js} +1 -1
  157. package/dist/{input-DKbmkMos.js → input-BH6Ru91Q.js} +1 -1
  158. package/dist/kai.es.js +1 -1
  159. package/dist/{kbd-PvdGhX4s.js → kbd-DRAnVtNX.js} +1 -1
  160. package/dist/{link-zF8PzWfF.js → link-Dlr0vssB.js} +1 -1
  161. package/dist/{link-preview-DbM1866N.js → link-preview-DODgRyV9.js} +1 -1
  162. package/dist/loader-KvJB6NrT.js +1 -0
  163. package/dist/{markdown-LMvmAyBk.js → markdown-DX9tuJVj.js} +1 -1
  164. package/dist/mcp.es.js +9 -5
  165. package/dist/{message-BYZECyek.js → message-BqQ7Ot5q.js} +1 -1
  166. package/dist/{message-BSsgvHvf.js → message-DkaGfBd8.js} +1 -1
  167. package/dist/message-circle-BPpp5QKv.js +1 -0
  168. package/dist/message-square-BLbsd9BJ.js +1 -0
  169. package/dist/{minimize-2-BQRoBV1V.js → minimize-2-CyOHJwcN.js} +1 -1
  170. package/dist/{model-switcher-CMpCOYcB.js → model-switcher-0hrKDiK2.js} +1 -1
  171. package/dist/{overlay-Cb-MkyDa.js → overlay-DBMFXie6.js} +1 -1
  172. package/dist/{panel-right-i8warFxT.js → panel-right-t8SWJL6e.js} +1 -1
  173. package/dist/{paperclip-ByY3UVO6.js → paperclip-CdzuOjbU.js} +1 -1
  174. package/dist/play-BXy1u7rW.js +1 -0
  175. package/dist/primitives/use-auto-resize.d.ts +11 -0
  176. package/dist/{progress-bar-jVAHvMUf.js → progress-bar-CiBtxMWT.js} +1 -1
  177. package/dist/{prompt-suggestion-CD-qtNgC.js → prompt-suggestion-I_DHP21i.js} +1 -1
  178. package/dist/{radio-BsoBMhkF.js → radio-C_p3n39l.js} +1 -1
  179. package/dist/{reasoning-4kBPtlTx.js → reasoning-BDwy_tIe.js} +1 -1
  180. package/dist/register-impl-DvEnhIxx.js +424 -0
  181. package/dist/{resizable-uPmY9VY-.js → resizable-SYC-fStM.js} +1 -1
  182. package/dist/{rotate-ccw-B2xn93py.js → rotate-ccw-B1nwmwuY.js} +1 -1
  183. package/dist/{rotate-cw-CMVLoCyH.js → rotate-cw-CLAnBcm1.js} +1 -1
  184. package/dist/{scroll-area-BqLUo8ZZ.js → scroll-area-zRyXoLhI.js} +1 -1
  185. package/dist/{scroll-button-DslXiJyL.js → scroll-button-jzrbYCG9.js} +1 -1
  186. package/dist/{select-2cLRtPGT.js → select-DM-0nEe0.js} +1 -1
  187. package/dist/{separator-BWQtNJcM.js → separator-BToOOoOt.js} +1 -1
  188. package/dist/{settings-BBR63jLg.js → settings-PaGo_S4U.js} +1 -1
  189. package/dist/{settings-group-B2ciy-Iw.js → settings-group-BFXGIfXq.js} +1 -1
  190. package/dist/{skeleton-CkHI-HgC.js → skeleton-DYpmFnnm.js} +1 -1
  191. package/dist/{slider-DDR9U-i0.js → slider-ebutAmkQ.js} +1 -1
  192. package/dist/{solid-DruVOXnf.js → solid-15v_3WVL.js} +3563 -3412
  193. package/dist/{solid-BzCFdL25.js → solid-5P-otgdi.js} +4502 -4296
  194. package/dist/solid.d.ts +6 -0
  195. package/dist/solid.js +259 -254
  196. package/dist/solid.server.js +259 -254
  197. package/dist/{source-GEnFF528.js → source-c1gpRl9h.js} +1 -1
  198. package/dist/{star-CilHq8GP.js → star-pcV_3LqF.js} +1 -1
  199. package/dist/{store-Ciyk6eZG.js → store-CSgbFFCg.js} +1 -1
  200. package/dist/{switch-KkeQIbuH.js → switch-Bh2OdLV2.js} +1 -1
  201. package/dist/{tasks-card-BrN4bggJ.js → tasks-card-CbqQAn2S.js} +1 -1
  202. package/dist/text-shimmer-BSzgEnDH.js +1 -0
  203. package/dist/textarea-DrYNt_0z.js +1 -0
  204. package/dist/theme.tokens.css +22 -21
  205. package/dist/{thumbs-up-CsT9Wzb9.js → thumbs-up-BL3-NenK.js} +1 -1
  206. package/dist/{toast-store-tgK6MuMv.js → toast-store-DkOlYczt.js} +1 -1
  207. package/dist/{tool-DzUjIBT8.js → tool-CeIWUVUe.js} +1 -1
  208. package/dist/{tooltip-Bkkg_4t0.js → tooltip-GA-nmg06.js} +1 -1
  209. package/dist/{trash-2-jBKxjGGQ.js → trash-2-CT66QWlm.js} +1 -1
  210. package/dist/{triangle-alert-DlQ68ppf.js → triangle-alert-CeHLWxhD.js} +1 -1
  211. package/dist/ui/color-field.d.ts +48 -0
  212. package/dist/ui/textarea.d.ts +4 -0
  213. package/dist/ui/toggle-chip.d.ts +40 -0
  214. package/dist/{upload-TcAHXv9W.js → upload-9Csb0F0J.js} +1 -1
  215. package/dist/{use-card-resolution-DaZqAdWf.js → use-card-resolution-Zg0a08Z-.js} +1 -1
  216. package/dist/{variant-aurora-DbW_OWL2.js → variant-aurora-4VBQHIKV.js} +1 -1
  217. package/dist/{variant-aurora-CNmfHhcx.js → variant-aurora-DBeCAQNk.js} +2 -2
  218. package/dist/{variant-aurora-D6GsdTPA.js → variant-aurora-FzHVXHby.js} +2 -2
  219. package/dist/{variant-aurora-BhLuYxJR.js → variant-aurora-LE3fqxgw.js} +1 -1
  220. package/dist/{variant-custom-BvYHR62b.js → variant-custom-AFRGcOBS.js} +1 -1
  221. package/dist/{variant-custom-DV2x254s.js → variant-custom-BQkNuPpE.js} +2 -2
  222. package/dist/{variant-custom-BRvaNHSi.js → variant-custom-DI5R0rln.js} +1 -1
  223. package/dist/{variant-custom-DMTrEO5w.js → variant-custom-WWnrrRHS.js} +2 -2
  224. package/dist/{variant-wave-CyBueXj9.js → variant-wave-DUCbH5oI.js} +2 -2
  225. package/dist/{variant-wave-BNMGrDfj.js → variant-wave-DuQV7DhQ.js} +2 -2
  226. package/dist/{variant-wave-BpDd8t3Z.js → variant-wave-nSI2sfII.js} +1 -1
  227. package/dist/{variant-wave-sp-qwsdI.js → variant-wave-wTP5v_jU.js} +1 -1
  228. package/dist/x-eiO9V6J6.js +1 -0
  229. package/{src/elements/styles.css → kit-base.css} +27 -44
  230. package/package.json +32 -17
  231. package/solid.css +33 -0
  232. package/theme.css +39 -23
  233. package/bin/route.test.js +0 -58
  234. package/dist/arrow-down-CjRU3JgV.js +0 -1
  235. package/dist/arrow-left-Bnpb1UEW.js +0 -1
  236. package/dist/artifact-Bwt7OgcR.js +0 -1
  237. package/dist/check-njkVdZu2.js +0 -1
  238. package/dist/chevron-down-B72s6PXR.js +0 -1
  239. package/dist/chevron-right-BatuHzUm.js +0 -1
  240. package/dist/circle-check-B62pODB3.js +0 -1
  241. package/dist/circle-zx0ByzY9.js +0 -1
  242. package/dist/controllable-CnGpMF6r.js +0 -1
  243. package/dist/define-By-uL588.js +0 -1
  244. package/dist/loader-BM4CEz4G.js +0 -1
  245. package/dist/message-circle-DruwObfX.js +0 -1
  246. package/dist/message-square-BG6q6mlm.js +0 -1
  247. package/dist/play-BvKKq3fX.js +0 -1
  248. package/dist/register-impl-B1hLkrI8.js +0 -424
  249. package/dist/text-shimmer-Dcj1MHuq.js +0 -1
  250. package/dist/textarea-Dpvbngbg.js +0 -1
  251. package/dist/x-Z5UntkIJ.js +0 -1
  252. package/src/agent-tooling/README.md +0 -192
  253. package/src/agent-tooling/archetypes.ts +0 -205
  254. package/src/agent-tooling/catalog/README.md +0 -676
  255. package/src/agent-tooling/catalog/catalog-types.ts +0 -231
  256. package/src/agent-tooling/catalog/fabrications.ts +0 -96
  257. package/src/agent-tooling/catalog/invariants.ts +0 -284
  258. package/src/agent-tooling/catalog/labs-titles.ts +0 -114
  259. package/src/agent-tooling/catalog/scenarios.ts +0 -87
  260. package/src/agent-tooling/catalog/surfaces.ts +0 -347
  261. package/src/agent-tooling/construct/cli-entry.ts +0 -8
  262. package/src/agent-tooling/construct/cli.ts +0 -147
  263. package/src/agent-tooling/construct/codegen.ts +0 -1635
  264. package/src/agent-tooling/construct/construct.v1.schema.json +0 -319
  265. package/src/agent-tooling/construct/dev.ts +0 -148
  266. package/src/agent-tooling/construct/fixtures/demo-widget.construct.json +0 -7
  267. package/src/agent-tooling/construct/fixtures/ops-console.construct.json +0 -44
  268. package/src/agent-tooling/construct/fixtures/owner-widget.construct.json +0 -32
  269. package/src/agent-tooling/construct/schema.ts +0 -452
  270. package/src/agent-tooling/integrations/anthropic.ts +0 -442
  271. package/src/agent-tooling/integrations/cloudflare.ts +0 -218
  272. package/src/agent-tooling/integrations/langgraph.ts +0 -133
  273. package/src/agent-tooling/integrations/mastra.ts +0 -182
  274. package/src/agent-tooling/integrations/mock.ts +0 -148
  275. package/src/agent-tooling/integrations/ollama.ts +0 -97
  276. package/src/agent-tooling/integrations/openai.ts +0 -95
  277. package/src/agent-tooling/integrations/openrouter.ts +0 -82
  278. package/src/agent-tooling/integrations/pi.ts +0 -176
  279. package/src/agent-tooling/integrations/pydantic-ai.ts +0 -108
  280. package/src/agent-tooling/integrations/vercel-ai-sdk.ts +0 -398
  281. package/src/agent-tooling/mcp/css-raw.d.ts +0 -12
  282. package/src/agent-tooling/mcp/manifest.ts +0 -422
  283. package/src/agent-tooling/mcp/server.ts +0 -116
  284. package/src/agent-tooling/mcp/stdio.ts +0 -18
  285. package/src/agent-tooling/mcp/tools/construct.ts +0 -130
  286. package/src/agent-tooling/mcp/tools/debug.ts +0 -621
  287. package/src/agent-tooling/mcp/tools/reference.ts +0 -980
  288. package/src/agent-tooling/mcp/tools/scaffold.ts +0 -6708
  289. package/src/agent-tooling/mcp/tools/theme.ts +0 -456
  290. package/src/agent-tooling/mcp/tools/types.ts +0 -14
  291. package/src/agent-tooling/mcp/validate-args.ts +0 -141
  292. package/src/agent-tooling/recipes/composed-thread.ts +0 -714
  293. package/src/agent-tooling/recipes/index.ts +0 -22
  294. package/src/agent-tooling/recipes/types.ts +0 -32
  295. package/src/agent-tooling/registry.ts +0 -132
  296. package/src/agent-tooling/route-emit.ts +0 -305
  297. package/src/agent-tooling/types.ts +0 -390
  298. package/src/components/artifact-card.tsx +0 -120
  299. package/src/components/artifact.tsx +0 -914
  300. package/src/components/attachment-types.ts +0 -66
  301. package/src/components/attachments.tsx +0 -536
  302. package/src/components/audio-visualizer/audio-visualizer.voice-fixture.ts +0 -257
  303. package/src/components/audio-visualizer/aurora.glsl.ts +0 -330
  304. package/src/components/audio-visualizer/fit-scale.ts +0 -112
  305. package/src/components/audio-visualizer/index.tsx +0 -528
  306. package/src/components/audio-visualizer/labs/lab-choreography.ts +0 -187
  307. package/src/components/audio-visualizer/labs/lab-shaders.ts +0 -363
  308. package/src/components/audio-visualizer/labs/lab-visualizer.tsx +0 -102
  309. package/src/components/audio-visualizer/shader-canvas.tsx +0 -876
  310. package/src/components/audio-visualizer/sizes.ts +0 -54
  311. package/src/components/audio-visualizer/variant-aurora.tsx +0 -305
  312. package/src/components/audio-visualizer/variant-bar.tsx +0 -175
  313. package/src/components/audio-visualizer/variant-custom.tsx +0 -344
  314. package/src/components/audio-visualizer/variant-grid.tsx +0 -175
  315. package/src/components/audio-visualizer/variant-radial.tsx +0 -163
  316. package/src/components/audio-visualizer/variant-wave.tsx +0 -130
  317. package/src/components/audio-visualizer/wave.glsl.ts +0 -130
  318. package/src/components/card-fallback.tsx +0 -60
  319. package/src/components/card-renderer.tsx +0 -220
  320. package/src/components/card.tsx +0 -212
  321. package/src/components/chain-of-thought.tsx +0 -348
  322. package/src/components/chat-container.tsx +0 -89
  323. package/src/components/chat-scope-picker.tsx +0 -57
  324. package/src/components/chat-thread.tsx +0 -1014
  325. package/src/components/checkpoint.tsx +0 -88
  326. package/src/components/choice-card.tsx +0 -743
  327. package/src/components/coachmark.tsx +0 -249
  328. package/src/components/code-block.tsx +0 -181
  329. package/src/components/composer-dom.ts +0 -159
  330. package/src/components/composer-highlight.ts +0 -242
  331. package/src/components/composer-history.ts +0 -82
  332. package/src/components/composer.tsx +0 -1075
  333. package/src/components/confirm-card.tsx +0 -402
  334. package/src/components/context.tsx +0 -377
  335. package/src/components/conversation-item.tsx +0 -241
  336. package/src/components/conversation-list.tsx +0 -429
  337. package/src/components/conversation-panel.tsx +0 -118
  338. package/src/components/dismissed-stub.tsx +0 -80
  339. package/src/components/embed.tsx +0 -200
  340. package/src/components/empty.tsx +0 -177
  341. package/src/components/feedback-bar.tsx +0 -166
  342. package/src/components/file-tree.tsx +0 -530
  343. package/src/components/file-upload.tsx +0 -167
  344. package/src/components/form-widgets.tsx +0 -525
  345. package/src/components/form.tsx +0 -1296
  346. package/src/components/home-panel.tsx +0 -159
  347. package/src/components/image.tsx +0 -65
  348. package/src/components/link-preview.tsx +0 -195
  349. package/src/components/loader.tsx +0 -367
  350. package/src/components/markdown.tsx +0 -162
  351. package/src/components/message-skills.tsx +0 -40
  352. package/src/components/message.tsx +0 -765
  353. package/src/components/model-switcher.tsx +0 -132
  354. package/src/components/prompt-input.tsx +0 -188
  355. package/src/components/prompt-suggestion.tsx +0 -150
  356. package/src/components/reasoning.tsx +0 -293
  357. package/src/components/response-compare-types.ts +0 -152
  358. package/src/components/response-compare.tsx +0 -455
  359. package/src/components/response-stream.tsx +0 -109
  360. package/src/components/screen.tsx +0 -181
  361. package/src/components/scroll-button.tsx +0 -93
  362. package/src/components/source.tsx +0 -192
  363. package/src/components/tasks-card.tsx +0 -801
  364. package/src/components/text-shimmer.tsx +0 -37
  365. package/src/components/thinking-bar.tsx +0 -50
  366. package/src/components/thread.tsx +0 -228
  367. package/src/components/toast.tsx +0 -503
  368. package/src/components/tool-classify.ts +0 -26
  369. package/src/components/tool-types.ts +0 -49
  370. package/src/components/tool.tsx +0 -190
  371. package/src/components/use-card-resolution.ts +0 -44
  372. package/src/components/voice-input.tsx +0 -222
  373. package/src/components/voice-output.tsx +0 -242
  374. package/src/components/widget-tab-bar.tsx +0 -73
  375. package/src/components/workspace-shell.tsx +0 -285
  376. package/src/diagnostics/hook.ts +0 -352
  377. package/src/diagnostics/index.ts +0 -82
  378. package/src/diagnostics/report-request.ts +0 -296
  379. package/src/elements/agent-card.tsx +0 -67
  380. package/src/elements/artifact.tsx +0 -194
  381. package/src/elements/attachments.tsx +0 -140
  382. package/src/elements/audio-visualizer.tsx +0 -227
  383. package/src/elements/autoloader.ts +0 -89
  384. package/src/elements/avatar.tsx +0 -33
  385. package/src/elements/badge.tsx +0 -32
  386. package/src/elements/button.tsx +0 -149
  387. package/src/elements/card.tsx +0 -133
  388. package/src/elements/cards.tsx +0 -266
  389. package/src/elements/chain-of-thought.tsx +0 -141
  390. package/src/elements/chat-scope-picker.tsx +0 -65
  391. package/src/elements/chat-types.ts +0 -102
  392. package/src/elements/chat-workspace.tsx +0 -188
  393. package/src/elements/chat.tsx +0 -304
  394. package/src/elements/checkbox-group.tsx +0 -164
  395. package/src/elements/checkbox.tsx +0 -134
  396. package/src/elements/checkpoint.tsx +0 -47
  397. package/src/elements/choice.tsx +0 -100
  398. package/src/elements/coachmark.tsx +0 -90
  399. package/src/elements/code-block.tsx +0 -60
  400. package/src/elements/command.tsx +0 -197
  401. package/src/elements/compare.tsx +0 -111
  402. package/src/elements/compiled.css +0 -2
  403. package/src/elements/composer.tsx +0 -162
  404. package/src/elements/confirm-card.tsx +0 -76
  405. package/src/elements/context-meter.tsx +0 -107
  406. package/src/elements/conversation-item.tsx +0 -120
  407. package/src/elements/conversation-list.tsx +0 -203
  408. package/src/elements/css.ts +0 -5
  409. package/src/elements/default-input.tsx +0 -392
  410. package/src/elements/define-entry.ts +0 -12
  411. package/src/elements/define.tsx +0 -563
  412. package/src/elements/diagnostic-events.ts +0 -114
  413. package/src/elements/dialog.tsx +0 -145
  414. package/src/elements/disclosure.ts +0 -95
  415. package/src/elements/dock.tsx +0 -215
  416. package/src/elements/dropdown.tsx +0 -123
  417. package/src/elements/editable-label.tsx +0 -140
  418. package/src/elements/element-data-types.ts +0 -152
  419. package/src/elements/element-diagnostics.ts +0 -392
  420. package/src/elements/element-manifest.json +0 -354
  421. package/src/elements/element-nonscalar.json +0 -187
  422. package/src/elements/element-types.d.ts +0 -4353
  423. package/src/elements/embed.tsx +0 -35
  424. package/src/elements/empty.tsx +0 -29
  425. package/src/elements/feedback-bar.tsx +0 -66
  426. package/src/elements/file-tree.tsx +0 -62
  427. package/src/elements/file-upload.tsx +0 -44
  428. package/src/elements/form.tsx +0 -94
  429. package/src/elements/hover-card.tsx +0 -80
  430. package/src/elements/icon.tsx +0 -41
  431. package/src/elements/image.tsx +0 -32
  432. package/src/elements/input.tsx +0 -492
  433. package/src/elements/kbd.tsx +0 -45
  434. package/src/elements/link-preview.tsx +0 -34
  435. package/src/elements/loader.tsx +0 -25
  436. package/src/elements/markdown.tsx +0 -38
  437. package/src/elements/menu.tsx +0 -241
  438. package/src/elements/message-skills.tsx +0 -83
  439. package/src/elements/message.tsx +0 -361
  440. package/src/elements/model-switcher.tsx +0 -121
  441. package/src/elements/nav.tsx +0 -87
  442. package/src/elements/notice.tsx +0 -53
  443. package/src/elements/pane-grid.tsx +0 -111
  444. package/src/elements/pane-group.tsx +0 -119
  445. package/src/elements/pane.tsx +0 -129
  446. package/src/elements/popover.tsx +0 -81
  447. package/src/elements/progress-bar.tsx +0 -39
  448. package/src/elements/prompt-dock.tsx +0 -82
  449. package/src/elements/prompt-input.tsx +0 -240
  450. package/src/elements/prompt-suggestions.tsx +0 -113
  451. package/src/elements/radio-group.tsx +0 -129
  452. package/src/elements/reasoning.tsx +0 -71
  453. package/src/elements/register-impl.ts +0 -148
  454. package/src/elements/register.ts +0 -76
  455. package/src/elements/remote.tsx +0 -225
  456. package/src/elements/resizable.globals.d.ts +0 -36
  457. package/src/elements/resizable.tsx +0 -704
  458. package/src/elements/response-stream.tsx +0 -40
  459. package/src/elements/screen.tsx +0 -90
  460. package/src/elements/scroll-area.tsx +0 -33
  461. package/src/elements/scroll-button.tsx +0 -179
  462. package/src/elements/search.tsx +0 -185
  463. package/src/elements/segmented.tsx +0 -129
  464. package/src/elements/select.tsx +0 -165
  465. package/src/elements/separator.tsx +0 -36
  466. package/src/elements/setting-item.tsx +0 -50
  467. package/src/elements/settings-group.tsx +0 -37
  468. package/src/elements/skeleton.tsx +0 -45
  469. package/src/elements/slider.tsx +0 -171
  470. package/src/elements/slot-text.ts +0 -73
  471. package/src/elements/slots.ts +0 -787
  472. package/src/elements/source.tsx +0 -126
  473. package/src/elements/status.tsx +0 -42
  474. package/src/elements/switch.tsx +0 -118
  475. package/src/elements/tabs.tsx +0 -95
  476. package/src/elements/tasks.tsx +0 -103
  477. package/src/elements/text-shimmer.tsx +0 -28
  478. package/src/elements/thinking-bar.tsx +0 -43
  479. package/src/elements/thread.tsx +0 -139
  480. package/src/elements/toast.tsx +0 -106
  481. package/src/elements/tool.tsx +0 -78
  482. package/src/elements/tooltip.tsx +0 -85
  483. package/src/elements/validate-messages.ts +0 -76
  484. package/src/elements/voice-input.tsx +0 -100
  485. package/src/elements/voice-output.tsx +0 -82
  486. package/src/index.ts +0 -430
  487. package/src/primitives/audio-bands.ts +0 -174
  488. package/src/primitives/card-component-types.ts +0 -63
  489. package/src/primitives/card-contract.ts +0 -80
  490. package/src/primitives/card-data-types.ts +0 -361
  491. package/src/primitives/card-host.tsx +0 -37
  492. package/src/primitives/card-recovery.ts +0 -160
  493. package/src/primitives/card-registry.tsx +0 -78
  494. package/src/primitives/card-resolution.ts +0 -36
  495. package/src/primitives/card-routing.ts +0 -85
  496. package/src/primitives/card-schemas/artifact.schema.json +0 -92
  497. package/src/primitives/card-schemas/card-envelope.schema.json +0 -14
  498. package/src/primitives/card-schemas/card-event.schema.json +0 -12
  499. package/src/primitives/card-schemas/choice.schema.json +0 -75
  500. package/src/primitives/card-schemas/confirm.schema.json +0 -65
  501. package/src/primitives/card-schemas/embed.schema.json +0 -63
  502. package/src/primitives/card-schemas/form.result.schema.json +0 -7
  503. package/src/primitives/card-schemas/form.schema.json +0 -53
  504. package/src/primitives/card-schemas/link.schema.json +0 -54
  505. package/src/primitives/card-schemas/tasks.result.schema.json +0 -16
  506. package/src/primitives/card-schemas/tasks.schema.json +0 -83
  507. package/src/primitives/card-tags.ts +0 -61
  508. package/src/primitives/card-validate-cards.ts +0 -255
  509. package/src/primitives/card-validate-schemas.ts +0 -58
  510. package/src/primitives/card-validate.ts +0 -131
  511. package/src/primitives/chat-config.tsx +0 -103
  512. package/src/primitives/composer-model.ts +0 -49
  513. package/src/primitives/composer-triggers.ts +0 -35
  514. package/src/primitives/controllable.ts +0 -21
  515. package/src/primitives/conversation-store.ts +0 -248
  516. package/src/primitives/create-kai-chat.ts +0 -66
  517. package/src/primitives/create-tween.ts +0 -266
  518. package/src/primitives/embed-providers.ts +0 -254
  519. package/src/primitives/field-mask.ts +0 -256
  520. package/src/primitives/field-semantics.ts +0 -115
  521. package/src/primitives/highlighter.ts +0 -157
  522. package/src/primitives/input-mask.ts +0 -853
  523. package/src/primitives/link-preview.ts +0 -87
  524. package/src/primitives/message-feedback.ts +0 -124
  525. package/src/primitives/pdf-preview.ts +0 -121
  526. package/src/primitives/toast-store.ts +0 -338
  527. package/src/primitives/url-scheme-policy.ts +0 -70
  528. package/src/primitives/use-audio-analysis.ts +0 -340
  529. package/src/primitives/use-auto-resize.ts +0 -31
  530. package/src/primitives/use-resize-observer.ts +0 -45
  531. package/src/primitives/use-sequencer.ts +0 -72
  532. package/src/primitives/use-speech-recognition.ts +0 -146
  533. package/src/primitives/use-stick-to-bottom.ts +0 -75
  534. package/src/primitives/use-text-stream.ts +0 -143
  535. package/src/primitives/use-voice-recorder.ts +0 -62
  536. package/src/primitives/visualizer-sequences.ts +0 -350
  537. package/src/remote/host-embed.ts +0 -345
  538. package/src/remote/index.ts +0 -2
  539. package/src/remote/origin.ts +0 -30
  540. package/src/remote/provider-runtime.ts +0 -262
  541. package/src/remote/provider.ts +0 -2
  542. package/src/remote/validate.ts +0 -22
  543. package/src/remote/version.ts +0 -12
  544. package/src/remote/wire.ts +0 -48
  545. package/src/schemas/from-tool-call.ts +0 -151
  546. package/src/schemas/index.ts +0 -341
  547. package/src/schemas/provider-subsets.ts +0 -538
  548. package/src/schemas/registry.ts +0 -355
  549. package/src/schemas/tool-defs.ts +0 -793
  550. package/src/solid.ts +0 -173
  551. package/src/state/index.ts +0 -44
  552. package/src/state/messages.ts +0 -53
  553. package/src/state/mock.ts +0 -297
  554. package/src/state/parts.ts +0 -295
  555. package/src/state/persistence.ts +0 -180
  556. package/src/state/stream.ts +0 -246
  557. package/src/state/suggestions.ts +0 -9
  558. package/src/state/threads.ts +0 -142
  559. package/src/test-utils/fake-clock.ts +0 -88
  560. package/src/types.ts +0 -95
  561. package/src/ui/action-icons.ts +0 -53
  562. package/src/ui/agent-card.tsx +0 -218
  563. package/src/ui/avatar.tsx +0 -23
  564. package/src/ui/badge.tsx +0 -21
  565. package/src/ui/button.tsx +0 -49
  566. package/src/ui/card.tsx +0 -245
  567. package/src/ui/checkbox-group.tsx +0 -153
  568. package/src/ui/checkbox.tsx +0 -63
  569. package/src/ui/collapsible.tsx +0 -163
  570. package/src/ui/command.tsx +0 -103
  571. package/src/ui/dialog.tsx +0 -223
  572. package/src/ui/dock.tsx +0 -630
  573. package/src/ui/dropdown.tsx +0 -636
  574. package/src/ui/editable-label.tsx +0 -112
  575. package/src/ui/hover-card.tsx +0 -345
  576. package/src/ui/icon.tsx +0 -167
  577. package/src/ui/input.tsx +0 -391
  578. package/src/ui/kbd.tsx +0 -118
  579. package/src/ui/nav.tsx +0 -282
  580. package/src/ui/notice.tsx +0 -84
  581. package/src/ui/overlay.tsx +0 -277
  582. package/src/ui/pane-grid.tsx +0 -117
  583. package/src/ui/pane-group.tsx +0 -291
  584. package/src/ui/pane.tsx +0 -193
  585. package/src/ui/popover.tsx +0 -106
  586. package/src/ui/progress-bar.tsx +0 -83
  587. package/src/ui/prompt-dock.tsx +0 -145
  588. package/src/ui/radio.tsx +0 -150
  589. package/src/ui/resizable.tsx +0 -693
  590. package/src/ui/scroll-area.tsx +0 -26
  591. package/src/ui/segmented.tsx +0 -109
  592. package/src/ui/select.tsx +0 -168
  593. package/src/ui/separator.tsx +0 -10
  594. package/src/ui/settings-group.tsx +0 -67
  595. package/src/ui/skeleton.tsx +0 -73
  596. package/src/ui/slider.tsx +0 -178
  597. package/src/ui/status.tsx +0 -48
  598. package/src/ui/switch.tsx +0 -119
  599. package/src/ui/tabs.tsx +0 -168
  600. package/src/ui/textarea.tsx +0 -21
  601. package/src/ui/tooltip.tsx +0 -118
  602. package/src/utils/cn.ts +0 -30
  603. package/src/wire/chunk.ts +0 -248
  604. package/src/wire/consume.ts +0 -599
  605. package/src/wire/diagnostics.ts +0 -727
  606. package/src/wire/encode-probe.ts +0 -214
  607. package/src/wire/encode.ts +0 -947
  608. package/src/wire/files.ts +0 -342
  609. package/src/wire/formats/anthropic.ts +0 -274
  610. package/src/wire/formats/openai.ts +0 -228
  611. package/src/wire/index.ts +0 -95
  612. package/src/wire/media-types.ts +0 -344
  613. package/src/wire/read.ts +0 -396
  614. package/src/wire/sink-helpers.ts +0 -50
  615. package/src/wire/sse.ts +0 -153
package/src/solid.ts DELETED
@@ -1,173 +0,0 @@
1
- // `@kitn.ai/ui/solid` — the COMPLETE SolidJS surface.
2
- //
3
- // WHY THIS EXISTS
4
- // ---------------
5
- // Solid is this kit's authored layer, so every registered `kai-*` element must be
6
- // writable as a Solid component (`verify:solid-coverage` enforces 79/79 plus a
7
- // `<Name>Props` type for every public component). But the root entry "." is what
8
- // EVERY consumer resolves, including the React/Vue/Svelte/vanilla majority who
9
- // only ever touch the web components. Growing "." to full Solid coverage cost
10
- // them 591,359 -> 705,031 bytes (+113,672, +19.2%; +23,160 gzipped) for a surface
11
- // four of the five supported frameworks cannot even call.
12
- //
13
- // So the full Solid catalog lives here instead, and this file is compiled as its
14
- // OWN build target (vite.config.solid.ts -> dist/solid.js, plus the SSR twin
15
- // vite.config.solid.server.ts -> dist/solid.server.js, mirroring "."). Nothing
16
- // below is reachable from dist/index.js, which is the entire point: a React
17
- // consumer's bundle never sees it.
18
- //
19
- // WHY IT COMPOSES "." INSTEAD OF RESTATING IT
20
- // -------------------------------------------
21
- // `export * from './index'` makes "./solid is a superset of ." a COMPILER
22
- // invariant rather than a promise two hand-maintained lists have to keep. This
23
- // repo has been bitten repeatedly by copied lists that no compiler watches; a
24
- // restated 400-line barrel would be exactly that, and the failure mode is silent
25
- // (an export lands on "." only, and Solid consumers never learn it exists).
26
- //
27
- // This costs nothing at the package boundary. The composition is resolved at
28
- // SOURCE level and bundled away: dist/solid.js is a standalone artifact with no
29
- // runtime dependency on dist/index.js, so importing "./solid" does not drag in a
30
- // second entry, and importing "." does not drag in any of this.
31
- //
32
- // A Solid consumer therefore needs exactly one import:
33
- // import { Thread, Dialog, Message, type ThreadProps } from '@kitn.ai/ui/solid';
34
- export * from './index';
35
-
36
- // ---------------------------------------------------------------------------
37
- // Layer 2 additions: UI primitives the coarse elements render.
38
- // ---------------------------------------------------------------------------
39
- export { HoverCardRoot, HoverCardTrigger, HoverCardContent } from './ui/hover-card';
40
- export type {
41
- HoverCardRootProps, HoverCardTriggerProps, HoverCardContentProps,
42
- } from './ui/hover-card';
43
- export {
44
- DropdownSeparator, DropdownLabel, DropdownCheckboxItem, DropdownRadioItem,
45
- DropdownSub, DropdownSubTrigger, DropdownSubContent,
46
- } from './ui/dropdown';
47
- export type {
48
- DropdownSeparatorProps, DropdownLabelProps, DropdownCheckboxItemProps, DropdownRadioItemProps,
49
- DropdownSubProps, DropdownSubTriggerProps, DropdownSubContentProps,
50
- } from './ui/dropdown';
51
- export { clampBasis } from './ui/resizable';
52
- export { Input } from './ui/input';
53
- export type { InputProps } from './ui/input';
54
- export { Kbd } from './ui/kbd';
55
- export type { KbdProps, KbdPlatform } from './ui/kbd';
56
- export { Checkbox } from './ui/checkbox';
57
- export type { CheckboxProps } from './ui/checkbox';
58
- export { Radio, RadioGroup } from './ui/radio';
59
- export type { RadioProps, RadioGroupProps, RadioOption } from './ui/radio';
60
- export { CheckboxGroup } from './ui/checkbox-group';
61
- export type { CheckboxGroupProps, CheckboxOption } from './ui/checkbox-group';
62
- export { Switch } from './ui/switch';
63
- export type { SwitchProps } from './ui/switch';
64
- export { Slider } from './ui/slider';
65
- export type { SliderProps } from './ui/slider';
66
- export { Select } from './ui/select';
67
- export type { SelectProps, SelectOption } from './ui/select';
68
- export { Tabs } from './ui/tabs';
69
- export type { TabsProps, TabsVariant, KaiTabItem } from './ui/tabs';
70
- export { Segmented } from './ui/segmented';
71
- export type { SegmentedProps, SegmentedOption } from './ui/segmented';
72
- export { Status } from './ui/status';
73
- export type { StatusProps, StatusKind } from './ui/status';
74
- export { ProgressBar } from './ui/progress-bar';
75
- export type { ProgressBarProps, ProgressTone } from './ui/progress-bar';
76
- export { Notice } from './ui/notice';
77
- export type { NoticeProps, NoticeSeverity } from './ui/notice';
78
- export { EditableLabel } from './ui/editable-label';
79
- export type { EditableLabelProps } from './ui/editable-label';
80
- export { Dialog } from './ui/dialog';
81
- export type { DialogProps, DialogController } from './ui/dialog';
82
- export { Dock, DockLauncherGlyph, DockCloseGlyph, DockLauncherImage } from './ui/dock';
83
- export type { DockProps, DockController, DockPosition, DockFocusOnOpen, DockLauncherImageProps } from './ui/dock';
84
- export { Popover } from './ui/popover';
85
- export type { PopoverProps, PopoverController } from './ui/popover';
86
- export { Nav } from './ui/nav';
87
- export type { NavProps, KaiNavItem, NavItemStatus, NavStatusTone } from './ui/nav';
88
- export { CommandList } from './ui/command';
89
- export type { CommandListProps, CommandRow, CommandGroup } from './ui/command';
90
- export { AgentCard } from './ui/agent-card';
91
- export type { AgentCardProps, AgentStatus, AgentStatusTone } from './ui/agent-card';
92
- export { Pane } from './ui/pane';
93
- export type { PaneProps, PaneStatus, PaneStatusTone } from './ui/pane';
94
- export { PaneGroup } from './ui/pane-group';
95
- export type { PaneGroupProps, PaneTab, PaneTabStatus } from './ui/pane-group';
96
- // PaneGrid and the three overlay primitives have Storybook pages that tell a
97
- // consumer to `import { … } from '@kitn.ai/ui'` — and were exported from NEITHER
98
- // entry, so those snippets named symbols nobody could import. They belong on
99
- // ./solid (Solid-only building blocks, and the overlay trio is what you compose a
100
- // custom popover/tooltip out of).
101
- export { PaneGrid } from './ui/pane-grid';
102
- export type { PaneGridProps } from './ui/pane-grid';
103
- export { createPresence, usePosition, useDismiss } from './ui/overlay';
104
- export type { UsePositionOptions, UseDismissOptions, DismissReason } from './ui/overlay';
105
- export { PromptDock } from './ui/prompt-dock';
106
- export type { PromptDockProps, PromptDockFrame, PromptDockAppearance } from './ui/prompt-dock';
107
- export { SettingsGroup, SettingItem } from './ui/settings-group';
108
- export type { SettingsGroupProps, SettingItemProps } from './ui/settings-group';
109
- // `kai-icon` renders no kit component — it calls this. Solid consumers resolving
110
- // the same `icon` strings (named icon | URL | text fallback) need it too.
111
- export { renderIcon } from './ui/icon';
112
-
113
- // ---------------------------------------------------------------------------
114
- // Layer 3 additions: AI/feature components.
115
- // ---------------------------------------------------------------------------
116
- export { ChainOfThoughtAccordion } from './components/chain-of-thought';
117
- export type { ChainOfThoughtAccordionProps } from './components/chain-of-thought';
118
- export { VoiceOutput } from './components/voice-output';
119
- export type { VoiceOutputProps, VoiceOutputController } from './components/voice-output';
120
- export { CollapsedRail } from './components/conversation-list';
121
- export type { CollapsedRailProps } from './components/conversation-list';
122
-
123
- // ---------------------------------------------------------------------------
124
- // Layer 3b: the composed thread/shell components the coarse elements wrap.
125
- // These are what `<kai-thread>`, `<kai-chat>`, `<kai-screen>`, `<kai-coachmark>` and
126
- // `<kai-composer>` render, so a Solid consumer writes one component for one element
127
- // instead of re-deriving the scroll/feedback/staging behaviour by hand.
128
- // ---------------------------------------------------------------------------
129
- export { Thread } from './components/thread';
130
- export type { ThreadProps, ThreadController } from './components/thread';
131
- // ChatThread — the component behind `<kai-chat>`. VERIFIED standalone: rendered in
132
- // a plain Vite+Solid app (no custom element, no shadow root) it draws its header,
133
- // the full message list and its BUILT-IN composer; typing into that composer and
134
- // pressing Send fires `onSubmit` with the typed text and the thread updates, with
135
- // no console errors.
136
- //
137
- // It does emit 5 `<slot>` elements — header-start, header-end, input-top,
138
- // toolbar-start, toolbar-end. Those are OPTIONAL INJECT points with no assigned
139
- // nodes outside the facade, so they render nothing; they are only fillable from
140
- // `<kai-chat>`'s light DOM. The REPLACE/INJECT props (`sidebar`, `empty`,
141
- // `composer`, `headerFull`, `footer`, `composerActions`) are opt-in switches that
142
- // the FACADE sets when a host slots content — left at their default they emit no
143
- // slot at all and the built-in UI renders. So a Solid consumer can ignore all of
144
- // it; they just cannot project content into those five points without the element.
145
- export { ChatThread } from './components/chat-thread';
146
- export type { ChatThreadProps, ChatThreadController, ChatThreadContextUsage } from './components/chat-thread';
147
- export { Screen } from './components/screen';
148
- export type { ScreenProps, ScreenController } from './components/screen';
149
- // HomePanel / WidgetTabBar — the widget home screen (Intercom-pattern).
150
- // Wired into ChatThread itself behind the `home` prop (and from there into
151
- // `<kai-chat>`'s own `home`/`onHomeLink`); exported here too for a Solid
152
- // consumer composing either piece directly.
153
- export { HomePanel } from './components/home-panel';
154
- export type { HomePanelProps } from './components/home-panel';
155
- export { WidgetTabBar } from './components/widget-tab-bar';
156
- export type { WidgetTabBarProps } from './components/widget-tab-bar';
157
- export { Coachmark } from './components/coachmark';
158
- export type { CoachmarkProps, CoachmarkController } from './components/coachmark';
159
- export { Composer } from './components/composer';
160
- export type {
161
- ComposerProps, ComposerController, ComposerChange, TriggerDef, TriggerItem, HighlightRule,
162
- } from './components/composer';
163
- // AudioVisualizer — the component behind `<kai-audio-visualizer>`. It arrived on
164
- // main after this entry was written, and the coverage guard caught it as the one
165
- // element with no writable SolidJS equivalent, which is exactly the job.
166
- export { AudioVisualizer } from './components/audio-visualizer';
167
- export type {
168
- AudioVisualizerProps, VisualizerVariant, ShaderSpec, ShaderVariantProps,
169
- } from './components/audio-visualizer';
170
- export type { VisualizerSize } from './components/audio-visualizer/sizes';
171
- export { WorkspaceShell, type WorkspaceShellProps, type WorkspaceShellController, type WorkspaceAsideSide, type WorkspaceAsideToggleDetail, type WorkspaceAsideResizeDetail } from './components/workspace-shell';
172
- export { createConversationItemsController, readConversationItemId } from './components/conversation-list';
173
- export type { ConversationItemsController, ConversationItemsControllerOptions } from './components/conversation-list';
@@ -1,44 +0,0 @@
1
- // Framework-neutral state core for @kitn.ai/ui. Pure functions over ChatMessage[]
2
- // + a typed streaming handle. No React/Solid runtime — drives a consumer setter.
3
- export { appendMessage, upsertMessage, updateMessage, removeMessage, appendText, textMessage, partsToText } from './messages';
4
- export { addSuggestion, removeSuggestion } from './suggestions';
5
- export { createAssistantStream, onStreamSettled } from './stream';
6
- export type { SetMessages, AssistantStream } from './stream';
7
- export { appendTextPart, appendReasoningPart, upsertToolPart, upsertCardPart, fingerprint } from './parts';
8
- export type { ReasoningOpts } from './parts';
9
-
10
- // Multi-thread mechanics (the workspace recast, spec §3b): the id-bound
11
- // SetMessages fold + the in-flight-turn bookkeeping. The consumer's record
12
- // shape and every persistence/retention decision stay outside — see ./threads.
13
- export { updateThreadMessages, bindThreadMessages, createThreadSessions } from './threads';
14
- export type { ThreadLike, SetThreads, BindThreadOptions, ThreadSessions } from './threads';
15
-
16
- // The persistence SEAM, not persistence: the stored-thread validator (F-18,
17
- // variant list derived from the MessagePart union) and the debounce/flush
18
- // shape. No storage backend, no default delay — policy is the consumer's.
19
- export { parseStoredThread, createSaveScheduler } from './persistence';
20
- export type { ParsedThread, DroppedStored, SaveScheduler, SaveSchedulerOptions } from './persistence';
21
-
22
- // The zero-config mock. Produces SSE frames rather than folding parts directly,
23
- // so the no-backend preview runs through the SAME parser a real provider does —
24
- // and is deliberately impossible to mistake for one. See ./mock.
25
- export { createMockResponder, DEFAULT_MOCK_REPLIES, MOCK_BANNER, MOCK_MARKER, MOCK_MARKER_KEY, MOCK_MODEL_ID } from './mock';
26
- export type { MockReply, MockResponder, MockResponderOptions, MockToolCall, MockTurn } from './mock';
27
-
28
- // The content-model types every signature above mentions. Without these a
29
- // consumer importing only from '@kitn.ai/ui/state' cannot annotate the very
30
- // values these helpers take and return (the missing-annotation gap that made an
31
- // un-annotated `const history = [...]` widen to `string` and fail TS2322).
32
- export type {
33
- ChatMessage, ChatMessageAction, CustomAction, AvatarData, FeedbackVote, MessagePart,
34
- MessageSource, RawOrigin,
35
- } from '../elements/chat-types';
36
- export type { ToolPart } from '../components/tool-types';
37
- export type { ToolKind } from '../components/tool-classify';
38
- // upsertToolPart defaults `kind` to classifyTool(type) and reverts it on a type
39
- // change (see ./parts), and ToolPart.kind's doc comment names the function, so a
40
- // consumer computing `kind` itself needs the identical classifier — not a
41
- // hand-rolled copy that drifts from ours.
42
- export { classifyTool } from '../components/tool-classify';
43
- export type { CardEnvelope } from '../primitives/card-contract';
44
- export type { AttachmentData } from '../components/attachment-types';
@@ -1,53 +0,0 @@
1
- import type { ChatMessage, MessagePart } from '../elements/chat-types';
2
- import { appendTextPart } from './parts';
3
-
4
- function newId(): string {
5
- if (typeof crypto !== 'undefined' && crypto.randomUUID) return crypto.randomUUID();
6
- return 'kai-' + Math.random().toString(36).slice(2);
7
- }
8
-
9
- /** Convenience for the common single-text-part message. */
10
- export function textMessage(role: ChatMessage['role'], text: string, init: Partial<ChatMessage> = {}): ChatMessage {
11
- return { id: init.id ?? newId(), role, parts: [{ type: 'text', text }], ...init };
12
- }
13
-
14
- /** Concatenates every text part. Use where a plain string is genuinely needed
15
- * (copy-to-clipboard, TTS, a length check). Do NOT use it for rendering. */
16
- export function partsToText(parts: MessagePart[]): string {
17
- return parts.filter((p) => p.type === 'text').map((p) => p.text).join('');
18
- }
19
-
20
- /** Append a message; returns a new array. */
21
- export function appendMessage(messages: ChatMessage[], msg: ChatMessage): ChatMessage[] {
22
- return [...messages, msg];
23
- }
24
-
25
- /** Replace a same-id message, or append when absent. */
26
- export function upsertMessage(messages: ChatMessage[], msg: ChatMessage): ChatMessage[] {
27
- const i = messages.findIndex((x) => x.id === msg.id);
28
- if (i === -1) return [...messages, msg];
29
- const next = messages.slice();
30
- next[i] = msg;
31
- return next;
32
- }
33
-
34
- /** Patch the matched message (object patch or updater). Untouched items keep their reference. */
35
- export function updateMessage(
36
- messages: ChatMessage[],
37
- id: string,
38
- patch: Partial<ChatMessage> | ((m: ChatMessage) => ChatMessage),
39
- ): ChatMessage[] {
40
- return messages.map((x) =>
41
- x.id === id ? (typeof patch === 'function' ? patch(x) : { ...x, ...patch }) : x,
42
- );
43
- }
44
-
45
- /** Remove the matched message. */
46
- export function removeMessage(messages: ChatMessage[], id: string): ChatMessage[] {
47
- return messages.filter((x) => x.id !== id);
48
- }
49
-
50
- /** Streaming primitive: append `delta` onto the matched message's trailing text part. */
51
- export function appendText(messages: ChatMessage[], id: string, delta: string): ChatMessage[] {
52
- return messages.map((x) => (x.id === id ? { ...x, parts: appendTextPart(x.parts, delta) } : x));
53
- }
package/src/state/mock.ts DELETED
@@ -1,297 +0,0 @@
1
- // The mock responder: the zero-config first win, standardized.
2
- //
3
- // WHAT IT IS
4
- // ----------
5
- // `createMockResponder()` returns a function that produces a STREAM SOURCE —
6
- // SSE text frames in the OpenAI chat-completions shape — which the caller hands
7
- // to `readOpenAIStream` from `@kitn.ai/ui/wire` exactly as it would hand over a
8
- // `fetch()` Response. There is no network, no key and no provider.
9
- //
10
- // WHY IT PRODUCES A WIRE INSTEAD OF FOLDING PARTS DIRECTLY
11
- // -------------------------------------------------------
12
- // The obvious cheaper design is to yield text deltas and let the caller fold
13
- // them onto `parts` with `appendTextPart`. That is what the scaffolder and all
14
- // five composed starters used to do, in seven separate copies, and it is worse
15
- // on every axis that matters:
16
- //
17
- // · It BYPASSES the kit's own parser. The zero-config default is the code path
18
- // every new developer runs first, and under the folding design it exercised
19
- // none of `sseDataFrames` / `sseJson` / `openaiChatFormat` /
20
- // `consumeModelStream`. Producing a wire makes the first-run path a live
21
- // regression test of the thing every real integration depends on.
22
- // · It makes the mock scaffold and the real scaffold STRUCTURALLY DIFFERENT,
23
- // so "swap the mock for a real backend" is a rewrite of the submit handler
24
- // rather than a one-expression change. With a wire, the only difference
25
- // between the two emitted scaffolds is `mockResponse(value)` vs
26
- // `await fetch('/api/chat', …)`; `createAssistantStream`, `readOpenAIStream`,
27
- // the try/catch/finally and the abort handling are byte-identical.
28
- // · The hand-rolled folds drifted. One of them replaced `parts` wholesale,
29
- // which silently deleted any reasoning/tool parts already on the message.
30
- //
31
- // The frames are the OpenAI chat-completions shape because the mock stands in
32
- // for the consumer's `/api/chat` ROUTE, not for a provider: every integration in
33
- // the kit's catalog except this one re-frames its provider to that shape
34
- // server-side (see `readOpenAIStream`), so matching it is what keeps the swap to
35
- // a real backend a one-line change.
36
- //
37
- // WHY YOU CAN TELL IT IS A MOCK — READ THIS BEFORE CHANGING ANY STRING BELOW
38
- // -------------------------------------------------------------------------
39
- // A mock that is indistinguishable from a real response is how a fabricated turn
40
- // gets believed. This repo has already shipped that bug once: a scaffold seeded a
41
- // tool call from fixture data, the panel rendered "search Completed", and the
42
- // fabricated turn was POSTed to the provider AHEAD of the user's own message. A
43
- // human demoing it saw success; only an assertion on the round-2 answer failed.
44
- //
45
- // Choosing a real provider's frame SHAPE (above) means shape alone can no longer
46
- // distinguish the mock, so the tells are deliberate and layered. Each is visible
47
- // at a different altitude, so whichever one a developer happens to be looking at,
48
- // something says "no provider was contacted":
49
- //
50
- // 1. RAW STREAM — the first bytes are an SSE comment banner (`: kai-mock …`).
51
- // Comment lines are dropped by `sseDataFrames`, so this is free
52
- // semantically and unmissable to anyone reading the stream or a capture.
53
- // 2. EVERY FRAME — carries `_kai_mock`, a full sentence naming this function.
54
- // The OpenAI reader ignores fields it does not know, so it costs nothing
55
- // and it survives JSON parsing: logging any single frame shows it.
56
- // 3. FIELD LEVEL — `model` is `kai-mock`, which is not a model any provider
57
- // serves. If a mock frame were ever echoed back upstream it would be
58
- // REJECTED rather than quietly accepted, which is the specific failure the
59
- // fabricated-tool-call bug needed and did not get.
60
- // 4. TURN LEVEL — usage is all zeros. A real turn that produced text cannot
61
- // report zero completion tokens, so `turn.usage` disambiguates in the app,
62
- // not merely in the bytes.
63
- // 5. UI LEVEL — the reply says so in words. The WEAKEST tell and the only one
64
- // a real model could imitate, which is exactly why it is not the only one.
65
- //
66
- // CONSTRAINTS
67
- // -----------
68
- // Zero dependencies, no DOM, no Solid, no network, and nothing that is not a
69
- // global in both Node and the browser (`setTimeout`, `JSON`). This module is
70
- // part of `@kitn.ai/ui/state`, which is import-safe on a server — see
71
- // `verify:ssr`. It deliberately does NOT import from `@kitn.ai/ui/wire`: it
72
- // yields `AsyncIterable<string>`, which is structurally a `StreamSource`, so the
73
- // dependency runs one way (a caller pairs them) and `state` keeps its charter of
74
- // owning no wire format.
75
-
76
- /** The `model` every mock frame reports. Not a model any provider serves — see
77
- * tell 3 in the header. */
78
- export const MOCK_MODEL_ID = 'kai-mock';
79
-
80
- /** The marker field carried by every mock frame. Tell 2. */
81
- export const MOCK_MARKER_KEY = '_kai_mock';
82
-
83
- /** The value of that marker: a whole sentence, because it is read by a human
84
- * staring at a logged frame and wondering where the reply came from. */
85
- export const MOCK_MARKER =
86
- 'no provider was contacted — this reply was generated locally by createMockResponder() from @kitn.ai/ui/state';
87
-
88
- /** The SSE comment that opens every mock stream. Tell 1. */
89
- export const MOCK_BANNER = `: kai-mock — NO PROVIDER WAS CONTACTED. ${MOCK_MARKER}.`;
90
-
91
- /** The default canned replies, cycled per turn so a multi-turn preview stays
92
- * coherent instead of repeating one line forever. */
93
- export const DEFAULT_MOCK_REPLIES: readonly string[] = [
94
- "Hi! I'm a local mock — no backend, no API key, no provider was contacted. I'm streaming through the same parser a real model would, so what you're seeing is the real rendering path with a canned reply.",
95
- "Still the mock. Swap `createMockResponder()` for a `fetch('/api/chat', …)` and nothing else in this handler changes — that's the whole point of the seam.",
96
- 'Mock again. Every frame I send is tagged `_kai_mock` and my usage reports zero tokens, so nothing here can be mistaken for a real turn.',
97
- ];
98
-
99
- /** One scripted tool call for a mock turn. Framed exactly the way the OpenAI
100
- * chat-completions wire frames a real one — an announce fragment carrying
101
- * `id`/`function.name`, then the argument JSON streamed in fragments — so the
102
- * kit's own reader (`readOpenAIStream`) reassembles it through the same path a
103
- * real provider's call takes. */
104
- export interface MockToolCall {
105
- /** The tool name, e.g. `'get_weather'` or a card tool like `'kai_confirm'`. */
106
- name: string;
107
- /** The call's arguments. Serialized with `JSON.stringify` and streamed as
108
- * fragments, like a real provider. Defaults to `{}`. */
109
- arguments?: unknown;
110
- /** Explicit tool-call id. Defaults to `call_kai-mock-<turn>-<n>`, which keeps
111
- * the mock's naming tell (see tell 3): no provider issues ids in that shape. */
112
- id?: string;
113
- }
114
-
115
- /** A scripted mock turn: optional text, then optional tool calls. A turn with
116
- * tool calls finishes `finish_reason: 'tool_calls'`, exactly as a real
117
- * tool-calling turn does; a turn without them finishes `'stop'`. */
118
- export interface MockTurn {
119
- /** Text streamed (token by token) before the tool calls. */
120
- text?: string;
121
- /** Tool calls announced this turn, in order. */
122
- toolCalls?: readonly MockToolCall[];
123
- }
124
-
125
- /** A canned reply: plain text, or a scripted turn. A string is exactly
126
- * `{ text }` — the pre-tool-call API unchanged. */
127
- export type MockReply = string | MockTurn;
128
-
129
- export interface MockResponderOptions {
130
- /** Canned replies, cycled one per turn. Plain strings stream as text; a
131
- * `MockTurn` can also script tool calls (`{ text, toolCalls }`), which is
132
- * what lets the zero-config mock exercise the kit's tool/card path without
133
- * hand-rolled SSE framing. Defaults to `DEFAULT_MOCK_REPLIES`. */
134
- replies?: readonly MockReply[];
135
- /** Delay between chunks, in ms. Defaults to 24 — fast enough to feel alive,
136
- * slow enough that the streaming is visible. `0` streams as fast as the
137
- * event loop allows, which is what tests want. */
138
- delayMs?: number;
139
- /** How many whitespace-delimited tokens ride in each frame. Defaults to 1
140
- * (token by token). Larger values coarsen the cadence. */
141
- chunkSize?: number;
142
- /** Log a one-time notice on the first turn. Defaults to `true`: the point of
143
- * this module is that a mock reply is hard to mistake for a real one, and a
144
- * console line is the fastest way for a human to notice. Pass `false` in
145
- * tests, or wherever the banner and the frame markers are tell enough. */
146
- announce?: boolean;
147
- }
148
-
149
- /** Produces one turn's worth of SSE frames. Structurally a `StreamSource`, so it
150
- * goes straight into `readOpenAIStream(responder(text), stream)`. */
151
- export type MockResponder = (prompt?: string) => AsyncIterable<string>;
152
-
153
- /** Split into whitespace-preserving tokens, so re-joining the deltas reproduces
154
- * the reply exactly (the separators are tokens too). */
155
- function tokenize(reply: string, chunkSize: number): string[] {
156
- const parts = reply.split(/(\s+)/).filter((t) => t !== '');
157
- if (chunkSize <= 1) return parts;
158
- const out: string[] = [];
159
- for (let i = 0; i < parts.length; i += chunkSize) {
160
- out.push(parts.slice(i, i + chunkSize).join(''));
161
- }
162
- return out;
163
- }
164
-
165
- function frame(id: string, body: Record<string, unknown>): string {
166
- // The marker goes FIRST so it is the first thing visible in a logged or
167
- // captured frame, before the payload a reader would skim for.
168
- return `data: ${JSON.stringify({
169
- [MOCK_MARKER_KEY]: MOCK_MARKER,
170
- id,
171
- object: 'chat.completion.chunk',
172
- model: MOCK_MODEL_ID,
173
- ...body,
174
- })}\n\n`;
175
- }
176
-
177
- const delay = (ms: number): Promise<void> =>
178
- ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
179
-
180
- /** Normalize a canned reply: a plain string is exactly `{ text }`. */
181
- const asTurn = (reply: MockReply): MockTurn => (typeof reply === 'string' ? { text: reply } : reply);
182
-
183
- /** How many characters of argument JSON ride in each tool-call fragment. Small
184
- * enough that any realistic argument object spans several frames, so the
185
- * reader's fragment-reassembly path — the one a real provider exercises — is
186
- * exercised here too, rather than a single-frame shortcut it would never see
187
- * in production. */
188
- const TOOL_ARG_FRAGMENT_CHARS = 16;
189
-
190
- /** Split argument JSON into the fragments a provider streams. Never empty: an
191
- * empty-object call still sends its `'{}'` so the reader has arguments to
192
- * parse. */
193
- function argumentFragments(json: string): string[] {
194
- const out: string[] = [];
195
- for (let i = 0; i < json.length; i += TOOL_ARG_FRAGMENT_CHARS) {
196
- out.push(json.slice(i, i + TOOL_ARG_FRAGMENT_CHARS));
197
- }
198
- return out.length > 0 ? out : [''];
199
- }
200
-
201
- /**
202
- * Build a mock responder.
203
- *
204
- * ```ts
205
- * import { createAssistantStream, createMockResponder } from '@kitn.ai/ui/state';
206
- * import { readOpenAIStream } from '@kitn.ai/ui/wire';
207
- *
208
- * const mockResponse = createMockResponder();
209
- * const stream = createAssistantStream(setMessages);
210
- * await readOpenAIStream(mockResponse(value), stream); // <- swap for fetch()
211
- * stream.done();
212
- * ```
213
- */
214
- export function createMockResponder(options: MockResponderOptions = {}): MockResponder {
215
- const {
216
- replies = DEFAULT_MOCK_REPLIES,
217
- delayMs = 24,
218
- chunkSize = 1,
219
- announce = true,
220
- } = options;
221
-
222
- const pool = replies.length > 0 ? replies : DEFAULT_MOCK_REPLIES;
223
- let turn = 0;
224
- let announced = false;
225
-
226
- return function respond(_prompt?: string): AsyncIterable<string> {
227
- const scripted = asTurn(pool[turn % pool.length]);
228
- const id = `kai-mock-${turn + 1}`;
229
- const turnNumber = turn + 1;
230
- turn += 1;
231
-
232
- return {
233
- async *[Symbol.asyncIterator]() {
234
- if (announce && !announced) {
235
- announced = true;
236
- // Not console.warn: nothing is wrong. This is the mock announcing
237
- // itself so a developer never has to wonder whether the reply they
238
- // are looking at came from a model.
239
- console.info(`[kai] ${MOCK_BANNER.slice(2)}`);
240
- }
241
-
242
- // Tell 1. Dropped by the parser (`sseDataFrames` skips ':' lines), so it
243
- // costs nothing semantically — and it exercises that comment-skipping
244
- // path, which real providers use for keep-alives.
245
- yield `${MOCK_BANNER}\n\n`;
246
-
247
- // The role frame a real OpenAI stream opens with: no content, so it also
248
- // exercises the reader's empty-delta path.
249
- yield frame(id, { choices: [{ index: 0, delta: { role: 'assistant' }, finish_reason: null }] });
250
-
251
- for (const token of tokenize(scripted.text ?? '', chunkSize)) {
252
- await delay(delayMs);
253
- yield frame(id, { choices: [{ index: 0, delta: { content: token }, finish_reason: null }] });
254
- }
255
-
256
- // Scripted tool calls, framed the way the OpenAI wire frames real ones:
257
- // one announce fragment per call (`index`/`id`/`function.name` + empty
258
- // arguments), then the argument JSON in fragments. The kit's reader
259
- // reassembles them through the exact path a real provider's call takes.
260
- const toolCalls = scripted.toolCalls ?? [];
261
- for (let index = 0; index < toolCalls.length; index += 1) {
262
- const call = toolCalls[index];
263
- // Tell 3's shape, extended to call ids: no provider issues these.
264
- const callId = call.id ?? `call_${MOCK_MODEL_ID}-${turnNumber}-${index + 1}`;
265
- await delay(delayMs);
266
- yield frame(id, {
267
- choices: [{
268
- index: 0,
269
- delta: { tool_calls: [{ index, id: callId, function: { name: call.name, arguments: '' } }] },
270
- finish_reason: null,
271
- }],
272
- });
273
- for (const fragment of argumentFragments(JSON.stringify(call.arguments ?? {}))) {
274
- await delay(delayMs);
275
- yield frame(id, {
276
- choices: [{
277
- index: 0,
278
- delta: { tool_calls: [{ index, function: { arguments: fragment } }] },
279
- finish_reason: null,
280
- }],
281
- });
282
- }
283
- }
284
-
285
- // Tell 4: zero usage. A real turn that produced this much text cannot
286
- // report zero completion tokens. A turn that announced tool calls ends
287
- // `tool_calls`, exactly as a real one does, so the consumer's tool loop
288
- // branches the same way it would against a provider.
289
- yield frame(id, {
290
- choices: [{ index: 0, delta: {}, finish_reason: toolCalls.length > 0 ? 'tool_calls' : 'stop' }],
291
- usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
292
- });
293
- yield 'data: [DONE]\n\n';
294
- },
295
- };
296
- };
297
- }