@kitn.ai/ui 0.16.0 → 0.18.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 (493) hide show
  1. package/README.md +55 -17
  2. package/dist/components/artifact.d.ts +39 -1
  3. package/dist/components/attachment-types.d.ts +12 -0
  4. package/dist/components/attachments.d.ts +2 -10
  5. package/dist/components/card.d.ts +27 -0
  6. package/dist/components/chain-of-thought.d.ts +78 -2
  7. package/dist/components/chat-scope-picker.d.ts +7 -0
  8. package/dist/components/chat-thread.d.ts +39 -16
  9. package/dist/components/choice-card.d.ts +27 -0
  10. package/dist/components/coachmark.d.ts +49 -0
  11. package/dist/components/composer-dom.d.ts +35 -0
  12. package/dist/components/composer-highlight.d.ts +48 -0
  13. package/dist/components/composer-history.d.ts +34 -0
  14. package/dist/components/composer.d.ts +86 -0
  15. package/dist/components/confirm-card.d.ts +17 -0
  16. package/dist/components/conversation-item.d.ts +9 -0
  17. package/dist/components/conversation-list.d.ts +36 -1
  18. package/dist/components/dismissed-stub.d.ts +22 -0
  19. package/dist/components/file-tree.d.ts +15 -0
  20. package/dist/components/form.d.ts +34 -0
  21. package/dist/components/markdown.d.ts +3 -0
  22. package/dist/components/message.d.ts +71 -2
  23. package/dist/components/model-switcher.d.ts +7 -0
  24. package/dist/components/prompt-input.d.ts +13 -4
  25. package/dist/components/prompt-suggestion.d.ts +9 -1
  26. package/dist/components/reasoning.d.ts +14 -1
  27. package/dist/components/response-compare-types.d.ts +66 -0
  28. package/dist/components/response-compare.d.ts +65 -0
  29. package/dist/components/screen.d.ts +46 -0
  30. package/dist/components/tasks-card.d.ts +50 -1
  31. package/dist/components/toast.d.ts +58 -0
  32. package/dist/components/tool-types.d.ts +10 -0
  33. package/dist/components/tool.d.ts +8 -8
  34. package/dist/components/use-card-resolution.d.ts +10 -6
  35. package/dist/components/voice-input.d.ts +27 -0
  36. package/dist/components/voice-output.d.ts +33 -0
  37. package/dist/core-C8fzo39E.js +12 -0
  38. package/dist/custom-elements.json +8472 -1691
  39. package/dist/elements/agent-card.d.ts +1 -0
  40. package/dist/elements/agent-card.js +1 -0
  41. package/dist/elements/artifact.js +1 -0
  42. package/dist/elements/attachments.js +1 -0
  43. package/dist/elements/autoloader.d.ts +2 -0
  44. package/dist/elements/autoloader.js +1 -0
  45. package/dist/elements/avatar.d.ts +1 -0
  46. package/dist/elements/avatar.js +1 -0
  47. package/dist/elements/badge.d.ts +1 -0
  48. package/dist/elements/badge.js +1 -0
  49. package/dist/elements/button.d.ts +1 -0
  50. package/dist/elements/button.js +1 -0
  51. package/dist/elements/card.js +1 -0
  52. package/dist/elements/cards.d.ts +1 -0
  53. package/dist/elements/cards.js +1 -0
  54. package/dist/elements/chain-of-thought.d.ts +0 -12
  55. package/dist/elements/chain-of-thought.js +1 -0
  56. package/dist/elements/chat-scope-picker.js +1 -0
  57. package/dist/elements/chat-types.d.ts +8 -2
  58. package/dist/elements/chat-workspace.js +1 -0
  59. package/dist/elements/chat.js +1 -0
  60. package/dist/elements/checkpoint.js +1 -0
  61. package/dist/elements/choice.js +1 -0
  62. package/dist/elements/chunks/Icon-DLLBeLG5.js +1 -0
  63. package/dist/elements/chunks/action-icons-UB4V5FNq.js +1 -0
  64. package/dist/elements/chunks/arrow-left-C-gwlUmx.js +1 -0
  65. package/dist/elements/chunks/attachments-CgbErf1r.js +1 -0
  66. package/dist/elements/chunks/badge-DTQpgB6N.js +1 -0
  67. package/dist/elements/chunks/bash-InADTalH.js +1 -0
  68. package/dist/elements/chunks/button-XDUM6lXs.js +1 -0
  69. package/dist/elements/chunks/card-CBlFZ-7I.js +1 -0
  70. package/dist/elements/chunks/card-routing-C986KuUA.js +1 -0
  71. package/dist/elements/chunks/chat-thread-BIhmqwNL.js +1 -0
  72. package/dist/elements/chunks/check-hGUoVIKb.js +1 -0
  73. package/dist/elements/chunks/chevron-down-DDoaSUtO.js +1 -0
  74. package/dist/elements/chunks/chevron-right-CdGEUakB.js +1 -0
  75. package/dist/elements/chunks/circle-BKAZdmzb.js +1 -0
  76. package/dist/elements/chunks/circle-check-CmYG-y3I.js +1 -0
  77. package/dist/elements/chunks/circle-x-DewgAEym.js +1 -0
  78. package/dist/elements/chunks/cn-CU7UAWzk.js +1 -0
  79. package/dist/elements/chunks/code-block-DedwxwFI.js +1 -0
  80. package/dist/elements/chunks/collapsible-FfgmTHtM.js +1 -0
  81. package/dist/elements/chunks/composer-Cfbw5HKT.js +65 -0
  82. package/dist/elements/chunks/context-DwJmxlRE.js +1 -0
  83. package/dist/elements/chunks/conversation-list-DsCQMfPq.js +1 -0
  84. package/dist/elements/chunks/core-AYMC6_lb.js +12 -0
  85. package/dist/elements/chunks/css-M7EaDHN_.js +1 -0
  86. package/dist/elements/chunks/default-input-BuqsoENC.js +1 -0
  87. package/dist/elements/chunks/define-rGsaWsLL.js +1 -0
  88. package/dist/elements/chunks/disclosure-CwoAkpMH.js +1 -0
  89. package/dist/elements/chunks/download-DJ06G3Bz.js +1 -0
  90. package/dist/elements/chunks/dropdown-BFg8ri_R.js +1 -0
  91. package/dist/elements/chunks/ellipsis-dlN6YvGw.js +1 -0
  92. package/dist/elements/chunks/engine-javascript-vq0WuIJl.js +141 -0
  93. package/dist/elements/chunks/external-link-DBX2lc_R.js +1 -0
  94. package/dist/elements/chunks/file-text-HfwUx4F9.js +1 -0
  95. package/dist/elements/chunks/file-tree-C6Toj71u.js +1 -0
  96. package/dist/elements/chunks/folder-MYuqa9Xp.js +1 -0
  97. package/dist/elements/chunks/github-dark-dimmed-DUshB20C.js +1 -0
  98. package/dist/elements/chunks/github-light-JYsPkUQd.js +1 -0
  99. package/dist/elements/chunks/hover-card-gE7iyXdW.js +1 -0
  100. package/dist/elements/chunks/html-CPZ3oZQ7.js +1 -0
  101. package/dist/elements/chunks/icon-Vqz4ivrY.js +1 -0
  102. package/dist/elements/chunks/index-BCRhi84a.js +1 -0
  103. package/dist/elements/chunks/info-B_toFS0l.js +1 -0
  104. package/dist/elements/chunks/input-gzbHYZvQ.js +1 -0
  105. package/dist/elements/chunks/javascript-C25yR2R2.js +1 -0
  106. package/dist/elements/chunks/json-DxJze_jm.js +1 -0
  107. package/dist/elements/chunks/kbd-n49c4KZm.js +1 -0
  108. package/dist/elements/chunks/link-CKPs9yM0.js +1 -0
  109. package/dist/elements/chunks/loader-q6MamGus.js +1 -0
  110. package/dist/elements/chunks/markdown-DBrcqq4S.js +64 -0
  111. package/dist/elements/chunks/message-CTqaYI0s.js +1 -0
  112. package/dist/elements/chunks/message-feedback-Cvzm03w0.js +1 -0
  113. package/dist/elements/chunks/message-square-CUg9eRCi.js +1 -0
  114. package/dist/elements/chunks/minimize-2-l2klxP6K.js +1 -0
  115. package/dist/elements/chunks/model-switcher-CmyjiHO1.js +1 -0
  116. package/dist/elements/chunks/overlay-C8sOYqjT.js +1 -0
  117. package/dist/elements/chunks/paperclip-42Ia7xHD.js +1 -0
  118. package/dist/elements/chunks/progress-bar-tzKMWAwO.js +1 -0
  119. package/dist/elements/chunks/prompt-suggestion-D3F6vP_A.js +1 -0
  120. package/dist/elements/chunks/reasoning-BJNmmyov.js +1 -0
  121. package/dist/elements/chunks/resizable-BRsk19qI.js +1 -0
  122. package/dist/elements/chunks/rotate-cw-BgcggLHC.js +1 -0
  123. package/dist/elements/chunks/scroll-area-CgGbFFbT.js +1 -0
  124. package/dist/elements/chunks/separator-8hM4GdHE.js +1 -0
  125. package/dist/elements/chunks/settings-CaUIYOg-.js +1 -0
  126. package/dist/elements/chunks/settings-group-CYjOVIZQ.js +1 -0
  127. package/dist/elements/chunks/share-BTYM3Ddt.js +1 -0
  128. package/dist/elements/chunks/skeleton-DsTYrPUe.js +1 -0
  129. package/dist/elements/chunks/slots-DkZ-Cmha.js +1 -0
  130. package/dist/elements/chunks/star-9R3LBQ9n.js +1 -0
  131. package/dist/elements/chunks/store-CYl5Y0_u.js +1 -0
  132. package/dist/elements/chunks/svelte--5p79yCD.js +1 -0
  133. package/dist/elements/chunks/text-shimmer-CaYGv8Se.js +1 -0
  134. package/dist/elements/chunks/textarea-NEr2SLcD.js +1 -0
  135. package/dist/elements/chunks/thumbs-up-DZYZkFfc.js +1 -0
  136. package/dist/elements/chunks/toast-store-ClxVZRcc.js +1 -0
  137. package/dist/elements/chunks/tool-CHZOmoe9.js +1 -0
  138. package/dist/elements/chunks/tooltip-WpHElELC.js +1 -0
  139. package/dist/elements/chunks/triangle-alert-BlS80PUg.js +1 -0
  140. package/dist/elements/chunks/tsx-B8rCNbgL.js +1 -0
  141. package/dist/elements/chunks/typescript-RycA9KXf.js +1 -0
  142. package/dist/elements/chunks/use-card-resolution-VSVoxDeJ.js +1 -0
  143. package/dist/elements/chunks/video-DxTPZqT8.js +1 -0
  144. package/dist/elements/chunks/vue-BmIZj4XD.js +1 -0
  145. package/dist/elements/chunks/x-C1qtndxn.js +1 -0
  146. package/dist/elements/coachmark.d.ts +1 -0
  147. package/dist/elements/coachmark.js +1 -0
  148. package/dist/elements/code-block.js +1 -0
  149. package/dist/elements/command.d.ts +1 -0
  150. package/dist/elements/command.js +1 -0
  151. package/dist/elements/compare.d.ts +1 -0
  152. package/dist/elements/compare.js +1 -0
  153. package/dist/elements/composer.d.ts +1 -0
  154. package/dist/elements/composer.js +1 -0
  155. package/dist/elements/confirm-card.js +1 -0
  156. package/dist/elements/context-meter.js +1 -0
  157. package/dist/elements/conversation-list.d.ts +1 -11
  158. package/dist/elements/conversation-list.js +1 -0
  159. package/dist/elements/default-input.d.ts +20 -9
  160. package/dist/elements/define.d.ts +11 -0
  161. package/dist/elements/dialog.d.ts +1 -0
  162. package/dist/elements/dialog.js +1 -0
  163. package/dist/elements/disclosure.d.ts +37 -0
  164. package/dist/elements/editable-label.d.ts +1 -0
  165. package/dist/elements/editable-label.js +1 -0
  166. package/dist/elements/embed.js +1 -0
  167. package/dist/elements/empty.js +1 -0
  168. package/dist/elements/feedback-bar.js +1 -0
  169. package/dist/elements/file-tree.js +1 -0
  170. package/dist/elements/file-upload.js +1 -0
  171. package/dist/elements/form.js +1 -0
  172. package/dist/elements/hover-card.d.ts +1 -0
  173. package/dist/elements/hover-card.js +1 -0
  174. package/dist/elements/icon.d.ts +1 -0
  175. package/dist/elements/icon.js +1 -0
  176. package/dist/elements/image.js +1 -0
  177. package/dist/elements/input.d.ts +1 -0
  178. package/dist/elements/input.js +1 -0
  179. package/dist/elements/kbd.d.ts +1 -0
  180. package/dist/elements/kbd.js +1 -0
  181. package/dist/elements/link-preview.js +1 -0
  182. package/dist/elements/loader.js +1 -0
  183. package/dist/elements/markdown.js +1 -0
  184. package/dist/elements/menu.d.ts +1 -0
  185. package/dist/elements/menu.js +1 -0
  186. package/dist/elements/message-skills.d.ts +0 -16
  187. package/dist/elements/message-skills.js +1 -0
  188. package/dist/elements/message.js +1 -0
  189. package/dist/elements/model-switcher.d.ts +1 -11
  190. package/dist/elements/model-switcher.js +1 -0
  191. package/dist/elements/nav.d.ts +1 -0
  192. package/dist/elements/nav.js +1 -0
  193. package/dist/elements/notice.d.ts +1 -0
  194. package/dist/elements/notice.js +1 -0
  195. package/dist/elements/pane-group.d.ts +1 -0
  196. package/dist/elements/pane-group.js +1 -0
  197. package/dist/elements/pane.d.ts +1 -0
  198. package/dist/elements/pane.js +1 -0
  199. package/dist/elements/popover.js +1 -0
  200. package/dist/elements/progress-bar.d.ts +1 -0
  201. package/dist/elements/progress-bar.js +1 -0
  202. package/dist/elements/prompt-dock.d.ts +1 -0
  203. package/dist/elements/prompt-dock.js +1 -0
  204. package/dist/elements/prompt-input.d.ts +1 -9
  205. package/dist/elements/prompt-input.js +1 -0
  206. package/dist/elements/prompt-suggestions.d.ts +0 -6
  207. package/dist/elements/prompt-suggestions.js +1 -0
  208. package/dist/elements/reasoning.js +1 -0
  209. package/dist/elements/register.d.ts +10 -0
  210. package/dist/elements/remote.js +1 -0
  211. package/dist/elements/resizable.d.ts +1 -17
  212. package/dist/elements/resizable.js +1 -0
  213. package/dist/elements/response-stream.js +14 -0
  214. package/dist/elements/screen.d.ts +1 -0
  215. package/dist/elements/screen.js +1 -0
  216. package/dist/elements/scroll-area.d.ts +1 -0
  217. package/dist/elements/scroll-area.js +1 -0
  218. package/dist/elements/scroll-button.js +1 -0
  219. package/dist/elements/search.d.ts +1 -0
  220. package/dist/elements/search.js +1 -0
  221. package/dist/elements/segmented.d.ts +1 -0
  222. package/dist/elements/segmented.js +1 -0
  223. package/dist/elements/separator.d.ts +1 -0
  224. package/dist/elements/separator.js +1 -0
  225. package/dist/elements/setting-item.d.ts +1 -0
  226. package/dist/elements/setting-item.js +1 -0
  227. package/dist/elements/settings-group.d.ts +1 -0
  228. package/dist/elements/settings-group.js +1 -0
  229. package/dist/elements/skeleton.d.ts +1 -0
  230. package/dist/elements/skeleton.js +1 -0
  231. package/dist/elements/slots.d.ts +176 -0
  232. package/dist/elements/source.d.ts +0 -17
  233. package/dist/elements/source.js +1 -0
  234. package/dist/elements/status.d.ts +1 -0
  235. package/dist/elements/status.js +1 -0
  236. package/dist/elements/switch.js +1 -0
  237. package/dist/elements/tabs.d.ts +1 -0
  238. package/dist/elements/tabs.js +1 -0
  239. package/dist/elements/tasks.js +1 -0
  240. package/dist/elements/text-shimmer.js +1 -0
  241. package/dist/elements/thinking-bar.js +1 -0
  242. package/dist/elements/toast.d.ts +1 -0
  243. package/dist/elements/toast.js +1 -0
  244. package/dist/elements/tool.js +1 -0
  245. package/dist/elements/tooltip.d.ts +1 -0
  246. package/dist/elements/tooltip.js +1 -0
  247. package/dist/elements/voice-input.js +1 -0
  248. package/dist/elements/voice-output.d.ts +1 -0
  249. package/dist/elements/voice-output.js +1 -0
  250. package/dist/elements.d.ts +772 -61
  251. package/dist/engine-javascript-C1x7zo1_.js +141 -0
  252. package/dist/index.d.ts +15 -2
  253. package/dist/index.js +14405 -9810
  254. package/dist/kai.es.js +1 -0
  255. package/dist/llms/llms-full.txt +1234 -107
  256. package/dist/llms/llms.txt +4 -4
  257. package/dist/mcp.es.js +217 -6
  258. package/dist/primitives/card-contract.d.ts +20 -4
  259. package/dist/primitives/card-recovery.d.ts +55 -0
  260. package/dist/primitives/composer-model.d.ts +22 -0
  261. package/dist/primitives/composer-triggers.d.ts +19 -0
  262. package/dist/primitives/create-kai-chat.d.ts +38 -0
  263. package/dist/primitives/message-feedback.d.ts +35 -0
  264. package/dist/primitives/toast-store.d.ts +118 -0
  265. package/dist/primitives/use-speech-recognition.d.ts +26 -0
  266. package/dist/react/index.d.ts +1166 -98
  267. package/dist/react/runtime.d.ts +9 -2
  268. package/dist/react/use-kai-chat.d.ts +41 -0
  269. package/dist/react.js +575 -186
  270. package/dist/register-impl-CYWGkgbI.js +141 -0
  271. package/dist/schemas/choice.schema.json +5 -0
  272. package/dist/schemas/tasks.schema.json +7 -2
  273. package/dist/state/index.d.ts +4 -0
  274. package/dist/state/messages.d.ts +11 -0
  275. package/dist/state/stream.d.ts +22 -0
  276. package/dist/state/suggestions.d.ts +4 -0
  277. package/dist/state.js +117 -0
  278. package/dist/theme.tokens.css +87 -0
  279. package/dist/types.d.ts +4 -0
  280. package/dist/ui/agent-card.d.ts +61 -0
  281. package/dist/ui/button.d.ts +5 -2
  282. package/dist/ui/card.d.ts +61 -0
  283. package/dist/ui/collapsible.d.ts +15 -1
  284. package/dist/ui/command.d.ts +33 -0
  285. package/dist/ui/dialog.d.ts +42 -0
  286. package/dist/ui/dropdown.d.ts +95 -1
  287. package/dist/ui/editable-label.d.ts +26 -0
  288. package/dist/ui/hover-card.d.ts +13 -1
  289. package/dist/ui/icon.d.ts +18 -0
  290. package/dist/ui/input.d.ts +33 -0
  291. package/dist/ui/kbd.d.ts +21 -0
  292. package/dist/ui/nav.d.ts +62 -0
  293. package/dist/ui/notice.d.ts +31 -0
  294. package/dist/ui/overlay.d.ts +12 -0
  295. package/dist/ui/pane-grid.d.ts +58 -0
  296. package/dist/ui/pane-group.d.ts +75 -0
  297. package/dist/ui/pane.d.ts +78 -0
  298. package/dist/ui/popover.d.ts +11 -1
  299. package/dist/ui/progress-bar.d.ts +23 -0
  300. package/dist/ui/prompt-dock.d.ts +96 -0
  301. package/dist/ui/resizable.d.ts +12 -0
  302. package/dist/ui/scroll-area.d.ts +4 -0
  303. package/dist/ui/segmented.d.ts +28 -0
  304. package/dist/ui/settings-group.d.ts +32 -0
  305. package/dist/ui/skeleton.d.ts +12 -0
  306. package/dist/ui/stat.d.ts +16 -0
  307. package/dist/ui/status.d.ts +13 -0
  308. package/dist/ui/switch.d.ts +8 -1
  309. package/dist/ui/tabs.d.ts +35 -0
  310. package/dist/ui/tooltip.d.ts +20 -1
  311. package/frameworks/react/index.tsx +1100 -163
  312. package/frameworks/react/runtime.tsx +30 -1
  313. package/frameworks/react/use-kai-chat.tsx +87 -0
  314. package/llms-full.txt +1234 -107
  315. package/llms.txt +4 -4
  316. package/package.json +36 -12
  317. package/src/agent-tooling/mcp/manifest.ts +14 -0
  318. package/src/agent-tooling/mcp/tools/debug.ts +194 -6
  319. package/src/agent-tooling/mcp/tools/reference.ts +32 -0
  320. package/src/agent-tooling/mcp/tools/scaffold.ts +162 -1
  321. package/src/components/artifact.tsx +98 -13
  322. package/src/components/attachment-types.ts +13 -0
  323. package/src/components/attachments.tsx +4 -14
  324. package/src/components/card.tsx +109 -15
  325. package/src/components/chain-of-thought.tsx +210 -1
  326. package/src/components/chat-scope-picker.tsx +13 -3
  327. package/src/components/chat-thread.tsx +238 -137
  328. package/src/components/choice-card.tsx +136 -15
  329. package/src/components/coachmark.tsx +245 -0
  330. package/src/components/component-meta.json +921 -108
  331. package/src/components/composer-dom.ts +159 -0
  332. package/src/components/composer-highlight.ts +242 -0
  333. package/src/components/composer-history.ts +82 -0
  334. package/src/components/composer.tsx +979 -0
  335. package/src/components/confirm-card.tsx +69 -2
  336. package/src/components/conversation-item.tsx +69 -7
  337. package/src/components/conversation-list.tsx +134 -37
  338. package/src/components/dismissed-stub.tsx +80 -0
  339. package/src/components/file-tree.tsx +197 -47
  340. package/src/components/form-widgets.tsx +9 -7
  341. package/src/components/form.tsx +161 -20
  342. package/src/components/image.tsx +3 -5
  343. package/src/components/link-preview.tsx +5 -4
  344. package/src/components/markdown.tsx +5 -2
  345. package/src/components/message.tsx +174 -14
  346. package/src/components/model-switcher.tsx +19 -4
  347. package/src/components/prompt-input.tsx +46 -75
  348. package/src/components/prompt-suggestion.tsx +48 -16
  349. package/src/components/reasoning.tsx +29 -6
  350. package/src/components/response-compare-types.ts +127 -0
  351. package/src/components/response-compare.tsx +460 -0
  352. package/src/components/screen.tsx +176 -0
  353. package/src/components/tasks-card.tsx +374 -23
  354. package/src/components/toast.tsx +486 -0
  355. package/src/components/tool-types.ts +10 -0
  356. package/src/components/tool.tsx +22 -16
  357. package/src/components/use-card-resolution.ts +24 -8
  358. package/src/components/voice-input.tsx +102 -19
  359. package/src/components/voice-output.tsx +202 -0
  360. package/src/elements/agent-card.tsx +67 -0
  361. package/src/elements/artifact.tsx +53 -4
  362. package/src/elements/attachments.tsx +1 -0
  363. package/src/elements/autoloader.ts +89 -0
  364. package/src/elements/avatar.tsx +33 -0
  365. package/src/elements/badge.tsx +32 -0
  366. package/src/elements/button.tsx +126 -0
  367. package/src/elements/card-media.jpg +0 -0
  368. package/src/elements/card.tsx +124 -31
  369. package/src/elements/cards.tsx +81 -7
  370. package/src/elements/chain-of-thought.tsx +77 -32
  371. package/src/elements/chat-scope-picker.tsx +35 -8
  372. package/src/elements/chat-types.ts +9 -2
  373. package/src/elements/chat-workspace.tsx +157 -43
  374. package/src/elements/chat.tsx +49 -25
  375. package/src/elements/choice.tsx +71 -19
  376. package/src/elements/coachmark.tsx +90 -0
  377. package/src/elements/command.tsx +209 -0
  378. package/src/elements/compare.tsx +110 -0
  379. package/src/elements/compiled.css +1 -1
  380. package/src/elements/composer.tsx +151 -0
  381. package/src/elements/confirm-card.tsx +36 -11
  382. package/src/elements/conversation-list.tsx +80 -11
  383. package/src/elements/default-input.tsx +75 -53
  384. package/src/elements/define.tsx +47 -6
  385. package/src/elements/dialog.tsx +98 -0
  386. package/src/elements/disclosure.ts +73 -0
  387. package/src/elements/editable-label.tsx +125 -0
  388. package/src/elements/element-manifest.json +310 -0
  389. package/src/elements/element-meta.json +5954 -1605
  390. package/src/elements/element-types.d.ts +771 -60
  391. package/src/elements/file-tree.tsx +12 -2
  392. package/src/elements/file-upload.tsx +1 -1
  393. package/src/elements/form.tsx +54 -11
  394. package/src/elements/hover-card.tsx +80 -0
  395. package/src/elements/icon-names.json +48 -0
  396. package/src/elements/icon.tsx +41 -0
  397. package/src/elements/input.tsx +203 -0
  398. package/src/elements/kbd.tsx +45 -0
  399. package/src/elements/menu.tsx +217 -0
  400. package/src/elements/message.tsx +84 -55
  401. package/src/elements/model-switcher.tsx +27 -1
  402. package/src/elements/nav.tsx +87 -0
  403. package/src/elements/notice.tsx +53 -0
  404. package/src/elements/pane-group.tsx +119 -0
  405. package/src/elements/pane.tsx +129 -0
  406. package/src/elements/popover.tsx +39 -17
  407. package/src/elements/progress-bar.tsx +39 -0
  408. package/src/elements/prompt-dock.tsx +81 -0
  409. package/src/elements/prompt-input.tsx +112 -63
  410. package/src/elements/prompt-suggestions.tsx +25 -9
  411. package/src/elements/reasoning.tsx +30 -9
  412. package/src/elements/register-impl.ts +41 -3
  413. package/src/elements/register.ts +20 -3
  414. package/src/elements/remote.tsx +4 -0
  415. package/src/elements/resizable.tsx +48 -11
  416. package/src/elements/screen.tsx +90 -0
  417. package/src/elements/scroll-area.tsx +33 -0
  418. package/src/elements/search.tsx +180 -0
  419. package/src/elements/segmented.tsx +135 -0
  420. package/src/elements/separator.tsx +36 -0
  421. package/src/elements/setting-item.tsx +50 -0
  422. package/src/elements/settings-group.tsx +37 -0
  423. package/src/elements/skeleton.tsx +45 -0
  424. package/src/elements/slots.ts +607 -0
  425. package/src/elements/source.tsx +13 -6
  426. package/src/elements/status.tsx +42 -0
  427. package/src/elements/styles.css +19 -0
  428. package/src/elements/switch.tsx +89 -14
  429. package/src/elements/tabs.tsx +95 -0
  430. package/src/elements/tasks.tsx +70 -14
  431. package/src/elements/toast.tsx +89 -0
  432. package/src/elements/tool.tsx +43 -9
  433. package/src/elements/tooltip.tsx +85 -0
  434. package/src/elements/video-poster.jpg +0 -0
  435. package/src/elements/voice-input.tsx +66 -16
  436. package/src/elements/voice-output.tsx +69 -0
  437. package/src/index.ts +35 -2
  438. package/src/primitives/card-contract.ts +14 -5
  439. package/src/primitives/card-recovery.ts +149 -0
  440. package/src/primitives/card-routing.ts +3 -0
  441. package/src/primitives/card-schemas/choice.schema.json +5 -0
  442. package/src/primitives/card-schemas/tasks.schema.json +7 -2
  443. package/src/primitives/composer-model.ts +49 -0
  444. package/src/primitives/composer-triggers.ts +35 -0
  445. package/src/primitives/create-kai-chat.ts +66 -0
  446. package/src/primitives/message-feedback.ts +123 -0
  447. package/src/primitives/toast-store.ts +276 -0
  448. package/src/primitives/use-speech-recognition.ts +135 -0
  449. package/src/state/index.ts +6 -0
  450. package/src/state/messages.ts +36 -0
  451. package/src/state/stream.ts +92 -0
  452. package/src/state/suggestions.ts +9 -0
  453. package/src/types.ts +4 -0
  454. package/src/ui/agent-card.tsx +212 -0
  455. package/src/ui/button.tsx +16 -5
  456. package/src/ui/card.tsx +245 -0
  457. package/src/ui/collapsible.tsx +30 -4
  458. package/src/ui/command.tsx +99 -0
  459. package/src/ui/dialog.tsx +217 -0
  460. package/src/ui/dropdown.tsx +375 -13
  461. package/src/ui/editable-label.tsx +112 -0
  462. package/src/ui/hover-card.tsx +28 -5
  463. package/src/ui/icon.tsx +110 -0
  464. package/src/ui/input.tsx +132 -0
  465. package/src/ui/kbd.tsx +118 -0
  466. package/src/ui/nav.tsx +282 -0
  467. package/src/ui/notice.tsx +84 -0
  468. package/src/ui/overlay.tsx +108 -2
  469. package/src/ui/pane-grid.tsx +116 -0
  470. package/src/ui/pane-group.tsx +280 -0
  471. package/src/ui/pane.tsx +193 -0
  472. package/src/ui/popover.tsx +16 -2
  473. package/src/ui/progress-bar.tsx +83 -0
  474. package/src/ui/prompt-dock.tsx +145 -0
  475. package/src/ui/resizable.tsx +69 -1
  476. package/src/ui/scroll-area.tsx +14 -3
  477. package/src/ui/segmented.tsx +109 -0
  478. package/src/ui/settings-group.tsx +67 -0
  479. package/src/ui/skeleton.tsx +62 -5
  480. package/src/ui/stat.tsx +41 -0
  481. package/src/ui/status.tsx +48 -0
  482. package/src/ui/switch.tsx +49 -23
  483. package/src/ui/tabs.tsx +168 -0
  484. package/src/ui/tooltip.tsx +57 -7
  485. package/theme.css +113 -0
  486. package/dist/components/slash-command.d.ts +0 -15
  487. package/dist/kitn-chat.es.js +0 -1
  488. package/dist/register-impl-wCsFPoh9.js +0 -77
  489. package/dist/register-ujhr1nBS.js +0 -1
  490. package/src/components/slash-command.tsx +0 -232
  491. package/src/elements/framework-usage.json +0 -563
  492. /package/dist/{kitn-chat-provider.d.ts → kai-provider.d.ts} +0 -0
  493. /package/dist/{kitn-chat-provider.es.js → kai-provider.es.js} +0 -0
@@ -1,20 +1,30 @@
1
1
  import { type JSX, Show, splitProps } from 'solid-js';
2
2
  import { cn } from '../utils/cn';
3
3
  import { Button } from '../ui/button';
4
+ import { renderIcon } from '../ui/icon';
4
5
 
5
6
  export interface PromptSuggestionProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {
6
7
  children: JSX.Element | string;
7
8
  variant?: 'outline' | 'ghost' | 'default';
8
- size?: 'sm' | 'md' | 'lg' | 'icon' | 'icon-sm';
9
+ /** Row height for the `list` layout: `'md'` (default) or `'lg'` for taller
10
+ * rows (more vertical padding). Chips/block/highlight are unaffected. */
11
+ size?: 'md' | 'lg';
12
+ /** Optional leading icon (named icon, image URL/data-URI, or text). */
13
+ icon?: string;
9
14
  highlight?: string;
10
15
  /** Render as a full-width, left-aligned list row (the "suggested questions"
11
16
  * idiom) instead of a rounded pill. Wraps long text. Ignored in highlight
12
17
  * mode, which is always a list row. */
13
18
  block?: boolean;
19
+ /** Render as a full-width "Ideas for you" list row: a leading icon, a
20
+ * left-aligned label, and a hover background. Like `block`, but keeps the
21
+ * leading icon. Ignored in highlight mode. */
22
+ list?: boolean;
14
23
  }
15
24
 
16
25
  function PromptSuggestion(props: PromptSuggestionProps) {
17
- const [local, rest] = splitProps(props, ['children', 'variant', 'size', 'class', 'highlight', 'block']);
26
+ const [local, rest] = splitProps(props, ['children', 'variant', 'size', 'class', 'icon', 'highlight', 'block', 'list']);
27
+ const Icon = () => <Show when={local.icon}>{renderIcon(local.icon, { class: 'size-3.5 shrink-0' })}</Show>;
18
28
 
19
29
  const isHighlightMode = () => local.highlight !== undefined && local.highlight.trim() !== '';
20
30
  const content = () => typeof local.children === 'string' ? local.children : '';
@@ -24,29 +34,51 @@ function PromptSuggestion(props: PromptSuggestionProps) {
24
34
  when={isHighlightMode()}
25
35
  fallback={
26
36
  <Show
27
- when={local.block}
37
+ when={local.list}
28
38
  fallback={
29
- <Button
30
- variant={local.variant ?? 'outline'}
31
- size={local.size ?? 'lg'}
32
- class={cn('rounded-full', local.class)}
33
- {...rest}
39
+ <Show
40
+ when={local.block}
41
+ fallback={
42
+ <Button
43
+ variant={local.variant ?? 'outline'}
44
+ size="lg"
45
+ class={cn('rounded-full', local.class)}
46
+ {...rest}
47
+ >
48
+ <Icon />
49
+ {local.children}
50
+ </Button>
51
+ }
34
52
  >
35
- {local.children}
36
- </Button>
53
+ <Button
54
+ variant={local.variant ?? 'outline'}
55
+ size="md"
56
+ class={cn(
57
+ 'h-auto w-full cursor-pointer justify-start rounded-xl px-4 py-2.5',
58
+ 'text-left text-sm leading-snug whitespace-normal text-pretty',
59
+ local.class,
60
+ )}
61
+ {...rest}
62
+ >
63
+ {local.children}
64
+ </Button>
65
+ </Show>
37
66
  }
38
67
  >
39
68
  <Button
40
- variant={local.variant ?? 'outline'}
41
- size={local.size ?? 'md'}
69
+ variant={local.variant ?? 'ghost'}
70
+ size="md"
42
71
  class={cn(
43
- 'h-auto w-full cursor-pointer justify-start rounded-xl px-4 py-2.5',
72
+ 'group h-auto w-full cursor-pointer items-center justify-start gap-2.5 rounded-xl px-3',
73
+ local.size === 'lg' ? 'py-3.5' : 'py-2.5',
44
74
  'text-left text-sm leading-snug whitespace-normal text-pretty',
75
+ 'hover:bg-accent',
45
76
  local.class,
46
77
  )}
47
78
  {...rest}
48
79
  >
49
- {local.children}
80
+ <Icon />
81
+ <span class="min-w-0 flex-1">{local.children}</span>
50
82
  </Button>
51
83
  </Show>
52
84
  }
@@ -56,7 +88,7 @@ function PromptSuggestion(props: PromptSuggestionProps) {
56
88
  fallback={
57
89
  <Button
58
90
  variant={local.variant ?? 'ghost'}
59
- size={local.size ?? 'sm'}
91
+ size="sm"
60
92
  class={cn(
61
93
  'w-full cursor-pointer justify-start rounded-xl py-2',
62
94
  'hover:bg-accent',
@@ -70,7 +102,7 @@ function PromptSuggestion(props: PromptSuggestionProps) {
70
102
  >
71
103
  <Button
72
104
  variant={local.variant ?? 'ghost'}
73
- size={local.size ?? 'sm'}
105
+ size="sm"
74
106
  class={cn(
75
107
  'w-full cursor-pointer justify-start gap-0 rounded-xl py-2',
76
108
  'hover:bg-accent',
@@ -1,4 +1,4 @@
1
- import { type JSX, splitProps, createSignal, createContext, useContext, createEffect, onCleanup, Show } from 'solid-js';
1
+ import { type JSX, type Accessor, splitProps, createSignal, createContext, useContext, createEffect, onCleanup, Show } from 'solid-js';
2
2
  import { cn } from '../utils/cn';
3
3
  import { ChevronDown } from 'lucide-solid';
4
4
  import { Markdown } from './markdown';
@@ -7,8 +7,14 @@ import { observeContentHeight } from '../primitives/use-resize-observer';
7
7
  interface ReasoningContextValue {
8
8
  isOpen: () => boolean;
9
9
  onOpenChange: (open: boolean) => void;
10
+ disabled: () => boolean;
10
11
  }
11
12
 
13
+ /** Imperative open controller, handed to a parent (the kai-reasoning facade) via
14
+ * `controllerRef` so it can drive/observe open state — mirrors
15
+ * CollapsibleController/HoverCardController. */
16
+ export interface ReasoningController { open: Accessor<boolean>; setOpen: (v: boolean) => void; }
17
+
12
18
  const ReasoningContext = createContext<ReasoningContextValue>();
13
19
 
14
20
  function useReasoningContext() {
@@ -25,19 +31,30 @@ export interface ReasoningProps {
25
31
  children: JSX.Element;
26
32
  class?: string;
27
33
  open?: boolean;
34
+ /** Initial open state (uncontrolled seed). */
35
+ defaultOpen?: boolean;
28
36
  onOpenChange?: (open: boolean) => void;
29
37
  isStreaming?: boolean;
38
+ /** Gate the trigger — programmatic control via the controller still works. */
39
+ disabled?: boolean;
40
+ /** Receive the open controller (open accessor + setOpen) once mounted. */
41
+ controllerRef?: (api: ReasoningController) => void;
30
42
  }
31
43
 
32
44
  function Reasoning(props: ReasoningProps) {
33
- const [local] = splitProps(props, ['children', 'class', 'open', 'onOpenChange', 'isStreaming']);
34
- const [internalOpen, setInternalOpen] = createSignal(false);
45
+ const [local] = splitProps(props, ['children', 'class', 'open', 'defaultOpen', 'onOpenChange', 'isStreaming', 'disabled', 'controllerRef']);
46
+ const [internalOpen, setInternalOpen] = createSignal(local.defaultOpen ?? false);
35
47
  const [wasAutoOpened, setWasAutoOpened] = createSignal(false);
36
48
 
37
49
  const isControlled = () => local.open !== undefined;
38
50
  const isOpen = () => (isControlled() ? local.open! : internalOpen());
51
+ const disabled = () => !!local.disabled;
39
52
 
53
+ // The single open-mutate path, shared by the trigger and the imperative
54
+ // controller. In controlled mode we don't touch internal state; the consumer
55
+ // reflects via the `open` prop and observes via onOpenChange.
40
56
  const handleOpenChange = (newOpen: boolean) => {
57
+ if (isOpen() === newOpen) return;
41
58
  if (!isControlled()) {
42
59
  setInternalOpen(newOpen);
43
60
  }
@@ -56,8 +73,13 @@ function Reasoning(props: ReasoningProps) {
56
73
  }
57
74
  });
58
75
 
76
+ // Hand the controller up once. setOpen routes through handleOpenChange so it
77
+ // notifies onOpenChange and respects controlled/uncontrolled mode. Not gated
78
+ // by disabled — the facade's wireDisclosure applies disabled-gating itself.
79
+ local.controllerRef?.({ open: isOpen, setOpen: handleOpenChange });
80
+
59
81
  return (
60
- <ReasoningContext.Provider value={{ isOpen, onOpenChange: handleOpenChange }}>
82
+ <ReasoningContext.Provider value={{ isOpen, onOpenChange: handleOpenChange, disabled }}>
61
83
  <div class={local.class}>{local.children}</div>
62
84
  </ReasoningContext.Provider>
63
85
  );
@@ -71,12 +93,13 @@ export interface ReasoningTriggerProps extends JSX.ButtonHTMLAttributes<HTMLButt
71
93
 
72
94
  function ReasoningTrigger(props: ReasoningTriggerProps) {
73
95
  const [local, rest] = splitProps(props, ['children', 'class']);
74
- const { isOpen, onOpenChange } = useReasoningContext();
96
+ const { isOpen, onOpenChange, disabled } = useReasoningContext();
75
97
 
76
98
  return (
77
99
  <button
78
100
  class={cn('flex cursor-pointer items-center gap-2 text-meta', local.class)}
79
- onClick={() => onOpenChange(!isOpen())}
101
+ disabled={disabled() || undefined}
102
+ onClick={() => { if (!disabled()) onOpenChange(!isOpen()); }}
80
103
  {...rest}
81
104
  >
82
105
  <span class="text-primary">{local.children}</span>
@@ -0,0 +1,127 @@
1
+ // Types + pure helpers for the dual-response comparison card (`ResponseCompare` /
2
+ // `<kai-compare>`). A compare presents exactly TWO assistant candidates for the
3
+ // same prompt side-by-side; the user picks the better one (a COMMIT, not a
4
+ // Submit), which the consumer turns into a `(prompt, chosen, rejected)`
5
+ // preference pair. Kept framework-agnostic and DOM-free so it unit-tests in
6
+ // isolation.
7
+ import type { ToolPart } from './tool';
8
+ import type { AttachmentData } from './attachments';
9
+
10
+ // ─────────────────────────────────────────────────────────────────────────────
11
+ // Types
12
+ // ─────────────────────────────────────────────────────────────────────────────
13
+
14
+ /** One assistant response in a comparison. Rendered identically to an assistant
15
+ * message (reasoning + tools + attachments + markdown content) via `MessageBody`. */
16
+ export interface CompareCandidate {
17
+ /** Stable id, unique within the pair; echoed back in the selection. */
18
+ id: string;
19
+ /** The response text/markdown. */
20
+ content: string;
21
+ /** Optional collapsible reasoning block. */
22
+ reasoning?: { text: string; label?: string };
23
+ /** Tool-call parts rendered above the content. */
24
+ tools?: ToolPart[];
25
+ /** Inline attachment previews rendered above the content. */
26
+ attachments?: AttachmentData[];
27
+ /** Optional short column label (e.g. "A" / "B" / "Concise"). */
28
+ label?: string;
29
+ /** Optional model name shown as a sub-label. */
30
+ model?: string;
31
+ /** When true this candidate is still streaming — its pick control is disabled
32
+ * and a per-column shimmer shows until it (and its sibling) settle. */
33
+ streaming?: boolean;
34
+ }
35
+
36
+ /** The two-candidate tuple. Enforced at the type level; validated at runtime by
37
+ * `normalizeCandidates`. */
38
+ export type ComparePair = [CompareCandidate, CompareCandidate];
39
+
40
+ /** How the card collapses once the user picks. `'winner'` (default) shows just the
41
+ * chosen candidate's body; `'none'` keeps both columns but marks the choice. */
42
+ export type CompareCollapse = 'winner' | 'none';
43
+
44
+ /** The compare definition (set as the `data` JS property on `<kai-compare>`). */
45
+ export interface ResponseCompareData {
46
+ /** Optional prompt/question shown above the two columns. */
47
+ prompt?: string;
48
+ /** Exactly two candidates: [A, B]. */
49
+ candidates: ComparePair;
50
+ /** Collapse behaviour after a pick. Default `'winner'`. */
51
+ collapse?: CompareCollapse;
52
+ }
53
+
54
+ /** Emitted (and re-hydratable) when the user picks. The consumer pairs
55
+ * `(prompt, chosenId, rejectedIds)` for preference capture / RLHF. */
56
+ export interface CompareSelection {
57
+ /** The id of the chosen candidate. */
58
+ chosenId: string;
59
+ /** The id(s) of the rejected candidate(s) — for a pair, the other one. */
60
+ rejectedIds: string[];
61
+ /** Epoch ms when the pick was made. */
62
+ at?: number;
63
+ }
64
+
65
+ // ─────────────────────────────────────────────────────────────────────────────
66
+ // Pure helpers (unit-tested in isolation).
67
+ // ─────────────────────────────────────────────────────────────────────────────
68
+
69
+ /**
70
+ * Validate + normalize the candidate list. A compare requires EXACTLY two
71
+ * candidates with unique, non-empty string ids. Returns the usable pair, or an
72
+ * error message when the definition is unusable (rendered as an inline error /
73
+ * emitted as a `kai-error`). Modeled on `normalizeOptions`.
74
+ */
75
+ export function normalizeCandidates(candidates: unknown): {
76
+ candidates: ComparePair | null;
77
+ error?: string;
78
+ } {
79
+ if (!Array.isArray(candidates)) {
80
+ return { candidates: null, error: "This comparison couldn't be displayed." };
81
+ }
82
+ if (candidates.length !== 2) {
83
+ return {
84
+ candidates: null,
85
+ error: `A comparison needs exactly two candidates (got ${candidates.length}).`,
86
+ };
87
+ }
88
+ const out: CompareCandidate[] = [];
89
+ const seen = new Set<string>();
90
+ for (const c of candidates) {
91
+ if (!c || typeof c !== 'object') {
92
+ return { candidates: null, error: "This comparison couldn't be displayed." };
93
+ }
94
+ const cand = c as Partial<CompareCandidate>;
95
+ if (typeof cand.id !== 'string' || cand.id.length === 0) {
96
+ return { candidates: null, error: 'Each candidate needs a non-empty id.' };
97
+ }
98
+ if (seen.has(cand.id)) {
99
+ return { candidates: null, error: `Duplicate candidate id "${cand.id}".` };
100
+ }
101
+ seen.add(cand.id);
102
+ out.push({
103
+ id: cand.id,
104
+ content: typeof cand.content === 'string' ? cand.content : '',
105
+ reasoning: cand.reasoning,
106
+ tools: Array.isArray(cand.tools) ? cand.tools : undefined,
107
+ attachments: Array.isArray(cand.attachments) ? cand.attachments : undefined,
108
+ label: typeof cand.label === 'string' ? cand.label : undefined,
109
+ model: typeof cand.model === 'string' ? cand.model : undefined,
110
+ streaming: cand.streaming === true,
111
+ });
112
+ }
113
+ return { candidates: [out[0], out[1]] };
114
+ }
115
+
116
+ /** Build the selection payload for choosing `chosenId` out of the pair (the other
117
+ * candidate is the rejected one). Stamps `at` with the current time. */
118
+ export function buildSelection(pair: ComparePair, chosenId: string): CompareSelection {
119
+ const rejectedIds = pair.filter((c) => c.id !== chosenId).map((c) => c.id);
120
+ return { chosenId, rejectedIds, at: Date.now() };
121
+ }
122
+
123
+ /** Whether any candidate in the pair is still streaming (pick stays disabled). */
124
+ export function isAnyStreaming(pair: ComparePair | null): boolean {
125
+ if (!pair) return false;
126
+ return pair.some((c) => c.streaming === true);
127
+ }