@kitn.ai/ui 0.14.1

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 (370) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +394 -0
  3. package/dist/bash-InADTalH.js +1 -0
  4. package/dist/core-AYMC6_lb.js +12 -0
  5. package/dist/css-M7EaDHN_.js +1 -0
  6. package/dist/custom-elements.json +4739 -0
  7. package/dist/engine-javascript-vq0WuIJl.js +141 -0
  8. package/dist/github-dark-dimmed-DUshB20C.js +1 -0
  9. package/dist/github-light-JYsPkUQd.js +1 -0
  10. package/dist/host-embed.d.ts +33 -0
  11. package/dist/html-CPZ3oZQ7.js +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/javascript-C25yR2R2.js +1 -0
  14. package/dist/json-DxJze_jm.js +1 -0
  15. package/dist/kitn-chat-provider.d.ts +2 -0
  16. package/dist/kitn-chat-provider.es.js +240 -0
  17. package/dist/kitn-chat.es.js +77 -0
  18. package/dist/llms/llms-full.txt +1018 -0
  19. package/dist/llms/llms.txt +104 -0
  20. package/dist/origin.d.ts +5 -0
  21. package/dist/provider-runtime.d.ts +27 -0
  22. package/dist/schemas/card-envelope.schema.json +14 -0
  23. package/dist/schemas/card-event.schema.json +12 -0
  24. package/dist/schemas/choice.schema.json +70 -0
  25. package/dist/schemas/confirm.schema.json +65 -0
  26. package/dist/schemas/embed.schema.json +65 -0
  27. package/dist/schemas/form.result.schema.json +7 -0
  28. package/dist/schemas/form.schema.json +33 -0
  29. package/dist/schemas/link.schema.json +56 -0
  30. package/dist/schemas/tasks.result.schema.json +16 -0
  31. package/dist/schemas/tasks.schema.json +78 -0
  32. package/dist/svelte--5p79yCD.js +1 -0
  33. package/dist/theme.tokens.css +176 -0
  34. package/dist/tsx-B8rCNbgL.js +1 -0
  35. package/dist/typescript-RycA9KXf.js +1 -0
  36. package/dist/validate.d.ts +4 -0
  37. package/dist/version.d.ts +4 -0
  38. package/dist/vue-BmIZj4XD.js +1 -0
  39. package/dist/wire.d.ts +53 -0
  40. package/frameworks/react/index.tsx +948 -0
  41. package/frameworks/react/runtime.tsx +94 -0
  42. package/llms-full.txt +1018 -0
  43. package/llms.txt +104 -0
  44. package/package.json +141 -0
  45. package/src/components/artifact.stories.tsx +138 -0
  46. package/src/components/artifact.tsx +743 -0
  47. package/src/components/attachments.stories.tsx +303 -0
  48. package/src/components/attachments.test.tsx +64 -0
  49. package/src/components/attachments.tsx +399 -0
  50. package/src/components/card-fallback.tsx +28 -0
  51. package/src/components/card-renderer.tsx +52 -0
  52. package/src/components/card.tsx +110 -0
  53. package/src/components/chain-of-thought.stories.tsx +211 -0
  54. package/src/components/chain-of-thought.tsx +139 -0
  55. package/src/components/chat-container.stories.tsx +187 -0
  56. package/src/components/chat-container.tsx +82 -0
  57. package/src/components/chat-scope-picker.tsx +47 -0
  58. package/src/components/chat-thread.test.tsx +58 -0
  59. package/src/components/chat-thread.tsx +249 -0
  60. package/src/components/checkpoint.stories.tsx +102 -0
  61. package/src/components/checkpoint.tsx +88 -0
  62. package/src/components/choice-card.tsx +569 -0
  63. package/src/components/code-block.stories.tsx +150 -0
  64. package/src/components/code-block.tsx +105 -0
  65. package/src/components/component-meta.json +3735 -0
  66. package/src/components/confirm-card.stories.tsx +74 -0
  67. package/src/components/confirm-card.tsx +315 -0
  68. package/src/components/context.stories.tsx +229 -0
  69. package/src/components/context.test.tsx +133 -0
  70. package/src/components/context.tsx +363 -0
  71. package/src/components/conversation-item.stories.tsx +125 -0
  72. package/src/components/conversation-item.tsx +16 -0
  73. package/src/components/conversation-list.stories.tsx +133 -0
  74. package/src/components/conversation-list.tsx +101 -0
  75. package/src/components/default-input.test.tsx +111 -0
  76. package/src/components/embed.tsx +196 -0
  77. package/src/components/empty.stories.tsx +434 -0
  78. package/src/components/empty.tsx +166 -0
  79. package/src/components/feedback-bar.stories.tsx +138 -0
  80. package/src/components/feedback-bar.test.tsx +103 -0
  81. package/src/components/feedback-bar.tsx +166 -0
  82. package/src/components/file-tree.stories.tsx +73 -0
  83. package/src/components/file-tree.tsx +383 -0
  84. package/src/components/file-upload.stories.tsx +156 -0
  85. package/src/components/file-upload.tsx +161 -0
  86. package/src/components/form-widgets.tsx +461 -0
  87. package/src/components/form.tsx +873 -0
  88. package/src/components/image.stories.tsx +89 -0
  89. package/src/components/image.tsx +67 -0
  90. package/src/components/link-preview.tsx +194 -0
  91. package/src/components/loader.stories.tsx +181 -0
  92. package/src/components/loader.tsx +333 -0
  93. package/src/components/markdown.stories.tsx +180 -0
  94. package/src/components/markdown.tsx +81 -0
  95. package/src/components/message-action-bar.test.tsx +128 -0
  96. package/src/components/message-narrow.stories.tsx +329 -0
  97. package/src/components/message-skills.stories.tsx +211 -0
  98. package/src/components/message-skills.tsx +36 -0
  99. package/src/components/message.stories.tsx +281 -0
  100. package/src/components/message.tsx +227 -0
  101. package/src/components/model-switcher.stories.tsx +123 -0
  102. package/src/components/model-switcher.test.tsx +65 -0
  103. package/src/components/model-switcher.tsx +87 -0
  104. package/src/components/prompt-input.stories.tsx +222 -0
  105. package/src/components/prompt-input.tsx +211 -0
  106. package/src/components/prompt-suggestion.stories.tsx +142 -0
  107. package/src/components/prompt-suggestion.tsx +115 -0
  108. package/src/components/reasoning.stories.tsx +140 -0
  109. package/src/components/reasoning.tsx +156 -0
  110. package/src/components/resizable.test.tsx +226 -0
  111. package/src/components/response-stream.tsx +103 -0
  112. package/src/components/scroll-button.stories.tsx +100 -0
  113. package/src/components/scroll-button.tsx +34 -0
  114. package/src/components/slash-command.stories.tsx +163 -0
  115. package/src/components/slash-command.tsx +232 -0
  116. package/src/components/source-list.test.tsx +152 -0
  117. package/src/components/source.stories.tsx +124 -0
  118. package/src/components/source.tsx +129 -0
  119. package/src/components/tasks-card.stories.tsx +78 -0
  120. package/src/components/tasks-card.tsx +432 -0
  121. package/src/components/text-shimmer.stories.tsx +87 -0
  122. package/src/components/text-shimmer.tsx +37 -0
  123. package/src/components/thinking-bar.stories.tsx +87 -0
  124. package/src/components/thinking-bar.tsx +50 -0
  125. package/src/components/tool.stories.tsx +153 -0
  126. package/src/components/tool.tsx +184 -0
  127. package/src/components/use-card-resolution.ts +28 -0
  128. package/src/components/voice-input.stories.tsx +83 -0
  129. package/src/components/voice-input.tsx +107 -0
  130. package/src/elements/artifact.stories.tsx +506 -0
  131. package/src/elements/artifact.tsx +137 -0
  132. package/src/elements/attachments.stories.tsx +190 -0
  133. package/src/elements/attachments.tsx +136 -0
  134. package/src/elements/card.stories.tsx +113 -0
  135. package/src/elements/card.tsx +40 -0
  136. package/src/elements/cards.stories.tsx +59 -0
  137. package/src/elements/cards.tsx +97 -0
  138. package/src/elements/catalog.stories.tsx +491 -0
  139. package/src/elements/chain-of-thought.declarative.test.tsx +153 -0
  140. package/src/elements/chain-of-thought.stories.tsx +113 -0
  141. package/src/elements/chain-of-thought.tsx +92 -0
  142. package/src/elements/chat-scope-picker.stories.tsx +73 -0
  143. package/src/elements/chat-scope-picker.tsx +36 -0
  144. package/src/elements/chat-types.ts +42 -0
  145. package/src/elements/chat-workspace.stories.tsx +288 -0
  146. package/src/elements/chat-workspace.tsx +161 -0
  147. package/src/elements/chat.stories.tsx +151 -0
  148. package/src/elements/chat.tsx +80 -0
  149. package/src/elements/checkpoint.stories.tsx +72 -0
  150. package/src/elements/checkpoint.tsx +47 -0
  151. package/src/elements/choice.stories.tsx +240 -0
  152. package/src/elements/choice.tsx +48 -0
  153. package/src/elements/code-block.stories.tsx +83 -0
  154. package/src/elements/code-block.tsx +42 -0
  155. package/src/elements/compiled.css +2 -0
  156. package/src/elements/composed-shell.stories.tsx +316 -0
  157. package/src/elements/confirm-card.stories.tsx +227 -0
  158. package/src/elements/confirm-card.tsx +51 -0
  159. package/src/elements/context-meter.stories.tsx +151 -0
  160. package/src/elements/context-meter.tsx +121 -0
  161. package/src/elements/conversation-list.declarative.test.tsx +137 -0
  162. package/src/elements/conversation-list.stories.tsx +243 -0
  163. package/src/elements/conversation-list.tsx +80 -0
  164. package/src/elements/css.ts +5 -0
  165. package/src/elements/default-input.tsx +247 -0
  166. package/src/elements/define.tsx +171 -0
  167. package/src/elements/element-meta.json +3314 -0
  168. package/src/elements/element-types.d.ts +710 -0
  169. package/src/elements/embed.stories.tsx +213 -0
  170. package/src/elements/embed.tsx +35 -0
  171. package/src/elements/empty.stories.tsx +111 -0
  172. package/src/elements/empty.tsx +29 -0
  173. package/src/elements/feedback-bar.stories.tsx +114 -0
  174. package/src/elements/feedback-bar.tsx +61 -0
  175. package/src/elements/file-tree.stories.tsx +134 -0
  176. package/src/elements/file-tree.tsx +52 -0
  177. package/src/elements/file-upload.stories.tsx +82 -0
  178. package/src/elements/file-upload.tsx +44 -0
  179. package/src/elements/form.stories.tsx +248 -0
  180. package/src/elements/form.tsx +43 -0
  181. package/src/elements/framework-usage.json +563 -0
  182. package/src/elements/image.stories.tsx +71 -0
  183. package/src/elements/image.tsx +32 -0
  184. package/src/elements/link-preview.stories.tsx +209 -0
  185. package/src/elements/link-preview.tsx +34 -0
  186. package/src/elements/loader.stories.tsx +88 -0
  187. package/src/elements/loader.tsx +25 -0
  188. package/src/elements/markdown.stories.tsx +76 -0
  189. package/src/elements/markdown.tsx +38 -0
  190. package/src/elements/message-skills.declarative.test.tsx +104 -0
  191. package/src/elements/message-skills.stories.tsx +114 -0
  192. package/src/elements/message-skills.tsx +85 -0
  193. package/src/elements/message.stories.tsx +218 -0
  194. package/src/elements/message.tsx +162 -0
  195. package/src/elements/model-switcher.declarative.test.tsx +130 -0
  196. package/src/elements/model-switcher.stories.tsx +198 -0
  197. package/src/elements/model-switcher.tsx +93 -0
  198. package/src/elements/popover.stories.tsx +80 -0
  199. package/src/elements/popover.tsx +59 -0
  200. package/src/elements/prompt-input-slash-command.test.tsx +128 -0
  201. package/src/elements/prompt-input-stoppable.test.tsx +88 -0
  202. package/src/elements/prompt-input-toolbar-actions.test.tsx +120 -0
  203. package/src/elements/prompt-input.stories.tsx +331 -0
  204. package/src/elements/prompt-input.tsx +185 -0
  205. package/src/elements/prompt-suggestions.declarative.test.tsx +164 -0
  206. package/src/elements/prompt-suggestions.stories.tsx +213 -0
  207. package/src/elements/prompt-suggestions.tsx +94 -0
  208. package/src/elements/reasoning.stories.tsx +77 -0
  209. package/src/elements/reasoning.tsx +50 -0
  210. package/src/elements/register.ts +56 -0
  211. package/src/elements/remote.stories.tsx +314 -0
  212. package/src/elements/remote.tsx +221 -0
  213. package/src/elements/resizable.d.ts +27 -0
  214. package/src/elements/resizable.stories.tsx +426 -0
  215. package/src/elements/resizable.tsx +553 -0
  216. package/src/elements/response-stream.stories.tsx +79 -0
  217. package/src/elements/response-stream.tsx +40 -0
  218. package/src/elements/scroll-button.stories.tsx +202 -0
  219. package/src/elements/scroll-button.test.tsx +148 -0
  220. package/src/elements/scroll-button.tsx +126 -0
  221. package/src/elements/source-list.stories.tsx +143 -0
  222. package/src/elements/source.stories.tsx +88 -0
  223. package/src/elements/source.tsx +120 -0
  224. package/src/elements/styles.css +199 -0
  225. package/src/elements/switch.stories.tsx +56 -0
  226. package/src/elements/switch.tsx +43 -0
  227. package/src/elements/tasks.stories.tsx +237 -0
  228. package/src/elements/tasks.tsx +46 -0
  229. package/src/elements/text-shimmer.stories.tsx +64 -0
  230. package/src/elements/text-shimmer.tsx +28 -0
  231. package/src/elements/thinking-bar.stories.tsx +72 -0
  232. package/src/elements/thinking-bar.tsx +34 -0
  233. package/src/elements/tool.stories.tsx +89 -0
  234. package/src/elements/tool.tsx +23 -0
  235. package/src/elements/voice-input.stories.tsx +88 -0
  236. package/src/elements/voice-input.tsx +41 -0
  237. package/src/index.ts +253 -0
  238. package/src/primitives/card-contract.ts +71 -0
  239. package/src/primitives/card-host.tsx +35 -0
  240. package/src/primitives/card-registry.tsx +67 -0
  241. package/src/primitives/card-resolution.ts +36 -0
  242. package/src/primitives/card-routing.ts +79 -0
  243. package/src/primitives/card-schemas/card-envelope.schema.json +14 -0
  244. package/src/primitives/card-schemas/card-event.schema.json +12 -0
  245. package/src/primitives/card-schemas/choice.schema.json +70 -0
  246. package/src/primitives/card-schemas/confirm.schema.json +65 -0
  247. package/src/primitives/card-schemas/embed.schema.json +65 -0
  248. package/src/primitives/card-schemas/form.result.schema.json +7 -0
  249. package/src/primitives/card-schemas/form.schema.json +33 -0
  250. package/src/primitives/card-schemas/link.schema.json +56 -0
  251. package/src/primitives/card-schemas/tasks.result.schema.json +16 -0
  252. package/src/primitives/card-schemas/tasks.schema.json +78 -0
  253. package/src/primitives/card-validate.ts +95 -0
  254. package/src/primitives/chat-config.tsx +76 -0
  255. package/src/primitives/controllable.test.ts +47 -0
  256. package/src/primitives/controllable.ts +21 -0
  257. package/src/primitives/embed-providers.ts +254 -0
  258. package/src/primitives/highlighter.ts +157 -0
  259. package/src/primitives/link-preview.ts +87 -0
  260. package/src/primitives/pdf-preview.ts +121 -0
  261. package/src/primitives/use-auto-resize.ts +31 -0
  262. package/src/primitives/use-resize-observer.ts +12 -0
  263. package/src/primitives/use-stick-to-bottom.ts +43 -0
  264. package/src/primitives/use-text-stream.ts +112 -0
  265. package/src/primitives/use-voice-recorder.ts +50 -0
  266. package/src/remote/host-embed.ts +345 -0
  267. package/src/remote/index.ts +2 -0
  268. package/src/remote/origin.ts +30 -0
  269. package/src/remote/provider-runtime.ts +259 -0
  270. package/src/remote/provider.ts +2 -0
  271. package/src/remote/validate.ts +22 -0
  272. package/src/remote/version.ts +12 -0
  273. package/src/remote/wire.ts +48 -0
  274. package/src/stories/chat-panel-layout.stories.tsx +145 -0
  275. package/src/stories/chat-scene.tsx +571 -0
  276. package/src/stories/checkpoint-restore.stories.tsx +256 -0
  277. package/src/stories/context-usage.stories.tsx +212 -0
  278. package/src/stories/conversation-with-reasoning.stories.tsx +182 -0
  279. package/src/stories/conversation-with-sources.stories.tsx +471 -0
  280. package/src/stories/docs/Accessibility.mdx +119 -0
  281. package/src/stories/docs/ChildElements.mdx +269 -0
  282. package/src/stories/docs/ForAIAgents.mdx +162 -0
  283. package/src/stories/docs/GettingStarted.mdx +65 -0
  284. package/src/stories/docs/Installation.mdx +83 -0
  285. package/src/stories/docs/Introduction.mdx +50 -0
  286. package/src/stories/docs/SolidJsAdvanced.mdx +17 -0
  287. package/src/stories/docs/Theming.mdx +85 -0
  288. package/src/stories/docs/element-controls.ts +121 -0
  289. package/src/stories/docs/frameworks/Angular.mdx +245 -0
  290. package/src/stories/docs/frameworks/Html.mdx +227 -0
  291. package/src/stories/docs/frameworks/Overview.mdx +47 -0
  292. package/src/stories/docs/frameworks/React.mdx +227 -0
  293. package/src/stories/docs/frameworks/Solid.mdx +173 -0
  294. package/src/stories/docs/frameworks/Svelte.mdx +194 -0
  295. package/src/stories/docs/frameworks/Vue.mdx +238 -0
  296. package/src/stories/docs/generative-ui-overview.mdx +186 -0
  297. package/src/stories/docs/recipes/SpeechToText.mdx +7 -0
  298. package/src/stories/docs/recipes/Streaming.mdx +68 -0
  299. package/src/stories/docs/recipes/TextToSpeech.mdx +35 -0
  300. package/src/stories/docs/theme-editor/canvas.tsx +32 -0
  301. package/src/stories/docs/theme-editor/inspector.tsx +66 -0
  302. package/src/stories/docs/theme-editor/presets.test.ts +32 -0
  303. package/src/stories/docs/theme-editor/presets.ts +64 -0
  304. package/src/stories/docs/theme-editor/theme-css.test.ts +19 -0
  305. package/src/stories/docs/theme-editor/theme-css.ts +15 -0
  306. package/src/stories/docs/theme-editor/theme-editor.tsx +146 -0
  307. package/src/stories/docs/theme-tokens.tsx +174 -0
  308. package/src/stories/examples/ChoosingComponents.mdx +106 -0
  309. package/src/stories/examples/sample-data.ts +79 -0
  310. package/src/stories/examples/usage/checkpoint-restore.ts +156 -0
  311. package/src/stories/examples/usage/context-usage.ts +591 -0
  312. package/src/stories/examples/usage/conversation-with-reasoning.ts +224 -0
  313. package/src/stories/examples/usage/conversation-with-sources.ts +589 -0
  314. package/src/stories/examples/usage/empty-state.ts +144 -0
  315. package/src/stories/examples/usage/full-chat-app.ts +277 -0
  316. package/src/stories/examples/usage/index.ts +63 -0
  317. package/src/stories/examples/usage/message-actions.ts +704 -0
  318. package/src/stories/examples/usage/pattern-centered-conversation.ts +446 -0
  319. package/src/stories/examples/usage/pattern-chat-panel-layout.ts +442 -0
  320. package/src/stories/examples/usage/pattern-docked-widget.ts +479 -0
  321. package/src/stories/examples/usage/prompt-input-variants.ts +1356 -0
  322. package/src/stories/examples/usage/streaming-response.ts +687 -0
  323. package/src/stories/examples/usage/types.ts +33 -0
  324. package/src/stories/full-chat.stories.tsx +18 -0
  325. package/src/stories/message-actions.stories.tsx +230 -0
  326. package/src/stories/pattern-centered-conversation.stories.tsx +93 -0
  327. package/src/stories/pattern-docked-widget.stories.tsx +93 -0
  328. package/src/stories/pattern-empty-state.stories.tsx +76 -0
  329. package/src/stories/prompt-input-variants.stories.tsx +456 -0
  330. package/src/stories/streaming-response.stories.tsx +438 -0
  331. package/src/stories/theme-editor.stories.tsx +16 -0
  332. package/src/stories/token-reference.stories.tsx +18 -0
  333. package/src/stories/typography.stories.tsx +78 -0
  334. package/src/types.ts +47 -0
  335. package/src/ui/action-icons.ts +52 -0
  336. package/src/ui/avatar.stories.tsx +103 -0
  337. package/src/ui/avatar.tsx +23 -0
  338. package/src/ui/badge.stories.tsx +86 -0
  339. package/src/ui/badge.tsx +21 -0
  340. package/src/ui/button.stories.tsx +145 -0
  341. package/src/ui/button.tsx +38 -0
  342. package/src/ui/collapsible.stories.tsx +69 -0
  343. package/src/ui/collapsible.tsx +125 -0
  344. package/src/ui/dropdown.stories.tsx +59 -0
  345. package/src/ui/dropdown.tsx +196 -0
  346. package/src/ui/hover-card.stories.tsx +77 -0
  347. package/src/ui/hover-card.test.tsx +30 -0
  348. package/src/ui/hover-card.tsx +172 -0
  349. package/src/ui/overlay.stories.tsx +115 -0
  350. package/src/ui/overlay.tsx +158 -0
  351. package/src/ui/popover.stories.tsx +81 -0
  352. package/src/ui/popover.test.tsx +99 -0
  353. package/src/ui/popover.tsx +92 -0
  354. package/src/ui/resizable.stories.tsx +236 -0
  355. package/src/ui/resizable.tsx +576 -0
  356. package/src/ui/scroll-area.stories.tsx +50 -0
  357. package/src/ui/scroll-area.tsx +15 -0
  358. package/src/ui/separator.stories.tsx +81 -0
  359. package/src/ui/separator.tsx +10 -0
  360. package/src/ui/skeleton.stories.tsx +337 -0
  361. package/src/ui/skeleton.tsx +16 -0
  362. package/src/ui/switch.stories.tsx +51 -0
  363. package/src/ui/switch.test.tsx +59 -0
  364. package/src/ui/switch.tsx +62 -0
  365. package/src/ui/textarea.stories.tsx +76 -0
  366. package/src/ui/textarea.tsx +21 -0
  367. package/src/ui/tooltip.stories.tsx +74 -0
  368. package/src/ui/tooltip.tsx +68 -0
  369. package/src/utils/cn.ts +24 -0
  370. package/theme.css +187 -0
@@ -0,0 +1,3314 @@
1
+ [
2
+ {
3
+ "tag": "kai-artifact",
4
+ "className": "KaiArtifactElement",
5
+ "displayName": "Artifact",
6
+ "props": [
7
+ {
8
+ "name": "src",
9
+ "type": "undefined | string",
10
+ "optional": true,
11
+ "scalar": true,
12
+ "description": "URL the preview iframe frames. Consumer-controlled.",
13
+ "displayType": "undefined | string"
14
+ },
15
+ {
16
+ "name": "files",
17
+ "type": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
18
+ "optional": false,
19
+ "scalar": false,
20
+ "description": "Files for the Code tab tree + each file's preview `url`. Set as a JS property (array).",
21
+ "typeName": "FileTreeFile[]",
22
+ "typeShape": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
23
+ "default": "[]",
24
+ "typeImport": "FileTreeFile",
25
+ "displayType": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]"
26
+ },
27
+ {
28
+ "name": "tab",
29
+ "type": "undefined | \"preview\" | \"code\"",
30
+ "optional": true,
31
+ "scalar": true,
32
+ "description": "Active tab: `preview` (default) or `code`.",
33
+ "default": "'preview'",
34
+ "displayType": "undefined | \"preview\" | \"code\""
35
+ },
36
+ {
37
+ "name": "activeFile",
38
+ "type": "undefined | string",
39
+ "optional": true,
40
+ "scalar": true,
41
+ "description": "Selected file path — syncs the tree highlight, Code source, and preview.",
42
+ "displayType": "undefined | string"
43
+ },
44
+ {
45
+ "name": "sandbox",
46
+ "type": "undefined | string",
47
+ "optional": true,
48
+ "scalar": true,
49
+ "description": "iframe `sandbox` override. Secure default `allow-scripts allow-forms` (NOT `allow-same-origin`).",
50
+ "default": "'allow-scripts allow-forms'",
51
+ "displayType": "undefined | string"
52
+ },
53
+ {
54
+ "name": "iframeTitle",
55
+ "type": "undefined | string",
56
+ "optional": true,
57
+ "scalar": true,
58
+ "description": "Accessible title for the preview iframe.",
59
+ "displayType": "undefined | string"
60
+ },
61
+ {
62
+ "name": "maximized",
63
+ "type": "undefined | false | true",
64
+ "optional": true,
65
+ "scalar": true,
66
+ "description": "Reflects the artifact's own maximized view-state (usually driven by the protocol).",
67
+ "default": "false",
68
+ "displayType": "undefined | false | true"
69
+ },
70
+ {
71
+ "name": "expandable",
72
+ "type": "undefined | false | true",
73
+ "optional": true,
74
+ "scalar": true,
75
+ "description": "Show the expand-to-fill button (OPT-IN).",
76
+ "default": "false",
77
+ "displayType": "undefined | false | true"
78
+ },
79
+ {
80
+ "name": "openInTab",
81
+ "type": "undefined | false | true",
82
+ "optional": true,
83
+ "scalar": true,
84
+ "description": "Show the open-in-new-tab button (OPT-IN).",
85
+ "default": "false",
86
+ "displayType": "undefined | false | true"
87
+ },
88
+ {
89
+ "name": "noNav",
90
+ "type": "undefined | false | true",
91
+ "optional": true,
92
+ "scalar": true,
93
+ "description": "Hide back/forward.",
94
+ "default": "false",
95
+ "displayType": "undefined | false | true"
96
+ },
97
+ {
98
+ "name": "noReload",
99
+ "type": "undefined | false | true",
100
+ "optional": true,
101
+ "scalar": true,
102
+ "description": "Hide reload.",
103
+ "default": "false",
104
+ "displayType": "undefined | false | true"
105
+ },
106
+ {
107
+ "name": "noHome",
108
+ "type": "undefined | false | true",
109
+ "optional": true,
110
+ "scalar": true,
111
+ "description": "Hide home.",
112
+ "default": "false",
113
+ "displayType": "undefined | false | true"
114
+ },
115
+ {
116
+ "name": "noPathField",
117
+ "type": "undefined | false | true",
118
+ "optional": true,
119
+ "scalar": true,
120
+ "description": "Hide the address field.",
121
+ "default": "false",
122
+ "displayType": "undefined | false | true"
123
+ },
124
+ {
125
+ "name": "noTabs",
126
+ "type": "undefined | false | true",
127
+ "optional": true,
128
+ "scalar": true,
129
+ "description": "Hide the Preview|Code toggle.",
130
+ "default": "false",
131
+ "displayType": "undefined | false | true"
132
+ },
133
+ {
134
+ "name": "standalone",
135
+ "type": "undefined | false | true",
136
+ "optional": true,
137
+ "scalar": true,
138
+ "description": "Standalone chrome: rounded corners + border (else square, borderless in-panel).",
139
+ "default": "false",
140
+ "displayType": "undefined | false | true"
141
+ },
142
+ {
143
+ "name": "readonlyPath",
144
+ "type": "undefined | false | true",
145
+ "optional": true,
146
+ "scalar": true,
147
+ "description": "Show the address but make it read-only (visible, nav-tracking, non-editable).",
148
+ "default": "false",
149
+ "displayType": "undefined | false | true"
150
+ }
151
+ ],
152
+ "events": [
153
+ {
154
+ "name": "kai-file-select",
155
+ "detail": "{ path: string }",
156
+ "description": "Fired when a file is selected. `detail.path`.",
157
+ "displayDetail": "{ path: string }"
158
+ },
159
+ {
160
+ "name": "kai-maximize-change",
161
+ "detail": "{ maximized: false | true }",
162
+ "description": "Artifact's own maximize button toggled (consumer-observable; non-bubbling).",
163
+ "displayDetail": "{ maximized: false | true }"
164
+ },
165
+ {
166
+ "name": "kai-navigate",
167
+ "detail": "{ url: string }",
168
+ "description": "Fired when the preview navigates. `detail.url` = the new location.",
169
+ "displayDetail": "{ url: string }"
170
+ },
171
+ {
172
+ "name": "kai-tab-change",
173
+ "detail": "{ tab: \"preview\" | \"code\" }",
174
+ "description": "Fired when the Preview|Code tab changes. `detail.tab`.",
175
+ "displayDetail": "{ tab: \"preview\" | \"code\" }"
176
+ }
177
+ ],
178
+ "composedFrom": [
179
+ {
180
+ "name": "Artifact",
181
+ "group": "Components",
182
+ "storyId": "solid-advanced-elements-artifact--docs"
183
+ }
184
+ ],
185
+ "tokens": []
186
+ },
187
+ {
188
+ "tag": "kai-attachments",
189
+ "className": "KaiAttachmentsElement",
190
+ "displayName": "Attachments",
191
+ "props": [
192
+ {
193
+ "name": "items",
194
+ "type": "{ id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]",
195
+ "optional": false,
196
+ "scalar": false,
197
+ "description": "The attachments to render. Set as a JS property (array).",
198
+ "typeName": "AttachmentData[]",
199
+ "typeShape": "{ id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]",
200
+ "default": "[]",
201
+ "typeImport": "AttachmentData",
202
+ "displayType": "AttachmentData[]"
203
+ },
204
+ {
205
+ "name": "variant",
206
+ "type": "undefined | \"grid\" | \"inline\" | \"list\"",
207
+ "optional": true,
208
+ "scalar": true,
209
+ "description": "Layout: `grid` = visual tiles, `inline` = icon + label chips, `list` = rows.",
210
+ "default": "'grid'",
211
+ "displayType": "undefined | \"grid\" | \"inline\" | \"list\""
212
+ },
213
+ {
214
+ "name": "hoverCard",
215
+ "type": "undefined | false | true",
216
+ "optional": true,
217
+ "scalar": true,
218
+ "description": "Wrap each item in a hover card that previews its details.",
219
+ "default": "false",
220
+ "displayType": "undefined | false | true"
221
+ },
222
+ {
223
+ "name": "removable",
224
+ "type": "undefined | false | true",
225
+ "optional": true,
226
+ "scalar": true,
227
+ "description": "Show a remove button per item; clicking it fires a `kai-remove` event.",
228
+ "default": "false",
229
+ "displayType": "undefined | false | true"
230
+ },
231
+ {
232
+ "name": "showMediaType",
233
+ "type": "undefined | false | true",
234
+ "optional": true,
235
+ "scalar": true,
236
+ "description": "Also show the media type beneath the filename (non-grid variants).",
237
+ "default": "false",
238
+ "displayType": "undefined | false | true"
239
+ },
240
+ {
241
+ "name": "emptyText",
242
+ "type": "undefined | string",
243
+ "optional": true,
244
+ "scalar": true,
245
+ "description": "Text shown when `items` is empty.",
246
+ "displayType": "undefined | string"
247
+ }
248
+ ],
249
+ "events": [
250
+ {
251
+ "name": "kai-remove",
252
+ "detail": "{ id: string }",
253
+ "description": "A remove button was clicked.",
254
+ "displayDetail": "{ id: string }"
255
+ }
256
+ ],
257
+ "composedFrom": [
258
+ {
259
+ "name": "Attachments",
260
+ "group": "Components",
261
+ "storyId": "solid-advanced-elements-attachments--docs"
262
+ },
263
+ {
264
+ "name": "Attachment",
265
+ "group": "Components",
266
+ "storyId": "solid-advanced-elements-attachment--docs"
267
+ },
268
+ {
269
+ "name": "AttachmentPreview",
270
+ "group": "Components",
271
+ "storyId": "solid-advanced-elements-attachmentpreview--docs"
272
+ },
273
+ {
274
+ "name": "AttachmentInfo",
275
+ "group": "Components",
276
+ "storyId": "solid-advanced-elements-attachmentinfo--docs"
277
+ },
278
+ {
279
+ "name": "AttachmentRemove",
280
+ "group": "Components",
281
+ "storyId": "solid-advanced-elements-attachmentremove--docs"
282
+ },
283
+ {
284
+ "name": "AttachmentHoverCard",
285
+ "group": "Components",
286
+ "storyId": "solid-advanced-elements-attachmenthovercard--docs"
287
+ },
288
+ {
289
+ "name": "AttachmentHoverCardTrigger",
290
+ "group": "Components",
291
+ "storyId": "solid-advanced-elements-attachmenthovercardtrigger--docs"
292
+ },
293
+ {
294
+ "name": "AttachmentHoverCardContent",
295
+ "group": "Components",
296
+ "storyId": "solid-advanced-elements-attachmenthovercardcontent--docs"
297
+ },
298
+ {
299
+ "name": "AttachmentEmpty",
300
+ "group": "Components",
301
+ "storyId": "solid-advanced-elements-attachmentempty--docs"
302
+ }
303
+ ],
304
+ "tokens": []
305
+ },
306
+ {
307
+ "tag": "kai-card",
308
+ "className": "KaiCardElement",
309
+ "displayName": "Card",
310
+ "props": [
311
+ {
312
+ "name": "heading",
313
+ "type": "undefined | string",
314
+ "optional": true,
315
+ "scalar": true,
316
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
317
+ "displayType": "undefined | string"
318
+ },
319
+ {
320
+ "name": "description",
321
+ "type": "undefined | string",
322
+ "optional": true,
323
+ "scalar": true,
324
+ "description": "Supporting text under the heading. Attribute: `description`.",
325
+ "displayType": "undefined | string"
326
+ },
327
+ {
328
+ "name": "errorMessage",
329
+ "type": "undefined | string",
330
+ "optional": true,
331
+ "scalar": true,
332
+ "description": "When set, the card renders its inline error state instead of the body. Attribute: `error-message`.",
333
+ "displayType": "undefined | string"
334
+ },
335
+ {
336
+ "name": "dense",
337
+ "type": "undefined | false | true",
338
+ "optional": true,
339
+ "scalar": true,
340
+ "description": "Compact spacing for dense lists. Attribute: `dense`.",
341
+ "default": "false",
342
+ "displayType": "undefined | false | true"
343
+ }
344
+ ],
345
+ "events": [],
346
+ "composedFrom": [
347
+ {
348
+ "name": "Card",
349
+ "group": "Components",
350
+ "storyId": "solid-advanced-elements-card--docs"
351
+ }
352
+ ],
353
+ "tokens": []
354
+ },
355
+ {
356
+ "tag": "kai-cards",
357
+ "className": "KaiCardsElement",
358
+ "displayName": "Cards",
359
+ "props": [
360
+ {
361
+ "name": "cards",
362
+ "type": "undefined | { type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } }[]",
363
+ "optional": true,
364
+ "scalar": false,
365
+ "description": "The stream of card envelopes to render. Set as a JS PROPERTY: `el.cards = [...]`.",
366
+ "displayType": "undefined | { type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } }[]"
367
+ },
368
+ {
369
+ "name": "types",
370
+ "type": "undefined | Record<string, string>",
371
+ "optional": true,
372
+ "scalar": false,
373
+ "description": "Optional type→tag overrides/additions (merged over the built-ins). Property: `el.types`. Typed as a plain string map (not the `CardTagMap` alias) so the generated React wrapper inlines it instead of emitting an unresolved named type.",
374
+ "displayType": "undefined | Record<string, string>"
375
+ },
376
+ {
377
+ "name": "policy",
378
+ "type": "undefined | { onSubmit?: undefined | (cardId: string, data: unknown) => void; onAction?: undefined | (cardId: string, action: string, payload?: unknown) => void; onSendPrompt?: undefined | (text: string, opts: { mode: \"compose\" | \"send\"; context?: unknown; }) => void; onOpen?: undefined | (url: string, target: \"tab\" | \"artifact\") => void; onState?: undefined | (cardId: string, patch: unknown) => void; onDismiss?: undefined | (cardId: string) => void; onError?: undefined | (cardId: string, message: string) => void; maxSendPromptMode?: undefined | \"compose\" | \"send\" }",
379
+ "optional": true,
380
+ "scalar": false,
381
+ "description": "Optional CardPolicy handling child events. Property: `el.policy`.",
382
+ "displayType": "undefined | { onSubmit?: undefined | (cardId: string, data: unknown) => void; onAction?: undefined | (cardId: string, action: string, payload?: unknown) => void; onSendPrompt?: undefined | (text: string, opts: { mode: \"compose\" | \"send\"; context?: unknown; }) => void; onOpen?: undefined | (url: string, target: \"tab\" | \"artifact\") => void; onState?: undefined | (cardId: string, patch: unknown) => void; onDismiss?: undefined | (cardId: string) => void; onError?: undefined | (cardId: string, message: string) => void; maxSendPromptMode?: undefined | \"compose\" | \"send\" }"
383
+ }
384
+ ],
385
+ "events": [],
386
+ "composedFrom": [
387
+ {
388
+ "name": "CardFallback",
389
+ "group": "Components",
390
+ "storyId": "solid-advanced-elements-cardfallback--docs"
391
+ }
392
+ ],
393
+ "tokens": []
394
+ },
395
+ {
396
+ "tag": "kai-chain-of-thought",
397
+ "className": "KaiChainOfThoughtElement",
398
+ "displayName": "ChainOfThought",
399
+ "props": [
400
+ {
401
+ "name": "steps",
402
+ "type": "{ label: string; content?: undefined | string }[]",
403
+ "optional": false,
404
+ "scalar": false,
405
+ "description": "The reasoning steps. Set as a JS property. Compound sub-parts collapse to this one data model (Route 1).",
406
+ "typeName": "Step[]",
407
+ "typeShape": "{ label: string; content?: undefined | string }[]",
408
+ "default": "[]",
409
+ "displayType": "{ label: string; content?: undefined | string }[]"
410
+ }
411
+ ],
412
+ "events": [],
413
+ "composedFrom": [
414
+ {
415
+ "name": "ChainOfThought",
416
+ "group": "Components",
417
+ "storyId": "solid-advanced-elements-chainofthought--docs"
418
+ },
419
+ {
420
+ "name": "ChainOfThoughtStep",
421
+ "group": "Components",
422
+ "storyId": "solid-advanced-elements-chainofthoughtstep--docs"
423
+ },
424
+ {
425
+ "name": "ChainOfThoughtTrigger",
426
+ "group": "Components",
427
+ "storyId": "solid-advanced-elements-chainofthoughttrigger--docs"
428
+ },
429
+ {
430
+ "name": "ChainOfThoughtContent",
431
+ "group": "Components",
432
+ "storyId": "solid-advanced-elements-chainofthoughtcontent--docs"
433
+ },
434
+ {
435
+ "name": "ChainOfThoughtItem",
436
+ "group": "Components",
437
+ "storyId": "solid-advanced-elements-chainofthoughtitem--docs"
438
+ }
439
+ ],
440
+ "tokens": []
441
+ },
442
+ {
443
+ "tag": "kai-chat",
444
+ "className": "KaiChatElement",
445
+ "displayName": "Chat",
446
+ "props": [
447
+ {
448
+ "name": "messages",
449
+ "type": "{ id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string } }[]",
450
+ "optional": false,
451
+ "scalar": false,
452
+ "description": "The full message thread to render, newest last. Each entry carries its role, content, and optional reasoning/tools/attachments/actions. Set as a JS property (`el.messages = [...]`).",
453
+ "typeName": "ChatMessage[]",
454
+ "typeShape": "{ id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string } }[]",
455
+ "default": "[]",
456
+ "displayType": "{ id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string } }[]"
457
+ },
458
+ {
459
+ "name": "value",
460
+ "type": "undefined | string",
461
+ "optional": true,
462
+ "scalar": true,
463
+ "description": "Controlled value of the input. When set, the host owns the input text and must update it on `kai-value-change`; leave unset for uncontrolled behavior.",
464
+ "displayType": "undefined | string"
465
+ },
466
+ {
467
+ "name": "placeholder",
468
+ "type": "undefined | string",
469
+ "optional": true,
470
+ "scalar": true,
471
+ "description": "Placeholder text shown in the empty input.",
472
+ "default": "'Send a message...'",
473
+ "displayType": "undefined | string"
474
+ },
475
+ {
476
+ "name": "loading",
477
+ "type": "undefined | false | true",
478
+ "optional": true,
479
+ "scalar": true,
480
+ "description": "When true, shows the loading/streaming state and disables submit (use while awaiting the assistant's reply).",
481
+ "default": "false",
482
+ "displayType": "undefined | false | true"
483
+ },
484
+ {
485
+ "name": "suggestions",
486
+ "type": "undefined | string[]",
487
+ "optional": true,
488
+ "scalar": false,
489
+ "description": "Starter prompts shown above the input when the thread is empty. Clicking one follows `suggestionMode`. Set as a JS property.",
490
+ "displayType": "undefined | string[]"
491
+ },
492
+ {
493
+ "name": "suggestionMode",
494
+ "type": "undefined | \"submit\" | \"fill\"",
495
+ "optional": true,
496
+ "scalar": true,
497
+ "description": "What clicking a suggestion does: `'submit'` (default) sends it immediately as if typed and submitted; `'fill'` just places it in the input.",
498
+ "default": "'submit'",
499
+ "displayType": "undefined | \"submit\" | \"fill\""
500
+ },
501
+ {
502
+ "name": "persistSuggestions",
503
+ "type": "undefined | false | true",
504
+ "optional": true,
505
+ "scalar": true,
506
+ "description": "Keep suggestions visible after the conversation starts. By default suggestions are conversation starters and hide once `messages` is non-empty; set this to keep them always shown. Default false.",
507
+ "default": "false",
508
+ "displayType": "undefined | false | true"
509
+ },
510
+ {
511
+ "name": "proseSize",
512
+ "type": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\"",
513
+ "optional": true,
514
+ "scalar": true,
515
+ "description": "Body/prose font scale for rendered markdown (`'xs' | 'sm' | 'base' | 'lg'`). Defaults to `'sm'`.",
516
+ "default": "'sm'",
517
+ "displayType": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
518
+ },
519
+ {
520
+ "name": "codeTheme",
521
+ "type": "undefined | string",
522
+ "optional": true,
523
+ "scalar": true,
524
+ "description": "Shiki theme name for syntax-highlighted code blocks (e.g. `'github-dark-dimmed'`).",
525
+ "default": "'github-dark-dimmed'",
526
+ "displayType": "undefined | string"
527
+ },
528
+ {
529
+ "name": "codeHighlight",
530
+ "type": "undefined | false | true",
531
+ "optional": true,
532
+ "scalar": true,
533
+ "description": "Enable Shiki syntax highlighting in code blocks. Turn off to render plain `<pre>` blocks (lighter, no highlighter load). Default true.",
534
+ "default": "true",
535
+ "displayType": "undefined | false | true"
536
+ },
537
+ {
538
+ "name": "chatTitle",
539
+ "type": "undefined | string",
540
+ "optional": true,
541
+ "scalar": true,
542
+ "description": "Optional header title shown on the left of the header.",
543
+ "displayType": "undefined | string"
544
+ },
545
+ {
546
+ "name": "models",
547
+ "type": "undefined | { id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]",
548
+ "optional": true,
549
+ "scalar": false,
550
+ "description": "Optional model list. When set (>1 model) a ModelSwitcher is shown in the header and a `kai-model-change` event fires on selection.",
551
+ "displayType": "undefined | { id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]"
552
+ },
553
+ {
554
+ "name": "currentModel",
555
+ "type": "undefined | string",
556
+ "optional": true,
557
+ "scalar": true,
558
+ "description": "The currently selected model id (pairs with `models`).",
559
+ "displayType": "undefined | string"
560
+ },
561
+ {
562
+ "name": "context",
563
+ "type": "undefined | { usedTokens: number; maxTokens: number; inputTokens?: undefined | number; outputTokens?: undefined | number; estimatedCost?: undefined | number }",
564
+ "optional": true,
565
+ "scalar": false,
566
+ "description": "Optional context-window token usage. When set, a Context token meter is shown in the header.",
567
+ "displayType": "ContextData | undefined"
568
+ },
569
+ {
570
+ "name": "scrollButton",
571
+ "type": "undefined | false | true",
572
+ "optional": true,
573
+ "scalar": true,
574
+ "description": "Show the scroll-to-bottom button inside the scroll area. Default true.",
575
+ "default": "true",
576
+ "displayType": "undefined | false | true"
577
+ },
578
+ {
579
+ "name": "headerStart",
580
+ "type": "undefined | false | true",
581
+ "optional": true,
582
+ "scalar": true,
583
+ "description": "Whether the host has `slot=\"header-start\"` content (left of the title) — set by the `<kai-chat>` facade so a custom control forces the header open.",
584
+ "displayType": "undefined | false | true"
585
+ },
586
+ {
587
+ "name": "headerEnd",
588
+ "type": "undefined | false | true",
589
+ "optional": true,
590
+ "scalar": true,
591
+ "description": "Whether the host has `slot=\"header-end\"` content (right of the controls).",
592
+ "displayType": "undefined | false | true"
593
+ },
594
+ {
595
+ "name": "search",
596
+ "type": "undefined | false | true",
597
+ "optional": true,
598
+ "scalar": true,
599
+ "description": "Show a Search (Globe) button in the input toolbar; fires a `search` event.",
600
+ "default": "false",
601
+ "displayType": "undefined | false | true"
602
+ },
603
+ {
604
+ "name": "voice",
605
+ "type": "undefined | false | true",
606
+ "optional": true,
607
+ "scalar": true,
608
+ "description": "Show a Voice (Mic) button in the input toolbar; fires a `voice` event.",
609
+ "default": "false",
610
+ "displayType": "undefined | false | true"
611
+ },
612
+ {
613
+ "name": "slashCommands",
614
+ "type": "undefined | { id: string; label: string; description?: undefined | string; category?: undefined | string }[]",
615
+ "optional": true,
616
+ "scalar": false,
617
+ "description": "Slash commands — when set, typing `/` in the input opens the command palette and fires `kai-slash-select`. Set as a JS property.",
618
+ "displayType": "SlashCommandItem[] | undefined"
619
+ },
620
+ {
621
+ "name": "slashActiveIds",
622
+ "type": "undefined | string[]",
623
+ "optional": true,
624
+ "scalar": false,
625
+ "description": "Command ids to highlight as active in the palette.",
626
+ "displayType": "undefined | string[]"
627
+ },
628
+ {
629
+ "name": "slashCompact",
630
+ "type": "undefined | false | true",
631
+ "optional": true,
632
+ "scalar": true,
633
+ "description": "Single-line palette rows.",
634
+ "default": "false",
635
+ "displayType": "undefined | false | true"
636
+ },
637
+ {
638
+ "name": "actionsReveal",
639
+ "type": "undefined | \"always\" | \"hover\"",
640
+ "optional": true,
641
+ "scalar": true,
642
+ "description": "Whether each message's action bar is always visible (`'always'`, default) or only revealed on hover of that message row (`'hover'`).",
643
+ "default": "'always'",
644
+ "displayType": "undefined | \"always\" | \"hover\""
645
+ }
646
+ ],
647
+ "events": [
648
+ {
649
+ "name": "kai-message-action",
650
+ "detail": "{ messageId: string; action: string }",
651
+ "description": "An action button on a message was clicked. `action` is the built-in name or custom id.",
652
+ "displayDetail": "{ messageId: string; action: string }"
653
+ },
654
+ {
655
+ "name": "kai-model-change",
656
+ "detail": "{ modelId: string }",
657
+ "description": "The header model switcher changed.",
658
+ "displayDetail": "{ modelId: string }"
659
+ },
660
+ {
661
+ "name": "kai-search",
662
+ "detail": "Record<string, never>",
663
+ "description": "The Search button was clicked.",
664
+ "displayDetail": "Record<string, never>"
665
+ },
666
+ {
667
+ "name": "kai-slash-select",
668
+ "detail": "{ command: { id: string; label: string; description?: undefined | string; category?: undefined | string } }",
669
+ "description": "A slash command was chosen from the palette.",
670
+ "displayDetail": "{ command: SlashCommandItem }"
671
+ },
672
+ {
673
+ "name": "kai-submit",
674
+ "detail": "{ value: string; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }",
675
+ "description": "User submitted a message.",
676
+ "displayDetail": "{ value: string; attachments: AttachmentData[] }"
677
+ },
678
+ {
679
+ "name": "kai-suggestion-click",
680
+ "detail": "{ value: string }",
681
+ "description": "A suggestion chip was clicked (only in `suggestion-mode=\"fill\"`).",
682
+ "displayDetail": "{ value: string }"
683
+ },
684
+ {
685
+ "name": "kai-value-change",
686
+ "detail": "{ value: string }",
687
+ "description": "Fired on every input change.",
688
+ "displayDetail": "{ value: string }"
689
+ },
690
+ {
691
+ "name": "kai-voice",
692
+ "detail": "Record<string, never>",
693
+ "description": "The Mic / voice button was clicked.",
694
+ "displayDetail": "Record<string, never>"
695
+ }
696
+ ],
697
+ "composedFrom": [
698
+ {
699
+ "name": "ChatThread",
700
+ "group": "Components",
701
+ "storyId": "solid-advanced-elements-chatthread--docs"
702
+ }
703
+ ],
704
+ "tokens": []
705
+ },
706
+ {
707
+ "tag": "kai-checkpoint",
708
+ "className": "KaiCheckpointElement",
709
+ "displayName": "Checkpoint",
710
+ "props": [
711
+ {
712
+ "name": "label",
713
+ "type": "undefined | string",
714
+ "optional": true,
715
+ "scalar": true,
716
+ "description": "Optional text beside the icon.",
717
+ "displayType": "undefined | string"
718
+ },
719
+ {
720
+ "name": "tooltip",
721
+ "type": "undefined | string",
722
+ "optional": true,
723
+ "scalar": true,
724
+ "description": "Tooltip on hover.",
725
+ "displayType": "undefined | string"
726
+ },
727
+ {
728
+ "name": "variant",
729
+ "type": "undefined | \"ghost\" | \"default\" | \"outline\"",
730
+ "optional": true,
731
+ "scalar": true,
732
+ "description": "Visual button style.",
733
+ "default": "'ghost'",
734
+ "displayType": "undefined | \"ghost\" | \"default\" | \"outline\""
735
+ },
736
+ {
737
+ "name": "size",
738
+ "type": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\"",
739
+ "optional": true,
740
+ "scalar": true,
741
+ "description": "Button size (use an `icon*` size for an icon-only checkpoint).",
742
+ "default": "'sm'",
743
+ "displayType": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
744
+ }
745
+ ],
746
+ "events": [
747
+ {
748
+ "name": "kai-select",
749
+ "detail": null,
750
+ "description": "The checkpoint was clicked.",
751
+ "displayDetail": null
752
+ }
753
+ ],
754
+ "composedFrom": [
755
+ {
756
+ "name": "Checkpoint",
757
+ "group": "Components",
758
+ "storyId": "solid-advanced-elements-checkpoint--docs"
759
+ },
760
+ {
761
+ "name": "CheckpointIcon",
762
+ "group": "Components",
763
+ "storyId": "solid-advanced-elements-checkpointicon--docs"
764
+ },
765
+ {
766
+ "name": "CheckpointTrigger",
767
+ "group": "Components",
768
+ "storyId": "solid-advanced-elements-checkpointtrigger--docs"
769
+ }
770
+ ],
771
+ "tokens": []
772
+ },
773
+ {
774
+ "tag": "kai-choice",
775
+ "className": "KaiChoiceElement",
776
+ "displayName": "Choice",
777
+ "props": [
778
+ {
779
+ "name": "data",
780
+ "type": "undefined | Record<string, unknown>",
781
+ "optional": true,
782
+ "scalar": false,
783
+ "description": "The choice definition (the CardEnvelope.data). Set as a JS PROPERTY: `el.data = { prompt, options:[…], allowOther?, submitLabel? }`. Import `ChoiceCardData` from `@kitn.ai/ui` for the full shape.",
784
+ "displayType": "undefined | Record<string, unknown>"
785
+ },
786
+ {
787
+ "name": "cardId",
788
+ "type": "undefined | string",
789
+ "optional": true,
790
+ "scalar": true,
791
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
792
+ "displayType": "undefined | string"
793
+ },
794
+ {
795
+ "name": "heading",
796
+ "type": "undefined | string",
797
+ "optional": true,
798
+ "scalar": true,
799
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
800
+ "displayType": "undefined | string"
801
+ },
802
+ {
803
+ "name": "resolution",
804
+ "type": "undefined | Record<string, unknown>",
805
+ "optional": true,
806
+ "scalar": false,
807
+ "description": "Set when the user resolved this card; renders the read-only view. Property: `el.resolution = { kind:'action', action:'…' }`.",
808
+ "displayType": "undefined | Record<string, unknown>"
809
+ }
810
+ ],
811
+ "events": [],
812
+ "composedFrom": [
813
+ {
814
+ "name": "ChoiceCard",
815
+ "group": "Components",
816
+ "storyId": "solid-advanced-elements-choicecard--docs"
817
+ }
818
+ ],
819
+ "tokens": []
820
+ },
821
+ {
822
+ "tag": "kai-code-block",
823
+ "className": "KaiCodeBlockElement",
824
+ "displayName": "CodeBlock",
825
+ "props": [
826
+ {
827
+ "name": "code",
828
+ "type": "string",
829
+ "optional": false,
830
+ "scalar": true,
831
+ "description": "The source code to render.",
832
+ "default": "''",
833
+ "displayType": "string"
834
+ },
835
+ {
836
+ "name": "language",
837
+ "type": "undefined | string",
838
+ "optional": true,
839
+ "scalar": true,
840
+ "description": "Language grammar (e.g. `js`, `python`). Defaults to `tsx`.",
841
+ "displayType": "undefined | string"
842
+ },
843
+ {
844
+ "name": "codeTheme",
845
+ "type": "undefined | string",
846
+ "optional": true,
847
+ "scalar": true,
848
+ "description": "Shiki theme name.",
849
+ "default": "'github-dark-dimmed'",
850
+ "displayType": "undefined | string"
851
+ },
852
+ {
853
+ "name": "codeHighlight",
854
+ "type": "undefined | false | true",
855
+ "optional": true,
856
+ "scalar": true,
857
+ "description": "Disable syntax highlighting (renders plain text, no Shiki).",
858
+ "default": "true",
859
+ "displayType": "undefined | false | true"
860
+ },
861
+ {
862
+ "name": "proseSize",
863
+ "type": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\"",
864
+ "optional": true,
865
+ "scalar": true,
866
+ "description": "Code text sizing.",
867
+ "default": "'sm'",
868
+ "displayType": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
869
+ }
870
+ ],
871
+ "events": [],
872
+ "composedFrom": [
873
+ {
874
+ "name": "CodeBlock",
875
+ "group": "Components",
876
+ "storyId": "solid-advanced-elements-codeblock--docs"
877
+ },
878
+ {
879
+ "name": "CodeBlockCode",
880
+ "group": "Components",
881
+ "storyId": "solid-advanced-elements-codeblockcode--docs"
882
+ }
883
+ ],
884
+ "tokens": [
885
+ "--color-code-foreground"
886
+ ]
887
+ },
888
+ {
889
+ "tag": "kai-confirm",
890
+ "className": "KaiConfirmElement",
891
+ "displayName": "Confirm",
892
+ "props": [
893
+ {
894
+ "name": "data",
895
+ "type": "undefined | Record<string, unknown>",
896
+ "optional": true,
897
+ "scalar": false,
898
+ "description": "The confirm definition (the CardEnvelope.data). Set as a JS PROPERTY: `el.data = { body, tone, actions:[…] }`. Import `ConfirmCardData` from `@kitn.ai/ui` for the full shape.",
899
+ "displayType": "undefined | Record<string, unknown>"
900
+ },
901
+ {
902
+ "name": "cardId",
903
+ "type": "undefined | string",
904
+ "optional": true,
905
+ "scalar": true,
906
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
907
+ "displayType": "undefined | string"
908
+ },
909
+ {
910
+ "name": "heading",
911
+ "type": "undefined | string",
912
+ "optional": true,
913
+ "scalar": true,
914
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
915
+ "displayType": "undefined | string"
916
+ },
917
+ {
918
+ "name": "autofocus",
919
+ "type": "undefined | false | true",
920
+ "optional": true,
921
+ "scalar": true,
922
+ "description": "Focus the default action on mount (off by default — no focus-stealing). Attribute: `autofocus`.",
923
+ "default": "false",
924
+ "displayType": "undefined | false | true"
925
+ },
926
+ {
927
+ "name": "resolution",
928
+ "type": "undefined | Record<string, unknown>",
929
+ "optional": true,
930
+ "scalar": false,
931
+ "description": "Set when the user resolved this card; renders the read-only view. Property: `el.resolution = { kind:'action', action:'…' }`.",
932
+ "displayType": "undefined | Record<string, unknown>"
933
+ }
934
+ ],
935
+ "events": [],
936
+ "composedFrom": [
937
+ {
938
+ "name": "ConfirmCard",
939
+ "group": "Components",
940
+ "storyId": "solid-advanced-elements-confirmcard--docs"
941
+ }
942
+ ],
943
+ "tokens": []
944
+ },
945
+ {
946
+ "tag": "kai-context",
947
+ "className": "KaiContextElement",
948
+ "displayName": "Context",
949
+ "props": [
950
+ {
951
+ "name": "context",
952
+ "type": "undefined | { usedTokens: number; maxTokens: number; inputTokens?: undefined | number; outputTokens?: undefined | number; reasoningTokens?: undefined | number; cacheTokens?: undefined | number; estimatedCost?: undefined | number }",
953
+ "optional": true,
954
+ "scalar": false,
955
+ "description": "Token-usage data. Set as a JS property.",
956
+ "displayType": "ContextData | undefined"
957
+ },
958
+ {
959
+ "name": "warnThreshold",
960
+ "type": "undefined | number",
961
+ "optional": true,
962
+ "scalar": true,
963
+ "description": "Fraction (0–1) above which the meter turns yellow. Defaults to `0.7` (70%).",
964
+ "displayType": "undefined | number"
965
+ },
966
+ {
967
+ "name": "dangerThreshold",
968
+ "type": "undefined | number",
969
+ "optional": true,
970
+ "scalar": true,
971
+ "description": "Fraction (0–1) above which the meter turns red. Defaults to `0.9` (90%).",
972
+ "displayType": "undefined | number"
973
+ }
974
+ ],
975
+ "events": [
976
+ {
977
+ "name": "kai-threshold-change",
978
+ "detail": "{ level: \"ok\" | \"warn\" | \"danger\" }",
979
+ "description": "Fires when the computed severity level changes (ok → warn → danger or back). `detail.level` is `'ok'`, `'warn'`, or `'danger'`.",
980
+ "displayDetail": "{ level: \"ok\" | \"warn\" | \"danger\" }"
981
+ }
982
+ ],
983
+ "composedFrom": [
984
+ {
985
+ "name": "Context",
986
+ "group": "Components",
987
+ "storyId": "solid-advanced-elements-context--docs"
988
+ },
989
+ {
990
+ "name": "ContextTrigger",
991
+ "group": "Components",
992
+ "storyId": "solid-advanced-elements-contexttrigger--docs"
993
+ },
994
+ {
995
+ "name": "ContextContent",
996
+ "group": "Components",
997
+ "storyId": "solid-advanced-elements-contextcontent--docs"
998
+ },
999
+ {
1000
+ "name": "ContextContentHeader",
1001
+ "group": "Components",
1002
+ "storyId": "solid-advanced-elements-contextcontentheader--docs"
1003
+ },
1004
+ {
1005
+ "name": "ContextContentBody",
1006
+ "group": "Components",
1007
+ "storyId": "solid-advanced-elements-contextcontentbody--docs"
1008
+ },
1009
+ {
1010
+ "name": "ContextContentFooter",
1011
+ "group": "Components",
1012
+ "storyId": "solid-advanced-elements-contextcontentfooter--docs"
1013
+ },
1014
+ {
1015
+ "name": "ContextInputUsage",
1016
+ "group": "Components",
1017
+ "storyId": "solid-advanced-elements-contextinputusage--docs"
1018
+ },
1019
+ {
1020
+ "name": "ContextOutputUsage",
1021
+ "group": "Components",
1022
+ "storyId": "solid-advanced-elements-contextoutputusage--docs"
1023
+ },
1024
+ {
1025
+ "name": "ContextReasoningUsage",
1026
+ "group": "Components",
1027
+ "storyId": "solid-advanced-elements-contextreasoningusage--docs"
1028
+ },
1029
+ {
1030
+ "name": "ContextCacheUsage",
1031
+ "group": "Components",
1032
+ "storyId": "solid-advanced-elements-contextcacheusage--docs"
1033
+ },
1034
+ {
1035
+ "name": "DEFAULT_WARN_THRESHOLD",
1036
+ "group": "Components",
1037
+ "storyId": "solid-advanced-elements-defaultwarnthreshold--docs"
1038
+ },
1039
+ {
1040
+ "name": "DEFAULT_DANGER_THRESHOLD",
1041
+ "group": "Components",
1042
+ "storyId": "solid-advanced-elements-defaultdangerthreshold--docs"
1043
+ }
1044
+ ],
1045
+ "tokens": []
1046
+ },
1047
+ {
1048
+ "tag": "kai-conversations",
1049
+ "className": "KaiConversationsElement",
1050
+ "displayName": "Conversations",
1051
+ "props": [
1052
+ {
1053
+ "name": "groups",
1054
+ "type": "{ id: string; userId?: undefined | string; teamId?: undefined | string; name: string; sortOrder: number; createdAt: string }[]",
1055
+ "optional": false,
1056
+ "scalar": false,
1057
+ "description": "Pre-bucketed conversation groups (e.g. \"Today\", \"Yesterday\"), each with its own conversations. Use this when you want to control the grouping/headers yourself; otherwise pass a flat `conversations` array. Set as a JS property.",
1058
+ "typeName": "ConversationGroup[]",
1059
+ "typeShape": "{ id: string; userId?: undefined | string; teamId?: undefined | string; name: string; sortOrder: number; createdAt: string }[]",
1060
+ "default": "[]",
1061
+ "typeImport": "ConversationGroup",
1062
+ "displayType": "ConversationGroup[]"
1063
+ },
1064
+ {
1065
+ "name": "conversations",
1066
+ "type": "{ id: string; title: string; groupId?: undefined | string; scope: { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt: string; updatedAt: string }[]",
1067
+ "optional": false,
1068
+ "scalar": false,
1069
+ "description": "A flat list of conversation summaries; the component buckets them by recency for you. Ignored when `groups` is provided. Set as a JS property.",
1070
+ "typeName": "ConversationSummary[]",
1071
+ "typeShape": "{ id: string; title: string; groupId?: undefined | string; scope: { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt: string; updatedAt: string }[]",
1072
+ "default": "[]",
1073
+ "typeImport": "ConversationSummary",
1074
+ "displayType": "ConversationSummary[]"
1075
+ },
1076
+ {
1077
+ "name": "activeId",
1078
+ "type": "undefined | string",
1079
+ "optional": true,
1080
+ "scalar": true,
1081
+ "description": "The id of the currently-open conversation, highlighted in the list.",
1082
+ "displayType": "undefined | string"
1083
+ }
1084
+ ],
1085
+ "events": [
1086
+ {
1087
+ "name": "kai-conversation-select",
1088
+ "detail": "{ id: string }",
1089
+ "description": "A conversation was selected.",
1090
+ "displayDetail": "{ id: string }"
1091
+ },
1092
+ {
1093
+ "name": "kai-new-chat",
1094
+ "detail": "Record<string, never>",
1095
+ "description": "The \"New chat\" button was clicked.",
1096
+ "displayDetail": "Record<string, never>"
1097
+ },
1098
+ {
1099
+ "name": "kai-toggle-sidebar",
1100
+ "detail": "Record<string, never>",
1101
+ "description": "The sidebar toggle was clicked.",
1102
+ "displayDetail": "Record<string, never>"
1103
+ }
1104
+ ],
1105
+ "composedFrom": [
1106
+ {
1107
+ "name": "ConversationList",
1108
+ "group": "Components",
1109
+ "storyId": "solid-advanced-elements-conversationlist--docs"
1110
+ }
1111
+ ],
1112
+ "tokens": [
1113
+ "--color-sidebar",
1114
+ "--color-scrollbar-thumb"
1115
+ ]
1116
+ },
1117
+ {
1118
+ "tag": "kai-embed",
1119
+ "className": "KaiEmbedElement",
1120
+ "displayName": "Embed",
1121
+ "props": [
1122
+ {
1123
+ "name": "cardId",
1124
+ "type": "undefined | string",
1125
+ "optional": true,
1126
+ "scalar": true,
1127
+ "description": "Stable card id correlating every emitted event. Set as an attribute or property.",
1128
+ "displayType": "undefined | string"
1129
+ },
1130
+ {
1131
+ "name": "data",
1132
+ "type": "undefined | { provider: \"youtube\" | \"vimeo\" | \"generic\"; id?: undefined | string; url?: undefined | string; title?: undefined | string; poster?: undefined | string; start?: undefined | number; aspectRatio?: undefined | \"16:9\" | \"4:3\" | \"1:1\" | \"9:16\" }",
1133
+ "optional": true,
1134
+ "scalar": false,
1135
+ "description": "The embed payload (provider + id/url + options). Set as a JS **property** (object).",
1136
+ "displayType": "undefined | { provider: \"youtube\" | \"vimeo\" | \"generic\"; id?: undefined | string; url?: undefined | string; title?: undefined | string; poster?: undefined | string; start?: undefined | number; aspectRatio?: undefined | \"16:9\" | \"4:3\" | \"1:1\" | \"9:16\" }"
1137
+ }
1138
+ ],
1139
+ "events": [],
1140
+ "composedFrom": [
1141
+ {
1142
+ "name": "Embed",
1143
+ "group": "Components",
1144
+ "storyId": "solid-advanced-elements-embed--docs"
1145
+ }
1146
+ ],
1147
+ "tokens": []
1148
+ },
1149
+ {
1150
+ "tag": "kai-empty",
1151
+ "className": "KaiEmptyElement",
1152
+ "displayName": "Empty",
1153
+ "props": [
1154
+ {
1155
+ "name": "emptyTitle",
1156
+ "type": "undefined | string",
1157
+ "optional": true,
1158
+ "scalar": true,
1159
+ "description": "Title text. Attribute: `empty-title` (`title` is a global HTML attribute).",
1160
+ "default": "''",
1161
+ "displayType": "undefined | string"
1162
+ },
1163
+ {
1164
+ "name": "description",
1165
+ "type": "undefined | string",
1166
+ "optional": true,
1167
+ "scalar": true,
1168
+ "description": "Description text.",
1169
+ "default": "''",
1170
+ "displayType": "undefined | string"
1171
+ }
1172
+ ],
1173
+ "events": [],
1174
+ "composedFrom": [
1175
+ {
1176
+ "name": "Empty",
1177
+ "group": "Components",
1178
+ "storyId": "solid-advanced-elements-empty--docs"
1179
+ },
1180
+ {
1181
+ "name": "EmptyHeader",
1182
+ "group": "Components",
1183
+ "storyId": "solid-advanced-elements-emptyheader--docs"
1184
+ },
1185
+ {
1186
+ "name": "EmptyMedia",
1187
+ "group": "Components",
1188
+ "storyId": "solid-advanced-elements-emptymedia--docs"
1189
+ },
1190
+ {
1191
+ "name": "EmptyTitle",
1192
+ "group": "Components",
1193
+ "storyId": "solid-advanced-elements-emptytitle--docs"
1194
+ },
1195
+ {
1196
+ "name": "EmptyDescription",
1197
+ "group": "Components",
1198
+ "storyId": "solid-advanced-elements-emptydescription--docs"
1199
+ },
1200
+ {
1201
+ "name": "EmptyContent",
1202
+ "group": "Components",
1203
+ "storyId": "solid-advanced-elements-emptycontent--docs"
1204
+ }
1205
+ ],
1206
+ "tokens": []
1207
+ },
1208
+ {
1209
+ "tag": "kai-feedback-bar",
1210
+ "className": "KaiFeedbackBarElement",
1211
+ "displayName": "FeedbackBar",
1212
+ "props": [
1213
+ {
1214
+ "name": "barTitle",
1215
+ "type": "undefined | string",
1216
+ "optional": true,
1217
+ "scalar": true,
1218
+ "description": "The banner label (e.g. \"Was this helpful?\"). Attribute: `bar-title` (`title` is avoided — it's a global HTML attribute).",
1219
+ "default": "'Was this helpful?'",
1220
+ "displayType": "undefined | string"
1221
+ },
1222
+ {
1223
+ "name": "collectDetail",
1224
+ "type": "undefined | false | true",
1225
+ "optional": true,
1226
+ "scalar": true,
1227
+ "description": "When set, a not-helpful vote opens an optional detail form before the thank-you confirmation. Attribute: `collect-detail`.",
1228
+ "displayType": "undefined | false | true"
1229
+ },
1230
+ {
1231
+ "name": "categories",
1232
+ "type": "undefined | string[]",
1233
+ "optional": true,
1234
+ "scalar": false,
1235
+ "description": "Optional category chips for the detail form. Set as a JS property (array).",
1236
+ "displayType": "undefined | string[]"
1237
+ },
1238
+ {
1239
+ "name": "detailTitle",
1240
+ "type": "undefined | string",
1241
+ "optional": true,
1242
+ "scalar": true,
1243
+ "description": "Heading for the detail form. Attribute: `detail-title`.",
1244
+ "displayType": "undefined | string"
1245
+ },
1246
+ {
1247
+ "name": "detailPlaceholder",
1248
+ "type": "undefined | string",
1249
+ "optional": true,
1250
+ "scalar": true,
1251
+ "description": "Placeholder for the detail comment box. Attribute: `detail-placeholder`.",
1252
+ "displayType": "undefined | string"
1253
+ },
1254
+ {
1255
+ "name": "submitLabel",
1256
+ "type": "undefined | string",
1257
+ "optional": true,
1258
+ "scalar": true,
1259
+ "description": "Submit button label in the detail form. Attribute: `submit-label`.",
1260
+ "displayType": "undefined | string"
1261
+ },
1262
+ {
1263
+ "name": "thanksMessage",
1264
+ "type": "undefined | string",
1265
+ "optional": true,
1266
+ "scalar": true,
1267
+ "description": "Confirmation copy shown after a vote/submit. Attribute: `thanks-message`.",
1268
+ "displayType": "undefined | string"
1269
+ }
1270
+ ],
1271
+ "events": [
1272
+ {
1273
+ "name": "kai-close",
1274
+ "detail": null,
1275
+ "description": "The user dismissed the banner.",
1276
+ "displayDetail": null
1277
+ },
1278
+ {
1279
+ "name": "kai-feedback",
1280
+ "detail": "{ value: \"helpful\" | \"not-helpful\" }",
1281
+ "description": "The user rated the response. `value` is `'helpful'` or `'not-helpful'`.",
1282
+ "displayDetail": "{ value: \"helpful\" | \"not-helpful\" }"
1283
+ },
1284
+ {
1285
+ "name": "kai-feedback-detail",
1286
+ "detail": "{ value: \"helpful\" | \"not-helpful\"; category?: undefined | string; comment?: undefined | string }",
1287
+ "description": "The user submitted the optional detail form (`collect-detail`).",
1288
+ "displayDetail": "{ value: \"helpful\" | \"not-helpful\"; category?: undefined | string; comment?: undefined | string }"
1289
+ }
1290
+ ],
1291
+ "composedFrom": [
1292
+ {
1293
+ "name": "FeedbackBar",
1294
+ "group": "Components",
1295
+ "storyId": "solid-advanced-elements-feedbackbar--docs"
1296
+ }
1297
+ ],
1298
+ "tokens": []
1299
+ },
1300
+ {
1301
+ "tag": "kai-file-tree",
1302
+ "className": "KaiFileTreeElement",
1303
+ "displayName": "FileTree",
1304
+ "props": [
1305
+ {
1306
+ "name": "files",
1307
+ "type": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
1308
+ "optional": false,
1309
+ "scalar": false,
1310
+ "description": "The files to render. Set as a JS property (array of `{ path, url?, code?, language?, type? }`).",
1311
+ "typeName": "FileTreeFile[]",
1312
+ "typeShape": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
1313
+ "default": "[]",
1314
+ "typeImport": "FileTreeFile",
1315
+ "displayType": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]"
1316
+ },
1317
+ {
1318
+ "name": "activeFile",
1319
+ "type": "undefined | string",
1320
+ "optional": true,
1321
+ "scalar": true,
1322
+ "description": "Selected file path — highlighted in the tree.",
1323
+ "displayType": "undefined | string"
1324
+ },
1325
+ {
1326
+ "name": "defaultExpanded",
1327
+ "type": "undefined | string[]",
1328
+ "optional": true,
1329
+ "scalar": false,
1330
+ "description": "Folder paths expanded initially. Omit to start with all folders open.",
1331
+ "displayType": "undefined | string[]"
1332
+ }
1333
+ ],
1334
+ "events": [
1335
+ {
1336
+ "name": "kai-select",
1337
+ "detail": "{ path: string }",
1338
+ "description": "Fired when a file is selected. `detail.path` = the file's path.",
1339
+ "displayDetail": "{ path: string }"
1340
+ }
1341
+ ],
1342
+ "composedFrom": [
1343
+ {
1344
+ "name": "FileTree",
1345
+ "group": "Components",
1346
+ "storyId": "solid-advanced-elements-filetree--docs"
1347
+ }
1348
+ ],
1349
+ "tokens": []
1350
+ },
1351
+ {
1352
+ "tag": "kai-file-upload",
1353
+ "className": "KaiFileUploadElement",
1354
+ "displayName": "FileUpload",
1355
+ "props": [
1356
+ {
1357
+ "name": "multiple",
1358
+ "type": "undefined | false | true",
1359
+ "optional": true,
1360
+ "scalar": true,
1361
+ "description": "Allow selecting multiple files (default true).",
1362
+ "default": "true",
1363
+ "displayType": "undefined | false | true"
1364
+ },
1365
+ {
1366
+ "name": "accept",
1367
+ "type": "undefined | string",
1368
+ "optional": true,
1369
+ "scalar": true,
1370
+ "description": "`accept` attribute for the file picker (e.g. `image/*`).",
1371
+ "displayType": "undefined | string"
1372
+ },
1373
+ {
1374
+ "name": "disabled",
1375
+ "type": "undefined | false | true",
1376
+ "optional": true,
1377
+ "scalar": true,
1378
+ "description": "Disable the dropzone — no clicking, no drag-and-drop.",
1379
+ "default": "false",
1380
+ "displayType": "undefined | false | true"
1381
+ },
1382
+ {
1383
+ "name": "label",
1384
+ "type": "undefined | string",
1385
+ "optional": true,
1386
+ "scalar": true,
1387
+ "description": "Default dropzone label (overridable via the default slot).",
1388
+ "default": "'Click or drop files to upload'",
1389
+ "displayType": "undefined | string"
1390
+ }
1391
+ ],
1392
+ "events": [
1393
+ {
1394
+ "name": "kai-files-added",
1395
+ "detail": "{ files: File[] }",
1396
+ "description": "Files were picked or dropped.",
1397
+ "displayDetail": "{ files: File[] }"
1398
+ }
1399
+ ],
1400
+ "composedFrom": [
1401
+ {
1402
+ "name": "FileUpload",
1403
+ "group": "Components",
1404
+ "storyId": "solid-advanced-elements-fileupload--docs"
1405
+ },
1406
+ {
1407
+ "name": "FileUploadTrigger",
1408
+ "group": "Components",
1409
+ "storyId": "solid-advanced-elements-fileuploadtrigger--docs"
1410
+ }
1411
+ ],
1412
+ "tokens": []
1413
+ },
1414
+ {
1415
+ "tag": "kai-form",
1416
+ "className": "KaiFormElement",
1417
+ "displayName": "Form",
1418
+ "props": [
1419
+ {
1420
+ "name": "data",
1421
+ "type": "undefined | Record<string, unknown>",
1422
+ "optional": true,
1423
+ "scalar": false,
1424
+ "description": "The form definition — a JSON Schema (`type:'object'`) + `x-kai-*` UI hints (the CardEnvelope.data). Set as a JS PROPERTY: `el.data = { type:'object', properties:{…} }`. Import the `FormDefinition` type from `@kitn.ai/ui` for the full shape (it is self-referential, so the element types it loosely).",
1425
+ "displayType": "undefined | Record<string, unknown>"
1426
+ },
1427
+ {
1428
+ "name": "cardId",
1429
+ "type": "undefined | string",
1430
+ "optional": true,
1431
+ "scalar": true,
1432
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
1433
+ "displayType": "undefined | string"
1434
+ },
1435
+ {
1436
+ "name": "heading",
1437
+ "type": "undefined | string",
1438
+ "optional": true,
1439
+ "scalar": true,
1440
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
1441
+ "displayType": "undefined | string"
1442
+ },
1443
+ {
1444
+ "name": "resolution",
1445
+ "type": "undefined | Record<string, unknown>",
1446
+ "optional": true,
1447
+ "scalar": false,
1448
+ "description": "Set when the user resolved this card; renders the read-only view. Property: `el.resolution = { kind:'submit', data:{…} }`.",
1449
+ "displayType": "undefined | Record<string, unknown>"
1450
+ }
1451
+ ],
1452
+ "events": [],
1453
+ "composedFrom": [
1454
+ {
1455
+ "name": "Form",
1456
+ "group": "Components",
1457
+ "storyId": "solid-advanced-elements-form--docs"
1458
+ }
1459
+ ],
1460
+ "tokens": []
1461
+ },
1462
+ {
1463
+ "tag": "kai-image",
1464
+ "className": "KaiImageElement",
1465
+ "displayName": "Image",
1466
+ "props": [
1467
+ {
1468
+ "name": "base64",
1469
+ "type": "undefined | string",
1470
+ "optional": true,
1471
+ "scalar": true,
1472
+ "description": "Base64-encoded image data (pair with `media-type`).",
1473
+ "displayType": "undefined | string"
1474
+ },
1475
+ {
1476
+ "name": "bytes",
1477
+ "type": "undefined | Uint8Array<ArrayBufferLike>",
1478
+ "optional": true,
1479
+ "scalar": false,
1480
+ "description": "Raw image bytes (set as a JS property).",
1481
+ "displayType": "undefined | Uint8Array<ArrayBufferLike>"
1482
+ },
1483
+ {
1484
+ "name": "alt",
1485
+ "type": "undefined | string",
1486
+ "optional": true,
1487
+ "scalar": true,
1488
+ "description": "Alt text.",
1489
+ "default": "''",
1490
+ "displayType": "undefined | string"
1491
+ },
1492
+ {
1493
+ "name": "mediaType",
1494
+ "type": "undefined | string",
1495
+ "optional": true,
1496
+ "scalar": true,
1497
+ "description": "MIME type (default `image/png`).",
1498
+ "displayType": "undefined | string"
1499
+ }
1500
+ ],
1501
+ "events": [],
1502
+ "composedFrom": [
1503
+ {
1504
+ "name": "Image",
1505
+ "group": "Components",
1506
+ "storyId": "solid-advanced-elements-image--docs"
1507
+ }
1508
+ ],
1509
+ "tokens": []
1510
+ },
1511
+ {
1512
+ "tag": "kai-link-preview",
1513
+ "className": "KaiLinkPreviewElement",
1514
+ "displayName": "LinkPreview",
1515
+ "props": [
1516
+ {
1517
+ "name": "cardId",
1518
+ "type": "undefined | string",
1519
+ "optional": true,
1520
+ "scalar": true,
1521
+ "description": "Stable card id correlating every emitted event. Set as an attribute or property.",
1522
+ "displayType": "undefined | string"
1523
+ },
1524
+ {
1525
+ "name": "data",
1526
+ "type": "undefined | { url: string; title?: undefined | string; description?: undefined | string; image?: undefined | string; imageAlt?: undefined | string; favicon?: undefined | string; domain?: undefined | string; siteName?: undefined | string }",
1527
+ "optional": true,
1528
+ "scalar": false,
1529
+ "description": "The link payload (OG metadata). Set as a JS **property** (object).",
1530
+ "displayType": "undefined | { url: string; title?: undefined | string; description?: undefined | string; image?: undefined | string; imageAlt?: undefined | string; favicon?: undefined | string; domain?: undefined | string; siteName?: undefined | string }"
1531
+ }
1532
+ ],
1533
+ "events": [],
1534
+ "composedFrom": [
1535
+ {
1536
+ "name": "LinkPreview",
1537
+ "group": "Components",
1538
+ "storyId": "solid-advanced-elements-linkpreview--docs"
1539
+ }
1540
+ ],
1541
+ "tokens": []
1542
+ },
1543
+ {
1544
+ "tag": "kai-loader",
1545
+ "className": "KaiLoaderElement",
1546
+ "displayName": "Loader",
1547
+ "props": [
1548
+ {
1549
+ "name": "variant",
1550
+ "type": "undefined | \"circular\" | \"classic\" | \"pulse\" | \"pulse-dot\" | \"dots\" | \"typing\" | \"wave\" | \"bars\" | \"terminal\" | \"text-blink\" | \"text-shimmer\" | \"loading-dots\"",
1551
+ "optional": true,
1552
+ "scalar": true,
1553
+ "description": "The animation style: `'circular' | 'classic' | 'pulse' | 'pulse-dot' | 'dots' | 'typing' | 'wave' | 'bars' | 'terminal' | 'text-blink' | 'text-shimmer' | 'loading-dots'`. Defaults to `'circular'`.",
1554
+ "default": "'circular'",
1555
+ "displayType": "LoaderVariant | undefined"
1556
+ },
1557
+ {
1558
+ "name": "size",
1559
+ "type": "undefined | \"sm\" | \"lg\" | \"md\"",
1560
+ "optional": true,
1561
+ "scalar": true,
1562
+ "description": "Loader size: `'sm' | 'md' | 'lg'`. Defaults to `'md'`.",
1563
+ "default": "'md'",
1564
+ "displayType": "undefined | \"sm\" | \"lg\" | \"md\""
1565
+ },
1566
+ {
1567
+ "name": "text",
1568
+ "type": "undefined | string",
1569
+ "optional": true,
1570
+ "scalar": true,
1571
+ "description": "Label for the text-based variants.",
1572
+ "displayType": "undefined | string"
1573
+ }
1574
+ ],
1575
+ "events": [],
1576
+ "composedFrom": [
1577
+ {
1578
+ "name": "Loader",
1579
+ "group": "Components",
1580
+ "storyId": "solid-advanced-elements-loader--docs"
1581
+ }
1582
+ ],
1583
+ "tokens": []
1584
+ },
1585
+ {
1586
+ "tag": "kai-markdown",
1587
+ "className": "KaiMarkdownElement",
1588
+ "displayName": "Markdown",
1589
+ "props": [
1590
+ {
1591
+ "name": "content",
1592
+ "type": "string",
1593
+ "optional": false,
1594
+ "scalar": true,
1595
+ "description": "The markdown source to render.",
1596
+ "default": "''",
1597
+ "displayType": "string"
1598
+ },
1599
+ {
1600
+ "name": "proseSize",
1601
+ "type": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\"",
1602
+ "optional": true,
1603
+ "scalar": true,
1604
+ "description": "Text/markdown sizing.",
1605
+ "default": "'sm'",
1606
+ "displayType": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
1607
+ },
1608
+ {
1609
+ "name": "codeTheme",
1610
+ "type": "undefined | string",
1611
+ "optional": true,
1612
+ "scalar": true,
1613
+ "description": "Shiki theme for fenced code blocks.",
1614
+ "default": "'github-dark-dimmed'",
1615
+ "displayType": "undefined | string"
1616
+ },
1617
+ {
1618
+ "name": "codeHighlight",
1619
+ "type": "undefined | false | true",
1620
+ "optional": true,
1621
+ "scalar": true,
1622
+ "description": "Disable syntax highlighting (no Shiki loads).",
1623
+ "default": "true",
1624
+ "displayType": "undefined | false | true"
1625
+ }
1626
+ ],
1627
+ "events": [],
1628
+ "composedFrom": [
1629
+ {
1630
+ "name": "Markdown",
1631
+ "group": "Components",
1632
+ "storyId": "solid-advanced-elements-markdown--docs"
1633
+ }
1634
+ ],
1635
+ "tokens": []
1636
+ },
1637
+ {
1638
+ "tag": "kai-message",
1639
+ "className": "KaiMessageElement",
1640
+ "displayName": "Message",
1641
+ "props": [
1642
+ {
1643
+ "name": "message",
1644
+ "type": "undefined | { id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string } }",
1645
+ "optional": true,
1646
+ "scalar": false,
1647
+ "description": "The full message object. Set as a JS property.",
1648
+ "displayType": "undefined | { id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string } }"
1649
+ },
1650
+ {
1651
+ "name": "role",
1652
+ "type": "undefined | \"user\" | \"assistant\"",
1653
+ "optional": true,
1654
+ "scalar": true,
1655
+ "description": "Convenience for simple cases when not passing a `message` object.",
1656
+ "default": "'assistant'",
1657
+ "displayType": "undefined | \"user\" | \"assistant\""
1658
+ },
1659
+ {
1660
+ "name": "content",
1661
+ "type": "undefined | string",
1662
+ "optional": true,
1663
+ "scalar": true,
1664
+ "description": "Convenience content (used when `message` is not set).",
1665
+ "displayType": "undefined | string"
1666
+ },
1667
+ {
1668
+ "name": "markdown",
1669
+ "type": "undefined | false | true",
1670
+ "optional": true,
1671
+ "scalar": true,
1672
+ "description": "Force markdown on/off. Defaults to on for assistant, off for user.",
1673
+ "displayType": "undefined | false | true"
1674
+ },
1675
+ {
1676
+ "name": "proseSize",
1677
+ "type": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\"",
1678
+ "optional": true,
1679
+ "scalar": true,
1680
+ "description": "Text/markdown sizing for the message body.",
1681
+ "default": "'sm'",
1682
+ "displayType": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
1683
+ },
1684
+ {
1685
+ "name": "codeTheme",
1686
+ "type": "undefined | string",
1687
+ "optional": true,
1688
+ "scalar": true,
1689
+ "description": "Shiki theme name used for fenced code blocks in the content.",
1690
+ "default": "'github-dark-dimmed'",
1691
+ "displayType": "undefined | string"
1692
+ },
1693
+ {
1694
+ "name": "codeHighlight",
1695
+ "type": "undefined | false | true",
1696
+ "optional": true,
1697
+ "scalar": true,
1698
+ "description": "Disable syntax highlighting for code blocks (no Shiki loads).",
1699
+ "default": "true",
1700
+ "displayType": "undefined | false | true"
1701
+ },
1702
+ {
1703
+ "name": "actionsReveal",
1704
+ "type": "undefined | \"always\" | \"hover\"",
1705
+ "optional": true,
1706
+ "scalar": true,
1707
+ "description": "Whether the action bar is always visible (`'always'`, default) or only revealed on hover of the message row (`'hover'`).",
1708
+ "default": "'always'",
1709
+ "displayType": "undefined | \"always\" | \"hover\""
1710
+ },
1711
+ {
1712
+ "name": "avatarSrc",
1713
+ "type": "undefined | string",
1714
+ "optional": true,
1715
+ "scalar": true,
1716
+ "description": "Convenience avatar image URL (used when `message.avatar` is not set).",
1717
+ "displayType": "undefined | string"
1718
+ },
1719
+ {
1720
+ "name": "avatarFallback",
1721
+ "type": "undefined | string",
1722
+ "optional": true,
1723
+ "scalar": true,
1724
+ "description": "Convenience avatar fallback text (used when `message.avatar` is not set).",
1725
+ "displayType": "undefined | string"
1726
+ }
1727
+ ],
1728
+ "events": [
1729
+ {
1730
+ "name": "kai-message-action",
1731
+ "detail": "{ messageId: string; action: string }",
1732
+ "description": "An action button was clicked. `action` is the built-in name or custom id.",
1733
+ "displayDetail": "{ messageId: string; action: string }"
1734
+ }
1735
+ ],
1736
+ "composedFrom": [
1737
+ {
1738
+ "name": "Message",
1739
+ "group": "Components",
1740
+ "storyId": "solid-advanced-elements-message--docs"
1741
+ },
1742
+ {
1743
+ "name": "MessageAvatar",
1744
+ "group": "Components",
1745
+ "storyId": "solid-advanced-elements-messageavatar--docs"
1746
+ },
1747
+ {
1748
+ "name": "MessageContent",
1749
+ "group": "Components",
1750
+ "storyId": "solid-advanced-elements-messagecontent--docs"
1751
+ },
1752
+ {
1753
+ "name": "MessageActionBar",
1754
+ "group": "Components",
1755
+ "storyId": "solid-advanced-elements-messageactionbar--docs"
1756
+ },
1757
+ {
1758
+ "name": "Reasoning",
1759
+ "group": "Components",
1760
+ "storyId": "solid-advanced-elements-reasoning--docs"
1761
+ },
1762
+ {
1763
+ "name": "ReasoningTrigger",
1764
+ "group": "Components",
1765
+ "storyId": "solid-advanced-elements-reasoningtrigger--docs"
1766
+ },
1767
+ {
1768
+ "name": "ReasoningContent",
1769
+ "group": "Components",
1770
+ "storyId": "solid-advanced-elements-reasoningcontent--docs"
1771
+ },
1772
+ {
1773
+ "name": "Tool",
1774
+ "group": "Components",
1775
+ "storyId": "solid-advanced-elements-tool--docs"
1776
+ },
1777
+ {
1778
+ "name": "Attachments",
1779
+ "group": "Components",
1780
+ "storyId": "solid-advanced-elements-attachments--docs"
1781
+ },
1782
+ {
1783
+ "name": "Attachment",
1784
+ "group": "Components",
1785
+ "storyId": "solid-advanced-elements-attachment--docs"
1786
+ },
1787
+ {
1788
+ "name": "AttachmentPreview",
1789
+ "group": "Components",
1790
+ "storyId": "solid-advanced-elements-attachmentpreview--docs"
1791
+ },
1792
+ {
1793
+ "name": "AttachmentInfo",
1794
+ "group": "Components",
1795
+ "storyId": "solid-advanced-elements-attachmentinfo--docs"
1796
+ }
1797
+ ],
1798
+ "tokens": []
1799
+ },
1800
+ {
1801
+ "tag": "kai-model-switcher",
1802
+ "className": "KaiModelSwitcherElement",
1803
+ "displayName": "ModelSwitcher",
1804
+ "props": [
1805
+ {
1806
+ "name": "models",
1807
+ "type": "{ id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]",
1808
+ "optional": false,
1809
+ "scalar": false,
1810
+ "description": "The selectable models. Set as a JS property (array).",
1811
+ "typeName": "ModelOption[]",
1812
+ "typeShape": "{ id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]",
1813
+ "default": "[]",
1814
+ "typeImport": "ModelOption",
1815
+ "displayType": "{ id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]"
1816
+ },
1817
+ {
1818
+ "name": "currentModel",
1819
+ "type": "undefined | string",
1820
+ "optional": true,
1821
+ "scalar": true,
1822
+ "description": "The currently-selected model id. Defaults to the first model.",
1823
+ "displayType": "undefined | string"
1824
+ }
1825
+ ],
1826
+ "events": [
1827
+ {
1828
+ "name": "kai-model-change",
1829
+ "detail": "{ modelId: string }",
1830
+ "description": "A model was selected.",
1831
+ "displayDetail": "{ modelId: string }"
1832
+ }
1833
+ ],
1834
+ "composedFrom": [
1835
+ {
1836
+ "name": "ModelSwitcher",
1837
+ "group": "Components",
1838
+ "storyId": "solid-advanced-elements-modelswitcher--docs"
1839
+ }
1840
+ ],
1841
+ "tokens": []
1842
+ },
1843
+ {
1844
+ "tag": "kai-popover",
1845
+ "className": "KaiPopoverElement",
1846
+ "displayName": "Popover",
1847
+ "props": [
1848
+ {
1849
+ "name": "placement",
1850
+ "type": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\" | \"top-start\" | \"top-end\" | \"right-start\" | \"right-end\" | \"bottom-start\" | \"bottom-end\" | \"left-start\" | \"left-end\"",
1851
+ "optional": true,
1852
+ "scalar": true,
1853
+ "description": "Floating placement relative to the trigger (floating-ui placement).",
1854
+ "default": "'bottom-start'",
1855
+ "displayType": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\" | \"top-start\" | \"top-end\" | \"right-start\" | \"right-end\" | \"bottom-start\" | \"bottom-end\" | \"left-start\" | \"left-end\""
1856
+ },
1857
+ {
1858
+ "name": "gutter",
1859
+ "type": "undefined | number",
1860
+ "optional": true,
1861
+ "scalar": true,
1862
+ "description": "Gap in px between the trigger and the panel.",
1863
+ "default": "6",
1864
+ "displayType": "undefined | number"
1865
+ },
1866
+ {
1867
+ "name": "open",
1868
+ "type": "undefined | false | true",
1869
+ "optional": true,
1870
+ "scalar": true,
1871
+ "description": "Controlled open state. Set as a JS property (`el.open = true`) to drive the popover from your app; omit for the default click-to-toggle behaviour.",
1872
+ "displayType": "undefined | false | true"
1873
+ }
1874
+ ],
1875
+ "events": [
1876
+ {
1877
+ "name": "kai-open-change",
1878
+ "detail": "{ open: false | true }",
1879
+ "description": "The popover wants to open or close (click, Escape, or outside-click).",
1880
+ "displayDetail": "{ open: false | true }"
1881
+ }
1882
+ ],
1883
+ "composedFrom": [
1884
+ {
1885
+ "name": "Popover",
1886
+ "group": "UI",
1887
+ "storyId": "solid-advanced-primitives-popover--docs"
1888
+ }
1889
+ ],
1890
+ "tokens": []
1891
+ },
1892
+ {
1893
+ "tag": "kai-prompt-input",
1894
+ "className": "KaiPromptInputElement",
1895
+ "displayName": "PromptInput",
1896
+ "props": [
1897
+ {
1898
+ "name": "value",
1899
+ "type": "undefined | string",
1900
+ "optional": true,
1901
+ "scalar": true,
1902
+ "description": "Controlled value of the input. When set, the host owns the text and must update it on `kai-value-change`; leave unset for uncontrolled behavior.",
1903
+ "displayType": "undefined | string"
1904
+ },
1905
+ {
1906
+ "name": "placeholder",
1907
+ "type": "undefined | string",
1908
+ "optional": true,
1909
+ "scalar": true,
1910
+ "description": "Placeholder text shown in the empty input.",
1911
+ "default": "'Send a message...'",
1912
+ "displayType": "undefined | string"
1913
+ },
1914
+ {
1915
+ "name": "disabled",
1916
+ "type": "undefined | false | true",
1917
+ "optional": true,
1918
+ "scalar": true,
1919
+ "description": "Disable the input and submit button entirely (non-interactive).",
1920
+ "default": "false",
1921
+ "displayType": "undefined | false | true"
1922
+ },
1923
+ {
1924
+ "name": "loading",
1925
+ "type": "undefined | false | true",
1926
+ "optional": true,
1927
+ "scalar": true,
1928
+ "description": "Show the loading/streaming state and block submit (use while awaiting a reply).",
1929
+ "default": "false",
1930
+ "displayType": "undefined | false | true"
1931
+ },
1932
+ {
1933
+ "name": "suggestions",
1934
+ "type": "undefined | string[]",
1935
+ "optional": true,
1936
+ "scalar": false,
1937
+ "description": "Starter prompts shown above the input. Clicking one follows `suggestionMode`. Set as a JS property.",
1938
+ "displayType": "undefined | string[]"
1939
+ },
1940
+ {
1941
+ "name": "suggestionMode",
1942
+ "type": "undefined | \"submit\" | \"fill\"",
1943
+ "optional": true,
1944
+ "scalar": true,
1945
+ "description": "What clicking a suggestion does: `'submit'` (default) sends it immediately as if typed and submitted; `'fill'` just places it in the input.",
1946
+ "default": "'submit'",
1947
+ "displayType": "undefined | \"submit\" | \"fill\""
1948
+ },
1949
+ {
1950
+ "name": "slashCommands",
1951
+ "type": "undefined | { id: string; label: string; description?: undefined | string; category?: undefined | string }[]",
1952
+ "optional": true,
1953
+ "scalar": false,
1954
+ "description": "Slash commands — when set, typing `/` opens the command palette. Set as a JS property.",
1955
+ "displayType": "SlashCommandItem[] | undefined"
1956
+ },
1957
+ {
1958
+ "name": "slashActiveIds",
1959
+ "type": "undefined | string[]",
1960
+ "optional": true,
1961
+ "scalar": false,
1962
+ "description": "Command ids to highlight as active.",
1963
+ "displayType": "undefined | string[]"
1964
+ },
1965
+ {
1966
+ "name": "slashCompact",
1967
+ "type": "undefined | false | true",
1968
+ "optional": true,
1969
+ "scalar": true,
1970
+ "description": "Single-line palette rows.",
1971
+ "default": "false",
1972
+ "displayType": "undefined | false | true"
1973
+ },
1974
+ {
1975
+ "name": "search",
1976
+ "type": "undefined | false | true",
1977
+ "optional": true,
1978
+ "scalar": true,
1979
+ "description": "Show a Search (Globe) button in the left toolbar; clicking it fires a `search` event.",
1980
+ "default": "false",
1981
+ "displayType": "undefined | false | true"
1982
+ },
1983
+ {
1984
+ "name": "voice",
1985
+ "type": "undefined | false | true",
1986
+ "optional": true,
1987
+ "scalar": true,
1988
+ "description": "Show a Voice (Mic) button in the left toolbar; clicking it fires a `voice` event.",
1989
+ "default": "false",
1990
+ "displayType": "undefined | false | true"
1991
+ },
1992
+ {
1993
+ "name": "stoppable",
1994
+ "type": "undefined | false | true",
1995
+ "optional": true,
1996
+ "scalar": true,
1997
+ "description": "When set and `loading` is true, the send button is replaced by a Stop button (square icon, \"Stop\" aria-label). Clicking it fires `kai-stop`.",
1998
+ "default": "false",
1999
+ "displayType": "undefined | false | true"
2000
+ },
2001
+ {
2002
+ "name": "attachments",
2003
+ "type": "undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]",
2004
+ "optional": true,
2005
+ "scalar": false,
2006
+ "description": "Attachments to seed the input with (so a consumer can pre-populate staged files without an upload). Set as a JS property; the element then manages its own attachment state from there (add via the paperclip, remove per chip).",
2007
+ "displayType": "AttachmentData[] | undefined"
2008
+ }
2009
+ ],
2010
+ "events": [
2011
+ {
2012
+ "name": "kai-search",
2013
+ "detail": "Record<string, never>",
2014
+ "description": "The Search (Globe) toolbar button was clicked.",
2015
+ "displayDetail": "Record<string, never>"
2016
+ },
2017
+ {
2018
+ "name": "kai-slash-select",
2019
+ "detail": "{ command: { id: string; label: string; description?: undefined | string; category?: undefined | string } }",
2020
+ "description": "A slash command was chosen from the palette.",
2021
+ "displayDetail": "{ command: SlashCommandItem }"
2022
+ },
2023
+ {
2024
+ "name": "kai-stop",
2025
+ "detail": "Record<string, never>",
2026
+ "description": "The Stop button was clicked while `stoppable` and `loading` are both true.",
2027
+ "displayDetail": "Record<string, never>"
2028
+ },
2029
+ {
2030
+ "name": "kai-submit",
2031
+ "detail": "{ value: string; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }",
2032
+ "description": "The user submitted the prompt (Enter or send button) with its attachments.",
2033
+ "displayDetail": "{ value: string; attachments: AttachmentData[] }"
2034
+ },
2035
+ {
2036
+ "name": "kai-suggestion-click",
2037
+ "detail": "{ value: string }",
2038
+ "description": "A suggestion was clicked while `suggestion-mode=\"fill\"`.",
2039
+ "displayDetail": "{ value: string }"
2040
+ },
2041
+ {
2042
+ "name": "kai-toolbar-action",
2043
+ "detail": "{ action: string }",
2044
+ "description": "A custom `<kai-action>` toolbar button was clicked. `action` is the `id` of the `<kai-action>` element that was clicked.",
2045
+ "displayDetail": "{ action: string }"
2046
+ },
2047
+ {
2048
+ "name": "kai-value-change",
2049
+ "detail": "{ value: string }",
2050
+ "description": "The input text changed (fires on every keystroke).",
2051
+ "displayDetail": "{ value: string }"
2052
+ },
2053
+ {
2054
+ "name": "kai-voice",
2055
+ "detail": "Record<string, never>",
2056
+ "description": "The Voice (Mic) toolbar button was clicked.",
2057
+ "displayDetail": "Record<string, never>"
2058
+ }
2059
+ ],
2060
+ "composedFrom": [],
2061
+ "tokens": []
2062
+ },
2063
+ {
2064
+ "tag": "kai-reasoning",
2065
+ "className": "KaiReasoningElement",
2066
+ "displayName": "Reasoning",
2067
+ "props": [
2068
+ {
2069
+ "name": "text",
2070
+ "type": "string",
2071
+ "optional": false,
2072
+ "scalar": true,
2073
+ "description": "The reasoning text to display.",
2074
+ "default": "''",
2075
+ "displayType": "string"
2076
+ },
2077
+ {
2078
+ "name": "label",
2079
+ "type": "undefined | string",
2080
+ "optional": true,
2081
+ "scalar": true,
2082
+ "description": "Trigger label.",
2083
+ "default": "'Reasoning'",
2084
+ "displayType": "undefined | string"
2085
+ },
2086
+ {
2087
+ "name": "open",
2088
+ "type": "undefined | false | true",
2089
+ "optional": true,
2090
+ "scalar": true,
2091
+ "description": "Controlled open state — set as a property (`el.open = true`). Omit for uncontrolled (the trigger toggles it).",
2092
+ "displayType": "undefined | false | true"
2093
+ },
2094
+ {
2095
+ "name": "streaming",
2096
+ "type": "undefined | false | true",
2097
+ "optional": true,
2098
+ "scalar": true,
2099
+ "description": "While true, auto-expands (and re-collapses when it flips false).",
2100
+ "default": "false",
2101
+ "displayType": "undefined | false | true"
2102
+ },
2103
+ {
2104
+ "name": "markdown",
2105
+ "type": "undefined | false | true",
2106
+ "optional": true,
2107
+ "scalar": true,
2108
+ "description": "Render `text` as markdown.",
2109
+ "default": "true",
2110
+ "displayType": "undefined | false | true"
2111
+ }
2112
+ ],
2113
+ "events": [
2114
+ {
2115
+ "name": "kai-open-change",
2116
+ "detail": "{ open: false | true }",
2117
+ "description": "Open state changed (via the trigger or streaming auto-open).",
2118
+ "displayDetail": "{ open: false | true }"
2119
+ }
2120
+ ],
2121
+ "composedFrom": [
2122
+ {
2123
+ "name": "Reasoning",
2124
+ "group": "Components",
2125
+ "storyId": "solid-advanced-elements-reasoning--docs"
2126
+ },
2127
+ {
2128
+ "name": "ReasoningTrigger",
2129
+ "group": "Components",
2130
+ "storyId": "solid-advanced-elements-reasoningtrigger--docs"
2131
+ },
2132
+ {
2133
+ "name": "ReasoningContent",
2134
+ "group": "Components",
2135
+ "storyId": "solid-advanced-elements-reasoningcontent--docs"
2136
+ }
2137
+ ],
2138
+ "tokens": []
2139
+ },
2140
+ {
2141
+ "tag": "kai-remote",
2142
+ "className": "KaiRemoteElement",
2143
+ "displayName": "Remote",
2144
+ "props": [
2145
+ {
2146
+ "name": "src",
2147
+ "type": "undefined | string",
2148
+ "optional": true,
2149
+ "scalar": true,
2150
+ "description": "The remote card URL. Attribute: `src`.",
2151
+ "displayType": "undefined | string"
2152
+ },
2153
+ {
2154
+ "name": "providerOrigin",
2155
+ "type": "undefined | string",
2156
+ "optional": true,
2157
+ "scalar": true,
2158
+ "description": "Exact provider origin (https: or http://localhost for dev). Attribute: `provider-origin`.",
2159
+ "displayType": "undefined | string"
2160
+ },
2161
+ {
2162
+ "name": "envelope",
2163
+ "type": "undefined | Record<string, unknown>",
2164
+ "optional": true,
2165
+ "scalar": false,
2166
+ "description": "The card envelope to render. JS property only.",
2167
+ "displayType": "undefined | Record<string, unknown>"
2168
+ },
2169
+ {
2170
+ "name": "policy",
2171
+ "type": "undefined | Record<string, unknown>",
2172
+ "optional": true,
2173
+ "scalar": false,
2174
+ "description": "Optional routing policy. JS property only.",
2175
+ "displayType": "undefined | Record<string, unknown>"
2176
+ }
2177
+ ],
2178
+ "events": [],
2179
+ "composedFrom": [],
2180
+ "tokens": []
2181
+ },
2182
+ {
2183
+ "tag": "kai-resizable",
2184
+ "className": "KaiResizableElement",
2185
+ "displayName": "Resizable",
2186
+ "props": [
2187
+ {
2188
+ "name": "orientation",
2189
+ "type": "undefined | \"horizontal\" | \"vertical\"",
2190
+ "optional": true,
2191
+ "scalar": true,
2192
+ "description": "Layout axis: `horizontal` (row, default) or `vertical` (column).",
2193
+ "default": "'horizontal'",
2194
+ "displayType": "undefined | \"horizontal\" | \"vertical\""
2195
+ },
2196
+ {
2197
+ "name": "maximizedIndex",
2198
+ "type": "undefined | null | number",
2199
+ "optional": true,
2200
+ "scalar": false,
2201
+ "description": "Which item index is maximized (null = none). Declarative source of truth.",
2202
+ "default": "null",
2203
+ "displayType": "undefined | null | number"
2204
+ }
2205
+ ],
2206
+ "events": [
2207
+ {
2208
+ "name": "kai-change",
2209
+ "detail": "{ sizes: number[] }",
2210
+ "description": "Fired on drag-end / keyboard resize / visibility change. `detail.sizes` = panel sizes in percent.",
2211
+ "displayDetail": "{ sizes: number[] }"
2212
+ },
2213
+ {
2214
+ "name": "kai-maximize-change",
2215
+ "detail": "{ maximized: false | true; index: null | number }",
2216
+ "description": "Observe layout maximize state.",
2217
+ "displayDetail": "{ maximized: false | true; index: null | number }"
2218
+ }
2219
+ ],
2220
+ "composedFrom": [
2221
+ {
2222
+ "name": "ResizableHandle",
2223
+ "group": "UI",
2224
+ "storyId": "solid-advanced-primitives-resizablehandle--docs"
2225
+ }
2226
+ ],
2227
+ "tokens": []
2228
+ },
2229
+ {
2230
+ "tag": "kai-resizable-item",
2231
+ "className": "KaiResizableItemElement",
2232
+ "displayName": "ResizableItem",
2233
+ "props": [
2234
+ {
2235
+ "name": "size",
2236
+ "type": "undefined | string",
2237
+ "optional": true,
2238
+ "scalar": true,
2239
+ "description": "Initial main-axis size: `\"280px\"` (fixed) or `\"25%\"`/`25` (percent). Omitted → flexible.",
2240
+ "displayType": "undefined | string"
2241
+ },
2242
+ {
2243
+ "name": "min",
2244
+ "type": "undefined | string",
2245
+ "optional": true,
2246
+ "scalar": true,
2247
+ "description": "Minimum size during resize (px or %).",
2248
+ "displayType": "undefined | string"
2249
+ },
2250
+ {
2251
+ "name": "max",
2252
+ "type": "undefined | string",
2253
+ "optional": true,
2254
+ "scalar": true,
2255
+ "description": "Maximum size during resize (px or %).",
2256
+ "displayType": "undefined | string"
2257
+ },
2258
+ {
2259
+ "name": "locked",
2260
+ "type": "undefined | false | true",
2261
+ "optional": true,
2262
+ "scalar": true,
2263
+ "description": "Fix this panel's size; adjacent dividers become non-draggable.",
2264
+ "default": "false",
2265
+ "displayType": "undefined | false | true"
2266
+ },
2267
+ {
2268
+ "name": "hidden",
2269
+ "type": "undefined | false | true",
2270
+ "optional": true,
2271
+ "scalar": true,
2272
+ "description": "Hide this panel; its divider is dropped and the rest reflow.",
2273
+ "default": "false",
2274
+ "displayType": "undefined | false | true"
2275
+ }
2276
+ ],
2277
+ "events": [
2278
+ {
2279
+ "name": "kai-change",
2280
+ "detail": "unknown",
2281
+ "description": "",
2282
+ "displayDetail": "unknown"
2283
+ },
2284
+ {
2285
+ "name": "kai-maximize-change",
2286
+ "detail": "unknown",
2287
+ "description": "",
2288
+ "displayDetail": "unknown"
2289
+ }
2290
+ ],
2291
+ "composedFrom": [
2292
+ {
2293
+ "name": "ResizableHandle",
2294
+ "group": "UI",
2295
+ "storyId": "solid-advanced-primitives-resizablehandle--docs"
2296
+ }
2297
+ ],
2298
+ "tokens": []
2299
+ },
2300
+ {
2301
+ "tag": "kai-response-stream",
2302
+ "className": "KaiResponseStreamElement",
2303
+ "displayName": "ResponseStream",
2304
+ "props": [
2305
+ {
2306
+ "name": "text",
2307
+ "type": "undefined | string | AsyncIterable<string>",
2308
+ "optional": true,
2309
+ "scalar": false,
2310
+ "description": "Text to stream. A string, or an `AsyncIterable<string>` (set as a JS property — async iterables can't be HTML attributes).",
2311
+ "default": "''",
2312
+ "displayType": "undefined | string | AsyncIterable<string>"
2313
+ },
2314
+ {
2315
+ "name": "mode",
2316
+ "type": "undefined | \"typewriter\" | \"fade\"",
2317
+ "optional": true,
2318
+ "scalar": true,
2319
+ "description": "Reveal animation.",
2320
+ "default": "'typewriter'",
2321
+ "displayType": "undefined | \"typewriter\" | \"fade\""
2322
+ },
2323
+ {
2324
+ "name": "speed",
2325
+ "type": "undefined | number",
2326
+ "optional": true,
2327
+ "scalar": true,
2328
+ "description": "Characters/segments per tick.",
2329
+ "default": "20",
2330
+ "displayType": "undefined | number"
2331
+ },
2332
+ {
2333
+ "name": "as",
2334
+ "type": "undefined | string",
2335
+ "optional": true,
2336
+ "scalar": true,
2337
+ "description": "Element tag to render as.",
2338
+ "displayType": "undefined | string"
2339
+ }
2340
+ ],
2341
+ "events": [
2342
+ {
2343
+ "name": "kai-complete",
2344
+ "detail": null,
2345
+ "description": "Streaming finished.",
2346
+ "displayDetail": null
2347
+ }
2348
+ ],
2349
+ "composedFrom": [
2350
+ {
2351
+ "name": "ResponseStream",
2352
+ "group": "Components",
2353
+ "storyId": "solid-advanced-elements-responsestream--docs"
2354
+ }
2355
+ ],
2356
+ "tokens": []
2357
+ },
2358
+ {
2359
+ "tag": "kai-scope-picker",
2360
+ "className": "KaiScopePickerElement",
2361
+ "displayName": "ScopePicker",
2362
+ "props": [
2363
+ {
2364
+ "name": "availableAuthors",
2365
+ "type": "string[]",
2366
+ "optional": false,
2367
+ "scalar": false,
2368
+ "description": "Authors to offer as scope filters. Set as a JS property.",
2369
+ "default": "[]",
2370
+ "displayType": "string[]"
2371
+ },
2372
+ {
2373
+ "name": "availableTags",
2374
+ "type": "string[]",
2375
+ "optional": false,
2376
+ "scalar": false,
2377
+ "description": "Tags to offer as scope filters. Set as a JS property.",
2378
+ "default": "[]",
2379
+ "displayType": "string[]"
2380
+ },
2381
+ {
2382
+ "name": "currentLabel",
2383
+ "type": "undefined | string",
2384
+ "optional": true,
2385
+ "scalar": true,
2386
+ "description": "The label shown on the trigger for the active scope.",
2387
+ "default": "'All Content'",
2388
+ "displayType": "undefined | string"
2389
+ }
2390
+ ],
2391
+ "events": [
2392
+ {
2393
+ "name": "kai-scope-change",
2394
+ "detail": "{ filters: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }",
2395
+ "description": "A scope was chosen (`undefined` filters = \"All Content\").",
2396
+ "displayDetail": "{ filters: SearchFilters | undefined }"
2397
+ }
2398
+ ],
2399
+ "composedFrom": [
2400
+ {
2401
+ "name": "ChatScopePicker",
2402
+ "group": "Components",
2403
+ "storyId": "solid-advanced-elements-chatscopepicker--docs"
2404
+ }
2405
+ ],
2406
+ "tokens": []
2407
+ },
2408
+ {
2409
+ "tag": "kai-scroll-button",
2410
+ "className": "KaiScrollButtonElement",
2411
+ "displayName": "ScrollButton",
2412
+ "props": [
2413
+ {
2414
+ "name": "for",
2415
+ "type": "undefined | string",
2416
+ "optional": true,
2417
+ "scalar": true,
2418
+ "description": "CSS id of the scroll container to control. When omitted the element walks up the DOM (outside its own shadow root) to find the nearest scrollable ancestor. Mirrors the `for` convention of `<label for=\"...\">`.",
2419
+ "displayType": "undefined | string"
2420
+ },
2421
+ {
2422
+ "name": "variant",
2423
+ "type": "undefined | \"ghost\" | \"default\" | \"outline\"",
2424
+ "optional": true,
2425
+ "scalar": true,
2426
+ "description": "Button visual variant: `'outline' | 'ghost' | 'default'`. Defaults to `'outline'`.",
2427
+ "default": "'outline'",
2428
+ "displayType": "undefined | \"ghost\" | \"default\" | \"outline\""
2429
+ },
2430
+ {
2431
+ "name": "size",
2432
+ "type": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\"",
2433
+ "optional": true,
2434
+ "scalar": true,
2435
+ "description": "Button size token. Defaults to `'icon'` (square).",
2436
+ "default": "'icon'",
2437
+ "displayType": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
2438
+ }
2439
+ ],
2440
+ "events": [
2441
+ {
2442
+ "name": "kai-scroll",
2443
+ "detail": null,
2444
+ "description": "Emitted when the user clicks the button and `scrollToBottom()` is called. Carries no detail — consumers use it to know a manual scroll occurred.",
2445
+ "displayDetail": null
2446
+ }
2447
+ ],
2448
+ "composedFrom": [
2449
+ {
2450
+ "name": "Button",
2451
+ "group": "UI",
2452
+ "storyId": "solid-advanced-primitives-button--docs"
2453
+ }
2454
+ ],
2455
+ "tokens": []
2456
+ },
2457
+ {
2458
+ "tag": "kai-skills",
2459
+ "className": "KaiSkillsElement",
2460
+ "displayName": "Skills",
2461
+ "props": [
2462
+ {
2463
+ "name": "skills",
2464
+ "type": "{ id: string; name: string }[]",
2465
+ "optional": false,
2466
+ "scalar": false,
2467
+ "description": "The active skills to badge. Set as a JS property.",
2468
+ "typeName": "Skill[]",
2469
+ "typeShape": "{ id: string; name: string }[]",
2470
+ "default": "[]",
2471
+ "displayType": "{ id: string; name: string }[]"
2472
+ }
2473
+ ],
2474
+ "events": [],
2475
+ "composedFrom": [
2476
+ {
2477
+ "name": "MessageSkills",
2478
+ "group": "Components",
2479
+ "storyId": "solid-advanced-elements-messageskills--docs"
2480
+ }
2481
+ ],
2482
+ "tokens": []
2483
+ },
2484
+ {
2485
+ "tag": "kai-source",
2486
+ "className": "KaiSourceElement",
2487
+ "displayName": "Source",
2488
+ "props": [
2489
+ {
2490
+ "name": "href",
2491
+ "type": "undefined | string",
2492
+ "optional": true,
2493
+ "scalar": true,
2494
+ "description": "The URL this citation links to (the domain also seeds the default label/favicon).",
2495
+ "default": "''",
2496
+ "displayType": "undefined | string"
2497
+ },
2498
+ {
2499
+ "name": "label",
2500
+ "type": "undefined | string",
2501
+ "optional": true,
2502
+ "scalar": true,
2503
+ "description": "Trigger label (defaults to the domain).",
2504
+ "displayType": "undefined | string"
2505
+ },
2506
+ {
2507
+ "name": "headline",
2508
+ "type": "undefined | string",
2509
+ "optional": true,
2510
+ "scalar": true,
2511
+ "description": "Hover-card headline. Attribute: `headline` (`title` is avoided — it's a global HTML attribute that reflects in a CE constructor and breaks it).",
2512
+ "default": "''",
2513
+ "displayType": "undefined | string"
2514
+ },
2515
+ {
2516
+ "name": "description",
2517
+ "type": "undefined | string",
2518
+ "optional": true,
2519
+ "scalar": true,
2520
+ "description": "Hover-card body text describing the source.",
2521
+ "default": "''",
2522
+ "displayType": "undefined | string"
2523
+ },
2524
+ {
2525
+ "name": "showFavicon",
2526
+ "type": "undefined | false | true",
2527
+ "optional": true,
2528
+ "scalar": true,
2529
+ "description": "Show the source's favicon next to the trigger label.",
2530
+ "default": "false",
2531
+ "displayType": "undefined | false | true"
2532
+ }
2533
+ ],
2534
+ "events": [],
2535
+ "composedFrom": [
2536
+ {
2537
+ "name": "Source",
2538
+ "group": "Components",
2539
+ "storyId": "solid-advanced-elements-source--docs"
2540
+ },
2541
+ {
2542
+ "name": "SourceTrigger",
2543
+ "group": "Components",
2544
+ "storyId": "solid-advanced-elements-sourcetrigger--docs"
2545
+ },
2546
+ {
2547
+ "name": "SourceContent",
2548
+ "group": "Components",
2549
+ "storyId": "solid-advanced-elements-sourcecontent--docs"
2550
+ },
2551
+ {
2552
+ "name": "SourceList",
2553
+ "group": "Components",
2554
+ "storyId": "solid-advanced-elements-sourcelist--docs"
2555
+ }
2556
+ ],
2557
+ "tokens": []
2558
+ },
2559
+ {
2560
+ "tag": "kai-sources",
2561
+ "className": "KaiSourcesElement",
2562
+ "displayName": "Sources",
2563
+ "props": [
2564
+ {
2565
+ "name": "sources",
2566
+ "type": "{ href: string; title?: undefined | string; description?: undefined | string; label?: undefined | string; showFavicon?: undefined | false | true }[]",
2567
+ "optional": false,
2568
+ "scalar": false,
2569
+ "description": "The sources to render. Set as a JS property.",
2570
+ "typeName": "SourceItem[]",
2571
+ "typeShape": "{ href: string; title?: undefined | string; description?: undefined | string; label?: undefined | string; showFavicon?: undefined | false | true }[]",
2572
+ "default": "[]",
2573
+ "displayType": "SourceItem[]"
2574
+ },
2575
+ {
2576
+ "name": "showFavicon",
2577
+ "type": "undefined | false | true",
2578
+ "optional": true,
2579
+ "scalar": true,
2580
+ "description": "Show favicons on all items (per-item `showFavicon` overrides).",
2581
+ "default": "false",
2582
+ "displayType": "undefined | false | true"
2583
+ },
2584
+ {
2585
+ "name": "numbered",
2586
+ "type": "undefined | false | true",
2587
+ "optional": true,
2588
+ "scalar": true,
2589
+ "description": "When true, each citation chip is labelled with its 1-based index in the merged (prop + declarative-children) list (`[1]`, `[2]`, …) instead of the per-item `label` or domain fallback. HTML attribute: `numbered` (boolean — bare attribute or `numbered=\"true\"`). JS property: `el.numbered = true`.",
2590
+ "default": "false",
2591
+ "displayType": "undefined | false | true"
2592
+ }
2593
+ ],
2594
+ "events": [],
2595
+ "composedFrom": [
2596
+ {
2597
+ "name": "Source",
2598
+ "group": "Components",
2599
+ "storyId": "solid-advanced-elements-source--docs"
2600
+ },
2601
+ {
2602
+ "name": "SourceTrigger",
2603
+ "group": "Components",
2604
+ "storyId": "solid-advanced-elements-sourcetrigger--docs"
2605
+ },
2606
+ {
2607
+ "name": "SourceContent",
2608
+ "group": "Components",
2609
+ "storyId": "solid-advanced-elements-sourcecontent--docs"
2610
+ },
2611
+ {
2612
+ "name": "SourceList",
2613
+ "group": "Components",
2614
+ "storyId": "solid-advanced-elements-sourcelist--docs"
2615
+ }
2616
+ ],
2617
+ "tokens": []
2618
+ },
2619
+ {
2620
+ "tag": "kai-suggestions",
2621
+ "className": "KaiSuggestionsElement",
2622
+ "displayName": "Suggestions",
2623
+ "props": [
2624
+ {
2625
+ "name": "suggestions",
2626
+ "type": "(string | { label: string; value?: undefined | string })[]",
2627
+ "optional": false,
2628
+ "scalar": false,
2629
+ "description": "The suggestions. Strings, or `{ label, value }` when the displayed text and the emitted value differ. Set as a JS property.",
2630
+ "default": "[]",
2631
+ "displayType": "(string | { label: string; value?: undefined | string })[]"
2632
+ },
2633
+ {
2634
+ "name": "variant",
2635
+ "type": "undefined | \"ghost\" | \"default\" | \"outline\"",
2636
+ "optional": true,
2637
+ "scalar": true,
2638
+ "description": "Chip style: `'outline'` (default), `'ghost'`, or `'default'` (filled).",
2639
+ "default": "'outline'",
2640
+ "displayType": "undefined | \"ghost\" | \"default\" | \"outline\""
2641
+ },
2642
+ {
2643
+ "name": "size",
2644
+ "type": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\"",
2645
+ "optional": true,
2646
+ "scalar": true,
2647
+ "description": "Size preset for each chip. Defaults to the pill default (`'lg'`); pass `'sm'` for smaller pills (or `'md'`).",
2648
+ "displayType": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
2649
+ },
2650
+ {
2651
+ "name": "block",
2652
+ "type": "undefined | false | true",
2653
+ "optional": true,
2654
+ "scalar": true,
2655
+ "description": "Full-width left-aligned rows instead of pills.",
2656
+ "default": "false",
2657
+ "displayType": "undefined | false | true"
2658
+ },
2659
+ {
2660
+ "name": "highlight",
2661
+ "type": "undefined | string",
2662
+ "optional": true,
2663
+ "scalar": true,
2664
+ "description": "Substring to highlight within each suggestion.",
2665
+ "displayType": "undefined | string"
2666
+ }
2667
+ ],
2668
+ "events": [
2669
+ {
2670
+ "name": "kai-select",
2671
+ "detail": "{ value: string }",
2672
+ "description": "A suggestion was clicked.",
2673
+ "displayDetail": "{ value: string }"
2674
+ }
2675
+ ],
2676
+ "composedFrom": [
2677
+ {
2678
+ "name": "PromptSuggestion",
2679
+ "group": "Components",
2680
+ "storyId": "solid-advanced-elements-promptsuggestion--docs"
2681
+ }
2682
+ ],
2683
+ "tokens": []
2684
+ },
2685
+ {
2686
+ "tag": "kai-switch",
2687
+ "className": "KaiSwitchElement",
2688
+ "displayName": "Switch",
2689
+ "props": [
2690
+ {
2691
+ "name": "checked",
2692
+ "type": "undefined | false | true",
2693
+ "optional": true,
2694
+ "scalar": true,
2695
+ "description": "Initial checked state. Bare attribute (`<kai-switch checked>`) turns it on.",
2696
+ "displayType": "undefined | false | true"
2697
+ },
2698
+ {
2699
+ "name": "disabled",
2700
+ "type": "undefined | false | true",
2701
+ "optional": true,
2702
+ "scalar": true,
2703
+ "description": "Disable interaction.",
2704
+ "displayType": "undefined | false | true"
2705
+ },
2706
+ {
2707
+ "name": "label",
2708
+ "type": "undefined | string",
2709
+ "optional": true,
2710
+ "scalar": true,
2711
+ "description": "Accessible label.",
2712
+ "displayType": "undefined | string"
2713
+ }
2714
+ ],
2715
+ "events": [
2716
+ {
2717
+ "name": "kai-change",
2718
+ "detail": "{ checked: false | true }",
2719
+ "description": "The toggle changed.",
2720
+ "displayDetail": "{ checked: false | true }"
2721
+ }
2722
+ ],
2723
+ "composedFrom": [
2724
+ {
2725
+ "name": "Switch",
2726
+ "group": "UI",
2727
+ "storyId": "solid-advanced-primitives-switch--docs"
2728
+ }
2729
+ ],
2730
+ "tokens": []
2731
+ },
2732
+ {
2733
+ "tag": "kai-tasks",
2734
+ "className": "KaiTasksElement",
2735
+ "displayName": "Tasks",
2736
+ "props": [
2737
+ {
2738
+ "name": "data",
2739
+ "type": "undefined | Record<string, unknown>",
2740
+ "optional": true,
2741
+ "scalar": false,
2742
+ "description": "The tasks definition (the CardEnvelope.data). Set as a JS PROPERTY: `el.data = { tasks:[…], selectAll, confirmLabel, … }`. Import `TasksCardData` from `@kitn.ai/ui` for the full shape.",
2743
+ "displayType": "undefined | Record<string, unknown>"
2744
+ },
2745
+ {
2746
+ "name": "cardId",
2747
+ "type": "undefined | string",
2748
+ "optional": true,
2749
+ "scalar": true,
2750
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
2751
+ "displayType": "undefined | string"
2752
+ },
2753
+ {
2754
+ "name": "heading",
2755
+ "type": "undefined | string",
2756
+ "optional": true,
2757
+ "scalar": true,
2758
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
2759
+ "displayType": "undefined | string"
2760
+ },
2761
+ {
2762
+ "name": "resolution",
2763
+ "type": "undefined | Record<string, unknown>",
2764
+ "optional": true,
2765
+ "scalar": false,
2766
+ "description": "Set when the user resolved this card; renders the read-only view. Property: `el.resolution = { kind:'submit', data:{ selected:[…] } }`.",
2767
+ "displayType": "undefined | Record<string, unknown>"
2768
+ }
2769
+ ],
2770
+ "events": [],
2771
+ "composedFrom": [
2772
+ {
2773
+ "name": "TasksCard",
2774
+ "group": "Components",
2775
+ "storyId": "solid-advanced-elements-taskscard--docs"
2776
+ }
2777
+ ],
2778
+ "tokens": []
2779
+ },
2780
+ {
2781
+ "tag": "kai-text-shimmer",
2782
+ "className": "KaiTextShimmerElement",
2783
+ "displayName": "TextShimmer",
2784
+ "props": [
2785
+ {
2786
+ "name": "text",
2787
+ "type": "undefined | string",
2788
+ "optional": true,
2789
+ "scalar": true,
2790
+ "description": "The text to shimmer.",
2791
+ "default": "''",
2792
+ "displayType": "undefined | string"
2793
+ },
2794
+ {
2795
+ "name": "as",
2796
+ "type": "undefined | string",
2797
+ "optional": true,
2798
+ "scalar": true,
2799
+ "description": "Element tag to render as (default `span`).",
2800
+ "default": "'span'",
2801
+ "displayType": "undefined | string"
2802
+ },
2803
+ {
2804
+ "name": "duration",
2805
+ "type": "undefined | number",
2806
+ "optional": true,
2807
+ "scalar": true,
2808
+ "description": "Animation duration in seconds.",
2809
+ "default": "4",
2810
+ "displayType": "undefined | number"
2811
+ },
2812
+ {
2813
+ "name": "spread",
2814
+ "type": "undefined | number",
2815
+ "optional": true,
2816
+ "scalar": true,
2817
+ "description": "Gradient spread (5–45).",
2818
+ "default": "20",
2819
+ "displayType": "undefined | number"
2820
+ }
2821
+ ],
2822
+ "events": [],
2823
+ "composedFrom": [
2824
+ {
2825
+ "name": "TextShimmer",
2826
+ "group": "Components",
2827
+ "storyId": "solid-advanced-elements-textshimmer--docs"
2828
+ }
2829
+ ],
2830
+ "tokens": []
2831
+ },
2832
+ {
2833
+ "tag": "kai-thinking-bar",
2834
+ "className": "KaiThinkingBarElement",
2835
+ "displayName": "ThinkingBar",
2836
+ "props": [
2837
+ {
2838
+ "name": "text",
2839
+ "type": "undefined | string",
2840
+ "optional": true,
2841
+ "scalar": true,
2842
+ "description": "The shimmering label, e.g. \"Thinking…\".",
2843
+ "default": "'Thinking'",
2844
+ "displayType": "undefined | string"
2845
+ },
2846
+ {
2847
+ "name": "stoppable",
2848
+ "type": "undefined | false | true",
2849
+ "optional": true,
2850
+ "scalar": true,
2851
+ "description": "When true, show a \"stop\" affordance that fires a `stop` event.",
2852
+ "default": "false",
2853
+ "displayType": "undefined | false | true"
2854
+ },
2855
+ {
2856
+ "name": "stopLabel",
2857
+ "type": "undefined | string",
2858
+ "optional": true,
2859
+ "scalar": true,
2860
+ "description": "Label for the stop affordance.",
2861
+ "default": "'Answer now'",
2862
+ "displayType": "undefined | string"
2863
+ }
2864
+ ],
2865
+ "events": [
2866
+ {
2867
+ "name": "kai-stop",
2868
+ "detail": null,
2869
+ "description": "The \"stop / answer now\" affordance was clicked.",
2870
+ "displayDetail": null
2871
+ }
2872
+ ],
2873
+ "composedFrom": [
2874
+ {
2875
+ "name": "ThinkingBar",
2876
+ "group": "Components",
2877
+ "storyId": "solid-advanced-elements-thinkingbar--docs"
2878
+ }
2879
+ ],
2880
+ "tokens": []
2881
+ },
2882
+ {
2883
+ "tag": "kai-tool",
2884
+ "className": "KaiToolElement",
2885
+ "displayName": "Tool",
2886
+ "props": [
2887
+ {
2888
+ "name": "tool",
2889
+ "type": "undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }",
2890
+ "optional": true,
2891
+ "scalar": false,
2892
+ "description": "The tool-call to display. Set as a JS property.",
2893
+ "displayType": "ToolPart | undefined"
2894
+ },
2895
+ {
2896
+ "name": "open",
2897
+ "type": "undefined | false | true",
2898
+ "optional": true,
2899
+ "scalar": true,
2900
+ "description": "Start expanded.",
2901
+ "default": "false",
2902
+ "displayType": "undefined | false | true"
2903
+ }
2904
+ ],
2905
+ "events": [],
2906
+ "composedFrom": [
2907
+ {
2908
+ "name": "Tool",
2909
+ "group": "Components",
2910
+ "storyId": "solid-advanced-elements-tool--docs"
2911
+ }
2912
+ ],
2913
+ "tokens": [
2914
+ "--color-tool-blue",
2915
+ "--color-tool-amber",
2916
+ "--color-tool-green",
2917
+ "--color-tool-red"
2918
+ ]
2919
+ },
2920
+ {
2921
+ "tag": "kai-voice-input",
2922
+ "className": "KaiVoiceInputElement",
2923
+ "displayName": "VoiceInput",
2924
+ "props": [
2925
+ {
2926
+ "name": "transcribe",
2927
+ "type": "undefined | (audio: Blob) => Promise<string>",
2928
+ "optional": true,
2929
+ "scalar": false,
2930
+ "description": "Transcriber the host supplies — records audio, returns the text. This is a **function-valued property** (`el.transcribe = async blob => '...'`) because a value-returning callback can't be modelled as a fire-and-forget event.",
2931
+ "displayType": "undefined | (audio: Blob) => Promise<string>"
2932
+ },
2933
+ {
2934
+ "name": "disabled",
2935
+ "type": "undefined | false | true",
2936
+ "optional": true,
2937
+ "scalar": true,
2938
+ "description": "Disable the mic button (non-interactive).",
2939
+ "default": "false",
2940
+ "displayType": "undefined | false | true"
2941
+ }
2942
+ ],
2943
+ "events": [
2944
+ {
2945
+ "name": "kai-audio-captured",
2946
+ "detail": "{ blob: Blob }",
2947
+ "description": "Raw audio captured (before transcription) — for hosts that prefer to handle transcription themselves instead of via the `transcribe` property.",
2948
+ "displayDetail": "{ blob: Blob }"
2949
+ },
2950
+ {
2951
+ "name": "kai-transcription",
2952
+ "detail": "{ text: string }",
2953
+ "description": "Transcription completed (the `transcribe` property resolved).",
2954
+ "displayDetail": "{ text: string }"
2955
+ }
2956
+ ],
2957
+ "composedFrom": [
2958
+ {
2959
+ "name": "VoiceInput",
2960
+ "group": "Components",
2961
+ "storyId": "solid-advanced-elements-voiceinput--docs"
2962
+ }
2963
+ ],
2964
+ "tokens": []
2965
+ },
2966
+ {
2967
+ "tag": "kai-workspace",
2968
+ "className": "KaiWorkspaceElement",
2969
+ "displayName": "Workspace",
2970
+ "props": [
2971
+ {
2972
+ "name": "groups",
2973
+ "type": "{ id: string; userId?: undefined | string; teamId?: undefined | string; name: string; sortOrder: number; createdAt: string }[]",
2974
+ "optional": false,
2975
+ "scalar": false,
2976
+ "description": "Pre-bucketed conversation groups for the sidebar. Set as a JS property.",
2977
+ "typeName": "ConversationGroup[]",
2978
+ "typeShape": "{ id: string; userId?: undefined | string; teamId?: undefined | string; name: string; sortOrder: number; createdAt: string }[]",
2979
+ "default": "[]",
2980
+ "typeImport": "ConversationGroup",
2981
+ "displayType": "ConversationGroup[]"
2982
+ },
2983
+ {
2984
+ "name": "conversations",
2985
+ "type": "{ id: string; title: string; groupId?: undefined | string; scope: { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt: string; updatedAt: string }[]",
2986
+ "optional": false,
2987
+ "scalar": false,
2988
+ "description": "Flat conversation list (auto-bucketed if `groups` is empty). Set as a JS property.",
2989
+ "typeName": "ConversationSummary[]",
2990
+ "typeShape": "{ id: string; title: string; groupId?: undefined | string; scope: { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt: string; updatedAt: string }[]",
2991
+ "default": "[]",
2992
+ "typeImport": "ConversationSummary",
2993
+ "displayType": "ConversationSummary[]"
2994
+ },
2995
+ {
2996
+ "name": "activeId",
2997
+ "type": "undefined | string",
2998
+ "optional": true,
2999
+ "scalar": true,
3000
+ "description": "Id of the open conversation, highlighted in the sidebar.",
3001
+ "displayType": "undefined | string"
3002
+ },
3003
+ {
3004
+ "name": "messages",
3005
+ "type": "{ id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string } }[]",
3006
+ "optional": false,
3007
+ "scalar": false,
3008
+ "description": "The active conversation's message thread, newest last. Set as a JS property.",
3009
+ "typeName": "ChatMessage[]",
3010
+ "typeShape": "{ id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string } }[]",
3011
+ "default": "[]",
3012
+ "displayType": "{ id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string } }[]"
3013
+ },
3014
+ {
3015
+ "name": "value",
3016
+ "type": "undefined | string",
3017
+ "optional": true,
3018
+ "scalar": true,
3019
+ "description": "",
3020
+ "displayType": "undefined | string"
3021
+ },
3022
+ {
3023
+ "name": "placeholder",
3024
+ "type": "undefined | string",
3025
+ "optional": true,
3026
+ "scalar": true,
3027
+ "description": "",
3028
+ "default": "'Send a message...'",
3029
+ "displayType": "undefined | string"
3030
+ },
3031
+ {
3032
+ "name": "loading",
3033
+ "type": "undefined | false | true",
3034
+ "optional": true,
3035
+ "scalar": true,
3036
+ "description": "",
3037
+ "default": "false",
3038
+ "displayType": "undefined | false | true"
3039
+ },
3040
+ {
3041
+ "name": "suggestions",
3042
+ "type": "undefined | string[]",
3043
+ "optional": true,
3044
+ "scalar": false,
3045
+ "description": "",
3046
+ "displayType": "undefined | string[]"
3047
+ },
3048
+ {
3049
+ "name": "suggestionMode",
3050
+ "type": "undefined | \"submit\" | \"fill\"",
3051
+ "optional": true,
3052
+ "scalar": true,
3053
+ "description": "",
3054
+ "default": "'submit'",
3055
+ "displayType": "undefined | \"submit\" | \"fill\""
3056
+ },
3057
+ {
3058
+ "name": "proseSize",
3059
+ "type": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\"",
3060
+ "optional": true,
3061
+ "scalar": true,
3062
+ "description": "",
3063
+ "default": "'sm'",
3064
+ "displayType": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
3065
+ },
3066
+ {
3067
+ "name": "codeTheme",
3068
+ "type": "undefined | string",
3069
+ "optional": true,
3070
+ "scalar": true,
3071
+ "description": "",
3072
+ "default": "'github-dark-dimmed'",
3073
+ "displayType": "undefined | string"
3074
+ },
3075
+ {
3076
+ "name": "codeHighlight",
3077
+ "type": "undefined | false | true",
3078
+ "optional": true,
3079
+ "scalar": true,
3080
+ "description": "",
3081
+ "default": "true",
3082
+ "displayType": "undefined | false | true"
3083
+ },
3084
+ {
3085
+ "name": "chatTitle",
3086
+ "type": "undefined | string",
3087
+ "optional": true,
3088
+ "scalar": true,
3089
+ "description": "",
3090
+ "displayType": "undefined | string"
3091
+ },
3092
+ {
3093
+ "name": "models",
3094
+ "type": "undefined | { id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]",
3095
+ "optional": true,
3096
+ "scalar": false,
3097
+ "description": "",
3098
+ "displayType": "undefined | { id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]"
3099
+ },
3100
+ {
3101
+ "name": "currentModel",
3102
+ "type": "undefined | string",
3103
+ "optional": true,
3104
+ "scalar": true,
3105
+ "description": "",
3106
+ "displayType": "undefined | string"
3107
+ },
3108
+ {
3109
+ "name": "context",
3110
+ "type": "undefined | { usedTokens: number; maxTokens: number; inputTokens?: undefined | number; outputTokens?: undefined | number; estimatedCost?: undefined | number }",
3111
+ "optional": true,
3112
+ "scalar": false,
3113
+ "description": "",
3114
+ "displayType": "ContextData | undefined"
3115
+ },
3116
+ {
3117
+ "name": "scrollButton",
3118
+ "type": "undefined | false | true",
3119
+ "optional": true,
3120
+ "scalar": true,
3121
+ "description": "",
3122
+ "default": "true",
3123
+ "displayType": "undefined | false | true"
3124
+ },
3125
+ {
3126
+ "name": "search",
3127
+ "type": "undefined | false | true",
3128
+ "optional": true,
3129
+ "scalar": true,
3130
+ "description": "",
3131
+ "default": "false",
3132
+ "displayType": "undefined | false | true"
3133
+ },
3134
+ {
3135
+ "name": "voice",
3136
+ "type": "undefined | false | true",
3137
+ "optional": true,
3138
+ "scalar": true,
3139
+ "description": "",
3140
+ "default": "false",
3141
+ "displayType": "undefined | false | true"
3142
+ },
3143
+ {
3144
+ "name": "slashCommands",
3145
+ "type": "undefined | { id: string; label: string; description?: undefined | string; category?: undefined | string }[]",
3146
+ "optional": true,
3147
+ "scalar": false,
3148
+ "description": "",
3149
+ "displayType": "SlashCommandItem[] | undefined"
3150
+ },
3151
+ {
3152
+ "name": "slashActiveIds",
3153
+ "type": "undefined | string[]",
3154
+ "optional": true,
3155
+ "scalar": false,
3156
+ "description": "",
3157
+ "displayType": "undefined | string[]"
3158
+ },
3159
+ {
3160
+ "name": "slashCompact",
3161
+ "type": "undefined | false | true",
3162
+ "optional": true,
3163
+ "scalar": true,
3164
+ "description": "",
3165
+ "default": "false",
3166
+ "displayType": "undefined | false | true"
3167
+ },
3168
+ {
3169
+ "name": "sidebarWidth",
3170
+ "type": "undefined | number",
3171
+ "optional": true,
3172
+ "scalar": true,
3173
+ "description": "Sidebar default width as a percent of the workspace (default 22).",
3174
+ "default": "22",
3175
+ "displayType": "undefined | number"
3176
+ },
3177
+ {
3178
+ "name": "sidebarMinWidth",
3179
+ "type": "undefined | number",
3180
+ "optional": true,
3181
+ "scalar": true,
3182
+ "description": "Sidebar min width in px (default 200).",
3183
+ "default": "200",
3184
+ "displayType": "undefined | number"
3185
+ },
3186
+ {
3187
+ "name": "sidebarMaxWidth",
3188
+ "type": "undefined | number",
3189
+ "optional": true,
3190
+ "scalar": true,
3191
+ "description": "Sidebar max width in px (default 420).",
3192
+ "default": "420",
3193
+ "displayType": "undefined | number"
3194
+ },
3195
+ {
3196
+ "name": "sidebarCollapsed",
3197
+ "type": "undefined | false | true",
3198
+ "optional": true,
3199
+ "scalar": true,
3200
+ "description": "Controlled collapsed state. Set this as a JS property (`el.sidebarCollapsed = true`) to drive the sidebar from your app, updating it in response to the `kai-sidebar-toggle` event. Omit for uncontrolled (the element manages it).",
3201
+ "displayType": "undefined | false | true"
3202
+ },
3203
+ {
3204
+ "name": "defaultSidebarCollapsed",
3205
+ "type": "undefined | false | true",
3206
+ "optional": true,
3207
+ "scalar": true,
3208
+ "description": "Initial collapsed state when uncontrolled (default false). Use the `default-sidebar-collapsed` attribute to start collapsed in plain HTML.",
3209
+ "displayType": "undefined | false | true"
3210
+ }
3211
+ ],
3212
+ "events": [
3213
+ {
3214
+ "name": "kai-conversation-select",
3215
+ "detail": "{ id: string }",
3216
+ "description": "A conversation was selected in the sidebar.",
3217
+ "displayDetail": "{ id: string }"
3218
+ },
3219
+ {
3220
+ "name": "kai-message-action",
3221
+ "detail": "{ messageId: string; action: string }",
3222
+ "description": "An action button on a message was clicked.",
3223
+ "displayDetail": "{ messageId: string; action: string }"
3224
+ },
3225
+ {
3226
+ "name": "kai-model-change",
3227
+ "detail": "{ modelId: string }",
3228
+ "description": "The header model switcher changed.",
3229
+ "displayDetail": "{ modelId: string }"
3230
+ },
3231
+ {
3232
+ "name": "kai-new-chat",
3233
+ "detail": "Record<string, never>",
3234
+ "description": "The \"New chat\" button was clicked.",
3235
+ "displayDetail": "Record<string, never>"
3236
+ },
3237
+ {
3238
+ "name": "kai-search",
3239
+ "detail": "Record<string, never>",
3240
+ "description": "The Search button was clicked.",
3241
+ "displayDetail": "Record<string, never>"
3242
+ },
3243
+ {
3244
+ "name": "kai-sidebar-toggle",
3245
+ "detail": "{ collapsed: false | true }",
3246
+ "description": "The sidebar was collapsed or expanded.",
3247
+ "displayDetail": "{ collapsed: false | true }"
3248
+ },
3249
+ {
3250
+ "name": "kai-slash-select",
3251
+ "detail": "{ command: { id: string; label: string; description?: undefined | string; category?: undefined | string } }",
3252
+ "description": "A slash command was chosen from the palette.",
3253
+ "displayDetail": "{ command: SlashCommandItem }"
3254
+ },
3255
+ {
3256
+ "name": "kai-submit",
3257
+ "detail": "{ value: string; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }",
3258
+ "description": "User submitted a message.",
3259
+ "displayDetail": "{ value: string; attachments: AttachmentData[] }"
3260
+ },
3261
+ {
3262
+ "name": "kai-suggestion-click",
3263
+ "detail": "{ value: string }",
3264
+ "description": "A suggestion chip was clicked (only in `suggestion-mode=\"fill\"`).",
3265
+ "displayDetail": "{ value: string }"
3266
+ },
3267
+ {
3268
+ "name": "kai-value-change",
3269
+ "detail": "{ value: string }",
3270
+ "description": "Fired on every input change.",
3271
+ "displayDetail": "{ value: string }"
3272
+ },
3273
+ {
3274
+ "name": "kai-voice",
3275
+ "detail": "Record<string, never>",
3276
+ "description": "The Mic / voice button was clicked.",
3277
+ "displayDetail": "Record<string, never>"
3278
+ }
3279
+ ],
3280
+ "composedFrom": [
3281
+ {
3282
+ "name": "ChatThread",
3283
+ "group": "Components",
3284
+ "storyId": "solid-advanced-elements-chatthread--docs"
3285
+ },
3286
+ {
3287
+ "name": "ConversationList",
3288
+ "group": "Components",
3289
+ "storyId": "solid-advanced-elements-conversationlist--docs"
3290
+ },
3291
+ {
3292
+ "name": "ResizablePanelGroup",
3293
+ "group": "UI",
3294
+ "storyId": "solid-advanced-primitives-resizablepanelgroup--docs"
3295
+ },
3296
+ {
3297
+ "name": "ResizablePanel",
3298
+ "group": "UI",
3299
+ "storyId": "solid-advanced-primitives-resizablepanel--docs"
3300
+ },
3301
+ {
3302
+ "name": "ResizableHandle",
3303
+ "group": "UI",
3304
+ "storyId": "solid-advanced-primitives-resizablehandle--docs"
3305
+ },
3306
+ {
3307
+ "name": "Button",
3308
+ "group": "UI",
3309
+ "storyId": "solid-advanced-primitives-button--docs"
3310
+ }
3311
+ ],
3312
+ "tokens": []
3313
+ }
3314
+ ]