@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,3735 @@
1
+ [
2
+ {
3
+ "name": "Artifact",
4
+ "group": "Components",
5
+ "sourceFile": "src/components/artifact.tsx",
6
+ "props": [
7
+ {
8
+ "name": "src",
9
+ "type": "undefined | string",
10
+ "displayType": "undefined | string",
11
+ "optional": true,
12
+ "scalar": true,
13
+ "description": "URL the preview iframe frames."
14
+ },
15
+ {
16
+ "name": "files",
17
+ "type": "undefined | { path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
18
+ "displayType": "undefined | { path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
19
+ "optional": true,
20
+ "scalar": false,
21
+ "description": "Files for the Code tab's tree (+ each file's preview `url`)."
22
+ },
23
+ {
24
+ "name": "tab",
25
+ "type": "undefined | \"preview\" | \"code\"",
26
+ "displayType": "undefined | \"preview\" | \"code\"",
27
+ "optional": true,
28
+ "scalar": true,
29
+ "description": "Active tab. Default `preview`."
30
+ },
31
+ {
32
+ "name": "activeFile",
33
+ "type": "undefined | string",
34
+ "displayType": "undefined | string",
35
+ "optional": true,
36
+ "scalar": true,
37
+ "description": "Selected file path (syncs tree highlight + Code source + preview)."
38
+ },
39
+ {
40
+ "name": "sandbox",
41
+ "type": "undefined | string",
42
+ "displayType": "undefined | string",
43
+ "optional": true,
44
+ "scalar": true,
45
+ "description": "iframe `sandbox` override. Default `allow-scripts allow-forms`."
46
+ },
47
+ {
48
+ "name": "iframeTitle",
49
+ "type": "undefined | string",
50
+ "displayType": "undefined | string",
51
+ "optional": true,
52
+ "scalar": true,
53
+ "description": "Accessible iframe title.",
54
+ "default": "'Artifact preview'"
55
+ },
56
+ {
57
+ "name": "maximized",
58
+ "type": "undefined | false | true",
59
+ "displayType": "undefined | false | true",
60
+ "optional": true,
61
+ "scalar": true,
62
+ "description": "Controlled maximize view-state (drives the expand/restore button).",
63
+ "default": "false"
64
+ },
65
+ {
66
+ "name": "showNav",
67
+ "type": "undefined | false | true",
68
+ "displayType": "undefined | false | true",
69
+ "optional": true,
70
+ "scalar": true,
71
+ "description": "Show the back/forward nav buttons. Default `true`."
72
+ },
73
+ {
74
+ "name": "showReload",
75
+ "type": "undefined | false | true",
76
+ "displayType": "undefined | false | true",
77
+ "optional": true,
78
+ "scalar": true,
79
+ "description": "Show the reload button. Default `true`."
80
+ },
81
+ {
82
+ "name": "showHome",
83
+ "type": "undefined | false | true",
84
+ "displayType": "undefined | false | true",
85
+ "optional": true,
86
+ "scalar": true,
87
+ "description": "Show the home button. Default `true`."
88
+ },
89
+ {
90
+ "name": "showPathField",
91
+ "type": "undefined | false | true",
92
+ "displayType": "undefined | false | true",
93
+ "optional": true,
94
+ "scalar": true,
95
+ "description": "Show the editable path/address field. Default `true`."
96
+ },
97
+ {
98
+ "name": "showTabs",
99
+ "type": "undefined | false | true",
100
+ "displayType": "undefined | false | true",
101
+ "optional": true,
102
+ "scalar": true,
103
+ "description": "Show the Preview|Code tab toggle. Default `true`."
104
+ },
105
+ {
106
+ "name": "expandable",
107
+ "type": "undefined | false | true",
108
+ "displayType": "undefined | false | true",
109
+ "optional": true,
110
+ "scalar": true,
111
+ "description": "Show the expand-to-fill button. Default `false` (opt-in)."
112
+ },
113
+ {
114
+ "name": "openInTab",
115
+ "type": "undefined | false | true",
116
+ "displayType": "undefined | false | true",
117
+ "optional": true,
118
+ "scalar": true,
119
+ "description": "Show the open-in-new-tab button. Default `false` (opt-in)."
120
+ },
121
+ {
122
+ "name": "standalone",
123
+ "type": "undefined | false | true",
124
+ "displayType": "undefined | false | true",
125
+ "optional": true,
126
+ "scalar": true,
127
+ "description": "Standalone chrome: rounded + bordered (default in-panel = square, borderless)."
128
+ },
129
+ {
130
+ "name": "readonlyPath",
131
+ "type": "undefined | false | true",
132
+ "displayType": "undefined | false | true",
133
+ "optional": true,
134
+ "scalar": true,
135
+ "description": "Make the path field read-only (visible, nav-tracking, non-editable)."
136
+ }
137
+ ],
138
+ "callbacks": [
139
+ {
140
+ "name": "onNavigate",
141
+ "type": "undefined | (url: string) => void",
142
+ "displayType": "undefined | (url: string) => void",
143
+ "description": "Fired when the preview navigates (back/forward/reload/path-edit/file-click)."
144
+ },
145
+ {
146
+ "name": "onTabChange",
147
+ "type": "undefined | (tab: ArtifactTab) => void",
148
+ "displayType": "undefined | (tab: ArtifactTab) => void",
149
+ "description": "Fired when the Preview|Code tab changes."
150
+ },
151
+ {
152
+ "name": "onFileSelect",
153
+ "type": "undefined | (path: string) => void",
154
+ "displayType": "undefined | (path: string) => void",
155
+ "description": "Fired when a file is selected in the tree."
156
+ },
157
+ {
158
+ "name": "onMaximizeChange",
159
+ "type": "undefined | (maximized: boolean) => void",
160
+ "displayType": "undefined | (maximized: boolean) => void",
161
+ "description": "Fired when the expand/restore button toggles the maximize view-state."
162
+ }
163
+ ],
164
+ "slots": [],
165
+ "tokens": [],
166
+ "extendsHtmlAttributes": true,
167
+ "description": "`Artifact` — a framed, switchable generated-artifact viewer. A functional nav toolbar (back · forward · reload · home + editable path field + Preview|Code toggle) over a sandboxed `<iframe>` (Preview) or a file-tree + `<kai-code-block>` (Code). The component self-navigates the iframe and emits `kai-navigate` / `kai-tab-change` / `kai-file-select` so a consumer can observe/sync."
168
+ },
169
+ {
170
+ "name": "Attachment",
171
+ "group": "Components",
172
+ "sourceFile": "src/components/attachments.tsx",
173
+ "props": [
174
+ {
175
+ "name": "data",
176
+ "type": "{ id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }",
177
+ "displayType": "{ id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }",
178
+ "optional": false,
179
+ "scalar": false,
180
+ "description": ""
181
+ }
182
+ ],
183
+ "callbacks": [
184
+ {
185
+ "name": "onRemove",
186
+ "type": "undefined | () => void",
187
+ "displayType": "undefined | () => void",
188
+ "description": ""
189
+ }
190
+ ],
191
+ "slots": [
192
+ {
193
+ "name": "children",
194
+ "description": ""
195
+ }
196
+ ],
197
+ "tokens": [],
198
+ "extendsHtmlAttributes": true,
199
+ "description": ""
200
+ },
201
+ {
202
+ "name": "AttachmentEmpty",
203
+ "group": "Components",
204
+ "sourceFile": "src/components/attachments.tsx",
205
+ "props": [],
206
+ "callbacks": [],
207
+ "slots": [
208
+ {
209
+ "name": "children",
210
+ "description": ""
211
+ }
212
+ ],
213
+ "tokens": [],
214
+ "extendsHtmlAttributes": true,
215
+ "description": ""
216
+ },
217
+ {
218
+ "name": "AttachmentHoverCard",
219
+ "group": "Components",
220
+ "sourceFile": "src/components/attachments.tsx",
221
+ "props": [
222
+ {
223
+ "name": "openDelay",
224
+ "type": "undefined | number",
225
+ "displayType": "undefined | number",
226
+ "optional": true,
227
+ "scalar": true,
228
+ "description": "",
229
+ "default": "0"
230
+ },
231
+ {
232
+ "name": "closeDelay",
233
+ "type": "undefined | number",
234
+ "displayType": "undefined | number",
235
+ "optional": true,
236
+ "scalar": true,
237
+ "description": "",
238
+ "default": "0"
239
+ }
240
+ ],
241
+ "callbacks": [],
242
+ "slots": [
243
+ {
244
+ "name": "children",
245
+ "description": ""
246
+ }
247
+ ],
248
+ "tokens": [],
249
+ "extendsHtmlAttributes": false,
250
+ "description": ""
251
+ },
252
+ {
253
+ "name": "AttachmentHoverCardContent",
254
+ "group": "Components",
255
+ "sourceFile": "src/components/attachments.tsx",
256
+ "props": [],
257
+ "callbacks": [],
258
+ "slots": [
259
+ {
260
+ "name": "children",
261
+ "description": ""
262
+ }
263
+ ],
264
+ "tokens": [],
265
+ "extendsHtmlAttributes": false,
266
+ "description": ""
267
+ },
268
+ {
269
+ "name": "AttachmentHoverCardTrigger",
270
+ "group": "Components",
271
+ "sourceFile": "src/components/attachments.tsx",
272
+ "props": [],
273
+ "callbacks": [],
274
+ "slots": [
275
+ {
276
+ "name": "children",
277
+ "description": ""
278
+ }
279
+ ],
280
+ "tokens": [],
281
+ "extendsHtmlAttributes": false,
282
+ "description": ""
283
+ },
284
+ {
285
+ "name": "AttachmentInfo",
286
+ "group": "Components",
287
+ "sourceFile": "src/components/attachments.tsx",
288
+ "props": [
289
+ {
290
+ "name": "showMediaType",
291
+ "type": "undefined | false | true",
292
+ "displayType": "undefined | false | true",
293
+ "optional": true,
294
+ "scalar": true,
295
+ "description": ""
296
+ }
297
+ ],
298
+ "callbacks": [],
299
+ "slots": [],
300
+ "tokens": [],
301
+ "extendsHtmlAttributes": true,
302
+ "description": ""
303
+ },
304
+ {
305
+ "name": "AttachmentPreview",
306
+ "group": "Components",
307
+ "sourceFile": "src/components/attachments.tsx",
308
+ "props": [],
309
+ "callbacks": [
310
+ {
311
+ "name": "fallbackIcon",
312
+ "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
313
+ "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
314
+ "description": ""
315
+ }
316
+ ],
317
+ "slots": [],
318
+ "tokens": [],
319
+ "extendsHtmlAttributes": true,
320
+ "description": ""
321
+ },
322
+ {
323
+ "name": "AttachmentRemove",
324
+ "group": "Components",
325
+ "sourceFile": "src/components/attachments.tsx",
326
+ "props": [
327
+ {
328
+ "name": "label",
329
+ "type": "undefined | string",
330
+ "displayType": "undefined | string",
331
+ "optional": true,
332
+ "scalar": true,
333
+ "description": "",
334
+ "default": "'Remove'"
335
+ }
336
+ ],
337
+ "callbacks": [],
338
+ "slots": [
339
+ {
340
+ "name": "children",
341
+ "description": ""
342
+ }
343
+ ],
344
+ "tokens": [],
345
+ "extendsHtmlAttributes": false,
346
+ "description": ""
347
+ },
348
+ {
349
+ "name": "Attachments",
350
+ "group": "Components",
351
+ "sourceFile": "src/components/attachments.tsx",
352
+ "props": [
353
+ {
354
+ "name": "variant",
355
+ "type": "undefined | \"grid\" | \"inline\" | \"list\"",
356
+ "displayType": "undefined | \"grid\" | \"inline\" | \"list\"",
357
+ "optional": true,
358
+ "scalar": true,
359
+ "description": "",
360
+ "default": "'grid'"
361
+ }
362
+ ],
363
+ "callbacks": [],
364
+ "slots": [
365
+ {
366
+ "name": "children",
367
+ "description": ""
368
+ }
369
+ ],
370
+ "tokens": [],
371
+ "extendsHtmlAttributes": true,
372
+ "description": ""
373
+ },
374
+ {
375
+ "name": "BarsLoader",
376
+ "group": "Components",
377
+ "sourceFile": "src/components/loader.tsx",
378
+ "props": [
379
+ {
380
+ "name": "size",
381
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
382
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
383
+ "optional": true,
384
+ "scalar": true,
385
+ "description": "",
386
+ "default": "'md'"
387
+ }
388
+ ],
389
+ "callbacks": [],
390
+ "slots": [],
391
+ "tokens": [],
392
+ "extendsHtmlAttributes": false,
393
+ "description": ""
394
+ },
395
+ {
396
+ "name": "Card",
397
+ "group": "Components",
398
+ "sourceFile": "src/components/card.tsx",
399
+ "props": [
400
+ {
401
+ "name": "heading",
402
+ "type": "undefined | string",
403
+ "displayType": "undefined | string",
404
+ "optional": true,
405
+ "scalar": true,
406
+ "description": "Heading rendered in the card chrome (the contract's CardEnvelope.title). NB: NOT `title` — `title` is a reserved IDL attr (see define.tsx RESERVED)."
407
+ },
408
+ {
409
+ "name": "description",
410
+ "type": "undefined | string",
411
+ "displayType": "undefined | string",
412
+ "optional": true,
413
+ "scalar": true,
414
+ "description": "Optional supporting text under the heading."
415
+ },
416
+ {
417
+ "name": "errorMessage",
418
+ "type": "undefined | string",
419
+ "displayType": "undefined | string",
420
+ "optional": true,
421
+ "scalar": true,
422
+ "description": "When set, the card renders its standard inline error state INSTEAD of body."
423
+ },
424
+ {
425
+ "name": "dense",
426
+ "type": "undefined | false | true",
427
+ "displayType": "undefined | false | true",
428
+ "optional": true,
429
+ "scalar": true,
430
+ "description": "Compact spacing for dense lists of cards."
431
+ },
432
+ {
433
+ "name": "headingId",
434
+ "type": "undefined | string",
435
+ "displayType": "undefined | string",
436
+ "optional": true,
437
+ "scalar": true,
438
+ "description": "Stable id for the heading (so composing cards can `aria-labelledby` it). Auto-generated when omitted."
439
+ }
440
+ ],
441
+ "callbacks": [
442
+ {
443
+ "name": "media",
444
+ "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
445
+ "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
446
+ "description": "Media region (image/icon) rendered above the heading."
447
+ },
448
+ {
449
+ "name": "actions",
450
+ "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
451
+ "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
452
+ "description": "Footer action region (buttons)."
453
+ }
454
+ ],
455
+ "slots": [],
456
+ "tokens": [],
457
+ "extendsHtmlAttributes": true,
458
+ "description": "`Card` — the shared presentational chrome every native card composes from: an optional media region, a heading + description, a body (default slot), an actions footer, and one consistent inline **error** state (the contract's \"never a broken/partial card\" rule). It is intentionally chrome-only: it reads no `CardContext` and emits no `CardEvent` — the cards that compose it (e.g. `kai-form`) own the contract interaction."
459
+ },
460
+ {
461
+ "name": "CardFallback",
462
+ "group": "Components",
463
+ "sourceFile": "src/components/card-fallback.tsx",
464
+ "props": [
465
+ {
466
+ "name": "type",
467
+ "type": "string",
468
+ "displayType": "string",
469
+ "optional": false,
470
+ "scalar": true,
471
+ "description": "The unrecognized envelope type, shown to aid debugging."
472
+ },
473
+ {
474
+ "name": "cardId",
475
+ "type": "undefined | string",
476
+ "displayType": "undefined | string",
477
+ "optional": true,
478
+ "scalar": true,
479
+ "description": "The envelope id (for parity with cards; not displayed)."
480
+ }
481
+ ],
482
+ "callbacks": [],
483
+ "slots": [],
484
+ "tokens": [],
485
+ "extendsHtmlAttributes": false,
486
+ "description": "Inert, themed fallback for an unsupported card type. Emits nothing itself — the dispatcher emits the contract `error` event alongside rendering this."
487
+ },
488
+ {
489
+ "name": "CardRenderer",
490
+ "group": "Components",
491
+ "sourceFile": "src/components/card-renderer.tsx",
492
+ "props": [
493
+ {
494
+ "name": "envelope",
495
+ "type": "{ 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 } }",
496
+ "displayType": "{ 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 } }",
497
+ "optional": false,
498
+ "scalar": false,
499
+ "description": ""
500
+ },
501
+ {
502
+ "name": "types",
503
+ "type": "undefined | CardComponentMap",
504
+ "displayType": "undefined | CardComponentMap",
505
+ "optional": true,
506
+ "scalar": false,
507
+ "description": "Add/override type→component entries (merged over the built-ins)."
508
+ }
509
+ ],
510
+ "callbacks": [],
511
+ "slots": [],
512
+ "tokens": [],
513
+ "extendsHtmlAttributes": false,
514
+ "description": ""
515
+ },
516
+ {
517
+ "name": "ChainOfThought",
518
+ "group": "Components",
519
+ "sourceFile": "src/components/chain-of-thought.tsx",
520
+ "props": [],
521
+ "callbacks": [],
522
+ "slots": [
523
+ {
524
+ "name": "children",
525
+ "description": ""
526
+ }
527
+ ],
528
+ "tokens": [],
529
+ "extendsHtmlAttributes": false,
530
+ "description": ""
531
+ },
532
+ {
533
+ "name": "ChainOfThoughtContent",
534
+ "group": "Components",
535
+ "sourceFile": "src/components/chain-of-thought.tsx",
536
+ "props": [],
537
+ "callbacks": [],
538
+ "slots": [
539
+ {
540
+ "name": "children",
541
+ "description": ""
542
+ }
543
+ ],
544
+ "tokens": [],
545
+ "extendsHtmlAttributes": false,
546
+ "description": ""
547
+ },
548
+ {
549
+ "name": "ChainOfThoughtItem",
550
+ "group": "Components",
551
+ "sourceFile": "src/components/chain-of-thought.tsx",
552
+ "props": [],
553
+ "callbacks": [],
554
+ "slots": [
555
+ {
556
+ "name": "children",
557
+ "description": ""
558
+ }
559
+ ],
560
+ "tokens": [],
561
+ "extendsHtmlAttributes": true,
562
+ "description": ""
563
+ },
564
+ {
565
+ "name": "ChainOfThoughtStep",
566
+ "group": "Components",
567
+ "sourceFile": "src/components/chain-of-thought.tsx",
568
+ "props": [
569
+ {
570
+ "name": "isLast",
571
+ "type": "undefined | false | true",
572
+ "displayType": "undefined | false | true",
573
+ "optional": true,
574
+ "scalar": true,
575
+ "description": "",
576
+ "default": "false"
577
+ }
578
+ ],
579
+ "callbacks": [],
580
+ "slots": [
581
+ {
582
+ "name": "children",
583
+ "description": ""
584
+ }
585
+ ],
586
+ "tokens": [],
587
+ "extendsHtmlAttributes": false,
588
+ "description": ""
589
+ },
590
+ {
591
+ "name": "ChainOfThoughtTrigger",
592
+ "group": "Components",
593
+ "sourceFile": "src/components/chain-of-thought.tsx",
594
+ "props": [
595
+ {
596
+ "name": "swapIconOnHover",
597
+ "type": "undefined | false | true",
598
+ "displayType": "undefined | false | true",
599
+ "optional": true,
600
+ "scalar": true,
601
+ "description": "",
602
+ "default": "true"
603
+ }
604
+ ],
605
+ "callbacks": [
606
+ {
607
+ "name": "leftIcon",
608
+ "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
609
+ "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
610
+ "description": ""
611
+ }
612
+ ],
613
+ "slots": [
614
+ {
615
+ "name": "children",
616
+ "description": ""
617
+ }
618
+ ],
619
+ "tokens": [],
620
+ "extendsHtmlAttributes": false,
621
+ "description": ""
622
+ },
623
+ {
624
+ "name": "ChatContainer",
625
+ "group": "Components",
626
+ "sourceFile": "src/components/chat-container.tsx",
627
+ "props": [],
628
+ "callbacks": [],
629
+ "slots": [
630
+ {
631
+ "name": "children",
632
+ "description": ""
633
+ }
634
+ ],
635
+ "tokens": [],
636
+ "extendsHtmlAttributes": true,
637
+ "description": ""
638
+ },
639
+ {
640
+ "name": "ChatContainerContent",
641
+ "group": "Components",
642
+ "sourceFile": "src/components/chat-container.tsx",
643
+ "props": [],
644
+ "callbacks": [],
645
+ "slots": [
646
+ {
647
+ "name": "children",
648
+ "description": ""
649
+ }
650
+ ],
651
+ "tokens": [],
652
+ "extendsHtmlAttributes": true,
653
+ "description": ""
654
+ },
655
+ {
656
+ "name": "ChatContainerRoot",
657
+ "group": "Components",
658
+ "sourceFile": "src/components/chat-container.tsx",
659
+ "props": [],
660
+ "callbacks": [],
661
+ "slots": [
662
+ {
663
+ "name": "children",
664
+ "description": ""
665
+ }
666
+ ],
667
+ "tokens": [],
668
+ "extendsHtmlAttributes": true,
669
+ "description": ""
670
+ },
671
+ {
672
+ "name": "ChatContainerScrollAnchor",
673
+ "group": "Components",
674
+ "sourceFile": "src/components/chat-container.tsx",
675
+ "props": [],
676
+ "callbacks": [
677
+ {
678
+ "name": "ref",
679
+ "type": "undefined | HTMLDivElement | (el: HTMLDivElement) => void",
680
+ "displayType": "undefined | HTMLDivElement | (el: HTMLDivElement) => void",
681
+ "description": ""
682
+ }
683
+ ],
684
+ "slots": [],
685
+ "tokens": [],
686
+ "extendsHtmlAttributes": true,
687
+ "description": ""
688
+ },
689
+ {
690
+ "name": "ChatScopePicker",
691
+ "group": "Components",
692
+ "sourceFile": "src/components/chat-scope-picker.tsx",
693
+ "props": [
694
+ {
695
+ "name": "currentLabel",
696
+ "type": "string",
697
+ "displayType": "string",
698
+ "optional": false,
699
+ "scalar": true,
700
+ "description": ""
701
+ },
702
+ {
703
+ "name": "availableAuthors",
704
+ "type": "undefined | string[]",
705
+ "displayType": "undefined | string[]",
706
+ "optional": true,
707
+ "scalar": false,
708
+ "description": ""
709
+ },
710
+ {
711
+ "name": "availableTags",
712
+ "type": "undefined | string[]",
713
+ "displayType": "undefined | string[]",
714
+ "optional": true,
715
+ "scalar": false,
716
+ "description": ""
717
+ }
718
+ ],
719
+ "callbacks": [
720
+ {
721
+ "name": "onScopeChange",
722
+ "type": "(filters: SearchFilters | undefined) => void",
723
+ "displayType": "(filters: SearchFilters | undefined) => void",
724
+ "description": ""
725
+ }
726
+ ],
727
+ "slots": [],
728
+ "tokens": [],
729
+ "extendsHtmlAttributes": false,
730
+ "description": ""
731
+ },
732
+ {
733
+ "name": "Checkpoint",
734
+ "group": "Components",
735
+ "sourceFile": "src/components/checkpoint.tsx",
736
+ "props": [],
737
+ "callbacks": [],
738
+ "slots": [
739
+ {
740
+ "name": "children",
741
+ "description": ""
742
+ }
743
+ ],
744
+ "tokens": [],
745
+ "extendsHtmlAttributes": true,
746
+ "description": ""
747
+ },
748
+ {
749
+ "name": "CheckpointIcon",
750
+ "group": "Components",
751
+ "sourceFile": "src/components/checkpoint.tsx",
752
+ "props": [],
753
+ "callbacks": [],
754
+ "slots": [
755
+ {
756
+ "name": "children",
757
+ "description": ""
758
+ }
759
+ ],
760
+ "tokens": [],
761
+ "extendsHtmlAttributes": false,
762
+ "description": ""
763
+ },
764
+ {
765
+ "name": "CheckpointTrigger",
766
+ "group": "Components",
767
+ "sourceFile": "src/components/checkpoint.tsx",
768
+ "props": [
769
+ {
770
+ "name": "tooltip",
771
+ "type": "undefined | string",
772
+ "displayType": "undefined | string",
773
+ "optional": true,
774
+ "scalar": true,
775
+ "description": ""
776
+ },
777
+ {
778
+ "name": "aria-label",
779
+ "type": "undefined | string",
780
+ "displayType": "undefined | string",
781
+ "optional": true,
782
+ "scalar": true,
783
+ "description": "Accessible name for the button — required when it has no visible text (icon-only)."
784
+ },
785
+ {
786
+ "name": "variant",
787
+ "type": "undefined | \"default\" | \"ghost\" | \"outline\"",
788
+ "displayType": "undefined | \"default\" | \"ghost\" | \"outline\"",
789
+ "optional": true,
790
+ "scalar": true,
791
+ "description": "",
792
+ "default": "'ghost'"
793
+ },
794
+ {
795
+ "name": "size",
796
+ "type": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
797
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
798
+ "optional": true,
799
+ "scalar": true,
800
+ "description": "",
801
+ "default": "'sm'"
802
+ }
803
+ ],
804
+ "callbacks": [
805
+ {
806
+ "name": "onClick",
807
+ "type": "undefined | () => void",
808
+ "displayType": "undefined | () => void",
809
+ "description": ""
810
+ }
811
+ ],
812
+ "slots": [
813
+ {
814
+ "name": "children",
815
+ "description": ""
816
+ }
817
+ ],
818
+ "tokens": [],
819
+ "extendsHtmlAttributes": false,
820
+ "description": ""
821
+ },
822
+ {
823
+ "name": "ChoiceCard",
824
+ "group": "Components",
825
+ "sourceFile": "src/components/choice-card.tsx",
826
+ "props": [
827
+ {
828
+ "name": "data",
829
+ "type": "undefined | { prompt?: undefined | string; options: { id: string; label: string; description?: undefined | string; media?: undefined | { image?: undefined | string; imageAlt?: undefined | string; icon?: undefined | string }; meta?: undefined | string; recommended?: undefined | false | true; disabled?: undefined | false | true; payload?: unknown }[]; allowOther?: undefined | false | true | { label?: undefined | string; placeholder?: undefined | string }; submitLabel?: undefined | string }",
830
+ "displayType": "undefined | { prompt?: undefined | string; options: { id: string; label: string; description?: undefined | string; media?: undefined | { image?: undefined | string; imageAlt?: undefined | string; icon?: undefined | string }; meta?: undefined | string; recommended?: undefined | false | true; disabled?: undefined | false | true; payload?: unknown }[]; allowOther?: undefined | false | true | { label?: undefined | string; placeholder?: undefined | string }; submitLabel?: undefined | string }",
831
+ "optional": true,
832
+ "scalar": false,
833
+ "description": "The choice definition (CardEnvelope.data)."
834
+ },
835
+ {
836
+ "name": "cardId",
837
+ "type": "undefined | string",
838
+ "displayType": "undefined | string",
839
+ "optional": true,
840
+ "scalar": true,
841
+ "description": "The card id used to correlate every emitted CardEvent."
842
+ },
843
+ {
844
+ "name": "heading",
845
+ "type": "undefined | string",
846
+ "displayType": "undefined | string",
847
+ "optional": true,
848
+ "scalar": true,
849
+ "description": "The envelope title rendered in the card chrome."
850
+ },
851
+ {
852
+ "name": "hostElement",
853
+ "type": "undefined | HTMLElement",
854
+ "displayType": "undefined | HTMLElement",
855
+ "optional": true,
856
+ "scalar": false,
857
+ "description": "The custom-element host node, for the bubbling `kai-card` fallback emit."
858
+ },
859
+ {
860
+ "name": "resolution",
861
+ "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
862
+ "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
863
+ "optional": true,
864
+ "scalar": false,
865
+ "description": "When set, render the chromed read-only view instead of the interactive radiogroup."
866
+ }
867
+ ],
868
+ "callbacks": [
869
+ {
870
+ "name": "host",
871
+ "type": "undefined | { context: () => import(\"/Users/home/Projects/kitn-ai/kitn-chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
872
+ "displayType": "undefined | { context: () => import(\"/Users/home/Projects/kitn-ai/kitn-chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
873
+ "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kai-card` CustomEvent off `hostElement`)."
874
+ }
875
+ ],
876
+ "slots": [],
877
+ "tokens": [],
878
+ "extendsHtmlAttributes": false,
879
+ "description": "`ChoiceCard` — a single-select \"pick one of N rich options\" card (plans, products, flights, quick replies) inside `Card` chrome. The options are a WAI-ARIA radiogroup (list rows) with roving tabindex: clicking a row (or Space/Enter on the focused row) **selects** it locally without emitting; a **Submit** button below the list then emits the Card contract's **`action`** verb (`{ kind:'action', cardId, action: option.id, payload }`) and resolves the card (chosen option shown read-only) so the same pick can't double-fire. An optional `allowOther` free-text escape appends a selectable \"Other…\" row; selecting it reveals an inline text input, and the same Submit emits `action:'__other__'` with `{ text }`. Emits `ready` on mount and `error` for an unusable definition (inline error state)."
880
+ },
881
+ {
882
+ "name": "CircularLoader",
883
+ "group": "Components",
884
+ "sourceFile": "src/components/loader.tsx",
885
+ "props": [
886
+ {
887
+ "name": "size",
888
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
889
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
890
+ "optional": true,
891
+ "scalar": true,
892
+ "description": "",
893
+ "default": "'md'"
894
+ }
895
+ ],
896
+ "callbacks": [],
897
+ "slots": [],
898
+ "tokens": [],
899
+ "extendsHtmlAttributes": false,
900
+ "description": ""
901
+ },
902
+ {
903
+ "name": "ClassicLoader",
904
+ "group": "Components",
905
+ "sourceFile": "src/components/loader.tsx",
906
+ "props": [
907
+ {
908
+ "name": "size",
909
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
910
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
911
+ "optional": true,
912
+ "scalar": true,
913
+ "description": "",
914
+ "default": "'md'"
915
+ }
916
+ ],
917
+ "callbacks": [],
918
+ "slots": [],
919
+ "tokens": [],
920
+ "extendsHtmlAttributes": false,
921
+ "description": ""
922
+ },
923
+ {
924
+ "name": "CodeBlock",
925
+ "group": "Components",
926
+ "sourceFile": "src/components/code-block.tsx",
927
+ "props": [],
928
+ "callbacks": [],
929
+ "slots": [
930
+ {
931
+ "name": "children",
932
+ "description": ""
933
+ }
934
+ ],
935
+ "tokens": [
936
+ "--color-code-foreground"
937
+ ],
938
+ "extendsHtmlAttributes": true,
939
+ "description": ""
940
+ },
941
+ {
942
+ "name": "CodeBlockCode",
943
+ "group": "Components",
944
+ "sourceFile": "src/components/code-block.tsx",
945
+ "props": [
946
+ {
947
+ "name": "code",
948
+ "type": "string",
949
+ "displayType": "string",
950
+ "optional": false,
951
+ "scalar": true,
952
+ "description": ""
953
+ },
954
+ {
955
+ "name": "language",
956
+ "type": "undefined | string",
957
+ "displayType": "undefined | string",
958
+ "optional": true,
959
+ "scalar": true,
960
+ "description": "",
961
+ "default": "'tsx'"
962
+ },
963
+ {
964
+ "name": "theme",
965
+ "type": "undefined | string",
966
+ "displayType": "undefined | string",
967
+ "optional": true,
968
+ "scalar": true,
969
+ "description": ""
970
+ }
971
+ ],
972
+ "callbacks": [],
973
+ "slots": [],
974
+ "tokens": [
975
+ "--color-code-foreground"
976
+ ],
977
+ "extendsHtmlAttributes": true,
978
+ "description": ""
979
+ },
980
+ {
981
+ "name": "CodeBlockGroup",
982
+ "group": "Components",
983
+ "sourceFile": "src/components/code-block.tsx",
984
+ "props": [],
985
+ "callbacks": [],
986
+ "slots": [
987
+ {
988
+ "name": "children",
989
+ "description": ""
990
+ }
991
+ ],
992
+ "tokens": [],
993
+ "extendsHtmlAttributes": true,
994
+ "description": ""
995
+ },
996
+ {
997
+ "name": "ConfirmCard",
998
+ "group": "Components",
999
+ "sourceFile": "src/components/confirm-card.tsx",
1000
+ "props": [
1001
+ {
1002
+ "name": "data",
1003
+ "type": "undefined | { heading?: undefined | string; body?: undefined | string; tone?: undefined | \"default\" | \"warning\" | \"danger\"; actions: { id: string; label: string; style?: undefined | \"default\" | \"primary\" | \"destructive\"; payload?: unknown; default?: undefined | false | true }[]; dismissible?: undefined | false | true }",
1004
+ "displayType": "undefined | { heading?: undefined | string; body?: undefined | string; tone?: undefined | \"default\" | \"warning\" | \"danger\"; actions: { id: string; label: string; style?: undefined | \"default\" | \"primary\" | \"destructive\"; payload?: unknown; default?: undefined | false | true }[]; dismissible?: undefined | false | true }",
1005
+ "optional": true,
1006
+ "scalar": false,
1007
+ "description": "The confirm definition (CardEnvelope.data)."
1008
+ },
1009
+ {
1010
+ "name": "cardId",
1011
+ "type": "undefined | string",
1012
+ "displayType": "undefined | string",
1013
+ "optional": true,
1014
+ "scalar": true,
1015
+ "description": "The card id used to correlate every emitted CardEvent."
1016
+ },
1017
+ {
1018
+ "name": "heading",
1019
+ "type": "undefined | string",
1020
+ "displayType": "undefined | string",
1021
+ "optional": true,
1022
+ "scalar": true,
1023
+ "description": "The envelope title rendered in the card chrome."
1024
+ },
1025
+ {
1026
+ "name": "hostElement",
1027
+ "type": "undefined | HTMLElement",
1028
+ "displayType": "undefined | HTMLElement",
1029
+ "optional": true,
1030
+ "scalar": false,
1031
+ "description": "The custom-element host node, for the bubbling `kai-card` fallback emit."
1032
+ },
1033
+ {
1034
+ "name": "autofocus",
1035
+ "type": "undefined | false | true",
1036
+ "displayType": "undefined | false | true",
1037
+ "optional": true,
1038
+ "scalar": true,
1039
+ "description": "Focus the default action on mount. Default OFF (no focus-stealing mid-stream)."
1040
+ },
1041
+ {
1042
+ "name": "resolution",
1043
+ "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
1044
+ "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
1045
+ "optional": true,
1046
+ "scalar": false,
1047
+ "description": "When set, render the chromed read-only view instead of the buttons."
1048
+ }
1049
+ ],
1050
+ "callbacks": [
1051
+ {
1052
+ "name": "host",
1053
+ "type": "undefined | { context: () => import(\"/Users/home/Projects/kitn-ai/kitn-chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
1054
+ "displayType": "undefined | { context: () => import(\"/Users/home/Projects/kitn-ai/kitn-chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
1055
+ "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kai-card` CustomEvent off `hostElement`)."
1056
+ }
1057
+ ],
1058
+ "slots": [],
1059
+ "tokens": [],
1060
+ "extendsHtmlAttributes": false,
1061
+ "description": "`ConfirmCard` — a named-intent approval card. Renders a title + body + a small set of action buttons inside `Card` chrome. Activating an action emits the Card contract's `action` verb (`{ kind:'action', cardId, action, payload }`) and resolves the card (other actions disabled, the chosen one marked) so the same approval can't double-fire. Emits `ready` on mount, `dismiss` for the optional close affordance, and `error` for an unusable definition (inline error state)."
1062
+ },
1063
+ {
1064
+ "name": "Context",
1065
+ "group": "Components",
1066
+ "sourceFile": "src/components/context.tsx",
1067
+ "props": [
1068
+ {
1069
+ "name": "usedTokens",
1070
+ "type": "number",
1071
+ "displayType": "number",
1072
+ "optional": false,
1073
+ "scalar": true,
1074
+ "description": ""
1075
+ },
1076
+ {
1077
+ "name": "maxTokens",
1078
+ "type": "number",
1079
+ "displayType": "number",
1080
+ "optional": false,
1081
+ "scalar": true,
1082
+ "description": ""
1083
+ },
1084
+ {
1085
+ "name": "inputTokens",
1086
+ "type": "undefined | number",
1087
+ "displayType": "undefined | number",
1088
+ "optional": true,
1089
+ "scalar": true,
1090
+ "description": ""
1091
+ },
1092
+ {
1093
+ "name": "outputTokens",
1094
+ "type": "undefined | number",
1095
+ "displayType": "undefined | number",
1096
+ "optional": true,
1097
+ "scalar": true,
1098
+ "description": ""
1099
+ },
1100
+ {
1101
+ "name": "reasoningTokens",
1102
+ "type": "undefined | number",
1103
+ "displayType": "undefined | number",
1104
+ "optional": true,
1105
+ "scalar": true,
1106
+ "description": ""
1107
+ },
1108
+ {
1109
+ "name": "cacheTokens",
1110
+ "type": "undefined | number",
1111
+ "displayType": "undefined | number",
1112
+ "optional": true,
1113
+ "scalar": true,
1114
+ "description": ""
1115
+ },
1116
+ {
1117
+ "name": "estimatedCost",
1118
+ "type": "undefined | number",
1119
+ "displayType": "undefined | number",
1120
+ "optional": true,
1121
+ "scalar": true,
1122
+ "description": ""
1123
+ },
1124
+ {
1125
+ "name": "warnThreshold",
1126
+ "type": "undefined | number",
1127
+ "displayType": "undefined | number",
1128
+ "optional": true,
1129
+ "scalar": true,
1130
+ "description": "Fraction (0–1) above which the progress bar turns yellow. Defaults to `0.7` (70%)."
1131
+ },
1132
+ {
1133
+ "name": "dangerThreshold",
1134
+ "type": "undefined | number",
1135
+ "displayType": "undefined | number",
1136
+ "optional": true,
1137
+ "scalar": true,
1138
+ "description": "Fraction (0–1) above which the progress bar turns red. Defaults to `0.9` (90%)."
1139
+ }
1140
+ ],
1141
+ "callbacks": [],
1142
+ "slots": [
1143
+ {
1144
+ "name": "children",
1145
+ "description": ""
1146
+ }
1147
+ ],
1148
+ "tokens": [],
1149
+ "extendsHtmlAttributes": false,
1150
+ "description": ""
1151
+ },
1152
+ {
1153
+ "name": "ContextCacheUsage",
1154
+ "group": "Components",
1155
+ "sourceFile": "src/components/context.tsx",
1156
+ "props": [],
1157
+ "callbacks": [],
1158
+ "slots": [
1159
+ {
1160
+ "name": "children",
1161
+ "description": ""
1162
+ }
1163
+ ],
1164
+ "tokens": [],
1165
+ "extendsHtmlAttributes": false,
1166
+ "description": ""
1167
+ },
1168
+ {
1169
+ "name": "ContextContent",
1170
+ "group": "Components",
1171
+ "sourceFile": "src/components/context.tsx",
1172
+ "props": [],
1173
+ "callbacks": [],
1174
+ "slots": [
1175
+ {
1176
+ "name": "children",
1177
+ "description": ""
1178
+ }
1179
+ ],
1180
+ "tokens": [],
1181
+ "extendsHtmlAttributes": false,
1182
+ "description": ""
1183
+ },
1184
+ {
1185
+ "name": "ContextContentBody",
1186
+ "group": "Components",
1187
+ "sourceFile": "src/components/context.tsx",
1188
+ "props": [],
1189
+ "callbacks": [],
1190
+ "slots": [
1191
+ {
1192
+ "name": "children",
1193
+ "description": ""
1194
+ }
1195
+ ],
1196
+ "tokens": [],
1197
+ "extendsHtmlAttributes": false,
1198
+ "description": ""
1199
+ },
1200
+ {
1201
+ "name": "ContextContentFooter",
1202
+ "group": "Components",
1203
+ "sourceFile": "src/components/context.tsx",
1204
+ "props": [],
1205
+ "callbacks": [],
1206
+ "slots": [
1207
+ {
1208
+ "name": "children",
1209
+ "description": ""
1210
+ }
1211
+ ],
1212
+ "tokens": [],
1213
+ "extendsHtmlAttributes": false,
1214
+ "description": ""
1215
+ },
1216
+ {
1217
+ "name": "ContextContentHeader",
1218
+ "group": "Components",
1219
+ "sourceFile": "src/components/context.tsx",
1220
+ "props": [],
1221
+ "callbacks": [],
1222
+ "slots": [
1223
+ {
1224
+ "name": "children",
1225
+ "description": ""
1226
+ }
1227
+ ],
1228
+ "tokens": [],
1229
+ "extendsHtmlAttributes": false,
1230
+ "description": ""
1231
+ },
1232
+ {
1233
+ "name": "ContextInputUsage",
1234
+ "group": "Components",
1235
+ "sourceFile": "src/components/context.tsx",
1236
+ "props": [],
1237
+ "callbacks": [],
1238
+ "slots": [
1239
+ {
1240
+ "name": "children",
1241
+ "description": ""
1242
+ }
1243
+ ],
1244
+ "tokens": [],
1245
+ "extendsHtmlAttributes": false,
1246
+ "description": ""
1247
+ },
1248
+ {
1249
+ "name": "ContextOutputUsage",
1250
+ "group": "Components",
1251
+ "sourceFile": "src/components/context.tsx",
1252
+ "props": [],
1253
+ "callbacks": [],
1254
+ "slots": [
1255
+ {
1256
+ "name": "children",
1257
+ "description": ""
1258
+ }
1259
+ ],
1260
+ "tokens": [],
1261
+ "extendsHtmlAttributes": false,
1262
+ "description": ""
1263
+ },
1264
+ {
1265
+ "name": "ContextReasoningUsage",
1266
+ "group": "Components",
1267
+ "sourceFile": "src/components/context.tsx",
1268
+ "props": [],
1269
+ "callbacks": [],
1270
+ "slots": [
1271
+ {
1272
+ "name": "children",
1273
+ "description": ""
1274
+ }
1275
+ ],
1276
+ "tokens": [],
1277
+ "extendsHtmlAttributes": false,
1278
+ "description": ""
1279
+ },
1280
+ {
1281
+ "name": "ContextTrigger",
1282
+ "group": "Components",
1283
+ "sourceFile": "src/components/context.tsx",
1284
+ "props": [],
1285
+ "callbacks": [],
1286
+ "slots": [
1287
+ {
1288
+ "name": "children",
1289
+ "description": ""
1290
+ }
1291
+ ],
1292
+ "tokens": [],
1293
+ "extendsHtmlAttributes": false,
1294
+ "description": ""
1295
+ },
1296
+ {
1297
+ "name": "ConversationItem",
1298
+ "group": "Components",
1299
+ "sourceFile": "src/components/conversation-item.tsx",
1300
+ "props": [
1301
+ {
1302
+ "name": "conversation",
1303
+ "type": "{ id: string; title: string; groupId?: undefined | string; scope: { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt: string; updatedAt: string }",
1304
+ "displayType": "{ 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 }",
1305
+ "optional": false,
1306
+ "scalar": false,
1307
+ "description": ""
1308
+ },
1309
+ {
1310
+ "name": "isActive",
1311
+ "type": "false | true",
1312
+ "displayType": "false | true",
1313
+ "optional": false,
1314
+ "scalar": true,
1315
+ "description": ""
1316
+ }
1317
+ ],
1318
+ "callbacks": [
1319
+ {
1320
+ "name": "onSelect",
1321
+ "type": "(id: string) => void",
1322
+ "displayType": "(id: string) => void",
1323
+ "description": ""
1324
+ }
1325
+ ],
1326
+ "slots": [],
1327
+ "tokens": [
1328
+ "--color-sidebar"
1329
+ ],
1330
+ "extendsHtmlAttributes": false,
1331
+ "description": ""
1332
+ },
1333
+ {
1334
+ "name": "ConversationList",
1335
+ "group": "Components",
1336
+ "sourceFile": "src/components/conversation-list.tsx",
1337
+ "props": [
1338
+ {
1339
+ "name": "groups",
1340
+ "type": "{ id: string; userId?: undefined | string; teamId?: undefined | string; name: string; sortOrder: number; createdAt: string }[]",
1341
+ "displayType": "ConversationGroup[]",
1342
+ "optional": false,
1343
+ "scalar": false,
1344
+ "description": ""
1345
+ },
1346
+ {
1347
+ "name": "conversations",
1348
+ "type": "{ id: string; title: string; groupId?: undefined | string; scope: { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt: string; updatedAt: string }[]",
1349
+ "displayType": "ConversationSummary[]",
1350
+ "optional": false,
1351
+ "scalar": false,
1352
+ "description": ""
1353
+ },
1354
+ {
1355
+ "name": "activeId",
1356
+ "type": "undefined | string",
1357
+ "displayType": "undefined | string",
1358
+ "optional": true,
1359
+ "scalar": true,
1360
+ "description": ""
1361
+ }
1362
+ ],
1363
+ "callbacks": [
1364
+ {
1365
+ "name": "onSelect",
1366
+ "type": "(id: string) => void",
1367
+ "displayType": "(id: string) => void",
1368
+ "description": ""
1369
+ },
1370
+ {
1371
+ "name": "onNewChat",
1372
+ "type": "() => void",
1373
+ "displayType": "() => void",
1374
+ "description": ""
1375
+ },
1376
+ {
1377
+ "name": "onToggleSidebar",
1378
+ "type": "undefined | () => void",
1379
+ "displayType": "undefined | () => void",
1380
+ "description": ""
1381
+ }
1382
+ ],
1383
+ "slots": [],
1384
+ "tokens": [
1385
+ "--color-sidebar",
1386
+ "--color-scrollbar-thumb",
1387
+ "--color-scrollbar-thumb-hover"
1388
+ ],
1389
+ "extendsHtmlAttributes": false,
1390
+ "description": ""
1391
+ },
1392
+ {
1393
+ "name": "DotsLoader",
1394
+ "group": "Components",
1395
+ "sourceFile": "src/components/loader.tsx",
1396
+ "props": [
1397
+ {
1398
+ "name": "size",
1399
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
1400
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
1401
+ "optional": true,
1402
+ "scalar": true,
1403
+ "description": "",
1404
+ "default": "'md'"
1405
+ }
1406
+ ],
1407
+ "callbacks": [],
1408
+ "slots": [],
1409
+ "tokens": [],
1410
+ "extendsHtmlAttributes": false,
1411
+ "description": ""
1412
+ },
1413
+ {
1414
+ "name": "Embed",
1415
+ "group": "Components",
1416
+ "sourceFile": "src/components/embed.tsx",
1417
+ "props": [
1418
+ {
1419
+ "name": "cardId",
1420
+ "type": "string",
1421
+ "displayType": "string",
1422
+ "optional": false,
1423
+ "scalar": true,
1424
+ "description": "The card id correlating every emitted event."
1425
+ },
1426
+ {
1427
+ "name": "data",
1428
+ "type": "{ 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\" }",
1429
+ "displayType": "{ 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\" }",
1430
+ "optional": false,
1431
+ "scalar": false,
1432
+ "description": "The embed payload (data-down)."
1433
+ }
1434
+ ],
1435
+ "callbacks": [
1436
+ {
1437
+ "name": "onEmit",
1438
+ "type": "undefined | (event: CardEvent) => void",
1439
+ "displayType": "undefined | (event: CardEvent) => void",
1440
+ "description": "Emit a contract CardEvent up (host routes it)."
1441
+ }
1442
+ ],
1443
+ "slots": [],
1444
+ "tokens": [],
1445
+ "extendsHtmlAttributes": true,
1446
+ "description": "`Embed` — a privacy-first lazy media facade. Initial render is a poster + a play button: NO provider iframe, NO provider JS, NO cookies until the user opts in. On play it swaps in the provider `<iframe>` (youtube-nocookie / vimeo dnt / allowlisted generic). A persistent \"Open on {provider}\" affordance routes the contract `open` verb so a blocked embed is never a dead end. The only verbs it emits are lifecycle `ready`, `open`, and failure `error`."
1447
+ },
1448
+ {
1449
+ "name": "Empty",
1450
+ "group": "Components",
1451
+ "sourceFile": "src/components/empty.tsx",
1452
+ "props": [],
1453
+ "callbacks": [],
1454
+ "slots": [
1455
+ {
1456
+ "name": "children",
1457
+ "description": ""
1458
+ }
1459
+ ],
1460
+ "tokens": [],
1461
+ "extendsHtmlAttributes": true,
1462
+ "description": ""
1463
+ },
1464
+ {
1465
+ "name": "EmptyContent",
1466
+ "group": "Components",
1467
+ "sourceFile": "src/components/empty.tsx",
1468
+ "props": [],
1469
+ "callbacks": [],
1470
+ "slots": [
1471
+ {
1472
+ "name": "children",
1473
+ "description": ""
1474
+ }
1475
+ ],
1476
+ "tokens": [],
1477
+ "extendsHtmlAttributes": true,
1478
+ "description": ""
1479
+ },
1480
+ {
1481
+ "name": "EmptyDescription",
1482
+ "group": "Components",
1483
+ "sourceFile": "src/components/empty.tsx",
1484
+ "props": [],
1485
+ "callbacks": [],
1486
+ "slots": [
1487
+ {
1488
+ "name": "children",
1489
+ "description": ""
1490
+ }
1491
+ ],
1492
+ "tokens": [],
1493
+ "extendsHtmlAttributes": true,
1494
+ "description": ""
1495
+ },
1496
+ {
1497
+ "name": "EmptyHeader",
1498
+ "group": "Components",
1499
+ "sourceFile": "src/components/empty.tsx",
1500
+ "props": [],
1501
+ "callbacks": [],
1502
+ "slots": [
1503
+ {
1504
+ "name": "children",
1505
+ "description": ""
1506
+ }
1507
+ ],
1508
+ "tokens": [],
1509
+ "extendsHtmlAttributes": true,
1510
+ "description": ""
1511
+ },
1512
+ {
1513
+ "name": "EmptyMedia",
1514
+ "group": "Components",
1515
+ "sourceFile": "src/components/empty.tsx",
1516
+ "props": [
1517
+ {
1518
+ "name": "variant",
1519
+ "type": "undefined | null | \"default\" | \"icon\"",
1520
+ "displayType": "undefined | null | \"default\" | \"icon\"",
1521
+ "optional": true,
1522
+ "scalar": false,
1523
+ "description": "",
1524
+ "default": "'default'"
1525
+ }
1526
+ ],
1527
+ "callbacks": [],
1528
+ "slots": [
1529
+ {
1530
+ "name": "children",
1531
+ "description": ""
1532
+ }
1533
+ ],
1534
+ "tokens": [],
1535
+ "extendsHtmlAttributes": true,
1536
+ "description": ""
1537
+ },
1538
+ {
1539
+ "name": "EmptyTitle",
1540
+ "group": "Components",
1541
+ "sourceFile": "src/components/empty.tsx",
1542
+ "props": [],
1543
+ "callbacks": [],
1544
+ "slots": [
1545
+ {
1546
+ "name": "children",
1547
+ "description": ""
1548
+ }
1549
+ ],
1550
+ "tokens": [],
1551
+ "extendsHtmlAttributes": true,
1552
+ "description": ""
1553
+ },
1554
+ {
1555
+ "name": "FeedbackBar",
1556
+ "group": "Components",
1557
+ "sourceFile": "src/components/feedback-bar.tsx",
1558
+ "props": [
1559
+ {
1560
+ "name": "title",
1561
+ "type": "undefined | string",
1562
+ "displayType": "undefined | string",
1563
+ "optional": true,
1564
+ "scalar": true,
1565
+ "description": "Prompt shown in the initial \"ask\" state."
1566
+ },
1567
+ {
1568
+ "name": "collectDetail",
1569
+ "type": "undefined | false | true",
1570
+ "displayType": "undefined | false | true",
1571
+ "optional": true,
1572
+ "scalar": true,
1573
+ "description": "When set, a not-helpful vote opens an optional detail form before the thank-you confirmation. Off → a vote goes straight to thanks."
1574
+ },
1575
+ {
1576
+ "name": "categories",
1577
+ "type": "undefined | string[]",
1578
+ "displayType": "undefined | string[]",
1579
+ "optional": true,
1580
+ "scalar": false,
1581
+ "description": "Optional category chips offered in the detail form."
1582
+ },
1583
+ {
1584
+ "name": "detailTitle",
1585
+ "type": "undefined | string",
1586
+ "displayType": "undefined | string",
1587
+ "optional": true,
1588
+ "scalar": true,
1589
+ "description": "Heading for the detail form.",
1590
+ "default": "'What went wrong?'"
1591
+ },
1592
+ {
1593
+ "name": "detailPlaceholder",
1594
+ "type": "undefined | string",
1595
+ "displayType": "undefined | string",
1596
+ "optional": true,
1597
+ "scalar": true,
1598
+ "description": "Placeholder for the detail comment box.",
1599
+ "default": "'Tell us more (optional)'"
1600
+ },
1601
+ {
1602
+ "name": "submitLabel",
1603
+ "type": "undefined | string",
1604
+ "displayType": "undefined | string",
1605
+ "optional": true,
1606
+ "scalar": true,
1607
+ "description": "Submit button label in the detail form.",
1608
+ "default": "'Submit'"
1609
+ },
1610
+ {
1611
+ "name": "thanksMessage",
1612
+ "type": "undefined | string",
1613
+ "displayType": "undefined | string",
1614
+ "optional": true,
1615
+ "scalar": true,
1616
+ "description": "Confirmation copy shown after a vote/submit.",
1617
+ "default": "'Thanks for your feedback'"
1618
+ }
1619
+ ],
1620
+ "callbacks": [
1621
+ {
1622
+ "name": "icon",
1623
+ "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
1624
+ "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
1625
+ "description": "Optional leading icon shown before the title."
1626
+ },
1627
+ {
1628
+ "name": "onFeedback",
1629
+ "type": "undefined | (value: FeedbackValue) => void",
1630
+ "displayType": "undefined | (value: FeedbackValue) => void",
1631
+ "description": "Fired immediately when a rating button is clicked (the vote is recorded even if the user never fills in the detail form)."
1632
+ },
1633
+ {
1634
+ "name": "onSubmitDetail",
1635
+ "type": "undefined | (detail: FeedbackDetail) => void",
1636
+ "displayType": "undefined | (detail: FeedbackDetail) => void",
1637
+ "description": "Fired when the optional detail form is submitted."
1638
+ },
1639
+ {
1640
+ "name": "onClose",
1641
+ "type": "undefined | () => void",
1642
+ "displayType": "undefined | () => void",
1643
+ "description": "Fired when the bar is dismissed via the close (X) button."
1644
+ }
1645
+ ],
1646
+ "slots": [],
1647
+ "tokens": [],
1648
+ "extendsHtmlAttributes": false,
1649
+ "description": "An inline thumbs up/down feedback bar that owns its own flow: it asks, then (optionally, on a not-helpful vote) collects a category + comment, then confirms with a thank-you — all in place, the way ChatGPT/Claude do it. The vote fires `onFeedback` immediately; the optional detail fires `onSubmitDetail`; `onClose` dismisses the bar."
1650
+ },
1651
+ {
1652
+ "name": "FileTree",
1653
+ "group": "Components",
1654
+ "sourceFile": "src/components/file-tree.tsx",
1655
+ "props": [
1656
+ {
1657
+ "name": "files",
1658
+ "type": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
1659
+ "displayType": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
1660
+ "optional": false,
1661
+ "scalar": false,
1662
+ "description": "Flat file list; folders are derived from `/`-delimited paths."
1663
+ },
1664
+ {
1665
+ "name": "activeFile",
1666
+ "type": "undefined | string",
1667
+ "displayType": "undefined | string",
1668
+ "optional": true,
1669
+ "scalar": true,
1670
+ "description": "Currently-selected file path (highlighted)."
1671
+ },
1672
+ {
1673
+ "name": "defaultExpanded",
1674
+ "type": "undefined | string[]",
1675
+ "displayType": "undefined | string[]",
1676
+ "optional": true,
1677
+ "scalar": false,
1678
+ "description": "Folder paths expanded by default. When omitted, all folders start open.",
1679
+ "default": "[]"
1680
+ }
1681
+ ],
1682
+ "callbacks": [
1683
+ {
1684
+ "name": "onSelect",
1685
+ "type": "undefined | (path: string, file: FileTreeFile) => void",
1686
+ "displayType": "undefined | (path: string, file: FileTreeFile) => void",
1687
+ "description": "Called with a file's path when the user selects it."
1688
+ }
1689
+ ],
1690
+ "slots": [],
1691
+ "tokens": [],
1692
+ "extendsHtmlAttributes": true,
1693
+ "description": "`FileTree` — a collapsible, keyboard-navigable file explorer built from a flat list of `/`-delimited paths. ARIA `tree`/`treeitem`/`group`. Selecting a file calls `onSelect(path, file)`."
1694
+ },
1695
+ {
1696
+ "name": "FileUpload",
1697
+ "group": "Components",
1698
+ "sourceFile": "src/components/file-upload.tsx",
1699
+ "props": [
1700
+ {
1701
+ "name": "multiple",
1702
+ "type": "undefined | false | true",
1703
+ "displayType": "undefined | false | true",
1704
+ "optional": true,
1705
+ "scalar": true,
1706
+ "description": "",
1707
+ "default": "true"
1708
+ },
1709
+ {
1710
+ "name": "accept",
1711
+ "type": "undefined | string",
1712
+ "displayType": "undefined | string",
1713
+ "optional": true,
1714
+ "scalar": true,
1715
+ "description": ""
1716
+ },
1717
+ {
1718
+ "name": "disabled",
1719
+ "type": "undefined | false | true",
1720
+ "displayType": "undefined | false | true",
1721
+ "optional": true,
1722
+ "scalar": true,
1723
+ "description": ""
1724
+ }
1725
+ ],
1726
+ "callbacks": [
1727
+ {
1728
+ "name": "onFilesAdded",
1729
+ "type": "(files: File[]) => void",
1730
+ "displayType": "(files: File[]) => void",
1731
+ "description": ""
1732
+ }
1733
+ ],
1734
+ "slots": [
1735
+ {
1736
+ "name": "children",
1737
+ "description": ""
1738
+ }
1739
+ ],
1740
+ "tokens": [],
1741
+ "extendsHtmlAttributes": false,
1742
+ "description": ""
1743
+ },
1744
+ {
1745
+ "name": "FileUploadContent",
1746
+ "group": "Components",
1747
+ "sourceFile": "src/components/file-upload.tsx",
1748
+ "props": [],
1749
+ "callbacks": [],
1750
+ "slots": [],
1751
+ "tokens": [],
1752
+ "extendsHtmlAttributes": true,
1753
+ "description": ""
1754
+ },
1755
+ {
1756
+ "name": "FileUploadTrigger",
1757
+ "group": "Components",
1758
+ "sourceFile": "src/components/file-upload.tsx",
1759
+ "props": [],
1760
+ "callbacks": [],
1761
+ "slots": [
1762
+ {
1763
+ "name": "children",
1764
+ "description": ""
1765
+ }
1766
+ ],
1767
+ "tokens": [],
1768
+ "extendsHtmlAttributes": true,
1769
+ "description": ""
1770
+ },
1771
+ {
1772
+ "name": "Form",
1773
+ "group": "Components",
1774
+ "sourceFile": "src/components/form.tsx",
1775
+ "props": [
1776
+ {
1777
+ "name": "data",
1778
+ "type": "undefined | { type: \"object\"; title?: undefined | string; description?: undefined | string; required?: undefined | string[]; properties: Record<string, FormField>; x-kai-order?: undefined | string[]; x-kai-inlineMax?: undefined | number; x-kai-submitLabel?: undefined | string; x-kai-dismissible?: undefined | false | true; x-kai-actions?: undefined | { id: string; label: string; variant?: undefined | \"default\" | \"ghost\" | \"outline\" }[] }",
1779
+ "displayType": "undefined | { type: \"object\"; title?: undefined | string; description?: undefined | string; required?: undefined | string[]; properties: Record<string, FormField>; x-kai-order?: undefined | string[]; x-kai-inlineMax?: undefined | number; x-kai-submitLabel?: undefined | string; x-kai-dismissible?: undefined | false | true; x-kai-actions?: undefined | { id: string; label: string; variant?: undefined | \"default\" | \"ghost\" | \"outline\" }[] }",
1780
+ "optional": true,
1781
+ "scalar": false,
1782
+ "description": "The form definition (CardEnvelope.data)."
1783
+ },
1784
+ {
1785
+ "name": "cardId",
1786
+ "type": "undefined | string",
1787
+ "displayType": "undefined | string",
1788
+ "optional": true,
1789
+ "scalar": true,
1790
+ "description": "The card id used to correlate every emitted CardEvent."
1791
+ },
1792
+ {
1793
+ "name": "heading",
1794
+ "type": "undefined | string",
1795
+ "displayType": "undefined | string",
1796
+ "optional": true,
1797
+ "scalar": true,
1798
+ "description": "The envelope title rendered in the card chrome."
1799
+ },
1800
+ {
1801
+ "name": "hostElement",
1802
+ "type": "undefined | HTMLElement",
1803
+ "displayType": "undefined | HTMLElement",
1804
+ "optional": true,
1805
+ "scalar": false,
1806
+ "description": "The custom-element host node, for the bubbling `kai-card` fallback emit."
1807
+ },
1808
+ {
1809
+ "name": "resolution",
1810
+ "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
1811
+ "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
1812
+ "optional": true,
1813
+ "scalar": false,
1814
+ "description": "When set, render the chromed read-only view instead of the form inputs."
1815
+ }
1816
+ ],
1817
+ "callbacks": [
1818
+ {
1819
+ "name": "host",
1820
+ "type": "undefined | { context: () => import(\"/Users/home/Projects/kitn-ai/kitn-chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
1821
+ "displayType": "undefined | { context: () => import(\"/Users/home/Projects/kitn-ai/kitn-chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
1822
+ "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kai-card` CustomEvent off `hostElement`)."
1823
+ }
1824
+ ],
1825
+ "slots": [],
1826
+ "tokens": [],
1827
+ "extendsHtmlAttributes": false,
1828
+ "description": "`Form` — renders a JSON-Schema form definition into themed, accessible widgets inside `Card` chrome, validates input against that schema, and emits the collected, coerced, validated object up the Card contract as `submit`. Reads context/emits via a `CardProvider` when present, else the bubbling `kai-card` CustomEvent."
1829
+ },
1830
+ {
1831
+ "name": "Image",
1832
+ "group": "Components",
1833
+ "sourceFile": "src/components/image.tsx",
1834
+ "props": [
1835
+ {
1836
+ "name": "alt",
1837
+ "type": "string",
1838
+ "displayType": "string",
1839
+ "optional": false,
1840
+ "scalar": true,
1841
+ "description": ""
1842
+ },
1843
+ {
1844
+ "name": "base64",
1845
+ "type": "undefined | string",
1846
+ "displayType": "undefined | string",
1847
+ "optional": true,
1848
+ "scalar": true,
1849
+ "description": ""
1850
+ },
1851
+ {
1852
+ "name": "uint8Array",
1853
+ "type": "undefined | Uint8Array<ArrayBufferLike>",
1854
+ "displayType": "undefined | Uint8Array<ArrayBufferLike>",
1855
+ "optional": true,
1856
+ "scalar": false,
1857
+ "description": ""
1858
+ },
1859
+ {
1860
+ "name": "mediaType",
1861
+ "type": "undefined | string",
1862
+ "displayType": "undefined | string",
1863
+ "optional": true,
1864
+ "scalar": true,
1865
+ "description": "",
1866
+ "default": "'image/png'"
1867
+ }
1868
+ ],
1869
+ "callbacks": [],
1870
+ "slots": [],
1871
+ "tokens": [],
1872
+ "extendsHtmlAttributes": false,
1873
+ "description": ""
1874
+ },
1875
+ {
1876
+ "name": "LinkPreview",
1877
+ "group": "Components",
1878
+ "sourceFile": "src/components/link-preview.tsx",
1879
+ "props": [
1880
+ {
1881
+ "name": "cardId",
1882
+ "type": "string",
1883
+ "displayType": "string",
1884
+ "optional": false,
1885
+ "scalar": true,
1886
+ "description": "The card id correlating every emitted event."
1887
+ },
1888
+ {
1889
+ "name": "data",
1890
+ "type": "{ url: string; title?: undefined | string; description?: undefined | string; image?: undefined | string; imageAlt?: undefined | string; favicon?: undefined | string; domain?: undefined | string; siteName?: undefined | string }",
1891
+ "displayType": "{ url: string; title?: undefined | string; description?: undefined | string; image?: undefined | string; imageAlt?: undefined | string; favicon?: undefined | string; domain?: undefined | string; siteName?: undefined | string }",
1892
+ "optional": false,
1893
+ "scalar": false,
1894
+ "description": "The link payload (data-down)."
1895
+ }
1896
+ ],
1897
+ "callbacks": [
1898
+ {
1899
+ "name": "onEmit",
1900
+ "type": "undefined | (event: CardEvent) => void",
1901
+ "displayType": "undefined | (event: CardEvent) => void",
1902
+ "description": "Emit a contract CardEvent up (host routes it)."
1903
+ }
1904
+ ],
1905
+ "slots": [],
1906
+ "tokens": [],
1907
+ "extendsHtmlAttributes": false,
1908
+ "description": "`LinkPreview` — a pure, themed, accessible rich link / OG preview. Renders from the supplied metadata; it never fetches the network itself. When the payload is a bare `{ url }` and an app has registered a `configureLinkPreview` fetcher, it shows a skeleton, calls the hook, merges the result, and renders. Activating the card (click / Enter / Space) emits the contract `open` verb (`target:'tab'`); the host policy performs the navigation so it can veto/redirect."
1909
+ },
1910
+ {
1911
+ "name": "Loader",
1912
+ "group": "Components",
1913
+ "sourceFile": "src/components/loader.tsx",
1914
+ "props": [
1915
+ {
1916
+ "name": "variant",
1917
+ "type": "undefined | \"circular\" | \"classic\" | \"pulse\" | \"pulse-dot\" | \"dots\" | \"typing\" | \"wave\" | \"bars\" | \"terminal\" | \"text-blink\" | \"text-shimmer\" | \"loading-dots\"",
1918
+ "displayType": "LoaderVariant | undefined",
1919
+ "optional": true,
1920
+ "scalar": true,
1921
+ "description": ""
1922
+ },
1923
+ {
1924
+ "name": "size",
1925
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
1926
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
1927
+ "optional": true,
1928
+ "scalar": true,
1929
+ "description": ""
1930
+ },
1931
+ {
1932
+ "name": "text",
1933
+ "type": "undefined | string",
1934
+ "displayType": "undefined | string",
1935
+ "optional": true,
1936
+ "scalar": true,
1937
+ "description": ""
1938
+ }
1939
+ ],
1940
+ "callbacks": [],
1941
+ "slots": [],
1942
+ "tokens": [],
1943
+ "extendsHtmlAttributes": false,
1944
+ "description": ""
1945
+ },
1946
+ {
1947
+ "name": "Markdown",
1948
+ "group": "Components",
1949
+ "sourceFile": "src/components/markdown.tsx",
1950
+ "props": [
1951
+ {
1952
+ "name": "content",
1953
+ "type": "string",
1954
+ "displayType": "string",
1955
+ "optional": false,
1956
+ "scalar": true,
1957
+ "description": ""
1958
+ },
1959
+ {
1960
+ "name": "id",
1961
+ "type": "undefined | string",
1962
+ "displayType": "undefined | string",
1963
+ "optional": true,
1964
+ "scalar": true,
1965
+ "description": ""
1966
+ },
1967
+ {
1968
+ "name": "codeTheme",
1969
+ "type": "undefined | string",
1970
+ "displayType": "undefined | string",
1971
+ "optional": true,
1972
+ "scalar": true,
1973
+ "description": ""
1974
+ }
1975
+ ],
1976
+ "callbacks": [],
1977
+ "slots": [],
1978
+ "tokens": [],
1979
+ "extendsHtmlAttributes": false,
1980
+ "description": ""
1981
+ },
1982
+ {
1983
+ "name": "Message",
1984
+ "group": "Components",
1985
+ "sourceFile": "src/components/message.tsx",
1986
+ "props": [],
1987
+ "callbacks": [],
1988
+ "slots": [
1989
+ {
1990
+ "name": "children",
1991
+ "description": ""
1992
+ }
1993
+ ],
1994
+ "tokens": [],
1995
+ "extendsHtmlAttributes": true,
1996
+ "description": ""
1997
+ },
1998
+ {
1999
+ "name": "MessageAction",
2000
+ "group": "Components",
2001
+ "sourceFile": "src/components/message.tsx",
2002
+ "props": [
2003
+ {
2004
+ "name": "tooltip",
2005
+ "type": "string",
2006
+ "displayType": "string",
2007
+ "optional": false,
2008
+ "scalar": true,
2009
+ "description": ""
2010
+ },
2011
+ {
2012
+ "name": "side",
2013
+ "type": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\"",
2014
+ "displayType": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\"",
2015
+ "optional": true,
2016
+ "scalar": true,
2017
+ "description": ""
2018
+ }
2019
+ ],
2020
+ "callbacks": [],
2021
+ "slots": [
2022
+ {
2023
+ "name": "children",
2024
+ "description": ""
2025
+ }
2026
+ ],
2027
+ "tokens": [],
2028
+ "extendsHtmlAttributes": false,
2029
+ "description": ""
2030
+ },
2031
+ {
2032
+ "name": "MessageActions",
2033
+ "group": "Components",
2034
+ "sourceFile": "src/components/message.tsx",
2035
+ "props": [],
2036
+ "callbacks": [],
2037
+ "slots": [
2038
+ {
2039
+ "name": "children",
2040
+ "description": ""
2041
+ }
2042
+ ],
2043
+ "tokens": [],
2044
+ "extendsHtmlAttributes": true,
2045
+ "description": ""
2046
+ },
2047
+ {
2048
+ "name": "MessageAvatar",
2049
+ "group": "Components",
2050
+ "sourceFile": "src/components/message.tsx",
2051
+ "props": [
2052
+ {
2053
+ "name": "src",
2054
+ "type": "string",
2055
+ "displayType": "string",
2056
+ "optional": false,
2057
+ "scalar": true,
2058
+ "description": ""
2059
+ },
2060
+ {
2061
+ "name": "alt",
2062
+ "type": "string",
2063
+ "displayType": "string",
2064
+ "optional": false,
2065
+ "scalar": true,
2066
+ "description": ""
2067
+ },
2068
+ {
2069
+ "name": "fallback",
2070
+ "type": "undefined | string",
2071
+ "displayType": "undefined | string",
2072
+ "optional": true,
2073
+ "scalar": true,
2074
+ "description": ""
2075
+ }
2076
+ ],
2077
+ "callbacks": [],
2078
+ "slots": [],
2079
+ "tokens": [],
2080
+ "extendsHtmlAttributes": false,
2081
+ "description": ""
2082
+ },
2083
+ {
2084
+ "name": "MessageContent",
2085
+ "group": "Components",
2086
+ "sourceFile": "src/components/message.tsx",
2087
+ "props": [
2088
+ {
2089
+ "name": "markdown",
2090
+ "type": "undefined | false | true",
2091
+ "displayType": "undefined | false | true",
2092
+ "optional": true,
2093
+ "scalar": true,
2094
+ "description": ""
2095
+ }
2096
+ ],
2097
+ "callbacks": [],
2098
+ "slots": [
2099
+ {
2100
+ "name": "children",
2101
+ "description": ""
2102
+ }
2103
+ ],
2104
+ "tokens": [],
2105
+ "extendsHtmlAttributes": true,
2106
+ "description": ""
2107
+ },
2108
+ {
2109
+ "name": "MessageCopyButton",
2110
+ "group": "Components",
2111
+ "sourceFile": "src/components/message.tsx",
2112
+ "props": [
2113
+ {
2114
+ "name": "content",
2115
+ "type": "string",
2116
+ "displayType": "string",
2117
+ "optional": false,
2118
+ "scalar": true,
2119
+ "description": ""
2120
+ },
2121
+ {
2122
+ "name": "size",
2123
+ "type": "undefined | number",
2124
+ "displayType": "undefined | number",
2125
+ "optional": true,
2126
+ "scalar": true,
2127
+ "description": "",
2128
+ "default": "14"
2129
+ }
2130
+ ],
2131
+ "callbacks": [],
2132
+ "slots": [],
2133
+ "tokens": [],
2134
+ "extendsHtmlAttributes": false,
2135
+ "description": ""
2136
+ },
2137
+ {
2138
+ "name": "MessageSkills",
2139
+ "group": "Components",
2140
+ "sourceFile": "src/components/message-skills.tsx",
2141
+ "props": [
2142
+ {
2143
+ "name": "skills",
2144
+ "type": "{ id: string; name: string }[]",
2145
+ "displayType": "{ id: string; name: string }[]",
2146
+ "optional": false,
2147
+ "scalar": false,
2148
+ "description": ""
2149
+ }
2150
+ ],
2151
+ "callbacks": [],
2152
+ "slots": [],
2153
+ "tokens": [],
2154
+ "extendsHtmlAttributes": false,
2155
+ "description": "Displays skill badges above a message to indicate which skills were active when the message was generated."
2156
+ },
2157
+ {
2158
+ "name": "ModelSwitcher",
2159
+ "group": "Components",
2160
+ "sourceFile": "src/components/model-switcher.tsx",
2161
+ "props": [
2162
+ {
2163
+ "name": "models",
2164
+ "type": "{ id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]",
2165
+ "displayType": "{ id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]",
2166
+ "optional": false,
2167
+ "scalar": false,
2168
+ "description": ""
2169
+ },
2170
+ {
2171
+ "name": "currentModelId",
2172
+ "type": "string",
2173
+ "displayType": "string",
2174
+ "optional": false,
2175
+ "scalar": true,
2176
+ "description": ""
2177
+ }
2178
+ ],
2179
+ "callbacks": [
2180
+ {
2181
+ "name": "onModelChange",
2182
+ "type": "(modelId: string) => void",
2183
+ "displayType": "(modelId: string) => void",
2184
+ "description": ""
2185
+ }
2186
+ ],
2187
+ "slots": [],
2188
+ "tokens": [],
2189
+ "extendsHtmlAttributes": false,
2190
+ "description": ""
2191
+ },
2192
+ {
2193
+ "name": "PromptInput",
2194
+ "group": "Components",
2195
+ "sourceFile": "src/components/prompt-input.tsx",
2196
+ "props": [
2197
+ {
2198
+ "name": "isLoading",
2199
+ "type": "undefined | false | true",
2200
+ "displayType": "undefined | false | true",
2201
+ "optional": true,
2202
+ "scalar": true,
2203
+ "description": "",
2204
+ "default": "false"
2205
+ },
2206
+ {
2207
+ "name": "value",
2208
+ "type": "undefined | string",
2209
+ "displayType": "undefined | string",
2210
+ "optional": true,
2211
+ "scalar": true,
2212
+ "description": "",
2213
+ "default": "''"
2214
+ },
2215
+ {
2216
+ "name": "maxHeight",
2217
+ "type": "undefined | string | number",
2218
+ "displayType": "undefined | string | number",
2219
+ "optional": true,
2220
+ "scalar": true,
2221
+ "description": "",
2222
+ "default": "240"
2223
+ },
2224
+ {
2225
+ "name": "disabled",
2226
+ "type": "undefined | false | true",
2227
+ "displayType": "undefined | false | true",
2228
+ "optional": true,
2229
+ "scalar": true,
2230
+ "description": ""
2231
+ }
2232
+ ],
2233
+ "callbacks": [
2234
+ {
2235
+ "name": "onValueChange",
2236
+ "type": "undefined | (value: string) => void",
2237
+ "displayType": "undefined | (value: string) => void",
2238
+ "description": ""
2239
+ },
2240
+ {
2241
+ "name": "onSubmit",
2242
+ "type": "undefined | () => void",
2243
+ "displayType": "undefined | () => void",
2244
+ "description": ""
2245
+ }
2246
+ ],
2247
+ "slots": [
2248
+ {
2249
+ "name": "children",
2250
+ "description": ""
2251
+ }
2252
+ ],
2253
+ "tokens": [],
2254
+ "extendsHtmlAttributes": true,
2255
+ "description": ""
2256
+ },
2257
+ {
2258
+ "name": "PromptInputAction",
2259
+ "group": "Components",
2260
+ "sourceFile": "src/components/prompt-input.tsx",
2261
+ "props": [
2262
+ {
2263
+ "name": "tooltip",
2264
+ "type": "undefined | string",
2265
+ "displayType": "undefined | string",
2266
+ "optional": true,
2267
+ "scalar": true,
2268
+ "description": ""
2269
+ },
2270
+ {
2271
+ "name": "side",
2272
+ "type": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\"",
2273
+ "displayType": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\"",
2274
+ "optional": true,
2275
+ "scalar": true,
2276
+ "description": ""
2277
+ }
2278
+ ],
2279
+ "callbacks": [],
2280
+ "slots": [
2281
+ {
2282
+ "name": "children",
2283
+ "description": ""
2284
+ }
2285
+ ],
2286
+ "tokens": [],
2287
+ "extendsHtmlAttributes": false,
2288
+ "description": ""
2289
+ },
2290
+ {
2291
+ "name": "PromptInputActions",
2292
+ "group": "Components",
2293
+ "sourceFile": "src/components/prompt-input.tsx",
2294
+ "props": [],
2295
+ "callbacks": [],
2296
+ "slots": [
2297
+ {
2298
+ "name": "children",
2299
+ "description": ""
2300
+ }
2301
+ ],
2302
+ "tokens": [],
2303
+ "extendsHtmlAttributes": true,
2304
+ "description": ""
2305
+ },
2306
+ {
2307
+ "name": "PromptInputTextarea",
2308
+ "group": "Components",
2309
+ "sourceFile": "src/components/prompt-input.tsx",
2310
+ "props": [
2311
+ {
2312
+ "name": "disableAutosize",
2313
+ "type": "undefined | false | true",
2314
+ "displayType": "undefined | false | true",
2315
+ "optional": true,
2316
+ "scalar": true,
2317
+ "description": ""
2318
+ }
2319
+ ],
2320
+ "callbacks": [],
2321
+ "slots": [],
2322
+ "tokens": [],
2323
+ "extendsHtmlAttributes": true,
2324
+ "description": ""
2325
+ },
2326
+ {
2327
+ "name": "PromptSuggestion",
2328
+ "group": "Components",
2329
+ "sourceFile": "src/components/prompt-suggestion.tsx",
2330
+ "props": [
2331
+ {
2332
+ "name": "variant",
2333
+ "type": "undefined | \"default\" | \"ghost\" | \"outline\"",
2334
+ "displayType": "undefined | \"default\" | \"ghost\" | \"outline\"",
2335
+ "optional": true,
2336
+ "scalar": true,
2337
+ "description": "",
2338
+ "default": "'outline'"
2339
+ },
2340
+ {
2341
+ "name": "size",
2342
+ "type": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
2343
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
2344
+ "optional": true,
2345
+ "scalar": true,
2346
+ "description": "",
2347
+ "default": "'lg'"
2348
+ },
2349
+ {
2350
+ "name": "highlight",
2351
+ "type": "undefined | string",
2352
+ "displayType": "undefined | string",
2353
+ "optional": true,
2354
+ "scalar": true,
2355
+ "description": ""
2356
+ },
2357
+ {
2358
+ "name": "block",
2359
+ "type": "undefined | false | true",
2360
+ "displayType": "undefined | false | true",
2361
+ "optional": true,
2362
+ "scalar": true,
2363
+ "description": "Render as a full-width, left-aligned list row (the \"suggested questions\" idiom) instead of a rounded pill. Wraps long text. Ignored in highlight mode, which is always a list row."
2364
+ }
2365
+ ],
2366
+ "callbacks": [],
2367
+ "slots": [
2368
+ {
2369
+ "name": "children",
2370
+ "description": ""
2371
+ }
2372
+ ],
2373
+ "tokens": [],
2374
+ "extendsHtmlAttributes": true,
2375
+ "description": ""
2376
+ },
2377
+ {
2378
+ "name": "PulseDotLoader",
2379
+ "group": "Components",
2380
+ "sourceFile": "src/components/loader.tsx",
2381
+ "props": [
2382
+ {
2383
+ "name": "size",
2384
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
2385
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
2386
+ "optional": true,
2387
+ "scalar": true,
2388
+ "description": "",
2389
+ "default": "'md'"
2390
+ }
2391
+ ],
2392
+ "callbacks": [],
2393
+ "slots": [],
2394
+ "tokens": [],
2395
+ "extendsHtmlAttributes": false,
2396
+ "description": ""
2397
+ },
2398
+ {
2399
+ "name": "PulseLoader",
2400
+ "group": "Components",
2401
+ "sourceFile": "src/components/loader.tsx",
2402
+ "props": [
2403
+ {
2404
+ "name": "size",
2405
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
2406
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
2407
+ "optional": true,
2408
+ "scalar": true,
2409
+ "description": "",
2410
+ "default": "'md'"
2411
+ }
2412
+ ],
2413
+ "callbacks": [],
2414
+ "slots": [],
2415
+ "tokens": [],
2416
+ "extendsHtmlAttributes": false,
2417
+ "description": ""
2418
+ },
2419
+ {
2420
+ "name": "Reasoning",
2421
+ "group": "Components",
2422
+ "sourceFile": "src/components/reasoning.tsx",
2423
+ "props": [
2424
+ {
2425
+ "name": "open",
2426
+ "type": "undefined | false | true",
2427
+ "displayType": "undefined | false | true",
2428
+ "optional": true,
2429
+ "scalar": true,
2430
+ "description": ""
2431
+ },
2432
+ {
2433
+ "name": "isStreaming",
2434
+ "type": "undefined | false | true",
2435
+ "displayType": "undefined | false | true",
2436
+ "optional": true,
2437
+ "scalar": true,
2438
+ "description": ""
2439
+ }
2440
+ ],
2441
+ "callbacks": [
2442
+ {
2443
+ "name": "onOpenChange",
2444
+ "type": "undefined | (open: boolean) => void",
2445
+ "displayType": "undefined | (open: boolean) => void",
2446
+ "description": ""
2447
+ }
2448
+ ],
2449
+ "slots": [
2450
+ {
2451
+ "name": "children",
2452
+ "description": ""
2453
+ }
2454
+ ],
2455
+ "tokens": [],
2456
+ "extendsHtmlAttributes": false,
2457
+ "description": ""
2458
+ },
2459
+ {
2460
+ "name": "ReasoningContent",
2461
+ "group": "Components",
2462
+ "sourceFile": "src/components/reasoning.tsx",
2463
+ "props": [
2464
+ {
2465
+ "name": "markdown",
2466
+ "type": "undefined | false | true",
2467
+ "displayType": "undefined | false | true",
2468
+ "optional": true,
2469
+ "scalar": true,
2470
+ "description": ""
2471
+ },
2472
+ {
2473
+ "name": "contentClass",
2474
+ "type": "undefined | string",
2475
+ "displayType": "undefined | string",
2476
+ "optional": true,
2477
+ "scalar": true,
2478
+ "description": ""
2479
+ }
2480
+ ],
2481
+ "callbacks": [],
2482
+ "slots": [
2483
+ {
2484
+ "name": "children",
2485
+ "description": ""
2486
+ }
2487
+ ],
2488
+ "tokens": [],
2489
+ "extendsHtmlAttributes": true,
2490
+ "description": ""
2491
+ },
2492
+ {
2493
+ "name": "ReasoningTrigger",
2494
+ "group": "Components",
2495
+ "sourceFile": "src/components/reasoning.tsx",
2496
+ "props": [],
2497
+ "callbacks": [],
2498
+ "slots": [
2499
+ {
2500
+ "name": "children",
2501
+ "description": ""
2502
+ }
2503
+ ],
2504
+ "tokens": [],
2505
+ "extendsHtmlAttributes": true,
2506
+ "description": ""
2507
+ },
2508
+ {
2509
+ "name": "ResponseStream",
2510
+ "group": "Components",
2511
+ "sourceFile": "src/components/response-stream.tsx",
2512
+ "props": [
2513
+ {
2514
+ "name": "textStream",
2515
+ "type": "string | AsyncIterable<string>",
2516
+ "displayType": "string | AsyncIterable<string>",
2517
+ "optional": false,
2518
+ "scalar": false,
2519
+ "description": ""
2520
+ },
2521
+ {
2522
+ "name": "mode",
2523
+ "type": "undefined | \"typewriter\" | \"fade\"",
2524
+ "displayType": "undefined | \"typewriter\" | \"fade\"",
2525
+ "optional": true,
2526
+ "scalar": true,
2527
+ "description": "",
2528
+ "default": "'typewriter'"
2529
+ },
2530
+ {
2531
+ "name": "speed",
2532
+ "type": "undefined | number",
2533
+ "displayType": "undefined | number",
2534
+ "optional": true,
2535
+ "scalar": true,
2536
+ "description": "",
2537
+ "default": "20"
2538
+ },
2539
+ {
2540
+ "name": "as",
2541
+ "type": "undefined | string",
2542
+ "displayType": "undefined | string",
2543
+ "optional": true,
2544
+ "scalar": true,
2545
+ "description": ""
2546
+ },
2547
+ {
2548
+ "name": "fadeDuration",
2549
+ "type": "undefined | number",
2550
+ "displayType": "undefined | number",
2551
+ "optional": true,
2552
+ "scalar": true,
2553
+ "description": ""
2554
+ },
2555
+ {
2556
+ "name": "segmentDelay",
2557
+ "type": "undefined | number",
2558
+ "displayType": "undefined | number",
2559
+ "optional": true,
2560
+ "scalar": true,
2561
+ "description": ""
2562
+ },
2563
+ {
2564
+ "name": "characterChunkSize",
2565
+ "type": "undefined | number",
2566
+ "displayType": "undefined | number",
2567
+ "optional": true,
2568
+ "scalar": true,
2569
+ "description": ""
2570
+ }
2571
+ ],
2572
+ "callbacks": [
2573
+ {
2574
+ "name": "onComplete",
2575
+ "type": "undefined | () => void",
2576
+ "displayType": "undefined | () => void",
2577
+ "description": ""
2578
+ }
2579
+ ],
2580
+ "slots": [],
2581
+ "tokens": [],
2582
+ "extendsHtmlAttributes": false,
2583
+ "description": ""
2584
+ },
2585
+ {
2586
+ "name": "ScrollButton",
2587
+ "group": "Components",
2588
+ "sourceFile": "src/components/scroll-button.tsx",
2589
+ "props": [
2590
+ {
2591
+ "name": "variant",
2592
+ "type": "undefined | \"default\" | \"ghost\" | \"outline\"",
2593
+ "displayType": "undefined | \"default\" | \"ghost\" | \"outline\"",
2594
+ "optional": true,
2595
+ "scalar": true,
2596
+ "description": "",
2597
+ "default": "'outline'"
2598
+ },
2599
+ {
2600
+ "name": "size",
2601
+ "type": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
2602
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
2603
+ "optional": true,
2604
+ "scalar": true,
2605
+ "description": "",
2606
+ "default": "'sm'"
2607
+ }
2608
+ ],
2609
+ "callbacks": [],
2610
+ "slots": [],
2611
+ "tokens": [],
2612
+ "extendsHtmlAttributes": false,
2613
+ "description": ""
2614
+ },
2615
+ {
2616
+ "name": "SlashCommand",
2617
+ "group": "Components",
2618
+ "sourceFile": "src/components/slash-command.tsx",
2619
+ "props": [
2620
+ {
2621
+ "name": "commands",
2622
+ "type": "{ id: string; label: string; description?: undefined | string; category?: undefined | string }[]",
2623
+ "displayType": "{ id: string; label: string; description?: undefined | string; category?: undefined | string }[]",
2624
+ "optional": false,
2625
+ "scalar": false,
2626
+ "description": ""
2627
+ },
2628
+ {
2629
+ "name": "activeIds",
2630
+ "type": "undefined | string[]",
2631
+ "displayType": "undefined | string[]",
2632
+ "optional": true,
2633
+ "scalar": false,
2634
+ "description": ""
2635
+ },
2636
+ {
2637
+ "name": "compact",
2638
+ "type": "undefined | false | true",
2639
+ "displayType": "undefined | false | true",
2640
+ "optional": true,
2641
+ "scalar": true,
2642
+ "description": ""
2643
+ }
2644
+ ],
2645
+ "callbacks": [
2646
+ {
2647
+ "name": "onSelect",
2648
+ "type": "(command: SlashCommandItem) => void",
2649
+ "displayType": "(command: SlashCommandItem) => void",
2650
+ "description": ""
2651
+ }
2652
+ ],
2653
+ "slots": [],
2654
+ "tokens": [],
2655
+ "extendsHtmlAttributes": false,
2656
+ "description": ""
2657
+ },
2658
+ {
2659
+ "name": "Source",
2660
+ "group": "Components",
2661
+ "sourceFile": "src/components/source.tsx",
2662
+ "props": [
2663
+ {
2664
+ "name": "href",
2665
+ "type": "string",
2666
+ "displayType": "string",
2667
+ "optional": false,
2668
+ "scalar": true,
2669
+ "description": ""
2670
+ }
2671
+ ],
2672
+ "callbacks": [],
2673
+ "slots": [
2674
+ {
2675
+ "name": "children",
2676
+ "description": ""
2677
+ }
2678
+ ],
2679
+ "tokens": [],
2680
+ "extendsHtmlAttributes": false,
2681
+ "description": ""
2682
+ },
2683
+ {
2684
+ "name": "SourceContent",
2685
+ "group": "Components",
2686
+ "sourceFile": "src/components/source.tsx",
2687
+ "props": [
2688
+ {
2689
+ "name": "title",
2690
+ "type": "string",
2691
+ "displayType": "string",
2692
+ "optional": false,
2693
+ "scalar": true,
2694
+ "description": ""
2695
+ },
2696
+ {
2697
+ "name": "description",
2698
+ "type": "string",
2699
+ "displayType": "string",
2700
+ "optional": false,
2701
+ "scalar": true,
2702
+ "description": ""
2703
+ }
2704
+ ],
2705
+ "callbacks": [],
2706
+ "slots": [],
2707
+ "tokens": [],
2708
+ "extendsHtmlAttributes": false,
2709
+ "description": ""
2710
+ },
2711
+ {
2712
+ "name": "SourceList",
2713
+ "group": "Components",
2714
+ "sourceFile": "src/components/source.tsx",
2715
+ "props": [],
2716
+ "callbacks": [],
2717
+ "slots": [
2718
+ {
2719
+ "name": "children",
2720
+ "description": ""
2721
+ }
2722
+ ],
2723
+ "tokens": [],
2724
+ "extendsHtmlAttributes": false,
2725
+ "description": ""
2726
+ },
2727
+ {
2728
+ "name": "SourceTrigger",
2729
+ "group": "Components",
2730
+ "sourceFile": "src/components/source.tsx",
2731
+ "props": [
2732
+ {
2733
+ "name": "label",
2734
+ "type": "undefined | string | number",
2735
+ "displayType": "undefined | string | number",
2736
+ "optional": true,
2737
+ "scalar": true,
2738
+ "description": ""
2739
+ },
2740
+ {
2741
+ "name": "showFavicon",
2742
+ "type": "undefined | false | true",
2743
+ "displayType": "undefined | false | true",
2744
+ "optional": true,
2745
+ "scalar": true,
2746
+ "description": ""
2747
+ }
2748
+ ],
2749
+ "callbacks": [],
2750
+ "slots": [],
2751
+ "tokens": [],
2752
+ "extendsHtmlAttributes": false,
2753
+ "description": ""
2754
+ },
2755
+ {
2756
+ "name": "TasksCard",
2757
+ "group": "Components",
2758
+ "sourceFile": "src/components/tasks-card.tsx",
2759
+ "props": [
2760
+ {
2761
+ "name": "data",
2762
+ "type": "undefined | { mode?: undefined | \"select\"; heading?: undefined | string; tasks: { id: string; label: string; description?: undefined | string; checked?: undefined | false | true; disabled?: undefined | false | true }[]; selectAll?: undefined | false | true; confirmLabel?: undefined | string; allowEmpty?: undefined | false | true; min?: undefined | number; max?: undefined | number }",
2763
+ "displayType": "undefined | { mode?: undefined | \"select\"; heading?: undefined | string; tasks: { id: string; label: string; description?: undefined | string; checked?: undefined | false | true; disabled?: undefined | false | true }[]; selectAll?: undefined | false | true; confirmLabel?: undefined | string; allowEmpty?: undefined | false | true; min?: undefined | number; max?: undefined | number }",
2764
+ "optional": true,
2765
+ "scalar": false,
2766
+ "description": "The tasks definition (CardEnvelope.data)."
2767
+ },
2768
+ {
2769
+ "name": "cardId",
2770
+ "type": "undefined | string",
2771
+ "displayType": "undefined | string",
2772
+ "optional": true,
2773
+ "scalar": true,
2774
+ "description": "The card id used to correlate every emitted CardEvent."
2775
+ },
2776
+ {
2777
+ "name": "heading",
2778
+ "type": "undefined | string",
2779
+ "displayType": "undefined | string",
2780
+ "optional": true,
2781
+ "scalar": true,
2782
+ "description": "The envelope title rendered in the card chrome."
2783
+ },
2784
+ {
2785
+ "name": "hostElement",
2786
+ "type": "undefined | HTMLElement",
2787
+ "displayType": "undefined | HTMLElement",
2788
+ "optional": true,
2789
+ "scalar": false,
2790
+ "description": "The custom-element host node, for the bubbling `kai-card` fallback emit."
2791
+ },
2792
+ {
2793
+ "name": "resolution",
2794
+ "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
2795
+ "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
2796
+ "optional": true,
2797
+ "scalar": false,
2798
+ "description": "When set, render the chromed read-only summary instead of the interactive controls."
2799
+ }
2800
+ ],
2801
+ "callbacks": [
2802
+ {
2803
+ "name": "host",
2804
+ "type": "undefined | { context: () => import(\"/Users/home/Projects/kitn-ai/kitn-chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
2805
+ "displayType": "undefined | { context: () => import(\"/Users/home/Projects/kitn-ai/kitn-chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
2806
+ "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kai-card` CustomEvent off `hostElement`)."
2807
+ }
2808
+ ],
2809
+ "slots": [],
2810
+ "tokens": [],
2811
+ "extendsHtmlAttributes": false,
2812
+ "description": "`TasksCard` — a selectable task/plan list (checkbox rows + optional select-all + a confirm button) inside `Card` chrome. Row toggling and select-all are local UI state; only the final confirm emits the Card contract's `submit` verb (`{ kind:'submit', cardId, data:{ selected } }`) with the checked ids in input order. Emits `ready` on mount and `error` for an unusable definition."
2813
+ },
2814
+ {
2815
+ "name": "TerminalLoader",
2816
+ "group": "Components",
2817
+ "sourceFile": "src/components/loader.tsx",
2818
+ "props": [
2819
+ {
2820
+ "name": "size",
2821
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
2822
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
2823
+ "optional": true,
2824
+ "scalar": true,
2825
+ "description": "",
2826
+ "default": "'md'"
2827
+ }
2828
+ ],
2829
+ "callbacks": [],
2830
+ "slots": [],
2831
+ "tokens": [],
2832
+ "extendsHtmlAttributes": false,
2833
+ "description": ""
2834
+ },
2835
+ {
2836
+ "name": "TextBlinkLoader",
2837
+ "group": "Components",
2838
+ "sourceFile": "src/components/loader.tsx",
2839
+ "props": [
2840
+ {
2841
+ "name": "text",
2842
+ "type": "undefined | string",
2843
+ "displayType": "undefined | string",
2844
+ "optional": true,
2845
+ "scalar": true,
2846
+ "description": "",
2847
+ "default": "'Thinking'"
2848
+ },
2849
+ {
2850
+ "name": "size",
2851
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
2852
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
2853
+ "optional": true,
2854
+ "scalar": true,
2855
+ "description": "",
2856
+ "default": "'md'"
2857
+ }
2858
+ ],
2859
+ "callbacks": [],
2860
+ "slots": [],
2861
+ "tokens": [],
2862
+ "extendsHtmlAttributes": false,
2863
+ "description": ""
2864
+ },
2865
+ {
2866
+ "name": "TextDotsLoader",
2867
+ "group": "Components",
2868
+ "sourceFile": "src/components/loader.tsx",
2869
+ "props": [
2870
+ {
2871
+ "name": "text",
2872
+ "type": "undefined | string",
2873
+ "displayType": "undefined | string",
2874
+ "optional": true,
2875
+ "scalar": true,
2876
+ "description": "",
2877
+ "default": "'Thinking'"
2878
+ },
2879
+ {
2880
+ "name": "size",
2881
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
2882
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
2883
+ "optional": true,
2884
+ "scalar": true,
2885
+ "description": "",
2886
+ "default": "'md'"
2887
+ }
2888
+ ],
2889
+ "callbacks": [],
2890
+ "slots": [],
2891
+ "tokens": [],
2892
+ "extendsHtmlAttributes": false,
2893
+ "description": ""
2894
+ },
2895
+ {
2896
+ "name": "TextShimmer",
2897
+ "group": "Components",
2898
+ "sourceFile": "src/components/text-shimmer.tsx",
2899
+ "props": [
2900
+ {
2901
+ "name": "as",
2902
+ "type": "undefined | string",
2903
+ "displayType": "undefined | string",
2904
+ "optional": true,
2905
+ "scalar": true,
2906
+ "description": "",
2907
+ "default": "'span'"
2908
+ },
2909
+ {
2910
+ "name": "duration",
2911
+ "type": "undefined | number",
2912
+ "displayType": "undefined | number",
2913
+ "optional": true,
2914
+ "scalar": true,
2915
+ "description": "",
2916
+ "default": "4"
2917
+ },
2918
+ {
2919
+ "name": "spread",
2920
+ "type": "undefined | number",
2921
+ "displayType": "undefined | number",
2922
+ "optional": true,
2923
+ "scalar": true,
2924
+ "description": "",
2925
+ "default": "20"
2926
+ }
2927
+ ],
2928
+ "callbacks": [],
2929
+ "slots": [
2930
+ {
2931
+ "name": "children",
2932
+ "description": ""
2933
+ }
2934
+ ],
2935
+ "tokens": [],
2936
+ "extendsHtmlAttributes": true,
2937
+ "description": ""
2938
+ },
2939
+ {
2940
+ "name": "TextShimmerLoader",
2941
+ "group": "Components",
2942
+ "sourceFile": "src/components/loader.tsx",
2943
+ "props": [
2944
+ {
2945
+ "name": "text",
2946
+ "type": "undefined | string",
2947
+ "displayType": "undefined | string",
2948
+ "optional": true,
2949
+ "scalar": true,
2950
+ "description": "",
2951
+ "default": "'Thinking'"
2952
+ },
2953
+ {
2954
+ "name": "size",
2955
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
2956
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
2957
+ "optional": true,
2958
+ "scalar": true,
2959
+ "description": "",
2960
+ "default": "'md'"
2961
+ }
2962
+ ],
2963
+ "callbacks": [],
2964
+ "slots": [],
2965
+ "tokens": [],
2966
+ "extendsHtmlAttributes": false,
2967
+ "description": ""
2968
+ },
2969
+ {
2970
+ "name": "ThinkingBar",
2971
+ "group": "Components",
2972
+ "sourceFile": "src/components/thinking-bar.tsx",
2973
+ "props": [
2974
+ {
2975
+ "name": "text",
2976
+ "type": "undefined | string",
2977
+ "displayType": "undefined | string",
2978
+ "optional": true,
2979
+ "scalar": true,
2980
+ "description": "",
2981
+ "default": "'Thinking'"
2982
+ },
2983
+ {
2984
+ "name": "stopLabel",
2985
+ "type": "undefined | string",
2986
+ "displayType": "undefined | string",
2987
+ "optional": true,
2988
+ "scalar": true,
2989
+ "description": "",
2990
+ "default": "'Answer now'"
2991
+ }
2992
+ ],
2993
+ "callbacks": [
2994
+ {
2995
+ "name": "onStop",
2996
+ "type": "undefined | () => void",
2997
+ "displayType": "undefined | () => void",
2998
+ "description": ""
2999
+ },
3000
+ {
3001
+ "name": "onClick",
3002
+ "type": "undefined | () => void",
3003
+ "displayType": "undefined | () => void",
3004
+ "description": ""
3005
+ }
3006
+ ],
3007
+ "slots": [],
3008
+ "tokens": [],
3009
+ "extendsHtmlAttributes": false,
3010
+ "description": ""
3011
+ },
3012
+ {
3013
+ "name": "Tool",
3014
+ "group": "Components",
3015
+ "sourceFile": "src/components/tool.tsx",
3016
+ "props": [
3017
+ {
3018
+ "name": "toolPart",
3019
+ "type": "{ 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 }",
3020
+ "displayType": "{ 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 }",
3021
+ "optional": false,
3022
+ "scalar": false,
3023
+ "description": ""
3024
+ },
3025
+ {
3026
+ "name": "defaultOpen",
3027
+ "type": "undefined | false | true",
3028
+ "displayType": "undefined | false | true",
3029
+ "optional": true,
3030
+ "scalar": true,
3031
+ "description": "",
3032
+ "default": "false"
3033
+ }
3034
+ ],
3035
+ "callbacks": [],
3036
+ "slots": [],
3037
+ "tokens": [
3038
+ "--color-tool-blue",
3039
+ "--color-tool-amber",
3040
+ "--color-tool-green",
3041
+ "--color-tool-red"
3042
+ ],
3043
+ "extendsHtmlAttributes": false,
3044
+ "description": ""
3045
+ },
3046
+ {
3047
+ "name": "TypingLoader",
3048
+ "group": "Components",
3049
+ "sourceFile": "src/components/loader.tsx",
3050
+ "props": [
3051
+ {
3052
+ "name": "size",
3053
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
3054
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
3055
+ "optional": true,
3056
+ "scalar": true,
3057
+ "description": "",
3058
+ "default": "'md'"
3059
+ }
3060
+ ],
3061
+ "callbacks": [],
3062
+ "slots": [],
3063
+ "tokens": [],
3064
+ "extendsHtmlAttributes": false,
3065
+ "description": ""
3066
+ },
3067
+ {
3068
+ "name": "VoiceInput",
3069
+ "group": "Components",
3070
+ "sourceFile": "src/components/voice-input.tsx",
3071
+ "props": [
3072
+ {
3073
+ "name": "disabled",
3074
+ "type": "undefined | false | true",
3075
+ "displayType": "undefined | false | true",
3076
+ "optional": true,
3077
+ "scalar": true,
3078
+ "description": ""
3079
+ }
3080
+ ],
3081
+ "callbacks": [
3082
+ {
3083
+ "name": "onTranscribe",
3084
+ "type": "(audio: Blob) => Promise<string>",
3085
+ "displayType": "(audio: Blob) => Promise<string>",
3086
+ "description": ""
3087
+ },
3088
+ {
3089
+ "name": "onTranscription",
3090
+ "type": "(text: string) => void",
3091
+ "displayType": "(text: string) => void",
3092
+ "description": ""
3093
+ }
3094
+ ],
3095
+ "slots": [],
3096
+ "tokens": [],
3097
+ "extendsHtmlAttributes": false,
3098
+ "description": ""
3099
+ },
3100
+ {
3101
+ "name": "WaveLoader",
3102
+ "group": "Components",
3103
+ "sourceFile": "src/components/loader.tsx",
3104
+ "props": [
3105
+ {
3106
+ "name": "size",
3107
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
3108
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
3109
+ "optional": true,
3110
+ "scalar": true,
3111
+ "description": "",
3112
+ "default": "'md'"
3113
+ }
3114
+ ],
3115
+ "callbacks": [],
3116
+ "slots": [],
3117
+ "tokens": [],
3118
+ "extendsHtmlAttributes": false,
3119
+ "description": ""
3120
+ },
3121
+ {
3122
+ "name": "Avatar",
3123
+ "group": "UI",
3124
+ "sourceFile": "src/ui/avatar.tsx",
3125
+ "props": [
3126
+ {
3127
+ "name": "src",
3128
+ "type": "undefined | string",
3129
+ "displayType": "undefined | string",
3130
+ "optional": true,
3131
+ "scalar": true,
3132
+ "description": ""
3133
+ },
3134
+ {
3135
+ "name": "alt",
3136
+ "type": "undefined | string",
3137
+ "displayType": "undefined | string",
3138
+ "optional": true,
3139
+ "scalar": true,
3140
+ "description": ""
3141
+ },
3142
+ {
3143
+ "name": "fallback",
3144
+ "type": "string",
3145
+ "displayType": "string",
3146
+ "optional": false,
3147
+ "scalar": true,
3148
+ "description": ""
3149
+ },
3150
+ {
3151
+ "name": "size",
3152
+ "type": "undefined | \"sm\" | \"md\" | \"lg\"",
3153
+ "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
3154
+ "optional": true,
3155
+ "scalar": true,
3156
+ "description": "",
3157
+ "default": "'md'"
3158
+ }
3159
+ ],
3160
+ "callbacks": [],
3161
+ "slots": [],
3162
+ "tokens": [],
3163
+ "extendsHtmlAttributes": true,
3164
+ "description": ""
3165
+ },
3166
+ {
3167
+ "name": "Badge",
3168
+ "group": "UI",
3169
+ "sourceFile": "src/ui/badge.tsx",
3170
+ "props": [
3171
+ {
3172
+ "name": "variant",
3173
+ "type": "undefined | null | \"default\" | \"count\" | \"citation\"",
3174
+ "displayType": "undefined | null | \"default\" | \"count\" | \"citation\"",
3175
+ "optional": true,
3176
+ "scalar": false,
3177
+ "description": ""
3178
+ }
3179
+ ],
3180
+ "callbacks": [],
3181
+ "slots": [
3182
+ {
3183
+ "name": "children",
3184
+ "description": ""
3185
+ }
3186
+ ],
3187
+ "tokens": [],
3188
+ "extendsHtmlAttributes": true,
3189
+ "description": ""
3190
+ },
3191
+ {
3192
+ "name": "Button",
3193
+ "group": "UI",
3194
+ "sourceFile": "src/ui/button.tsx",
3195
+ "props": [
3196
+ {
3197
+ "name": "variant",
3198
+ "type": "undefined | null | \"default\" | \"ghost\" | \"outline\" | \"destructive\"",
3199
+ "displayType": "undefined | null | \"default\" | \"ghost\" | \"outline\" | \"destructive\"",
3200
+ "optional": true,
3201
+ "scalar": false,
3202
+ "description": ""
3203
+ },
3204
+ {
3205
+ "name": "size",
3206
+ "type": "undefined | null | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
3207
+ "displayType": "undefined | null | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
3208
+ "optional": true,
3209
+ "scalar": false,
3210
+ "description": ""
3211
+ }
3212
+ ],
3213
+ "callbacks": [],
3214
+ "slots": [
3215
+ {
3216
+ "name": "children",
3217
+ "description": ""
3218
+ }
3219
+ ],
3220
+ "tokens": [],
3221
+ "extendsHtmlAttributes": true,
3222
+ "description": ""
3223
+ },
3224
+ {
3225
+ "name": "Collapsible",
3226
+ "group": "UI",
3227
+ "sourceFile": "src/ui/collapsible.tsx",
3228
+ "props": [
3229
+ {
3230
+ "name": "open",
3231
+ "type": "undefined | false | true",
3232
+ "displayType": "undefined | false | true",
3233
+ "optional": true,
3234
+ "scalar": true,
3235
+ "description": ""
3236
+ },
3237
+ {
3238
+ "name": "defaultOpen",
3239
+ "type": "undefined | false | true",
3240
+ "displayType": "undefined | false | true",
3241
+ "optional": true,
3242
+ "scalar": true,
3243
+ "description": "",
3244
+ "default": "false"
3245
+ }
3246
+ ],
3247
+ "callbacks": [
3248
+ {
3249
+ "name": "onOpenChange",
3250
+ "type": "undefined | (open: boolean) => void",
3251
+ "displayType": "undefined | (open: boolean) => void",
3252
+ "description": ""
3253
+ }
3254
+ ],
3255
+ "slots": [
3256
+ {
3257
+ "name": "children",
3258
+ "description": ""
3259
+ }
3260
+ ],
3261
+ "tokens": [],
3262
+ "extendsHtmlAttributes": false,
3263
+ "description": ""
3264
+ },
3265
+ {
3266
+ "name": "CollapsibleContent",
3267
+ "group": "UI",
3268
+ "sourceFile": "src/ui/collapsible.tsx",
3269
+ "props": [],
3270
+ "callbacks": [],
3271
+ "slots": [
3272
+ {
3273
+ "name": "children",
3274
+ "description": ""
3275
+ }
3276
+ ],
3277
+ "tokens": [],
3278
+ "extendsHtmlAttributes": false,
3279
+ "description": ""
3280
+ },
3281
+ {
3282
+ "name": "CollapsibleTrigger",
3283
+ "group": "UI",
3284
+ "sourceFile": "src/ui/collapsible.tsx",
3285
+ "props": [],
3286
+ "callbacks": [
3287
+ {
3288
+ "name": "as",
3289
+ "type": "undefined | (props: Record<string, any>) => JSX.Element",
3290
+ "displayType": "undefined | (props: Record<string, any>) => JSX.Element",
3291
+ "description": ""
3292
+ },
3293
+ {
3294
+ "name": "onClick",
3295
+ "type": "undefined | JSX.EventHandler<HTMLButtonElement, MouseEvent> | { 0: (data: any, e: MouseEvent & { currentTarget: HTMLButtonElement; target: import(\"/Users/home/Projects/kitn-ai/kitn-chat/node_modules/solid-js/types/jsx\").DOMElement; }) => void; 1: any }",
3296
+ "displayType": "undefined | JSX.EventHandler<HTMLButtonElement, MouseEvent> | { 0: (data: any, e: MouseEvent & { currentTarget: HTMLButtonElement; target: import(\"/Users/home/Projects/kitn-ai/kitn-chat/node_modules/solid-js/types/jsx\").DOMElement; }) => void; 1: any }",
3297
+ "description": ""
3298
+ }
3299
+ ],
3300
+ "slots": [
3301
+ {
3302
+ "name": "children",
3303
+ "description": ""
3304
+ }
3305
+ ],
3306
+ "tokens": [],
3307
+ "extendsHtmlAttributes": false,
3308
+ "description": ""
3309
+ },
3310
+ {
3311
+ "name": "Dropdown",
3312
+ "group": "UI",
3313
+ "sourceFile": "src/ui/dropdown.tsx",
3314
+ "props": [],
3315
+ "callbacks": [],
3316
+ "slots": [
3317
+ {
3318
+ "name": "children",
3319
+ "description": ""
3320
+ }
3321
+ ],
3322
+ "tokens": [],
3323
+ "extendsHtmlAttributes": false,
3324
+ "description": ""
3325
+ },
3326
+ {
3327
+ "name": "DropdownContent",
3328
+ "group": "UI",
3329
+ "sourceFile": "src/ui/dropdown.tsx",
3330
+ "props": [],
3331
+ "callbacks": [],
3332
+ "slots": [
3333
+ {
3334
+ "name": "children",
3335
+ "description": ""
3336
+ }
3337
+ ],
3338
+ "tokens": [],
3339
+ "extendsHtmlAttributes": false,
3340
+ "description": ""
3341
+ },
3342
+ {
3343
+ "name": "DropdownItem",
3344
+ "group": "UI",
3345
+ "sourceFile": "src/ui/dropdown.tsx",
3346
+ "props": [],
3347
+ "callbacks": [
3348
+ {
3349
+ "name": "onSelect",
3350
+ "type": "undefined | () => void",
3351
+ "displayType": "undefined | () => void",
3352
+ "description": ""
3353
+ }
3354
+ ],
3355
+ "slots": [
3356
+ {
3357
+ "name": "children",
3358
+ "description": ""
3359
+ }
3360
+ ],
3361
+ "tokens": [],
3362
+ "extendsHtmlAttributes": false,
3363
+ "description": ""
3364
+ },
3365
+ {
3366
+ "name": "DropdownTrigger",
3367
+ "group": "UI",
3368
+ "sourceFile": "src/ui/dropdown.tsx",
3369
+ "props": [],
3370
+ "callbacks": [
3371
+ {
3372
+ "name": "as",
3373
+ "type": "undefined | string | (props: Record<string, any>) => JSX.Element",
3374
+ "displayType": "undefined | string | (props: Record<string, any>) => JSX.Element",
3375
+ "description": ""
3376
+ }
3377
+ ],
3378
+ "slots": [
3379
+ {
3380
+ "name": "children",
3381
+ "description": ""
3382
+ }
3383
+ ],
3384
+ "tokens": [],
3385
+ "extendsHtmlAttributes": false,
3386
+ "description": ""
3387
+ },
3388
+ {
3389
+ "name": "HoverCard",
3390
+ "group": "UI",
3391
+ "sourceFile": "src/ui/hover-card.tsx",
3392
+ "props": [
3393
+ {
3394
+ "name": "openDelay",
3395
+ "type": "undefined | number",
3396
+ "displayType": "undefined | number",
3397
+ "optional": true,
3398
+ "scalar": true,
3399
+ "description": ""
3400
+ },
3401
+ {
3402
+ "name": "closeDelay",
3403
+ "type": "undefined | number",
3404
+ "displayType": "undefined | number",
3405
+ "optional": true,
3406
+ "scalar": true,
3407
+ "description": ""
3408
+ },
3409
+ {
3410
+ "name": "placement",
3411
+ "type": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\" | \"top-start\" | \"top-end\" | \"right-start\" | \"right-end\" | \"bottom-start\" | \"bottom-end\" | \"left-start\" | \"left-end\"",
3412
+ "displayType": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\" | \"top-start\" | \"top-end\" | \"right-start\" | \"right-end\" | \"bottom-start\" | \"bottom-end\" | \"left-start\" | \"left-end\"",
3413
+ "optional": true,
3414
+ "scalar": true,
3415
+ "description": ""
3416
+ }
3417
+ ],
3418
+ "callbacks": [
3419
+ {
3420
+ "name": "trigger",
3421
+ "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
3422
+ "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
3423
+ "description": ""
3424
+ }
3425
+ ],
3426
+ "slots": [
3427
+ {
3428
+ "name": "children",
3429
+ "description": ""
3430
+ }
3431
+ ],
3432
+ "tokens": [],
3433
+ "extendsHtmlAttributes": false,
3434
+ "description": ""
3435
+ },
3436
+ {
3437
+ "name": "Resizable",
3438
+ "group": "UI",
3439
+ "sourceFile": "src/ui/resizable.tsx",
3440
+ "props": [
3441
+ {
3442
+ "name": "orientation",
3443
+ "type": "undefined | \"horizontal\" | \"vertical\"",
3444
+ "displayType": "undefined | \"horizontal\" | \"vertical\"",
3445
+ "optional": true,
3446
+ "scalar": true,
3447
+ "description": "",
3448
+ "default": "'horizontal'"
3449
+ },
3450
+ {
3451
+ "name": "withHandle",
3452
+ "type": "undefined | false | true",
3453
+ "displayType": "undefined | false | true",
3454
+ "optional": true,
3455
+ "scalar": true,
3456
+ "description": "Show a visible grip on each interactive handle."
3457
+ },
3458
+ {
3459
+ "name": "maximizedIndex",
3460
+ "type": "undefined | null | number",
3461
+ "displayType": "undefined | null | number",
3462
+ "optional": true,
3463
+ "scalar": false,
3464
+ "description": "Which panel index is maximized (null = none). Hides the others."
3465
+ }
3466
+ ],
3467
+ "callbacks": [
3468
+ {
3469
+ "name": "onChange",
3470
+ "type": "undefined | (sizes: number[]) => void",
3471
+ "displayType": "undefined | (sizes: number[]) => void",
3472
+ "description": "Fired on drag-end / keyboard resize / visibility change with the current panel sizes (percent)."
3473
+ },
3474
+ {
3475
+ "name": "onMaximizeChange",
3476
+ "type": "undefined | (index: number | null) => void",
3477
+ "displayType": "undefined | (index: number | null) => void",
3478
+ "description": "Fired when the maximized panel changes (index, or null on restore)."
3479
+ }
3480
+ ],
3481
+ "slots": [
3482
+ {
3483
+ "name": "children",
3484
+ "description": "`ResizablePanel` children."
3485
+ }
3486
+ ],
3487
+ "tokens": [],
3488
+ "extendsHtmlAttributes": false,
3489
+ "description": "Convenience group that takes `ResizablePanel` children and AUTO-INSERTS a `ResizableHandle` between each pair of visible (non-`hidden`) panels. A handle is interactive only between two unlocked neighbors; otherwise it renders as a static divider. Power users who need manual control can keep using `ResizablePanelGroup` + explicit `ResizableHandle`s."
3490
+ },
3491
+ {
3492
+ "name": "ResizableHandle",
3493
+ "group": "UI",
3494
+ "sourceFile": "src/ui/resizable.tsx",
3495
+ "props": [
3496
+ {
3497
+ "name": "withHandle",
3498
+ "type": "undefined | false | true",
3499
+ "displayType": "undefined | false | true",
3500
+ "optional": true,
3501
+ "scalar": true,
3502
+ "description": ""
3503
+ },
3504
+ {
3505
+ "name": "keyboardStep",
3506
+ "type": "undefined | number",
3507
+ "displayType": "undefined | number",
3508
+ "optional": true,
3509
+ "scalar": true,
3510
+ "description": "Keyboard nudge step in pixels (default 16). Home/End jump to min/max.",
3511
+ "default": "16"
3512
+ },
3513
+ {
3514
+ "name": "static",
3515
+ "type": "undefined | false | true",
3516
+ "displayType": "undefined | false | true",
3517
+ "optional": true,
3518
+ "scalar": true,
3519
+ "description": "Render as a static, non-interactive divider (e.g. between locked panels)."
3520
+ },
3521
+ {
3522
+ "name": "orientation",
3523
+ "type": "undefined | \"horizontal\" | \"vertical\"",
3524
+ "displayType": "undefined | \"horizontal\" | \"vertical\"",
3525
+ "optional": true,
3526
+ "scalar": true,
3527
+ "description": "Explicit axis; overrides `ResizableContext`. Needed by facades that render handles outside a context provider (e.g. `<kai-resizable>`)."
3528
+ }
3529
+ ],
3530
+ "callbacks": [
3531
+ {
3532
+ "name": "onPanelResize",
3533
+ "type": "undefined | (delta: number) => void",
3534
+ "displayType": "undefined | (delta: number) => void",
3535
+ "description": ""
3536
+ }
3537
+ ],
3538
+ "slots": [],
3539
+ "tokens": [],
3540
+ "extendsHtmlAttributes": true,
3541
+ "description": ""
3542
+ },
3543
+ {
3544
+ "name": "ResizablePanel",
3545
+ "group": "UI",
3546
+ "sourceFile": "src/ui/resizable.tsx",
3547
+ "props": [
3548
+ {
3549
+ "name": "defaultSize",
3550
+ "type": "undefined | string | number",
3551
+ "displayType": "undefined | string | number",
3552
+ "optional": true,
3553
+ "scalar": true,
3554
+ "description": "Initial main-axis size: number/`\"25%\"` (percent) or `\"280px\"` (pixels). Omitted → flexible."
3555
+ },
3556
+ {
3557
+ "name": "minSize",
3558
+ "type": "undefined | string | number",
3559
+ "displayType": "undefined | string | number",
3560
+ "optional": true,
3561
+ "scalar": true,
3562
+ "description": "Minimum size during resize (px or %)."
3563
+ },
3564
+ {
3565
+ "name": "maxSize",
3566
+ "type": "undefined | string | number",
3567
+ "displayType": "undefined | string | number",
3568
+ "optional": true,
3569
+ "scalar": true,
3570
+ "description": "Maximum size during resize (px or %)."
3571
+ },
3572
+ {
3573
+ "name": "locked",
3574
+ "type": "undefined | false | true",
3575
+ "displayType": "undefined | false | true",
3576
+ "optional": true,
3577
+ "scalar": true,
3578
+ "description": "When true, the panel's size is fixed and adjacent handles are non-draggable."
3579
+ },
3580
+ {
3581
+ "name": "hidden",
3582
+ "type": "undefined | false | true",
3583
+ "displayType": "undefined | false | true",
3584
+ "optional": true,
3585
+ "scalar": true,
3586
+ "description": "When true, the panel is not visible (used by the `Resizable` convenience to drop dividers)."
3587
+ }
3588
+ ],
3589
+ "callbacks": [],
3590
+ "slots": [
3591
+ {
3592
+ "name": "children",
3593
+ "description": ""
3594
+ }
3595
+ ],
3596
+ "tokens": [],
3597
+ "extendsHtmlAttributes": true,
3598
+ "description": ""
3599
+ },
3600
+ {
3601
+ "name": "ResizablePanelGroup",
3602
+ "group": "UI",
3603
+ "sourceFile": "src/ui/resizable.tsx",
3604
+ "props": [
3605
+ {
3606
+ "name": "orientation",
3607
+ "type": "undefined | \"horizontal\" | \"vertical\"",
3608
+ "displayType": "undefined | \"horizontal\" | \"vertical\"",
3609
+ "optional": true,
3610
+ "scalar": true,
3611
+ "description": "",
3612
+ "default": "'horizontal'"
3613
+ }
3614
+ ],
3615
+ "callbacks": [],
3616
+ "slots": [
3617
+ {
3618
+ "name": "children",
3619
+ "description": ""
3620
+ }
3621
+ ],
3622
+ "tokens": [],
3623
+ "extendsHtmlAttributes": true,
3624
+ "description": ""
3625
+ },
3626
+ {
3627
+ "name": "ScrollArea",
3628
+ "group": "UI",
3629
+ "sourceFile": "src/ui/scroll-area.tsx",
3630
+ "props": [],
3631
+ "callbacks": [],
3632
+ "slots": [
3633
+ {
3634
+ "name": "children",
3635
+ "description": ""
3636
+ }
3637
+ ],
3638
+ "tokens": [],
3639
+ "extendsHtmlAttributes": true,
3640
+ "description": ""
3641
+ },
3642
+ {
3643
+ "name": "Separator",
3644
+ "group": "UI",
3645
+ "sourceFile": "src/ui/separator.tsx",
3646
+ "props": [
3647
+ {
3648
+ "name": "orientation",
3649
+ "type": "undefined | \"horizontal\" | \"vertical\"",
3650
+ "displayType": "undefined | \"horizontal\" | \"vertical\"",
3651
+ "optional": true,
3652
+ "scalar": true,
3653
+ "description": ""
3654
+ }
3655
+ ],
3656
+ "callbacks": [],
3657
+ "slots": [],
3658
+ "tokens": [],
3659
+ "extendsHtmlAttributes": true,
3660
+ "description": ""
3661
+ },
3662
+ {
3663
+ "name": "Skeleton",
3664
+ "group": "UI",
3665
+ "sourceFile": "src/ui/skeleton.tsx",
3666
+ "props": [],
3667
+ "callbacks": [],
3668
+ "slots": [],
3669
+ "tokens": [],
3670
+ "extendsHtmlAttributes": true,
3671
+ "description": ""
3672
+ },
3673
+ {
3674
+ "name": "Textarea",
3675
+ "group": "UI",
3676
+ "sourceFile": "src/ui/textarea.tsx",
3677
+ "props": [
3678
+ {
3679
+ "name": "maxHeight",
3680
+ "type": "undefined | number",
3681
+ "displayType": "undefined | number",
3682
+ "optional": true,
3683
+ "scalar": true,
3684
+ "description": ""
3685
+ },
3686
+ {
3687
+ "name": "autoResize",
3688
+ "type": "undefined | false | true",
3689
+ "displayType": "undefined | false | true",
3690
+ "optional": true,
3691
+ "scalar": true,
3692
+ "description": ""
3693
+ }
3694
+ ],
3695
+ "callbacks": [],
3696
+ "slots": [],
3697
+ "tokens": [],
3698
+ "extendsHtmlAttributes": true,
3699
+ "description": ""
3700
+ },
3701
+ {
3702
+ "name": "Tooltip",
3703
+ "group": "UI",
3704
+ "sourceFile": "src/ui/tooltip.tsx",
3705
+ "props": [
3706
+ {
3707
+ "name": "content",
3708
+ "type": "string",
3709
+ "displayType": "string",
3710
+ "optional": false,
3711
+ "scalar": true,
3712
+ "description": ""
3713
+ },
3714
+ {
3715
+ "name": "openDelay",
3716
+ "type": "undefined | number",
3717
+ "displayType": "undefined | number",
3718
+ "optional": true,
3719
+ "scalar": true,
3720
+ "description": "",
3721
+ "default": "600"
3722
+ }
3723
+ ],
3724
+ "callbacks": [],
3725
+ "slots": [
3726
+ {
3727
+ "name": "children",
3728
+ "description": ""
3729
+ }
3730
+ ],
3731
+ "tokens": [],
3732
+ "extendsHtmlAttributes": false,
3733
+ "description": ""
3734
+ }
3735
+ ]