@kitnai/chat 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/README.md +9 -9
  2. package/dist/custom-elements.json +1676 -881
  3. package/dist/kitn-chat.es.js +36 -36
  4. package/dist/llms/llms-full.txt +316 -155
  5. package/dist/llms/llms.txt +18 -18
  6. package/dist/schemas/card-envelope.schema.json +14 -0
  7. package/dist/schemas/card-event.schema.json +12 -0
  8. package/dist/schemas/confirm.schema.json +65 -0
  9. package/dist/schemas/embed.schema.json +65 -0
  10. package/dist/schemas/form.result.schema.json +7 -0
  11. package/dist/schemas/form.schema.json +33 -0
  12. package/dist/schemas/link.schema.json +56 -0
  13. package/dist/schemas/task-list.result.schema.json +16 -0
  14. package/dist/schemas/task-list.schema.json +78 -0
  15. package/dist/theme.tokens.css +65 -65
  16. package/dist/tsx-B8rCNbgL.js +1 -0
  17. package/dist/typescript-RycA9KXf.js +1 -0
  18. package/frameworks/react/index.tsx +382 -193
  19. package/frameworks/react/runtime.tsx +2 -2
  20. package/llms-full.txt +316 -155
  21. package/llms.txt +18 -18
  22. package/package.json +5 -2
  23. package/src/components/artifact.stories.tsx +138 -0
  24. package/src/components/artifact.tsx +581 -0
  25. package/src/components/attachments.stories.tsx +7 -8
  26. package/src/components/attachments.tsx +2 -2
  27. package/src/components/card.tsx +110 -0
  28. package/src/components/chain-of-thought.stories.tsx +7 -8
  29. package/src/components/chat-container.stories.tsx +7 -8
  30. package/src/components/chat-container.tsx +4 -0
  31. package/src/components/checkpoint.stories.tsx +7 -8
  32. package/src/components/code-block.stories.tsx +8 -9
  33. package/src/components/component-meta.json +3411 -0
  34. package/src/components/confirm-card.stories.tsx +74 -0
  35. package/src/components/confirm-card.tsx +299 -0
  36. package/src/components/context.stories.tsx +7 -8
  37. package/src/components/conversation-item.stories.tsx +7 -8
  38. package/src/components/conversation-item.tsx +2 -2
  39. package/src/components/conversation-list.stories.tsx +7 -8
  40. package/src/components/conversation-list.tsx +1 -1
  41. package/src/components/embed.tsx +196 -0
  42. package/src/components/empty.stories.tsx +8 -9
  43. package/src/components/feedback-bar.stories.tsx +7 -8
  44. package/src/components/file-tree.stories.tsx +73 -0
  45. package/src/components/file-tree.tsx +383 -0
  46. package/src/components/file-upload.stories.tsx +7 -8
  47. package/src/components/form-widgets.tsx +461 -0
  48. package/src/components/form.tsx +796 -0
  49. package/src/components/image.stories.tsx +7 -8
  50. package/src/components/link-card.tsx +194 -0
  51. package/src/components/loader.stories.tsx +7 -8
  52. package/src/components/markdown.stories.tsx +7 -8
  53. package/src/components/message-narrow.stories.tsx +12 -13
  54. package/src/components/message-skills.stories.tsx +16 -17
  55. package/src/components/message.stories.tsx +17 -18
  56. package/src/components/model-switcher.stories.tsx +7 -8
  57. package/src/components/prompt-input.stories.tsx +8 -9
  58. package/src/components/prompt-suggestion.stories.tsx +7 -8
  59. package/src/components/prompt-suggestion.tsx +3 -3
  60. package/src/components/reasoning.stories.tsx +7 -8
  61. package/src/components/scroll-button.stories.tsx +7 -8
  62. package/src/components/slash-command.stories.tsx +8 -9
  63. package/src/components/slash-command.tsx +2 -2
  64. package/src/components/source.stories.tsx +7 -8
  65. package/src/components/source.tsx +1 -1
  66. package/src/components/task-list-card.stories.tsx +78 -0
  67. package/src/components/task-list-card.tsx +388 -0
  68. package/src/components/text-shimmer.stories.tsx +7 -8
  69. package/src/components/thinking-bar.stories.tsx +7 -8
  70. package/src/components/tool.stories.tsx +7 -8
  71. package/src/components/tool.tsx +2 -2
  72. package/src/components/voice-input.stories.tsx +7 -8
  73. package/src/elements/artifact.stories.tsx +291 -0
  74. package/src/elements/artifact.tsx +72 -0
  75. package/src/elements/{kitn-attachments.stories.tsx → attachments.stories.tsx} +11 -11
  76. package/src/elements/attachments.tsx +4 -4
  77. package/src/elements/card.stories.tsx +118 -0
  78. package/src/elements/card.tsx +40 -0
  79. package/src/elements/catalog.stories.tsx +491 -0
  80. package/src/elements/{kitn-chain-of-thought.stories.tsx → chain-of-thought.stories.tsx} +13 -13
  81. package/src/elements/chain-of-thought.tsx +3 -3
  82. package/src/elements/{kitn-chat-scope-picker.stories.tsx → chat-scope-picker.stories.tsx} +10 -10
  83. package/src/elements/chat-scope-picker.tsx +4 -4
  84. package/src/elements/{kitn-chat-workspace.stories.tsx → chat-workspace.stories.tsx} +71 -29
  85. package/src/elements/chat-workspace.tsx +29 -3
  86. package/src/elements/{kitn-chat.stories.tsx → chat.stories.tsx} +61 -16
  87. package/src/elements/chat.tsx +23 -2
  88. package/src/elements/{kitn-checkpoint.stories.tsx → checkpoint.stories.tsx} +11 -11
  89. package/src/elements/checkpoint.tsx +4 -4
  90. package/src/elements/{kitn-code-block.stories.tsx → code-block.stories.tsx} +10 -10
  91. package/src/elements/code-block.tsx +3 -3
  92. package/src/elements/compiled.css +1 -1
  93. package/src/elements/composed-shell.stories.tsx +316 -0
  94. package/src/elements/confirm-card.stories.tsx +186 -0
  95. package/src/elements/confirm-card.tsx +45 -0
  96. package/src/elements/{kitn-context-meter.stories.tsx → context-meter.stories.tsx} +10 -10
  97. package/src/elements/context-meter.tsx +3 -3
  98. package/src/elements/{kitn-conversation-list.stories.tsx → conversation-list.stories.tsx} +35 -22
  99. package/src/elements/conversation-list.tsx +11 -2
  100. package/src/elements/css.ts +1 -1
  101. package/src/elements/define.tsx +10 -10
  102. package/src/elements/element-meta.json +2649 -0
  103. package/src/elements/element-types.d.ts +251 -125
  104. package/src/elements/embed.stories.tsx +197 -0
  105. package/src/elements/embed.tsx +35 -0
  106. package/src/elements/{kitn-empty.stories.tsx → empty.stories.tsx} +12 -12
  107. package/src/elements/empty.tsx +3 -3
  108. package/src/elements/{kitn-feedback-bar.stories.tsx → feedback-bar.stories.tsx} +11 -11
  109. package/src/elements/feedback-bar.tsx +4 -4
  110. package/src/elements/file-tree.stories.tsx +133 -0
  111. package/src/elements/file-tree.tsx +52 -0
  112. package/src/elements/{kitn-file-upload.stories.tsx → file-upload.stories.tsx} +12 -12
  113. package/src/elements/file-upload.tsx +4 -4
  114. package/src/elements/form.stories.tsx +204 -0
  115. package/src/elements/form.tsx +37 -0
  116. package/src/elements/{kitn-image.stories.tsx → image.stories.tsx} +10 -10
  117. package/src/elements/image.tsx +3 -3
  118. package/src/elements/link-card.stories.tsx +193 -0
  119. package/src/elements/link-card.tsx +34 -0
  120. package/src/elements/{kitn-loader.stories.tsx → loader.stories.tsx} +11 -11
  121. package/src/elements/loader.tsx +3 -3
  122. package/src/elements/{kitn-markdown.stories.tsx → markdown.stories.tsx} +10 -10
  123. package/src/elements/markdown.tsx +3 -3
  124. package/src/elements/{kitn-message-skills.stories.tsx → message-skills.stories.tsx} +10 -10
  125. package/src/elements/message-skills.tsx +3 -3
  126. package/src/elements/{kitn-message.stories.tsx → message.stories.tsx} +12 -12
  127. package/src/elements/message.tsx +5 -5
  128. package/src/elements/{kitn-model-switcher.stories.tsx → model-switcher.stories.tsx} +10 -10
  129. package/src/elements/model-switcher.tsx +5 -5
  130. package/src/elements/{kitn-prompt-input.stories.tsx → prompt-input.stories.tsx} +41 -19
  131. package/src/elements/prompt-input.tsx +5 -5
  132. package/src/elements/{kitn-prompt-suggestions.stories.tsx → prompt-suggestions.stories.tsx} +13 -13
  133. package/src/elements/prompt-suggestions.tsx +4 -4
  134. package/src/elements/{kitn-reasoning.stories.tsx → reasoning.stories.tsx} +10 -10
  135. package/src/elements/reasoning.tsx +4 -4
  136. package/src/elements/register.ts +11 -1
  137. package/src/elements/resizable.stories.tsx +200 -0
  138. package/src/elements/resizable.tsx +264 -0
  139. package/src/elements/{kitn-response-stream.stories.tsx → response-stream.stories.tsx} +10 -10
  140. package/src/elements/response-stream.tsx +4 -4
  141. package/src/elements/{kitn-source-list.stories.tsx → source-list.stories.tsx} +11 -11
  142. package/src/elements/{kitn-source.stories.tsx → source.stories.tsx} +12 -12
  143. package/src/elements/source.tsx +5 -5
  144. package/src/elements/styles.css +140 -1
  145. package/src/elements/task-list-card.stories.tsx +194 -0
  146. package/src/elements/task-list-card.tsx +40 -0
  147. package/src/elements/{kitn-text-shimmer.stories.tsx → text-shimmer.stories.tsx} +10 -10
  148. package/src/elements/text-shimmer.tsx +3 -3
  149. package/src/elements/{kitn-thinking-bar.stories.tsx → thinking-bar.stories.tsx} +11 -11
  150. package/src/elements/thinking-bar.tsx +5 -5
  151. package/src/elements/{kitn-tool.stories.tsx → tool.stories.tsx} +10 -10
  152. package/src/elements/tool.tsx +3 -3
  153. package/src/elements/{kitn-voice-input.stories.tsx → voice-input.stories.tsx} +10 -10
  154. package/src/elements/voice-input.tsx +4 -4
  155. package/src/index.ts +94 -2
  156. package/src/primitives/card-contract.ts +60 -0
  157. package/src/primitives/card-host.tsx +35 -0
  158. package/src/primitives/card-routing.ts +79 -0
  159. package/src/primitives/card-schemas/card-envelope.schema.json +14 -0
  160. package/src/primitives/card-schemas/card-event.schema.json +12 -0
  161. package/src/primitives/card-schemas/confirm.schema.json +65 -0
  162. package/src/primitives/card-schemas/embed.schema.json +65 -0
  163. package/src/primitives/card-schemas/form.result.schema.json +7 -0
  164. package/src/primitives/card-schemas/form.schema.json +33 -0
  165. package/src/primitives/card-schemas/link.schema.json +56 -0
  166. package/src/primitives/card-schemas/task-list.result.schema.json +16 -0
  167. package/src/primitives/card-schemas/task-list.schema.json +78 -0
  168. package/src/primitives/card-validate.ts +95 -0
  169. package/src/primitives/embed-providers.ts +254 -0
  170. package/src/primitives/highlighter.ts +4 -0
  171. package/src/primitives/link-preview.ts +87 -0
  172. package/src/primitives/pdf-preview.ts +121 -0
  173. package/src/stories/chat-panel-layout.stories.tsx +2 -1
  174. package/src/stories/chat-scene.tsx +22 -21
  175. package/src/stories/checkpoint-restore.stories.tsx +10 -10
  176. package/src/stories/conversation-with-reasoning.stories.tsx +4 -4
  177. package/src/stories/conversation-with-sources.stories.tsx +7 -7
  178. package/src/stories/docs/Accessibility.mdx +2 -2
  179. package/src/stories/docs/ForAIAgents.mdx +3 -3
  180. package/src/stories/docs/GettingStarted.mdx +2 -2
  181. package/src/stories/docs/Installation.mdx +2 -2
  182. package/src/stories/docs/Integrations.mdx +29 -29
  183. package/src/stories/docs/Introduction.mdx +3 -3
  184. package/src/stories/docs/Theming.mdx +2 -2
  185. package/src/stories/docs/element-controls.ts +60 -0
  186. package/src/stories/docs/theme-editor/theme-editor.tsx +1 -0
  187. package/src/stories/examples/ChoosingComponents.mdx +94 -0
  188. package/src/stories/examples/sample-data.ts +79 -0
  189. package/src/stories/message-actions.stories.tsx +13 -13
  190. package/src/stories/pattern-centered-conversation.stories.tsx +3 -3
  191. package/src/stories/pattern-docked-widget.stories.tsx +1 -1
  192. package/src/stories/pattern-empty-state.stories.tsx +3 -3
  193. package/src/stories/prompt-input-variants.stories.tsx +13 -13
  194. package/src/stories/streaming-response.stories.tsx +3 -3
  195. package/src/stories/typography.stories.tsx +4 -4
  196. package/src/ui/avatar.stories.tsx +7 -8
  197. package/src/ui/badge.stories.tsx +7 -8
  198. package/src/ui/button.stories.tsx +8 -9
  199. package/src/ui/button.tsx +1 -0
  200. package/src/ui/collapsible.stories.tsx +6 -7
  201. package/src/ui/dropdown.stories.tsx +6 -7
  202. package/src/ui/hover-card.stories.tsx +6 -7
  203. package/src/ui/resizable.stories.tsx +74 -9
  204. package/src/ui/resizable.tsx +351 -71
  205. package/src/ui/scroll-area.stories.tsx +6 -7
  206. package/src/ui/scroll-area.tsx +3 -1
  207. package/src/ui/separator.stories.tsx +7 -8
  208. package/src/ui/skeleton.stories.tsx +7 -8
  209. package/src/ui/textarea.stories.tsx +6 -7
  210. package/src/ui/tooltip.stories.tsx +8 -9
  211. package/theme.css +65 -65
@@ -0,0 +1,2649 @@
1
+ [
2
+ {
3
+ "tag": "kc-artifact",
4
+ "className": "KcArtifactElement",
5
+ "props": [
6
+ {
7
+ "name": "src",
8
+ "type": "undefined | string",
9
+ "optional": true,
10
+ "scalar": true,
11
+ "description": "URL the preview iframe frames. Consumer-controlled.",
12
+ "displayType": "undefined | string"
13
+ },
14
+ {
15
+ "name": "files",
16
+ "type": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
17
+ "optional": false,
18
+ "scalar": false,
19
+ "description": "Files for the Code tab tree + each file's preview `url`. Set as a JS property (array).",
20
+ "default": "[]",
21
+ "displayType": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]"
22
+ },
23
+ {
24
+ "name": "tab",
25
+ "type": "undefined | \"preview\" | \"code\"",
26
+ "optional": true,
27
+ "scalar": true,
28
+ "description": "Active tab: `preview` (default) or `code`.",
29
+ "default": "'preview'",
30
+ "displayType": "undefined | \"preview\" | \"code\""
31
+ },
32
+ {
33
+ "name": "activeFile",
34
+ "type": "undefined | string",
35
+ "optional": true,
36
+ "scalar": true,
37
+ "description": "Selected file path — syncs the tree highlight, Code source, and preview.",
38
+ "displayType": "undefined | string"
39
+ },
40
+ {
41
+ "name": "sandbox",
42
+ "type": "undefined | string",
43
+ "optional": true,
44
+ "scalar": true,
45
+ "description": "iframe `sandbox` override. Secure default `allow-scripts allow-forms` (NOT `allow-same-origin`).",
46
+ "default": "'allow-scripts allow-forms'",
47
+ "displayType": "undefined | string"
48
+ },
49
+ {
50
+ "name": "iframeTitle",
51
+ "type": "undefined | string",
52
+ "optional": true,
53
+ "scalar": true,
54
+ "description": "Accessible title for the preview iframe.",
55
+ "displayType": "undefined | string"
56
+ }
57
+ ],
58
+ "events": [
59
+ {
60
+ "name": "fileselect",
61
+ "detail": "{ path: string }",
62
+ "description": "Fired when a file is selected. `detail.path`.",
63
+ "displayDetail": "{ path: string }"
64
+ },
65
+ {
66
+ "name": "navigate",
67
+ "detail": "{ url: string }",
68
+ "description": "Fired when the preview navigates. `detail.url` = the new location.",
69
+ "displayDetail": "{ url: string }"
70
+ },
71
+ {
72
+ "name": "tabchange",
73
+ "detail": "{ tab: \"preview\" | \"code\" }",
74
+ "description": "Fired when the Preview|Code tab changes. `detail.tab`.",
75
+ "displayDetail": "{ tab: \"preview\" | \"code\" }"
76
+ }
77
+ ],
78
+ "composedFrom": [
79
+ {
80
+ "name": "Artifact",
81
+ "group": "Components",
82
+ "storyId": "components-artifact--docs"
83
+ }
84
+ ],
85
+ "tokens": []
86
+ },
87
+ {
88
+ "tag": "kc-attachments",
89
+ "className": "KcAttachmentsElement",
90
+ "props": [
91
+ {
92
+ "name": "items",
93
+ "type": "{ id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]",
94
+ "optional": false,
95
+ "scalar": false,
96
+ "description": "The attachments to render. Set as a JS property (array).",
97
+ "default": "[]",
98
+ "displayType": "AttachmentData[]"
99
+ },
100
+ {
101
+ "name": "variant",
102
+ "type": "undefined | \"grid\" | \"inline\" | \"list\"",
103
+ "optional": true,
104
+ "scalar": true,
105
+ "description": "Layout: `grid` = visual tiles, `inline` = icon + label chips, `list` = rows.",
106
+ "default": "'grid'",
107
+ "displayType": "undefined | \"grid\" | \"inline\" | \"list\""
108
+ },
109
+ {
110
+ "name": "hoverCard",
111
+ "type": "undefined | false | true",
112
+ "optional": true,
113
+ "scalar": true,
114
+ "description": "Wrap each item in a hover card that previews its details.",
115
+ "default": "false",
116
+ "displayType": "undefined | false | true"
117
+ },
118
+ {
119
+ "name": "removable",
120
+ "type": "undefined | false | true",
121
+ "optional": true,
122
+ "scalar": true,
123
+ "description": "Show a remove button per item; clicking it fires a `remove` event.",
124
+ "default": "false",
125
+ "displayType": "undefined | false | true"
126
+ },
127
+ {
128
+ "name": "showMediaType",
129
+ "type": "undefined | false | true",
130
+ "optional": true,
131
+ "scalar": true,
132
+ "description": "Also show the media type beneath the filename (non-grid variants).",
133
+ "default": "false",
134
+ "displayType": "undefined | false | true"
135
+ },
136
+ {
137
+ "name": "emptyText",
138
+ "type": "undefined | string",
139
+ "optional": true,
140
+ "scalar": true,
141
+ "description": "Text shown when `items` is empty.",
142
+ "displayType": "undefined | string"
143
+ }
144
+ ],
145
+ "events": [
146
+ {
147
+ "name": "remove",
148
+ "detail": "{ id: string }",
149
+ "description": "A remove button was clicked.",
150
+ "displayDetail": "{ id: string }"
151
+ }
152
+ ],
153
+ "composedFrom": [
154
+ {
155
+ "name": "Attachments",
156
+ "group": "Components",
157
+ "storyId": "components-attachments--docs"
158
+ },
159
+ {
160
+ "name": "Attachment",
161
+ "group": "Components",
162
+ "storyId": "components-attachment--docs"
163
+ },
164
+ {
165
+ "name": "AttachmentPreview",
166
+ "group": "Components",
167
+ "storyId": "components-attachmentpreview--docs"
168
+ },
169
+ {
170
+ "name": "AttachmentInfo",
171
+ "group": "Components",
172
+ "storyId": "components-attachmentinfo--docs"
173
+ },
174
+ {
175
+ "name": "AttachmentRemove",
176
+ "group": "Components",
177
+ "storyId": "components-attachmentremove--docs"
178
+ },
179
+ {
180
+ "name": "AttachmentHoverCard",
181
+ "group": "Components",
182
+ "storyId": "components-attachmenthovercard--docs"
183
+ },
184
+ {
185
+ "name": "AttachmentHoverCardTrigger",
186
+ "group": "Components",
187
+ "storyId": "components-attachmenthovercardtrigger--docs"
188
+ },
189
+ {
190
+ "name": "AttachmentHoverCardContent",
191
+ "group": "Components",
192
+ "storyId": "components-attachmenthovercardcontent--docs"
193
+ },
194
+ {
195
+ "name": "AttachmentEmpty",
196
+ "group": "Components",
197
+ "storyId": "components-attachmentempty--docs"
198
+ }
199
+ ],
200
+ "tokens": []
201
+ },
202
+ {
203
+ "tag": "kc-card",
204
+ "className": "KcCardElement",
205
+ "props": [
206
+ {
207
+ "name": "heading",
208
+ "type": "undefined | string",
209
+ "optional": true,
210
+ "scalar": true,
211
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
212
+ "displayType": "undefined | string"
213
+ },
214
+ {
215
+ "name": "description",
216
+ "type": "undefined | string",
217
+ "optional": true,
218
+ "scalar": true,
219
+ "description": "Supporting text under the heading. Attribute: `description`.",
220
+ "displayType": "undefined | string"
221
+ },
222
+ {
223
+ "name": "errorMessage",
224
+ "type": "undefined | string",
225
+ "optional": true,
226
+ "scalar": true,
227
+ "description": "When set, the card renders its inline error state instead of the body. Attribute: `error-message`.",
228
+ "displayType": "undefined | string"
229
+ },
230
+ {
231
+ "name": "dense",
232
+ "type": "undefined | false | true",
233
+ "optional": true,
234
+ "scalar": true,
235
+ "description": "Compact spacing for dense lists. Attribute: `dense`.",
236
+ "default": "false",
237
+ "displayType": "undefined | false | true"
238
+ }
239
+ ],
240
+ "events": [],
241
+ "composedFrom": [
242
+ {
243
+ "name": "Card",
244
+ "group": "Components",
245
+ "storyId": "components-card--docs"
246
+ }
247
+ ],
248
+ "tokens": []
249
+ },
250
+ {
251
+ "tag": "kc-chain-of-thought",
252
+ "className": "KcChainOfThoughtElement",
253
+ "props": [
254
+ {
255
+ "name": "steps",
256
+ "type": "{ label: string; content?: undefined | string }[]",
257
+ "optional": false,
258
+ "scalar": false,
259
+ "description": "The reasoning steps. Set as a JS property. Compound sub-parts collapse to this one data model (Route 1).",
260
+ "default": "[]",
261
+ "displayType": "{ label: string; content?: undefined | string }[]"
262
+ }
263
+ ],
264
+ "events": [],
265
+ "composedFrom": [
266
+ {
267
+ "name": "ChainOfThought",
268
+ "group": "Components",
269
+ "storyId": "components-chainofthought--docs"
270
+ },
271
+ {
272
+ "name": "ChainOfThoughtStep",
273
+ "group": "Components",
274
+ "storyId": "components-chainofthoughtstep--docs"
275
+ },
276
+ {
277
+ "name": "ChainOfThoughtTrigger",
278
+ "group": "Components",
279
+ "storyId": "components-chainofthoughttrigger--docs"
280
+ },
281
+ {
282
+ "name": "ChainOfThoughtContent",
283
+ "group": "Components",
284
+ "storyId": "components-chainofthoughtcontent--docs"
285
+ },
286
+ {
287
+ "name": "ChainOfThoughtItem",
288
+ "group": "Components",
289
+ "storyId": "components-chainofthoughtitem--docs"
290
+ }
291
+ ],
292
+ "tokens": []
293
+ },
294
+ {
295
+ "tag": "kc-chat",
296
+ "className": "KcChatElement",
297
+ "props": [
298
+ {
299
+ "name": "messages",
300
+ "type": "{ id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\")[] }[]",
301
+ "optional": false,
302
+ "scalar": false,
303
+ "description": "The full message thread to render, newest last. Each entry carries its role, content, and optional reasoning/tools/attachments/actions. Set as a JS property (`el.messages = [...]`).",
304
+ "default": "[]",
305
+ "displayType": "ChatMessage[]"
306
+ },
307
+ {
308
+ "name": "value",
309
+ "type": "undefined | string",
310
+ "optional": true,
311
+ "scalar": true,
312
+ "description": "Controlled value of the input. When set, the host owns the input text and must update it on `valuechange`; leave unset for uncontrolled behavior.",
313
+ "displayType": "undefined | string"
314
+ },
315
+ {
316
+ "name": "placeholder",
317
+ "type": "undefined | string",
318
+ "optional": true,
319
+ "scalar": true,
320
+ "description": "Placeholder text shown in the empty input.",
321
+ "default": "'Send a message...'",
322
+ "displayType": "undefined | string"
323
+ },
324
+ {
325
+ "name": "loading",
326
+ "type": "undefined | false | true",
327
+ "optional": true,
328
+ "scalar": true,
329
+ "description": "When true, shows the loading/streaming state and disables submit (use while awaiting the assistant's reply).",
330
+ "default": "false",
331
+ "displayType": "undefined | false | true"
332
+ },
333
+ {
334
+ "name": "suggestions",
335
+ "type": "undefined | string[]",
336
+ "optional": true,
337
+ "scalar": false,
338
+ "description": "Starter prompts shown above the input when the thread is empty. Clicking one follows `suggestionMode`. Set as a JS property.",
339
+ "displayType": "undefined | string[]"
340
+ },
341
+ {
342
+ "name": "suggestionMode",
343
+ "type": "undefined | \"submit\" | \"fill\"",
344
+ "optional": true,
345
+ "scalar": true,
346
+ "description": "What clicking a suggestion does: `'submit'` (default) sends it immediately as if typed and submitted; `'fill'` just places it in the input.",
347
+ "default": "'submit'",
348
+ "displayType": "undefined | \"submit\" | \"fill\""
349
+ },
350
+ {
351
+ "name": "proseSize",
352
+ "type": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\"",
353
+ "optional": true,
354
+ "scalar": true,
355
+ "description": "Body/prose font scale for rendered markdown (`'xs' | 'sm' | 'base' | 'lg'`). Defaults to `'sm'`.",
356
+ "default": "'sm'",
357
+ "displayType": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
358
+ },
359
+ {
360
+ "name": "codeTheme",
361
+ "type": "undefined | string",
362
+ "optional": true,
363
+ "scalar": true,
364
+ "description": "Shiki theme name for syntax-highlighted code blocks (e.g. `'github-dark-dimmed'`).",
365
+ "default": "'github-dark-dimmed'",
366
+ "displayType": "undefined | string"
367
+ },
368
+ {
369
+ "name": "codeHighlight",
370
+ "type": "undefined | false | true",
371
+ "optional": true,
372
+ "scalar": true,
373
+ "description": "Enable Shiki syntax highlighting in code blocks. Turn off to render plain `<pre>` blocks (lighter, no highlighter load). Default true.",
374
+ "default": "true",
375
+ "displayType": "undefined | false | true"
376
+ },
377
+ {
378
+ "name": "chatTitle",
379
+ "type": "undefined | string",
380
+ "optional": true,
381
+ "scalar": true,
382
+ "description": "Optional header title shown on the left of the header.",
383
+ "displayType": "undefined | string"
384
+ },
385
+ {
386
+ "name": "models",
387
+ "type": "undefined | { id: string; name: string; provider?: undefined | string }[]",
388
+ "optional": true,
389
+ "scalar": false,
390
+ "description": "Optional model list. When set (>1 model) a ModelSwitcher is shown in the header and a `modelchange` event fires on selection.",
391
+ "displayType": "ModelOption[] | undefined"
392
+ },
393
+ {
394
+ "name": "currentModel",
395
+ "type": "undefined | string",
396
+ "optional": true,
397
+ "scalar": true,
398
+ "description": "The currently selected model id (pairs with `models`).",
399
+ "displayType": "undefined | string"
400
+ },
401
+ {
402
+ "name": "context",
403
+ "type": "undefined | { usedTokens: number; maxTokens: number; inputTokens?: undefined | number; outputTokens?: undefined | number; estimatedCost?: undefined | number }",
404
+ "optional": true,
405
+ "scalar": false,
406
+ "description": "Optional context-window token usage. When set, a Context token meter is shown in the header.",
407
+ "displayType": "ContextData | undefined"
408
+ },
409
+ {
410
+ "name": "scrollButton",
411
+ "type": "undefined | false | true",
412
+ "optional": true,
413
+ "scalar": true,
414
+ "description": "Show the scroll-to-bottom button inside the scroll area. Default true.",
415
+ "default": "true",
416
+ "displayType": "undefined | false | true"
417
+ },
418
+ {
419
+ "name": "search",
420
+ "type": "undefined | false | true",
421
+ "optional": true,
422
+ "scalar": true,
423
+ "description": "Show a Search (Globe) button in the input toolbar; fires a `search` event.",
424
+ "default": "false",
425
+ "displayType": "undefined | false | true"
426
+ },
427
+ {
428
+ "name": "voice",
429
+ "type": "undefined | false | true",
430
+ "optional": true,
431
+ "scalar": true,
432
+ "description": "Show a Voice (Mic) button in the input toolbar; fires a `voice` event.",
433
+ "default": "false",
434
+ "displayType": "undefined | false | true"
435
+ },
436
+ {
437
+ "name": "slashCommands",
438
+ "type": "undefined | { id: string; label: string; description?: undefined | string; category?: undefined | string }[]",
439
+ "optional": true,
440
+ "scalar": false,
441
+ "description": "Slash commands — when set, typing `/` in the input opens the command palette and fires `slashselect`. Set as a JS property.",
442
+ "displayType": "SlashCommandItem[] | undefined"
443
+ },
444
+ {
445
+ "name": "slashActiveIds",
446
+ "type": "undefined | string[]",
447
+ "optional": true,
448
+ "scalar": false,
449
+ "description": "Command ids to highlight as active in the palette.",
450
+ "displayType": "undefined | string[]"
451
+ },
452
+ {
453
+ "name": "slashCompact",
454
+ "type": "undefined | false | true",
455
+ "optional": true,
456
+ "scalar": true,
457
+ "description": "Single-line palette rows.",
458
+ "default": "false",
459
+ "displayType": "undefined | false | true"
460
+ }
461
+ ],
462
+ "events": [
463
+ {
464
+ "name": "messageaction",
465
+ "detail": "{ messageId: string; action: \"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" }",
466
+ "description": "An action button on a message was clicked.",
467
+ "displayDetail": "{ messageId: string; action: ChatMessageAction }"
468
+ },
469
+ {
470
+ "name": "modelchange",
471
+ "detail": "{ modelId: string }",
472
+ "description": "The header model switcher changed.",
473
+ "displayDetail": "{ modelId: string }"
474
+ },
475
+ {
476
+ "name": "search",
477
+ "detail": "Record<string, never>",
478
+ "description": "The Search button was clicked.",
479
+ "displayDetail": "Record<string, never>"
480
+ },
481
+ {
482
+ "name": "slashselect",
483
+ "detail": "{ command: { id: string; label: string; description?: undefined | string; category?: undefined | string } }",
484
+ "description": "A slash command was chosen from the palette.",
485
+ "displayDetail": "{ command: SlashCommandItem }"
486
+ },
487
+ {
488
+ "name": "submit",
489
+ "detail": "{ value: string; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }",
490
+ "description": "User submitted a message.",
491
+ "displayDetail": "{ value: string; attachments: AttachmentData[] }"
492
+ },
493
+ {
494
+ "name": "suggestionclick",
495
+ "detail": "{ value: string }",
496
+ "description": "A suggestion chip was clicked (only in `suggestion-mode=\"fill\"`).",
497
+ "displayDetail": "{ value: string }"
498
+ },
499
+ {
500
+ "name": "valuechange",
501
+ "detail": "{ value: string }",
502
+ "description": "Fired on every input change.",
503
+ "displayDetail": "{ value: string }"
504
+ },
505
+ {
506
+ "name": "voice",
507
+ "detail": "Record<string, never>",
508
+ "description": "The Mic / voice button was clicked.",
509
+ "displayDetail": "Record<string, never>"
510
+ }
511
+ ],
512
+ "composedFrom": [
513
+ {
514
+ "name": "ChatThread",
515
+ "group": "Components",
516
+ "storyId": "components-chatthread--docs"
517
+ }
518
+ ],
519
+ "tokens": []
520
+ },
521
+ {
522
+ "tag": "kc-checkpoint",
523
+ "className": "KcCheckpointElement",
524
+ "props": [
525
+ {
526
+ "name": "label",
527
+ "type": "undefined | string",
528
+ "optional": true,
529
+ "scalar": true,
530
+ "description": "Optional text beside the icon.",
531
+ "displayType": "undefined | string"
532
+ },
533
+ {
534
+ "name": "tooltip",
535
+ "type": "undefined | string",
536
+ "optional": true,
537
+ "scalar": true,
538
+ "description": "Tooltip on hover.",
539
+ "displayType": "undefined | string"
540
+ },
541
+ {
542
+ "name": "variant",
543
+ "type": "undefined | \"ghost\" | \"default\" | \"outline\"",
544
+ "optional": true,
545
+ "scalar": true,
546
+ "description": "Visual button style.",
547
+ "default": "'ghost'",
548
+ "displayType": "undefined | \"ghost\" | \"default\" | \"outline\""
549
+ },
550
+ {
551
+ "name": "size",
552
+ "type": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\"",
553
+ "optional": true,
554
+ "scalar": true,
555
+ "description": "Button size (use an `icon*` size for an icon-only checkpoint).",
556
+ "default": "'sm'",
557
+ "displayType": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
558
+ }
559
+ ],
560
+ "events": [
561
+ {
562
+ "name": "select",
563
+ "detail": null,
564
+ "description": "The checkpoint was clicked.",
565
+ "displayDetail": null
566
+ }
567
+ ],
568
+ "composedFrom": [
569
+ {
570
+ "name": "Checkpoint",
571
+ "group": "Components",
572
+ "storyId": "components-checkpoint--docs"
573
+ },
574
+ {
575
+ "name": "CheckpointIcon",
576
+ "group": "Components",
577
+ "storyId": "components-checkpointicon--docs"
578
+ },
579
+ {
580
+ "name": "CheckpointTrigger",
581
+ "group": "Components",
582
+ "storyId": "components-checkpointtrigger--docs"
583
+ }
584
+ ],
585
+ "tokens": []
586
+ },
587
+ {
588
+ "tag": "kc-code-block",
589
+ "className": "KcCodeBlockElement",
590
+ "props": [
591
+ {
592
+ "name": "code",
593
+ "type": "string",
594
+ "optional": false,
595
+ "scalar": true,
596
+ "description": "The source code to render.",
597
+ "default": "''",
598
+ "displayType": "string"
599
+ },
600
+ {
601
+ "name": "language",
602
+ "type": "undefined | string",
603
+ "optional": true,
604
+ "scalar": true,
605
+ "description": "Language grammar (e.g. `js`, `python`). Defaults to `tsx`.",
606
+ "displayType": "undefined | string"
607
+ },
608
+ {
609
+ "name": "codeTheme",
610
+ "type": "undefined | string",
611
+ "optional": true,
612
+ "scalar": true,
613
+ "description": "Shiki theme name.",
614
+ "default": "'github-dark-dimmed'",
615
+ "displayType": "undefined | string"
616
+ },
617
+ {
618
+ "name": "codeHighlight",
619
+ "type": "undefined | false | true",
620
+ "optional": true,
621
+ "scalar": true,
622
+ "description": "Disable syntax highlighting (renders plain text, no Shiki).",
623
+ "default": "true",
624
+ "displayType": "undefined | false | true"
625
+ },
626
+ {
627
+ "name": "proseSize",
628
+ "type": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\"",
629
+ "optional": true,
630
+ "scalar": true,
631
+ "description": "Code text sizing.",
632
+ "default": "'sm'",
633
+ "displayType": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
634
+ }
635
+ ],
636
+ "events": [],
637
+ "composedFrom": [
638
+ {
639
+ "name": "CodeBlock",
640
+ "group": "Components",
641
+ "storyId": "components-codeblock--docs"
642
+ },
643
+ {
644
+ "name": "CodeBlockCode",
645
+ "group": "Components",
646
+ "storyId": "components-codeblockcode--docs"
647
+ }
648
+ ],
649
+ "tokens": [
650
+ "--color-code-foreground"
651
+ ]
652
+ },
653
+ {
654
+ "tag": "kc-confirm",
655
+ "className": "KcConfirmElement",
656
+ "props": [
657
+ {
658
+ "name": "data",
659
+ "type": "undefined | Record<string, unknown>",
660
+ "optional": true,
661
+ "scalar": false,
662
+ "description": "The confirm definition (the CardEnvelope.data). Set as a JS PROPERTY: `el.data = { body, tone, actions:[…] }`. Import `ConfirmCardData` from `@kitnai/chat` for the full shape.",
663
+ "displayType": "undefined | Record<string, unknown>"
664
+ },
665
+ {
666
+ "name": "cardId",
667
+ "type": "undefined | string",
668
+ "optional": true,
669
+ "scalar": true,
670
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
671
+ "displayType": "undefined | string"
672
+ },
673
+ {
674
+ "name": "heading",
675
+ "type": "undefined | string",
676
+ "optional": true,
677
+ "scalar": true,
678
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
679
+ "displayType": "undefined | string"
680
+ },
681
+ {
682
+ "name": "autofocus",
683
+ "type": "undefined | false | true",
684
+ "optional": true,
685
+ "scalar": true,
686
+ "description": "Focus the default action on mount (off by default — no focus-stealing). Attribute: `autofocus`.",
687
+ "default": "false",
688
+ "displayType": "undefined | false | true"
689
+ }
690
+ ],
691
+ "events": [],
692
+ "composedFrom": [
693
+ {
694
+ "name": "ConfirmCard",
695
+ "group": "Components",
696
+ "storyId": "components-confirmcard--docs"
697
+ }
698
+ ],
699
+ "tokens": []
700
+ },
701
+ {
702
+ "tag": "kc-context",
703
+ "className": "KcContextElement",
704
+ "props": [
705
+ {
706
+ "name": "context",
707
+ "type": "undefined | { usedTokens: number; maxTokens: number; inputTokens?: undefined | number; outputTokens?: undefined | number; reasoningTokens?: undefined | number; cacheTokens?: undefined | number; estimatedCost?: undefined | number }",
708
+ "optional": true,
709
+ "scalar": false,
710
+ "description": "Token-usage data. Set as a JS property.",
711
+ "displayType": "ContextData | undefined"
712
+ }
713
+ ],
714
+ "events": [],
715
+ "composedFrom": [
716
+ {
717
+ "name": "Context",
718
+ "group": "Components",
719
+ "storyId": "components-context--docs"
720
+ },
721
+ {
722
+ "name": "ContextTrigger",
723
+ "group": "Components",
724
+ "storyId": "components-contexttrigger--docs"
725
+ },
726
+ {
727
+ "name": "ContextContent",
728
+ "group": "Components",
729
+ "storyId": "components-contextcontent--docs"
730
+ },
731
+ {
732
+ "name": "ContextContentHeader",
733
+ "group": "Components",
734
+ "storyId": "components-contextcontentheader--docs"
735
+ },
736
+ {
737
+ "name": "ContextContentBody",
738
+ "group": "Components",
739
+ "storyId": "components-contextcontentbody--docs"
740
+ },
741
+ {
742
+ "name": "ContextContentFooter",
743
+ "group": "Components",
744
+ "storyId": "components-contextcontentfooter--docs"
745
+ },
746
+ {
747
+ "name": "ContextInputUsage",
748
+ "group": "Components",
749
+ "storyId": "components-contextinputusage--docs"
750
+ },
751
+ {
752
+ "name": "ContextOutputUsage",
753
+ "group": "Components",
754
+ "storyId": "components-contextoutputusage--docs"
755
+ },
756
+ {
757
+ "name": "ContextReasoningUsage",
758
+ "group": "Components",
759
+ "storyId": "components-contextreasoningusage--docs"
760
+ },
761
+ {
762
+ "name": "ContextCacheUsage",
763
+ "group": "Components",
764
+ "storyId": "components-contextcacheusage--docs"
765
+ }
766
+ ],
767
+ "tokens": []
768
+ },
769
+ {
770
+ "tag": "kc-conversations",
771
+ "className": "KcConversationsElement",
772
+ "props": [
773
+ {
774
+ "name": "groups",
775
+ "type": "{ id: string; userId?: undefined | string; teamId?: undefined | string; name: string; sortOrder: number; createdAt: string }[]",
776
+ "optional": false,
777
+ "scalar": false,
778
+ "description": "Pre-bucketed conversation groups (e.g. \"Today\", \"Yesterday\"), each with its own conversations. Use this when you want to control the grouping/headers yourself; otherwise pass a flat `conversations` array. Set as a JS property.",
779
+ "default": "[]",
780
+ "displayType": "ConversationGroup[]"
781
+ },
782
+ {
783
+ "name": "conversations",
784
+ "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 }[]",
785
+ "optional": false,
786
+ "scalar": false,
787
+ "description": "A flat list of conversation summaries; the component buckets them by recency for you. Ignored when `groups` is provided. Set as a JS property.",
788
+ "default": "[]",
789
+ "displayType": "ConversationSummary[]"
790
+ },
791
+ {
792
+ "name": "activeId",
793
+ "type": "undefined | string",
794
+ "optional": true,
795
+ "scalar": true,
796
+ "description": "The id of the currently-open conversation, highlighted in the list.",
797
+ "displayType": "undefined | string"
798
+ }
799
+ ],
800
+ "events": [
801
+ {
802
+ "name": "newchat",
803
+ "detail": "Record<string, never>",
804
+ "description": "The \"New chat\" button was clicked.",
805
+ "displayDetail": "Record<string, never>"
806
+ },
807
+ {
808
+ "name": "select",
809
+ "detail": "{ id: string }",
810
+ "description": "A conversation was selected.",
811
+ "displayDetail": "{ id: string }"
812
+ },
813
+ {
814
+ "name": "togglesidebar",
815
+ "detail": "Record<string, never>",
816
+ "description": "The sidebar toggle was clicked.",
817
+ "displayDetail": "Record<string, never>"
818
+ }
819
+ ],
820
+ "composedFrom": [
821
+ {
822
+ "name": "ConversationList",
823
+ "group": "Components",
824
+ "storyId": "components-conversationlist--docs"
825
+ }
826
+ ],
827
+ "tokens": [
828
+ "--color-sidebar",
829
+ "--color-scrollbar-thumb"
830
+ ]
831
+ },
832
+ {
833
+ "tag": "kc-embed",
834
+ "className": "KcEmbedElement",
835
+ "props": [
836
+ {
837
+ "name": "cardId",
838
+ "type": "undefined | string",
839
+ "optional": true,
840
+ "scalar": true,
841
+ "description": "Stable card id correlating every emitted event. Set as an attribute or property.",
842
+ "displayType": "undefined | string"
843
+ },
844
+ {
845
+ "name": "data",
846
+ "type": "undefined | { provider: \"youtube\" | \"vimeo\" | \"generic\"; id?: undefined | string; url?: undefined | string; title?: undefined | string; poster?: undefined | string; start?: undefined | number; aspectRatio?: undefined | \"16:9\" | \"4:3\" | \"1:1\" | \"9:16\" }",
847
+ "optional": true,
848
+ "scalar": false,
849
+ "description": "The embed payload (provider + id/url + options). Set as a JS **property** (object).",
850
+ "displayType": "undefined | { provider: \"youtube\" | \"vimeo\" | \"generic\"; id?: undefined | string; url?: undefined | string; title?: undefined | string; poster?: undefined | string; start?: undefined | number; aspectRatio?: undefined | \"16:9\" | \"4:3\" | \"1:1\" | \"9:16\" }"
851
+ }
852
+ ],
853
+ "events": [],
854
+ "composedFrom": [
855
+ {
856
+ "name": "Embed",
857
+ "group": "Components",
858
+ "storyId": "components-embed--docs"
859
+ }
860
+ ],
861
+ "tokens": []
862
+ },
863
+ {
864
+ "tag": "kc-empty",
865
+ "className": "KcEmptyElement",
866
+ "props": [
867
+ {
868
+ "name": "emptyTitle",
869
+ "type": "undefined | string",
870
+ "optional": true,
871
+ "scalar": true,
872
+ "description": "Title text. Attribute: `empty-title` (`title` is a global HTML attribute).",
873
+ "default": "''",
874
+ "displayType": "undefined | string"
875
+ },
876
+ {
877
+ "name": "description",
878
+ "type": "undefined | string",
879
+ "optional": true,
880
+ "scalar": true,
881
+ "description": "Description text.",
882
+ "default": "''",
883
+ "displayType": "undefined | string"
884
+ }
885
+ ],
886
+ "events": [],
887
+ "composedFrom": [
888
+ {
889
+ "name": "Empty",
890
+ "group": "Components",
891
+ "storyId": "components-empty--docs"
892
+ },
893
+ {
894
+ "name": "EmptyHeader",
895
+ "group": "Components",
896
+ "storyId": "components-emptyheader--docs"
897
+ },
898
+ {
899
+ "name": "EmptyMedia",
900
+ "group": "Components",
901
+ "storyId": "components-emptymedia--docs"
902
+ },
903
+ {
904
+ "name": "EmptyTitle",
905
+ "group": "Components",
906
+ "storyId": "components-emptytitle--docs"
907
+ },
908
+ {
909
+ "name": "EmptyDescription",
910
+ "group": "Components",
911
+ "storyId": "components-emptydescription--docs"
912
+ },
913
+ {
914
+ "name": "EmptyContent",
915
+ "group": "Components",
916
+ "storyId": "components-emptycontent--docs"
917
+ }
918
+ ],
919
+ "tokens": []
920
+ },
921
+ {
922
+ "tag": "kc-feedback-bar",
923
+ "className": "KcFeedbackBarElement",
924
+ "props": [
925
+ {
926
+ "name": "barTitle",
927
+ "type": "undefined | string",
928
+ "optional": true,
929
+ "scalar": true,
930
+ "description": "The banner label (e.g. \"Was this helpful?\"). Attribute: `bar-title` (`title` is avoided — it's a global HTML attribute).",
931
+ "default": "'Was this helpful?'",
932
+ "displayType": "undefined | string"
933
+ }
934
+ ],
935
+ "events": [
936
+ {
937
+ "name": "close",
938
+ "detail": null,
939
+ "description": "The user dismissed the banner.",
940
+ "displayDetail": null
941
+ },
942
+ {
943
+ "name": "helpful",
944
+ "detail": null,
945
+ "description": "The user clicked thumbs-up.",
946
+ "displayDetail": null
947
+ },
948
+ {
949
+ "name": "nothelpful",
950
+ "detail": null,
951
+ "description": "The user clicked thumbs-down.",
952
+ "displayDetail": null
953
+ }
954
+ ],
955
+ "composedFrom": [
956
+ {
957
+ "name": "FeedbackBar",
958
+ "group": "Components",
959
+ "storyId": "components-feedbackbar--docs"
960
+ }
961
+ ],
962
+ "tokens": []
963
+ },
964
+ {
965
+ "tag": "kc-file-tree",
966
+ "className": "KcFileTreeElement",
967
+ "props": [
968
+ {
969
+ "name": "files",
970
+ "type": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
971
+ "optional": false,
972
+ "scalar": false,
973
+ "description": "The files to render. Set as a JS property (array of `{ path, url?, code?, language?, type? }`).",
974
+ "default": "[]",
975
+ "displayType": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]"
976
+ },
977
+ {
978
+ "name": "activeFile",
979
+ "type": "undefined | string",
980
+ "optional": true,
981
+ "scalar": true,
982
+ "description": "Selected file path — highlighted in the tree.",
983
+ "displayType": "undefined | string"
984
+ },
985
+ {
986
+ "name": "defaultExpanded",
987
+ "type": "undefined | string[]",
988
+ "optional": true,
989
+ "scalar": false,
990
+ "description": "Folder paths expanded initially. Omit to start with all folders open.",
991
+ "displayType": "undefined | string[]"
992
+ }
993
+ ],
994
+ "events": [
995
+ {
996
+ "name": "select",
997
+ "detail": "{ path: string }",
998
+ "description": "Fired when a file is selected. `detail.path` = the file's path.",
999
+ "displayDetail": "{ path: string }"
1000
+ }
1001
+ ],
1002
+ "composedFrom": [
1003
+ {
1004
+ "name": "FileTree",
1005
+ "group": "Components",
1006
+ "storyId": "components-filetree--docs"
1007
+ }
1008
+ ],
1009
+ "tokens": []
1010
+ },
1011
+ {
1012
+ "tag": "kc-file-upload",
1013
+ "className": "KcFileUploadElement",
1014
+ "props": [
1015
+ {
1016
+ "name": "multiple",
1017
+ "type": "undefined | false | true",
1018
+ "optional": true,
1019
+ "scalar": true,
1020
+ "description": "Allow selecting multiple files (default true).",
1021
+ "default": "true",
1022
+ "displayType": "undefined | false | true"
1023
+ },
1024
+ {
1025
+ "name": "accept",
1026
+ "type": "undefined | string",
1027
+ "optional": true,
1028
+ "scalar": true,
1029
+ "description": "`accept` attribute for the file picker (e.g. `image/*`).",
1030
+ "displayType": "undefined | string"
1031
+ },
1032
+ {
1033
+ "name": "disabled",
1034
+ "type": "undefined | false | true",
1035
+ "optional": true,
1036
+ "scalar": true,
1037
+ "description": "Disable the dropzone — no clicking, no drag-and-drop.",
1038
+ "default": "false",
1039
+ "displayType": "undefined | false | true"
1040
+ },
1041
+ {
1042
+ "name": "label",
1043
+ "type": "undefined | string",
1044
+ "optional": true,
1045
+ "scalar": true,
1046
+ "description": "Default dropzone label (overridable via the default slot).",
1047
+ "default": "'Click or drop files to upload'",
1048
+ "displayType": "undefined | string"
1049
+ }
1050
+ ],
1051
+ "events": [
1052
+ {
1053
+ "name": "filesadded",
1054
+ "detail": "{ files: File[] }",
1055
+ "description": "Files were picked or dropped.",
1056
+ "displayDetail": "{ files: File[] }"
1057
+ }
1058
+ ],
1059
+ "composedFrom": [
1060
+ {
1061
+ "name": "FileUpload",
1062
+ "group": "Components",
1063
+ "storyId": "components-fileupload--docs"
1064
+ },
1065
+ {
1066
+ "name": "FileUploadTrigger",
1067
+ "group": "Components",
1068
+ "storyId": "components-fileuploadtrigger--docs"
1069
+ }
1070
+ ],
1071
+ "tokens": []
1072
+ },
1073
+ {
1074
+ "tag": "kc-form",
1075
+ "className": "KcFormElement",
1076
+ "props": [
1077
+ {
1078
+ "name": "data",
1079
+ "type": "undefined | Record<string, unknown>",
1080
+ "optional": true,
1081
+ "scalar": false,
1082
+ "description": "The form definition — a JSON Schema (`type:'object'`) + `x-kc-*` UI hints (the CardEnvelope.data). Set as a JS PROPERTY: `el.data = { type:'object', properties:{…} }`. Import the `FormDefinition` type from `@kitnai/chat` for the full shape (it is self-referential, so the element types it loosely).",
1083
+ "displayType": "undefined | Record<string, unknown>"
1084
+ },
1085
+ {
1086
+ "name": "cardId",
1087
+ "type": "undefined | string",
1088
+ "optional": true,
1089
+ "scalar": true,
1090
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
1091
+ "displayType": "undefined | string"
1092
+ },
1093
+ {
1094
+ "name": "heading",
1095
+ "type": "undefined | string",
1096
+ "optional": true,
1097
+ "scalar": true,
1098
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
1099
+ "displayType": "undefined | string"
1100
+ }
1101
+ ],
1102
+ "events": [],
1103
+ "composedFrom": [
1104
+ {
1105
+ "name": "Form",
1106
+ "group": "Components",
1107
+ "storyId": "components-form--docs"
1108
+ }
1109
+ ],
1110
+ "tokens": []
1111
+ },
1112
+ {
1113
+ "tag": "kc-image",
1114
+ "className": "KcImageElement",
1115
+ "props": [
1116
+ {
1117
+ "name": "base64",
1118
+ "type": "undefined | string",
1119
+ "optional": true,
1120
+ "scalar": true,
1121
+ "description": "Base64-encoded image data (pair with `media-type`).",
1122
+ "displayType": "undefined | string"
1123
+ },
1124
+ {
1125
+ "name": "bytes",
1126
+ "type": "undefined | Uint8Array<ArrayBufferLike>",
1127
+ "optional": true,
1128
+ "scalar": false,
1129
+ "description": "Raw image bytes (set as a JS property).",
1130
+ "displayType": "undefined | Uint8Array<ArrayBufferLike>"
1131
+ },
1132
+ {
1133
+ "name": "alt",
1134
+ "type": "undefined | string",
1135
+ "optional": true,
1136
+ "scalar": true,
1137
+ "description": "Alt text.",
1138
+ "default": "''",
1139
+ "displayType": "undefined | string"
1140
+ },
1141
+ {
1142
+ "name": "mediaType",
1143
+ "type": "undefined | string",
1144
+ "optional": true,
1145
+ "scalar": true,
1146
+ "description": "MIME type (default `image/png`).",
1147
+ "displayType": "undefined | string"
1148
+ }
1149
+ ],
1150
+ "events": [],
1151
+ "composedFrom": [
1152
+ {
1153
+ "name": "Image",
1154
+ "group": "Components",
1155
+ "storyId": "components-image--docs"
1156
+ }
1157
+ ],
1158
+ "tokens": []
1159
+ },
1160
+ {
1161
+ "tag": "kc-link-card",
1162
+ "className": "KcLinkCardElement",
1163
+ "props": [
1164
+ {
1165
+ "name": "cardId",
1166
+ "type": "undefined | string",
1167
+ "optional": true,
1168
+ "scalar": true,
1169
+ "description": "Stable card id correlating every emitted event. Set as an attribute or property.",
1170
+ "displayType": "undefined | string"
1171
+ },
1172
+ {
1173
+ "name": "data",
1174
+ "type": "undefined | { url: string; title?: undefined | string; description?: undefined | string; image?: undefined | string; imageAlt?: undefined | string; favicon?: undefined | string; domain?: undefined | string; siteName?: undefined | string }",
1175
+ "optional": true,
1176
+ "scalar": false,
1177
+ "description": "The link payload (OG metadata). Set as a JS **property** (object).",
1178
+ "displayType": "undefined | { url: string; title?: undefined | string; description?: undefined | string; image?: undefined | string; imageAlt?: undefined | string; favicon?: undefined | string; domain?: undefined | string; siteName?: undefined | string }"
1179
+ }
1180
+ ],
1181
+ "events": [],
1182
+ "composedFrom": [
1183
+ {
1184
+ "name": "LinkCard",
1185
+ "group": "Components",
1186
+ "storyId": "components-linkcard--docs"
1187
+ }
1188
+ ],
1189
+ "tokens": []
1190
+ },
1191
+ {
1192
+ "tag": "kc-loader",
1193
+ "className": "KcLoaderElement",
1194
+ "props": [
1195
+ {
1196
+ "name": "variant",
1197
+ "type": "undefined | \"circular\" | \"classic\" | \"pulse\" | \"pulse-dot\" | \"dots\" | \"typing\" | \"wave\" | \"bars\" | \"terminal\" | \"text-blink\" | \"text-shimmer\" | \"loading-dots\"",
1198
+ "optional": true,
1199
+ "scalar": true,
1200
+ "description": "The animation style: `'circular' | 'classic' | 'pulse' | 'pulse-dot' | 'dots' | 'typing' | 'wave' | 'bars' | 'terminal' | 'text-blink' | 'text-shimmer' | 'loading-dots'`. Defaults to `'circular'`.",
1201
+ "default": "'circular'",
1202
+ "displayType": "LoaderVariant | undefined"
1203
+ },
1204
+ {
1205
+ "name": "size",
1206
+ "type": "undefined | \"sm\" | \"lg\" | \"md\"",
1207
+ "optional": true,
1208
+ "scalar": true,
1209
+ "description": "Loader size: `'sm' | 'md' | 'lg'`. Defaults to `'md'`.",
1210
+ "default": "'md'",
1211
+ "displayType": "undefined | \"sm\" | \"lg\" | \"md\""
1212
+ },
1213
+ {
1214
+ "name": "text",
1215
+ "type": "undefined | string",
1216
+ "optional": true,
1217
+ "scalar": true,
1218
+ "description": "Label for the text-based variants.",
1219
+ "displayType": "undefined | string"
1220
+ }
1221
+ ],
1222
+ "events": [],
1223
+ "composedFrom": [
1224
+ {
1225
+ "name": "Loader",
1226
+ "group": "Components",
1227
+ "storyId": "components-loader--docs"
1228
+ }
1229
+ ],
1230
+ "tokens": []
1231
+ },
1232
+ {
1233
+ "tag": "kc-markdown",
1234
+ "className": "KcMarkdownElement",
1235
+ "props": [
1236
+ {
1237
+ "name": "content",
1238
+ "type": "string",
1239
+ "optional": false,
1240
+ "scalar": true,
1241
+ "description": "The markdown source to render.",
1242
+ "default": "''",
1243
+ "displayType": "string"
1244
+ },
1245
+ {
1246
+ "name": "proseSize",
1247
+ "type": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\"",
1248
+ "optional": true,
1249
+ "scalar": true,
1250
+ "description": "Text/markdown sizing.",
1251
+ "default": "'sm'",
1252
+ "displayType": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
1253
+ },
1254
+ {
1255
+ "name": "codeTheme",
1256
+ "type": "undefined | string",
1257
+ "optional": true,
1258
+ "scalar": true,
1259
+ "description": "Shiki theme for fenced code blocks.",
1260
+ "default": "'github-dark-dimmed'",
1261
+ "displayType": "undefined | string"
1262
+ },
1263
+ {
1264
+ "name": "codeHighlight",
1265
+ "type": "undefined | false | true",
1266
+ "optional": true,
1267
+ "scalar": true,
1268
+ "description": "Disable syntax highlighting (no Shiki loads).",
1269
+ "default": "true",
1270
+ "displayType": "undefined | false | true"
1271
+ }
1272
+ ],
1273
+ "events": [],
1274
+ "composedFrom": [
1275
+ {
1276
+ "name": "Markdown",
1277
+ "group": "Components",
1278
+ "storyId": "components-markdown--docs"
1279
+ }
1280
+ ],
1281
+ "tokens": []
1282
+ },
1283
+ {
1284
+ "tag": "kc-message",
1285
+ "className": "KcMessageElement",
1286
+ "props": [
1287
+ {
1288
+ "name": "message",
1289
+ "type": "undefined | { id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\")[] }",
1290
+ "optional": true,
1291
+ "scalar": false,
1292
+ "description": "The full message object. Set as a JS property.",
1293
+ "displayType": "ChatMessage | undefined"
1294
+ },
1295
+ {
1296
+ "name": "role",
1297
+ "type": "undefined | \"user\" | \"assistant\"",
1298
+ "optional": true,
1299
+ "scalar": true,
1300
+ "description": "Convenience for simple cases when not passing a `message` object.",
1301
+ "default": "'assistant'",
1302
+ "displayType": "undefined | \"user\" | \"assistant\""
1303
+ },
1304
+ {
1305
+ "name": "content",
1306
+ "type": "undefined | string",
1307
+ "optional": true,
1308
+ "scalar": true,
1309
+ "description": "Convenience content (used when `message` is not set).",
1310
+ "displayType": "undefined | string"
1311
+ },
1312
+ {
1313
+ "name": "markdown",
1314
+ "type": "undefined | false | true",
1315
+ "optional": true,
1316
+ "scalar": true,
1317
+ "description": "Force markdown on/off. Defaults to on for assistant, off for user.",
1318
+ "displayType": "undefined | false | true"
1319
+ },
1320
+ {
1321
+ "name": "proseSize",
1322
+ "type": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\"",
1323
+ "optional": true,
1324
+ "scalar": true,
1325
+ "description": "Text/markdown sizing for the message body.",
1326
+ "default": "'sm'",
1327
+ "displayType": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
1328
+ },
1329
+ {
1330
+ "name": "codeTheme",
1331
+ "type": "undefined | string",
1332
+ "optional": true,
1333
+ "scalar": true,
1334
+ "description": "Shiki theme name used for fenced code blocks in the content.",
1335
+ "default": "'github-dark-dimmed'",
1336
+ "displayType": "undefined | string"
1337
+ },
1338
+ {
1339
+ "name": "codeHighlight",
1340
+ "type": "undefined | false | true",
1341
+ "optional": true,
1342
+ "scalar": true,
1343
+ "description": "Disable syntax highlighting for code blocks (no Shiki loads).",
1344
+ "default": "true",
1345
+ "displayType": "undefined | false | true"
1346
+ }
1347
+ ],
1348
+ "events": [
1349
+ {
1350
+ "name": "messageaction",
1351
+ "detail": "{ messageId: string; action: \"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" }",
1352
+ "description": "An action button was clicked.",
1353
+ "displayDetail": "{ messageId: string; action: ChatMessageAction }"
1354
+ }
1355
+ ],
1356
+ "composedFrom": [
1357
+ {
1358
+ "name": "Message",
1359
+ "group": "Components",
1360
+ "storyId": "components-message--docs"
1361
+ },
1362
+ {
1363
+ "name": "MessageContent",
1364
+ "group": "Components",
1365
+ "storyId": "components-messagecontent--docs"
1366
+ },
1367
+ {
1368
+ "name": "MessageActions",
1369
+ "group": "Components",
1370
+ "storyId": "components-messageactions--docs"
1371
+ },
1372
+ {
1373
+ "name": "Reasoning",
1374
+ "group": "Components",
1375
+ "storyId": "components-reasoning--docs"
1376
+ },
1377
+ {
1378
+ "name": "ReasoningTrigger",
1379
+ "group": "Components",
1380
+ "storyId": "components-reasoningtrigger--docs"
1381
+ },
1382
+ {
1383
+ "name": "ReasoningContent",
1384
+ "group": "Components",
1385
+ "storyId": "components-reasoningcontent--docs"
1386
+ },
1387
+ {
1388
+ "name": "Tool",
1389
+ "group": "Components",
1390
+ "storyId": "components-tool--docs"
1391
+ },
1392
+ {
1393
+ "name": "Attachments",
1394
+ "group": "Components",
1395
+ "storyId": "components-attachments--docs"
1396
+ },
1397
+ {
1398
+ "name": "Attachment",
1399
+ "group": "Components",
1400
+ "storyId": "components-attachment--docs"
1401
+ },
1402
+ {
1403
+ "name": "AttachmentPreview",
1404
+ "group": "Components",
1405
+ "storyId": "components-attachmentpreview--docs"
1406
+ },
1407
+ {
1408
+ "name": "AttachmentInfo",
1409
+ "group": "Components",
1410
+ "storyId": "components-attachmentinfo--docs"
1411
+ },
1412
+ {
1413
+ "name": "Button",
1414
+ "group": "UI",
1415
+ "storyId": "ui-button--docs"
1416
+ }
1417
+ ],
1418
+ "tokens": []
1419
+ },
1420
+ {
1421
+ "tag": "kc-model-switcher",
1422
+ "className": "KcModelSwitcherElement",
1423
+ "props": [
1424
+ {
1425
+ "name": "models",
1426
+ "type": "{ id: string; name: string; provider?: undefined | string }[]",
1427
+ "optional": false,
1428
+ "scalar": false,
1429
+ "description": "The selectable models. Set as a JS property (array).",
1430
+ "default": "[]",
1431
+ "displayType": "{ id: string; name: string; provider?: undefined | string }[]"
1432
+ },
1433
+ {
1434
+ "name": "currentModel",
1435
+ "type": "undefined | string",
1436
+ "optional": true,
1437
+ "scalar": true,
1438
+ "description": "The currently-selected model id. Defaults to the first model.",
1439
+ "displayType": "undefined | string"
1440
+ }
1441
+ ],
1442
+ "events": [
1443
+ {
1444
+ "name": "modelchange",
1445
+ "detail": "{ modelId: string }",
1446
+ "description": "A model was selected.",
1447
+ "displayDetail": "{ modelId: string }"
1448
+ }
1449
+ ],
1450
+ "composedFrom": [
1451
+ {
1452
+ "name": "ModelSwitcher",
1453
+ "group": "Components",
1454
+ "storyId": "components-modelswitcher--docs"
1455
+ }
1456
+ ],
1457
+ "tokens": []
1458
+ },
1459
+ {
1460
+ "tag": "kc-prompt-input",
1461
+ "className": "KcPromptInputElement",
1462
+ "props": [
1463
+ {
1464
+ "name": "value",
1465
+ "type": "undefined | string",
1466
+ "optional": true,
1467
+ "scalar": true,
1468
+ "description": "Controlled value of the input. When set, the host owns the text and must update it on `valuechange`; leave unset for uncontrolled behavior.",
1469
+ "displayType": "undefined | string"
1470
+ },
1471
+ {
1472
+ "name": "placeholder",
1473
+ "type": "undefined | string",
1474
+ "optional": true,
1475
+ "scalar": true,
1476
+ "description": "Placeholder text shown in the empty input.",
1477
+ "default": "'Send a message...'",
1478
+ "displayType": "undefined | string"
1479
+ },
1480
+ {
1481
+ "name": "disabled",
1482
+ "type": "undefined | false | true",
1483
+ "optional": true,
1484
+ "scalar": true,
1485
+ "description": "Disable the input and submit button entirely (non-interactive).",
1486
+ "default": "false",
1487
+ "displayType": "undefined | false | true"
1488
+ },
1489
+ {
1490
+ "name": "loading",
1491
+ "type": "undefined | false | true",
1492
+ "optional": true,
1493
+ "scalar": true,
1494
+ "description": "Show the loading/streaming state and block submit (use while awaiting a reply).",
1495
+ "default": "false",
1496
+ "displayType": "undefined | false | true"
1497
+ },
1498
+ {
1499
+ "name": "suggestions",
1500
+ "type": "undefined | string[]",
1501
+ "optional": true,
1502
+ "scalar": false,
1503
+ "description": "Starter prompts shown above the input. Clicking one follows `suggestionMode`. Set as a JS property.",
1504
+ "displayType": "undefined | string[]"
1505
+ },
1506
+ {
1507
+ "name": "suggestionMode",
1508
+ "type": "undefined | \"submit\" | \"fill\"",
1509
+ "optional": true,
1510
+ "scalar": true,
1511
+ "description": "What clicking a suggestion does: `'submit'` (default) sends it immediately as if typed and submitted; `'fill'` just places it in the input.",
1512
+ "default": "'submit'",
1513
+ "displayType": "undefined | \"submit\" | \"fill\""
1514
+ },
1515
+ {
1516
+ "name": "slashCommands",
1517
+ "type": "undefined | { id: string; label: string; description?: undefined | string; category?: undefined | string }[]",
1518
+ "optional": true,
1519
+ "scalar": false,
1520
+ "description": "Slash commands — when set, typing `/` opens the command palette. Set as a JS property.",
1521
+ "displayType": "SlashCommandItem[] | undefined"
1522
+ },
1523
+ {
1524
+ "name": "slashActiveIds",
1525
+ "type": "undefined | string[]",
1526
+ "optional": true,
1527
+ "scalar": false,
1528
+ "description": "Command ids to highlight as active.",
1529
+ "displayType": "undefined | string[]"
1530
+ },
1531
+ {
1532
+ "name": "slashCompact",
1533
+ "type": "undefined | false | true",
1534
+ "optional": true,
1535
+ "scalar": true,
1536
+ "description": "Single-line palette rows.",
1537
+ "default": "false",
1538
+ "displayType": "undefined | false | true"
1539
+ },
1540
+ {
1541
+ "name": "search",
1542
+ "type": "undefined | false | true",
1543
+ "optional": true,
1544
+ "scalar": true,
1545
+ "description": "Show a Search (Globe) button in the left toolbar; clicking it fires a `search` event.",
1546
+ "default": "false",
1547
+ "displayType": "undefined | false | true"
1548
+ },
1549
+ {
1550
+ "name": "voice",
1551
+ "type": "undefined | false | true",
1552
+ "optional": true,
1553
+ "scalar": true,
1554
+ "description": "Show a Voice (Mic) button in the left toolbar; clicking it fires a `voice` event.",
1555
+ "default": "false",
1556
+ "displayType": "undefined | false | true"
1557
+ },
1558
+ {
1559
+ "name": "attachments",
1560
+ "type": "undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]",
1561
+ "optional": true,
1562
+ "scalar": false,
1563
+ "description": "Attachments to seed the input with (so a consumer can pre-populate staged files without an upload). Set as a JS property; the element then manages its own attachment state from there (add via the paperclip, remove per chip).",
1564
+ "displayType": "AttachmentData[] | undefined"
1565
+ }
1566
+ ],
1567
+ "events": [
1568
+ {
1569
+ "name": "search",
1570
+ "detail": "Record<string, never>",
1571
+ "description": "The Search (Globe) toolbar button was clicked.",
1572
+ "displayDetail": "Record<string, never>"
1573
+ },
1574
+ {
1575
+ "name": "slashselect",
1576
+ "detail": "{ command: { id: string; label: string; description?: undefined | string; category?: undefined | string } }",
1577
+ "description": "A slash command was chosen from the palette.",
1578
+ "displayDetail": "{ command: SlashCommandItem }"
1579
+ },
1580
+ {
1581
+ "name": "submit",
1582
+ "detail": "{ value: string; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }",
1583
+ "description": "The user submitted the prompt (Enter or send button) with its attachments.",
1584
+ "displayDetail": "{ value: string; attachments: AttachmentData[] }"
1585
+ },
1586
+ {
1587
+ "name": "suggestionclick",
1588
+ "detail": "{ value: string }",
1589
+ "description": "A suggestion was clicked while `suggestion-mode=\"fill\"`.",
1590
+ "displayDetail": "{ value: string }"
1591
+ },
1592
+ {
1593
+ "name": "valuechange",
1594
+ "detail": "{ value: string }",
1595
+ "description": "The input text changed (fires on every keystroke).",
1596
+ "displayDetail": "{ value: string }"
1597
+ },
1598
+ {
1599
+ "name": "voice",
1600
+ "detail": "Record<string, never>",
1601
+ "description": "The Voice (Mic) toolbar button was clicked.",
1602
+ "displayDetail": "Record<string, never>"
1603
+ }
1604
+ ],
1605
+ "composedFrom": [],
1606
+ "tokens": []
1607
+ },
1608
+ {
1609
+ "tag": "kc-reasoning",
1610
+ "className": "KcReasoningElement",
1611
+ "props": [
1612
+ {
1613
+ "name": "text",
1614
+ "type": "string",
1615
+ "optional": false,
1616
+ "scalar": true,
1617
+ "description": "The reasoning text to display.",
1618
+ "default": "''",
1619
+ "displayType": "string"
1620
+ },
1621
+ {
1622
+ "name": "label",
1623
+ "type": "undefined | string",
1624
+ "optional": true,
1625
+ "scalar": true,
1626
+ "description": "Trigger label.",
1627
+ "default": "'Reasoning'",
1628
+ "displayType": "undefined | string"
1629
+ },
1630
+ {
1631
+ "name": "open",
1632
+ "type": "undefined | false | true",
1633
+ "optional": true,
1634
+ "scalar": true,
1635
+ "description": "Controlled open state — set as a property (`el.open = true`). Omit for uncontrolled (the trigger toggles it).",
1636
+ "displayType": "undefined | false | true"
1637
+ },
1638
+ {
1639
+ "name": "streaming",
1640
+ "type": "undefined | false | true",
1641
+ "optional": true,
1642
+ "scalar": true,
1643
+ "description": "While true, auto-expands (and re-collapses when it flips false).",
1644
+ "default": "false",
1645
+ "displayType": "undefined | false | true"
1646
+ },
1647
+ {
1648
+ "name": "markdown",
1649
+ "type": "undefined | false | true",
1650
+ "optional": true,
1651
+ "scalar": true,
1652
+ "description": "Render `text` as markdown.",
1653
+ "default": "true",
1654
+ "displayType": "undefined | false | true"
1655
+ }
1656
+ ],
1657
+ "events": [
1658
+ {
1659
+ "name": "openchange",
1660
+ "detail": "{ open: false | true }",
1661
+ "description": "Open state changed (via the trigger or streaming auto-open).",
1662
+ "displayDetail": "{ open: false | true }"
1663
+ }
1664
+ ],
1665
+ "composedFrom": [
1666
+ {
1667
+ "name": "Reasoning",
1668
+ "group": "Components",
1669
+ "storyId": "components-reasoning--docs"
1670
+ },
1671
+ {
1672
+ "name": "ReasoningTrigger",
1673
+ "group": "Components",
1674
+ "storyId": "components-reasoningtrigger--docs"
1675
+ },
1676
+ {
1677
+ "name": "ReasoningContent",
1678
+ "group": "Components",
1679
+ "storyId": "components-reasoningcontent--docs"
1680
+ }
1681
+ ],
1682
+ "tokens": []
1683
+ },
1684
+ {
1685
+ "tag": "kc-resizable",
1686
+ "className": "KcResizableElement",
1687
+ "props": [
1688
+ {
1689
+ "name": "orientation",
1690
+ "type": "undefined | \"horizontal\" | \"vertical\"",
1691
+ "optional": true,
1692
+ "scalar": true,
1693
+ "description": "Layout axis: `horizontal` (row, default) or `vertical` (column).",
1694
+ "default": "'horizontal'",
1695
+ "displayType": "undefined | \"horizontal\" | \"vertical\""
1696
+ }
1697
+ ],
1698
+ "events": [
1699
+ {
1700
+ "name": "change",
1701
+ "detail": "{ sizes: number[] }",
1702
+ "description": "Fired on drag-end / keyboard resize / visibility change. `detail.sizes` = panel sizes in percent.",
1703
+ "displayDetail": "{ sizes: number[] }"
1704
+ }
1705
+ ],
1706
+ "composedFrom": [
1707
+ {
1708
+ "name": "ResizableHandle",
1709
+ "group": "UI",
1710
+ "storyId": "ui-resizablehandle--docs"
1711
+ }
1712
+ ],
1713
+ "tokens": []
1714
+ },
1715
+ {
1716
+ "tag": "kc-resizable-item",
1717
+ "className": "KcResizableItemElement",
1718
+ "props": [
1719
+ {
1720
+ "name": "size",
1721
+ "type": "undefined | string",
1722
+ "optional": true,
1723
+ "scalar": true,
1724
+ "description": "Initial main-axis size: `\"280px\"` (fixed) or `\"25%\"`/`25` (percent). Omitted → flexible.",
1725
+ "displayType": "undefined | string"
1726
+ },
1727
+ {
1728
+ "name": "min",
1729
+ "type": "undefined | string",
1730
+ "optional": true,
1731
+ "scalar": true,
1732
+ "description": "Minimum size during resize (px or %).",
1733
+ "displayType": "undefined | string"
1734
+ },
1735
+ {
1736
+ "name": "max",
1737
+ "type": "undefined | string",
1738
+ "optional": true,
1739
+ "scalar": true,
1740
+ "description": "Maximum size during resize (px or %).",
1741
+ "displayType": "undefined | string"
1742
+ },
1743
+ {
1744
+ "name": "locked",
1745
+ "type": "undefined | false | true",
1746
+ "optional": true,
1747
+ "scalar": true,
1748
+ "description": "Fix this panel's size; adjacent dividers become non-draggable.",
1749
+ "default": "false",
1750
+ "displayType": "undefined | false | true"
1751
+ },
1752
+ {
1753
+ "name": "hidden",
1754
+ "type": "undefined | false | true",
1755
+ "optional": true,
1756
+ "scalar": true,
1757
+ "description": "Hide this panel; its divider is dropped and the rest reflow.",
1758
+ "default": "false",
1759
+ "displayType": "undefined | false | true"
1760
+ }
1761
+ ],
1762
+ "events": [
1763
+ {
1764
+ "name": "change",
1765
+ "detail": "unknown",
1766
+ "description": "",
1767
+ "displayDetail": "unknown"
1768
+ }
1769
+ ],
1770
+ "composedFrom": [
1771
+ {
1772
+ "name": "ResizableHandle",
1773
+ "group": "UI",
1774
+ "storyId": "ui-resizablehandle--docs"
1775
+ }
1776
+ ],
1777
+ "tokens": []
1778
+ },
1779
+ {
1780
+ "tag": "kc-response-stream",
1781
+ "className": "KcResponseStreamElement",
1782
+ "props": [
1783
+ {
1784
+ "name": "text",
1785
+ "type": "undefined | string | AsyncIterable<string>",
1786
+ "optional": true,
1787
+ "scalar": false,
1788
+ "description": "Text to stream. A string, or an `AsyncIterable<string>` (set as a JS property — async iterables can't be HTML attributes).",
1789
+ "default": "''",
1790
+ "displayType": "undefined | string | AsyncIterable<string>"
1791
+ },
1792
+ {
1793
+ "name": "mode",
1794
+ "type": "undefined | \"typewriter\" | \"fade\"",
1795
+ "optional": true,
1796
+ "scalar": true,
1797
+ "description": "Reveal animation.",
1798
+ "default": "'typewriter'",
1799
+ "displayType": "undefined | \"typewriter\" | \"fade\""
1800
+ },
1801
+ {
1802
+ "name": "speed",
1803
+ "type": "undefined | number",
1804
+ "optional": true,
1805
+ "scalar": true,
1806
+ "description": "Characters/segments per tick.",
1807
+ "default": "20",
1808
+ "displayType": "undefined | number"
1809
+ },
1810
+ {
1811
+ "name": "as",
1812
+ "type": "undefined | string",
1813
+ "optional": true,
1814
+ "scalar": true,
1815
+ "description": "Element tag to render as.",
1816
+ "displayType": "undefined | string"
1817
+ }
1818
+ ],
1819
+ "events": [
1820
+ {
1821
+ "name": "complete",
1822
+ "detail": null,
1823
+ "description": "Streaming finished.",
1824
+ "displayDetail": null
1825
+ }
1826
+ ],
1827
+ "composedFrom": [
1828
+ {
1829
+ "name": "ResponseStream",
1830
+ "group": "Components",
1831
+ "storyId": "components-responsestream--docs"
1832
+ }
1833
+ ],
1834
+ "tokens": []
1835
+ },
1836
+ {
1837
+ "tag": "kc-scope-picker",
1838
+ "className": "KcScopePickerElement",
1839
+ "props": [
1840
+ {
1841
+ "name": "availableAuthors",
1842
+ "type": "string[]",
1843
+ "optional": false,
1844
+ "scalar": false,
1845
+ "description": "Authors to offer as scope filters. Set as a JS property.",
1846
+ "default": "[]",
1847
+ "displayType": "string[]"
1848
+ },
1849
+ {
1850
+ "name": "availableTags",
1851
+ "type": "string[]",
1852
+ "optional": false,
1853
+ "scalar": false,
1854
+ "description": "Tags to offer as scope filters. Set as a JS property.",
1855
+ "default": "[]",
1856
+ "displayType": "string[]"
1857
+ },
1858
+ {
1859
+ "name": "currentLabel",
1860
+ "type": "undefined | string",
1861
+ "optional": true,
1862
+ "scalar": true,
1863
+ "description": "The label shown on the trigger for the active scope.",
1864
+ "default": "'All Content'",
1865
+ "displayType": "undefined | string"
1866
+ }
1867
+ ],
1868
+ "events": [
1869
+ {
1870
+ "name": "scopechange",
1871
+ "detail": "{ filters: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }",
1872
+ "description": "A scope was chosen (`undefined` filters = \"All Content\").",
1873
+ "displayDetail": "{ filters: SearchFilters | undefined }"
1874
+ }
1875
+ ],
1876
+ "composedFrom": [
1877
+ {
1878
+ "name": "ChatScopePicker",
1879
+ "group": "Components",
1880
+ "storyId": "components-chatscopepicker--docs"
1881
+ }
1882
+ ],
1883
+ "tokens": []
1884
+ },
1885
+ {
1886
+ "tag": "kc-skills",
1887
+ "className": "KcSkillsElement",
1888
+ "props": [
1889
+ {
1890
+ "name": "skills",
1891
+ "type": "{ id: string; name: string }[]",
1892
+ "optional": false,
1893
+ "scalar": false,
1894
+ "description": "The active skills to badge. Set as a JS property.",
1895
+ "default": "[]",
1896
+ "displayType": "{ id: string; name: string }[]"
1897
+ }
1898
+ ],
1899
+ "events": [],
1900
+ "composedFrom": [
1901
+ {
1902
+ "name": "MessageSkills",
1903
+ "group": "Components",
1904
+ "storyId": "components-messageskills--docs"
1905
+ }
1906
+ ],
1907
+ "tokens": []
1908
+ },
1909
+ {
1910
+ "tag": "kc-source",
1911
+ "className": "KcSourceElement",
1912
+ "props": [
1913
+ {
1914
+ "name": "href",
1915
+ "type": "undefined | string",
1916
+ "optional": true,
1917
+ "scalar": true,
1918
+ "description": "The URL this citation links to (the domain also seeds the default label/favicon).",
1919
+ "default": "''",
1920
+ "displayType": "undefined | string"
1921
+ },
1922
+ {
1923
+ "name": "label",
1924
+ "type": "undefined | string",
1925
+ "optional": true,
1926
+ "scalar": true,
1927
+ "description": "Trigger label (defaults to the domain).",
1928
+ "displayType": "undefined | string"
1929
+ },
1930
+ {
1931
+ "name": "headline",
1932
+ "type": "undefined | string",
1933
+ "optional": true,
1934
+ "scalar": true,
1935
+ "description": "Hover-card headline. Attribute: `headline` (`title` is avoided — it's a global HTML attribute that reflects in a CE constructor and breaks it).",
1936
+ "default": "''",
1937
+ "displayType": "undefined | string"
1938
+ },
1939
+ {
1940
+ "name": "description",
1941
+ "type": "undefined | string",
1942
+ "optional": true,
1943
+ "scalar": true,
1944
+ "description": "Hover-card body text describing the source.",
1945
+ "default": "''",
1946
+ "displayType": "undefined | string"
1947
+ },
1948
+ {
1949
+ "name": "showFavicon",
1950
+ "type": "undefined | false | true",
1951
+ "optional": true,
1952
+ "scalar": true,
1953
+ "description": "Show the source's favicon next to the trigger label.",
1954
+ "default": "false",
1955
+ "displayType": "undefined | false | true"
1956
+ }
1957
+ ],
1958
+ "events": [],
1959
+ "composedFrom": [
1960
+ {
1961
+ "name": "Source",
1962
+ "group": "Components",
1963
+ "storyId": "components-source--docs"
1964
+ },
1965
+ {
1966
+ "name": "SourceTrigger",
1967
+ "group": "Components",
1968
+ "storyId": "components-sourcetrigger--docs"
1969
+ },
1970
+ {
1971
+ "name": "SourceContent",
1972
+ "group": "Components",
1973
+ "storyId": "components-sourcecontent--docs"
1974
+ },
1975
+ {
1976
+ "name": "SourceList",
1977
+ "group": "Components",
1978
+ "storyId": "components-sourcelist--docs"
1979
+ }
1980
+ ],
1981
+ "tokens": []
1982
+ },
1983
+ {
1984
+ "tag": "kc-sources",
1985
+ "className": "KcSourcesElement",
1986
+ "props": [
1987
+ {
1988
+ "name": "sources",
1989
+ "type": "{ href: string; title?: undefined | string; description?: undefined | string; label?: undefined | string; showFavicon?: undefined | false | true }[]",
1990
+ "optional": false,
1991
+ "scalar": false,
1992
+ "description": "The sources to render. Set as a JS property.",
1993
+ "default": "[]",
1994
+ "displayType": "SourceItem[]"
1995
+ },
1996
+ {
1997
+ "name": "showFavicon",
1998
+ "type": "undefined | false | true",
1999
+ "optional": true,
2000
+ "scalar": true,
2001
+ "description": "Show favicons on all items (per-item `showFavicon` overrides).",
2002
+ "default": "false",
2003
+ "displayType": "undefined | false | true"
2004
+ }
2005
+ ],
2006
+ "events": [],
2007
+ "composedFrom": [
2008
+ {
2009
+ "name": "Source",
2010
+ "group": "Components",
2011
+ "storyId": "components-source--docs"
2012
+ },
2013
+ {
2014
+ "name": "SourceTrigger",
2015
+ "group": "Components",
2016
+ "storyId": "components-sourcetrigger--docs"
2017
+ },
2018
+ {
2019
+ "name": "SourceContent",
2020
+ "group": "Components",
2021
+ "storyId": "components-sourcecontent--docs"
2022
+ },
2023
+ {
2024
+ "name": "SourceList",
2025
+ "group": "Components",
2026
+ "storyId": "components-sourcelist--docs"
2027
+ }
2028
+ ],
2029
+ "tokens": []
2030
+ },
2031
+ {
2032
+ "tag": "kc-suggestions",
2033
+ "className": "KcSuggestionsElement",
2034
+ "props": [
2035
+ {
2036
+ "name": "suggestions",
2037
+ "type": "(string | { label: string; value?: undefined | string })[]",
2038
+ "optional": false,
2039
+ "scalar": false,
2040
+ "description": "The suggestions. Strings, or `{ label, value }` when the displayed text and the emitted value differ. Set as a JS property.",
2041
+ "default": "[]",
2042
+ "displayType": "(string | { label: string; value?: undefined | string })[]"
2043
+ },
2044
+ {
2045
+ "name": "variant",
2046
+ "type": "undefined | \"ghost\" | \"default\" | \"outline\"",
2047
+ "optional": true,
2048
+ "scalar": true,
2049
+ "description": "Chip style: `'outline'` (default), `'ghost'`, or `'default'` (filled).",
2050
+ "default": "'outline'",
2051
+ "displayType": "undefined | \"ghost\" | \"default\" | \"outline\""
2052
+ },
2053
+ {
2054
+ "name": "size",
2055
+ "type": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\"",
2056
+ "optional": true,
2057
+ "scalar": true,
2058
+ "description": "Size preset for each chip. Defaults to the pill default (`'lg'`); pass `'sm'` for smaller pills (or `'md'`).",
2059
+ "displayType": "undefined | \"sm\" | \"lg\" | \"md\" | \"icon\" | \"icon-sm\""
2060
+ },
2061
+ {
2062
+ "name": "block",
2063
+ "type": "undefined | false | true",
2064
+ "optional": true,
2065
+ "scalar": true,
2066
+ "description": "Full-width left-aligned rows instead of pills.",
2067
+ "default": "false",
2068
+ "displayType": "undefined | false | true"
2069
+ },
2070
+ {
2071
+ "name": "highlight",
2072
+ "type": "undefined | string",
2073
+ "optional": true,
2074
+ "scalar": true,
2075
+ "description": "Substring to highlight within each suggestion.",
2076
+ "displayType": "undefined | string"
2077
+ }
2078
+ ],
2079
+ "events": [
2080
+ {
2081
+ "name": "select",
2082
+ "detail": "{ value: string }",
2083
+ "description": "A suggestion was clicked.",
2084
+ "displayDetail": "{ value: string }"
2085
+ }
2086
+ ],
2087
+ "composedFrom": [
2088
+ {
2089
+ "name": "PromptSuggestion",
2090
+ "group": "Components",
2091
+ "storyId": "components-promptsuggestion--docs"
2092
+ }
2093
+ ],
2094
+ "tokens": []
2095
+ },
2096
+ {
2097
+ "tag": "kc-task-list",
2098
+ "className": "KcTaskListElement",
2099
+ "props": [
2100
+ {
2101
+ "name": "data",
2102
+ "type": "undefined | Record<string, unknown>",
2103
+ "optional": true,
2104
+ "scalar": false,
2105
+ "description": "The task-list definition (the CardEnvelope.data). Set as a JS PROPERTY: `el.data = { tasks:[…], selectAll, confirmLabel, … }`. Import `TaskListCardData` from `@kitnai/chat` for the full shape.",
2106
+ "displayType": "undefined | Record<string, unknown>"
2107
+ },
2108
+ {
2109
+ "name": "cardId",
2110
+ "type": "undefined | string",
2111
+ "optional": true,
2112
+ "scalar": true,
2113
+ "description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
2114
+ "displayType": "undefined | string"
2115
+ },
2116
+ {
2117
+ "name": "heading",
2118
+ "type": "undefined | string",
2119
+ "optional": true,
2120
+ "scalar": true,
2121
+ "description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
2122
+ "displayType": "undefined | string"
2123
+ }
2124
+ ],
2125
+ "events": [],
2126
+ "composedFrom": [
2127
+ {
2128
+ "name": "TaskListCard",
2129
+ "group": "Components",
2130
+ "storyId": "components-tasklistcard--docs"
2131
+ }
2132
+ ],
2133
+ "tokens": []
2134
+ },
2135
+ {
2136
+ "tag": "kc-text-shimmer",
2137
+ "className": "KcTextShimmerElement",
2138
+ "props": [
2139
+ {
2140
+ "name": "text",
2141
+ "type": "undefined | string",
2142
+ "optional": true,
2143
+ "scalar": true,
2144
+ "description": "The text to shimmer.",
2145
+ "default": "''",
2146
+ "displayType": "undefined | string"
2147
+ },
2148
+ {
2149
+ "name": "as",
2150
+ "type": "undefined | string",
2151
+ "optional": true,
2152
+ "scalar": true,
2153
+ "description": "Element tag to render as (default `span`).",
2154
+ "default": "'span'",
2155
+ "displayType": "undefined | string"
2156
+ },
2157
+ {
2158
+ "name": "duration",
2159
+ "type": "undefined | number",
2160
+ "optional": true,
2161
+ "scalar": true,
2162
+ "description": "Animation duration in seconds.",
2163
+ "default": "4",
2164
+ "displayType": "undefined | number"
2165
+ },
2166
+ {
2167
+ "name": "spread",
2168
+ "type": "undefined | number",
2169
+ "optional": true,
2170
+ "scalar": true,
2171
+ "description": "Gradient spread (5–45).",
2172
+ "default": "20",
2173
+ "displayType": "undefined | number"
2174
+ }
2175
+ ],
2176
+ "events": [],
2177
+ "composedFrom": [
2178
+ {
2179
+ "name": "TextShimmer",
2180
+ "group": "Components",
2181
+ "storyId": "components-textshimmer--docs"
2182
+ }
2183
+ ],
2184
+ "tokens": []
2185
+ },
2186
+ {
2187
+ "tag": "kc-thinking-bar",
2188
+ "className": "KcThinkingBarElement",
2189
+ "props": [
2190
+ {
2191
+ "name": "text",
2192
+ "type": "undefined | string",
2193
+ "optional": true,
2194
+ "scalar": true,
2195
+ "description": "The shimmering label, e.g. \"Thinking…\".",
2196
+ "default": "'Thinking'",
2197
+ "displayType": "undefined | string"
2198
+ },
2199
+ {
2200
+ "name": "stoppable",
2201
+ "type": "undefined | false | true",
2202
+ "optional": true,
2203
+ "scalar": true,
2204
+ "description": "When true, show a \"stop\" affordance that fires a `stop` event.",
2205
+ "default": "false",
2206
+ "displayType": "undefined | false | true"
2207
+ },
2208
+ {
2209
+ "name": "stopLabel",
2210
+ "type": "undefined | string",
2211
+ "optional": true,
2212
+ "scalar": true,
2213
+ "description": "Label for the stop affordance.",
2214
+ "default": "'Answer now'",
2215
+ "displayType": "undefined | string"
2216
+ }
2217
+ ],
2218
+ "events": [
2219
+ {
2220
+ "name": "stop",
2221
+ "detail": null,
2222
+ "description": "The \"stop / answer now\" affordance was clicked.",
2223
+ "displayDetail": null
2224
+ }
2225
+ ],
2226
+ "composedFrom": [
2227
+ {
2228
+ "name": "ThinkingBar",
2229
+ "group": "Components",
2230
+ "storyId": "components-thinkingbar--docs"
2231
+ }
2232
+ ],
2233
+ "tokens": []
2234
+ },
2235
+ {
2236
+ "tag": "kc-tool",
2237
+ "className": "KcToolElement",
2238
+ "props": [
2239
+ {
2240
+ "name": "tool",
2241
+ "type": "undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }",
2242
+ "optional": true,
2243
+ "scalar": false,
2244
+ "description": "The tool-call to display. Set as a JS property.",
2245
+ "displayType": "ToolPart | undefined"
2246
+ },
2247
+ {
2248
+ "name": "open",
2249
+ "type": "undefined | false | true",
2250
+ "optional": true,
2251
+ "scalar": true,
2252
+ "description": "Start expanded.",
2253
+ "default": "false",
2254
+ "displayType": "undefined | false | true"
2255
+ }
2256
+ ],
2257
+ "events": [],
2258
+ "composedFrom": [
2259
+ {
2260
+ "name": "Tool",
2261
+ "group": "Components",
2262
+ "storyId": "components-tool--docs"
2263
+ }
2264
+ ],
2265
+ "tokens": [
2266
+ "--color-tool-blue",
2267
+ "--color-tool-amber",
2268
+ "--color-tool-green",
2269
+ "--color-tool-red"
2270
+ ]
2271
+ },
2272
+ {
2273
+ "tag": "kc-voice-input",
2274
+ "className": "KcVoiceInputElement",
2275
+ "props": [
2276
+ {
2277
+ "name": "transcribe",
2278
+ "type": "undefined | (audio: Blob) => Promise<string>",
2279
+ "optional": true,
2280
+ "scalar": false,
2281
+ "description": "Transcriber the host supplies — records audio, returns the text. This is a **function-valued property** (`el.transcribe = async blob => '...'`) because a value-returning callback can't be modelled as a fire-and-forget event.",
2282
+ "displayType": "undefined | (audio: Blob) => Promise<string>"
2283
+ },
2284
+ {
2285
+ "name": "disabled",
2286
+ "type": "undefined | false | true",
2287
+ "optional": true,
2288
+ "scalar": true,
2289
+ "description": "Disable the mic button (non-interactive).",
2290
+ "default": "false",
2291
+ "displayType": "undefined | false | true"
2292
+ }
2293
+ ],
2294
+ "events": [
2295
+ {
2296
+ "name": "audiocaptured",
2297
+ "detail": "{ blob: Blob }",
2298
+ "description": "Raw audio captured (before transcription) — for hosts that prefer to handle transcription themselves instead of via the `transcribe` property.",
2299
+ "displayDetail": "{ blob: Blob }"
2300
+ },
2301
+ {
2302
+ "name": "transcription",
2303
+ "detail": "{ text: string }",
2304
+ "description": "Transcription completed (the `transcribe` property resolved).",
2305
+ "displayDetail": "{ text: string }"
2306
+ }
2307
+ ],
2308
+ "composedFrom": [
2309
+ {
2310
+ "name": "VoiceInput",
2311
+ "group": "Components",
2312
+ "storyId": "components-voiceinput--docs"
2313
+ }
2314
+ ],
2315
+ "tokens": []
2316
+ },
2317
+ {
2318
+ "tag": "kc-workspace",
2319
+ "className": "KcWorkspaceElement",
2320
+ "props": [
2321
+ {
2322
+ "name": "groups",
2323
+ "type": "{ id: string; userId?: undefined | string; teamId?: undefined | string; name: string; sortOrder: number; createdAt: string }[]",
2324
+ "optional": false,
2325
+ "scalar": false,
2326
+ "description": "Pre-bucketed conversation groups for the sidebar. Set as a JS property.",
2327
+ "default": "[]",
2328
+ "displayType": "ConversationGroup[]"
2329
+ },
2330
+ {
2331
+ "name": "conversations",
2332
+ "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 }[]",
2333
+ "optional": false,
2334
+ "scalar": false,
2335
+ "description": "Flat conversation list (auto-bucketed if `groups` is empty). Set as a JS property.",
2336
+ "default": "[]",
2337
+ "displayType": "ConversationSummary[]"
2338
+ },
2339
+ {
2340
+ "name": "activeId",
2341
+ "type": "undefined | string",
2342
+ "optional": true,
2343
+ "scalar": true,
2344
+ "description": "Id of the open conversation, highlighted in the sidebar.",
2345
+ "displayType": "undefined | string"
2346
+ },
2347
+ {
2348
+ "name": "messages",
2349
+ "type": "{ id: string; role: \"user\" | \"assistant\"; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\")[] }[]",
2350
+ "optional": false,
2351
+ "scalar": false,
2352
+ "description": "The active conversation's message thread, newest last. Set as a JS property.",
2353
+ "default": "[]",
2354
+ "displayType": "ChatMessage[]"
2355
+ },
2356
+ {
2357
+ "name": "value",
2358
+ "type": "undefined | string",
2359
+ "optional": true,
2360
+ "scalar": true,
2361
+ "description": "",
2362
+ "displayType": "undefined | string"
2363
+ },
2364
+ {
2365
+ "name": "placeholder",
2366
+ "type": "undefined | string",
2367
+ "optional": true,
2368
+ "scalar": true,
2369
+ "description": "",
2370
+ "default": "'Send a message...'",
2371
+ "displayType": "undefined | string"
2372
+ },
2373
+ {
2374
+ "name": "loading",
2375
+ "type": "undefined | false | true",
2376
+ "optional": true,
2377
+ "scalar": true,
2378
+ "description": "",
2379
+ "default": "false",
2380
+ "displayType": "undefined | false | true"
2381
+ },
2382
+ {
2383
+ "name": "suggestions",
2384
+ "type": "undefined | string[]",
2385
+ "optional": true,
2386
+ "scalar": false,
2387
+ "description": "",
2388
+ "displayType": "undefined | string[]"
2389
+ },
2390
+ {
2391
+ "name": "suggestionMode",
2392
+ "type": "undefined | \"submit\" | \"fill\"",
2393
+ "optional": true,
2394
+ "scalar": true,
2395
+ "description": "",
2396
+ "default": "'submit'",
2397
+ "displayType": "undefined | \"submit\" | \"fill\""
2398
+ },
2399
+ {
2400
+ "name": "proseSize",
2401
+ "type": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\"",
2402
+ "optional": true,
2403
+ "scalar": true,
2404
+ "description": "",
2405
+ "default": "'sm'",
2406
+ "displayType": "undefined | \"xs\" | \"sm\" | \"base\" | \"lg\""
2407
+ },
2408
+ {
2409
+ "name": "codeTheme",
2410
+ "type": "undefined | string",
2411
+ "optional": true,
2412
+ "scalar": true,
2413
+ "description": "",
2414
+ "default": "'github-dark-dimmed'",
2415
+ "displayType": "undefined | string"
2416
+ },
2417
+ {
2418
+ "name": "codeHighlight",
2419
+ "type": "undefined | false | true",
2420
+ "optional": true,
2421
+ "scalar": true,
2422
+ "description": "",
2423
+ "default": "true",
2424
+ "displayType": "undefined | false | true"
2425
+ },
2426
+ {
2427
+ "name": "chatTitle",
2428
+ "type": "undefined | string",
2429
+ "optional": true,
2430
+ "scalar": true,
2431
+ "description": "",
2432
+ "displayType": "undefined | string"
2433
+ },
2434
+ {
2435
+ "name": "models",
2436
+ "type": "undefined | { id: string; name: string; provider?: undefined | string }[]",
2437
+ "optional": true,
2438
+ "scalar": false,
2439
+ "description": "",
2440
+ "displayType": "ModelOption[] | undefined"
2441
+ },
2442
+ {
2443
+ "name": "currentModel",
2444
+ "type": "undefined | string",
2445
+ "optional": true,
2446
+ "scalar": true,
2447
+ "description": "",
2448
+ "displayType": "undefined | string"
2449
+ },
2450
+ {
2451
+ "name": "context",
2452
+ "type": "undefined | { usedTokens: number; maxTokens: number; inputTokens?: undefined | number; outputTokens?: undefined | number; estimatedCost?: undefined | number }",
2453
+ "optional": true,
2454
+ "scalar": false,
2455
+ "description": "",
2456
+ "displayType": "ContextData | undefined"
2457
+ },
2458
+ {
2459
+ "name": "scrollButton",
2460
+ "type": "undefined | false | true",
2461
+ "optional": true,
2462
+ "scalar": true,
2463
+ "description": "",
2464
+ "default": "true",
2465
+ "displayType": "undefined | false | true"
2466
+ },
2467
+ {
2468
+ "name": "search",
2469
+ "type": "undefined | false | true",
2470
+ "optional": true,
2471
+ "scalar": true,
2472
+ "description": "",
2473
+ "default": "false",
2474
+ "displayType": "undefined | false | true"
2475
+ },
2476
+ {
2477
+ "name": "voice",
2478
+ "type": "undefined | false | true",
2479
+ "optional": true,
2480
+ "scalar": true,
2481
+ "description": "",
2482
+ "default": "false",
2483
+ "displayType": "undefined | false | true"
2484
+ },
2485
+ {
2486
+ "name": "slashCommands",
2487
+ "type": "undefined | { id: string; label: string; description?: undefined | string; category?: undefined | string }[]",
2488
+ "optional": true,
2489
+ "scalar": false,
2490
+ "description": "",
2491
+ "displayType": "SlashCommandItem[] | undefined"
2492
+ },
2493
+ {
2494
+ "name": "slashActiveIds",
2495
+ "type": "undefined | string[]",
2496
+ "optional": true,
2497
+ "scalar": false,
2498
+ "description": "",
2499
+ "displayType": "undefined | string[]"
2500
+ },
2501
+ {
2502
+ "name": "slashCompact",
2503
+ "type": "undefined | false | true",
2504
+ "optional": true,
2505
+ "scalar": true,
2506
+ "description": "",
2507
+ "default": "false",
2508
+ "displayType": "undefined | false | true"
2509
+ },
2510
+ {
2511
+ "name": "sidebarWidth",
2512
+ "type": "undefined | number",
2513
+ "optional": true,
2514
+ "scalar": true,
2515
+ "description": "Sidebar default width as a percent of the workspace (default 22).",
2516
+ "default": "22",
2517
+ "displayType": "undefined | number"
2518
+ },
2519
+ {
2520
+ "name": "sidebarMinWidth",
2521
+ "type": "undefined | number",
2522
+ "optional": true,
2523
+ "scalar": true,
2524
+ "description": "Sidebar min width in px (default 200).",
2525
+ "default": "200",
2526
+ "displayType": "undefined | number"
2527
+ },
2528
+ {
2529
+ "name": "sidebarMaxWidth",
2530
+ "type": "undefined | number",
2531
+ "optional": true,
2532
+ "scalar": true,
2533
+ "description": "Sidebar max width in px (default 420).",
2534
+ "default": "420",
2535
+ "displayType": "undefined | number"
2536
+ },
2537
+ {
2538
+ "name": "sidebarCollapsed",
2539
+ "type": "undefined | false | true",
2540
+ "optional": true,
2541
+ "scalar": true,
2542
+ "description": "Initial collapsed state of the sidebar (default false).",
2543
+ "default": "false",
2544
+ "displayType": "undefined | false | true"
2545
+ }
2546
+ ],
2547
+ "events": [
2548
+ {
2549
+ "name": "conversationselect",
2550
+ "detail": "{ id: string }",
2551
+ "description": "A conversation was selected in the sidebar.",
2552
+ "displayDetail": "{ id: string }"
2553
+ },
2554
+ {
2555
+ "name": "messageaction",
2556
+ "detail": "{ messageId: string; action: \"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" }",
2557
+ "description": "An action button on a message was clicked.",
2558
+ "displayDetail": "{ messageId: string; action: ChatMessageAction }"
2559
+ },
2560
+ {
2561
+ "name": "modelchange",
2562
+ "detail": "{ modelId: string }",
2563
+ "description": "The header model switcher changed.",
2564
+ "displayDetail": "{ modelId: string }"
2565
+ },
2566
+ {
2567
+ "name": "newchat",
2568
+ "detail": "Record<string, never>",
2569
+ "description": "The \"New chat\" button was clicked.",
2570
+ "displayDetail": "Record<string, never>"
2571
+ },
2572
+ {
2573
+ "name": "search",
2574
+ "detail": "Record<string, never>",
2575
+ "description": "The Search button was clicked.",
2576
+ "displayDetail": "Record<string, never>"
2577
+ },
2578
+ {
2579
+ "name": "sidebartoggle",
2580
+ "detail": "{ collapsed: false | true }",
2581
+ "description": "The sidebar was collapsed or expanded.",
2582
+ "displayDetail": "{ collapsed: false | true }"
2583
+ },
2584
+ {
2585
+ "name": "slashselect",
2586
+ "detail": "{ command: { id: string; label: string; description?: undefined | string; category?: undefined | string } }",
2587
+ "description": "A slash command was chosen from the palette.",
2588
+ "displayDetail": "{ command: SlashCommandItem }"
2589
+ },
2590
+ {
2591
+ "name": "submit",
2592
+ "detail": "{ value: string; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }",
2593
+ "description": "User submitted a message.",
2594
+ "displayDetail": "{ value: string; attachments: AttachmentData[] }"
2595
+ },
2596
+ {
2597
+ "name": "suggestionclick",
2598
+ "detail": "{ value: string }",
2599
+ "description": "A suggestion chip was clicked (only in `suggestion-mode=\"fill\"`).",
2600
+ "displayDetail": "{ value: string }"
2601
+ },
2602
+ {
2603
+ "name": "valuechange",
2604
+ "detail": "{ value: string }",
2605
+ "description": "Fired on every input change.",
2606
+ "displayDetail": "{ value: string }"
2607
+ },
2608
+ {
2609
+ "name": "voice",
2610
+ "detail": "Record<string, never>",
2611
+ "description": "The Mic / voice button was clicked.",
2612
+ "displayDetail": "Record<string, never>"
2613
+ }
2614
+ ],
2615
+ "composedFrom": [
2616
+ {
2617
+ "name": "ChatThread",
2618
+ "group": "Components",
2619
+ "storyId": "components-chatthread--docs"
2620
+ },
2621
+ {
2622
+ "name": "ConversationList",
2623
+ "group": "Components",
2624
+ "storyId": "components-conversationlist--docs"
2625
+ },
2626
+ {
2627
+ "name": "ResizablePanelGroup",
2628
+ "group": "UI",
2629
+ "storyId": "ui-resizablepanelgroup--docs"
2630
+ },
2631
+ {
2632
+ "name": "ResizablePanel",
2633
+ "group": "UI",
2634
+ "storyId": "ui-resizablepanel--docs"
2635
+ },
2636
+ {
2637
+ "name": "ResizableHandle",
2638
+ "group": "UI",
2639
+ "storyId": "ui-resizablehandle--docs"
2640
+ },
2641
+ {
2642
+ "name": "Button",
2643
+ "group": "UI",
2644
+ "storyId": "ui-button--docs"
2645
+ }
2646
+ ],
2647
+ "tokens": []
2648
+ }
2649
+ ]