@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/index.ts DELETED
@@ -1,430 +0,0 @@
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 element coverage gaps on this file grew it
9
- // 591,359 -> 705,031 bytes (+19.2%), which is what motivated the split. (That
10
- // measurement was taken at the then-79 elements; the catalog grows, the bytes
11
- // quoted do not — they are a record of the split, not a current reading.)
12
- //
13
- // The COMPLETE SolidJS surface — a component for EVERY registered element plus a
14
- // `<Name>Props` type for every public component — lives on `@kitn.ai/ui/solid`
15
- // (src/solid.ts), which is its own build target so only Solid consumers pay for
16
- // it. `npm run verify:solid-coverage` prints the element count and proves that
17
- // surface n/n on every run, which is why no count is restated here. `./solid`
18
- // re-exports this file, so it is a strict superset: anything here is reachable
19
- // there too, and a Solid consumer only ever needs the one import.
20
- //
21
- // Rule of thumb: a NEW Solid component export belongs in src/solid.ts.
22
- // Type-only exports are free (fully erased by the build) and may live in either.
23
-
24
- // Shared types (folded in from @tab-zen/shared)
25
- export type { ModelOption, SearchFilters, ConversationScope, ConversationSummary, ConversationGroup, HomeConfig, HomeLinkEntry } from './types';
26
-
27
- // Utilities
28
- export { cn } from './utils/cn';
29
-
30
- // Layer 1: Headless Primitives
31
- export { createKaiChat } from './primitives/create-kai-chat';
32
- export type { CreateKaiChatOptions, KaiChatStore } from './primitives/create-kai-chat';
33
- export { useAutoResize } from './primitives/use-auto-resize';
34
- export { useStickToBottom } from './primitives/use-stick-to-bottom';
35
- export { useTextStream } from './primitives/use-text-stream';
36
- export type { UseTextStreamOptions, TextStreamSegment } from './primitives/use-text-stream';
37
- export { useVoiceRecorder } from './primitives/use-voice-recorder';
38
- export type { UseVoiceRecorderOptions } from './primitives/use-voice-recorder';
39
- export { ChatConfig, useChatConfig, proseClass, textClass } from './primitives/chat-config';
40
- export type { ChatConfigValue, ProseSize, ChatConfigProps } from './primitives/chat-config';
41
- export { configureCodeHighlighting, isCodeHighlightingEnabled } from './primitives/highlighter';
42
- export type { CodeHighlightingOptions } from './primitives/highlighter';
43
- export { configurePdfPreview, isPdfPreviewEnabled } from './primitives/pdf-preview';
44
- export type { PdfPreviewOptions } from './primitives/pdf-preview';
45
- export { localStorageStore, fetchStore, byRecency, LEGACY_THREAD_MIGRATED_TITLE } from './primitives/conversation-store';
46
- export type { ConversationStore } from './primitives/conversation-store';
47
-
48
- // Toasts: imperative `toast()` API + the reactive store behind <kai-toast-region>
49
- export { toast, configureToasts, ensureMounted as ensureToastRegion, getToasts } from './primitives/toast-store';
50
- export type {
51
- ToastItem, ToastVariant, ToastAction, ToastOptions, ToastHandle, ToastFn, ToastConfig,
52
- } from './primitives/toast-store';
53
- export { Toast, ToastRegion } from './components/toast';
54
- export type {
55
- ToastProps, ToastRegionProps, ToastDismissReason, ToastPosition,
56
- } from './components/toast';
57
-
58
- // Card Contract (generative-UI foundation)
59
- export { CARD_CONTRACT_VERSION } from './primitives/card-contract';
60
- export type {
61
- CardEnvelope, CardContext, CardEvent, CardEventKind, CardResolution, CardHost, CardPolicy,
62
- } from './primitives/card-contract';
63
- export { applyResolution, resolutionFromEvent } from './primitives/card-resolution';
64
- export { CardProvider, useCardHost } from './primitives/card-host';
65
- export type { CardProviderProps } from './primitives/card-host';
66
- export { CARD_EVENT_NAME, emitCardEvent, routeCardEvent, listenForCardEvents } from './primitives/card-routing';
67
- export { dismissRecovery, defaultIsReopenable } from './primitives/card-recovery';
68
- export type {
69
- RecoveryToast, ReopenEnv, DismissRecoveryOptions,
70
- } from './primitives/card-recovery';
71
- export { validateAgainstSchema } from './primitives/card-validate';
72
- export type { JsonSchema, ValidationResult } from './primitives/card-validate';
73
-
74
- // Remote host SDK (iframe transport — host side only; provider runtime ships via ./provider subpath)
75
- export { mountRemoteCard } from './remote/host-embed';
76
- export type { MountRemoteCardOptions, RemoteCardHandle } from './remote/host-embed';
77
-
78
- // Card dispatcher (generative-UI host glue)
79
- export { CardRenderer, renderCard } from './components/card-renderer';
80
- export type { CardRendererProps } from './components/card-renderer';
81
- export { CardFallback } from './components/card-fallback';
82
- export type { CardFallbackProps } from './components/card-fallback';
83
- export {
84
- BUILTIN_CARD_TAGS, BUILTIN_CARD_COMPONENTS, mergeCardTags, mergeCardComponents,
85
- } from './primitives/card-registry';
86
- export type { CardComponent, CardComponentMap, CardTagMap } from './primitives/card-registry';
87
-
88
- // Card: kai-card (base shell) + kai-form (JSON-Schema form renderer)
89
- export { Card } from './components/card';
90
- export type { CardProps } from './components/card';
91
- export { DismissedStub, stubIntent } from './components/dismissed-stub';
92
- export type { DismissedStubProps, DismissedCardType } from './components/dismissed-stub';
93
- export { Form, validateForm, buildResult, widgetFor, orderedKeys, coerceValue } from './components/form';
94
- export type {
95
- FormProps,
96
- FormField,
97
- FormDefinition,
98
- FormCardEnvelope,
99
- FormValidation,
100
- WidgetKind,
101
- } from './components/form';
102
-
103
- // Card: kai-confirm (approval) + kai-tasks (selectable plan)
104
- export {
105
- ConfirmCard,
106
- CONFIRM_CARD_TYPE,
107
- buttonVariantForStyle,
108
- normalizeActions,
109
- defaultActionId,
110
- } from './components/confirm-card';
111
- export type {
112
- ConfirmCardProps,
113
- ConfirmAction,
114
- ConfirmActionStyle,
115
- ConfirmTone,
116
- ConfirmCardData,
117
- ConfirmCardEnvelope,
118
- } from './components/confirm-card';
119
- export {
120
- TasksCard,
121
- TASKS_CARD_TYPE,
122
- normalizeTasks,
123
- initialSelected,
124
- selectedInOrder,
125
- toggleableIds,
126
- selectAllState,
127
- showSelectAll,
128
- canConfirm,
129
- isMaxReached,
130
- confirmReason,
131
- } from './components/tasks-card';
132
- export type {
133
- TasksCardProps,
134
- TasksTask,
135
- TasksCardData,
136
- TasksCardResult,
137
- TasksCardEnvelope,
138
- SelectAllState,
139
- } from './components/tasks-card';
140
-
141
- // Card: kai-choice (single-select option card)
142
- export {
143
- ChoiceCard,
144
- CHOICE_CARD_TYPE,
145
- OTHER_ACTION,
146
- normalizeOptions,
147
- resolveOtherConfig,
148
- nextEnabledIndex,
149
- firstEnabledIndex,
150
- } from './components/choice-card';
151
- export type {
152
- ChoiceCardProps,
153
- ChoiceOption,
154
- ChoiceOptionMedia,
155
- ChoiceAllowOther,
156
- ChoiceCardData,
157
- ChoiceCardEnvelope,
158
- } from './components/choice-card';
159
-
160
- // Card: kai-link-preview (OG/link preview) + kai-embed (lazy media embed)
161
- export { LinkPreview } from './components/link-preview';
162
- export type { LinkPreviewProps } from './components/link-preview';
163
- export { Embed } from './components/embed';
164
- export type { EmbedProps } from './components/embed';
165
- export {
166
- configureLinkPreview,
167
- resolveLinkMetadata,
168
- hasLinkPreviewFetcher,
169
- LINK_PREVIEW_TYPE,
170
- } from './primitives/link-preview';
171
- export type { LinkPreviewData, LinkPreviewEnvelope, LinkMetadataFetcher } from './primitives/link-preview';
172
- export {
173
- resolveEmbed,
174
- parseYouTubeId,
175
- parseVimeoId,
176
- configureEmbedAllowlist,
177
- isGenericOriginAllowed,
178
- EMBED_CARD_TYPE,
179
- } from './primitives/embed-providers';
180
- export type { EmbedCardData, EmbedCardEnvelope, EmbedProvider, ResolvedEmbed } from './primitives/embed-providers';
181
-
182
- // Layer 2: UI Primitives
183
- export { Button, buttonVariants } from './ui/button';
184
- export type { ButtonProps } from './ui/button';
185
- export { Avatar } from './ui/avatar';
186
- export type { AvatarProps } from './ui/avatar';
187
- export { Tooltip } from './ui/tooltip';
188
- export type { TooltipProps, TooltipController } from './ui/tooltip';
189
- export { HoverCard } from './ui/hover-card';
190
- export type { HoverCardProps, HoverCardController } from './ui/hover-card';
191
- export { Collapsible, CollapsibleTrigger, CollapsibleContent } from './ui/collapsible';
192
- export type {
193
- CollapsibleProps, CollapsibleTriggerProps, CollapsibleContentProps, CollapsibleController,
194
- } from './ui/collapsible';
195
- export { ScrollArea } from './ui/scroll-area';
196
- export type { ScrollAreaProps, ScrollOrientation } from './ui/scroll-area';
197
- export { Dropdown, DropdownTrigger, DropdownContent, DropdownItem } from './ui/dropdown';
198
- export type {
199
- DropdownProps, DropdownTriggerProps, DropdownContentProps, DropdownItemProps, DropdownController,
200
- } from './ui/dropdown';
201
- export { Textarea } from './ui/textarea';
202
- export type { TextareaProps } from './ui/textarea';
203
- export { Badge } from './ui/badge';
204
- export type { BadgeProps } from './ui/badge';
205
- export { Separator } from './ui/separator';
206
- export type { SeparatorProps } from './ui/separator';
207
- export { ResizablePanelGroup, ResizablePanel, ResizableHandle, Resizable, normalizeSize, resolveToPx } from './ui/resizable';
208
- export type { ResizablePanelGroupProps, ResizablePanelProps, ResizableHandleProps, ResizableProps, SizeValue } from './ui/resizable';
209
- export { Skeleton } from './ui/skeleton';
210
- export type { SkeletonProps, SkeletonVariant } from './ui/skeleton';
211
- export { FileTree, buildFileTree } from './components/file-tree';
212
- export type {
213
- FileTreeProps, FileTreeFile, FileTreeNode, FileTreeFolderNode, FileTreeFileNode,
214
- } from './components/file-tree';
215
- export { Artifact } from './components/artifact';
216
- export type { ArtifactProps, ArtifactFile, ArtifactTab } from './components/artifact';
217
- export { ArtifactCard, DEFAULT_ARTIFACT_CARD_HEIGHT } from './components/artifact-card';
218
- // `ArtifactCardFile` is the SAME declaration `FileTreeFile` and `ArtifactFile`
219
- // alias, authored in primitives/card-data-types.ts because `ArtifactCardData.files`
220
- // reaches it and that module has to stay resolvable from a Node/no-DOM project.
221
- // It is exported here under its authored name because that is the name the
222
- // generated element metadata records for `kai-artifact.files` / `kai-file-tree.files`,
223
- // and tests/elements/prop-types-exported.ts requires every named prop type to be
224
- // importable from this entry. The two aliases stay exported above, unchanged.
225
- export type {
226
- ArtifactCardProps,
227
- ArtifactCardData,
228
- ArtifactCardEnvelope,
229
- ArtifactCardFile,
230
- ArtifactCardTab,
231
- } from './components/artifact-card';
232
-
233
- // Layer 3: AI/Feature Components
234
- export {
235
- ChatContainer, ChatContainerRoot, ChatContainerContent, ChatContainerScrollAnchor,
236
- useChatContainer,
237
- } from './components/chat-container';
238
- export type {
239
- ChatContainerProps, ChatContainerRootProps, ChatContainerContentProps, ChatContainerScrollAnchorProps,
240
- } from './components/chat-container';
241
- export { Message, MessageAvatar, MessageContent, MessageActions, MessageAction, MessageCopyButton, MessageBody } from './components/message';
242
- export type {
243
- MessageProps, MessageAvatarProps, MessageContentProps, MessageActionsProps,
244
- MessageActionProps, MessageCopyButtonProps, MessageBodyProps,
245
- } from './components/message';
246
- export { ResponseCompare, useResolved } from './components/response-compare';
247
- export type { ResponseCompareProps, CompareLayout, ResolvedController } from './components/response-compare';
248
- export {
249
- normalizeCandidates,
250
- buildSelection,
251
- isAnyStreaming,
252
- } from './components/response-compare';
253
- export type {
254
- CompareCandidate,
255
- ComparePair,
256
- CompareCollapse,
257
- ResponseCompareData,
258
- CompareSelection,
259
- } from './components/response-compare';
260
- export { MessageSkills } from './components/message-skills';
261
- export type { MessageSkillsProps, Skill as MessageSkill } from './components/message-skills';
262
- export {
263
- PromptInput, PromptInputTextarea, PromptInputActions, PromptInputAction,
264
- usePromptInput,
265
- } from './components/prompt-input';
266
- export type {
267
- PromptInputProps, PromptInputTextareaProps, PromptInputActionsProps, PromptInputActionProps,
268
- } from './components/prompt-input';
269
- export { ResponseStream } from './components/response-stream';
270
- export type { ResponseStreamProps } from './components/response-stream';
271
- export { Markdown } from './components/markdown';
272
- export type { MarkdownProps } from './components/markdown';
273
- export { CodeBlock, CodeBlockCode, CodeBlockGroup } from './components/code-block';
274
- export type { CodeBlockProps, CodeBlockCodeProps, CodeBlockGroupProps } from './components/code-block';
275
- export { Loader } from './components/loader';
276
- export type { LoaderVariant, LoaderSize, LoaderProps } from './components/loader';
277
- export {
278
- CircularLoader, ClassicLoader, PulseLoader, PulseDotLoader,
279
- DotsLoader, TypingLoader, WaveLoader, BarsLoader,
280
- TerminalLoader, TextBlinkLoader, TextShimmerLoader, TextDotsLoader,
281
- } from './components/loader';
282
- export type {
283
- LoaderShapeProps, LoaderTextProps,
284
- CircularLoaderProps, ClassicLoaderProps, PulseLoaderProps, PulseDotLoaderProps,
285
- DotsLoaderProps, TypingLoaderProps, WaveLoaderProps, BarsLoaderProps,
286
- TerminalLoaderProps, TextBlinkLoaderProps, TextShimmerLoaderProps, TextDotsLoaderProps,
287
- } from './components/loader';
288
- export { FeedbackBar, type FeedbackValue, type FeedbackDetail, type FeedbackBarProps } from './components/feedback-bar';
289
- export {
290
- ChainOfThought, ChainOfThoughtStep, ChainOfThoughtTrigger,
291
- ChainOfThoughtContent, ChainOfThoughtItem,
292
- } from './components/chain-of-thought';
293
- export type {
294
- ChainOfThoughtProps, ChainOfThoughtStepProps, ChainOfThoughtTriggerProps,
295
- ChainOfThoughtContentProps, ChainOfThoughtItemProps,
296
- ChainOfThoughtType, ChainOfThoughtStepData, ChainOfThoughtController,
297
- } from './components/chain-of-thought';
298
- export { Source, SourceTrigger, SourceContent, SourceList } from './components/source';
299
- export type { SourceProps, SourceTriggerProps, SourceContentProps, SourceListProps } from './components/source';
300
- export { PromptSuggestion } from './components/prompt-suggestion';
301
- export type { PromptSuggestionProps } from './components/prompt-suggestion';
302
- export {
303
- Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent, emptyMediaVariants,
304
- } from './components/empty';
305
- export type {
306
- EmptyProps, EmptyHeaderProps, EmptyMediaProps, EmptyTitleProps, EmptyDescriptionProps, EmptyContentProps,
307
- } from './components/empty';
308
- export { ScrollButton } from './components/scroll-button';
309
- export type { ScrollButtonProps } from './components/scroll-button';
310
- export { TextShimmer } from './components/text-shimmer';
311
- export type { TextShimmerProps } from './components/text-shimmer';
312
- export { Checkpoint, CheckpointIcon, CheckpointTrigger } from './components/checkpoint';
313
- export type { CheckpointProps, CheckpointIconProps, CheckpointTriggerProps } from './components/checkpoint';
314
- export {
315
- Context,
316
- ContextTrigger,
317
- ContextContent,
318
- ContextContentHeader,
319
- ContextContentBody,
320
- ContextContentFooter,
321
- ContextInputUsage,
322
- ContextOutputUsage,
323
- ContextReasoningUsage,
324
- ContextCacheUsage,
325
- } from './components/context';
326
- export type {
327
- ContextProps,
328
- ContextTriggerProps,
329
- ContextContentProps,
330
- ContextContentHeaderProps,
331
- ContextContentBodyProps,
332
- ContextContentFooterProps,
333
- ContextUsageRowProps,
334
- ContextInputUsageProps,
335
- ContextOutputUsageProps,
336
- ContextReasoningUsageProps,
337
- ContextCacheUsageProps,
338
- } from './components/context';
339
- export { VoiceInput } from './components/voice-input';
340
- export type { VoiceInputProps, VoiceInputController } from './components/voice-input';
341
- export { ConversationList } from './components/conversation-list';
342
- export type { ConversationListProps, ConversationListController } from './components/conversation-list';
343
- export { ConversationItem } from './components/conversation-item';
344
- export { SlottedConversationItem } from './components/conversation-item';
345
- export type { SlottedConversationItemProps } from './components/conversation-item';
346
- export type { ConversationItemProps } from './components/conversation-item';
347
- export { ModelSwitcher } from './components/model-switcher';
348
- export type { ModelSwitcherProps } from './components/model-switcher';
349
- export { ChatScopePicker } from './components/chat-scope-picker';
350
- export type { ChatScopePickerProps } from './components/chat-scope-picker';
351
- export { Tool } from './components/tool';
352
- export type { ToolPart, ToolProps } from './components/tool';
353
- // ToolPart.kind's doc comment says "Derive with `classifyTool(type)`", so the
354
- // function has to be reachable from every entry that surfaces ToolPart. It is
355
- // total, deterministic and terminates in 'generic', so it is safe public API and
356
- // genuinely useful to anyone rendering tool calls themselves.
357
- export { classifyTool } from './components/tool-classify';
358
- export type { ToolKind } from './components/tool-classify';
359
- export { ThinkingBar } from './components/thinking-bar';
360
- export type { ThinkingBarProps } from './components/thinking-bar';
361
- export { Reasoning, ReasoningTrigger, ReasoningContent } from './components/reasoning';
362
- export type { ReasoningProps, ReasoningTriggerProps, ReasoningContentProps } from './components/reasoning';
363
- export { Image } from './components/image';
364
- export type { ImageProps, GeneratedImageLike } from './components/image';
365
- export { FileUpload, FileUploadTrigger, FileUploadContent } from './components/file-upload';
366
- export type { FileUploadProps, FileUploadTriggerProps, FileUploadContentProps } from './components/file-upload';
367
- export {
368
- Attachments, Attachment, AttachmentPreview, AttachmentInfo, AttachmentRemove,
369
- AttachmentHoverCard, AttachmentHoverCardTrigger, AttachmentHoverCardContent,
370
- AttachmentEmpty, getMediaCategory, getAttachmentLabel,
371
- useAttachmentsContext, useAttachmentContext,
372
- } from './components/attachments';
373
- export type {
374
- AttachmentData, AttachmentMediaCategory, AttachmentVariant,
375
- AttachmentsProps, AttachmentProps, AttachmentPreviewProps,
376
- AttachmentInfoProps, AttachmentRemoveProps, AttachmentEmptyProps,
377
- AttachmentHoverCardProps, AttachmentHoverCardTriggerProps, AttachmentHoverCardContentProps,
378
- } from './components/attachments';
379
-
380
- // Chat message types — public API for consumers who need to type their own message arrays.
381
- // NOTE: chat-types.ts also exports an unrelated `Source` interface (a citation), and
382
- // `Source` is already a public component export (./components/source, a citation
383
- // chip/trigger), so re-exporting both under that name is a duplicate-identifier error.
384
- // The citation type therefore ships under its alias `MessageSource`, which is also the
385
- // argument type of the public `AssistantStream.addSource(source)`.
386
- export type {
387
- ChatMessage, ChatMessageAction, CustomAction, AvatarData, FeedbackVote, MessagePart,
388
- MessageSource, RawOrigin,
389
- } from './elements/chat-types';
390
-
391
- // Composer document model. This belongs on "." rather than "./solid" because it
392
- // is part of the ELEMENT contract, not the Solid-only surface: `ComposerDoc` is
393
- // the non-string half of `kai-prompt-input` / `kai-composer` / `kai-default-input`'s
394
- // `value` property, and `doc` + `entities` on their `kai-submit` /
395
- // `kai-value-change` details. The shipped prop docs name `ComposerDoc` by name,
396
- // so a React or Vue consumer reading them has to be able to import it. Type-only,
397
- // so it is erased by the build and costs the root barrel nothing.
398
- export type { ComposerDoc, Segment, EntityRef } from './primitives/composer-model';
399
-
400
- // ---------------------------------------------------------------------------
401
- // Named types for the remaining kai-* array/object PROPERTIES.
402
- //
403
- // Same rationale as `ComposerDoc` above, applied to the whole class instead of
404
- // one instance: the generated `./elements` declarations and React wrappers expand
405
- // every prop type structurally (deliberately — see the `IMPORTS = {}` note in
406
- // scripts/gen-element-api.mjs), so a consumer who wants to NAME the shape had to
407
- // write `NonNullable<KaiPromptInputElementProps['triggers']>`. Every element-prop
408
- // type that has a name in source is now reachable from "." — the entry a React /
409
- // Vue / Svelte / vanilla consumer imports — not only from "./solid".
410
- //
411
- // Type-only, so the root barrel pays nothing at runtime.
412
- // Guarded by tests/elements/prop-types-exported.test.ts, which re-derives the
413
- // list from the facades with the TS checker and fails on a new unexported one.
414
- // ---------------------------------------------------------------------------
415
- export type { TriggerDef, TriggerItem } from './components/composer';
416
- export type { ChatThreadContextUsage } from './components/chat-thread';
417
- export type { Skill } from './components/message-skills';
418
- export type { AgentStatus } from './ui/agent-card';
419
- export type { KaiNavItem } from './ui/nav';
420
- export type { KaiTabItem } from './ui/tabs';
421
- export type { PaneStatus } from './ui/pane';
422
- export type { PaneTab } from './ui/pane-group';
423
- export type {
424
- KaiCheckboxOption, KaiCommandItem, KaiContextUsage, KaiMenuItem, KaiRadioOption, KaiSegmentedOption, KaiSelectOption,
425
- KaiSourceItem,
426
- } from './elements/element-data-types';
427
- // `kai-audio-visualizer.shader` takes a ShaderSpec. The element arrived from main
428
- // after this block was written, and prop-types-exported.test.ts caught it, which
429
- // is the point of deriving that list from the facades rather than maintaining it.
430
- export type { ShaderSpec } from './components/audio-visualizer';
@@ -1,174 +0,0 @@
1
- /**
2
- * Pure reductions from AnalyserNode output to the numbers a visualizer draws.
3
- *
4
- * Ported from livekit/components-js `packages/react/src/hooks/useTrackVolume.ts`
5
- * (Apache License 2.0). Both the dB normalization curve AND the band split
6
- * are carried over so our output matches theirs frame for frame: the split
7
- * is upstream's linear-proportional chunking (their PR #1265). An interim
8
- * revision here spaced the buckets geometrically to serve a wide raw-mic
9
- * window; both reverted together -- see `reduceToBands` below and the
10
- * DEFAULTS docstring in use-audio-analysis.ts for the full story.
11
- */
12
-
13
- /** dB floor of the normalization curve. Below this reads as silence. */
14
- const MIN_DB = -100;
15
- /** dB ceiling. Above this saturates. */
16
- const MAX_DB = -10;
17
-
18
- /**
19
- * Map one `getFloatFrequencyData` decibel value to 0..1.
20
- *
21
- * The `sqrt` at the end is a perceptual curve, not a normalization step: it
22
- * lifts quiet detail so low-level audio still moves the bars visibly.
23
- */
24
- export function normalizeDb(value: number): number {
25
- if (value === -Infinity) return 0;
26
- const clamped = Math.max(MIN_DB, Math.min(MAX_DB, value));
27
- return Math.sqrt(1 - (clamped * -1) / 100);
28
- }
29
-
30
- /**
31
- * Average a slice of the frequency spectrum into `bands` buckets.
32
- *
33
- * `loPass` / `hiPass` are BIN INDICES relative to `fftSize`, not frequencies.
34
- * Upstream's naming is misleading; the behavior is a plain array slice.
35
- *
36
- * Bucket edges are LINEAR-PROPORTIONAL across `[loPass, hiPass]` -- upstream
37
- * LiveKit's own distribution (`useMultibandTrackVolume`, useTrackVolume.ts
38
- * lines 141-153, rewritten to proportional chunking by their PR #1265): each
39
- * band averages an equal consecutive run of bins, `floor(i * total / bands)`
40
- * to `floor((i + 1) * total / bands)`, and a run that comes out empty reads
41
- * 0 (their `chunkLength === 0` branch). With the default window's 100 bins
42
- * and 5 bands, that is 20 bins averaged per band -- the averaging itself is
43
- * part of upstream's idle stillness, diluting any single flickering bin
44
- * 20:1 (noise-floor diagnosis, table B).
45
- *
46
- * An interim revision spaced these buckets geometrically so that a wide
47
- * raw-microphone window (bins 4-120) kept its upper buckets alive. That
48
- * concentrated the noisiest few low bins into band 0 undiluted, which the
49
- * centre-out mirror below then promoted to the CENTRE element -- the
50
- * measured core of the "white noise when the mic is on" defect (diagnosis
51
- * table B: geometric band 0 idled at 0.52 on real room tone where this
52
- * split reads 0.32 over the same wide window, and exactly 0 over the
53
- * default one). Reverted to upstream's split when the default window
54
- * reverted; the mirror stays, it is orthogonal.
55
- */
56
- export function reduceToBands(
57
- freq: Float32Array,
58
- bands: number,
59
- loPass: number,
60
- hiPass: number,
61
- ): number[] {
62
- // `slice` clamps both ends into the buffer and yields an empty window when
63
- // hiPass <= loPass -- every bucket then reads 0 below, no special case.
64
- const window = freq.slice(Math.max(0, loPass), Math.max(0, hiPass));
65
- const total = window.length;
66
- const out: number[] = [];
67
-
68
- for (let i = 0; i < bands; i++) {
69
- const start = Math.floor((i * total) / bands);
70
- const end = Math.floor(((i + 1) * total) / bands);
71
- if (end <= start) {
72
- out.push(0);
73
- continue;
74
- }
75
- let sum = 0;
76
- for (let j = start; j < end; j++) sum += normalizeDb(window[j] as number);
77
- out.push(sum / (end - start));
78
- }
79
-
80
- return out;
81
- }
82
-
83
- /** Root-mean-square of `getByteFrequencyData`, scaled to 0..1. */
84
- export function reduceToVolume(bytes: Uint8Array): number {
85
- if (bytes.length === 0) return 0;
86
- let sum = 0;
87
- for (let i = 0; i < bytes.length; i++) {
88
- const a = bytes[i] as number;
89
- sum += a * a;
90
- }
91
- return Math.sqrt(sum / bytes.length) / 255;
92
- }
93
-
94
- /**
95
- * Resize a caller-supplied band array to exactly `count` entries. Extra values
96
- * are dropped; a short array repeats its last value (0 when empty) so a
97
- * consumer passing the wrong length gets a sane picture instead of holes.
98
- */
99
- export function normalizeVolumeBands(bands: number[], count: number): number[] {
100
- if (bands.length === count) return bands;
101
- if (bands.length > count) return bands.slice(0, count);
102
- const last = bands[bands.length - 1] ?? 0;
103
- return [...bands, ...new Array(count - bands.length).fill(last)];
104
- }
105
-
106
- /**
107
- * Maps a smaller, ordered set of "half" band values (index 0 = loudest,
108
- * typically lowest frequency) onto `count` positions laid out in a straight
109
- * line -- a row of bars, or a row of grid columns -- centre-outward and
110
- * mirrored: band 0 lands on the centre (an odd `count`) or the centre PAIR
111
- * (an even one, both positions sharing band 0), band 1 on the pair either
112
- * side of that, and so on outward to the two ends.
113
- *
114
- * Every scripted state in this component is already centre-oriented
115
- * (`listening` blinks the centre bar, `connecting` sweeps inward from both
116
- * ends, `thinking` sweeps the middle row) -- `speaking` ramping left to
117
- * right, because it fed the analyser's raw band order straight across, was
118
- * the one state inconsistent with that. This closes that gap.
119
- *
120
- * `halfBands` should have exactly `Math.ceil(count / 2)` entries -- the
121
- * caller is responsible for requesting that many bands from
122
- * `useAudioAnalysis`, matching counts exactly rather than leaning on
123
- * `normalizeVolumeBands`'s pad-by-repeating-the-last-value, which would
124
- * produce a subtly wrong (not obviously broken) shape here. A shorter
125
- * `halfBands` still degrades sanely: the outermost positions repeat the last
126
- * value available rather than reading `undefined`.
127
- */
128
- export function mirrorBandsCenterOut(halfBands: number[], count: number): number[] {
129
- const center = (count - 1) / 2;
130
- const out: number[] = new Array(count);
131
- for (let i = 0; i < count; i++) {
132
- const ring = Math.floor(Math.abs(i - center));
133
- out[i] = halfBands[Math.min(ring, halfBands.length - 1)] ?? 0;
134
- }
135
- return out;
136
- }
137
-
138
- /**
139
- * Maps a smaller, ordered set of "half" band values onto `count` positions
140
- * arranged around a RING (radial's spokes), mirrored left-right across a
141
- * single vertical axis rather than fanned from a linear centre: index 0 and
142
- * index `count / 2` (for an even `count`; radial warns when `count` is not
143
- * divisible by 4, so this is the common case) are each their own fixed
144
- * point of the reflection and both land band 0, and every other index pairs
145
- * with its mirror partner at `count - i`, sharing a band.
146
- *
147
- * Radial's own geometry (`variant-radial.tsx`) places index 0 at the
148
- * BOTTOM of the ring (`rotate(0) translateY(radius)`, and CSS rotation is
149
- * clockwise for a positive angle), so band 0 (usually the loudest) reads at
150
- * the bottom, fading toward the top -- not band 0 at both the top AND the
151
- * bottom, which would need a second, horizontal mirror axis on top of this
152
- * one. Chosen over that fuller symmetry because it reuses the exact same
153
- * `Math.ceil(count / 2)` band request as the linear mirror above (one rule
154
- * for every variant, not a radial-specific band count), and because the
155
- * task's request was "spikes vary in length, not moving as one" -- this
156
- * already delivers that. If bottom-loud/top-quiet reads wrong in practice,
157
- * swapping to true 4-fold symmetry is a self-contained change here, not
158
- * elsewhere.
159
- *
160
- * For an even `count`, the antipodal index (`count / 2`) needs one more
161
- * distinct band than the linear mirror does (rings run 0..`count / 2`, not
162
- * 0..`count / 2 - 1`) -- with only `Math.ceil(count / 2)` bands available,
163
- * that one index clamps to the same value as its nearest neighbour rather
164
- * than getting a unique band. A minor, deliberate simplification for the
165
- * same one-rule-for-every-variant reason above.
166
- */
167
- export function mirrorBandsAroundRing(halfBands: number[], count: number): number[] {
168
- const out: number[] = new Array(count);
169
- for (let i = 0; i < count; i++) {
170
- const ring = Math.min(i, count - i);
171
- out[i] = halfBands[Math.min(ring, halfBands.length - 1)] ?? 0;
172
- }
173
- return out;
174
- }
@@ -1,63 +0,0 @@
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>;