@kitn.ai/ui 0.27.0 → 0.29.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 (612) hide show
  1. package/README.md +10 -2
  2. package/dist/{Icon-BnFKqqtY.js → Icon-DObhsRtm.js} +1 -1
  3. package/dist/{action-icons-CBskfBMz.js → action-icons-CcgNN2oT.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-CjRU3JgV.js +1 -0
  7. package/dist/arrow-left-Bnpb1UEW.js +1 -0
  8. package/dist/{artifact-CvXEm1lS.js → artifact-Bwt7OgcR.js} +1 -1
  9. package/dist/{attachments-C43ZegEq.js → attachments-Qr4kg-2b.js} +1 -1
  10. package/dist/{audio-visualizer-B-79y1Tj.js → audio-visualizer-DToYdfSc.js} +1 -1
  11. package/dist/{badge-BpUbq8c0.js → badge-CdEu_jn2.js} +1 -1
  12. package/dist/{bell-sn17Ip9v.js → bell-DQAAOpDz.js} +1 -1
  13. package/dist/{button-BH6rN0U-.js → button-DkuOnGLy.js} +1 -1
  14. package/dist/{card-renderer-Cb1gQmth.js → card-renderer-Jx70m6_l.js} +1 -1
  15. package/dist/{card-routing-DifQgS7n.js → card-routing-0YidER_3.js} +1 -1
  16. package/dist/check-njkVdZu2.js +1 -0
  17. package/dist/{checkbox-Dc9Yov_B.js → checkbox-D7iRB3nL.js} +1 -1
  18. package/dist/{checkbox-group-B1kDLLYk.js → checkbox-group-B2_rpoPM.js} +1 -1
  19. package/dist/chevron-down-B72s6PXR.js +1 -0
  20. package/dist/chevron-right-BatuHzUm.js +1 -0
  21. package/dist/{choice-card-BT3c1S8g.js → choice-card-m0BYqqOK.js} +1 -1
  22. package/dist/circle-check-B62pODB3.js +1 -0
  23. package/dist/{circle-x-wobWkoSx.js → circle-x-BPG0iPst.js} +1 -1
  24. package/dist/circle-zx0ByzY9.js +1 -0
  25. package/dist/code-block-ClMLKb7C.js +1 -0
  26. package/dist/{collapsible-CPJbf6FM.js → collapsible-B4DlWicL.js} +1 -1
  27. package/dist/components/chat-thread.d.ts +89 -1
  28. package/dist/components/conversation-item.d.ts +16 -0
  29. package/dist/components/conversation-panel.d.ts +29 -0
  30. package/dist/components/home-panel.d.ts +34 -0
  31. package/dist/components/widget-tab-bar.d.ts +16 -0
  32. package/dist/{composer-CjngLzal.js → composer-sQ0HcvyG.js} +3 -3
  33. package/dist/{confirm-card-DCx_A4bU.js → confirm-card-rQWDQsnC.js} +1 -1
  34. package/dist/construct-cli.es.js +185 -17
  35. package/dist/construct.d.ts +5 -0
  36. package/dist/construct.js +327 -0
  37. package/dist/{context-BY8V-Nlp.js → context-0kg4ZX1J.js} +1 -1
  38. package/dist/controllable-CnGpMF6r.js +1 -0
  39. package/dist/conversation-item-BxwQLaFJ.js +1 -0
  40. package/dist/conversation-list-BCfGN1JU.js +1 -0
  41. package/dist/{copy-B6DO4PqB.js → copy-n9u9rqpi.js} +1 -1
  42. package/dist/core-C8fzo39E.js +1 -12
  43. package/dist/{create-tween-CnMHviKB.js → create-tween-C-q-JCM-.js} +1 -1
  44. package/dist/{create-tween-D1aiGZZh.js → create-tween-CRrJXxBd.js} +1 -1
  45. package/dist/{create-tween-BPzaefTp.js → create-tween-DZ3RRDHD.js} +1 -1
  46. package/dist/{create-tween-DUSQUKpr.js → create-tween-uPkArjIG.js} +1 -1
  47. package/dist/custom-elements.json +51 -2
  48. package/dist/{default-input-CucQEOqH.js → default-input-CaMrJkgH.js} +1 -1
  49. package/dist/define-By-uL588.js +1 -0
  50. package/dist/define.js +2 -2
  51. package/dist/define.server.js +2 -2
  52. package/dist/{disclosure-CbLtajUQ.js → disclosure-WUImBbDv.js} +1 -1
  53. package/dist/{dropdown-BwhViJFd.js → dropdown-wZVeJOMd.js} +1 -1
  54. package/dist/elements/agent-card.js +1 -1
  55. package/dist/elements/artifact.js +1 -1
  56. package/dist/elements/attachments.js +1 -1
  57. package/dist/elements/audio-visualizer.js +1 -1
  58. package/dist/elements/avatar.js +1 -1
  59. package/dist/elements/badge.js +1 -1
  60. package/dist/elements/button.js +1 -1
  61. package/dist/elements/card.js +1 -1
  62. package/dist/elements/cards.js +1 -1
  63. package/dist/elements/chain-of-thought.js +1 -1
  64. package/dist/elements/chat-scope-picker.js +1 -1
  65. package/dist/elements/chat-workspace.js +1 -1
  66. package/dist/elements/chat.js +1 -1
  67. package/dist/elements/checkbox-group.js +1 -1
  68. package/dist/elements/checkbox.js +1 -1
  69. package/dist/elements/checkpoint.js +1 -1
  70. package/dist/elements/choice.js +1 -1
  71. package/dist/elements/coachmark.js +1 -1
  72. package/dist/elements/code-block.js +1 -1
  73. package/dist/elements/command.js +1 -1
  74. package/dist/elements/compare.js +1 -1
  75. package/dist/elements/composer.js +1 -1
  76. package/dist/elements/confirm-card.js +1 -1
  77. package/dist/elements/context-meter.js +1 -1
  78. package/dist/elements/conversation-item.js +1 -1
  79. package/dist/elements/conversation-list.js +1 -1
  80. package/dist/elements/dialog.js +1 -1
  81. package/dist/elements/dock.js +3 -3
  82. package/dist/elements/dropdown.js +1 -1
  83. package/dist/elements/editable-label.js +1 -1
  84. package/dist/elements/embed.js +1 -1
  85. package/dist/elements/empty.js +1 -1
  86. package/dist/elements/feedback-bar.js +1 -1
  87. package/dist/elements/file-tree.js +1 -1
  88. package/dist/elements/file-upload.js +1 -1
  89. package/dist/elements/form.js +1 -1
  90. package/dist/elements/hover-card.js +1 -1
  91. package/dist/elements/icon.js +1 -1
  92. package/dist/elements/image.js +1 -1
  93. package/dist/elements/input.js +1 -1
  94. package/dist/elements/kbd.js +1 -1
  95. package/dist/elements/link-preview.js +1 -1
  96. package/dist/elements/loader.js +1 -1
  97. package/dist/elements/markdown.js +1 -1
  98. package/dist/elements/menu.js +1 -1
  99. package/dist/elements/message-skills.js +1 -1
  100. package/dist/elements/message.js +1 -1
  101. package/dist/elements/model-switcher.js +1 -1
  102. package/dist/elements/nav.js +1 -1
  103. package/dist/elements/notice.js +1 -1
  104. package/dist/elements/pane-grid.js +1 -1
  105. package/dist/elements/pane-group.js +1 -1
  106. package/dist/elements/pane.js +1 -1
  107. package/dist/elements/popover.js +1 -1
  108. package/dist/elements/progress-bar.js +1 -1
  109. package/dist/elements/prompt-dock.js +1 -1
  110. package/dist/elements/prompt-input.js +1 -1
  111. package/dist/elements/prompt-suggestions.js +1 -1
  112. package/dist/elements/radio-group.js +1 -1
  113. package/dist/elements/reasoning.js +1 -1
  114. package/dist/elements/remote.js +1 -1
  115. package/dist/elements/resizable.js +1 -1
  116. package/dist/elements/response-stream.js +1 -1
  117. package/dist/elements/screen.js +1 -1
  118. package/dist/elements/scroll-area.js +1 -1
  119. package/dist/elements/scroll-button.js +1 -1
  120. package/dist/elements/search.js +1 -1
  121. package/dist/elements/segmented.js +1 -1
  122. package/dist/elements/select.js +1 -1
  123. package/dist/elements/separator.js +1 -1
  124. package/dist/elements/setting-item.js +1 -1
  125. package/dist/elements/settings-group.js +1 -1
  126. package/dist/elements/skeleton.js +1 -1
  127. package/dist/elements/slider.js +1 -1
  128. package/dist/elements/source.js +1 -1
  129. package/dist/elements/status.js +1 -1
  130. package/dist/elements/switch.js +1 -1
  131. package/dist/elements/tabs.js +1 -1
  132. package/dist/elements/tasks.js +1 -1
  133. package/dist/elements/text-shimmer.js +1 -1
  134. package/dist/elements/thinking-bar.js +1 -1
  135. package/dist/elements/thread.js +1 -1
  136. package/dist/elements/toast.js +1 -1
  137. package/dist/elements/tool.js +1 -1
  138. package/dist/elements/tooltip.js +1 -1
  139. package/dist/elements/voice-input.js +1 -1
  140. package/dist/elements/voice-output.js +1 -1
  141. package/dist/elements.d.ts +20 -4
  142. package/dist/{ellipsis-DFr4Vqr3.js → ellipsis-CbOpJnU3.js} +1 -1
  143. package/dist/{embed-5s_vU4J0.js → embed-CrfjkbUG.js} +1 -1
  144. package/dist/engine-javascript-C1x7zo1_.js +1 -141
  145. package/dist/{external-link-u9d85ORQ.js → external-link-ByXAwBBQ.js} +1 -1
  146. package/dist/{file-text-CX7_x42o.js → file-text-DMib2qwt.js} +1 -1
  147. package/dist/{file-tree-D3kBjXI5.js → file-tree-CJqM2aP7.js} +1 -1
  148. package/dist/{folder-V-YdIL8f.js → folder-_BAb929C.js} +1 -1
  149. package/dist/{form-BRNUMCN2.js → form-DSZgZQZk.js} +1 -1
  150. package/dist/{hover-card-DaeiYrTA.js → hover-card-BQbul9eq.js} +1 -1
  151. package/dist/{icon-BpixdZNq.js → icon-CdcfRhYI.js} +1 -1
  152. package/dist/index.d.ts +3 -1
  153. package/dist/index.js +2842 -2703
  154. package/dist/index.server.js +2820 -2681
  155. package/dist/{info-8mFsIjS3.js → info-DsFjGuI_.js} +1 -1
  156. package/dist/{input-d1Yuu-hz.js → input-DKbmkMos.js} +1 -1
  157. package/dist/kai.es.js +1 -1
  158. package/dist/{kbd-961zMPFB.js → kbd-PvdGhX4s.js} +1 -1
  159. package/dist/{link-preview-DIIbV2Sd.js → link-preview-DbM1866N.js} +1 -1
  160. package/dist/{link-DlZZBGaR.js → link-zF8PzWfF.js} +1 -1
  161. package/dist/{loader-YQszHFaW.js → loader-BM4CEz4G.js} +1 -1
  162. package/dist/{markdown-CVk1MPsj.js → markdown-LMvmAyBk.js} +7 -7
  163. package/dist/mcp.es.js +79 -5
  164. package/dist/{message-CwKVEdZg.js → message-BSsgvHvf.js} +1 -1
  165. package/dist/{message-DS8lzHc1.js → message-BYZECyek.js} +1 -1
  166. package/dist/message-circle-DruwObfX.js +1 -0
  167. package/dist/message-square-BG6q6mlm.js +1 -0
  168. package/dist/{minimize-2-UEZmP2QT.js → minimize-2-BQRoBV1V.js} +1 -1
  169. package/dist/{model-switcher-Kk1jEQ5t.js → model-switcher-CMpCOYcB.js} +1 -1
  170. package/dist/{overlay-C1od6LOz.js → overlay-Cb-MkyDa.js} +1 -1
  171. package/dist/{panel-right-ryET0yyn.js → panel-right-i8warFxT.js} +1 -1
  172. package/dist/{paperclip-BDNoZFJP.js → paperclip-ByY3UVO6.js} +1 -1
  173. package/dist/play-BvKKq3fX.js +1 -0
  174. package/dist/primitives/conversation-store.d.ts +54 -0
  175. package/dist/{progress-bar-BvYX0aoy.js → progress-bar-jVAHvMUf.js} +1 -1
  176. package/dist/{prompt-suggestion-BRFu2lcu.js → prompt-suggestion-CD-qtNgC.js} +1 -1
  177. package/dist/{radio-DcL23cNJ.js → radio-BsoBMhkF.js} +1 -1
  178. package/dist/react/index.d.ts +393 -0
  179. package/dist/react.js +20 -20
  180. package/dist/{reasoning-Cackq4Rh.js → reasoning-4kBPtlTx.js} +1 -1
  181. package/dist/register-impl-B1hLkrI8.js +424 -0
  182. package/dist/{resizable-Cp9HUYih.js → resizable-uPmY9VY-.js} +1 -1
  183. package/dist/{rotate-ccw-0DLRDHH5.js → rotate-ccw-B2xn93py.js} +1 -1
  184. package/dist/{rotate-cw-DOB9IGcU.js → rotate-cw-CMVLoCyH.js} +1 -1
  185. package/dist/{scroll-area-emVmWP4K.js → scroll-area-BqLUo8ZZ.js} +1 -1
  186. package/dist/{scroll-button-CeP_gv1x.js → scroll-button-DslXiJyL.js} +1 -1
  187. package/dist/{select-CWmu00tS.js → select-2cLRtPGT.js} +1 -1
  188. package/dist/{separator-CE6vly6z.js → separator-BWQtNJcM.js} +1 -1
  189. package/dist/{settings-CE-78SvZ.js → settings-BBR63jLg.js} +1 -1
  190. package/dist/{settings-group-ZFWNxFQR.js → settings-group-B2ciy-Iw.js} +1 -1
  191. package/dist/{skeleton-BebdP4mf.js → skeleton-CkHI-HgC.js} +1 -1
  192. package/dist/{slider-BAKRYUlz.js → slider-DDR9U-i0.js} +1 -1
  193. package/dist/{solid-BE5ui6sy.js → solid-BzCFdL25.js} +7720 -7058
  194. package/dist/{solid-DFhsce3O.js → solid-DruVOXnf.js} +5864 -5283
  195. package/dist/solid.d.ts +6 -2
  196. package/dist/solid.js +217 -210
  197. package/dist/solid.server.js +217 -210
  198. package/dist/{source-B0FlguSx.js → source-GEnFF528.js} +1 -1
  199. package/dist/{star-CBMZvLuN.js → star-CilHq8GP.js} +1 -1
  200. package/dist/store-Ciyk6eZG.js +1 -0
  201. package/dist/{switch-CViARZCy.js → switch-KkeQIbuH.js} +1 -1
  202. package/dist/{tasks-card-MjCcOhR_.js → tasks-card-BrN4bggJ.js} +1 -1
  203. package/dist/{text-shimmer-DKlwRF2G.js → text-shimmer-Dcj1MHuq.js} +1 -1
  204. package/dist/{textarea-3ay2Me2-.js → textarea-Dpvbngbg.js} +1 -1
  205. package/dist/theme.tokens.css +28 -0
  206. package/dist/{thumbs-up-DQcu2HMO.js → thumbs-up-CsT9Wzb9.js} +1 -1
  207. package/dist/{toast-store-C6yKOhbk.js → toast-store-tgK6MuMv.js} +1 -1
  208. package/dist/{tool-BCYNlfKy.js → tool-DzUjIBT8.js} +1 -1
  209. package/dist/{tooltip-05zI4hjs.js → tooltip-Bkkg_4t0.js} +1 -1
  210. package/dist/{trash-2-BR1RxGky.js → trash-2-jBKxjGGQ.js} +1 -1
  211. package/dist/{triangle-alert-DHohDOCy.js → triangle-alert-DlQ68ppf.js} +1 -1
  212. package/dist/types.d.ts +48 -3
  213. package/dist/ui/dock.d.ts +29 -0
  214. package/dist/{upload-BbGW6A_u.js → upload-TcAHXv9W.js} +1 -1
  215. package/dist/{url-scheme-policy-DHpoTJwB.js → url-scheme-policy-DR5DgvkM.js} +1 -1
  216. package/dist/{use-card-resolution-CJW4grFa.js → use-card-resolution-DaZqAdWf.js} +1 -1
  217. package/dist/{variant-aurora-xiMPty8f.js → variant-aurora-BhLuYxJR.js} +1 -1
  218. package/dist/{variant-aurora-BUOVgPOB.js → variant-aurora-CNmfHhcx.js} +2 -2
  219. package/dist/{variant-aurora-CUsUJvFI.js → variant-aurora-D6GsdTPA.js} +2 -2
  220. package/dist/{variant-aurora-CW2i4bfr.js → variant-aurora-DbW_OWL2.js} +1 -1
  221. package/dist/{variant-custom-D91HjAKz.js → variant-custom-BRvaNHSi.js} +1 -1
  222. package/dist/{variant-custom-BQtOnmeO.js → variant-custom-BvYHR62b.js} +1 -1
  223. package/dist/{variant-custom-CAnzzppW.js → variant-custom-DMTrEO5w.js} +2 -2
  224. package/dist/{variant-custom-CAm9L-E5.js → variant-custom-DV2x254s.js} +2 -2
  225. package/dist/{variant-wave-Ca1Ls4_y.js → variant-wave-BNMGrDfj.js} +2 -2
  226. package/dist/{variant-wave-uY5crU_K.js → variant-wave-BpDd8t3Z.js} +1 -1
  227. package/dist/{variant-wave-CxX39DKd.js → variant-wave-CyBueXj9.js} +2 -2
  228. package/dist/{variant-wave-DYyzIIZv.js → variant-wave-sp-qwsdI.js} +1 -1
  229. package/dist/x-Z5UntkIJ.js +1 -0
  230. package/frameworks/react/index.tsx +14 -4
  231. package/llms-full.txt +7 -2
  232. package/package.json +16 -16
  233. package/src/elements/element-meta.json +49 -6
  234. package/theme.css +28 -0
  235. package/bin/route.test.js +0 -58
  236. package/dist/arrow-down-Br0qtpsz.js +0 -1
  237. package/dist/arrow-left-Dj7xgE12.js +0 -1
  238. package/dist/check-DPeeMUYx.js +0 -1
  239. package/dist/chevron-down-CHSWk7ZT.js +0 -1
  240. package/dist/chevron-right-B7l_fMgx.js +0 -1
  241. package/dist/circle-Bb0yOpqM.js +0 -1
  242. package/dist/circle-check-BGZpCiz7.js +0 -1
  243. package/dist/code-block-CUQ5mtv0.js +0 -1
  244. package/dist/controllable-D43BKmtX.js +0 -1
  245. package/dist/conversation-list-D4lLU_yS.js +0 -1
  246. package/dist/define-CGGX-7Vg.js +0 -1
  247. package/dist/message-circle-Xf8Q-vZp.js +0 -1
  248. package/dist/message-square-Cxnwgkns.js +0 -1
  249. package/dist/play-OFIvYXUQ.js +0 -1
  250. package/dist/register-impl-C7rENvPK.js +0 -424
  251. package/dist/store-7eoadydQ.js +0 -1
  252. package/dist/x-C5m1JFgi.js +0 -1
  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 -131
  263. package/src/agent-tooling/construct/codegen.ts +0 -1353
  264. package/src/agent-tooling/construct/construct.v1.schema.json +0 -250
  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 -23
  269. package/src/agent-tooling/construct/schema.ts +0 -371
  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 -518
  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 -218
  336. package/src/components/conversation-list.tsx +0 -429
  337. package/src/components/dismissed-stub.tsx +0 -80
  338. package/src/components/embed.tsx +0 -200
  339. package/src/components/empty.tsx +0 -177
  340. package/src/components/feedback-bar.tsx +0 -166
  341. package/src/components/file-tree.tsx +0 -530
  342. package/src/components/file-upload.tsx +0 -167
  343. package/src/components/form-widgets.tsx +0 -525
  344. package/src/components/form.tsx +0 -1296
  345. package/src/components/image.tsx +0 -65
  346. package/src/components/link-preview.tsx +0 -195
  347. package/src/components/loader.tsx +0 -367
  348. package/src/components/markdown.tsx +0 -162
  349. package/src/components/message-skills.tsx +0 -40
  350. package/src/components/message.tsx +0 -765
  351. package/src/components/model-switcher.tsx +0 -132
  352. package/src/components/prompt-input.tsx +0 -188
  353. package/src/components/prompt-suggestion.tsx +0 -150
  354. package/src/components/reasoning.tsx +0 -293
  355. package/src/components/response-compare-types.ts +0 -152
  356. package/src/components/response-compare.tsx +0 -455
  357. package/src/components/response-stream.tsx +0 -109
  358. package/src/components/screen.tsx +0 -181
  359. package/src/components/scroll-button.tsx +0 -93
  360. package/src/components/source.tsx +0 -192
  361. package/src/components/tasks-card.tsx +0 -801
  362. package/src/components/text-shimmer.tsx +0 -37
  363. package/src/components/thinking-bar.tsx +0 -50
  364. package/src/components/thread.tsx +0 -228
  365. package/src/components/toast.tsx +0 -503
  366. package/src/components/tool-classify.ts +0 -26
  367. package/src/components/tool-types.ts +0 -49
  368. package/src/components/tool.tsx +0 -190
  369. package/src/components/use-card-resolution.ts +0 -44
  370. package/src/components/voice-input.tsx +0 -222
  371. package/src/components/voice-output.tsx +0 -242
  372. package/src/components/workspace-shell.tsx +0 -285
  373. package/src/diagnostics/hook.ts +0 -352
  374. package/src/diagnostics/index.ts +0 -82
  375. package/src/diagnostics/report-request.ts +0 -296
  376. package/src/elements/agent-card.tsx +0 -67
  377. package/src/elements/artifact.tsx +0 -194
  378. package/src/elements/attachments.tsx +0 -140
  379. package/src/elements/audio-visualizer.tsx +0 -227
  380. package/src/elements/autoloader.ts +0 -89
  381. package/src/elements/avatar.tsx +0 -33
  382. package/src/elements/badge.tsx +0 -32
  383. package/src/elements/button.tsx +0 -149
  384. package/src/elements/card.tsx +0 -133
  385. package/src/elements/cards.tsx +0 -266
  386. package/src/elements/chain-of-thought.tsx +0 -141
  387. package/src/elements/chat-scope-picker.tsx +0 -65
  388. package/src/elements/chat-types.ts +0 -102
  389. package/src/elements/chat-workspace.tsx +0 -188
  390. package/src/elements/chat.tsx +0 -212
  391. package/src/elements/checkbox-group.tsx +0 -164
  392. package/src/elements/checkbox.tsx +0 -134
  393. package/src/elements/checkpoint.tsx +0 -47
  394. package/src/elements/choice.tsx +0 -100
  395. package/src/elements/coachmark.tsx +0 -90
  396. package/src/elements/code-block.tsx +0 -60
  397. package/src/elements/command.tsx +0 -197
  398. package/src/elements/compare.tsx +0 -111
  399. package/src/elements/compiled.css +0 -2
  400. package/src/elements/composer.tsx +0 -162
  401. package/src/elements/confirm-card.tsx +0 -76
  402. package/src/elements/context-meter.tsx +0 -107
  403. package/src/elements/conversation-item.tsx +0 -120
  404. package/src/elements/conversation-list.tsx +0 -203
  405. package/src/elements/css.ts +0 -5
  406. package/src/elements/default-input.tsx +0 -392
  407. package/src/elements/define-entry.ts +0 -12
  408. package/src/elements/define.tsx +0 -563
  409. package/src/elements/diagnostic-events.ts +0 -114
  410. package/src/elements/dialog.tsx +0 -145
  411. package/src/elements/disclosure.ts +0 -95
  412. package/src/elements/dock.tsx +0 -215
  413. package/src/elements/dropdown.tsx +0 -123
  414. package/src/elements/editable-label.tsx +0 -140
  415. package/src/elements/element-data-types.ts +0 -152
  416. package/src/elements/element-diagnostics.ts +0 -392
  417. package/src/elements/element-manifest.json +0 -354
  418. package/src/elements/element-nonscalar.json +0 -185
  419. package/src/elements/element-types.d.ts +0 -4337
  420. package/src/elements/embed.tsx +0 -35
  421. package/src/elements/empty.tsx +0 -29
  422. package/src/elements/feedback-bar.tsx +0 -66
  423. package/src/elements/file-tree.tsx +0 -62
  424. package/src/elements/file-upload.tsx +0 -44
  425. package/src/elements/form.tsx +0 -94
  426. package/src/elements/hover-card.tsx +0 -80
  427. package/src/elements/icon.tsx +0 -41
  428. package/src/elements/image.tsx +0 -32
  429. package/src/elements/input.tsx +0 -492
  430. package/src/elements/kbd.tsx +0 -45
  431. package/src/elements/link-preview.tsx +0 -34
  432. package/src/elements/loader.tsx +0 -25
  433. package/src/elements/markdown.tsx +0 -38
  434. package/src/elements/menu.tsx +0 -241
  435. package/src/elements/message-skills.tsx +0 -83
  436. package/src/elements/message.tsx +0 -361
  437. package/src/elements/model-switcher.tsx +0 -121
  438. package/src/elements/nav.tsx +0 -87
  439. package/src/elements/notice.tsx +0 -53
  440. package/src/elements/pane-grid.tsx +0 -111
  441. package/src/elements/pane-group.tsx +0 -119
  442. package/src/elements/pane.tsx +0 -129
  443. package/src/elements/popover.tsx +0 -81
  444. package/src/elements/progress-bar.tsx +0 -39
  445. package/src/elements/prompt-dock.tsx +0 -82
  446. package/src/elements/prompt-input.tsx +0 -240
  447. package/src/elements/prompt-suggestions.tsx +0 -113
  448. package/src/elements/radio-group.tsx +0 -129
  449. package/src/elements/reasoning.tsx +0 -71
  450. package/src/elements/register-impl.ts +0 -148
  451. package/src/elements/register.ts +0 -76
  452. package/src/elements/remote.tsx +0 -225
  453. package/src/elements/resizable.globals.d.ts +0 -36
  454. package/src/elements/resizable.tsx +0 -704
  455. package/src/elements/response-stream.tsx +0 -40
  456. package/src/elements/screen.tsx +0 -90
  457. package/src/elements/scroll-area.tsx +0 -33
  458. package/src/elements/scroll-button.tsx +0 -179
  459. package/src/elements/search.tsx +0 -185
  460. package/src/elements/segmented.tsx +0 -129
  461. package/src/elements/select.tsx +0 -165
  462. package/src/elements/separator.tsx +0 -36
  463. package/src/elements/setting-item.tsx +0 -50
  464. package/src/elements/settings-group.tsx +0 -37
  465. package/src/elements/skeleton.tsx +0 -45
  466. package/src/elements/slider.tsx +0 -171
  467. package/src/elements/slot-text.ts +0 -73
  468. package/src/elements/slots.ts +0 -787
  469. package/src/elements/source.tsx +0 -126
  470. package/src/elements/status.tsx +0 -42
  471. package/src/elements/styles.css +0 -328
  472. package/src/elements/switch.tsx +0 -118
  473. package/src/elements/tabs.tsx +0 -95
  474. package/src/elements/tasks.tsx +0 -103
  475. package/src/elements/text-shimmer.tsx +0 -28
  476. package/src/elements/thinking-bar.tsx +0 -43
  477. package/src/elements/thread.tsx +0 -139
  478. package/src/elements/toast.tsx +0 -106
  479. package/src/elements/tool.tsx +0 -78
  480. package/src/elements/tooltip.tsx +0 -85
  481. package/src/elements/validate-messages.ts +0 -76
  482. package/src/elements/voice-input.tsx +0 -100
  483. package/src/elements/voice-output.tsx +0 -82
  484. package/src/index.ts +0 -428
  485. package/src/primitives/audio-bands.ts +0 -174
  486. package/src/primitives/card-component-types.ts +0 -63
  487. package/src/primitives/card-contract.ts +0 -80
  488. package/src/primitives/card-data-types.ts +0 -361
  489. package/src/primitives/card-host.tsx +0 -37
  490. package/src/primitives/card-recovery.ts +0 -160
  491. package/src/primitives/card-registry.tsx +0 -78
  492. package/src/primitives/card-resolution.ts +0 -36
  493. package/src/primitives/card-routing.ts +0 -85
  494. package/src/primitives/card-schemas/artifact.schema.json +0 -92
  495. package/src/primitives/card-schemas/card-envelope.schema.json +0 -14
  496. package/src/primitives/card-schemas/card-event.schema.json +0 -12
  497. package/src/primitives/card-schemas/choice.schema.json +0 -75
  498. package/src/primitives/card-schemas/confirm.schema.json +0 -65
  499. package/src/primitives/card-schemas/embed.schema.json +0 -63
  500. package/src/primitives/card-schemas/form.result.schema.json +0 -7
  501. package/src/primitives/card-schemas/form.schema.json +0 -53
  502. package/src/primitives/card-schemas/link.schema.json +0 -54
  503. package/src/primitives/card-schemas/tasks.result.schema.json +0 -16
  504. package/src/primitives/card-schemas/tasks.schema.json +0 -83
  505. package/src/primitives/card-tags.ts +0 -61
  506. package/src/primitives/card-validate-cards.ts +0 -255
  507. package/src/primitives/card-validate-schemas.ts +0 -58
  508. package/src/primitives/card-validate.ts +0 -131
  509. package/src/primitives/chat-config.tsx +0 -103
  510. package/src/primitives/composer-model.ts +0 -49
  511. package/src/primitives/composer-triggers.ts +0 -35
  512. package/src/primitives/controllable.ts +0 -21
  513. package/src/primitives/create-kai-chat.ts +0 -66
  514. package/src/primitives/create-tween.ts +0 -266
  515. package/src/primitives/embed-providers.ts +0 -254
  516. package/src/primitives/field-mask.ts +0 -256
  517. package/src/primitives/field-semantics.ts +0 -115
  518. package/src/primitives/highlighter.ts +0 -157
  519. package/src/primitives/input-mask.ts +0 -853
  520. package/src/primitives/link-preview.ts +0 -87
  521. package/src/primitives/message-feedback.ts +0 -124
  522. package/src/primitives/pdf-preview.ts +0 -121
  523. package/src/primitives/toast-store.ts +0 -338
  524. package/src/primitives/url-scheme-policy.ts +0 -70
  525. package/src/primitives/use-audio-analysis.ts +0 -340
  526. package/src/primitives/use-auto-resize.ts +0 -31
  527. package/src/primitives/use-resize-observer.ts +0 -45
  528. package/src/primitives/use-sequencer.ts +0 -72
  529. package/src/primitives/use-speech-recognition.ts +0 -146
  530. package/src/primitives/use-stick-to-bottom.ts +0 -75
  531. package/src/primitives/use-text-stream.ts +0 -143
  532. package/src/primitives/use-voice-recorder.ts +0 -62
  533. package/src/primitives/visualizer-sequences.ts +0 -350
  534. package/src/remote/host-embed.ts +0 -345
  535. package/src/remote/index.ts +0 -2
  536. package/src/remote/origin.ts +0 -30
  537. package/src/remote/provider-runtime.ts +0 -262
  538. package/src/remote/provider.ts +0 -2
  539. package/src/remote/validate.ts +0 -22
  540. package/src/remote/version.ts +0 -12
  541. package/src/remote/wire.ts +0 -48
  542. package/src/schemas/from-tool-call.ts +0 -151
  543. package/src/schemas/index.ts +0 -341
  544. package/src/schemas/provider-subsets.ts +0 -538
  545. package/src/schemas/registry.ts +0 -355
  546. package/src/schemas/tool-defs.ts +0 -793
  547. package/src/solid.ts +0 -165
  548. package/src/state/index.ts +0 -44
  549. package/src/state/messages.ts +0 -53
  550. package/src/state/mock.ts +0 -297
  551. package/src/state/parts.ts +0 -295
  552. package/src/state/persistence.ts +0 -180
  553. package/src/state/stream.ts +0 -246
  554. package/src/state/suggestions.ts +0 -9
  555. package/src/state/threads.ts +0 -142
  556. package/src/test-utils/fake-clock.ts +0 -88
  557. package/src/types.ts +0 -53
  558. package/src/ui/action-icons.ts +0 -53
  559. package/src/ui/agent-card.tsx +0 -218
  560. package/src/ui/avatar.tsx +0 -23
  561. package/src/ui/badge.tsx +0 -21
  562. package/src/ui/button.tsx +0 -49
  563. package/src/ui/card.tsx +0 -245
  564. package/src/ui/checkbox-group.tsx +0 -153
  565. package/src/ui/checkbox.tsx +0 -63
  566. package/src/ui/collapsible.tsx +0 -163
  567. package/src/ui/command.tsx +0 -103
  568. package/src/ui/dialog.tsx +0 -223
  569. package/src/ui/dock.tsx +0 -584
  570. package/src/ui/dropdown.tsx +0 -636
  571. package/src/ui/editable-label.tsx +0 -112
  572. package/src/ui/hover-card.tsx +0 -345
  573. package/src/ui/icon.tsx +0 -167
  574. package/src/ui/input.tsx +0 -391
  575. package/src/ui/kbd.tsx +0 -118
  576. package/src/ui/nav.tsx +0 -282
  577. package/src/ui/notice.tsx +0 -84
  578. package/src/ui/overlay.tsx +0 -277
  579. package/src/ui/pane-grid.tsx +0 -117
  580. package/src/ui/pane-group.tsx +0 -291
  581. package/src/ui/pane.tsx +0 -193
  582. package/src/ui/popover.tsx +0 -106
  583. package/src/ui/progress-bar.tsx +0 -83
  584. package/src/ui/prompt-dock.tsx +0 -145
  585. package/src/ui/radio.tsx +0 -150
  586. package/src/ui/resizable.tsx +0 -693
  587. package/src/ui/scroll-area.tsx +0 -26
  588. package/src/ui/segmented.tsx +0 -109
  589. package/src/ui/select.tsx +0 -168
  590. package/src/ui/separator.tsx +0 -10
  591. package/src/ui/settings-group.tsx +0 -67
  592. package/src/ui/skeleton.tsx +0 -73
  593. package/src/ui/slider.tsx +0 -178
  594. package/src/ui/status.tsx +0 -48
  595. package/src/ui/switch.tsx +0 -119
  596. package/src/ui/tabs.tsx +0 -168
  597. package/src/ui/textarea.tsx +0 -21
  598. package/src/ui/tooltip.tsx +0 -118
  599. package/src/utils/cn.ts +0 -30
  600. package/src/wire/chunk.ts +0 -248
  601. package/src/wire/consume.ts +0 -599
  602. package/src/wire/diagnostics.ts +0 -727
  603. package/src/wire/encode-probe.ts +0 -214
  604. package/src/wire/encode.ts +0 -947
  605. package/src/wire/files.ts +0 -342
  606. package/src/wire/formats/anthropic.ts +0 -274
  607. package/src/wire/formats/openai.ts +0 -228
  608. package/src/wire/index.ts +0 -95
  609. package/src/wire/media-types.ts +0 -344
  610. package/src/wire/read.ts +0 -396
  611. package/src/wire/sink-helpers.ts +0 -50
  612. package/src/wire/sse.ts +0 -153
@@ -1,134 +0,0 @@
1
- import { createEffect, createSignal, untrack } from 'solid-js';
2
- import { defineWebComponent } from './define';
3
- import { Checkbox } from '../ui/checkbox';
4
-
5
- interface Props extends Record<string, unknown> {
6
- /** Controlled checked state. Settable and reflected to the `checked` attribute.
7
- * `el.checked = true` (or `<kai-checkbox checked>`) drives it; ticking the box
8
- * updates it and fires `kai-change`. Read `el.checked` for live state. */
9
- checked?: boolean;
10
- /** Initial checked state on mount (uncontrolled seed). Bare attribute
11
- * (`<kai-checkbox default-checked>`) turns it on. */
12
- defaultChecked?: boolean;
13
- /** The mixed state, for a parent box whose children are partly ticked. Visual
14
- * plus an accessibility hint: the box still reports `checked === false`. */
15
- indeterminate?: boolean;
16
- /** Disable interaction. */
17
- disabled?: boolean;
18
- /** Set the native `required` attribute, and nothing more. Whether an unticked box
19
- * is an error is the application's rule, not the kit's. */
20
- required?: boolean;
21
- /** Accessible label. The visible text beside the box is the consumer's to render. */
22
- label?: string;
23
- /** Form-control name (paired with `value`). */
24
- name?: string;
25
- /** Submitted value when checked (paired with `name`). Defaults to `'on'`. */
26
- value?: string;
27
- }
28
-
29
- /** Events fired by `<kai-checkbox>`. */
30
- interface Events {
31
- /** The box was ticked or unticked. */
32
- 'kai-change': { checked: boolean };
33
- }
34
-
35
- /**
36
- * `<kai-checkbox>` — a checkbox over a real `<input type="checkbox">`. Drive/read
37
- * its state with the `checked` property (settable + reflected to the `checked`
38
- * attribute, so `:host([checked])` and `el.checked` see live state); seed the
39
- * initial state with `default-checked` and read changes from `kai-change`.
40
- *
41
- * ```html
42
- * <label>
43
- * <kai-checkbox default-checked label="Stream responses"></kai-checkbox>
44
- * Stream responses
45
- * </label>
46
- * <script type="module">
47
- * import '@kitn.ai/ui/elements';
48
- * const box = document.querySelector('kai-checkbox');
49
- * box.addEventListener('kai-change', (e) => console.log(e.detail.checked));
50
- * box.checked = false; // drive it (no kai-change — the host already knows)
51
- * box.indeterminate = true;
52
- * box.toggle(); // flip it (fires kai-change)
53
- * </script>
54
- * ```
55
- */
56
- defineWebComponent<Props, Events>('kai-checkbox', {
57
- checked: undefined,
58
- defaultChecked: undefined,
59
- indeterminate: undefined,
60
- disabled: undefined,
61
- required: undefined,
62
- label: undefined,
63
- name: undefined,
64
- value: undefined,
65
- }, (props, ctx) => {
66
- const { element, dispatch, flag, expose } = ctx;
67
-
68
- // Lift the on/off state into the facade and drive Checkbox CONTROLLED so the host
69
- // can read it (`el.checked` / `:host([checked])`) and set it after mount. Seed from
70
- // `defaultChecked` (or a bare `checked` attribute present on mount). This is
71
- // kai-switch's structure, deliberately — same contract, same failure modes.
72
- const [checked, setChecked] = createSignal(flag('defaultChecked') || flag('checked'));
73
-
74
- // Coerce anything arriving through the `checked` setter (a JS assignment, or the
75
- // write-back `attributeChangedCallback` fires when the attribute changes) to a
76
- // boolean, falling back to attribute presence to match `flag`'s semantics. The
77
- // `undefined` write-back `toggleAttribute` triggers thus resolves to the attribute
78
- // just written, equals the signal, and is absorbed by the guard below — no attr⇄prop
79
- // feedback loop.
80
- const coerce = (v: unknown): boolean =>
81
- v === true ? true
82
- : v === false ? false
83
- : element.hasAttribute('checked') && element.getAttribute('checked') !== 'false';
84
-
85
- // Apply a new checked state and fire kai-change once (the user path). No-op while
86
- // disabled.
87
- const apply = (next: boolean) => {
88
- if (flag('disabled')) return;
89
- if (untrack(checked) === next) return;
90
- setChecked(next);
91
- dispatch('kai-change', { checked: next });
92
- };
93
-
94
- // Reads return LIVE state; host writes drive it WITHOUT firing kai-change — the
95
- // host already knows what it set. The equality guard kills the reflect write-back.
96
- Object.defineProperty(element, 'checked', {
97
- get: () => checked(),
98
- set: (v: unknown) => { const next = coerce(v); if (untrack(checked) !== next) setChecked(next); },
99
- configurable: true,
100
- enumerable: true,
101
- });
102
-
103
- // Reflect internal checked → the `[checked]` host attribute (for `:host([checked])`).
104
- createEffect(() => {
105
- const c = checked();
106
- if (c !== element.hasAttribute('checked')) element.toggleAttribute('checked', c);
107
- });
108
-
109
- expose({
110
- /** Flip the box and fire `kai-change` (no-op while disabled). */
111
- toggle: () => apply(!untrack(checked)),
112
- /** Focus the inner input (the host element can't reach it). */
113
- focus: (options?: FocusOptions) =>
114
- element.shadowRoot?.querySelector<HTMLInputElement>('input[type="checkbox"]')?.focus(options),
115
- });
116
-
117
- return (
118
- <>
119
- {/* Base sets `:host{display:block}`; a checkbox flows inline beside its text. */}
120
- <style>{':host{display:inline-flex}'}</style>
121
- <Checkbox
122
- checked={checked()}
123
- indeterminate={flag('indeterminate')}
124
- disabled={flag('disabled')}
125
- required={flag('required')}
126
- aria-label={props.label as string | undefined}
127
- aria-checked={flag('indeterminate') ? 'mixed' : undefined}
128
- name={props.name as string | undefined}
129
- value={(props.value as string | undefined) ?? 'on'}
130
- onChange={(e) => apply(e.currentTarget.checked)}
131
- />
132
- </>
133
- );
134
- });
@@ -1,47 +0,0 @@
1
- import { Show } from 'solid-js';
2
- import { defineWebComponent } from './define';
3
- import { Checkpoint, CheckpointIcon, CheckpointTrigger } from '../components/checkpoint';
4
-
5
- interface Props extends Record<string, unknown> {
6
- /** Optional text beside the icon. */
7
- label?: string;
8
- /** Tooltip on hover. */
9
- tooltip?: string;
10
- /** Visual button style. */
11
- variant?: 'ghost' | 'default' | 'outline';
12
- /** Button size (use an `icon*` size for an icon-only checkpoint). */
13
- size?: 'sm' | 'md' | 'lg' | 'icon' | 'icon-sm';
14
- }
15
-
16
- /** Events fired by `<kai-checkpoint>`. */
17
- interface Events {
18
- /** The checkpoint was clicked. */
19
- 'kai-select': void;
20
- }
21
-
22
- /**
23
- * `<kai-checkpoint>` — a bookmark/checkpoint button (optional tooltip + label).
24
- * Emits `select`.
25
- */
26
- defineWebComponent<Props, Events>('kai-checkpoint', {
27
- label: undefined,
28
- tooltip: undefined,
29
- variant: 'ghost',
30
- size: 'sm',
31
- }, (props, { dispatch }) => (
32
- <Checkpoint>
33
- <CheckpointTrigger
34
- tooltip={props.tooltip}
35
- // Icon-only (no visible label) needs an accessible name: prefer the
36
- // tooltip text, else a sensible default. With a visible label, the text
37
- // is the name — leave aria-label unset so it isn't duplicated.
38
- aria-label={props.label ? undefined : (props.tooltip ?? 'Checkpoint')}
39
- variant={props.variant}
40
- size={props.size}
41
- onClick={() => dispatch('kai-select')}
42
- >
43
- <CheckpointIcon />
44
- <Show when={props.label}><span class="ml-1.5">{props.label}</span></Show>
45
- </CheckpointTrigger>
46
- </Checkpoint>
47
- ));
@@ -1,100 +0,0 @@
1
- import { defineWebComponent } from './define';
2
- import { ChoiceCard, type ChoiceCardData, type ChoiceController } from '../components/choice-card';
3
- import type { CardResolution } from '../primitives/card-contract';
4
-
5
- interface Props extends Record<string, unknown> {
6
- /** The choice definition (the CardEnvelope.data). Set as a JS PROPERTY:
7
- * `el.data = { prompt, options:[…], allowOther?, submitLabel? }`. Import
8
- * `ChoiceCardData` from `@kitn.ai/ui` for the full shape. */
9
- data?: ChoiceCardData;
10
- /** Stable card id correlating every emitted CardEvent. Attribute: `card-id`. */
11
- cardId?: string;
12
- /** Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`. */
13
- heading?: string;
14
- /** Set when the user resolved this card; renders the read-only view. Property:
15
- * `el.resolution = { kind:'action', action:'…' }`. */
16
- resolution?: Record<string, unknown>;
17
- /** Controlled selection: the selected option id. When set, the consumer owns
18
- * the current pick (RadioGroup `value`). Attribute: `value`. */
19
- value?: string;
20
- /** Option id to pre-select on mount (uncontrolled seed). Attribute: `default-value`. */
21
- defaultValue?: string;
22
- /** Disable the whole radiogroup + Submit (e.g. while the agent is busy).
23
- * Attribute: `disabled`. */
24
- disabled?: boolean;
25
- }
26
-
27
- /** Events fired by `<kai-choice>`. (The terminal submit/dismiss/reopen flow is
28
- * emitted via the bubbling `kai-card` contract event — listen for `kai-card`.) */
29
- interface Events {
30
- /** The selection changed BEFORE submit (a row click or the `select()` method).
31
- * Distinct from the terminal `action` verb on the `kai-card` contract event. */
32
- 'kai-value-change': { value: string };
33
- }
34
-
35
- /**
36
- * `<kai-choice>` — a single-select **"pick one of N rich options"** card (set via the
37
- * `data` property): a prompt + a radiogroup of list rows. Clicking a row **selects** it
38
- * (no emit, fires `kai-value-change`); the **Submit** button below then emits the Card
39
- * contract's **`action`** verb up a bubbling **`kai-card`** CustomEvent (`{ kind:'action',
40
- * cardId, action: option.id, payload? }`) and resolves the card so the same pick can't
41
- * double-fire. An optional `allowOther` free-text escape appends a selectable "Other…" row
42
- * that reveals an inline input; the same Submit emits `action:'__other__'` with `{ text }`.
43
- * Also emits `ready` on mount and `error` for a malformed definition (inline error). Routes
44
- * through a `CardProvider` when present, else the bubbling `kai-card` event. Isolated in
45
- * Shadow DOM; theme-aware via the shared tokens.
46
- *
47
- * Supports controlled selection (`value`), an uncontrolled seed (`defaultValue`), a
48
- * group-level `disabled`, and instance methods `focus()`/`select(id)`/`send()`/
49
- * `dismiss()`/`reopen()`.
50
- */
51
- defineWebComponent<Props, Events>(
52
- 'kai-choice',
53
- {
54
- data: undefined,
55
- cardId: undefined,
56
- heading: undefined,
57
- resolution: undefined,
58
- value: undefined,
59
- defaultValue: undefined,
60
- disabled: undefined,
61
- },
62
- (props, { element, dispatch, flag, expose }) => {
63
- // Pattern C: the ChoiceCard owns selection/submit/dismiss state and hands up a
64
- // controller; the facade captures it and exposes delegating methods. The card's
65
- // own paths still fire (select → kai-value-change; send → kai-card `action`;
66
- // dismiss/reopen → kai-card `dismiss`/`reopen`).
67
- let controller: ChoiceController | undefined;
68
- expose({
69
- /** Focus the radiogroup roving tab stop (or the Other input when selected). */
70
- focus: (options?: FocusOptions) => controller?.focus(options),
71
- /** Select an option by id locally: no emit, fires kai-value-change (same as a
72
- * row click). Lets a consumer pre-highlight or drive selection externally. */
73
- select: (optionId: string) => controller?.select(optionId),
74
- /** Submit the current selection: emits the `action` verb on kai-card and
75
- * resolves the card (single-shot). Named `send`, not `submit`, per the shared
76
- * vocabulary. */
77
- send: () => controller?.send(),
78
- /** Trigger the dismiss path: emits `dismiss` on kai-card and optimistically
79
- * collapses the card to its re-openable stub. */
80
- dismiss: () => controller?.dismiss(),
81
- /** Re-open a dismissed card from its stub: emits `reopen` on kai-card. */
82
- reopen: () => controller?.reopen(),
83
- });
84
-
85
- return (
86
- <ChoiceCard
87
- data={props.data}
88
- cardId={props.cardId ?? (element.id || 'kai-choice')}
89
- heading={props.heading}
90
- resolution={props.resolution as CardResolution | undefined}
91
- value={props.value}
92
- defaultValue={props.defaultValue}
93
- disabled={flag('disabled')}
94
- onValueChange={(value) => dispatch('kai-value-change', { value })}
95
- controllerRef={(c) => (controller = c)}
96
- hostElement={element}
97
- />
98
- );
99
- },
100
- );
@@ -1,90 +0,0 @@
1
- import { defineWebComponent } from './define';
2
- import { Coachmark, type CoachmarkController } from '../components/coachmark';
3
- import { wireDisclosure } from './disclosure';
4
-
5
- interface Props extends Record<string, unknown> {
6
- /** Drive/observe open state (Shoelace-style: settable + reflected to the `open`
7
- * attribute; the element still self-manages). Set `el.open = true`, or
8
- * `<kai-coachmark open>`; listen for `kai-open-change`. */
9
- open?: boolean;
10
- /** Initial open state on mount (uncontrolled seed). */
11
- defaultOpen?: boolean;
12
- /** The bold title. Named `headline` because `title` collides with the global
13
- * `HTMLElement.title` attribute (it throws at registration). */
14
- headline?: string;
15
- /** A small badge pill beside the headline (e.g. "New"). */
16
- badge?: string;
17
- /** Floating placement relative to the anchor (default `bottom`). */
18
- placement?: string;
19
- /** Color tone: `primary` (default, theme accent), `info` (blue), `success`
20
- * (green), `warning` (amber), or `error` (red), reusing the kit's tool hues. */
21
- tone?: 'primary' | 'info' | 'success' | 'warning' | 'error';
22
- /** Render the arrow that points at the anchor (default `true`). Set
23
- * `arrow="false"` for a plain bubble with no pointer. */
24
- arrow?: boolean;
25
- }
26
-
27
- /** Events fired by `<kai-coachmark>`. */
28
- interface Events {
29
- /** The × dismiss button was pressed. The consumer records that this hint was
30
- * seen so it won't show again. */
31
- 'kai-dismiss': Record<string, never>;
32
- /** The coachmark opened or closed (a method, the ×, or a driven `open`). */
33
- 'kai-open-change': { open: boolean };
34
- }
35
-
36
- /**
37
- * `<kai-coachmark>` — an anchored onboarding hint bubble with an arrow. It WRAPS
38
- * a trigger (the default slot) and points a primary-colored bubble at it: a small
39
- * `badge` pill, a bold `headline`, the `content` slot body, and a dismiss ×.
40
- *
41
- * ```html
42
- * <kai-coachmark default-open headline="Cowork has a new home" badge="New">
43
- * <button>Cowork</button>
44
- * <span slot="content">Chat with Claude or switch to Cowork from here.</span>
45
- * </kai-coachmark>
46
- * <script type="module">
47
- * document.querySelector('kai-coachmark')
48
- * .addEventListener('kai-dismiss', () => localStorage.setItem('cowork-hint', 'seen'));
49
- * </script>
50
- * ```
51
- *
52
- * Open state is the standard disclosure surface: settable+reflecting `open`,
53
- * `kai-open-change`, and `show()`/`hide()`/`toggle()`; seed with `default-open`.
54
- * Parts: `bubble` · `arrow` · `badge` · `title` · `dismiss`.
55
- */
56
- defineWebComponent<Props, Events>('kai-coachmark', {
57
- open: undefined,
58
- defaultOpen: undefined,
59
- headline: undefined,
60
- badge: undefined,
61
- placement: undefined,
62
- tone: undefined,
63
- arrow: true,
64
- }, (props, ctx) => {
65
- const { flag, dispatch } = ctx;
66
- let api: CoachmarkController | undefined;
67
-
68
- // The standard disclosure surface: settable+reflecting `open`, kai-open-change,
69
- // show/hide/toggle. See ./disclosure. This is the SOLE emitter of kai-open-change.
70
- wireDisclosure(ctx, () => api, () => props.open);
71
-
72
- // headline/badge are scalar string props (NOT slots) — pass through directly so
73
- // the component's own `Show when={…}` gating drives whether each region renders.
74
- // The body is the `content` slot; an empty `<slot>` renders nothing.
75
- return (
76
- <Coachmark
77
- defaultOpen={flag('defaultOpen')}
78
- arrow={flag('arrow')}
79
- placement={props.placement as never}
80
- tone={props.tone as 'primary' | 'info' | 'success' | 'warning' | 'error' | undefined}
81
- headline={props.headline as string | undefined}
82
- badge={props.badge as string | undefined}
83
- content={<slot name="content" />}
84
- controllerRef={(a) => (api = a)}
85
- onDismiss={() => dispatch('kai-dismiss', {})}
86
- >
87
- <slot />
88
- </Coachmark>
89
- );
90
- });
@@ -1,60 +0,0 @@
1
- import { defineWebComponent } from './define';
2
- import { CodeBlock, CodeBlockCode } from '../components/code-block';
3
- import { ChatConfig, useChatConfig, type ProseSize } from '../primitives/chat-config';
4
-
5
- interface Props extends Record<string, unknown> {
6
- /** The source code to render. */
7
- code: string;
8
- /** Language grammar (e.g. `js`, `python`). Defaults to `tsx`. */
9
- language?: string;
10
- /** Shiki theme name. */
11
- codeTheme?: string;
12
- /** Disable syntax highlighting (renders plain text, no Shiki). */
13
- codeHighlight?: boolean;
14
- /**
15
- * Show the copy button. **Defaults to ON**, because this element is documented
16
- * as shipping one. Opt out with `copy="false"` or `el.copy = false`.
17
- */
18
- copy?: boolean;
19
- /** Code text sizing. */
20
- proseSize?: ProseSize;
21
- }
22
-
23
- /**
24
- * `<kai-code-block>` — one syntax-highlighted code block (with a copy button).
25
- * Code via the `code` property; `language`/`code-theme` via attributes.
26
- *
27
- * The copy button is ON by default and writes the raw `code` property, never the
28
- * highlighted markup. Turn it off with `copy="false"`. Style it via
29
- * `kai-code-block::part(copy)`.
30
- */
31
- defineWebComponent<Props>('kai-code-block', {
32
- code: '',
33
- language: undefined,
34
- codeTheme: 'github-dark-dimmed',
35
- codeHighlight: true,
36
- copy: true,
37
- proseSize: 'sm',
38
- }, (props, { flag }) => {
39
- const outer = useChatConfig();
40
- return (
41
- <ChatConfig
42
- proseSize={props.proseSize}
43
- codeTheme={props.codeTheme}
44
- codeHighlight={flag('codeHighlight')}
45
- portalMount={outer.portalMount()}
46
- >
47
- {/* The ELEMENT opts in; the Solid `CodeBlock` default stays OFF so markdown and
48
- artifact are untouched. `copyText` is the raw property — the button must
49
- never copy what Shiki produced. `copy` is NOT reflected, matching
50
- `codeHighlight` beside it: reflecting a default-ON flag would stamp `copy=""`
51
- on every instance for no benefit, and the runtime-attribute hazard that
52
- earned `reflectFlag` elsewhere needs a BARE attribute, which is a no-op on a
53
- flag that is already on. The meaningful spelling, `copy="false"`, is a real
54
- prop change and is pinned as one. */}
55
- <CodeBlock copy={flag('copy')} copyText={props.code}>
56
- <CodeBlockCode code={props.code} language={props.language} />
57
- </CodeBlock>
58
- </ChatConfig>
59
- );
60
- });
@@ -1,197 +0,0 @@
1
- import { createEffect, createMemo, createSignal, createUniqueId, on } from 'solid-js';
2
- import { CommandList, type CommandGroup } from '../ui/command';
3
- import { defineWebComponent } from './define';
4
- import type { KaiCommandItem } from './element-data-types';
5
-
6
- // The item shape lives in ./element-data-types so the ROOT entry can re-export it
7
- // (a per-element module's shipped .d.ts is `export {};`). Re-exported here so
8
- // `import type { KaiCommandItem } from './command'` keeps working.
9
- export type { KaiCommandItem } from './element-data-types';
10
-
11
- interface Props extends Record<string, unknown> {
12
- /** Flat list of items. Set as a JS property, not an HTML attribute. */
13
- items?: KaiCommandItem[];
14
- /** Placeholder text for the search input. */
15
- placeholder?: string;
16
- /** Label shown when no items match the current query. */
17
- emptyLabel?: string;
18
- }
19
-
20
- interface Events {
21
- /** Fired when the user selects an item (click or Enter). */
22
- 'kai-select': { id: string };
23
- /** Fired on every keystroke in the search input. */
24
- 'kai-query-change': { value: string };
25
- /** Fired when the highlighted/active item changes, via Arrow keys or when
26
- * filtering re-clamps the active row. `id` is the newly active item's id, or
27
- * `undefined` when no item is active (e.g. the filtered list is empty). Lets a
28
- * host preview the active item without committing a selection. */
29
- 'kai-active-change': { id: string | undefined };
30
- }
31
-
32
- /**
33
- * `<kai-command>` — a grouped, filterable command/mention palette.
34
- *
35
- * Set the `items` property in JavaScript (array, not attribute), listen for
36
- * `kai-select` to know which item was picked, and `kai-query-change` to mirror
37
- * the search query to your own logic (e.g. async server-side filtering).
38
- *
39
- * ```html
40
- * <kai-command placeholder="Search…"></kai-command>
41
- * <script type="module">
42
- * import '@kitn.ai/ui/elements';
43
- * const el = document.querySelector('kai-command');
44
- * el.items = [
45
- * { id: 'foo', label: 'Foo', icon: 'search', shortcut: 'Mod+K', group: 'Recent' },
46
- * ];
47
- * el.addEventListener('kai-select', (e) => console.log(e.detail.id));
48
- * </script>
49
- * ```
50
- */
51
- defineWebComponent<Props, Events>('kai-command', {
52
- items: undefined,
53
- placeholder: undefined,
54
- emptyLabel: undefined,
55
- }, (props, { dispatch, element, expose }) => {
56
- const listboxId = createUniqueId();
57
- const [query, setQuery] = createSignal('');
58
- const [activeId, setActiveId] = createSignal<string | undefined>(undefined);
59
-
60
- /** Items cast to the correct type; defaults to empty array. */
61
- const allItems = () => (props.items as KaiCommandItem[] | undefined) ?? [];
62
-
63
- /** Items filtered by the current query (label or description, case-insensitive). */
64
- const filteredItems = createMemo<KaiCommandItem[]>(() => {
65
- const q = query().toLowerCase();
66
- if (!q) return allItems();
67
- return allItems().filter(
68
- (item) =>
69
- item.label.toLowerCase().includes(q) ||
70
- (item.description?.toLowerCase().includes(q) ?? false),
71
- );
72
- });
73
-
74
- /** Filtered items grouped by `group`, preserving first-appearance order. */
75
- const groupedItems = createMemo<CommandGroup[]>(() => {
76
- const groups: CommandGroup[] = [];
77
- for (const item of filteredItems()) {
78
- let g = groups.find((x) => x.group === item.group);
79
- if (!g) {
80
- g = { group: item.group, items: [] };
81
- groups.push(g);
82
- }
83
- g.items.push({ id: item.id, label: item.label, icon: item.icon, description: item.description, shortcut: item.shortcut });
84
- }
85
- return groups;
86
- });
87
-
88
- /** Flat ordered array of filtered item ids — used for keyboard navigation. */
89
- const flatIds = createMemo<string[]>(() => filteredItems().map((item) => item.id));
90
-
91
- /** Clamp/reset activeId when the filtered list changes. */
92
- createEffect(() => {
93
- const ids = flatIds();
94
- const current = activeId();
95
- if (!current || !ids.includes(current)) {
96
- setActiveId(ids[0]);
97
- }
98
- });
99
-
100
- /** Mirror the active/highlighted item out as `kai-active-change` whenever it
101
- * changes (Arrow keys or a filter-driven re-clamp). Skips the initial settle
102
- * by only firing when the value actually differs from the previous one. */
103
- createEffect(on(activeId, (id, prev) => {
104
- if (id !== prev) dispatch('kai-active-change', { id });
105
- }));
106
-
107
- function select(id: string) {
108
- dispatch('kai-select', { id });
109
- }
110
-
111
- function handleInput(e: Event) {
112
- const value = (e.currentTarget as HTMLInputElement).value;
113
- setQuery(value);
114
- dispatch('kai-query-change', { value });
115
- }
116
-
117
- function handleKeyDown(e: KeyboardEvent) {
118
- const ids = flatIds();
119
- if (!ids.length) return;
120
-
121
- const current = activeId();
122
- const idx = current !== undefined ? ids.indexOf(current) : -1;
123
-
124
- if (e.key === 'ArrowDown') {
125
- e.preventDefault();
126
- setActiveId(ids[(idx + 1) % ids.length]);
127
- } else if (e.key === 'ArrowUp') {
128
- e.preventDefault();
129
- setActiveId(ids[(idx - 1 + ids.length) % ids.length]);
130
- } else if (e.key === 'Enter') {
131
- e.preventDefault();
132
- const id = activeId();
133
- if (id !== undefined) select(id);
134
- } else if (e.key === 'Escape') {
135
- e.preventDefault();
136
- setQuery('');
137
- dispatch('kai-query-change', { value: '' });
138
- }
139
- }
140
-
141
- // ── Imperative API (instance methods on the host) ──────────────────────────
142
- // Counterpart to the kai-* events: lets a host make the palette type-ready and
143
- // reset its query without reaching into the shadow root.
144
- expose({
145
- /** Focus the search combobox input inside the shadow root so the palette is
146
- * type-ready on demand (Shadow-DOM autofocus is unreliable, so hosts call
147
- * this after opening the palette). */
148
- focus: (options?: FocusOptions) =>
149
- element.shadowRoot
150
- ?.querySelector<HTMLInputElement>('input[role="combobox"], input')
151
- ?.focus(options),
152
- /** Blur the focused search input. */
153
- blur: () =>
154
- element.shadowRoot
155
- ?.querySelector<HTMLInputElement>('input[role="combobox"], input')
156
- ?.blur(),
157
- /** Reset the search query to empty, re-showing all items, and fire
158
- * `kai-query-change` with `''`. Mirrors the Escape-key behavior. */
159
- clear: () => {
160
- setQuery('');
161
- dispatch('kai-query-change', { value: '' });
162
- },
163
- });
164
-
165
- return (
166
- <div class="flex flex-col overflow-hidden">
167
- <div class="border-b border-border px-3 py-2">
168
- <input
169
- type="text"
170
- role="combobox"
171
- aria-expanded="true"
172
- aria-haspopup="listbox"
173
- aria-autocomplete="list"
174
- aria-controls={listboxId}
175
- value={query()}
176
- placeholder={(props.placeholder as string | undefined) ?? 'Search…'}
177
- // No `focus-visible:outline-none` here. It used to suppress the base
178
- // focus ring and put nothing in its place, so keyboard users had no
179
- // indication of where they were in the palette.
180
- class="w-full bg-transparent text-sm text-foreground placeholder:text-muted-foreground"
181
- onInput={handleInput}
182
- onKeyDown={handleKeyDown}
183
- />
184
- </div>
185
- <div class="overflow-y-auto max-h-[320px]">
186
- <CommandList
187
- id={listboxId}
188
- ariaLabel="Results"
189
- groups={groupedItems()}
190
- activeId={activeId()}
191
- onSelect={select}
192
- emptyLabel={(props.emptyLabel as string | undefined) ?? 'No results'}
193
- />
194
- </div>
195
- </div>
196
- );
197
- });