@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,4739 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "readme": "",
4
+ "modules": [
5
+ {
6
+ "kind": "javascript-module",
7
+ "path": "dist/kitn-chat.es.js",
8
+ "declarations": [
9
+ {
10
+ "kind": "class",
11
+ "customElement": true,
12
+ "tagName": "kai-artifact",
13
+ "name": "KaiArtifactElement",
14
+ "description": "",
15
+ "members": [
16
+ {
17
+ "kind": "field",
18
+ "name": "src",
19
+ "type": {
20
+ "text": "undefined | string"
21
+ },
22
+ "description": "URL the preview iframe frames. Consumer-controlled.",
23
+ "privacy": "public"
24
+ },
25
+ {
26
+ "kind": "field",
27
+ "name": "files",
28
+ "type": {
29
+ "text": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]"
30
+ },
31
+ "description": "Files for the Code tab tree + each file's preview `url`. Set as a JS property (array).",
32
+ "privacy": "public"
33
+ },
34
+ {
35
+ "kind": "field",
36
+ "name": "tab",
37
+ "type": {
38
+ "text": "undefined | \"preview\" | \"code\""
39
+ },
40
+ "description": "Active tab: `preview` (default) or `code`.",
41
+ "privacy": "public"
42
+ },
43
+ {
44
+ "kind": "field",
45
+ "name": "activeFile",
46
+ "type": {
47
+ "text": "undefined | string"
48
+ },
49
+ "description": "Selected file path — syncs the tree highlight, Code source, and preview.",
50
+ "privacy": "public"
51
+ },
52
+ {
53
+ "kind": "field",
54
+ "name": "sandbox",
55
+ "type": {
56
+ "text": "undefined | string"
57
+ },
58
+ "description": "iframe `sandbox` override. Secure default `allow-scripts allow-forms` (NOT `allow-same-origin`).",
59
+ "privacy": "public"
60
+ },
61
+ {
62
+ "kind": "field",
63
+ "name": "iframeTitle",
64
+ "type": {
65
+ "text": "undefined | string"
66
+ },
67
+ "description": "Accessible title for the preview iframe.",
68
+ "privacy": "public"
69
+ },
70
+ {
71
+ "kind": "field",
72
+ "name": "maximized",
73
+ "type": {
74
+ "text": "undefined | false | true"
75
+ },
76
+ "description": "Reflects the artifact's own maximized view-state (usually driven by the protocol).",
77
+ "privacy": "public"
78
+ },
79
+ {
80
+ "kind": "field",
81
+ "name": "expandable",
82
+ "type": {
83
+ "text": "undefined | false | true"
84
+ },
85
+ "description": "Show the expand-to-fill button (OPT-IN).",
86
+ "privacy": "public"
87
+ },
88
+ {
89
+ "kind": "field",
90
+ "name": "openInTab",
91
+ "type": {
92
+ "text": "undefined | false | true"
93
+ },
94
+ "description": "Show the open-in-new-tab button (OPT-IN).",
95
+ "privacy": "public"
96
+ },
97
+ {
98
+ "kind": "field",
99
+ "name": "noNav",
100
+ "type": {
101
+ "text": "undefined | false | true"
102
+ },
103
+ "description": "Hide back/forward.",
104
+ "privacy": "public"
105
+ },
106
+ {
107
+ "kind": "field",
108
+ "name": "noReload",
109
+ "type": {
110
+ "text": "undefined | false | true"
111
+ },
112
+ "description": "Hide reload.",
113
+ "privacy": "public"
114
+ },
115
+ {
116
+ "kind": "field",
117
+ "name": "noHome",
118
+ "type": {
119
+ "text": "undefined | false | true"
120
+ },
121
+ "description": "Hide home.",
122
+ "privacy": "public"
123
+ },
124
+ {
125
+ "kind": "field",
126
+ "name": "noPathField",
127
+ "type": {
128
+ "text": "undefined | false | true"
129
+ },
130
+ "description": "Hide the address field.",
131
+ "privacy": "public"
132
+ },
133
+ {
134
+ "kind": "field",
135
+ "name": "noTabs",
136
+ "type": {
137
+ "text": "undefined | false | true"
138
+ },
139
+ "description": "Hide the Preview|Code toggle.",
140
+ "privacy": "public"
141
+ },
142
+ {
143
+ "kind": "field",
144
+ "name": "standalone",
145
+ "type": {
146
+ "text": "undefined | false | true"
147
+ },
148
+ "description": "Standalone chrome: rounded corners + border (else square, borderless in-panel).",
149
+ "privacy": "public"
150
+ },
151
+ {
152
+ "kind": "field",
153
+ "name": "readonlyPath",
154
+ "type": {
155
+ "text": "undefined | false | true"
156
+ },
157
+ "description": "Show the address but make it read-only (visible, nav-tracking, non-editable).",
158
+ "privacy": "public"
159
+ }
160
+ ],
161
+ "attributes": [
162
+ {
163
+ "name": "theme",
164
+ "type": {
165
+ "text": "'light' | 'dark' | 'auto'"
166
+ },
167
+ "description": "Color mode (auto follows prefers-color-scheme)."
168
+ },
169
+ {
170
+ "name": "src",
171
+ "fieldName": "src",
172
+ "type": {
173
+ "text": "undefined | string"
174
+ },
175
+ "description": "URL the preview iframe frames. Consumer-controlled."
176
+ },
177
+ {
178
+ "name": "tab",
179
+ "fieldName": "tab",
180
+ "type": {
181
+ "text": "undefined | \"preview\" | \"code\""
182
+ },
183
+ "description": "Active tab: `preview` (default) or `code`."
184
+ },
185
+ {
186
+ "name": "active-file",
187
+ "fieldName": "activeFile",
188
+ "type": {
189
+ "text": "undefined | string"
190
+ },
191
+ "description": "Selected file path — syncs the tree highlight, Code source, and preview."
192
+ },
193
+ {
194
+ "name": "sandbox",
195
+ "fieldName": "sandbox",
196
+ "type": {
197
+ "text": "undefined | string"
198
+ },
199
+ "description": "iframe `sandbox` override. Secure default `allow-scripts allow-forms` (NOT `allow-same-origin`)."
200
+ },
201
+ {
202
+ "name": "iframe-title",
203
+ "fieldName": "iframeTitle",
204
+ "type": {
205
+ "text": "undefined | string"
206
+ },
207
+ "description": "Accessible title for the preview iframe."
208
+ },
209
+ {
210
+ "name": "maximized",
211
+ "fieldName": "maximized",
212
+ "type": {
213
+ "text": "undefined | false | true"
214
+ },
215
+ "description": "Reflects the artifact's own maximized view-state (usually driven by the protocol)."
216
+ },
217
+ {
218
+ "name": "expandable",
219
+ "fieldName": "expandable",
220
+ "type": {
221
+ "text": "undefined | false | true"
222
+ },
223
+ "description": "Show the expand-to-fill button (OPT-IN)."
224
+ },
225
+ {
226
+ "name": "open-in-tab",
227
+ "fieldName": "openInTab",
228
+ "type": {
229
+ "text": "undefined | false | true"
230
+ },
231
+ "description": "Show the open-in-new-tab button (OPT-IN)."
232
+ },
233
+ {
234
+ "name": "no-nav",
235
+ "fieldName": "noNav",
236
+ "type": {
237
+ "text": "undefined | false | true"
238
+ },
239
+ "description": "Hide back/forward."
240
+ },
241
+ {
242
+ "name": "no-reload",
243
+ "fieldName": "noReload",
244
+ "type": {
245
+ "text": "undefined | false | true"
246
+ },
247
+ "description": "Hide reload."
248
+ },
249
+ {
250
+ "name": "no-home",
251
+ "fieldName": "noHome",
252
+ "type": {
253
+ "text": "undefined | false | true"
254
+ },
255
+ "description": "Hide home."
256
+ },
257
+ {
258
+ "name": "no-path-field",
259
+ "fieldName": "noPathField",
260
+ "type": {
261
+ "text": "undefined | false | true"
262
+ },
263
+ "description": "Hide the address field."
264
+ },
265
+ {
266
+ "name": "no-tabs",
267
+ "fieldName": "noTabs",
268
+ "type": {
269
+ "text": "undefined | false | true"
270
+ },
271
+ "description": "Hide the Preview|Code toggle."
272
+ },
273
+ {
274
+ "name": "standalone",
275
+ "fieldName": "standalone",
276
+ "type": {
277
+ "text": "undefined | false | true"
278
+ },
279
+ "description": "Standalone chrome: rounded corners + border (else square, borderless in-panel)."
280
+ },
281
+ {
282
+ "name": "readonly-path",
283
+ "fieldName": "readonlyPath",
284
+ "type": {
285
+ "text": "undefined | false | true"
286
+ },
287
+ "description": "Show the address but make it read-only (visible, nav-tracking, non-editable)."
288
+ }
289
+ ],
290
+ "events": [
291
+ {
292
+ "name": "kai-file-select",
293
+ "type": {
294
+ "text": "CustomEvent<{ path: string }>"
295
+ },
296
+ "description": "Fired when a file is selected. `detail.path`."
297
+ },
298
+ {
299
+ "name": "kai-maximize-change",
300
+ "type": {
301
+ "text": "CustomEvent<{ maximized: false | true }>"
302
+ },
303
+ "description": "Artifact's own maximize button toggled (consumer-observable; non-bubbling)."
304
+ },
305
+ {
306
+ "name": "kai-navigate",
307
+ "type": {
308
+ "text": "CustomEvent<{ url: string }>"
309
+ },
310
+ "description": "Fired when the preview navigates. `detail.url` = the new location."
311
+ },
312
+ {
313
+ "name": "kai-tab-change",
314
+ "type": {
315
+ "text": "CustomEvent<{ tab: \"preview\" | \"code\" }>"
316
+ },
317
+ "description": "Fired when the Preview|Code tab changes. `detail.tab`."
318
+ }
319
+ ],
320
+ "cssProperties": []
321
+ },
322
+ {
323
+ "kind": "class",
324
+ "customElement": true,
325
+ "tagName": "kai-attachments",
326
+ "name": "KaiAttachmentsElement",
327
+ "description": "",
328
+ "members": [
329
+ {
330
+ "kind": "field",
331
+ "name": "items",
332
+ "type": {
333
+ "text": "{ id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]"
334
+ },
335
+ "description": "The attachments to render. Set as a JS property (array).",
336
+ "privacy": "public"
337
+ },
338
+ {
339
+ "kind": "field",
340
+ "name": "variant",
341
+ "type": {
342
+ "text": "undefined | \"grid\" | \"inline\" | \"list\""
343
+ },
344
+ "description": "Layout: `grid` = visual tiles, `inline` = icon + label chips, `list` = rows.",
345
+ "privacy": "public"
346
+ },
347
+ {
348
+ "kind": "field",
349
+ "name": "hoverCard",
350
+ "type": {
351
+ "text": "undefined | false | true"
352
+ },
353
+ "description": "Wrap each item in a hover card that previews its details.",
354
+ "privacy": "public"
355
+ },
356
+ {
357
+ "kind": "field",
358
+ "name": "removable",
359
+ "type": {
360
+ "text": "undefined | false | true"
361
+ },
362
+ "description": "Show a remove button per item; clicking it fires a `kai-remove` event.",
363
+ "privacy": "public"
364
+ },
365
+ {
366
+ "kind": "field",
367
+ "name": "showMediaType",
368
+ "type": {
369
+ "text": "undefined | false | true"
370
+ },
371
+ "description": "Also show the media type beneath the filename (non-grid variants).",
372
+ "privacy": "public"
373
+ },
374
+ {
375
+ "kind": "field",
376
+ "name": "emptyText",
377
+ "type": {
378
+ "text": "undefined | string"
379
+ },
380
+ "description": "Text shown when `items` is empty.",
381
+ "privacy": "public"
382
+ }
383
+ ],
384
+ "attributes": [
385
+ {
386
+ "name": "theme",
387
+ "type": {
388
+ "text": "'light' | 'dark' | 'auto'"
389
+ },
390
+ "description": "Color mode (auto follows prefers-color-scheme)."
391
+ },
392
+ {
393
+ "name": "variant",
394
+ "fieldName": "variant",
395
+ "type": {
396
+ "text": "undefined | \"grid\" | \"inline\" | \"list\""
397
+ },
398
+ "description": "Layout: `grid` = visual tiles, `inline` = icon + label chips, `list` = rows."
399
+ },
400
+ {
401
+ "name": "hover-card",
402
+ "fieldName": "hoverCard",
403
+ "type": {
404
+ "text": "undefined | false | true"
405
+ },
406
+ "description": "Wrap each item in a hover card that previews its details."
407
+ },
408
+ {
409
+ "name": "removable",
410
+ "fieldName": "removable",
411
+ "type": {
412
+ "text": "undefined | false | true"
413
+ },
414
+ "description": "Show a remove button per item; clicking it fires a `kai-remove` event."
415
+ },
416
+ {
417
+ "name": "show-media-type",
418
+ "fieldName": "showMediaType",
419
+ "type": {
420
+ "text": "undefined | false | true"
421
+ },
422
+ "description": "Also show the media type beneath the filename (non-grid variants)."
423
+ },
424
+ {
425
+ "name": "empty-text",
426
+ "fieldName": "emptyText",
427
+ "type": {
428
+ "text": "undefined | string"
429
+ },
430
+ "description": "Text shown when `items` is empty."
431
+ }
432
+ ],
433
+ "events": [
434
+ {
435
+ "name": "kai-remove",
436
+ "type": {
437
+ "text": "CustomEvent<{ id: string }>"
438
+ },
439
+ "description": "A remove button was clicked."
440
+ }
441
+ ],
442
+ "cssProperties": []
443
+ },
444
+ {
445
+ "kind": "class",
446
+ "customElement": true,
447
+ "tagName": "kai-card",
448
+ "name": "KaiCardElement",
449
+ "description": "",
450
+ "members": [
451
+ {
452
+ "kind": "field",
453
+ "name": "heading",
454
+ "type": {
455
+ "text": "undefined | string"
456
+ },
457
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
458
+ "privacy": "public"
459
+ },
460
+ {
461
+ "kind": "field",
462
+ "name": "description",
463
+ "type": {
464
+ "text": "undefined | string"
465
+ },
466
+ "description": "Supporting text under the heading. Attribute: `description`.",
467
+ "privacy": "public"
468
+ },
469
+ {
470
+ "kind": "field",
471
+ "name": "errorMessage",
472
+ "type": {
473
+ "text": "undefined | string"
474
+ },
475
+ "description": "When set, the card renders its inline error state instead of the body. Attribute: `error-message`.",
476
+ "privacy": "public"
477
+ },
478
+ {
479
+ "kind": "field",
480
+ "name": "dense",
481
+ "type": {
482
+ "text": "undefined | false | true"
483
+ },
484
+ "description": "Compact spacing for dense lists. Attribute: `dense`.",
485
+ "privacy": "public"
486
+ }
487
+ ],
488
+ "attributes": [
489
+ {
490
+ "name": "theme",
491
+ "type": {
492
+ "text": "'light' | 'dark' | 'auto'"
493
+ },
494
+ "description": "Color mode (auto follows prefers-color-scheme)."
495
+ },
496
+ {
497
+ "name": "heading",
498
+ "fieldName": "heading",
499
+ "type": {
500
+ "text": "undefined | string"
501
+ },
502
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`."
503
+ },
504
+ {
505
+ "name": "description",
506
+ "fieldName": "description",
507
+ "type": {
508
+ "text": "undefined | string"
509
+ },
510
+ "description": "Supporting text under the heading. Attribute: `description`."
511
+ },
512
+ {
513
+ "name": "error-message",
514
+ "fieldName": "errorMessage",
515
+ "type": {
516
+ "text": "undefined | string"
517
+ },
518
+ "description": "When set, the card renders its inline error state instead of the body. Attribute: `error-message`."
519
+ },
520
+ {
521
+ "name": "dense",
522
+ "fieldName": "dense",
523
+ "type": {
524
+ "text": "undefined | false | true"
525
+ },
526
+ "description": "Compact spacing for dense lists. Attribute: `dense`."
527
+ }
528
+ ],
529
+ "events": [],
530
+ "cssProperties": []
531
+ },
532
+ {
533
+ "kind": "class",
534
+ "customElement": true,
535
+ "tagName": "kai-cards",
536
+ "name": "KaiCardsElement",
537
+ "description": "",
538
+ "members": [
539
+ {
540
+ "kind": "field",
541
+ "name": "cards",
542
+ "type": {
543
+ "text": "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 } }[]"
544
+ },
545
+ "description": "The stream of card envelopes to render. Set as a JS PROPERTY: `el.cards = [...]`.",
546
+ "privacy": "public"
547
+ },
548
+ {
549
+ "kind": "field",
550
+ "name": "types",
551
+ "type": {
552
+ "text": "undefined | Record<string, string>"
553
+ },
554
+ "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.",
555
+ "privacy": "public"
556
+ },
557
+ {
558
+ "kind": "field",
559
+ "name": "policy",
560
+ "type": {
561
+ "text": "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\" }"
562
+ },
563
+ "description": "Optional CardPolicy handling child events. Property: `el.policy`.",
564
+ "privacy": "public"
565
+ }
566
+ ],
567
+ "attributes": [
568
+ {
569
+ "name": "theme",
570
+ "type": {
571
+ "text": "'light' | 'dark' | 'auto'"
572
+ },
573
+ "description": "Color mode (auto follows prefers-color-scheme)."
574
+ }
575
+ ],
576
+ "events": [],
577
+ "cssProperties": []
578
+ },
579
+ {
580
+ "kind": "class",
581
+ "customElement": true,
582
+ "tagName": "kai-chain-of-thought",
583
+ "name": "KaiChainOfThoughtElement",
584
+ "description": "",
585
+ "members": [
586
+ {
587
+ "kind": "field",
588
+ "name": "steps",
589
+ "type": {
590
+ "text": "{ label: string; content?: undefined | string }[]"
591
+ },
592
+ "description": "The reasoning steps. Set as a JS property. Compound sub-parts collapse to this one data model (Route 1).",
593
+ "privacy": "public"
594
+ }
595
+ ],
596
+ "attributes": [
597
+ {
598
+ "name": "theme",
599
+ "type": {
600
+ "text": "'light' | 'dark' | 'auto'"
601
+ },
602
+ "description": "Color mode (auto follows prefers-color-scheme)."
603
+ }
604
+ ],
605
+ "events": [],
606
+ "cssProperties": []
607
+ },
608
+ {
609
+ "kind": "class",
610
+ "customElement": true,
611
+ "tagName": "kai-chat",
612
+ "name": "KaiChatElement",
613
+ "description": "",
614
+ "members": [
615
+ {
616
+ "kind": "field",
617
+ "name": "messages",
618
+ "type": {
619
+ "text": "{ 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 } }[]"
620
+ },
621
+ "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 = [...]`).",
622
+ "privacy": "public"
623
+ },
624
+ {
625
+ "kind": "field",
626
+ "name": "value",
627
+ "type": {
628
+ "text": "undefined | string"
629
+ },
630
+ "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.",
631
+ "privacy": "public"
632
+ },
633
+ {
634
+ "kind": "field",
635
+ "name": "placeholder",
636
+ "type": {
637
+ "text": "undefined | string"
638
+ },
639
+ "description": "Placeholder text shown in the empty input.",
640
+ "privacy": "public"
641
+ },
642
+ {
643
+ "kind": "field",
644
+ "name": "loading",
645
+ "type": {
646
+ "text": "undefined | false | true"
647
+ },
648
+ "description": "When true, shows the loading/streaming state and disables submit (use while awaiting the assistant's reply).",
649
+ "privacy": "public"
650
+ },
651
+ {
652
+ "kind": "field",
653
+ "name": "suggestions",
654
+ "type": {
655
+ "text": "undefined | string[]"
656
+ },
657
+ "description": "Starter prompts shown above the input when the thread is empty. Clicking one follows `suggestionMode`. Set as a JS property.",
658
+ "privacy": "public"
659
+ },
660
+ {
661
+ "kind": "field",
662
+ "name": "suggestionMode",
663
+ "type": {
664
+ "text": "undefined | \"submit\" | \"fill\""
665
+ },
666
+ "description": "What clicking a suggestion does: `'submit'` (default) sends it immediately as if typed and submitted; `'fill'` just places it in the input.",
667
+ "privacy": "public"
668
+ },
669
+ {
670
+ "kind": "field",
671
+ "name": "persistSuggestions",
672
+ "type": {
673
+ "text": "undefined | false | true"
674
+ },
675
+ "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.",
676
+ "privacy": "public"
677
+ },
678
+ {
679
+ "kind": "field",
680
+ "name": "proseSize",
681
+ "type": {
682
+ "text": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
683
+ },
684
+ "description": "Body/prose font scale for rendered markdown (`'xs' | 'sm' | 'base' | 'lg'`). Defaults to `'sm'`.",
685
+ "privacy": "public"
686
+ },
687
+ {
688
+ "kind": "field",
689
+ "name": "codeTheme",
690
+ "type": {
691
+ "text": "undefined | string"
692
+ },
693
+ "description": "Shiki theme name for syntax-highlighted code blocks (e.g. `'github-dark-dimmed'`).",
694
+ "privacy": "public"
695
+ },
696
+ {
697
+ "kind": "field",
698
+ "name": "codeHighlight",
699
+ "type": {
700
+ "text": "undefined | false | true"
701
+ },
702
+ "description": "Enable Shiki syntax highlighting in code blocks. Turn off to render plain `<pre>` blocks (lighter, no highlighter load). Default true.",
703
+ "privacy": "public"
704
+ },
705
+ {
706
+ "kind": "field",
707
+ "name": "chatTitle",
708
+ "type": {
709
+ "text": "undefined | string"
710
+ },
711
+ "description": "Optional header title shown on the left of the header.",
712
+ "privacy": "public"
713
+ },
714
+ {
715
+ "kind": "field",
716
+ "name": "models",
717
+ "type": {
718
+ "text": "undefined | { id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]"
719
+ },
720
+ "description": "Optional model list. When set (>1 model) a ModelSwitcher is shown in the header and a `kai-model-change` event fires on selection.",
721
+ "privacy": "public"
722
+ },
723
+ {
724
+ "kind": "field",
725
+ "name": "currentModel",
726
+ "type": {
727
+ "text": "undefined | string"
728
+ },
729
+ "description": "The currently selected model id (pairs with `models`).",
730
+ "privacy": "public"
731
+ },
732
+ {
733
+ "kind": "field",
734
+ "name": "context",
735
+ "type": {
736
+ "text": "undefined | { usedTokens: number; maxTokens: number; inputTokens?: undefined | number; outputTokens?: undefined | number; estimatedCost?: undefined | number }"
737
+ },
738
+ "description": "Optional context-window token usage. When set, a Context token meter is shown in the header.",
739
+ "privacy": "public"
740
+ },
741
+ {
742
+ "kind": "field",
743
+ "name": "scrollButton",
744
+ "type": {
745
+ "text": "undefined | false | true"
746
+ },
747
+ "description": "Show the scroll-to-bottom button inside the scroll area. Default true.",
748
+ "privacy": "public"
749
+ },
750
+ {
751
+ "kind": "field",
752
+ "name": "headerStart",
753
+ "type": {
754
+ "text": "undefined | false | true"
755
+ },
756
+ "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.",
757
+ "privacy": "public"
758
+ },
759
+ {
760
+ "kind": "field",
761
+ "name": "headerEnd",
762
+ "type": {
763
+ "text": "undefined | false | true"
764
+ },
765
+ "description": "Whether the host has `slot=\"header-end\"` content (right of the controls).",
766
+ "privacy": "public"
767
+ },
768
+ {
769
+ "kind": "field",
770
+ "name": "search",
771
+ "type": {
772
+ "text": "undefined | false | true"
773
+ },
774
+ "description": "Show a Search (Globe) button in the input toolbar; fires a `search` event.",
775
+ "privacy": "public"
776
+ },
777
+ {
778
+ "kind": "field",
779
+ "name": "voice",
780
+ "type": {
781
+ "text": "undefined | false | true"
782
+ },
783
+ "description": "Show a Voice (Mic) button in the input toolbar; fires a `voice` event.",
784
+ "privacy": "public"
785
+ },
786
+ {
787
+ "kind": "field",
788
+ "name": "slashCommands",
789
+ "type": {
790
+ "text": "undefined | { id: string; label: string; description?: undefined | string; category?: undefined | string }[]"
791
+ },
792
+ "description": "Slash commands — when set, typing `/` in the input opens the command palette and fires `kai-slash-select`. Set as a JS property.",
793
+ "privacy": "public"
794
+ },
795
+ {
796
+ "kind": "field",
797
+ "name": "slashActiveIds",
798
+ "type": {
799
+ "text": "undefined | string[]"
800
+ },
801
+ "description": "Command ids to highlight as active in the palette.",
802
+ "privacy": "public"
803
+ },
804
+ {
805
+ "kind": "field",
806
+ "name": "slashCompact",
807
+ "type": {
808
+ "text": "undefined | false | true"
809
+ },
810
+ "description": "Single-line palette rows.",
811
+ "privacy": "public"
812
+ },
813
+ {
814
+ "kind": "field",
815
+ "name": "actionsReveal",
816
+ "type": {
817
+ "text": "undefined | \"always\" | \"hover\""
818
+ },
819
+ "description": "Whether each message's action bar is always visible (`'always'`, default) or only revealed on hover of that message row (`'hover'`).",
820
+ "privacy": "public"
821
+ }
822
+ ],
823
+ "attributes": [
824
+ {
825
+ "name": "theme",
826
+ "type": {
827
+ "text": "'light' | 'dark' | 'auto'"
828
+ },
829
+ "description": "Color mode (auto follows prefers-color-scheme)."
830
+ },
831
+ {
832
+ "name": "value",
833
+ "fieldName": "value",
834
+ "type": {
835
+ "text": "undefined | string"
836
+ },
837
+ "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."
838
+ },
839
+ {
840
+ "name": "placeholder",
841
+ "fieldName": "placeholder",
842
+ "type": {
843
+ "text": "undefined | string"
844
+ },
845
+ "description": "Placeholder text shown in the empty input."
846
+ },
847
+ {
848
+ "name": "loading",
849
+ "fieldName": "loading",
850
+ "type": {
851
+ "text": "undefined | false | true"
852
+ },
853
+ "description": "When true, shows the loading/streaming state and disables submit (use while awaiting the assistant's reply)."
854
+ },
855
+ {
856
+ "name": "suggestion-mode",
857
+ "fieldName": "suggestionMode",
858
+ "type": {
859
+ "text": "undefined | \"submit\" | \"fill\""
860
+ },
861
+ "description": "What clicking a suggestion does: `'submit'` (default) sends it immediately as if typed and submitted; `'fill'` just places it in the input."
862
+ },
863
+ {
864
+ "name": "persist-suggestions",
865
+ "fieldName": "persistSuggestions",
866
+ "type": {
867
+ "text": "undefined | false | true"
868
+ },
869
+ "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."
870
+ },
871
+ {
872
+ "name": "prose-size",
873
+ "fieldName": "proseSize",
874
+ "type": {
875
+ "text": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
876
+ },
877
+ "description": "Body/prose font scale for rendered markdown (`'xs' | 'sm' | 'base' | 'lg'`). Defaults to `'sm'`."
878
+ },
879
+ {
880
+ "name": "code-theme",
881
+ "fieldName": "codeTheme",
882
+ "type": {
883
+ "text": "undefined | string"
884
+ },
885
+ "description": "Shiki theme name for syntax-highlighted code blocks (e.g. `'github-dark-dimmed'`)."
886
+ },
887
+ {
888
+ "name": "code-highlight",
889
+ "fieldName": "codeHighlight",
890
+ "type": {
891
+ "text": "undefined | false | true"
892
+ },
893
+ "description": "Enable Shiki syntax highlighting in code blocks. Turn off to render plain `<pre>` blocks (lighter, no highlighter load). Default true."
894
+ },
895
+ {
896
+ "name": "chat-title",
897
+ "fieldName": "chatTitle",
898
+ "type": {
899
+ "text": "undefined | string"
900
+ },
901
+ "description": "Optional header title shown on the left of the header."
902
+ },
903
+ {
904
+ "name": "current-model",
905
+ "fieldName": "currentModel",
906
+ "type": {
907
+ "text": "undefined | string"
908
+ },
909
+ "description": "The currently selected model id (pairs with `models`)."
910
+ },
911
+ {
912
+ "name": "scroll-button",
913
+ "fieldName": "scrollButton",
914
+ "type": {
915
+ "text": "undefined | false | true"
916
+ },
917
+ "description": "Show the scroll-to-bottom button inside the scroll area. Default true."
918
+ },
919
+ {
920
+ "name": "header-start",
921
+ "fieldName": "headerStart",
922
+ "type": {
923
+ "text": "undefined | false | true"
924
+ },
925
+ "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."
926
+ },
927
+ {
928
+ "name": "header-end",
929
+ "fieldName": "headerEnd",
930
+ "type": {
931
+ "text": "undefined | false | true"
932
+ },
933
+ "description": "Whether the host has `slot=\"header-end\"` content (right of the controls)."
934
+ },
935
+ {
936
+ "name": "search",
937
+ "fieldName": "search",
938
+ "type": {
939
+ "text": "undefined | false | true"
940
+ },
941
+ "description": "Show a Search (Globe) button in the input toolbar; fires a `search` event."
942
+ },
943
+ {
944
+ "name": "voice",
945
+ "fieldName": "voice",
946
+ "type": {
947
+ "text": "undefined | false | true"
948
+ },
949
+ "description": "Show a Voice (Mic) button in the input toolbar; fires a `voice` event."
950
+ },
951
+ {
952
+ "name": "slash-compact",
953
+ "fieldName": "slashCompact",
954
+ "type": {
955
+ "text": "undefined | false | true"
956
+ },
957
+ "description": "Single-line palette rows."
958
+ },
959
+ {
960
+ "name": "actions-reveal",
961
+ "fieldName": "actionsReveal",
962
+ "type": {
963
+ "text": "undefined | \"always\" | \"hover\""
964
+ },
965
+ "description": "Whether each message's action bar is always visible (`'always'`, default) or only revealed on hover of that message row (`'hover'`)."
966
+ }
967
+ ],
968
+ "events": [
969
+ {
970
+ "name": "kai-message-action",
971
+ "type": {
972
+ "text": "CustomEvent<{ messageId: string; action: string }>"
973
+ },
974
+ "description": "An action button on a message was clicked. `action` is the built-in name or custom id."
975
+ },
976
+ {
977
+ "name": "kai-model-change",
978
+ "type": {
979
+ "text": "CustomEvent<{ modelId: string }>"
980
+ },
981
+ "description": "The header model switcher changed."
982
+ },
983
+ {
984
+ "name": "kai-search",
985
+ "type": {
986
+ "text": "CustomEvent<Record<string, never>>"
987
+ },
988
+ "description": "The Search button was clicked."
989
+ },
990
+ {
991
+ "name": "kai-slash-select",
992
+ "type": {
993
+ "text": "CustomEvent<{ command: { id: string; label: string; description?: undefined | string; category?: undefined | string } }>"
994
+ },
995
+ "description": "A slash command was chosen from the palette."
996
+ },
997
+ {
998
+ "name": "kai-submit",
999
+ "type": {
1000
+ "text": "CustomEvent<{ value: string; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }>"
1001
+ },
1002
+ "description": "User submitted a message."
1003
+ },
1004
+ {
1005
+ "name": "kai-suggestion-click",
1006
+ "type": {
1007
+ "text": "CustomEvent<{ value: string }>"
1008
+ },
1009
+ "description": "A suggestion chip was clicked (only in `suggestion-mode=\"fill\"`)."
1010
+ },
1011
+ {
1012
+ "name": "kai-value-change",
1013
+ "type": {
1014
+ "text": "CustomEvent<{ value: string }>"
1015
+ },
1016
+ "description": "Fired on every input change."
1017
+ },
1018
+ {
1019
+ "name": "kai-voice",
1020
+ "type": {
1021
+ "text": "CustomEvent<Record<string, never>>"
1022
+ },
1023
+ "description": "The Mic / voice button was clicked."
1024
+ }
1025
+ ],
1026
+ "cssProperties": []
1027
+ },
1028
+ {
1029
+ "kind": "class",
1030
+ "customElement": true,
1031
+ "tagName": "kai-checkpoint",
1032
+ "name": "KaiCheckpointElement",
1033
+ "description": "",
1034
+ "members": [
1035
+ {
1036
+ "kind": "field",
1037
+ "name": "label",
1038
+ "type": {
1039
+ "text": "undefined | string"
1040
+ },
1041
+ "description": "Optional text beside the icon.",
1042
+ "privacy": "public"
1043
+ },
1044
+ {
1045
+ "kind": "field",
1046
+ "name": "tooltip",
1047
+ "type": {
1048
+ "text": "undefined | string"
1049
+ },
1050
+ "description": "Tooltip on hover.",
1051
+ "privacy": "public"
1052
+ },
1053
+ {
1054
+ "kind": "field",
1055
+ "name": "variant",
1056
+ "type": {
1057
+ "text": "undefined | \"ghost\" | \"default\" | \"outline\""
1058
+ },
1059
+ "description": "Visual button style.",
1060
+ "privacy": "public"
1061
+ },
1062
+ {
1063
+ "kind": "field",
1064
+ "name": "size",
1065
+ "type": {
1066
+ "text": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
1067
+ },
1068
+ "description": "Button size (use an `icon*` size for an icon-only checkpoint).",
1069
+ "privacy": "public"
1070
+ }
1071
+ ],
1072
+ "attributes": [
1073
+ {
1074
+ "name": "theme",
1075
+ "type": {
1076
+ "text": "'light' | 'dark' | 'auto'"
1077
+ },
1078
+ "description": "Color mode (auto follows prefers-color-scheme)."
1079
+ },
1080
+ {
1081
+ "name": "label",
1082
+ "fieldName": "label",
1083
+ "type": {
1084
+ "text": "undefined | string"
1085
+ },
1086
+ "description": "Optional text beside the icon."
1087
+ },
1088
+ {
1089
+ "name": "tooltip",
1090
+ "fieldName": "tooltip",
1091
+ "type": {
1092
+ "text": "undefined | string"
1093
+ },
1094
+ "description": "Tooltip on hover."
1095
+ },
1096
+ {
1097
+ "name": "variant",
1098
+ "fieldName": "variant",
1099
+ "type": {
1100
+ "text": "undefined | \"ghost\" | \"default\" | \"outline\""
1101
+ },
1102
+ "description": "Visual button style."
1103
+ },
1104
+ {
1105
+ "name": "size",
1106
+ "fieldName": "size",
1107
+ "type": {
1108
+ "text": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
1109
+ },
1110
+ "description": "Button size (use an `icon*` size for an icon-only checkpoint)."
1111
+ }
1112
+ ],
1113
+ "events": [
1114
+ {
1115
+ "name": "kai-select",
1116
+ "type": {
1117
+ "text": "CustomEvent"
1118
+ },
1119
+ "description": "The checkpoint was clicked."
1120
+ }
1121
+ ],
1122
+ "cssProperties": []
1123
+ },
1124
+ {
1125
+ "kind": "class",
1126
+ "customElement": true,
1127
+ "tagName": "kai-choice",
1128
+ "name": "KaiChoiceElement",
1129
+ "description": "",
1130
+ "members": [
1131
+ {
1132
+ "kind": "field",
1133
+ "name": "data",
1134
+ "type": {
1135
+ "text": "undefined | Record<string, unknown>"
1136
+ },
1137
+ "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.",
1138
+ "privacy": "public"
1139
+ },
1140
+ {
1141
+ "kind": "field",
1142
+ "name": "cardId",
1143
+ "type": {
1144
+ "text": "undefined | string"
1145
+ },
1146
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
1147
+ "privacy": "public"
1148
+ },
1149
+ {
1150
+ "kind": "field",
1151
+ "name": "heading",
1152
+ "type": {
1153
+ "text": "undefined | string"
1154
+ },
1155
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
1156
+ "privacy": "public"
1157
+ },
1158
+ {
1159
+ "kind": "field",
1160
+ "name": "resolution",
1161
+ "type": {
1162
+ "text": "undefined | Record<string, unknown>"
1163
+ },
1164
+ "description": "Set when the user resolved this card; renders the read-only view. Property: `el.resolution = { kind:'action', action:'…' }`.",
1165
+ "privacy": "public"
1166
+ }
1167
+ ],
1168
+ "attributes": [
1169
+ {
1170
+ "name": "theme",
1171
+ "type": {
1172
+ "text": "'light' | 'dark' | 'auto'"
1173
+ },
1174
+ "description": "Color mode (auto follows prefers-color-scheme)."
1175
+ },
1176
+ {
1177
+ "name": "card-id",
1178
+ "fieldName": "cardId",
1179
+ "type": {
1180
+ "text": "undefined | string"
1181
+ },
1182
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`."
1183
+ },
1184
+ {
1185
+ "name": "heading",
1186
+ "fieldName": "heading",
1187
+ "type": {
1188
+ "text": "undefined | string"
1189
+ },
1190
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`."
1191
+ }
1192
+ ],
1193
+ "events": [],
1194
+ "cssProperties": []
1195
+ },
1196
+ {
1197
+ "kind": "class",
1198
+ "customElement": true,
1199
+ "tagName": "kai-code-block",
1200
+ "name": "KaiCodeBlockElement",
1201
+ "description": "",
1202
+ "members": [
1203
+ {
1204
+ "kind": "field",
1205
+ "name": "code",
1206
+ "type": {
1207
+ "text": "string"
1208
+ },
1209
+ "description": "The source code to render.",
1210
+ "privacy": "public"
1211
+ },
1212
+ {
1213
+ "kind": "field",
1214
+ "name": "language",
1215
+ "type": {
1216
+ "text": "undefined | string"
1217
+ },
1218
+ "description": "Language grammar (e.g. `js`, `python`). Defaults to `tsx`.",
1219
+ "privacy": "public"
1220
+ },
1221
+ {
1222
+ "kind": "field",
1223
+ "name": "codeTheme",
1224
+ "type": {
1225
+ "text": "undefined | string"
1226
+ },
1227
+ "description": "Shiki theme name.",
1228
+ "privacy": "public"
1229
+ },
1230
+ {
1231
+ "kind": "field",
1232
+ "name": "codeHighlight",
1233
+ "type": {
1234
+ "text": "undefined | false | true"
1235
+ },
1236
+ "description": "Disable syntax highlighting (renders plain text, no Shiki).",
1237
+ "privacy": "public"
1238
+ },
1239
+ {
1240
+ "kind": "field",
1241
+ "name": "proseSize",
1242
+ "type": {
1243
+ "text": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
1244
+ },
1245
+ "description": "Code text sizing.",
1246
+ "privacy": "public"
1247
+ }
1248
+ ],
1249
+ "attributes": [
1250
+ {
1251
+ "name": "theme",
1252
+ "type": {
1253
+ "text": "'light' | 'dark' | 'auto'"
1254
+ },
1255
+ "description": "Color mode (auto follows prefers-color-scheme)."
1256
+ },
1257
+ {
1258
+ "name": "code",
1259
+ "fieldName": "code",
1260
+ "type": {
1261
+ "text": "string"
1262
+ },
1263
+ "description": "The source code to render."
1264
+ },
1265
+ {
1266
+ "name": "language",
1267
+ "fieldName": "language",
1268
+ "type": {
1269
+ "text": "undefined | string"
1270
+ },
1271
+ "description": "Language grammar (e.g. `js`, `python`). Defaults to `tsx`."
1272
+ },
1273
+ {
1274
+ "name": "code-theme",
1275
+ "fieldName": "codeTheme",
1276
+ "type": {
1277
+ "text": "undefined | string"
1278
+ },
1279
+ "description": "Shiki theme name."
1280
+ },
1281
+ {
1282
+ "name": "code-highlight",
1283
+ "fieldName": "codeHighlight",
1284
+ "type": {
1285
+ "text": "undefined | false | true"
1286
+ },
1287
+ "description": "Disable syntax highlighting (renders plain text, no Shiki)."
1288
+ },
1289
+ {
1290
+ "name": "prose-size",
1291
+ "fieldName": "proseSize",
1292
+ "type": {
1293
+ "text": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
1294
+ },
1295
+ "description": "Code text sizing."
1296
+ }
1297
+ ],
1298
+ "events": [],
1299
+ "cssProperties": [
1300
+ {
1301
+ "name": "--color-code-foreground"
1302
+ }
1303
+ ]
1304
+ },
1305
+ {
1306
+ "kind": "class",
1307
+ "customElement": true,
1308
+ "tagName": "kai-confirm",
1309
+ "name": "KaiConfirmElement",
1310
+ "description": "",
1311
+ "members": [
1312
+ {
1313
+ "kind": "field",
1314
+ "name": "data",
1315
+ "type": {
1316
+ "text": "undefined | Record<string, unknown>"
1317
+ },
1318
+ "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.",
1319
+ "privacy": "public"
1320
+ },
1321
+ {
1322
+ "kind": "field",
1323
+ "name": "cardId",
1324
+ "type": {
1325
+ "text": "undefined | string"
1326
+ },
1327
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
1328
+ "privacy": "public"
1329
+ },
1330
+ {
1331
+ "kind": "field",
1332
+ "name": "heading",
1333
+ "type": {
1334
+ "text": "undefined | string"
1335
+ },
1336
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
1337
+ "privacy": "public"
1338
+ },
1339
+ {
1340
+ "kind": "field",
1341
+ "name": "autofocus",
1342
+ "type": {
1343
+ "text": "undefined | false | true"
1344
+ },
1345
+ "description": "Focus the default action on mount (off by default — no focus-stealing). Attribute: `autofocus`.",
1346
+ "privacy": "public"
1347
+ },
1348
+ {
1349
+ "kind": "field",
1350
+ "name": "resolution",
1351
+ "type": {
1352
+ "text": "undefined | Record<string, unknown>"
1353
+ },
1354
+ "description": "Set when the user resolved this card; renders the read-only view. Property: `el.resolution = { kind:'action', action:'…' }`.",
1355
+ "privacy": "public"
1356
+ }
1357
+ ],
1358
+ "attributes": [
1359
+ {
1360
+ "name": "theme",
1361
+ "type": {
1362
+ "text": "'light' | 'dark' | 'auto'"
1363
+ },
1364
+ "description": "Color mode (auto follows prefers-color-scheme)."
1365
+ },
1366
+ {
1367
+ "name": "card-id",
1368
+ "fieldName": "cardId",
1369
+ "type": {
1370
+ "text": "undefined | string"
1371
+ },
1372
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`."
1373
+ },
1374
+ {
1375
+ "name": "heading",
1376
+ "fieldName": "heading",
1377
+ "type": {
1378
+ "text": "undefined | string"
1379
+ },
1380
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`."
1381
+ },
1382
+ {
1383
+ "name": "autofocus",
1384
+ "fieldName": "autofocus",
1385
+ "type": {
1386
+ "text": "undefined | false | true"
1387
+ },
1388
+ "description": "Focus the default action on mount (off by default — no focus-stealing). Attribute: `autofocus`."
1389
+ }
1390
+ ],
1391
+ "events": [],
1392
+ "cssProperties": []
1393
+ },
1394
+ {
1395
+ "kind": "class",
1396
+ "customElement": true,
1397
+ "tagName": "kai-context",
1398
+ "name": "KaiContextElement",
1399
+ "description": "",
1400
+ "members": [
1401
+ {
1402
+ "kind": "field",
1403
+ "name": "context",
1404
+ "type": {
1405
+ "text": "undefined | { usedTokens: number; maxTokens: number; inputTokens?: undefined | number; outputTokens?: undefined | number; reasoningTokens?: undefined | number; cacheTokens?: undefined | number; estimatedCost?: undefined | number }"
1406
+ },
1407
+ "description": "Token-usage data. Set as a JS property.",
1408
+ "privacy": "public"
1409
+ },
1410
+ {
1411
+ "kind": "field",
1412
+ "name": "warnThreshold",
1413
+ "type": {
1414
+ "text": "undefined | number"
1415
+ },
1416
+ "description": "Fraction (0–1) above which the meter turns yellow. Defaults to `0.7` (70%).",
1417
+ "privacy": "public"
1418
+ },
1419
+ {
1420
+ "kind": "field",
1421
+ "name": "dangerThreshold",
1422
+ "type": {
1423
+ "text": "undefined | number"
1424
+ },
1425
+ "description": "Fraction (0–1) above which the meter turns red. Defaults to `0.9` (90%).",
1426
+ "privacy": "public"
1427
+ }
1428
+ ],
1429
+ "attributes": [
1430
+ {
1431
+ "name": "theme",
1432
+ "type": {
1433
+ "text": "'light' | 'dark' | 'auto'"
1434
+ },
1435
+ "description": "Color mode (auto follows prefers-color-scheme)."
1436
+ },
1437
+ {
1438
+ "name": "warn-threshold",
1439
+ "fieldName": "warnThreshold",
1440
+ "type": {
1441
+ "text": "undefined | number"
1442
+ },
1443
+ "description": "Fraction (0–1) above which the meter turns yellow. Defaults to `0.7` (70%)."
1444
+ },
1445
+ {
1446
+ "name": "danger-threshold",
1447
+ "fieldName": "dangerThreshold",
1448
+ "type": {
1449
+ "text": "undefined | number"
1450
+ },
1451
+ "description": "Fraction (0–1) above which the meter turns red. Defaults to `0.9` (90%)."
1452
+ }
1453
+ ],
1454
+ "events": [
1455
+ {
1456
+ "name": "kai-threshold-change",
1457
+ "type": {
1458
+ "text": "CustomEvent<{ level: \"ok\" | \"warn\" | \"danger\" }>"
1459
+ },
1460
+ "description": "Fires when the computed severity level changes (ok → warn → danger or back). `detail.level` is `'ok'`, `'warn'`, or `'danger'`."
1461
+ }
1462
+ ],
1463
+ "cssProperties": []
1464
+ },
1465
+ {
1466
+ "kind": "class",
1467
+ "customElement": true,
1468
+ "tagName": "kai-conversations",
1469
+ "name": "KaiConversationsElement",
1470
+ "description": "",
1471
+ "members": [
1472
+ {
1473
+ "kind": "field",
1474
+ "name": "groups",
1475
+ "type": {
1476
+ "text": "{ id: string; userId?: undefined | string; teamId?: undefined | string; name: string; sortOrder: number; createdAt: string }[]"
1477
+ },
1478
+ "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.",
1479
+ "privacy": "public"
1480
+ },
1481
+ {
1482
+ "kind": "field",
1483
+ "name": "conversations",
1484
+ "type": {
1485
+ "text": "{ 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 }[]"
1486
+ },
1487
+ "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.",
1488
+ "privacy": "public"
1489
+ },
1490
+ {
1491
+ "kind": "field",
1492
+ "name": "activeId",
1493
+ "type": {
1494
+ "text": "undefined | string"
1495
+ },
1496
+ "description": "The id of the currently-open conversation, highlighted in the list.",
1497
+ "privacy": "public"
1498
+ }
1499
+ ],
1500
+ "attributes": [
1501
+ {
1502
+ "name": "theme",
1503
+ "type": {
1504
+ "text": "'light' | 'dark' | 'auto'"
1505
+ },
1506
+ "description": "Color mode (auto follows prefers-color-scheme)."
1507
+ },
1508
+ {
1509
+ "name": "active-id",
1510
+ "fieldName": "activeId",
1511
+ "type": {
1512
+ "text": "undefined | string"
1513
+ },
1514
+ "description": "The id of the currently-open conversation, highlighted in the list."
1515
+ }
1516
+ ],
1517
+ "events": [
1518
+ {
1519
+ "name": "kai-conversation-select",
1520
+ "type": {
1521
+ "text": "CustomEvent<{ id: string }>"
1522
+ },
1523
+ "description": "A conversation was selected."
1524
+ },
1525
+ {
1526
+ "name": "kai-new-chat",
1527
+ "type": {
1528
+ "text": "CustomEvent<Record<string, never>>"
1529
+ },
1530
+ "description": "The \"New chat\" button was clicked."
1531
+ },
1532
+ {
1533
+ "name": "kai-toggle-sidebar",
1534
+ "type": {
1535
+ "text": "CustomEvent<Record<string, never>>"
1536
+ },
1537
+ "description": "The sidebar toggle was clicked."
1538
+ }
1539
+ ],
1540
+ "cssProperties": [
1541
+ {
1542
+ "name": "--color-sidebar"
1543
+ },
1544
+ {
1545
+ "name": "--color-scrollbar-thumb"
1546
+ }
1547
+ ]
1548
+ },
1549
+ {
1550
+ "kind": "class",
1551
+ "customElement": true,
1552
+ "tagName": "kai-embed",
1553
+ "name": "KaiEmbedElement",
1554
+ "description": "",
1555
+ "members": [
1556
+ {
1557
+ "kind": "field",
1558
+ "name": "cardId",
1559
+ "type": {
1560
+ "text": "undefined | string"
1561
+ },
1562
+ "description": "Stable card id correlating every emitted event. Set as an attribute or property.",
1563
+ "privacy": "public"
1564
+ },
1565
+ {
1566
+ "kind": "field",
1567
+ "name": "data",
1568
+ "type": {
1569
+ "text": "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\" }"
1570
+ },
1571
+ "description": "The embed payload (provider + id/url + options). Set as a JS **property** (object).",
1572
+ "privacy": "public"
1573
+ }
1574
+ ],
1575
+ "attributes": [
1576
+ {
1577
+ "name": "theme",
1578
+ "type": {
1579
+ "text": "'light' | 'dark' | 'auto'"
1580
+ },
1581
+ "description": "Color mode (auto follows prefers-color-scheme)."
1582
+ },
1583
+ {
1584
+ "name": "card-id",
1585
+ "fieldName": "cardId",
1586
+ "type": {
1587
+ "text": "undefined | string"
1588
+ },
1589
+ "description": "Stable card id correlating every emitted event. Set as an attribute or property."
1590
+ }
1591
+ ],
1592
+ "events": [],
1593
+ "cssProperties": []
1594
+ },
1595
+ {
1596
+ "kind": "class",
1597
+ "customElement": true,
1598
+ "tagName": "kai-empty",
1599
+ "name": "KaiEmptyElement",
1600
+ "description": "",
1601
+ "members": [
1602
+ {
1603
+ "kind": "field",
1604
+ "name": "emptyTitle",
1605
+ "type": {
1606
+ "text": "undefined | string"
1607
+ },
1608
+ "description": "Title text. Attribute: `empty-title` (`title` is a global HTML attribute).",
1609
+ "privacy": "public"
1610
+ },
1611
+ {
1612
+ "kind": "field",
1613
+ "name": "description",
1614
+ "type": {
1615
+ "text": "undefined | string"
1616
+ },
1617
+ "description": "Description text.",
1618
+ "privacy": "public"
1619
+ }
1620
+ ],
1621
+ "attributes": [
1622
+ {
1623
+ "name": "theme",
1624
+ "type": {
1625
+ "text": "'light' | 'dark' | 'auto'"
1626
+ },
1627
+ "description": "Color mode (auto follows prefers-color-scheme)."
1628
+ },
1629
+ {
1630
+ "name": "empty-title",
1631
+ "fieldName": "emptyTitle",
1632
+ "type": {
1633
+ "text": "undefined | string"
1634
+ },
1635
+ "description": "Title text. Attribute: `empty-title` (`title` is a global HTML attribute)."
1636
+ },
1637
+ {
1638
+ "name": "description",
1639
+ "fieldName": "description",
1640
+ "type": {
1641
+ "text": "undefined | string"
1642
+ },
1643
+ "description": "Description text."
1644
+ }
1645
+ ],
1646
+ "events": [],
1647
+ "cssProperties": []
1648
+ },
1649
+ {
1650
+ "kind": "class",
1651
+ "customElement": true,
1652
+ "tagName": "kai-feedback-bar",
1653
+ "name": "KaiFeedbackBarElement",
1654
+ "description": "",
1655
+ "members": [
1656
+ {
1657
+ "kind": "field",
1658
+ "name": "barTitle",
1659
+ "type": {
1660
+ "text": "undefined | string"
1661
+ },
1662
+ "description": "The banner label (e.g. \"Was this helpful?\"). Attribute: `bar-title` (`title` is avoided — it's a global HTML attribute).",
1663
+ "privacy": "public"
1664
+ },
1665
+ {
1666
+ "kind": "field",
1667
+ "name": "collectDetail",
1668
+ "type": {
1669
+ "text": "undefined | false | true"
1670
+ },
1671
+ "description": "When set, a not-helpful vote opens an optional detail form before the thank-you confirmation. Attribute: `collect-detail`.",
1672
+ "privacy": "public"
1673
+ },
1674
+ {
1675
+ "kind": "field",
1676
+ "name": "categories",
1677
+ "type": {
1678
+ "text": "undefined | string[]"
1679
+ },
1680
+ "description": "Optional category chips for the detail form. Set as a JS property (array).",
1681
+ "privacy": "public"
1682
+ },
1683
+ {
1684
+ "kind": "field",
1685
+ "name": "detailTitle",
1686
+ "type": {
1687
+ "text": "undefined | string"
1688
+ },
1689
+ "description": "Heading for the detail form. Attribute: `detail-title`.",
1690
+ "privacy": "public"
1691
+ },
1692
+ {
1693
+ "kind": "field",
1694
+ "name": "detailPlaceholder",
1695
+ "type": {
1696
+ "text": "undefined | string"
1697
+ },
1698
+ "description": "Placeholder for the detail comment box. Attribute: `detail-placeholder`.",
1699
+ "privacy": "public"
1700
+ },
1701
+ {
1702
+ "kind": "field",
1703
+ "name": "submitLabel",
1704
+ "type": {
1705
+ "text": "undefined | string"
1706
+ },
1707
+ "description": "Submit button label in the detail form. Attribute: `submit-label`.",
1708
+ "privacy": "public"
1709
+ },
1710
+ {
1711
+ "kind": "field",
1712
+ "name": "thanksMessage",
1713
+ "type": {
1714
+ "text": "undefined | string"
1715
+ },
1716
+ "description": "Confirmation copy shown after a vote/submit. Attribute: `thanks-message`.",
1717
+ "privacy": "public"
1718
+ }
1719
+ ],
1720
+ "attributes": [
1721
+ {
1722
+ "name": "theme",
1723
+ "type": {
1724
+ "text": "'light' | 'dark' | 'auto'"
1725
+ },
1726
+ "description": "Color mode (auto follows prefers-color-scheme)."
1727
+ },
1728
+ {
1729
+ "name": "bar-title",
1730
+ "fieldName": "barTitle",
1731
+ "type": {
1732
+ "text": "undefined | string"
1733
+ },
1734
+ "description": "The banner label (e.g. \"Was this helpful?\"). Attribute: `bar-title` (`title` is avoided — it's a global HTML attribute)."
1735
+ },
1736
+ {
1737
+ "name": "collect-detail",
1738
+ "fieldName": "collectDetail",
1739
+ "type": {
1740
+ "text": "undefined | false | true"
1741
+ },
1742
+ "description": "When set, a not-helpful vote opens an optional detail form before the thank-you confirmation. Attribute: `collect-detail`."
1743
+ },
1744
+ {
1745
+ "name": "detail-title",
1746
+ "fieldName": "detailTitle",
1747
+ "type": {
1748
+ "text": "undefined | string"
1749
+ },
1750
+ "description": "Heading for the detail form. Attribute: `detail-title`."
1751
+ },
1752
+ {
1753
+ "name": "detail-placeholder",
1754
+ "fieldName": "detailPlaceholder",
1755
+ "type": {
1756
+ "text": "undefined | string"
1757
+ },
1758
+ "description": "Placeholder for the detail comment box. Attribute: `detail-placeholder`."
1759
+ },
1760
+ {
1761
+ "name": "submit-label",
1762
+ "fieldName": "submitLabel",
1763
+ "type": {
1764
+ "text": "undefined | string"
1765
+ },
1766
+ "description": "Submit button label in the detail form. Attribute: `submit-label`."
1767
+ },
1768
+ {
1769
+ "name": "thanks-message",
1770
+ "fieldName": "thanksMessage",
1771
+ "type": {
1772
+ "text": "undefined | string"
1773
+ },
1774
+ "description": "Confirmation copy shown after a vote/submit. Attribute: `thanks-message`."
1775
+ }
1776
+ ],
1777
+ "events": [
1778
+ {
1779
+ "name": "kai-close",
1780
+ "type": {
1781
+ "text": "CustomEvent"
1782
+ },
1783
+ "description": "The user dismissed the banner."
1784
+ },
1785
+ {
1786
+ "name": "kai-feedback",
1787
+ "type": {
1788
+ "text": "CustomEvent<{ value: \"helpful\" | \"not-helpful\" }>"
1789
+ },
1790
+ "description": "The user rated the response. `value` is `'helpful'` or `'not-helpful'`."
1791
+ },
1792
+ {
1793
+ "name": "kai-feedback-detail",
1794
+ "type": {
1795
+ "text": "CustomEvent<{ value: \"helpful\" | \"not-helpful\"; category?: undefined | string; comment?: undefined | string }>"
1796
+ },
1797
+ "description": "The user submitted the optional detail form (`collect-detail`)."
1798
+ }
1799
+ ],
1800
+ "cssProperties": []
1801
+ },
1802
+ {
1803
+ "kind": "class",
1804
+ "customElement": true,
1805
+ "tagName": "kai-file-tree",
1806
+ "name": "KaiFileTreeElement",
1807
+ "description": "",
1808
+ "members": [
1809
+ {
1810
+ "kind": "field",
1811
+ "name": "files",
1812
+ "type": {
1813
+ "text": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]"
1814
+ },
1815
+ "description": "The files to render. Set as a JS property (array of `{ path, url?, code?, language?, type? }`).",
1816
+ "privacy": "public"
1817
+ },
1818
+ {
1819
+ "kind": "field",
1820
+ "name": "activeFile",
1821
+ "type": {
1822
+ "text": "undefined | string"
1823
+ },
1824
+ "description": "Selected file path — highlighted in the tree.",
1825
+ "privacy": "public"
1826
+ },
1827
+ {
1828
+ "kind": "field",
1829
+ "name": "defaultExpanded",
1830
+ "type": {
1831
+ "text": "undefined | string[]"
1832
+ },
1833
+ "description": "Folder paths expanded initially. Omit to start with all folders open.",
1834
+ "privacy": "public"
1835
+ }
1836
+ ],
1837
+ "attributes": [
1838
+ {
1839
+ "name": "theme",
1840
+ "type": {
1841
+ "text": "'light' | 'dark' | 'auto'"
1842
+ },
1843
+ "description": "Color mode (auto follows prefers-color-scheme)."
1844
+ },
1845
+ {
1846
+ "name": "active-file",
1847
+ "fieldName": "activeFile",
1848
+ "type": {
1849
+ "text": "undefined | string"
1850
+ },
1851
+ "description": "Selected file path — highlighted in the tree."
1852
+ }
1853
+ ],
1854
+ "events": [
1855
+ {
1856
+ "name": "kai-select",
1857
+ "type": {
1858
+ "text": "CustomEvent<{ path: string }>"
1859
+ },
1860
+ "description": "Fired when a file is selected. `detail.path` = the file's path."
1861
+ }
1862
+ ],
1863
+ "cssProperties": []
1864
+ },
1865
+ {
1866
+ "kind": "class",
1867
+ "customElement": true,
1868
+ "tagName": "kai-file-upload",
1869
+ "name": "KaiFileUploadElement",
1870
+ "description": "",
1871
+ "members": [
1872
+ {
1873
+ "kind": "field",
1874
+ "name": "multiple",
1875
+ "type": {
1876
+ "text": "undefined | false | true"
1877
+ },
1878
+ "description": "Allow selecting multiple files (default true).",
1879
+ "privacy": "public"
1880
+ },
1881
+ {
1882
+ "kind": "field",
1883
+ "name": "accept",
1884
+ "type": {
1885
+ "text": "undefined | string"
1886
+ },
1887
+ "description": "`accept` attribute for the file picker (e.g. `image/*`).",
1888
+ "privacy": "public"
1889
+ },
1890
+ {
1891
+ "kind": "field",
1892
+ "name": "disabled",
1893
+ "type": {
1894
+ "text": "undefined | false | true"
1895
+ },
1896
+ "description": "Disable the dropzone — no clicking, no drag-and-drop.",
1897
+ "privacy": "public"
1898
+ },
1899
+ {
1900
+ "kind": "field",
1901
+ "name": "label",
1902
+ "type": {
1903
+ "text": "undefined | string"
1904
+ },
1905
+ "description": "Default dropzone label (overridable via the default slot).",
1906
+ "privacy": "public"
1907
+ }
1908
+ ],
1909
+ "attributes": [
1910
+ {
1911
+ "name": "theme",
1912
+ "type": {
1913
+ "text": "'light' | 'dark' | 'auto'"
1914
+ },
1915
+ "description": "Color mode (auto follows prefers-color-scheme)."
1916
+ },
1917
+ {
1918
+ "name": "multiple",
1919
+ "fieldName": "multiple",
1920
+ "type": {
1921
+ "text": "undefined | false | true"
1922
+ },
1923
+ "description": "Allow selecting multiple files (default true)."
1924
+ },
1925
+ {
1926
+ "name": "accept",
1927
+ "fieldName": "accept",
1928
+ "type": {
1929
+ "text": "undefined | string"
1930
+ },
1931
+ "description": "`accept` attribute for the file picker (e.g. `image/*`)."
1932
+ },
1933
+ {
1934
+ "name": "disabled",
1935
+ "fieldName": "disabled",
1936
+ "type": {
1937
+ "text": "undefined | false | true"
1938
+ },
1939
+ "description": "Disable the dropzone — no clicking, no drag-and-drop."
1940
+ },
1941
+ {
1942
+ "name": "label",
1943
+ "fieldName": "label",
1944
+ "type": {
1945
+ "text": "undefined | string"
1946
+ },
1947
+ "description": "Default dropzone label (overridable via the default slot)."
1948
+ }
1949
+ ],
1950
+ "events": [
1951
+ {
1952
+ "name": "kai-files-added",
1953
+ "type": {
1954
+ "text": "CustomEvent<{ files: File[] }>"
1955
+ },
1956
+ "description": "Files were picked or dropped."
1957
+ }
1958
+ ],
1959
+ "cssProperties": []
1960
+ },
1961
+ {
1962
+ "kind": "class",
1963
+ "customElement": true,
1964
+ "tagName": "kai-form",
1965
+ "name": "KaiFormElement",
1966
+ "description": "",
1967
+ "members": [
1968
+ {
1969
+ "kind": "field",
1970
+ "name": "data",
1971
+ "type": {
1972
+ "text": "undefined | Record<string, unknown>"
1973
+ },
1974
+ "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).",
1975
+ "privacy": "public"
1976
+ },
1977
+ {
1978
+ "kind": "field",
1979
+ "name": "cardId",
1980
+ "type": {
1981
+ "text": "undefined | string"
1982
+ },
1983
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
1984
+ "privacy": "public"
1985
+ },
1986
+ {
1987
+ "kind": "field",
1988
+ "name": "heading",
1989
+ "type": {
1990
+ "text": "undefined | string"
1991
+ },
1992
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
1993
+ "privacy": "public"
1994
+ },
1995
+ {
1996
+ "kind": "field",
1997
+ "name": "resolution",
1998
+ "type": {
1999
+ "text": "undefined | Record<string, unknown>"
2000
+ },
2001
+ "description": "Set when the user resolved this card; renders the read-only view. Property: `el.resolution = { kind:'submit', data:{…} }`.",
2002
+ "privacy": "public"
2003
+ }
2004
+ ],
2005
+ "attributes": [
2006
+ {
2007
+ "name": "theme",
2008
+ "type": {
2009
+ "text": "'light' | 'dark' | 'auto'"
2010
+ },
2011
+ "description": "Color mode (auto follows prefers-color-scheme)."
2012
+ },
2013
+ {
2014
+ "name": "card-id",
2015
+ "fieldName": "cardId",
2016
+ "type": {
2017
+ "text": "undefined | string"
2018
+ },
2019
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`."
2020
+ },
2021
+ {
2022
+ "name": "heading",
2023
+ "fieldName": "heading",
2024
+ "type": {
2025
+ "text": "undefined | string"
2026
+ },
2027
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`."
2028
+ }
2029
+ ],
2030
+ "events": [],
2031
+ "cssProperties": []
2032
+ },
2033
+ {
2034
+ "kind": "class",
2035
+ "customElement": true,
2036
+ "tagName": "kai-image",
2037
+ "name": "KaiImageElement",
2038
+ "description": "",
2039
+ "members": [
2040
+ {
2041
+ "kind": "field",
2042
+ "name": "base64",
2043
+ "type": {
2044
+ "text": "undefined | string"
2045
+ },
2046
+ "description": "Base64-encoded image data (pair with `media-type`).",
2047
+ "privacy": "public"
2048
+ },
2049
+ {
2050
+ "kind": "field",
2051
+ "name": "bytes",
2052
+ "type": {
2053
+ "text": "undefined | Uint8Array<ArrayBufferLike>"
2054
+ },
2055
+ "description": "Raw image bytes (set as a JS property).",
2056
+ "privacy": "public"
2057
+ },
2058
+ {
2059
+ "kind": "field",
2060
+ "name": "alt",
2061
+ "type": {
2062
+ "text": "undefined | string"
2063
+ },
2064
+ "description": "Alt text.",
2065
+ "privacy": "public"
2066
+ },
2067
+ {
2068
+ "kind": "field",
2069
+ "name": "mediaType",
2070
+ "type": {
2071
+ "text": "undefined | string"
2072
+ },
2073
+ "description": "MIME type (default `image/png`).",
2074
+ "privacy": "public"
2075
+ }
2076
+ ],
2077
+ "attributes": [
2078
+ {
2079
+ "name": "theme",
2080
+ "type": {
2081
+ "text": "'light' | 'dark' | 'auto'"
2082
+ },
2083
+ "description": "Color mode (auto follows prefers-color-scheme)."
2084
+ },
2085
+ {
2086
+ "name": "base64",
2087
+ "fieldName": "base64",
2088
+ "type": {
2089
+ "text": "undefined | string"
2090
+ },
2091
+ "description": "Base64-encoded image data (pair with `media-type`)."
2092
+ },
2093
+ {
2094
+ "name": "alt",
2095
+ "fieldName": "alt",
2096
+ "type": {
2097
+ "text": "undefined | string"
2098
+ },
2099
+ "description": "Alt text."
2100
+ },
2101
+ {
2102
+ "name": "media-type",
2103
+ "fieldName": "mediaType",
2104
+ "type": {
2105
+ "text": "undefined | string"
2106
+ },
2107
+ "description": "MIME type (default `image/png`)."
2108
+ }
2109
+ ],
2110
+ "events": [],
2111
+ "cssProperties": []
2112
+ },
2113
+ {
2114
+ "kind": "class",
2115
+ "customElement": true,
2116
+ "tagName": "kai-link-preview",
2117
+ "name": "KaiLinkPreviewElement",
2118
+ "description": "",
2119
+ "members": [
2120
+ {
2121
+ "kind": "field",
2122
+ "name": "cardId",
2123
+ "type": {
2124
+ "text": "undefined | string"
2125
+ },
2126
+ "description": "Stable card id correlating every emitted event. Set as an attribute or property.",
2127
+ "privacy": "public"
2128
+ },
2129
+ {
2130
+ "kind": "field",
2131
+ "name": "data",
2132
+ "type": {
2133
+ "text": "undefined | { url: string; title?: undefined | string; description?: undefined | string; image?: undefined | string; imageAlt?: undefined | string; favicon?: undefined | string; domain?: undefined | string; siteName?: undefined | string }"
2134
+ },
2135
+ "description": "The link payload (OG metadata). Set as a JS **property** (object).",
2136
+ "privacy": "public"
2137
+ }
2138
+ ],
2139
+ "attributes": [
2140
+ {
2141
+ "name": "theme",
2142
+ "type": {
2143
+ "text": "'light' | 'dark' | 'auto'"
2144
+ },
2145
+ "description": "Color mode (auto follows prefers-color-scheme)."
2146
+ },
2147
+ {
2148
+ "name": "card-id",
2149
+ "fieldName": "cardId",
2150
+ "type": {
2151
+ "text": "undefined | string"
2152
+ },
2153
+ "description": "Stable card id correlating every emitted event. Set as an attribute or property."
2154
+ }
2155
+ ],
2156
+ "events": [],
2157
+ "cssProperties": []
2158
+ },
2159
+ {
2160
+ "kind": "class",
2161
+ "customElement": true,
2162
+ "tagName": "kai-loader",
2163
+ "name": "KaiLoaderElement",
2164
+ "description": "",
2165
+ "members": [
2166
+ {
2167
+ "kind": "field",
2168
+ "name": "variant",
2169
+ "type": {
2170
+ "text": "undefined | \"circular\" | \"classic\" | \"pulse\" | \"pulse-dot\" | \"dots\" | \"typing\" | \"wave\" | \"bars\" | \"terminal\" | \"text-blink\" | \"text-shimmer\" | \"loading-dots\""
2171
+ },
2172
+ "description": "The animation style: `'circular' | 'classic' | 'pulse' | 'pulse-dot' | 'dots' | 'typing' | 'wave' | 'bars' | 'terminal' | 'text-blink' | 'text-shimmer' | 'loading-dots'`. Defaults to `'circular'`.",
2173
+ "privacy": "public"
2174
+ },
2175
+ {
2176
+ "kind": "field",
2177
+ "name": "size",
2178
+ "type": {
2179
+ "text": "undefined | \"sm\" | \"lg\" | \"md\""
2180
+ },
2181
+ "description": "Loader size: `'sm' | 'md' | 'lg'`. Defaults to `'md'`.",
2182
+ "privacy": "public"
2183
+ },
2184
+ {
2185
+ "kind": "field",
2186
+ "name": "text",
2187
+ "type": {
2188
+ "text": "undefined | string"
2189
+ },
2190
+ "description": "Label for the text-based variants.",
2191
+ "privacy": "public"
2192
+ }
2193
+ ],
2194
+ "attributes": [
2195
+ {
2196
+ "name": "theme",
2197
+ "type": {
2198
+ "text": "'light' | 'dark' | 'auto'"
2199
+ },
2200
+ "description": "Color mode (auto follows prefers-color-scheme)."
2201
+ },
2202
+ {
2203
+ "name": "variant",
2204
+ "fieldName": "variant",
2205
+ "type": {
2206
+ "text": "undefined | \"circular\" | \"classic\" | \"pulse\" | \"pulse-dot\" | \"dots\" | \"typing\" | \"wave\" | \"bars\" | \"terminal\" | \"text-blink\" | \"text-shimmer\" | \"loading-dots\""
2207
+ },
2208
+ "description": "The animation style: `'circular' | 'classic' | 'pulse' | 'pulse-dot' | 'dots' | 'typing' | 'wave' | 'bars' | 'terminal' | 'text-blink' | 'text-shimmer' | 'loading-dots'`. Defaults to `'circular'`."
2209
+ },
2210
+ {
2211
+ "name": "size",
2212
+ "fieldName": "size",
2213
+ "type": {
2214
+ "text": "undefined | \"sm\" | \"lg\" | \"md\""
2215
+ },
2216
+ "description": "Loader size: `'sm' | 'md' | 'lg'`. Defaults to `'md'`."
2217
+ },
2218
+ {
2219
+ "name": "text",
2220
+ "fieldName": "text",
2221
+ "type": {
2222
+ "text": "undefined | string"
2223
+ },
2224
+ "description": "Label for the text-based variants."
2225
+ }
2226
+ ],
2227
+ "events": [],
2228
+ "cssProperties": []
2229
+ },
2230
+ {
2231
+ "kind": "class",
2232
+ "customElement": true,
2233
+ "tagName": "kai-markdown",
2234
+ "name": "KaiMarkdownElement",
2235
+ "description": "",
2236
+ "members": [
2237
+ {
2238
+ "kind": "field",
2239
+ "name": "content",
2240
+ "type": {
2241
+ "text": "string"
2242
+ },
2243
+ "description": "The markdown source to render.",
2244
+ "privacy": "public"
2245
+ },
2246
+ {
2247
+ "kind": "field",
2248
+ "name": "proseSize",
2249
+ "type": {
2250
+ "text": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
2251
+ },
2252
+ "description": "Text/markdown sizing.",
2253
+ "privacy": "public"
2254
+ },
2255
+ {
2256
+ "kind": "field",
2257
+ "name": "codeTheme",
2258
+ "type": {
2259
+ "text": "undefined | string"
2260
+ },
2261
+ "description": "Shiki theme for fenced code blocks.",
2262
+ "privacy": "public"
2263
+ },
2264
+ {
2265
+ "kind": "field",
2266
+ "name": "codeHighlight",
2267
+ "type": {
2268
+ "text": "undefined | false | true"
2269
+ },
2270
+ "description": "Disable syntax highlighting (no Shiki loads).",
2271
+ "privacy": "public"
2272
+ }
2273
+ ],
2274
+ "attributes": [
2275
+ {
2276
+ "name": "theme",
2277
+ "type": {
2278
+ "text": "'light' | 'dark' | 'auto'"
2279
+ },
2280
+ "description": "Color mode (auto follows prefers-color-scheme)."
2281
+ },
2282
+ {
2283
+ "name": "content",
2284
+ "fieldName": "content",
2285
+ "type": {
2286
+ "text": "string"
2287
+ },
2288
+ "description": "The markdown source to render."
2289
+ },
2290
+ {
2291
+ "name": "prose-size",
2292
+ "fieldName": "proseSize",
2293
+ "type": {
2294
+ "text": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
2295
+ },
2296
+ "description": "Text/markdown sizing."
2297
+ },
2298
+ {
2299
+ "name": "code-theme",
2300
+ "fieldName": "codeTheme",
2301
+ "type": {
2302
+ "text": "undefined | string"
2303
+ },
2304
+ "description": "Shiki theme for fenced code blocks."
2305
+ },
2306
+ {
2307
+ "name": "code-highlight",
2308
+ "fieldName": "codeHighlight",
2309
+ "type": {
2310
+ "text": "undefined | false | true"
2311
+ },
2312
+ "description": "Disable syntax highlighting (no Shiki loads)."
2313
+ }
2314
+ ],
2315
+ "events": [],
2316
+ "cssProperties": []
2317
+ },
2318
+ {
2319
+ "kind": "class",
2320
+ "customElement": true,
2321
+ "tagName": "kai-message",
2322
+ "name": "KaiMessageElement",
2323
+ "description": "",
2324
+ "members": [
2325
+ {
2326
+ "kind": "field",
2327
+ "name": "message",
2328
+ "type": {
2329
+ "text": "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 } }"
2330
+ },
2331
+ "description": "The full message object. Set as a JS property.",
2332
+ "privacy": "public"
2333
+ },
2334
+ {
2335
+ "kind": "field",
2336
+ "name": "role",
2337
+ "type": {
2338
+ "text": "undefined | \"user\" | \"assistant\""
2339
+ },
2340
+ "description": "Convenience for simple cases when not passing a `message` object.",
2341
+ "privacy": "public"
2342
+ },
2343
+ {
2344
+ "kind": "field",
2345
+ "name": "content",
2346
+ "type": {
2347
+ "text": "undefined | string"
2348
+ },
2349
+ "description": "Convenience content (used when `message` is not set).",
2350
+ "privacy": "public"
2351
+ },
2352
+ {
2353
+ "kind": "field",
2354
+ "name": "markdown",
2355
+ "type": {
2356
+ "text": "undefined | false | true"
2357
+ },
2358
+ "description": "Force markdown on/off. Defaults to on for assistant, off for user.",
2359
+ "privacy": "public"
2360
+ },
2361
+ {
2362
+ "kind": "field",
2363
+ "name": "proseSize",
2364
+ "type": {
2365
+ "text": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
2366
+ },
2367
+ "description": "Text/markdown sizing for the message body.",
2368
+ "privacy": "public"
2369
+ },
2370
+ {
2371
+ "kind": "field",
2372
+ "name": "codeTheme",
2373
+ "type": {
2374
+ "text": "undefined | string"
2375
+ },
2376
+ "description": "Shiki theme name used for fenced code blocks in the content.",
2377
+ "privacy": "public"
2378
+ },
2379
+ {
2380
+ "kind": "field",
2381
+ "name": "codeHighlight",
2382
+ "type": {
2383
+ "text": "undefined | false | true"
2384
+ },
2385
+ "description": "Disable syntax highlighting for code blocks (no Shiki loads).",
2386
+ "privacy": "public"
2387
+ },
2388
+ {
2389
+ "kind": "field",
2390
+ "name": "actionsReveal",
2391
+ "type": {
2392
+ "text": "undefined | \"always\" | \"hover\""
2393
+ },
2394
+ "description": "Whether the action bar is always visible (`'always'`, default) or only revealed on hover of the message row (`'hover'`).",
2395
+ "privacy": "public"
2396
+ },
2397
+ {
2398
+ "kind": "field",
2399
+ "name": "avatarSrc",
2400
+ "type": {
2401
+ "text": "undefined | string"
2402
+ },
2403
+ "description": "Convenience avatar image URL (used when `message.avatar` is not set).",
2404
+ "privacy": "public"
2405
+ },
2406
+ {
2407
+ "kind": "field",
2408
+ "name": "avatarFallback",
2409
+ "type": {
2410
+ "text": "undefined | string"
2411
+ },
2412
+ "description": "Convenience avatar fallback text (used when `message.avatar` is not set).",
2413
+ "privacy": "public"
2414
+ }
2415
+ ],
2416
+ "attributes": [
2417
+ {
2418
+ "name": "theme",
2419
+ "type": {
2420
+ "text": "'light' | 'dark' | 'auto'"
2421
+ },
2422
+ "description": "Color mode (auto follows prefers-color-scheme)."
2423
+ },
2424
+ {
2425
+ "name": "role",
2426
+ "fieldName": "role",
2427
+ "type": {
2428
+ "text": "undefined | \"user\" | \"assistant\""
2429
+ },
2430
+ "description": "Convenience for simple cases when not passing a `message` object."
2431
+ },
2432
+ {
2433
+ "name": "content",
2434
+ "fieldName": "content",
2435
+ "type": {
2436
+ "text": "undefined | string"
2437
+ },
2438
+ "description": "Convenience content (used when `message` is not set)."
2439
+ },
2440
+ {
2441
+ "name": "markdown",
2442
+ "fieldName": "markdown",
2443
+ "type": {
2444
+ "text": "undefined | false | true"
2445
+ },
2446
+ "description": "Force markdown on/off. Defaults to on for assistant, off for user."
2447
+ },
2448
+ {
2449
+ "name": "prose-size",
2450
+ "fieldName": "proseSize",
2451
+ "type": {
2452
+ "text": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
2453
+ },
2454
+ "description": "Text/markdown sizing for the message body."
2455
+ },
2456
+ {
2457
+ "name": "code-theme",
2458
+ "fieldName": "codeTheme",
2459
+ "type": {
2460
+ "text": "undefined | string"
2461
+ },
2462
+ "description": "Shiki theme name used for fenced code blocks in the content."
2463
+ },
2464
+ {
2465
+ "name": "code-highlight",
2466
+ "fieldName": "codeHighlight",
2467
+ "type": {
2468
+ "text": "undefined | false | true"
2469
+ },
2470
+ "description": "Disable syntax highlighting for code blocks (no Shiki loads)."
2471
+ },
2472
+ {
2473
+ "name": "actions-reveal",
2474
+ "fieldName": "actionsReveal",
2475
+ "type": {
2476
+ "text": "undefined | \"always\" | \"hover\""
2477
+ },
2478
+ "description": "Whether the action bar is always visible (`'always'`, default) or only revealed on hover of the message row (`'hover'`)."
2479
+ },
2480
+ {
2481
+ "name": "avatar-src",
2482
+ "fieldName": "avatarSrc",
2483
+ "type": {
2484
+ "text": "undefined | string"
2485
+ },
2486
+ "description": "Convenience avatar image URL (used when `message.avatar` is not set)."
2487
+ },
2488
+ {
2489
+ "name": "avatar-fallback",
2490
+ "fieldName": "avatarFallback",
2491
+ "type": {
2492
+ "text": "undefined | string"
2493
+ },
2494
+ "description": "Convenience avatar fallback text (used when `message.avatar` is not set)."
2495
+ }
2496
+ ],
2497
+ "events": [
2498
+ {
2499
+ "name": "kai-message-action",
2500
+ "type": {
2501
+ "text": "CustomEvent<{ messageId: string; action: string }>"
2502
+ },
2503
+ "description": "An action button was clicked. `action` is the built-in name or custom id."
2504
+ }
2505
+ ],
2506
+ "cssProperties": []
2507
+ },
2508
+ {
2509
+ "kind": "class",
2510
+ "customElement": true,
2511
+ "tagName": "kai-model-switcher",
2512
+ "name": "KaiModelSwitcherElement",
2513
+ "description": "",
2514
+ "members": [
2515
+ {
2516
+ "kind": "field",
2517
+ "name": "models",
2518
+ "type": {
2519
+ "text": "{ id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]"
2520
+ },
2521
+ "description": "The selectable models. Set as a JS property (array).",
2522
+ "privacy": "public"
2523
+ },
2524
+ {
2525
+ "kind": "field",
2526
+ "name": "currentModel",
2527
+ "type": {
2528
+ "text": "undefined | string"
2529
+ },
2530
+ "description": "The currently-selected model id. Defaults to the first model.",
2531
+ "privacy": "public"
2532
+ }
2533
+ ],
2534
+ "attributes": [
2535
+ {
2536
+ "name": "theme",
2537
+ "type": {
2538
+ "text": "'light' | 'dark' | 'auto'"
2539
+ },
2540
+ "description": "Color mode (auto follows prefers-color-scheme)."
2541
+ },
2542
+ {
2543
+ "name": "current-model",
2544
+ "fieldName": "currentModel",
2545
+ "type": {
2546
+ "text": "undefined | string"
2547
+ },
2548
+ "description": "The currently-selected model id. Defaults to the first model."
2549
+ }
2550
+ ],
2551
+ "events": [
2552
+ {
2553
+ "name": "kai-model-change",
2554
+ "type": {
2555
+ "text": "CustomEvent<{ modelId: string }>"
2556
+ },
2557
+ "description": "A model was selected."
2558
+ }
2559
+ ],
2560
+ "cssProperties": []
2561
+ },
2562
+ {
2563
+ "kind": "class",
2564
+ "customElement": true,
2565
+ "tagName": "kai-popover",
2566
+ "name": "KaiPopoverElement",
2567
+ "description": "",
2568
+ "members": [
2569
+ {
2570
+ "kind": "field",
2571
+ "name": "placement",
2572
+ "type": {
2573
+ "text": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\" | \"top-start\" | \"top-end\" | \"right-start\" | \"right-end\" | \"bottom-start\" | \"bottom-end\" | \"left-start\" | \"left-end\""
2574
+ },
2575
+ "description": "Floating placement relative to the trigger (floating-ui placement).",
2576
+ "privacy": "public"
2577
+ },
2578
+ {
2579
+ "kind": "field",
2580
+ "name": "gutter",
2581
+ "type": {
2582
+ "text": "undefined | number"
2583
+ },
2584
+ "description": "Gap in px between the trigger and the panel.",
2585
+ "privacy": "public"
2586
+ },
2587
+ {
2588
+ "kind": "field",
2589
+ "name": "open",
2590
+ "type": {
2591
+ "text": "undefined | false | true"
2592
+ },
2593
+ "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.",
2594
+ "privacy": "public"
2595
+ }
2596
+ ],
2597
+ "attributes": [
2598
+ {
2599
+ "name": "theme",
2600
+ "type": {
2601
+ "text": "'light' | 'dark' | 'auto'"
2602
+ },
2603
+ "description": "Color mode (auto follows prefers-color-scheme)."
2604
+ },
2605
+ {
2606
+ "name": "placement",
2607
+ "fieldName": "placement",
2608
+ "type": {
2609
+ "text": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\" | \"top-start\" | \"top-end\" | \"right-start\" | \"right-end\" | \"bottom-start\" | \"bottom-end\" | \"left-start\" | \"left-end\""
2610
+ },
2611
+ "description": "Floating placement relative to the trigger (floating-ui placement)."
2612
+ },
2613
+ {
2614
+ "name": "gutter",
2615
+ "fieldName": "gutter",
2616
+ "type": {
2617
+ "text": "undefined | number"
2618
+ },
2619
+ "description": "Gap in px between the trigger and the panel."
2620
+ },
2621
+ {
2622
+ "name": "open",
2623
+ "fieldName": "open",
2624
+ "type": {
2625
+ "text": "undefined | false | true"
2626
+ },
2627
+ "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."
2628
+ }
2629
+ ],
2630
+ "events": [
2631
+ {
2632
+ "name": "kai-open-change",
2633
+ "type": {
2634
+ "text": "CustomEvent<{ open: false | true }>"
2635
+ },
2636
+ "description": "The popover wants to open or close (click, Escape, or outside-click)."
2637
+ }
2638
+ ],
2639
+ "cssProperties": []
2640
+ },
2641
+ {
2642
+ "kind": "class",
2643
+ "customElement": true,
2644
+ "tagName": "kai-prompt-input",
2645
+ "name": "KaiPromptInputElement",
2646
+ "description": "",
2647
+ "members": [
2648
+ {
2649
+ "kind": "field",
2650
+ "name": "value",
2651
+ "type": {
2652
+ "text": "undefined | string"
2653
+ },
2654
+ "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.",
2655
+ "privacy": "public"
2656
+ },
2657
+ {
2658
+ "kind": "field",
2659
+ "name": "placeholder",
2660
+ "type": {
2661
+ "text": "undefined | string"
2662
+ },
2663
+ "description": "Placeholder text shown in the empty input.",
2664
+ "privacy": "public"
2665
+ },
2666
+ {
2667
+ "kind": "field",
2668
+ "name": "disabled",
2669
+ "type": {
2670
+ "text": "undefined | false | true"
2671
+ },
2672
+ "description": "Disable the input and submit button entirely (non-interactive).",
2673
+ "privacy": "public"
2674
+ },
2675
+ {
2676
+ "kind": "field",
2677
+ "name": "loading",
2678
+ "type": {
2679
+ "text": "undefined | false | true"
2680
+ },
2681
+ "description": "Show the loading/streaming state and block submit (use while awaiting a reply).",
2682
+ "privacy": "public"
2683
+ },
2684
+ {
2685
+ "kind": "field",
2686
+ "name": "suggestions",
2687
+ "type": {
2688
+ "text": "undefined | string[]"
2689
+ },
2690
+ "description": "Starter prompts shown above the input. Clicking one follows `suggestionMode`. Set as a JS property.",
2691
+ "privacy": "public"
2692
+ },
2693
+ {
2694
+ "kind": "field",
2695
+ "name": "suggestionMode",
2696
+ "type": {
2697
+ "text": "undefined | \"submit\" | \"fill\""
2698
+ },
2699
+ "description": "What clicking a suggestion does: `'submit'` (default) sends it immediately as if typed and submitted; `'fill'` just places it in the input.",
2700
+ "privacy": "public"
2701
+ },
2702
+ {
2703
+ "kind": "field",
2704
+ "name": "slashCommands",
2705
+ "type": {
2706
+ "text": "undefined | { id: string; label: string; description?: undefined | string; category?: undefined | string }[]"
2707
+ },
2708
+ "description": "Slash commands — when set, typing `/` opens the command palette. Set as a JS property.",
2709
+ "privacy": "public"
2710
+ },
2711
+ {
2712
+ "kind": "field",
2713
+ "name": "slashActiveIds",
2714
+ "type": {
2715
+ "text": "undefined | string[]"
2716
+ },
2717
+ "description": "Command ids to highlight as active.",
2718
+ "privacy": "public"
2719
+ },
2720
+ {
2721
+ "kind": "field",
2722
+ "name": "slashCompact",
2723
+ "type": {
2724
+ "text": "undefined | false | true"
2725
+ },
2726
+ "description": "Single-line palette rows.",
2727
+ "privacy": "public"
2728
+ },
2729
+ {
2730
+ "kind": "field",
2731
+ "name": "search",
2732
+ "type": {
2733
+ "text": "undefined | false | true"
2734
+ },
2735
+ "description": "Show a Search (Globe) button in the left toolbar; clicking it fires a `search` event.",
2736
+ "privacy": "public"
2737
+ },
2738
+ {
2739
+ "kind": "field",
2740
+ "name": "voice",
2741
+ "type": {
2742
+ "text": "undefined | false | true"
2743
+ },
2744
+ "description": "Show a Voice (Mic) button in the left toolbar; clicking it fires a `voice` event.",
2745
+ "privacy": "public"
2746
+ },
2747
+ {
2748
+ "kind": "field",
2749
+ "name": "stoppable",
2750
+ "type": {
2751
+ "text": "undefined | false | true"
2752
+ },
2753
+ "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`.",
2754
+ "privacy": "public"
2755
+ },
2756
+ {
2757
+ "kind": "field",
2758
+ "name": "attachments",
2759
+ "type": {
2760
+ "text": "undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]"
2761
+ },
2762
+ "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).",
2763
+ "privacy": "public"
2764
+ }
2765
+ ],
2766
+ "attributes": [
2767
+ {
2768
+ "name": "theme",
2769
+ "type": {
2770
+ "text": "'light' | 'dark' | 'auto'"
2771
+ },
2772
+ "description": "Color mode (auto follows prefers-color-scheme)."
2773
+ },
2774
+ {
2775
+ "name": "value",
2776
+ "fieldName": "value",
2777
+ "type": {
2778
+ "text": "undefined | string"
2779
+ },
2780
+ "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."
2781
+ },
2782
+ {
2783
+ "name": "placeholder",
2784
+ "fieldName": "placeholder",
2785
+ "type": {
2786
+ "text": "undefined | string"
2787
+ },
2788
+ "description": "Placeholder text shown in the empty input."
2789
+ },
2790
+ {
2791
+ "name": "disabled",
2792
+ "fieldName": "disabled",
2793
+ "type": {
2794
+ "text": "undefined | false | true"
2795
+ },
2796
+ "description": "Disable the input and submit button entirely (non-interactive)."
2797
+ },
2798
+ {
2799
+ "name": "loading",
2800
+ "fieldName": "loading",
2801
+ "type": {
2802
+ "text": "undefined | false | true"
2803
+ },
2804
+ "description": "Show the loading/streaming state and block submit (use while awaiting a reply)."
2805
+ },
2806
+ {
2807
+ "name": "suggestion-mode",
2808
+ "fieldName": "suggestionMode",
2809
+ "type": {
2810
+ "text": "undefined | \"submit\" | \"fill\""
2811
+ },
2812
+ "description": "What clicking a suggestion does: `'submit'` (default) sends it immediately as if typed and submitted; `'fill'` just places it in the input."
2813
+ },
2814
+ {
2815
+ "name": "slash-compact",
2816
+ "fieldName": "slashCompact",
2817
+ "type": {
2818
+ "text": "undefined | false | true"
2819
+ },
2820
+ "description": "Single-line palette rows."
2821
+ },
2822
+ {
2823
+ "name": "search",
2824
+ "fieldName": "search",
2825
+ "type": {
2826
+ "text": "undefined | false | true"
2827
+ },
2828
+ "description": "Show a Search (Globe) button in the left toolbar; clicking it fires a `search` event."
2829
+ },
2830
+ {
2831
+ "name": "voice",
2832
+ "fieldName": "voice",
2833
+ "type": {
2834
+ "text": "undefined | false | true"
2835
+ },
2836
+ "description": "Show a Voice (Mic) button in the left toolbar; clicking it fires a `voice` event."
2837
+ },
2838
+ {
2839
+ "name": "stoppable",
2840
+ "fieldName": "stoppable",
2841
+ "type": {
2842
+ "text": "undefined | false | true"
2843
+ },
2844
+ "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`."
2845
+ }
2846
+ ],
2847
+ "events": [
2848
+ {
2849
+ "name": "kai-search",
2850
+ "type": {
2851
+ "text": "CustomEvent<Record<string, never>>"
2852
+ },
2853
+ "description": "The Search (Globe) toolbar button was clicked."
2854
+ },
2855
+ {
2856
+ "name": "kai-slash-select",
2857
+ "type": {
2858
+ "text": "CustomEvent<{ command: { id: string; label: string; description?: undefined | string; category?: undefined | string } }>"
2859
+ },
2860
+ "description": "A slash command was chosen from the palette."
2861
+ },
2862
+ {
2863
+ "name": "kai-stop",
2864
+ "type": {
2865
+ "text": "CustomEvent<Record<string, never>>"
2866
+ },
2867
+ "description": "The Stop button was clicked while `stoppable` and `loading` are both true."
2868
+ },
2869
+ {
2870
+ "name": "kai-submit",
2871
+ "type": {
2872
+ "text": "CustomEvent<{ value: string; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }>"
2873
+ },
2874
+ "description": "The user submitted the prompt (Enter or send button) with its attachments."
2875
+ },
2876
+ {
2877
+ "name": "kai-suggestion-click",
2878
+ "type": {
2879
+ "text": "CustomEvent<{ value: string }>"
2880
+ },
2881
+ "description": "A suggestion was clicked while `suggestion-mode=\"fill\"`."
2882
+ },
2883
+ {
2884
+ "name": "kai-toolbar-action",
2885
+ "type": {
2886
+ "text": "CustomEvent<{ action: string }>"
2887
+ },
2888
+ "description": "A custom `<kai-action>` toolbar button was clicked. `action` is the `id` of the `<kai-action>` element that was clicked."
2889
+ },
2890
+ {
2891
+ "name": "kai-value-change",
2892
+ "type": {
2893
+ "text": "CustomEvent<{ value: string }>"
2894
+ },
2895
+ "description": "The input text changed (fires on every keystroke)."
2896
+ },
2897
+ {
2898
+ "name": "kai-voice",
2899
+ "type": {
2900
+ "text": "CustomEvent<Record<string, never>>"
2901
+ },
2902
+ "description": "The Voice (Mic) toolbar button was clicked."
2903
+ }
2904
+ ],
2905
+ "cssProperties": []
2906
+ },
2907
+ {
2908
+ "kind": "class",
2909
+ "customElement": true,
2910
+ "tagName": "kai-reasoning",
2911
+ "name": "KaiReasoningElement",
2912
+ "description": "",
2913
+ "members": [
2914
+ {
2915
+ "kind": "field",
2916
+ "name": "text",
2917
+ "type": {
2918
+ "text": "string"
2919
+ },
2920
+ "description": "The reasoning text to display.",
2921
+ "privacy": "public"
2922
+ },
2923
+ {
2924
+ "kind": "field",
2925
+ "name": "label",
2926
+ "type": {
2927
+ "text": "undefined | string"
2928
+ },
2929
+ "description": "Trigger label.",
2930
+ "privacy": "public"
2931
+ },
2932
+ {
2933
+ "kind": "field",
2934
+ "name": "open",
2935
+ "type": {
2936
+ "text": "undefined | false | true"
2937
+ },
2938
+ "description": "Controlled open state — set as a property (`el.open = true`). Omit for uncontrolled (the trigger toggles it).",
2939
+ "privacy": "public"
2940
+ },
2941
+ {
2942
+ "kind": "field",
2943
+ "name": "streaming",
2944
+ "type": {
2945
+ "text": "undefined | false | true"
2946
+ },
2947
+ "description": "While true, auto-expands (and re-collapses when it flips false).",
2948
+ "privacy": "public"
2949
+ },
2950
+ {
2951
+ "kind": "field",
2952
+ "name": "markdown",
2953
+ "type": {
2954
+ "text": "undefined | false | true"
2955
+ },
2956
+ "description": "Render `text` as markdown.",
2957
+ "privacy": "public"
2958
+ }
2959
+ ],
2960
+ "attributes": [
2961
+ {
2962
+ "name": "theme",
2963
+ "type": {
2964
+ "text": "'light' | 'dark' | 'auto'"
2965
+ },
2966
+ "description": "Color mode (auto follows prefers-color-scheme)."
2967
+ },
2968
+ {
2969
+ "name": "text",
2970
+ "fieldName": "text",
2971
+ "type": {
2972
+ "text": "string"
2973
+ },
2974
+ "description": "The reasoning text to display."
2975
+ },
2976
+ {
2977
+ "name": "label",
2978
+ "fieldName": "label",
2979
+ "type": {
2980
+ "text": "undefined | string"
2981
+ },
2982
+ "description": "Trigger label."
2983
+ },
2984
+ {
2985
+ "name": "open",
2986
+ "fieldName": "open",
2987
+ "type": {
2988
+ "text": "undefined | false | true"
2989
+ },
2990
+ "description": "Controlled open state — set as a property (`el.open = true`). Omit for uncontrolled (the trigger toggles it)."
2991
+ },
2992
+ {
2993
+ "name": "streaming",
2994
+ "fieldName": "streaming",
2995
+ "type": {
2996
+ "text": "undefined | false | true"
2997
+ },
2998
+ "description": "While true, auto-expands (and re-collapses when it flips false)."
2999
+ },
3000
+ {
3001
+ "name": "markdown",
3002
+ "fieldName": "markdown",
3003
+ "type": {
3004
+ "text": "undefined | false | true"
3005
+ },
3006
+ "description": "Render `text` as markdown."
3007
+ }
3008
+ ],
3009
+ "events": [
3010
+ {
3011
+ "name": "kai-open-change",
3012
+ "type": {
3013
+ "text": "CustomEvent<{ open: false | true }>"
3014
+ },
3015
+ "description": "Open state changed (via the trigger or streaming auto-open)."
3016
+ }
3017
+ ],
3018
+ "cssProperties": []
3019
+ },
3020
+ {
3021
+ "kind": "class",
3022
+ "customElement": true,
3023
+ "tagName": "kai-remote",
3024
+ "name": "KaiRemoteElement",
3025
+ "description": "",
3026
+ "members": [
3027
+ {
3028
+ "kind": "field",
3029
+ "name": "src",
3030
+ "type": {
3031
+ "text": "undefined | string"
3032
+ },
3033
+ "description": "The remote card URL. Attribute: `src`.",
3034
+ "privacy": "public"
3035
+ },
3036
+ {
3037
+ "kind": "field",
3038
+ "name": "providerOrigin",
3039
+ "type": {
3040
+ "text": "undefined | string"
3041
+ },
3042
+ "description": "Exact provider origin (https: or http://localhost for dev). Attribute: `provider-origin`.",
3043
+ "privacy": "public"
3044
+ },
3045
+ {
3046
+ "kind": "field",
3047
+ "name": "envelope",
3048
+ "type": {
3049
+ "text": "undefined | Record<string, unknown>"
3050
+ },
3051
+ "description": "The card envelope to render. JS property only.",
3052
+ "privacy": "public"
3053
+ },
3054
+ {
3055
+ "kind": "field",
3056
+ "name": "policy",
3057
+ "type": {
3058
+ "text": "undefined | Record<string, unknown>"
3059
+ },
3060
+ "description": "Optional routing policy. JS property only.",
3061
+ "privacy": "public"
3062
+ }
3063
+ ],
3064
+ "attributes": [
3065
+ {
3066
+ "name": "theme",
3067
+ "type": {
3068
+ "text": "'light' | 'dark' | 'auto'"
3069
+ },
3070
+ "description": "Color mode (auto follows prefers-color-scheme)."
3071
+ },
3072
+ {
3073
+ "name": "src",
3074
+ "fieldName": "src",
3075
+ "type": {
3076
+ "text": "undefined | string"
3077
+ },
3078
+ "description": "The remote card URL. Attribute: `src`."
3079
+ },
3080
+ {
3081
+ "name": "provider-origin",
3082
+ "fieldName": "providerOrigin",
3083
+ "type": {
3084
+ "text": "undefined | string"
3085
+ },
3086
+ "description": "Exact provider origin (https: or http://localhost for dev). Attribute: `provider-origin`."
3087
+ }
3088
+ ],
3089
+ "events": [],
3090
+ "cssProperties": []
3091
+ },
3092
+ {
3093
+ "kind": "class",
3094
+ "customElement": true,
3095
+ "tagName": "kai-resizable",
3096
+ "name": "KaiResizableElement",
3097
+ "description": "",
3098
+ "members": [
3099
+ {
3100
+ "kind": "field",
3101
+ "name": "orientation",
3102
+ "type": {
3103
+ "text": "undefined | \"horizontal\" | \"vertical\""
3104
+ },
3105
+ "description": "Layout axis: `horizontal` (row, default) or `vertical` (column).",
3106
+ "privacy": "public"
3107
+ },
3108
+ {
3109
+ "kind": "field",
3110
+ "name": "maximizedIndex",
3111
+ "type": {
3112
+ "text": "undefined | null | number"
3113
+ },
3114
+ "description": "Which item index is maximized (null = none). Declarative source of truth.",
3115
+ "privacy": "public"
3116
+ }
3117
+ ],
3118
+ "attributes": [
3119
+ {
3120
+ "name": "theme",
3121
+ "type": {
3122
+ "text": "'light' | 'dark' | 'auto'"
3123
+ },
3124
+ "description": "Color mode (auto follows prefers-color-scheme)."
3125
+ },
3126
+ {
3127
+ "name": "orientation",
3128
+ "fieldName": "orientation",
3129
+ "type": {
3130
+ "text": "undefined | \"horizontal\" | \"vertical\""
3131
+ },
3132
+ "description": "Layout axis: `horizontal` (row, default) or `vertical` (column)."
3133
+ }
3134
+ ],
3135
+ "events": [
3136
+ {
3137
+ "name": "kai-change",
3138
+ "type": {
3139
+ "text": "CustomEvent<{ sizes: number[] }>"
3140
+ },
3141
+ "description": "Fired on drag-end / keyboard resize / visibility change. `detail.sizes` = panel sizes in percent."
3142
+ },
3143
+ {
3144
+ "name": "kai-maximize-change",
3145
+ "type": {
3146
+ "text": "CustomEvent<{ maximized: false | true; index: null | number }>"
3147
+ },
3148
+ "description": "Observe layout maximize state."
3149
+ }
3150
+ ],
3151
+ "cssProperties": []
3152
+ },
3153
+ {
3154
+ "kind": "class",
3155
+ "customElement": true,
3156
+ "tagName": "kai-resizable-item",
3157
+ "name": "KaiResizableItemElement",
3158
+ "description": "",
3159
+ "members": [
3160
+ {
3161
+ "kind": "field",
3162
+ "name": "size",
3163
+ "type": {
3164
+ "text": "undefined | string"
3165
+ },
3166
+ "description": "Initial main-axis size: `\"280px\"` (fixed) or `\"25%\"`/`25` (percent). Omitted → flexible.",
3167
+ "privacy": "public"
3168
+ },
3169
+ {
3170
+ "kind": "field",
3171
+ "name": "min",
3172
+ "type": {
3173
+ "text": "undefined | string"
3174
+ },
3175
+ "description": "Minimum size during resize (px or %).",
3176
+ "privacy": "public"
3177
+ },
3178
+ {
3179
+ "kind": "field",
3180
+ "name": "max",
3181
+ "type": {
3182
+ "text": "undefined | string"
3183
+ },
3184
+ "description": "Maximum size during resize (px or %).",
3185
+ "privacy": "public"
3186
+ },
3187
+ {
3188
+ "kind": "field",
3189
+ "name": "locked",
3190
+ "type": {
3191
+ "text": "undefined | false | true"
3192
+ },
3193
+ "description": "Fix this panel's size; adjacent dividers become non-draggable.",
3194
+ "privacy": "public"
3195
+ },
3196
+ {
3197
+ "kind": "field",
3198
+ "name": "hidden",
3199
+ "type": {
3200
+ "text": "undefined | false | true"
3201
+ },
3202
+ "description": "Hide this panel; its divider is dropped and the rest reflow.",
3203
+ "privacy": "public"
3204
+ }
3205
+ ],
3206
+ "attributes": [
3207
+ {
3208
+ "name": "theme",
3209
+ "type": {
3210
+ "text": "'light' | 'dark' | 'auto'"
3211
+ },
3212
+ "description": "Color mode (auto follows prefers-color-scheme)."
3213
+ },
3214
+ {
3215
+ "name": "size",
3216
+ "fieldName": "size",
3217
+ "type": {
3218
+ "text": "undefined | string"
3219
+ },
3220
+ "description": "Initial main-axis size: `\"280px\"` (fixed) or `\"25%\"`/`25` (percent). Omitted → flexible."
3221
+ },
3222
+ {
3223
+ "name": "min",
3224
+ "fieldName": "min",
3225
+ "type": {
3226
+ "text": "undefined | string"
3227
+ },
3228
+ "description": "Minimum size during resize (px or %)."
3229
+ },
3230
+ {
3231
+ "name": "max",
3232
+ "fieldName": "max",
3233
+ "type": {
3234
+ "text": "undefined | string"
3235
+ },
3236
+ "description": "Maximum size during resize (px or %)."
3237
+ },
3238
+ {
3239
+ "name": "locked",
3240
+ "fieldName": "locked",
3241
+ "type": {
3242
+ "text": "undefined | false | true"
3243
+ },
3244
+ "description": "Fix this panel's size; adjacent dividers become non-draggable."
3245
+ },
3246
+ {
3247
+ "name": "hidden",
3248
+ "fieldName": "hidden",
3249
+ "type": {
3250
+ "text": "undefined | false | true"
3251
+ },
3252
+ "description": "Hide this panel; its divider is dropped and the rest reflow."
3253
+ }
3254
+ ],
3255
+ "events": [
3256
+ {
3257
+ "name": "kai-change",
3258
+ "type": {
3259
+ "text": "CustomEvent<unknown>"
3260
+ },
3261
+ "description": ""
3262
+ },
3263
+ {
3264
+ "name": "kai-maximize-change",
3265
+ "type": {
3266
+ "text": "CustomEvent<unknown>"
3267
+ },
3268
+ "description": ""
3269
+ }
3270
+ ],
3271
+ "cssProperties": []
3272
+ },
3273
+ {
3274
+ "kind": "class",
3275
+ "customElement": true,
3276
+ "tagName": "kai-response-stream",
3277
+ "name": "KaiResponseStreamElement",
3278
+ "description": "",
3279
+ "members": [
3280
+ {
3281
+ "kind": "field",
3282
+ "name": "text",
3283
+ "type": {
3284
+ "text": "undefined | string | AsyncIterable<string>"
3285
+ },
3286
+ "description": "Text to stream. A string, or an `AsyncIterable<string>` (set as a JS property — async iterables can't be HTML attributes).",
3287
+ "privacy": "public"
3288
+ },
3289
+ {
3290
+ "kind": "field",
3291
+ "name": "mode",
3292
+ "type": {
3293
+ "text": "undefined | \"typewriter\" | \"fade\""
3294
+ },
3295
+ "description": "Reveal animation.",
3296
+ "privacy": "public"
3297
+ },
3298
+ {
3299
+ "kind": "field",
3300
+ "name": "speed",
3301
+ "type": {
3302
+ "text": "undefined | number"
3303
+ },
3304
+ "description": "Characters/segments per tick.",
3305
+ "privacy": "public"
3306
+ },
3307
+ {
3308
+ "kind": "field",
3309
+ "name": "as",
3310
+ "type": {
3311
+ "text": "undefined | string"
3312
+ },
3313
+ "description": "Element tag to render as.",
3314
+ "privacy": "public"
3315
+ }
3316
+ ],
3317
+ "attributes": [
3318
+ {
3319
+ "name": "theme",
3320
+ "type": {
3321
+ "text": "'light' | 'dark' | 'auto'"
3322
+ },
3323
+ "description": "Color mode (auto follows prefers-color-scheme)."
3324
+ },
3325
+ {
3326
+ "name": "mode",
3327
+ "fieldName": "mode",
3328
+ "type": {
3329
+ "text": "undefined | \"typewriter\" | \"fade\""
3330
+ },
3331
+ "description": "Reveal animation."
3332
+ },
3333
+ {
3334
+ "name": "speed",
3335
+ "fieldName": "speed",
3336
+ "type": {
3337
+ "text": "undefined | number"
3338
+ },
3339
+ "description": "Characters/segments per tick."
3340
+ },
3341
+ {
3342
+ "name": "as",
3343
+ "fieldName": "as",
3344
+ "type": {
3345
+ "text": "undefined | string"
3346
+ },
3347
+ "description": "Element tag to render as."
3348
+ }
3349
+ ],
3350
+ "events": [
3351
+ {
3352
+ "name": "kai-complete",
3353
+ "type": {
3354
+ "text": "CustomEvent"
3355
+ },
3356
+ "description": "Streaming finished."
3357
+ }
3358
+ ],
3359
+ "cssProperties": []
3360
+ },
3361
+ {
3362
+ "kind": "class",
3363
+ "customElement": true,
3364
+ "tagName": "kai-scope-picker",
3365
+ "name": "KaiScopePickerElement",
3366
+ "description": "",
3367
+ "members": [
3368
+ {
3369
+ "kind": "field",
3370
+ "name": "availableAuthors",
3371
+ "type": {
3372
+ "text": "string[]"
3373
+ },
3374
+ "description": "Authors to offer as scope filters. Set as a JS property.",
3375
+ "privacy": "public"
3376
+ },
3377
+ {
3378
+ "kind": "field",
3379
+ "name": "availableTags",
3380
+ "type": {
3381
+ "text": "string[]"
3382
+ },
3383
+ "description": "Tags to offer as scope filters. Set as a JS property.",
3384
+ "privacy": "public"
3385
+ },
3386
+ {
3387
+ "kind": "field",
3388
+ "name": "currentLabel",
3389
+ "type": {
3390
+ "text": "undefined | string"
3391
+ },
3392
+ "description": "The label shown on the trigger for the active scope.",
3393
+ "privacy": "public"
3394
+ }
3395
+ ],
3396
+ "attributes": [
3397
+ {
3398
+ "name": "theme",
3399
+ "type": {
3400
+ "text": "'light' | 'dark' | 'auto'"
3401
+ },
3402
+ "description": "Color mode (auto follows prefers-color-scheme)."
3403
+ },
3404
+ {
3405
+ "name": "current-label",
3406
+ "fieldName": "currentLabel",
3407
+ "type": {
3408
+ "text": "undefined | string"
3409
+ },
3410
+ "description": "The label shown on the trigger for the active scope."
3411
+ }
3412
+ ],
3413
+ "events": [
3414
+ {
3415
+ "name": "kai-scope-change",
3416
+ "type": {
3417
+ "text": "CustomEvent<{ filters: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }>"
3418
+ },
3419
+ "description": "A scope was chosen (`undefined` filters = \"All Content\")."
3420
+ }
3421
+ ],
3422
+ "cssProperties": []
3423
+ },
3424
+ {
3425
+ "kind": "class",
3426
+ "customElement": true,
3427
+ "tagName": "kai-scroll-button",
3428
+ "name": "KaiScrollButtonElement",
3429
+ "description": "",
3430
+ "members": [
3431
+ {
3432
+ "kind": "field",
3433
+ "name": "for",
3434
+ "type": {
3435
+ "text": "undefined | string"
3436
+ },
3437
+ "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=\"...\">`.",
3438
+ "privacy": "public"
3439
+ },
3440
+ {
3441
+ "kind": "field",
3442
+ "name": "variant",
3443
+ "type": {
3444
+ "text": "undefined | \"ghost\" | \"default\" | \"outline\""
3445
+ },
3446
+ "description": "Button visual variant: `'outline' | 'ghost' | 'default'`. Defaults to `'outline'`.",
3447
+ "privacy": "public"
3448
+ },
3449
+ {
3450
+ "kind": "field",
3451
+ "name": "size",
3452
+ "type": {
3453
+ "text": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
3454
+ },
3455
+ "description": "Button size token. Defaults to `'icon'` (square).",
3456
+ "privacy": "public"
3457
+ }
3458
+ ],
3459
+ "attributes": [
3460
+ {
3461
+ "name": "theme",
3462
+ "type": {
3463
+ "text": "'light' | 'dark' | 'auto'"
3464
+ },
3465
+ "description": "Color mode (auto follows prefers-color-scheme)."
3466
+ },
3467
+ {
3468
+ "name": "for",
3469
+ "fieldName": "for",
3470
+ "type": {
3471
+ "text": "undefined | string"
3472
+ },
3473
+ "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=\"...\">`."
3474
+ },
3475
+ {
3476
+ "name": "variant",
3477
+ "fieldName": "variant",
3478
+ "type": {
3479
+ "text": "undefined | \"ghost\" | \"default\" | \"outline\""
3480
+ },
3481
+ "description": "Button visual variant: `'outline' | 'ghost' | 'default'`. Defaults to `'outline'`."
3482
+ },
3483
+ {
3484
+ "name": "size",
3485
+ "fieldName": "size",
3486
+ "type": {
3487
+ "text": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
3488
+ },
3489
+ "description": "Button size token. Defaults to `'icon'` (square)."
3490
+ }
3491
+ ],
3492
+ "events": [
3493
+ {
3494
+ "name": "kai-scroll",
3495
+ "type": {
3496
+ "text": "CustomEvent"
3497
+ },
3498
+ "description": "Emitted when the user clicks the button and `scrollToBottom()` is called. Carries no detail — consumers use it to know a manual scroll occurred."
3499
+ }
3500
+ ],
3501
+ "cssProperties": []
3502
+ },
3503
+ {
3504
+ "kind": "class",
3505
+ "customElement": true,
3506
+ "tagName": "kai-skills",
3507
+ "name": "KaiSkillsElement",
3508
+ "description": "",
3509
+ "members": [
3510
+ {
3511
+ "kind": "field",
3512
+ "name": "skills",
3513
+ "type": {
3514
+ "text": "{ id: string; name: string }[]"
3515
+ },
3516
+ "description": "The active skills to badge. Set as a JS property.",
3517
+ "privacy": "public"
3518
+ }
3519
+ ],
3520
+ "attributes": [
3521
+ {
3522
+ "name": "theme",
3523
+ "type": {
3524
+ "text": "'light' | 'dark' | 'auto'"
3525
+ },
3526
+ "description": "Color mode (auto follows prefers-color-scheme)."
3527
+ }
3528
+ ],
3529
+ "events": [],
3530
+ "cssProperties": []
3531
+ },
3532
+ {
3533
+ "kind": "class",
3534
+ "customElement": true,
3535
+ "tagName": "kai-source",
3536
+ "name": "KaiSourceElement",
3537
+ "description": "",
3538
+ "members": [
3539
+ {
3540
+ "kind": "field",
3541
+ "name": "href",
3542
+ "type": {
3543
+ "text": "undefined | string"
3544
+ },
3545
+ "description": "The URL this citation links to (the domain also seeds the default label/favicon).",
3546
+ "privacy": "public"
3547
+ },
3548
+ {
3549
+ "kind": "field",
3550
+ "name": "label",
3551
+ "type": {
3552
+ "text": "undefined | string"
3553
+ },
3554
+ "description": "Trigger label (defaults to the domain).",
3555
+ "privacy": "public"
3556
+ },
3557
+ {
3558
+ "kind": "field",
3559
+ "name": "headline",
3560
+ "type": {
3561
+ "text": "undefined | string"
3562
+ },
3563
+ "description": "Hover-card headline. Attribute: `headline` (`title` is avoided — it's a global HTML attribute that reflects in a CE constructor and breaks it).",
3564
+ "privacy": "public"
3565
+ },
3566
+ {
3567
+ "kind": "field",
3568
+ "name": "description",
3569
+ "type": {
3570
+ "text": "undefined | string"
3571
+ },
3572
+ "description": "Hover-card body text describing the source.",
3573
+ "privacy": "public"
3574
+ },
3575
+ {
3576
+ "kind": "field",
3577
+ "name": "showFavicon",
3578
+ "type": {
3579
+ "text": "undefined | false | true"
3580
+ },
3581
+ "description": "Show the source's favicon next to the trigger label.",
3582
+ "privacy": "public"
3583
+ }
3584
+ ],
3585
+ "attributes": [
3586
+ {
3587
+ "name": "theme",
3588
+ "type": {
3589
+ "text": "'light' | 'dark' | 'auto'"
3590
+ },
3591
+ "description": "Color mode (auto follows prefers-color-scheme)."
3592
+ },
3593
+ {
3594
+ "name": "href",
3595
+ "fieldName": "href",
3596
+ "type": {
3597
+ "text": "undefined | string"
3598
+ },
3599
+ "description": "The URL this citation links to (the domain also seeds the default label/favicon)."
3600
+ },
3601
+ {
3602
+ "name": "label",
3603
+ "fieldName": "label",
3604
+ "type": {
3605
+ "text": "undefined | string"
3606
+ },
3607
+ "description": "Trigger label (defaults to the domain)."
3608
+ },
3609
+ {
3610
+ "name": "headline",
3611
+ "fieldName": "headline",
3612
+ "type": {
3613
+ "text": "undefined | string"
3614
+ },
3615
+ "description": "Hover-card headline. Attribute: `headline` (`title` is avoided — it's a global HTML attribute that reflects in a CE constructor and breaks it)."
3616
+ },
3617
+ {
3618
+ "name": "description",
3619
+ "fieldName": "description",
3620
+ "type": {
3621
+ "text": "undefined | string"
3622
+ },
3623
+ "description": "Hover-card body text describing the source."
3624
+ },
3625
+ {
3626
+ "name": "show-favicon",
3627
+ "fieldName": "showFavicon",
3628
+ "type": {
3629
+ "text": "undefined | false | true"
3630
+ },
3631
+ "description": "Show the source's favicon next to the trigger label."
3632
+ }
3633
+ ],
3634
+ "events": [],
3635
+ "cssProperties": []
3636
+ },
3637
+ {
3638
+ "kind": "class",
3639
+ "customElement": true,
3640
+ "tagName": "kai-sources",
3641
+ "name": "KaiSourcesElement",
3642
+ "description": "",
3643
+ "members": [
3644
+ {
3645
+ "kind": "field",
3646
+ "name": "sources",
3647
+ "type": {
3648
+ "text": "{ href: string; title?: undefined | string; description?: undefined | string; label?: undefined | string; showFavicon?: undefined | false | true }[]"
3649
+ },
3650
+ "description": "The sources to render. Set as a JS property.",
3651
+ "privacy": "public"
3652
+ },
3653
+ {
3654
+ "kind": "field",
3655
+ "name": "showFavicon",
3656
+ "type": {
3657
+ "text": "undefined | false | true"
3658
+ },
3659
+ "description": "Show favicons on all items (per-item `showFavicon` overrides).",
3660
+ "privacy": "public"
3661
+ },
3662
+ {
3663
+ "kind": "field",
3664
+ "name": "numbered",
3665
+ "type": {
3666
+ "text": "undefined | false | true"
3667
+ },
3668
+ "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`.",
3669
+ "privacy": "public"
3670
+ }
3671
+ ],
3672
+ "attributes": [
3673
+ {
3674
+ "name": "theme",
3675
+ "type": {
3676
+ "text": "'light' | 'dark' | 'auto'"
3677
+ },
3678
+ "description": "Color mode (auto follows prefers-color-scheme)."
3679
+ },
3680
+ {
3681
+ "name": "show-favicon",
3682
+ "fieldName": "showFavicon",
3683
+ "type": {
3684
+ "text": "undefined | false | true"
3685
+ },
3686
+ "description": "Show favicons on all items (per-item `showFavicon` overrides)."
3687
+ },
3688
+ {
3689
+ "name": "numbered",
3690
+ "fieldName": "numbered",
3691
+ "type": {
3692
+ "text": "undefined | false | true"
3693
+ },
3694
+ "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`."
3695
+ }
3696
+ ],
3697
+ "events": [],
3698
+ "cssProperties": []
3699
+ },
3700
+ {
3701
+ "kind": "class",
3702
+ "customElement": true,
3703
+ "tagName": "kai-suggestions",
3704
+ "name": "KaiSuggestionsElement",
3705
+ "description": "",
3706
+ "members": [
3707
+ {
3708
+ "kind": "field",
3709
+ "name": "suggestions",
3710
+ "type": {
3711
+ "text": "(string | { label: string; value?: undefined | string })[]"
3712
+ },
3713
+ "description": "The suggestions. Strings, or `{ label, value }` when the displayed text and the emitted value differ. Set as a JS property.",
3714
+ "privacy": "public"
3715
+ },
3716
+ {
3717
+ "kind": "field",
3718
+ "name": "variant",
3719
+ "type": {
3720
+ "text": "undefined | \"ghost\" | \"default\" | \"outline\""
3721
+ },
3722
+ "description": "Chip style: `'outline'` (default), `'ghost'`, or `'default'` (filled).",
3723
+ "privacy": "public"
3724
+ },
3725
+ {
3726
+ "kind": "field",
3727
+ "name": "size",
3728
+ "type": {
3729
+ "text": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
3730
+ },
3731
+ "description": "Size preset for each chip. Defaults to the pill default (`'lg'`); pass `'sm'` for smaller pills (or `'md'`).",
3732
+ "privacy": "public"
3733
+ },
3734
+ {
3735
+ "kind": "field",
3736
+ "name": "block",
3737
+ "type": {
3738
+ "text": "undefined | false | true"
3739
+ },
3740
+ "description": "Full-width left-aligned rows instead of pills.",
3741
+ "privacy": "public"
3742
+ },
3743
+ {
3744
+ "kind": "field",
3745
+ "name": "highlight",
3746
+ "type": {
3747
+ "text": "undefined | string"
3748
+ },
3749
+ "description": "Substring to highlight within each suggestion.",
3750
+ "privacy": "public"
3751
+ }
3752
+ ],
3753
+ "attributes": [
3754
+ {
3755
+ "name": "theme",
3756
+ "type": {
3757
+ "text": "'light' | 'dark' | 'auto'"
3758
+ },
3759
+ "description": "Color mode (auto follows prefers-color-scheme)."
3760
+ },
3761
+ {
3762
+ "name": "variant",
3763
+ "fieldName": "variant",
3764
+ "type": {
3765
+ "text": "undefined | \"ghost\" | \"default\" | \"outline\""
3766
+ },
3767
+ "description": "Chip style: `'outline'` (default), `'ghost'`, or `'default'` (filled)."
3768
+ },
3769
+ {
3770
+ "name": "size",
3771
+ "fieldName": "size",
3772
+ "type": {
3773
+ "text": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
3774
+ },
3775
+ "description": "Size preset for each chip. Defaults to the pill default (`'lg'`); pass `'sm'` for smaller pills (or `'md'`)."
3776
+ },
3777
+ {
3778
+ "name": "block",
3779
+ "fieldName": "block",
3780
+ "type": {
3781
+ "text": "undefined | false | true"
3782
+ },
3783
+ "description": "Full-width left-aligned rows instead of pills."
3784
+ },
3785
+ {
3786
+ "name": "highlight",
3787
+ "fieldName": "highlight",
3788
+ "type": {
3789
+ "text": "undefined | string"
3790
+ },
3791
+ "description": "Substring to highlight within each suggestion."
3792
+ }
3793
+ ],
3794
+ "events": [
3795
+ {
3796
+ "name": "kai-select",
3797
+ "type": {
3798
+ "text": "CustomEvent<{ value: string }>"
3799
+ },
3800
+ "description": "A suggestion was clicked."
3801
+ }
3802
+ ],
3803
+ "cssProperties": []
3804
+ },
3805
+ {
3806
+ "kind": "class",
3807
+ "customElement": true,
3808
+ "tagName": "kai-switch",
3809
+ "name": "KaiSwitchElement",
3810
+ "description": "",
3811
+ "members": [
3812
+ {
3813
+ "kind": "field",
3814
+ "name": "checked",
3815
+ "type": {
3816
+ "text": "undefined | false | true"
3817
+ },
3818
+ "description": "Initial checked state. Bare attribute (`<kai-switch checked>`) turns it on.",
3819
+ "privacy": "public"
3820
+ },
3821
+ {
3822
+ "kind": "field",
3823
+ "name": "disabled",
3824
+ "type": {
3825
+ "text": "undefined | false | true"
3826
+ },
3827
+ "description": "Disable interaction.",
3828
+ "privacy": "public"
3829
+ },
3830
+ {
3831
+ "kind": "field",
3832
+ "name": "label",
3833
+ "type": {
3834
+ "text": "undefined | string"
3835
+ },
3836
+ "description": "Accessible label.",
3837
+ "privacy": "public"
3838
+ }
3839
+ ],
3840
+ "attributes": [
3841
+ {
3842
+ "name": "theme",
3843
+ "type": {
3844
+ "text": "'light' | 'dark' | 'auto'"
3845
+ },
3846
+ "description": "Color mode (auto follows prefers-color-scheme)."
3847
+ },
3848
+ {
3849
+ "name": "checked",
3850
+ "fieldName": "checked",
3851
+ "type": {
3852
+ "text": "undefined | false | true"
3853
+ },
3854
+ "description": "Initial checked state. Bare attribute (`<kai-switch checked>`) turns it on."
3855
+ },
3856
+ {
3857
+ "name": "disabled",
3858
+ "fieldName": "disabled",
3859
+ "type": {
3860
+ "text": "undefined | false | true"
3861
+ },
3862
+ "description": "Disable interaction."
3863
+ },
3864
+ {
3865
+ "name": "label",
3866
+ "fieldName": "label",
3867
+ "type": {
3868
+ "text": "undefined | string"
3869
+ },
3870
+ "description": "Accessible label."
3871
+ }
3872
+ ],
3873
+ "events": [
3874
+ {
3875
+ "name": "kai-change",
3876
+ "type": {
3877
+ "text": "CustomEvent<{ checked: false | true }>"
3878
+ },
3879
+ "description": "The toggle changed."
3880
+ }
3881
+ ],
3882
+ "cssProperties": []
3883
+ },
3884
+ {
3885
+ "kind": "class",
3886
+ "customElement": true,
3887
+ "tagName": "kai-tasks",
3888
+ "name": "KaiTasksElement",
3889
+ "description": "",
3890
+ "members": [
3891
+ {
3892
+ "kind": "field",
3893
+ "name": "data",
3894
+ "type": {
3895
+ "text": "undefined | Record<string, unknown>"
3896
+ },
3897
+ "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.",
3898
+ "privacy": "public"
3899
+ },
3900
+ {
3901
+ "kind": "field",
3902
+ "name": "cardId",
3903
+ "type": {
3904
+ "text": "undefined | string"
3905
+ },
3906
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
3907
+ "privacy": "public"
3908
+ },
3909
+ {
3910
+ "kind": "field",
3911
+ "name": "heading",
3912
+ "type": {
3913
+ "text": "undefined | string"
3914
+ },
3915
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
3916
+ "privacy": "public"
3917
+ },
3918
+ {
3919
+ "kind": "field",
3920
+ "name": "resolution",
3921
+ "type": {
3922
+ "text": "undefined | Record<string, unknown>"
3923
+ },
3924
+ "description": "Set when the user resolved this card; renders the read-only view. Property: `el.resolution = { kind:'submit', data:{ selected:[…] } }`.",
3925
+ "privacy": "public"
3926
+ }
3927
+ ],
3928
+ "attributes": [
3929
+ {
3930
+ "name": "theme",
3931
+ "type": {
3932
+ "text": "'light' | 'dark' | 'auto'"
3933
+ },
3934
+ "description": "Color mode (auto follows prefers-color-scheme)."
3935
+ },
3936
+ {
3937
+ "name": "card-id",
3938
+ "fieldName": "cardId",
3939
+ "type": {
3940
+ "text": "undefined | string"
3941
+ },
3942
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`."
3943
+ },
3944
+ {
3945
+ "name": "heading",
3946
+ "fieldName": "heading",
3947
+ "type": {
3948
+ "text": "undefined | string"
3949
+ },
3950
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`."
3951
+ }
3952
+ ],
3953
+ "events": [],
3954
+ "cssProperties": []
3955
+ },
3956
+ {
3957
+ "kind": "class",
3958
+ "customElement": true,
3959
+ "tagName": "kai-text-shimmer",
3960
+ "name": "KaiTextShimmerElement",
3961
+ "description": "",
3962
+ "members": [
3963
+ {
3964
+ "kind": "field",
3965
+ "name": "text",
3966
+ "type": {
3967
+ "text": "undefined | string"
3968
+ },
3969
+ "description": "The text to shimmer.",
3970
+ "privacy": "public"
3971
+ },
3972
+ {
3973
+ "kind": "field",
3974
+ "name": "as",
3975
+ "type": {
3976
+ "text": "undefined | string"
3977
+ },
3978
+ "description": "Element tag to render as (default `span`).",
3979
+ "privacy": "public"
3980
+ },
3981
+ {
3982
+ "kind": "field",
3983
+ "name": "duration",
3984
+ "type": {
3985
+ "text": "undefined | number"
3986
+ },
3987
+ "description": "Animation duration in seconds.",
3988
+ "privacy": "public"
3989
+ },
3990
+ {
3991
+ "kind": "field",
3992
+ "name": "spread",
3993
+ "type": {
3994
+ "text": "undefined | number"
3995
+ },
3996
+ "description": "Gradient spread (5–45).",
3997
+ "privacy": "public"
3998
+ }
3999
+ ],
4000
+ "attributes": [
4001
+ {
4002
+ "name": "theme",
4003
+ "type": {
4004
+ "text": "'light' | 'dark' | 'auto'"
4005
+ },
4006
+ "description": "Color mode (auto follows prefers-color-scheme)."
4007
+ },
4008
+ {
4009
+ "name": "text",
4010
+ "fieldName": "text",
4011
+ "type": {
4012
+ "text": "undefined | string"
4013
+ },
4014
+ "description": "The text to shimmer."
4015
+ },
4016
+ {
4017
+ "name": "as",
4018
+ "fieldName": "as",
4019
+ "type": {
4020
+ "text": "undefined | string"
4021
+ },
4022
+ "description": "Element tag to render as (default `span`)."
4023
+ },
4024
+ {
4025
+ "name": "duration",
4026
+ "fieldName": "duration",
4027
+ "type": {
4028
+ "text": "undefined | number"
4029
+ },
4030
+ "description": "Animation duration in seconds."
4031
+ },
4032
+ {
4033
+ "name": "spread",
4034
+ "fieldName": "spread",
4035
+ "type": {
4036
+ "text": "undefined | number"
4037
+ },
4038
+ "description": "Gradient spread (5–45)."
4039
+ }
4040
+ ],
4041
+ "events": [],
4042
+ "cssProperties": []
4043
+ },
4044
+ {
4045
+ "kind": "class",
4046
+ "customElement": true,
4047
+ "tagName": "kai-thinking-bar",
4048
+ "name": "KaiThinkingBarElement",
4049
+ "description": "",
4050
+ "members": [
4051
+ {
4052
+ "kind": "field",
4053
+ "name": "text",
4054
+ "type": {
4055
+ "text": "undefined | string"
4056
+ },
4057
+ "description": "The shimmering label, e.g. \"Thinking…\".",
4058
+ "privacy": "public"
4059
+ },
4060
+ {
4061
+ "kind": "field",
4062
+ "name": "stoppable",
4063
+ "type": {
4064
+ "text": "undefined | false | true"
4065
+ },
4066
+ "description": "When true, show a \"stop\" affordance that fires a `stop` event.",
4067
+ "privacy": "public"
4068
+ },
4069
+ {
4070
+ "kind": "field",
4071
+ "name": "stopLabel",
4072
+ "type": {
4073
+ "text": "undefined | string"
4074
+ },
4075
+ "description": "Label for the stop affordance.",
4076
+ "privacy": "public"
4077
+ }
4078
+ ],
4079
+ "attributes": [
4080
+ {
4081
+ "name": "theme",
4082
+ "type": {
4083
+ "text": "'light' | 'dark' | 'auto'"
4084
+ },
4085
+ "description": "Color mode (auto follows prefers-color-scheme)."
4086
+ },
4087
+ {
4088
+ "name": "text",
4089
+ "fieldName": "text",
4090
+ "type": {
4091
+ "text": "undefined | string"
4092
+ },
4093
+ "description": "The shimmering label, e.g. \"Thinking…\"."
4094
+ },
4095
+ {
4096
+ "name": "stoppable",
4097
+ "fieldName": "stoppable",
4098
+ "type": {
4099
+ "text": "undefined | false | true"
4100
+ },
4101
+ "description": "When true, show a \"stop\" affordance that fires a `stop` event."
4102
+ },
4103
+ {
4104
+ "name": "stop-label",
4105
+ "fieldName": "stopLabel",
4106
+ "type": {
4107
+ "text": "undefined | string"
4108
+ },
4109
+ "description": "Label for the stop affordance."
4110
+ }
4111
+ ],
4112
+ "events": [
4113
+ {
4114
+ "name": "kai-stop",
4115
+ "type": {
4116
+ "text": "CustomEvent"
4117
+ },
4118
+ "description": "The \"stop / answer now\" affordance was clicked."
4119
+ }
4120
+ ],
4121
+ "cssProperties": []
4122
+ },
4123
+ {
4124
+ "kind": "class",
4125
+ "customElement": true,
4126
+ "tagName": "kai-tool",
4127
+ "name": "KaiToolElement",
4128
+ "description": "",
4129
+ "members": [
4130
+ {
4131
+ "kind": "field",
4132
+ "name": "tool",
4133
+ "type": {
4134
+ "text": "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 }"
4135
+ },
4136
+ "description": "The tool-call to display. Set as a JS property.",
4137
+ "privacy": "public"
4138
+ },
4139
+ {
4140
+ "kind": "field",
4141
+ "name": "open",
4142
+ "type": {
4143
+ "text": "undefined | false | true"
4144
+ },
4145
+ "description": "Start expanded.",
4146
+ "privacy": "public"
4147
+ }
4148
+ ],
4149
+ "attributes": [
4150
+ {
4151
+ "name": "theme",
4152
+ "type": {
4153
+ "text": "'light' | 'dark' | 'auto'"
4154
+ },
4155
+ "description": "Color mode (auto follows prefers-color-scheme)."
4156
+ },
4157
+ {
4158
+ "name": "open",
4159
+ "fieldName": "open",
4160
+ "type": {
4161
+ "text": "undefined | false | true"
4162
+ },
4163
+ "description": "Start expanded."
4164
+ }
4165
+ ],
4166
+ "events": [],
4167
+ "cssProperties": [
4168
+ {
4169
+ "name": "--color-tool-blue"
4170
+ },
4171
+ {
4172
+ "name": "--color-tool-amber"
4173
+ },
4174
+ {
4175
+ "name": "--color-tool-green"
4176
+ },
4177
+ {
4178
+ "name": "--color-tool-red"
4179
+ }
4180
+ ]
4181
+ },
4182
+ {
4183
+ "kind": "class",
4184
+ "customElement": true,
4185
+ "tagName": "kai-voice-input",
4186
+ "name": "KaiVoiceInputElement",
4187
+ "description": "",
4188
+ "members": [
4189
+ {
4190
+ "kind": "field",
4191
+ "name": "transcribe",
4192
+ "type": {
4193
+ "text": "undefined | (audio: Blob) => Promise<string>"
4194
+ },
4195
+ "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.",
4196
+ "privacy": "public"
4197
+ },
4198
+ {
4199
+ "kind": "field",
4200
+ "name": "disabled",
4201
+ "type": {
4202
+ "text": "undefined | false | true"
4203
+ },
4204
+ "description": "Disable the mic button (non-interactive).",
4205
+ "privacy": "public"
4206
+ }
4207
+ ],
4208
+ "attributes": [
4209
+ {
4210
+ "name": "theme",
4211
+ "type": {
4212
+ "text": "'light' | 'dark' | 'auto'"
4213
+ },
4214
+ "description": "Color mode (auto follows prefers-color-scheme)."
4215
+ },
4216
+ {
4217
+ "name": "disabled",
4218
+ "fieldName": "disabled",
4219
+ "type": {
4220
+ "text": "undefined | false | true"
4221
+ },
4222
+ "description": "Disable the mic button (non-interactive)."
4223
+ }
4224
+ ],
4225
+ "events": [
4226
+ {
4227
+ "name": "kai-audio-captured",
4228
+ "type": {
4229
+ "text": "CustomEvent<{ blob: Blob }>"
4230
+ },
4231
+ "description": "Raw audio captured (before transcription) — for hosts that prefer to handle transcription themselves instead of via the `transcribe` property."
4232
+ },
4233
+ {
4234
+ "name": "kai-transcription",
4235
+ "type": {
4236
+ "text": "CustomEvent<{ text: string }>"
4237
+ },
4238
+ "description": "Transcription completed (the `transcribe` property resolved)."
4239
+ }
4240
+ ],
4241
+ "cssProperties": []
4242
+ },
4243
+ {
4244
+ "kind": "class",
4245
+ "customElement": true,
4246
+ "tagName": "kai-workspace",
4247
+ "name": "KaiWorkspaceElement",
4248
+ "description": "",
4249
+ "members": [
4250
+ {
4251
+ "kind": "field",
4252
+ "name": "groups",
4253
+ "type": {
4254
+ "text": "{ id: string; userId?: undefined | string; teamId?: undefined | string; name: string; sortOrder: number; createdAt: string }[]"
4255
+ },
4256
+ "description": "Pre-bucketed conversation groups for the sidebar. Set as a JS property.",
4257
+ "privacy": "public"
4258
+ },
4259
+ {
4260
+ "kind": "field",
4261
+ "name": "conversations",
4262
+ "type": {
4263
+ "text": "{ 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 }[]"
4264
+ },
4265
+ "description": "Flat conversation list (auto-bucketed if `groups` is empty). Set as a JS property.",
4266
+ "privacy": "public"
4267
+ },
4268
+ {
4269
+ "kind": "field",
4270
+ "name": "activeId",
4271
+ "type": {
4272
+ "text": "undefined | string"
4273
+ },
4274
+ "description": "Id of the open conversation, highlighted in the sidebar.",
4275
+ "privacy": "public"
4276
+ },
4277
+ {
4278
+ "kind": "field",
4279
+ "name": "messages",
4280
+ "type": {
4281
+ "text": "{ 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 } }[]"
4282
+ },
4283
+ "description": "The active conversation's message thread, newest last. Set as a JS property.",
4284
+ "privacy": "public"
4285
+ },
4286
+ {
4287
+ "kind": "field",
4288
+ "name": "value",
4289
+ "type": {
4290
+ "text": "undefined | string"
4291
+ },
4292
+ "description": "",
4293
+ "privacy": "public"
4294
+ },
4295
+ {
4296
+ "kind": "field",
4297
+ "name": "placeholder",
4298
+ "type": {
4299
+ "text": "undefined | string"
4300
+ },
4301
+ "description": "",
4302
+ "privacy": "public"
4303
+ },
4304
+ {
4305
+ "kind": "field",
4306
+ "name": "loading",
4307
+ "type": {
4308
+ "text": "undefined | false | true"
4309
+ },
4310
+ "description": "",
4311
+ "privacy": "public"
4312
+ },
4313
+ {
4314
+ "kind": "field",
4315
+ "name": "suggestions",
4316
+ "type": {
4317
+ "text": "undefined | string[]"
4318
+ },
4319
+ "description": "",
4320
+ "privacy": "public"
4321
+ },
4322
+ {
4323
+ "kind": "field",
4324
+ "name": "suggestionMode",
4325
+ "type": {
4326
+ "text": "undefined | \"submit\" | \"fill\""
4327
+ },
4328
+ "description": "",
4329
+ "privacy": "public"
4330
+ },
4331
+ {
4332
+ "kind": "field",
4333
+ "name": "proseSize",
4334
+ "type": {
4335
+ "text": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
4336
+ },
4337
+ "description": "",
4338
+ "privacy": "public"
4339
+ },
4340
+ {
4341
+ "kind": "field",
4342
+ "name": "codeTheme",
4343
+ "type": {
4344
+ "text": "undefined | string"
4345
+ },
4346
+ "description": "",
4347
+ "privacy": "public"
4348
+ },
4349
+ {
4350
+ "kind": "field",
4351
+ "name": "codeHighlight",
4352
+ "type": {
4353
+ "text": "undefined | false | true"
4354
+ },
4355
+ "description": "",
4356
+ "privacy": "public"
4357
+ },
4358
+ {
4359
+ "kind": "field",
4360
+ "name": "chatTitle",
4361
+ "type": {
4362
+ "text": "undefined | string"
4363
+ },
4364
+ "description": "",
4365
+ "privacy": "public"
4366
+ },
4367
+ {
4368
+ "kind": "field",
4369
+ "name": "models",
4370
+ "type": {
4371
+ "text": "undefined | { id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]"
4372
+ },
4373
+ "description": "",
4374
+ "privacy": "public"
4375
+ },
4376
+ {
4377
+ "kind": "field",
4378
+ "name": "currentModel",
4379
+ "type": {
4380
+ "text": "undefined | string"
4381
+ },
4382
+ "description": "",
4383
+ "privacy": "public"
4384
+ },
4385
+ {
4386
+ "kind": "field",
4387
+ "name": "context",
4388
+ "type": {
4389
+ "text": "undefined | { usedTokens: number; maxTokens: number; inputTokens?: undefined | number; outputTokens?: undefined | number; estimatedCost?: undefined | number }"
4390
+ },
4391
+ "description": "",
4392
+ "privacy": "public"
4393
+ },
4394
+ {
4395
+ "kind": "field",
4396
+ "name": "scrollButton",
4397
+ "type": {
4398
+ "text": "undefined | false | true"
4399
+ },
4400
+ "description": "",
4401
+ "privacy": "public"
4402
+ },
4403
+ {
4404
+ "kind": "field",
4405
+ "name": "search",
4406
+ "type": {
4407
+ "text": "undefined | false | true"
4408
+ },
4409
+ "description": "",
4410
+ "privacy": "public"
4411
+ },
4412
+ {
4413
+ "kind": "field",
4414
+ "name": "voice",
4415
+ "type": {
4416
+ "text": "undefined | false | true"
4417
+ },
4418
+ "description": "",
4419
+ "privacy": "public"
4420
+ },
4421
+ {
4422
+ "kind": "field",
4423
+ "name": "slashCommands",
4424
+ "type": {
4425
+ "text": "undefined | { id: string; label: string; description?: undefined | string; category?: undefined | string }[]"
4426
+ },
4427
+ "description": "",
4428
+ "privacy": "public"
4429
+ },
4430
+ {
4431
+ "kind": "field",
4432
+ "name": "slashActiveIds",
4433
+ "type": {
4434
+ "text": "undefined | string[]"
4435
+ },
4436
+ "description": "",
4437
+ "privacy": "public"
4438
+ },
4439
+ {
4440
+ "kind": "field",
4441
+ "name": "slashCompact",
4442
+ "type": {
4443
+ "text": "undefined | false | true"
4444
+ },
4445
+ "description": "",
4446
+ "privacy": "public"
4447
+ },
4448
+ {
4449
+ "kind": "field",
4450
+ "name": "sidebarWidth",
4451
+ "type": {
4452
+ "text": "undefined | number"
4453
+ },
4454
+ "description": "Sidebar default width as a percent of the workspace (default 22).",
4455
+ "privacy": "public"
4456
+ },
4457
+ {
4458
+ "kind": "field",
4459
+ "name": "sidebarMinWidth",
4460
+ "type": {
4461
+ "text": "undefined | number"
4462
+ },
4463
+ "description": "Sidebar min width in px (default 200).",
4464
+ "privacy": "public"
4465
+ },
4466
+ {
4467
+ "kind": "field",
4468
+ "name": "sidebarMaxWidth",
4469
+ "type": {
4470
+ "text": "undefined | number"
4471
+ },
4472
+ "description": "Sidebar max width in px (default 420).",
4473
+ "privacy": "public"
4474
+ },
4475
+ {
4476
+ "kind": "field",
4477
+ "name": "sidebarCollapsed",
4478
+ "type": {
4479
+ "text": "undefined | false | true"
4480
+ },
4481
+ "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).",
4482
+ "privacy": "public"
4483
+ },
4484
+ {
4485
+ "kind": "field",
4486
+ "name": "defaultSidebarCollapsed",
4487
+ "type": {
4488
+ "text": "undefined | false | true"
4489
+ },
4490
+ "description": "Initial collapsed state when uncontrolled (default false). Use the `default-sidebar-collapsed` attribute to start collapsed in plain HTML.",
4491
+ "privacy": "public"
4492
+ }
4493
+ ],
4494
+ "attributes": [
4495
+ {
4496
+ "name": "theme",
4497
+ "type": {
4498
+ "text": "'light' | 'dark' | 'auto'"
4499
+ },
4500
+ "description": "Color mode (auto follows prefers-color-scheme)."
4501
+ },
4502
+ {
4503
+ "name": "active-id",
4504
+ "fieldName": "activeId",
4505
+ "type": {
4506
+ "text": "undefined | string"
4507
+ },
4508
+ "description": "Id of the open conversation, highlighted in the sidebar."
4509
+ },
4510
+ {
4511
+ "name": "value",
4512
+ "fieldName": "value",
4513
+ "type": {
4514
+ "text": "undefined | string"
4515
+ },
4516
+ "description": ""
4517
+ },
4518
+ {
4519
+ "name": "placeholder",
4520
+ "fieldName": "placeholder",
4521
+ "type": {
4522
+ "text": "undefined | string"
4523
+ },
4524
+ "description": ""
4525
+ },
4526
+ {
4527
+ "name": "loading",
4528
+ "fieldName": "loading",
4529
+ "type": {
4530
+ "text": "undefined | false | true"
4531
+ },
4532
+ "description": ""
4533
+ },
4534
+ {
4535
+ "name": "suggestion-mode",
4536
+ "fieldName": "suggestionMode",
4537
+ "type": {
4538
+ "text": "undefined | \"submit\" | \"fill\""
4539
+ },
4540
+ "description": ""
4541
+ },
4542
+ {
4543
+ "name": "prose-size",
4544
+ "fieldName": "proseSize",
4545
+ "type": {
4546
+ "text": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
4547
+ },
4548
+ "description": ""
4549
+ },
4550
+ {
4551
+ "name": "code-theme",
4552
+ "fieldName": "codeTheme",
4553
+ "type": {
4554
+ "text": "undefined | string"
4555
+ },
4556
+ "description": ""
4557
+ },
4558
+ {
4559
+ "name": "code-highlight",
4560
+ "fieldName": "codeHighlight",
4561
+ "type": {
4562
+ "text": "undefined | false | true"
4563
+ },
4564
+ "description": ""
4565
+ },
4566
+ {
4567
+ "name": "chat-title",
4568
+ "fieldName": "chatTitle",
4569
+ "type": {
4570
+ "text": "undefined | string"
4571
+ },
4572
+ "description": ""
4573
+ },
4574
+ {
4575
+ "name": "current-model",
4576
+ "fieldName": "currentModel",
4577
+ "type": {
4578
+ "text": "undefined | string"
4579
+ },
4580
+ "description": ""
4581
+ },
4582
+ {
4583
+ "name": "scroll-button",
4584
+ "fieldName": "scrollButton",
4585
+ "type": {
4586
+ "text": "undefined | false | true"
4587
+ },
4588
+ "description": ""
4589
+ },
4590
+ {
4591
+ "name": "search",
4592
+ "fieldName": "search",
4593
+ "type": {
4594
+ "text": "undefined | false | true"
4595
+ },
4596
+ "description": ""
4597
+ },
4598
+ {
4599
+ "name": "voice",
4600
+ "fieldName": "voice",
4601
+ "type": {
4602
+ "text": "undefined | false | true"
4603
+ },
4604
+ "description": ""
4605
+ },
4606
+ {
4607
+ "name": "slash-compact",
4608
+ "fieldName": "slashCompact",
4609
+ "type": {
4610
+ "text": "undefined | false | true"
4611
+ },
4612
+ "description": ""
4613
+ },
4614
+ {
4615
+ "name": "sidebar-width",
4616
+ "fieldName": "sidebarWidth",
4617
+ "type": {
4618
+ "text": "undefined | number"
4619
+ },
4620
+ "description": "Sidebar default width as a percent of the workspace (default 22)."
4621
+ },
4622
+ {
4623
+ "name": "sidebar-min-width",
4624
+ "fieldName": "sidebarMinWidth",
4625
+ "type": {
4626
+ "text": "undefined | number"
4627
+ },
4628
+ "description": "Sidebar min width in px (default 200)."
4629
+ },
4630
+ {
4631
+ "name": "sidebar-max-width",
4632
+ "fieldName": "sidebarMaxWidth",
4633
+ "type": {
4634
+ "text": "undefined | number"
4635
+ },
4636
+ "description": "Sidebar max width in px (default 420)."
4637
+ },
4638
+ {
4639
+ "name": "sidebar-collapsed",
4640
+ "fieldName": "sidebarCollapsed",
4641
+ "type": {
4642
+ "text": "undefined | false | true"
4643
+ },
4644
+ "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)."
4645
+ },
4646
+ {
4647
+ "name": "default-sidebar-collapsed",
4648
+ "fieldName": "defaultSidebarCollapsed",
4649
+ "type": {
4650
+ "text": "undefined | false | true"
4651
+ },
4652
+ "description": "Initial collapsed state when uncontrolled (default false). Use the `default-sidebar-collapsed` attribute to start collapsed in plain HTML."
4653
+ }
4654
+ ],
4655
+ "events": [
4656
+ {
4657
+ "name": "kai-conversation-select",
4658
+ "type": {
4659
+ "text": "CustomEvent<{ id: string }>"
4660
+ },
4661
+ "description": "A conversation was selected in the sidebar."
4662
+ },
4663
+ {
4664
+ "name": "kai-message-action",
4665
+ "type": {
4666
+ "text": "CustomEvent<{ messageId: string; action: string }>"
4667
+ },
4668
+ "description": "An action button on a message was clicked."
4669
+ },
4670
+ {
4671
+ "name": "kai-model-change",
4672
+ "type": {
4673
+ "text": "CustomEvent<{ modelId: string }>"
4674
+ },
4675
+ "description": "The header model switcher changed."
4676
+ },
4677
+ {
4678
+ "name": "kai-new-chat",
4679
+ "type": {
4680
+ "text": "CustomEvent<Record<string, never>>"
4681
+ },
4682
+ "description": "The \"New chat\" button was clicked."
4683
+ },
4684
+ {
4685
+ "name": "kai-search",
4686
+ "type": {
4687
+ "text": "CustomEvent<Record<string, never>>"
4688
+ },
4689
+ "description": "The Search button was clicked."
4690
+ },
4691
+ {
4692
+ "name": "kai-sidebar-toggle",
4693
+ "type": {
4694
+ "text": "CustomEvent<{ collapsed: false | true }>"
4695
+ },
4696
+ "description": "The sidebar was collapsed or expanded."
4697
+ },
4698
+ {
4699
+ "name": "kai-slash-select",
4700
+ "type": {
4701
+ "text": "CustomEvent<{ command: { id: string; label: string; description?: undefined | string; category?: undefined | string } }>"
4702
+ },
4703
+ "description": "A slash command was chosen from the palette."
4704
+ },
4705
+ {
4706
+ "name": "kai-submit",
4707
+ "type": {
4708
+ "text": "CustomEvent<{ value: string; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }>"
4709
+ },
4710
+ "description": "User submitted a message."
4711
+ },
4712
+ {
4713
+ "name": "kai-suggestion-click",
4714
+ "type": {
4715
+ "text": "CustomEvent<{ value: string }>"
4716
+ },
4717
+ "description": "A suggestion chip was clicked (only in `suggestion-mode=\"fill\"`)."
4718
+ },
4719
+ {
4720
+ "name": "kai-value-change",
4721
+ "type": {
4722
+ "text": "CustomEvent<{ value: string }>"
4723
+ },
4724
+ "description": "Fired on every input change."
4725
+ },
4726
+ {
4727
+ "name": "kai-voice",
4728
+ "type": {
4729
+ "text": "CustomEvent<Record<string, never>>"
4730
+ },
4731
+ "description": "The Mic / voice button was clicked."
4732
+ }
4733
+ ],
4734
+ "cssProperties": []
4735
+ }
4736
+ ]
4737
+ }
4738
+ ]
4739
+ }