openui-rails 0.1.0 → 0.2.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.
@@ -0,0 +1,4390 @@
1
+ {
2
+ "componentGroups": [
3
+ {
4
+ "components": [
5
+ "CardHeader",
6
+ "TextContent",
7
+ "MarkDownRenderer",
8
+ "Callout",
9
+ "TextCallout",
10
+ "Image",
11
+ "ImageBlock",
12
+ "ImageGallery",
13
+ "CodeBlock",
14
+ "Separator",
15
+ "InlineHeader"
16
+ ],
17
+ "name": "Content",
18
+ "notes": [
19
+ "- InlineHeader is a compact heading + description pair for labelling a block inside the response (lighter than CardHeader).",
20
+ "- Pass sources on Card ([{ title, sourceName, url }]) when the answer relies on references, and cite them inline in TextContent as [1], [2] (1-based index into sources). A Sources strip renders at the bottom of the card."
21
+ ]
22
+ },
23
+ {
24
+ "components": [
25
+ "Table",
26
+ "Col",
27
+ "EditableTable"
28
+ ],
29
+ "name": "Tables",
30
+ "notes": [
31
+ "- EditableTable lets the user edit cells inline. Give it a unique name, columns of { type, key, header } with type one of text | number | date-single | select | url (select also needs options: [{ value, label }]).",
32
+ "- data is an array of { id, values } rows where values are ordered positionally to match columns. Edited data is submitted when the user clicks Save Changes."
33
+ ]
34
+ },
35
+ {
36
+ "components": [
37
+ "BarChart",
38
+ "LineChart",
39
+ "AreaChart",
40
+ "RadarChart",
41
+ "HorizontalBarChart",
42
+ "Series"
43
+ ],
44
+ "name": "Charts (2D)"
45
+ },
46
+ {
47
+ "components": [
48
+ "PieChart",
49
+ "RadialChart",
50
+ "SingleStackedBarChart",
51
+ "Slice"
52
+ ],
53
+ "name": "Charts (1D)"
54
+ },
55
+ {
56
+ "components": [
57
+ "ScatterChart",
58
+ "ScatterSeries",
59
+ "Point"
60
+ ],
61
+ "name": "Charts (Scatter)"
62
+ },
63
+ {
64
+ "components": [
65
+ "Form",
66
+ "FormControl",
67
+ "Label",
68
+ "Input",
69
+ "TextArea",
70
+ "Select",
71
+ "SelectItem",
72
+ "DatePicker",
73
+ "Slider",
74
+ "CheckBoxGroup",
75
+ "CheckBoxItem",
76
+ "RadioGroup",
77
+ "RadioItem",
78
+ "SwitchGroup",
79
+ "SwitchItem",
80
+ "Chips",
81
+ "ChipItem",
82
+ "OptionCards",
83
+ "OptionCard"
84
+ ],
85
+ "name": "Forms",
86
+ "notes": [
87
+ "- Chips: compact single/multiple selection pills. Use ChipItem references for each option.",
88
+ "- OptionCards: larger selectable cards with title, subtitle and an optional Icon or Image on top. Use OptionCard references for each option.",
89
+ "- Define EACH FormControl as its own reference — do NOT inline all controls in one array.",
90
+ "- NEVER nest Form inside Form.",
91
+ "- Form requires explicit buttons. Always pass a Buttons(...) reference as the second Form argument: Form(name, buttons, fields).",
92
+ "- rules is an optional object: { required: true, email: true, min: 8, maxLength: 100 }",
93
+ "- The renderer shows error messages automatically — do NOT generate error text in the UI"
94
+ ]
95
+ },
96
+ {
97
+ "components": [
98
+ "Button",
99
+ "Buttons",
100
+ "Icon",
101
+ "IconButton"
102
+ ],
103
+ "name": "Buttons",
104
+ "notes": [
105
+ "- Icon renders a lucide icon by kebab-case name; it is also used as the icon of IconButton, IconText and OptionCard."
106
+ ]
107
+ },
108
+ {
109
+ "components": [
110
+ "ListBlock",
111
+ "ListItem",
112
+ "FollowUpBlock",
113
+ "FollowUpItem"
114
+ ],
115
+ "name": "Lists & Follow-ups",
116
+ "notes": [
117
+ "- Use ListBlock with ListItem references for numbered lists.",
118
+ "- Use FollowUpBlock with FollowUpItem references at the end of a response to suggest next actions.",
119
+ "- A ListItem is clickable ONLY when given an action (5th argument); without one it is plain text.",
120
+ "- Clicking a FollowUpItem, or a ListItem with a @ToAssistant action, sends text to the LLM as a user message.",
121
+ "- Example: list = ListBlock([item1, item2]) item1 = ListItem(\"Option A\", \"Details about A\", null, null, @ToAssistant(\"Option A\"))"
122
+ ]
123
+ },
124
+ {
125
+ "components": [
126
+ "SectionBlock",
127
+ "SectionItem"
128
+ ],
129
+ "name": "Sections",
130
+ "notes": [
131
+ "- SectionBlock renders collapsible accordion sections that auto-open as they stream.",
132
+ "- Each section needs a unique `value` id, a `trigger` label, and a `content` array.",
133
+ "- Example: sections = SectionBlock([s1, s2]) s1 = SectionItem(\"intro\", \"Introduction\", [content1])",
134
+ "- Set isFoldable=false to render sections as flat headers instead of accordion."
135
+ ]
136
+ },
137
+ {
138
+ "components": [
139
+ "Tabs",
140
+ "TabItem",
141
+ "Accordion",
142
+ "AccordionItem",
143
+ "Steps",
144
+ "StepsItem",
145
+ "Carousel"
146
+ ],
147
+ "name": "Layout",
148
+ "notes": [
149
+ "- Use Tabs to present alternative views — each TabItem has a value id, trigger label, and content array.",
150
+ "- Carousel takes an array of slides, where each slide is an array of content: carousel = Carousel([[t1, img1], [t2, img2]])",
151
+ "- IMPORTANT: Every slide in a Carousel must have the same structure — same component types in the same order.",
152
+ "- For image carousels use: [[title, image, description, tags], ...] — every slide must follow this exact pattern.",
153
+ "- Use real, publicly accessible image URLs (e.g. https://picsum.photos/seed/KEYWORD/800/500). Never hallucinate image URLs."
154
+ ]
155
+ },
156
+ {
157
+ "components": [
158
+ "TagBlock",
159
+ "Tag",
160
+ "EntityList"
161
+ ],
162
+ "name": "Data Display",
163
+ "notes": [
164
+ "- EntityList is a compact two-column list of { left, right } rows (e.g. name / value). size='default' also supports a header and footer row; size='small' does not."
165
+ ]
166
+ },
167
+ {
168
+ "components": [
169
+ "SnippetCardBlock",
170
+ "SnippetCardItem",
171
+ "OverviewCardBlock",
172
+ "OverviewCardItem",
173
+ "ContextCardBlock",
174
+ "ContextCardItem",
175
+ "CompositeCardBlock",
176
+ "CompositeCardItem",
177
+ "VisualCardBlock",
178
+ "VisualCardItem",
179
+ "Text",
180
+ "BoldText",
181
+ "IconText",
182
+ "ImageText",
183
+ "ImageTextLarge",
184
+ "MetricIndicatorInline",
185
+ "MetricIndicatorWithStrikethrough"
186
+ ],
187
+ "name": "Cards",
188
+ "notes": [
189
+ "- Card blocks lay out 2+ items in a responsive grid (or carousel where supported). Every item in a block must have the same structure.",
190
+ "- SnippetCardItem: small card with lhs (IconText | ImageText) and optional rhs (Text | BoldText) — good for key/value facts.",
191
+ "- OverviewCardItem: small card with top (IconText | ImageText | Text) and optional bottom MetricIndicatorInline — good for KPIs.",
192
+ "- ContextCardItem: medium card with a title (string or Tag), body text and optional background image — good for summaries.",
193
+ "- CompositeCardItem: rich card with header, body array (Text, BoldText, MetricIndicatorInline, IconText, Image, charts, ListBlock, TagBlock, EntityList) and footer (price + Button) — good for products/offers.",
194
+ "- VisualCardItem: image-first card with a BoldText body and optional Tag.",
195
+ "- Text / BoldText / IconText / ImageText / ImageTextLarge / MetricIndicator* are the inline building blocks used INSIDE card items; do not place them directly in the root Card."
196
+ ]
197
+ }
198
+ ],
199
+ "components": {
200
+ "Accordion": {
201
+ "description": "Collapsible sections",
202
+ "signature": "Accordion(items: AccordionItem[])"
203
+ },
204
+ "AccordionItem": {
205
+ "description": "value is unique id, trigger is section title",
206
+ "signature": "AccordionItem(value: string, trigger: string, content: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | IconButton | Steps | InlineHeader | EntityList | EditableTable | SnippetCardBlock | OverviewCardBlock | ContextCardBlock | CompositeCardBlock | VisualCardBlock | ListBlock | FollowUpBlock)[])"
207
+ },
208
+ "AreaChart": {
209
+ "description": "Filled area under lines; use for cumulative totals or volume trends over time",
210
+ "signature": "AreaChart(labels: string[], series: Series[], variant?: \"linear\" | \"natural\" | \"step\", xLabel?: string, yLabel?: string, height?: number)"
211
+ },
212
+ "BarChart": {
213
+ "description": "Vertical bars; use for comparing values across categories with one or more series",
214
+ "signature": "BarChart(labels: string[], series: Series[], variant?: \"grouped\" | \"stacked\", xLabel?: string, yLabel?: string, height?: number)"
215
+ },
216
+ "BoldText": {
217
+ "description": "Emphasized (bold) text line with optional subtext. variant 'number' uses tabular number styling; subtextVariant 'metric' colors a leading +/- subtext green/red.",
218
+ "signature": "BoldText(variant?: \"text\" | \"number\", value: string, subtext?: string, subtextVariant?: \"text\" | \"number\" | \"metric\", size?: \"xs\" | \"sm\" | \"md\" | \"lg\")"
219
+ },
220
+ "Button": {
221
+ "description": "Clickable button",
222
+ "signature": "Button(label: string, action?: ActionExpression, variant?: \"primary\" | \"secondary\" | \"tertiary\", type?: \"normal\" | \"destructive\", size?: \"extra-small\" | \"small\" | \"medium\" | \"large\")"
223
+ },
224
+ "Buttons": {
225
+ "description": "Group of Button components. direction: \"row\" (default) | \"column\".",
226
+ "signature": "Buttons(buttons: Button[], direction?: \"row\" | \"column\")"
227
+ },
228
+ "Callout": {
229
+ "description": "Callout banner. Optional visible is a reactive $boolean — auto-dismisses after 3s by setting $visible to false.",
230
+ "signature": "Callout(variant: \"info\" | \"warning\" | \"error\" | \"success\" | \"neutral\", title: string, description: string, visible?: $binding<boolean>)"
231
+ },
232
+ "Card": {
233
+ "description": "Vertical container for all content in a chat response. Children stack top to bottom automatically. Optional sources ([{ title, sourceName, url }]) render as a Sources strip at the bottom and back inline [n] citations in TextContent.",
234
+ "signature": "Card(children: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | IconButton | Steps | InlineHeader | EntityList | EditableTable | SnippetCardBlock | OverviewCardBlock | ContextCardBlock | CompositeCardBlock | VisualCardBlock | ListBlock | FollowUpBlock | SectionBlock | Tabs | Carousel)[], sources?: {url?: string, title: string, sourceName: string}[])"
235
+ },
236
+ "CardHeader": {
237
+ "description": "Header with optional title and subtitle",
238
+ "signature": "CardHeader(title?: string, subtitle?: string)"
239
+ },
240
+ "Carousel": {
241
+ "description": "Horizontal scrollable carousel",
242
+ "signature": "Carousel(children: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | IconButton | Steps | InlineHeader | EntityList | EditableTable | SnippetCardBlock | OverviewCardBlock | ContextCardBlock | CompositeCardBlock | VisualCardBlock | ListBlock | FollowUpBlock)[][], variant?: \"card\" | \"sunk\")"
243
+ },
244
+ "CheckBoxGroup": {
245
+ "description": "",
246
+ "signature": "CheckBoxGroup(name: string, items: CheckBoxItem[], rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<Record<string, boolean>>)"
247
+ },
248
+ "CheckBoxItem": {
249
+ "description": "",
250
+ "signature": "CheckBoxItem(label: string, description: string, name: string, defaultChecked?: boolean)"
251
+ },
252
+ "ChipItem": {
253
+ "description": "A single selectable chip inside a Chips group, with a value, label and optional icon.",
254
+ "signature": "ChipItem(value: string, label: string, icon?: Icon, disabled?: boolean)"
255
+ },
256
+ "Chips": {
257
+ "description": "A form field of compact selectable chips for choosing one or many short options; the selection is stored under `name`.",
258
+ "signature": "Chips(name: string, type?: \"single\" | \"multiple\", items?: ChipItem[], rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, defaultValue?: string | string[])"
259
+ },
260
+ "CodeBlock": {
261
+ "description": "Syntax-highlighted code block",
262
+ "signature": "CodeBlock(language: string, codeString: string)"
263
+ },
264
+ "Col": {
265
+ "description": "Column definition — holds label + data array",
266
+ "signature": "Col(label: string, data: any, type?: \"string\" | \"number\" | \"action\")"
267
+ },
268
+ "CompositeCardBlock": {
269
+ "description": "A two-per-row grid or carousel of rich cards, each with an optional header, stacked body content (text, metrics, charts, lists, tags) and a price/button footer; an optional action makes every card clickable.",
270
+ "signature": "CompositeCardBlock(items: CompositeCardItem[], layout?: \"grid\" | \"carousel\", responsive?: boolean, action?: ActionExpression, gap?: number | string)"
271
+ },
272
+ "CompositeCardItem": {
273
+ "description": "A single card inside a CompositeCardBlock: an optional header (icon/image/text), a stack of body elements (text, metrics, charts, lists, tags), and an optional price/button footer.",
274
+ "signature": "CompositeCardItem(id?: string, header?: IconText | ImageText | ImageTextLarge | Text | Image, body?: (Text | BoldText | MetricIndicatorInline | IconText | Image | AreaChart | BarChart | LineChart | ListBlock | TagBlock | EntityList)[], footer?: {price?: BoldText | MetricIndicatorWithStrikethrough, button?: Button})"
275
+ },
276
+ "ContextCardBlock": {
277
+ "description": "A grid or carousel of compact tinted context cards (title or tag plus a short bold body); an optional action makes every card clickable.",
278
+ "signature": "ContextCardBlock(items: ContextCardItem[], layout?: \"grid\" | \"carousel\", responsive?: boolean, action?: ActionExpression, gap?: number | string)"
279
+ },
280
+ "ContextCardItem": {
281
+ "description": "A single card inside a ContextCardBlock: a title (plain string or Tag), an optional markdown body, and an optional gray tint or background image.",
282
+ "signature": "ContextCardItem(id?: string, title: string | Tag, body?: string, bgColor?: \"gray\", bgImageSrc?: string, bgImageAlt?: string)"
283
+ },
284
+ "DatePicker": {
285
+ "description": "",
286
+ "signature": "DatePicker(name: string, mode?: \"single\" | \"range\", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<any>)"
287
+ },
288
+ "EditableTable": {
289
+ "description": "Spreadsheet-like table whose cells the user can edit inline (text, number, url, date, select columns); edits are saved back as a form field",
290
+ "signature": "EditableTable(name?: string, columns?: {type: \"text\" | \"number\" | \"date-single\" | \"select\" | \"url\", key?: string, header?: string, width?: number, options?: {value: string, label: string}[]}[], data?: {id: string, values: (string | number)[]}[])"
291
+ },
292
+ "EntityList": {
293
+ "description": "Two-column key/value rows (left label, right value). size 'default' supports optional header and footer rows; rightVariant 'number' uses tabular numbers.",
294
+ "signature": "EntityList(rows?: {left: string, right: string, rightVariant?: \"text\" | \"number\"}[], size?: \"small\" | \"default\", header?: {left: string, right: string, rightVariant?: \"text\" | \"number\"}, footer?: {left: string, right: string, rightVariant?: \"text\" | \"number\"})"
295
+ },
296
+ "FollowUpBlock": {
297
+ "description": "List of clickable follow-up suggestions placed at the end of a response",
298
+ "signature": "FollowUpBlock(items: FollowUpItem[])"
299
+ },
300
+ "FollowUpItem": {
301
+ "description": "Clickable follow-up suggestion — when clicked, sends text as user message",
302
+ "signature": "FollowUpItem(text: string)"
303
+ },
304
+ "Form": {
305
+ "description": "Form container with fields and explicit action buttons",
306
+ "signature": "Form(name: string, buttons: Buttons, fields?: FormControl[])"
307
+ },
308
+ "FormControl": {
309
+ "description": "Field with label, input component, and optional hint text",
310
+ "signature": "FormControl(label: string, input: Input | TextArea | Select | DatePicker | Slider | CheckBoxGroup | RadioGroup | Chips | OptionCards, hint?: string)"
311
+ },
312
+ "HorizontalBarChart": {
313
+ "description": "Horizontal bars; prefer when category labels are long or for ranked lists",
314
+ "signature": "HorizontalBarChart(labels: string[], series: Series[], variant?: \"grouped\" | \"stacked\", xLabel?: string, yLabel?: string)"
315
+ },
316
+ "Icon": {
317
+ "description": "A lucide icon by kebab-case name (e.g. 'circle-check'). Optional category picks a topical fallback when the name doesn't resolve.",
318
+ "signature": "Icon(name: string, category?: string)"
319
+ },
320
+ "IconButton": {
321
+ "description": "Icon-only button. name is the accessible label and the action label; icon is an Icon; action fires on click.",
322
+ "signature": "IconButton(name: string, icon: Icon, action?: ActionExpression, variant?: \"primary\" | \"secondary\" | \"tertiary\", size?: \"extra-small\" | \"small\" | \"medium\" | \"large\", shape?: \"square\" | \"circle\")"
323
+ },
324
+ "IconText": {
325
+ "description": "An icon badge with a title and optional subtitle, laid out horizontally or vertically. iconVariant sets the badge color.",
326
+ "signature": "IconText(icon: Icon, iconVariant?: \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\" | \"inverted\" | \"filled\" | \"soft\", iconSize?: \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\" | \"sm\" | \"md\" | \"lg\", title: string, subtitle?: string, bold?: boolean, layout?: \"horizontal\" | \"vertical\")"
327
+ },
328
+ "Image": {
329
+ "description": "Image with alt text and optional URL",
330
+ "signature": "Image(alt: string, src?: string)"
331
+ },
332
+ "ImageBlock": {
333
+ "description": "Image block with loading state",
334
+ "signature": "ImageBlock(src: string, alt?: string)"
335
+ },
336
+ "ImageGallery": {
337
+ "description": "Gallery grid of images with modal preview",
338
+ "signature": "ImageGallery(images: {src: string, alt?: string, details?: string}[])"
339
+ },
340
+ "ImageText": {
341
+ "description": "A small square image (thumbnail/avatar) with a title and optional subtitle. src must be a real image URL.",
342
+ "signature": "ImageText(src: string, alt?: string, title: string, subtitle?: string, bold?: boolean, layout?: \"horizontal\" | \"vertical\", imageSize?: number)"
343
+ },
344
+ "ImageTextLarge": {
345
+ "description": "A full-width banner image above a bold title and optional subtitle. src must be a real image URL.",
346
+ "signature": "ImageTextLarge(src: string, alt?: string, title: string, subtitle?: string, bold?: boolean)"
347
+ },
348
+ "InlineHeader": {
349
+ "description": "Compact section heading with an optional one-line description, for use inside cards.",
350
+ "signature": "InlineHeader(heading: string, description?: string)"
351
+ },
352
+ "Input": {
353
+ "description": "",
354
+ "signature": "Input(name: string, placeholder?: string, type?: \"text\" | \"email\" | \"password\" | \"number\" | \"url\", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)"
355
+ },
356
+ "Label": {
357
+ "description": "Text label",
358
+ "signature": "Label(text: string)"
359
+ },
360
+ "LineChart": {
361
+ "description": "Lines over categories; use for trends and continuous data over time",
362
+ "signature": "LineChart(labels: string[], series: Series[], variant?: \"linear\" | \"natural\" | \"step\", xLabel?: string, yLabel?: string, height?: number)"
363
+ },
364
+ "ListBlock": {
365
+ "description": "A list of items with number or image indicators. Each item can optionally have an action. size small renders a compact list.",
366
+ "signature": "ListBlock(items: ListItem[], variant?: \"number\" | \"image\", size?: \"default\" | \"small\")"
367
+ },
368
+ "ListItem": {
369
+ "description": "Item in a ListBlock — displays a title with an optional subtitle and image. When action is provided, the item becomes clickable.",
370
+ "signature": "ListItem(title: string, subtitle?: string, image?: {src: string, alt: string}, actionLabel?: string, action?: ActionExpression)"
371
+ },
372
+ "MarkDownRenderer": {
373
+ "description": "Renders markdown text with optional container variant",
374
+ "signature": "MarkDownRenderer(textMarkdown: string, variant?: \"clear\" | \"card\" | \"sunk\")"
375
+ },
376
+ "MetricIndicatorInline": {
377
+ "description": "Headline metric value with an optional +/- percentage trend and subtext, all on one line.",
378
+ "signature": "MetricIndicatorInline(value: string, subtext?: string, trend?: {direction: \"up\" | \"down\", value: number})"
379
+ },
380
+ "MetricIndicatorWithStrikethrough": {
381
+ "description": "Headline metric value with an optional struck-through previousValue, a +/- percentage trend, and subtext below.",
382
+ "signature": "MetricIndicatorWithStrikethrough(value: string, subtext?: string, previousValue?: string, trend?: {direction: \"up\" | \"down\", value: number})"
383
+ },
384
+ "OptionCard": {
385
+ "description": "A single selectable card inside an OptionCards group, with a value, title, optional subtitle and an optional Icon or Image on top.",
386
+ "signature": "OptionCard(value: string, title: string, subtitle?: string, topContent?: Icon | Image, disabled?: boolean)"
387
+ },
388
+ "OptionCards": {
389
+ "description": "A form field of selectable cards (title, optional subtitle, optional icon or image) laid out in a responsive grid for choosing one or many options; the selection is stored under `name`.",
390
+ "signature": "OptionCards(name: string, type?: \"single\" | \"multiple\", items?: OptionCard[], rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, defaultValue?: string | string[])"
391
+ },
392
+ "OverviewCardBlock": {
393
+ "description": "A grid or horizontal carousel of compact overview cards, each with a heading (icon/image/text) on top and an inline metric below; optionally clickable with a shared action.",
394
+ "signature": "OverviewCardBlock(items: OverviewCardItem[], layout?: \"grid\" | \"carousel\", responsive?: boolean, action?: ActionExpression, gap?: number | string)"
395
+ },
396
+ "OverviewCardItem": {
397
+ "description": "One overview card: a heading slot at the top (IconText, ImageText or Text) and an optional MetricIndicatorInline at the bottom.",
398
+ "signature": "OverviewCardItem(id?: string, top: IconText | ImageText | Text, bottom?: MetricIndicatorInline)"
399
+ },
400
+ "PieChart": {
401
+ "description": "Circular slices; use plucked arrays: PieChart(data.categories, data.values)",
402
+ "signature": "PieChart(labels: string[], values: number[], variant?: \"pie\" | \"donut\", appearance?: \"circular\" | \"semiCircular\")"
403
+ },
404
+ "Point": {
405
+ "description": "Data point with numeric coordinates",
406
+ "signature": "Point(x: number, y: number, z?: number)"
407
+ },
408
+ "RadarChart": {
409
+ "description": "Spider/web chart; use for comparing multiple variables across one or more entities",
410
+ "signature": "RadarChart(labels: string[], series: Series[])"
411
+ },
412
+ "RadialChart": {
413
+ "description": "Radial bars; use plucked arrays: RadialChart(data.categories, data.values)",
414
+ "signature": "RadialChart(labels: string[], values: number[])"
415
+ },
416
+ "RadioGroup": {
417
+ "description": "",
418
+ "signature": "RadioGroup(name: string, items: RadioItem[], defaultValue?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)"
419
+ },
420
+ "RadioItem": {
421
+ "description": "",
422
+ "signature": "RadioItem(label: string, description: string, value: string)"
423
+ },
424
+ "ScatterChart": {
425
+ "description": "X/Y scatter plot; use for correlations, distributions, and clustering",
426
+ "signature": "ScatterChart(datasets: ScatterSeries[], xLabel?: string, yLabel?: string)"
427
+ },
428
+ "ScatterSeries": {
429
+ "description": "Named dataset",
430
+ "signature": "ScatterSeries(name: string, points: Point[])"
431
+ },
432
+ "SectionBlock": {
433
+ "description": "Collapsible accordion sections. Auto-opens sections as they stream in. Use SectionItem for each section.",
434
+ "signature": "SectionBlock(sections: SectionItem[], isFoldable?: boolean)"
435
+ },
436
+ "SectionItem": {
437
+ "description": "Section with a label and collapsible content — used inside SectionBlock",
438
+ "signature": "SectionItem(value: string, trigger: string, content: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | IconButton | Steps | InlineHeader | EntityList | EditableTable | SnippetCardBlock | OverviewCardBlock | ContextCardBlock | CompositeCardBlock | VisualCardBlock | ListBlock | FollowUpBlock | Tabs | Accordion)[])"
439
+ },
440
+ "Select": {
441
+ "description": "",
442
+ "signature": "Select(name: string, items: SelectItem[], placeholder?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>, size?: \"small\" | \"medium\" | \"large\")"
443
+ },
444
+ "SelectItem": {
445
+ "description": "Option for Select",
446
+ "signature": "SelectItem(value: string, label: string)"
447
+ },
448
+ "Separator": {
449
+ "description": "Visual divider between content sections",
450
+ "signature": "Separator(orientation?: \"horizontal\" | \"vertical\", decorative?: boolean)"
451
+ },
452
+ "Series": {
453
+ "description": "One data series",
454
+ "signature": "Series(category: string, values: number[])"
455
+ },
456
+ "SingleStackedBarChart": {
457
+ "description": "Single horizontal stacked bar; use plucked arrays: SingleStackedBarChart(data.categories, data.values)",
458
+ "signature": "SingleStackedBarChart(labels: string[], values: number[])"
459
+ },
460
+ "Slice": {
461
+ "description": "One slice with label and numeric value",
462
+ "signature": "Slice(category: string, value: number)"
463
+ },
464
+ "Slider": {
465
+ "description": "Numeric slider input; supports continuous and discrete (stepped) variants",
466
+ "signature": "Slider(name: string, variant: \"continuous\" | \"discrete\", min: number, max: number, step?: number, defaultValue?: number[], label?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<number[]>)"
467
+ },
468
+ "SnippetCardBlock": {
469
+ "description": "A responsive grid of compact label/value cards (2 per row) for showing several short facts side by side; optionally clickable with a shared action.",
470
+ "signature": "SnippetCardBlock(items: SnippetCardItem[], layout?: \"grid\", responsive?: boolean, action?: ActionExpression, gap?: number | string)"
471
+ },
472
+ "SnippetCardItem": {
473
+ "description": "One row-style snippet card: a label on the left (IconText or ImageText) and an optional value on the right (Text or BoldText).",
474
+ "signature": "SnippetCardItem(id?: string, lhs: IconText | ImageText, rhs?: Text | BoldText)"
475
+ },
476
+ "Steps": {
477
+ "description": "Step-by-step guide",
478
+ "signature": "Steps(items: StepsItem[])"
479
+ },
480
+ "StepsItem": {
481
+ "description": "title and details text for one step",
482
+ "signature": "StepsItem(title: string, details: string)"
483
+ },
484
+ "SwitchGroup": {
485
+ "description": "Group of switch toggles",
486
+ "signature": "SwitchGroup(name: string, items: SwitchItem[], variant?: \"clear\" | \"card\" | \"sunk\", value?: $binding<Record<string, boolean>>)"
487
+ },
488
+ "SwitchItem": {
489
+ "description": "Individual switch toggle",
490
+ "signature": "SwitchItem(label?: string, description?: string, name: string, defaultChecked?: boolean)"
491
+ },
492
+ "TabItem": {
493
+ "description": "value is unique id, trigger is tab label, content is array of components",
494
+ "signature": "TabItem(value: string, trigger: string, content: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | IconButton | Steps | InlineHeader | EntityList | EditableTable | SnippetCardBlock | OverviewCardBlock | ContextCardBlock | CompositeCardBlock | VisualCardBlock | ListBlock | FollowUpBlock | Accordion)[])"
495
+ },
496
+ "Table": {
497
+ "description": "Data table — column-oriented. Each Col holds its own data array.",
498
+ "signature": "Table(columns: Col[])"
499
+ },
500
+ "Tabs": {
501
+ "description": "Tabbed container",
502
+ "signature": "Tabs(items: TabItem[])"
503
+ },
504
+ "Tag": {
505
+ "description": "Styled tag/badge with optional Icon and variant",
506
+ "signature": "Tag(text: string, icon?: Icon, size?: \"sm\" | \"md\" | \"lg\", variant?: \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\")"
507
+ },
508
+ "TagBlock": {
509
+ "description": "tags is an array of strings; optional size sm | md | lg",
510
+ "signature": "TagBlock(tags: string[], size?: \"sm\" | \"md\" | \"lg\")"
511
+ },
512
+ "Text": {
513
+ "description": "Plain text line with optional subtext. variant 'number' uses tabular number styling; subtextVariant 'metric' colors a leading +/- subtext green/red.",
514
+ "signature": "Text(variant?: \"text\" | \"number\", value: string, subtext?: string, subtextVariant?: \"text\" | \"number\" | \"metric\", size?: \"xs\" | \"sm\" | \"md\" | \"lg\")"
515
+ },
516
+ "TextArea": {
517
+ "description": "",
518
+ "signature": "TextArea(name: string, placeholder?: string, rows?: number, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding<string>)"
519
+ },
520
+ "TextCallout": {
521
+ "description": "Text callout with variant, title, and description",
522
+ "signature": "TextCallout(variant?: \"neutral\" | \"info\" | \"warning\" | \"success\" | \"danger\", title?: string, description?: string)"
523
+ },
524
+ "TextContent": {
525
+ "description": "Text block. Supports markdown. Optional size: \"small\" | \"default\" | \"large\" | \"small-heavy\" | \"large-heavy\".",
526
+ "signature": "TextContent(text: string, size?: \"small\" | \"default\" | \"large\" | \"small-heavy\" | \"large-heavy\")"
527
+ },
528
+ "VisualCardBlock": {
529
+ "description": "A grid or carousel of photo-first cards: a full-bleed background image with a tag on top and a bold text panel at the bottom; an optional action makes every card clickable.",
530
+ "signature": "VisualCardBlock(items: VisualCardItem[], layout?: \"grid\" | \"carousel\", responsive?: boolean, action?: ActionExpression, gap?: number | string)"
531
+ },
532
+ "VisualCardItem": {
533
+ "description": "A single photo-first card inside a VisualCardBlock: a BoldText body panel, an optional Tag, and a background image (bgImageSrc must be a real URL; bgImageAlt is its alt text).",
534
+ "signature": "VisualCardItem(body: BoldText, id?: string, bgImageSrc?: string, tag?: Tag, bgImageAlt?: string)"
535
+ }
536
+ },
537
+ "root": "Card",
538
+ "schema": {
539
+ "$defs": {
540
+ "Accordion": {
541
+ "additionalProperties": false,
542
+ "description": "Collapsible sections",
543
+ "properties": {
544
+ "items": {
545
+ "items": {
546
+ "$ref": "#/$defs/AccordionItem"
547
+ },
548
+ "type": "array"
549
+ }
550
+ },
551
+ "required": [
552
+ "items"
553
+ ],
554
+ "type": "object"
555
+ },
556
+ "AccordionItem": {
557
+ "additionalProperties": false,
558
+ "description": "value is unique id, trigger is section title",
559
+ "properties": {
560
+ "content": {
561
+ "items": {
562
+ "anyOf": [
563
+ {
564
+ "$ref": "#/$defs/TextContent"
565
+ },
566
+ {
567
+ "$ref": "#/$defs/MarkDownRenderer"
568
+ },
569
+ {
570
+ "$ref": "#/$defs/CardHeader"
571
+ },
572
+ {
573
+ "$ref": "#/$defs/Callout"
574
+ },
575
+ {
576
+ "$ref": "#/$defs/TextCallout"
577
+ },
578
+ {
579
+ "$ref": "#/$defs/CodeBlock"
580
+ },
581
+ {
582
+ "$ref": "#/$defs/Image"
583
+ },
584
+ {
585
+ "$ref": "#/$defs/ImageBlock"
586
+ },
587
+ {
588
+ "$ref": "#/$defs/ImageGallery"
589
+ },
590
+ {
591
+ "$ref": "#/$defs/Separator"
592
+ },
593
+ {
594
+ "$ref": "#/$defs/HorizontalBarChart"
595
+ },
596
+ {
597
+ "$ref": "#/$defs/RadarChart"
598
+ },
599
+ {
600
+ "$ref": "#/$defs/PieChart"
601
+ },
602
+ {
603
+ "$ref": "#/$defs/RadialChart"
604
+ },
605
+ {
606
+ "$ref": "#/$defs/SingleStackedBarChart"
607
+ },
608
+ {
609
+ "$ref": "#/$defs/ScatterChart"
610
+ },
611
+ {
612
+ "$ref": "#/$defs/AreaChart"
613
+ },
614
+ {
615
+ "$ref": "#/$defs/BarChart"
616
+ },
617
+ {
618
+ "$ref": "#/$defs/LineChart"
619
+ },
620
+ {
621
+ "$ref": "#/$defs/Table"
622
+ },
623
+ {
624
+ "$ref": "#/$defs/TagBlock"
625
+ },
626
+ {
627
+ "$ref": "#/$defs/Form"
628
+ },
629
+ {
630
+ "$ref": "#/$defs/Buttons"
631
+ },
632
+ {
633
+ "$ref": "#/$defs/IconButton"
634
+ },
635
+ {
636
+ "$ref": "#/$defs/Steps"
637
+ },
638
+ {
639
+ "$ref": "#/$defs/InlineHeader"
640
+ },
641
+ {
642
+ "$ref": "#/$defs/EntityList"
643
+ },
644
+ {
645
+ "$ref": "#/$defs/EditableTable"
646
+ },
647
+ {
648
+ "$ref": "#/$defs/SnippetCardBlock"
649
+ },
650
+ {
651
+ "$ref": "#/$defs/OverviewCardBlock"
652
+ },
653
+ {
654
+ "$ref": "#/$defs/ContextCardBlock"
655
+ },
656
+ {
657
+ "$ref": "#/$defs/CompositeCardBlock"
658
+ },
659
+ {
660
+ "$ref": "#/$defs/VisualCardBlock"
661
+ },
662
+ {
663
+ "$ref": "#/$defs/ListBlock"
664
+ },
665
+ {
666
+ "$ref": "#/$defs/FollowUpBlock"
667
+ }
668
+ ]
669
+ },
670
+ "type": "array"
671
+ },
672
+ "trigger": {
673
+ "type": "string"
674
+ },
675
+ "value": {
676
+ "type": "string"
677
+ }
678
+ },
679
+ "required": [
680
+ "value",
681
+ "trigger",
682
+ "content"
683
+ ],
684
+ "type": "object"
685
+ },
686
+ "ActionExpression": {
687
+ "anyOf": [
688
+ {
689
+ "additionalProperties": false,
690
+ "properties": {
691
+ "type": {
692
+ "const": "open_url",
693
+ "type": "string"
694
+ },
695
+ "url": {
696
+ "type": "string"
697
+ }
698
+ },
699
+ "required": [
700
+ "type",
701
+ "url"
702
+ ],
703
+ "type": "object"
704
+ },
705
+ {
706
+ "additionalProperties": false,
707
+ "properties": {
708
+ "context": {
709
+ "type": "string"
710
+ },
711
+ "type": {
712
+ "const": "continue_conversation",
713
+ "type": "string"
714
+ }
715
+ },
716
+ "required": [
717
+ "type"
718
+ ],
719
+ "type": "object"
720
+ },
721
+ {
722
+ "additionalProperties": false,
723
+ "properties": {
724
+ "params": {
725
+ "additionalProperties": {},
726
+ "propertyNames": {
727
+ "type": "string"
728
+ },
729
+ "type": "object"
730
+ },
731
+ "type": {
732
+ "type": "string"
733
+ }
734
+ },
735
+ "required": [
736
+ "type"
737
+ ],
738
+ "type": "object"
739
+ }
740
+ ]
741
+ },
742
+ "AreaChart": {
743
+ "additionalProperties": false,
744
+ "description": "Filled area under lines; use for cumulative totals or volume trends over time",
745
+ "properties": {
746
+ "height": {
747
+ "type": "number"
748
+ },
749
+ "labels": {
750
+ "items": {
751
+ "type": "string"
752
+ },
753
+ "type": "array"
754
+ },
755
+ "series": {
756
+ "items": {
757
+ "$ref": "#/$defs/Series"
758
+ },
759
+ "type": "array"
760
+ },
761
+ "variant": {
762
+ "enum": [
763
+ "linear",
764
+ "natural",
765
+ "step"
766
+ ],
767
+ "type": "string"
768
+ },
769
+ "xLabel": {
770
+ "type": "string"
771
+ },
772
+ "yLabel": {
773
+ "type": "string"
774
+ }
775
+ },
776
+ "required": [
777
+ "labels",
778
+ "series"
779
+ ],
780
+ "type": "object"
781
+ },
782
+ "BarChart": {
783
+ "additionalProperties": false,
784
+ "description": "Vertical bars; use for comparing values across categories with one or more series",
785
+ "properties": {
786
+ "height": {
787
+ "type": "number"
788
+ },
789
+ "labels": {
790
+ "items": {
791
+ "type": "string"
792
+ },
793
+ "type": "array"
794
+ },
795
+ "series": {
796
+ "items": {
797
+ "$ref": "#/$defs/Series"
798
+ },
799
+ "type": "array"
800
+ },
801
+ "variant": {
802
+ "enum": [
803
+ "grouped",
804
+ "stacked"
805
+ ],
806
+ "type": "string"
807
+ },
808
+ "xLabel": {
809
+ "type": "string"
810
+ },
811
+ "yLabel": {
812
+ "type": "string"
813
+ }
814
+ },
815
+ "required": [
816
+ "labels",
817
+ "series"
818
+ ],
819
+ "type": "object"
820
+ },
821
+ "BoldText": {
822
+ "additionalProperties": false,
823
+ "description": "Emphasized (bold) text line with optional subtext. variant 'number' uses tabular number styling; subtextVariant 'metric' colors a leading +/- subtext green/red.",
824
+ "properties": {
825
+ "size": {
826
+ "default": "sm",
827
+ "enum": [
828
+ "xs",
829
+ "sm",
830
+ "md",
831
+ "lg"
832
+ ],
833
+ "type": "string"
834
+ },
835
+ "subtext": {
836
+ "type": "string"
837
+ },
838
+ "subtextVariant": {
839
+ "default": "text",
840
+ "enum": [
841
+ "text",
842
+ "number",
843
+ "metric"
844
+ ],
845
+ "type": "string"
846
+ },
847
+ "value": {
848
+ "type": "string"
849
+ },
850
+ "variant": {
851
+ "default": "text",
852
+ "enum": [
853
+ "text",
854
+ "number"
855
+ ],
856
+ "type": "string"
857
+ }
858
+ },
859
+ "required": [
860
+ "variant",
861
+ "value",
862
+ "subtextVariant",
863
+ "size"
864
+ ],
865
+ "type": "object"
866
+ },
867
+ "Button": {
868
+ "additionalProperties": false,
869
+ "description": "Clickable button",
870
+ "properties": {
871
+ "action": {
872
+ "$ref": "#/$defs/ActionExpression"
873
+ },
874
+ "label": {
875
+ "type": "string"
876
+ },
877
+ "size": {
878
+ "enum": [
879
+ "extra-small",
880
+ "small",
881
+ "medium",
882
+ "large"
883
+ ],
884
+ "type": "string"
885
+ },
886
+ "type": {
887
+ "enum": [
888
+ "normal",
889
+ "destructive"
890
+ ],
891
+ "type": "string"
892
+ },
893
+ "variant": {
894
+ "enum": [
895
+ "primary",
896
+ "secondary",
897
+ "tertiary"
898
+ ],
899
+ "type": "string"
900
+ }
901
+ },
902
+ "required": [
903
+ "label"
904
+ ],
905
+ "type": "object"
906
+ },
907
+ "Buttons": {
908
+ "additionalProperties": false,
909
+ "description": "Group of Button components. direction: \"row\" (default) | \"column\".",
910
+ "properties": {
911
+ "buttons": {
912
+ "items": {
913
+ "$ref": "#/$defs/Button"
914
+ },
915
+ "type": "array"
916
+ },
917
+ "direction": {
918
+ "enum": [
919
+ "row",
920
+ "column"
921
+ ],
922
+ "type": "string"
923
+ }
924
+ },
925
+ "required": [
926
+ "buttons"
927
+ ],
928
+ "type": "object"
929
+ },
930
+ "Callout": {
931
+ "additionalProperties": false,
932
+ "description": "Callout banner. Optional visible is a reactive $boolean — auto-dismisses after 3s by setting $visible to false.",
933
+ "properties": {
934
+ "description": {
935
+ "type": "string"
936
+ },
937
+ "title": {
938
+ "type": "string"
939
+ },
940
+ "variant": {
941
+ "enum": [
942
+ "info",
943
+ "warning",
944
+ "error",
945
+ "success",
946
+ "neutral"
947
+ ],
948
+ "type": "string"
949
+ },
950
+ "visible": {
951
+ "type": "boolean"
952
+ }
953
+ },
954
+ "required": [
955
+ "variant",
956
+ "title",
957
+ "description"
958
+ ],
959
+ "type": "object"
960
+ },
961
+ "Card": {
962
+ "additionalProperties": false,
963
+ "description": "Vertical container for all content in a chat response. Children stack top to bottom automatically. Optional sources ([{ title, sourceName, url }]) render as a Sources strip at the bottom and back inline [n] citations in TextContent.",
964
+ "properties": {
965
+ "children": {
966
+ "items": {
967
+ "anyOf": [
968
+ {
969
+ "$ref": "#/$defs/TextContent"
970
+ },
971
+ {
972
+ "$ref": "#/$defs/MarkDownRenderer"
973
+ },
974
+ {
975
+ "$ref": "#/$defs/CardHeader"
976
+ },
977
+ {
978
+ "$ref": "#/$defs/Callout"
979
+ },
980
+ {
981
+ "$ref": "#/$defs/TextCallout"
982
+ },
983
+ {
984
+ "$ref": "#/$defs/CodeBlock"
985
+ },
986
+ {
987
+ "$ref": "#/$defs/Image"
988
+ },
989
+ {
990
+ "$ref": "#/$defs/ImageBlock"
991
+ },
992
+ {
993
+ "$ref": "#/$defs/ImageGallery"
994
+ },
995
+ {
996
+ "$ref": "#/$defs/Separator"
997
+ },
998
+ {
999
+ "$ref": "#/$defs/HorizontalBarChart"
1000
+ },
1001
+ {
1002
+ "$ref": "#/$defs/RadarChart"
1003
+ },
1004
+ {
1005
+ "$ref": "#/$defs/PieChart"
1006
+ },
1007
+ {
1008
+ "$ref": "#/$defs/RadialChart"
1009
+ },
1010
+ {
1011
+ "$ref": "#/$defs/SingleStackedBarChart"
1012
+ },
1013
+ {
1014
+ "$ref": "#/$defs/ScatterChart"
1015
+ },
1016
+ {
1017
+ "$ref": "#/$defs/AreaChart"
1018
+ },
1019
+ {
1020
+ "$ref": "#/$defs/BarChart"
1021
+ },
1022
+ {
1023
+ "$ref": "#/$defs/LineChart"
1024
+ },
1025
+ {
1026
+ "$ref": "#/$defs/Table"
1027
+ },
1028
+ {
1029
+ "$ref": "#/$defs/TagBlock"
1030
+ },
1031
+ {
1032
+ "$ref": "#/$defs/Form"
1033
+ },
1034
+ {
1035
+ "$ref": "#/$defs/Buttons"
1036
+ },
1037
+ {
1038
+ "$ref": "#/$defs/IconButton"
1039
+ },
1040
+ {
1041
+ "$ref": "#/$defs/Steps"
1042
+ },
1043
+ {
1044
+ "$ref": "#/$defs/InlineHeader"
1045
+ },
1046
+ {
1047
+ "$ref": "#/$defs/EntityList"
1048
+ },
1049
+ {
1050
+ "$ref": "#/$defs/EditableTable"
1051
+ },
1052
+ {
1053
+ "$ref": "#/$defs/SnippetCardBlock"
1054
+ },
1055
+ {
1056
+ "$ref": "#/$defs/OverviewCardBlock"
1057
+ },
1058
+ {
1059
+ "$ref": "#/$defs/ContextCardBlock"
1060
+ },
1061
+ {
1062
+ "$ref": "#/$defs/CompositeCardBlock"
1063
+ },
1064
+ {
1065
+ "$ref": "#/$defs/VisualCardBlock"
1066
+ },
1067
+ {
1068
+ "$ref": "#/$defs/ListBlock"
1069
+ },
1070
+ {
1071
+ "$ref": "#/$defs/FollowUpBlock"
1072
+ },
1073
+ {
1074
+ "$ref": "#/$defs/SectionBlock"
1075
+ },
1076
+ {
1077
+ "$ref": "#/$defs/Tabs"
1078
+ },
1079
+ {
1080
+ "$ref": "#/$defs/Carousel"
1081
+ }
1082
+ ]
1083
+ },
1084
+ "type": "array"
1085
+ },
1086
+ "sources": {
1087
+ "items": {
1088
+ "additionalProperties": false,
1089
+ "properties": {
1090
+ "sourceName": {
1091
+ "type": "string"
1092
+ },
1093
+ "title": {
1094
+ "type": "string"
1095
+ },
1096
+ "url": {
1097
+ "type": "string"
1098
+ }
1099
+ },
1100
+ "required": [
1101
+ "title",
1102
+ "sourceName"
1103
+ ],
1104
+ "type": "object"
1105
+ },
1106
+ "type": "array"
1107
+ }
1108
+ },
1109
+ "required": [
1110
+ "children"
1111
+ ],
1112
+ "type": "object"
1113
+ },
1114
+ "CardHeader": {
1115
+ "additionalProperties": false,
1116
+ "description": "Header with optional title and subtitle",
1117
+ "properties": {
1118
+ "subtitle": {
1119
+ "type": "string"
1120
+ },
1121
+ "title": {
1122
+ "type": "string"
1123
+ }
1124
+ },
1125
+ "type": "object"
1126
+ },
1127
+ "Carousel": {
1128
+ "additionalProperties": false,
1129
+ "description": "Horizontal scrollable carousel",
1130
+ "properties": {
1131
+ "children": {
1132
+ "items": {
1133
+ "items": {
1134
+ "anyOf": [
1135
+ {
1136
+ "$ref": "#/$defs/TextContent"
1137
+ },
1138
+ {
1139
+ "$ref": "#/$defs/MarkDownRenderer"
1140
+ },
1141
+ {
1142
+ "$ref": "#/$defs/CardHeader"
1143
+ },
1144
+ {
1145
+ "$ref": "#/$defs/Callout"
1146
+ },
1147
+ {
1148
+ "$ref": "#/$defs/TextCallout"
1149
+ },
1150
+ {
1151
+ "$ref": "#/$defs/CodeBlock"
1152
+ },
1153
+ {
1154
+ "$ref": "#/$defs/Image"
1155
+ },
1156
+ {
1157
+ "$ref": "#/$defs/ImageBlock"
1158
+ },
1159
+ {
1160
+ "$ref": "#/$defs/ImageGallery"
1161
+ },
1162
+ {
1163
+ "$ref": "#/$defs/Separator"
1164
+ },
1165
+ {
1166
+ "$ref": "#/$defs/HorizontalBarChart"
1167
+ },
1168
+ {
1169
+ "$ref": "#/$defs/RadarChart"
1170
+ },
1171
+ {
1172
+ "$ref": "#/$defs/PieChart"
1173
+ },
1174
+ {
1175
+ "$ref": "#/$defs/RadialChart"
1176
+ },
1177
+ {
1178
+ "$ref": "#/$defs/SingleStackedBarChart"
1179
+ },
1180
+ {
1181
+ "$ref": "#/$defs/ScatterChart"
1182
+ },
1183
+ {
1184
+ "$ref": "#/$defs/AreaChart"
1185
+ },
1186
+ {
1187
+ "$ref": "#/$defs/BarChart"
1188
+ },
1189
+ {
1190
+ "$ref": "#/$defs/LineChart"
1191
+ },
1192
+ {
1193
+ "$ref": "#/$defs/Table"
1194
+ },
1195
+ {
1196
+ "$ref": "#/$defs/TagBlock"
1197
+ },
1198
+ {
1199
+ "$ref": "#/$defs/Form"
1200
+ },
1201
+ {
1202
+ "$ref": "#/$defs/Buttons"
1203
+ },
1204
+ {
1205
+ "$ref": "#/$defs/IconButton"
1206
+ },
1207
+ {
1208
+ "$ref": "#/$defs/Steps"
1209
+ },
1210
+ {
1211
+ "$ref": "#/$defs/InlineHeader"
1212
+ },
1213
+ {
1214
+ "$ref": "#/$defs/EntityList"
1215
+ },
1216
+ {
1217
+ "$ref": "#/$defs/EditableTable"
1218
+ },
1219
+ {
1220
+ "$ref": "#/$defs/SnippetCardBlock"
1221
+ },
1222
+ {
1223
+ "$ref": "#/$defs/OverviewCardBlock"
1224
+ },
1225
+ {
1226
+ "$ref": "#/$defs/ContextCardBlock"
1227
+ },
1228
+ {
1229
+ "$ref": "#/$defs/CompositeCardBlock"
1230
+ },
1231
+ {
1232
+ "$ref": "#/$defs/VisualCardBlock"
1233
+ },
1234
+ {
1235
+ "$ref": "#/$defs/ListBlock"
1236
+ },
1237
+ {
1238
+ "$ref": "#/$defs/FollowUpBlock"
1239
+ }
1240
+ ]
1241
+ },
1242
+ "type": "array"
1243
+ },
1244
+ "type": "array"
1245
+ },
1246
+ "variant": {
1247
+ "enum": [
1248
+ "card",
1249
+ "sunk"
1250
+ ],
1251
+ "type": "string"
1252
+ }
1253
+ },
1254
+ "required": [
1255
+ "children"
1256
+ ],
1257
+ "type": "object"
1258
+ },
1259
+ "CheckBoxGroup": {
1260
+ "additionalProperties": false,
1261
+ "properties": {
1262
+ "items": {
1263
+ "items": {
1264
+ "$ref": "#/$defs/CheckBoxItem"
1265
+ },
1266
+ "type": "array"
1267
+ },
1268
+ "name": {
1269
+ "type": "string"
1270
+ },
1271
+ "rules": {
1272
+ "additionalProperties": false,
1273
+ "properties": {
1274
+ "email": {
1275
+ "type": "boolean"
1276
+ },
1277
+ "max": {
1278
+ "type": "number"
1279
+ },
1280
+ "maxLength": {
1281
+ "type": "number"
1282
+ },
1283
+ "min": {
1284
+ "type": "number"
1285
+ },
1286
+ "minLength": {
1287
+ "type": "number"
1288
+ },
1289
+ "numeric": {
1290
+ "type": "boolean"
1291
+ },
1292
+ "pattern": {
1293
+ "type": "string"
1294
+ },
1295
+ "required": {
1296
+ "type": "boolean"
1297
+ },
1298
+ "url": {
1299
+ "type": "boolean"
1300
+ }
1301
+ },
1302
+ "type": "object"
1303
+ },
1304
+ "value": {
1305
+ "additionalProperties": {
1306
+ "type": "boolean"
1307
+ },
1308
+ "propertyNames": {
1309
+ "type": "string"
1310
+ },
1311
+ "type": "object"
1312
+ }
1313
+ },
1314
+ "required": [
1315
+ "name",
1316
+ "items"
1317
+ ],
1318
+ "type": "object"
1319
+ },
1320
+ "CheckBoxItem": {
1321
+ "additionalProperties": false,
1322
+ "properties": {
1323
+ "defaultChecked": {
1324
+ "type": "boolean"
1325
+ },
1326
+ "description": {
1327
+ "type": "string"
1328
+ },
1329
+ "label": {
1330
+ "type": "string"
1331
+ },
1332
+ "name": {
1333
+ "type": "string"
1334
+ }
1335
+ },
1336
+ "required": [
1337
+ "label",
1338
+ "description",
1339
+ "name"
1340
+ ],
1341
+ "type": "object"
1342
+ },
1343
+ "ChipItem": {
1344
+ "additionalProperties": false,
1345
+ "description": "A single selectable chip inside a Chips group, with a value, label and optional icon.",
1346
+ "properties": {
1347
+ "disabled": {
1348
+ "type": "boolean"
1349
+ },
1350
+ "icon": {
1351
+ "$ref": "#/$defs/Icon"
1352
+ },
1353
+ "label": {
1354
+ "type": "string"
1355
+ },
1356
+ "value": {
1357
+ "type": "string"
1358
+ }
1359
+ },
1360
+ "required": [
1361
+ "value",
1362
+ "label"
1363
+ ],
1364
+ "type": "object"
1365
+ },
1366
+ "Chips": {
1367
+ "additionalProperties": false,
1368
+ "description": "A form field of compact selectable chips for choosing one or many short options; the selection is stored under `name`.",
1369
+ "properties": {
1370
+ "defaultValue": {
1371
+ "anyOf": [
1372
+ {
1373
+ "type": "string"
1374
+ },
1375
+ {
1376
+ "items": {
1377
+ "type": "string"
1378
+ },
1379
+ "type": "array"
1380
+ }
1381
+ ]
1382
+ },
1383
+ "items": {
1384
+ "default": [],
1385
+ "items": {
1386
+ "$ref": "#/$defs/ChipItem"
1387
+ },
1388
+ "type": "array"
1389
+ },
1390
+ "name": {
1391
+ "type": "string"
1392
+ },
1393
+ "rules": {
1394
+ "additionalProperties": false,
1395
+ "properties": {
1396
+ "email": {
1397
+ "type": "boolean"
1398
+ },
1399
+ "max": {
1400
+ "type": "number"
1401
+ },
1402
+ "maxLength": {
1403
+ "type": "number"
1404
+ },
1405
+ "min": {
1406
+ "type": "number"
1407
+ },
1408
+ "minLength": {
1409
+ "type": "number"
1410
+ },
1411
+ "numeric": {
1412
+ "type": "boolean"
1413
+ },
1414
+ "pattern": {
1415
+ "type": "string"
1416
+ },
1417
+ "required": {
1418
+ "type": "boolean"
1419
+ },
1420
+ "url": {
1421
+ "type": "boolean"
1422
+ }
1423
+ },
1424
+ "type": "object"
1425
+ },
1426
+ "type": {
1427
+ "default": "multiple",
1428
+ "enum": [
1429
+ "single",
1430
+ "multiple"
1431
+ ],
1432
+ "type": "string"
1433
+ }
1434
+ },
1435
+ "required": [
1436
+ "name",
1437
+ "type",
1438
+ "items"
1439
+ ],
1440
+ "type": "object"
1441
+ },
1442
+ "CodeBlock": {
1443
+ "additionalProperties": false,
1444
+ "description": "Syntax-highlighted code block",
1445
+ "properties": {
1446
+ "codeString": {
1447
+ "type": "string"
1448
+ },
1449
+ "language": {
1450
+ "type": "string"
1451
+ }
1452
+ },
1453
+ "required": [
1454
+ "language",
1455
+ "codeString"
1456
+ ],
1457
+ "type": "object"
1458
+ },
1459
+ "Col": {
1460
+ "additionalProperties": false,
1461
+ "description": "Column definition — holds label + data array",
1462
+ "properties": {
1463
+ "data": {},
1464
+ "label": {
1465
+ "type": "string"
1466
+ },
1467
+ "type": {
1468
+ "enum": [
1469
+ "string",
1470
+ "number",
1471
+ "action"
1472
+ ],
1473
+ "type": "string"
1474
+ }
1475
+ },
1476
+ "required": [
1477
+ "label",
1478
+ "data"
1479
+ ],
1480
+ "type": "object"
1481
+ },
1482
+ "CompositeCardBlock": {
1483
+ "additionalProperties": false,
1484
+ "description": "A two-per-row grid or carousel of rich cards, each with an optional header, stacked body content (text, metrics, charts, lists, tags) and a price/button footer; an optional action makes every card clickable.",
1485
+ "properties": {
1486
+ "action": {
1487
+ "$ref": "#/$defs/ActionExpression"
1488
+ },
1489
+ "gap": {
1490
+ "anyOf": [
1491
+ {
1492
+ "type": "number"
1493
+ },
1494
+ {
1495
+ "type": "string"
1496
+ }
1497
+ ]
1498
+ },
1499
+ "items": {
1500
+ "items": {
1501
+ "$ref": "#/$defs/CompositeCardItem"
1502
+ },
1503
+ "minItems": 2,
1504
+ "type": "array"
1505
+ },
1506
+ "layout": {
1507
+ "default": "grid",
1508
+ "enum": [
1509
+ "grid",
1510
+ "carousel"
1511
+ ],
1512
+ "type": "string"
1513
+ },
1514
+ "responsive": {
1515
+ "default": true,
1516
+ "type": "boolean"
1517
+ }
1518
+ },
1519
+ "required": [
1520
+ "items",
1521
+ "layout",
1522
+ "responsive"
1523
+ ],
1524
+ "type": "object"
1525
+ },
1526
+ "CompositeCardItem": {
1527
+ "additionalProperties": false,
1528
+ "description": "A single card inside a CompositeCardBlock: an optional header (icon/image/text), a stack of body elements (text, metrics, charts, lists, tags), and an optional price/button footer.",
1529
+ "properties": {
1530
+ "body": {
1531
+ "default": [],
1532
+ "items": {
1533
+ "anyOf": [
1534
+ {
1535
+ "$ref": "#/$defs/Text"
1536
+ },
1537
+ {
1538
+ "$ref": "#/$defs/BoldText"
1539
+ },
1540
+ {
1541
+ "$ref": "#/$defs/MetricIndicatorInline"
1542
+ },
1543
+ {
1544
+ "$ref": "#/$defs/IconText"
1545
+ },
1546
+ {
1547
+ "$ref": "#/$defs/Image"
1548
+ },
1549
+ {
1550
+ "$ref": "#/$defs/AreaChart"
1551
+ },
1552
+ {
1553
+ "$ref": "#/$defs/BarChart"
1554
+ },
1555
+ {
1556
+ "$ref": "#/$defs/LineChart"
1557
+ },
1558
+ {
1559
+ "$ref": "#/$defs/ListBlock"
1560
+ },
1561
+ {
1562
+ "$ref": "#/$defs/TagBlock"
1563
+ },
1564
+ {
1565
+ "$ref": "#/$defs/EntityList"
1566
+ }
1567
+ ]
1568
+ },
1569
+ "type": "array"
1570
+ },
1571
+ "footer": {
1572
+ "additionalProperties": false,
1573
+ "properties": {
1574
+ "button": {
1575
+ "$ref": "#/$defs/Button"
1576
+ },
1577
+ "price": {
1578
+ "anyOf": [
1579
+ {
1580
+ "$ref": "#/$defs/BoldText"
1581
+ },
1582
+ {
1583
+ "$ref": "#/$defs/MetricIndicatorWithStrikethrough"
1584
+ }
1585
+ ]
1586
+ }
1587
+ },
1588
+ "type": "object"
1589
+ },
1590
+ "header": {
1591
+ "anyOf": [
1592
+ {
1593
+ "$ref": "#/$defs/IconText"
1594
+ },
1595
+ {
1596
+ "$ref": "#/$defs/ImageText"
1597
+ },
1598
+ {
1599
+ "$ref": "#/$defs/ImageTextLarge"
1600
+ },
1601
+ {
1602
+ "$ref": "#/$defs/Text"
1603
+ },
1604
+ {
1605
+ "$ref": "#/$defs/Image"
1606
+ }
1607
+ ]
1608
+ },
1609
+ "id": {
1610
+ "type": "string"
1611
+ }
1612
+ },
1613
+ "required": [
1614
+ "body"
1615
+ ],
1616
+ "type": "object"
1617
+ },
1618
+ "ContextCardBlock": {
1619
+ "additionalProperties": false,
1620
+ "description": "A grid or carousel of compact tinted context cards (title or tag plus a short bold body); an optional action makes every card clickable.",
1621
+ "properties": {
1622
+ "action": {
1623
+ "$ref": "#/$defs/ActionExpression"
1624
+ },
1625
+ "gap": {
1626
+ "anyOf": [
1627
+ {
1628
+ "type": "number"
1629
+ },
1630
+ {
1631
+ "type": "string"
1632
+ }
1633
+ ]
1634
+ },
1635
+ "items": {
1636
+ "items": {
1637
+ "$ref": "#/$defs/ContextCardItem"
1638
+ },
1639
+ "minItems": 2,
1640
+ "type": "array"
1641
+ },
1642
+ "layout": {
1643
+ "default": "grid",
1644
+ "enum": [
1645
+ "grid",
1646
+ "carousel"
1647
+ ],
1648
+ "type": "string"
1649
+ },
1650
+ "responsive": {
1651
+ "default": true,
1652
+ "type": "boolean"
1653
+ }
1654
+ },
1655
+ "required": [
1656
+ "items",
1657
+ "layout",
1658
+ "responsive"
1659
+ ],
1660
+ "type": "object"
1661
+ },
1662
+ "ContextCardItem": {
1663
+ "additionalProperties": false,
1664
+ "description": "A single card inside a ContextCardBlock: a title (plain string or Tag), an optional markdown body, and an optional gray tint or background image.",
1665
+ "properties": {
1666
+ "bgColor": {
1667
+ "enum": [
1668
+ "gray"
1669
+ ],
1670
+ "type": "string"
1671
+ },
1672
+ "bgImageAlt": {
1673
+ "type": "string"
1674
+ },
1675
+ "bgImageSrc": {
1676
+ "type": "string"
1677
+ },
1678
+ "body": {
1679
+ "type": "string"
1680
+ },
1681
+ "id": {
1682
+ "type": "string"
1683
+ },
1684
+ "title": {
1685
+ "anyOf": [
1686
+ {
1687
+ "type": "string"
1688
+ },
1689
+ {
1690
+ "$ref": "#/$defs/Tag"
1691
+ }
1692
+ ]
1693
+ }
1694
+ },
1695
+ "required": [
1696
+ "title"
1697
+ ],
1698
+ "type": "object"
1699
+ },
1700
+ "DatePicker": {
1701
+ "additionalProperties": false,
1702
+ "properties": {
1703
+ "mode": {
1704
+ "enum": [
1705
+ "single",
1706
+ "range"
1707
+ ],
1708
+ "type": "string"
1709
+ },
1710
+ "name": {
1711
+ "type": "string"
1712
+ },
1713
+ "rules": {
1714
+ "additionalProperties": false,
1715
+ "properties": {
1716
+ "email": {
1717
+ "type": "boolean"
1718
+ },
1719
+ "max": {
1720
+ "type": "number"
1721
+ },
1722
+ "maxLength": {
1723
+ "type": "number"
1724
+ },
1725
+ "min": {
1726
+ "type": "number"
1727
+ },
1728
+ "minLength": {
1729
+ "type": "number"
1730
+ },
1731
+ "numeric": {
1732
+ "type": "boolean"
1733
+ },
1734
+ "pattern": {
1735
+ "type": "string"
1736
+ },
1737
+ "required": {
1738
+ "type": "boolean"
1739
+ },
1740
+ "url": {
1741
+ "type": "boolean"
1742
+ }
1743
+ },
1744
+ "type": "object"
1745
+ },
1746
+ "value": {}
1747
+ },
1748
+ "required": [
1749
+ "name"
1750
+ ],
1751
+ "type": "object"
1752
+ },
1753
+ "EditableTable": {
1754
+ "additionalProperties": false,
1755
+ "description": "Spreadsheet-like table whose cells the user can edit inline (text, number, url, date, select columns); edits are saved back as a form field",
1756
+ "properties": {
1757
+ "columns": {
1758
+ "default": [],
1759
+ "items": {
1760
+ "additionalProperties": false,
1761
+ "properties": {
1762
+ "header": {
1763
+ "default": "",
1764
+ "type": "string"
1765
+ },
1766
+ "key": {
1767
+ "default": "default",
1768
+ "type": "string"
1769
+ },
1770
+ "options": {
1771
+ "items": {
1772
+ "additionalProperties": false,
1773
+ "properties": {
1774
+ "label": {
1775
+ "type": "string"
1776
+ },
1777
+ "value": {
1778
+ "type": "string"
1779
+ }
1780
+ },
1781
+ "required": [
1782
+ "value",
1783
+ "label"
1784
+ ],
1785
+ "type": "object"
1786
+ },
1787
+ "type": "array"
1788
+ },
1789
+ "type": {
1790
+ "enum": [
1791
+ "text",
1792
+ "number",
1793
+ "date-single",
1794
+ "select",
1795
+ "url"
1796
+ ],
1797
+ "type": "string"
1798
+ },
1799
+ "width": {
1800
+ "type": "number"
1801
+ }
1802
+ },
1803
+ "required": [
1804
+ "type",
1805
+ "key",
1806
+ "header"
1807
+ ],
1808
+ "type": "object"
1809
+ },
1810
+ "type": "array"
1811
+ },
1812
+ "data": {
1813
+ "default": [],
1814
+ "items": {
1815
+ "additionalProperties": false,
1816
+ "properties": {
1817
+ "id": {
1818
+ "type": "string"
1819
+ },
1820
+ "values": {
1821
+ "items": {
1822
+ "anyOf": [
1823
+ {
1824
+ "type": "string"
1825
+ },
1826
+ {
1827
+ "type": "number"
1828
+ }
1829
+ ]
1830
+ },
1831
+ "type": "array"
1832
+ }
1833
+ },
1834
+ "required": [
1835
+ "id",
1836
+ "values"
1837
+ ],
1838
+ "type": "object"
1839
+ },
1840
+ "type": "array"
1841
+ },
1842
+ "name": {
1843
+ "default": "",
1844
+ "type": "string"
1845
+ }
1846
+ },
1847
+ "required": [
1848
+ "name",
1849
+ "columns",
1850
+ "data"
1851
+ ],
1852
+ "type": "object"
1853
+ },
1854
+ "EntityList": {
1855
+ "additionalProperties": false,
1856
+ "description": "Two-column key/value rows (left label, right value). size 'default' supports optional header and footer rows; rightVariant 'number' uses tabular numbers.",
1857
+ "properties": {
1858
+ "footer": {
1859
+ "additionalProperties": false,
1860
+ "properties": {
1861
+ "left": {
1862
+ "type": "string"
1863
+ },
1864
+ "right": {
1865
+ "type": "string"
1866
+ },
1867
+ "rightVariant": {
1868
+ "default": "text",
1869
+ "enum": [
1870
+ "text",
1871
+ "number"
1872
+ ],
1873
+ "type": "string"
1874
+ }
1875
+ },
1876
+ "required": [
1877
+ "left",
1878
+ "right",
1879
+ "rightVariant"
1880
+ ],
1881
+ "type": "object"
1882
+ },
1883
+ "header": {
1884
+ "additionalProperties": false,
1885
+ "properties": {
1886
+ "left": {
1887
+ "type": "string"
1888
+ },
1889
+ "right": {
1890
+ "type": "string"
1891
+ },
1892
+ "rightVariant": {
1893
+ "default": "text",
1894
+ "enum": [
1895
+ "text",
1896
+ "number"
1897
+ ],
1898
+ "type": "string"
1899
+ }
1900
+ },
1901
+ "required": [
1902
+ "left",
1903
+ "right",
1904
+ "rightVariant"
1905
+ ],
1906
+ "type": "object"
1907
+ },
1908
+ "rows": {
1909
+ "default": [],
1910
+ "items": {
1911
+ "additionalProperties": false,
1912
+ "properties": {
1913
+ "left": {
1914
+ "type": "string"
1915
+ },
1916
+ "right": {
1917
+ "type": "string"
1918
+ },
1919
+ "rightVariant": {
1920
+ "default": "text",
1921
+ "enum": [
1922
+ "text",
1923
+ "number"
1924
+ ],
1925
+ "type": "string"
1926
+ }
1927
+ },
1928
+ "required": [
1929
+ "left",
1930
+ "right",
1931
+ "rightVariant"
1932
+ ],
1933
+ "type": "object"
1934
+ },
1935
+ "type": "array"
1936
+ },
1937
+ "size": {
1938
+ "default": "default",
1939
+ "enum": [
1940
+ "small",
1941
+ "default"
1942
+ ],
1943
+ "type": "string"
1944
+ }
1945
+ },
1946
+ "required": [
1947
+ "rows",
1948
+ "size"
1949
+ ],
1950
+ "type": "object"
1951
+ },
1952
+ "FollowUpBlock": {
1953
+ "additionalProperties": false,
1954
+ "description": "List of clickable follow-up suggestions placed at the end of a response",
1955
+ "properties": {
1956
+ "items": {
1957
+ "items": {
1958
+ "$ref": "#/$defs/FollowUpItem"
1959
+ },
1960
+ "type": "array"
1961
+ }
1962
+ },
1963
+ "required": [
1964
+ "items"
1965
+ ],
1966
+ "type": "object"
1967
+ },
1968
+ "FollowUpItem": {
1969
+ "additionalProperties": false,
1970
+ "description": "Clickable follow-up suggestion — when clicked, sends text as user message",
1971
+ "properties": {
1972
+ "text": {
1973
+ "type": "string"
1974
+ }
1975
+ },
1976
+ "required": [
1977
+ "text"
1978
+ ],
1979
+ "type": "object"
1980
+ },
1981
+ "Form": {
1982
+ "additionalProperties": false,
1983
+ "description": "Form container with fields and explicit action buttons",
1984
+ "properties": {
1985
+ "buttons": {
1986
+ "$ref": "#/$defs/Buttons"
1987
+ },
1988
+ "fields": {
1989
+ "default": [],
1990
+ "items": {
1991
+ "$ref": "#/$defs/FormControl"
1992
+ },
1993
+ "type": "array"
1994
+ },
1995
+ "name": {
1996
+ "type": "string"
1997
+ }
1998
+ },
1999
+ "required": [
2000
+ "name",
2001
+ "buttons",
2002
+ "fields"
2003
+ ],
2004
+ "type": "object"
2005
+ },
2006
+ "FormControl": {
2007
+ "additionalProperties": false,
2008
+ "description": "Field with label, input component, and optional hint text",
2009
+ "properties": {
2010
+ "hint": {
2011
+ "type": "string"
2012
+ },
2013
+ "input": {
2014
+ "anyOf": [
2015
+ {
2016
+ "$ref": "#/$defs/Input"
2017
+ },
2018
+ {
2019
+ "$ref": "#/$defs/TextArea"
2020
+ },
2021
+ {
2022
+ "$ref": "#/$defs/Select"
2023
+ },
2024
+ {
2025
+ "$ref": "#/$defs/DatePicker"
2026
+ },
2027
+ {
2028
+ "$ref": "#/$defs/Slider"
2029
+ },
2030
+ {
2031
+ "$ref": "#/$defs/CheckBoxGroup"
2032
+ },
2033
+ {
2034
+ "$ref": "#/$defs/RadioGroup"
2035
+ },
2036
+ {
2037
+ "$ref": "#/$defs/Chips"
2038
+ },
2039
+ {
2040
+ "$ref": "#/$defs/OptionCards"
2041
+ }
2042
+ ]
2043
+ },
2044
+ "label": {
2045
+ "type": "string"
2046
+ }
2047
+ },
2048
+ "required": [
2049
+ "label",
2050
+ "input"
2051
+ ],
2052
+ "type": "object"
2053
+ },
2054
+ "HorizontalBarChart": {
2055
+ "additionalProperties": false,
2056
+ "description": "Horizontal bars; prefer when category labels are long or for ranked lists",
2057
+ "properties": {
2058
+ "labels": {
2059
+ "items": {
2060
+ "type": "string"
2061
+ },
2062
+ "type": "array"
2063
+ },
2064
+ "series": {
2065
+ "items": {
2066
+ "$ref": "#/$defs/Series"
2067
+ },
2068
+ "type": "array"
2069
+ },
2070
+ "variant": {
2071
+ "enum": [
2072
+ "grouped",
2073
+ "stacked"
2074
+ ],
2075
+ "type": "string"
2076
+ },
2077
+ "xLabel": {
2078
+ "type": "string"
2079
+ },
2080
+ "yLabel": {
2081
+ "type": "string"
2082
+ }
2083
+ },
2084
+ "required": [
2085
+ "labels",
2086
+ "series"
2087
+ ],
2088
+ "type": "object"
2089
+ },
2090
+ "Icon": {
2091
+ "additionalProperties": false,
2092
+ "description": "A lucide icon by kebab-case name (e.g. 'circle-check'). Optional category picks a topical fallback when the name doesn't resolve.",
2093
+ "properties": {
2094
+ "category": {
2095
+ "type": "string"
2096
+ },
2097
+ "name": {
2098
+ "type": "string"
2099
+ }
2100
+ },
2101
+ "required": [
2102
+ "name"
2103
+ ],
2104
+ "type": "object"
2105
+ },
2106
+ "IconButton": {
2107
+ "additionalProperties": false,
2108
+ "description": "Icon-only button. name is the accessible label and the action label; icon is an Icon; action fires on click.",
2109
+ "properties": {
2110
+ "action": {
2111
+ "$ref": "#/$defs/ActionExpression"
2112
+ },
2113
+ "icon": {
2114
+ "$ref": "#/$defs/Icon"
2115
+ },
2116
+ "name": {
2117
+ "type": "string"
2118
+ },
2119
+ "shape": {
2120
+ "enum": [
2121
+ "square",
2122
+ "circle"
2123
+ ],
2124
+ "type": "string"
2125
+ },
2126
+ "size": {
2127
+ "enum": [
2128
+ "extra-small",
2129
+ "small",
2130
+ "medium",
2131
+ "large"
2132
+ ],
2133
+ "type": "string"
2134
+ },
2135
+ "variant": {
2136
+ "enum": [
2137
+ "primary",
2138
+ "secondary",
2139
+ "tertiary"
2140
+ ],
2141
+ "type": "string"
2142
+ }
2143
+ },
2144
+ "required": [
2145
+ "name",
2146
+ "icon"
2147
+ ],
2148
+ "type": "object"
2149
+ },
2150
+ "IconText": {
2151
+ "additionalProperties": false,
2152
+ "description": "An icon badge with a title and optional subtitle, laid out horizontally or vertically. iconVariant sets the badge color.",
2153
+ "properties": {
2154
+ "bold": {
2155
+ "default": false,
2156
+ "type": "boolean"
2157
+ },
2158
+ "icon": {
2159
+ "$ref": "#/$defs/Icon"
2160
+ },
2161
+ "iconSize": {
2162
+ "default": "m",
2163
+ "enum": [
2164
+ "xs",
2165
+ "s",
2166
+ "m",
2167
+ "l",
2168
+ "xl",
2169
+ "sm",
2170
+ "md",
2171
+ "lg"
2172
+ ],
2173
+ "type": "string"
2174
+ },
2175
+ "iconVariant": {
2176
+ "default": "neutral",
2177
+ "enum": [
2178
+ "neutral",
2179
+ "info",
2180
+ "success",
2181
+ "warning",
2182
+ "danger",
2183
+ "inverted",
2184
+ "filled",
2185
+ "soft"
2186
+ ],
2187
+ "type": "string"
2188
+ },
2189
+ "layout": {
2190
+ "default": "horizontal",
2191
+ "enum": [
2192
+ "horizontal",
2193
+ "vertical"
2194
+ ],
2195
+ "type": "string"
2196
+ },
2197
+ "subtitle": {
2198
+ "type": "string"
2199
+ },
2200
+ "title": {
2201
+ "type": "string"
2202
+ }
2203
+ },
2204
+ "required": [
2205
+ "icon",
2206
+ "iconVariant",
2207
+ "iconSize",
2208
+ "title",
2209
+ "bold",
2210
+ "layout"
2211
+ ],
2212
+ "type": "object"
2213
+ },
2214
+ "Image": {
2215
+ "additionalProperties": false,
2216
+ "description": "Image with alt text and optional URL",
2217
+ "properties": {
2218
+ "alt": {
2219
+ "type": "string"
2220
+ },
2221
+ "src": {
2222
+ "type": "string"
2223
+ }
2224
+ },
2225
+ "required": [
2226
+ "alt"
2227
+ ],
2228
+ "type": "object"
2229
+ },
2230
+ "ImageBlock": {
2231
+ "additionalProperties": false,
2232
+ "description": "Image block with loading state",
2233
+ "properties": {
2234
+ "alt": {
2235
+ "type": "string"
2236
+ },
2237
+ "src": {
2238
+ "type": "string"
2239
+ }
2240
+ },
2241
+ "required": [
2242
+ "src"
2243
+ ],
2244
+ "type": "object"
2245
+ },
2246
+ "ImageGallery": {
2247
+ "additionalProperties": false,
2248
+ "description": "Gallery grid of images with modal preview",
2249
+ "properties": {
2250
+ "images": {
2251
+ "items": {
2252
+ "additionalProperties": false,
2253
+ "properties": {
2254
+ "alt": {
2255
+ "type": "string"
2256
+ },
2257
+ "details": {
2258
+ "type": "string"
2259
+ },
2260
+ "src": {
2261
+ "type": "string"
2262
+ }
2263
+ },
2264
+ "required": [
2265
+ "src"
2266
+ ],
2267
+ "type": "object"
2268
+ },
2269
+ "type": "array"
2270
+ }
2271
+ },
2272
+ "required": [
2273
+ "images"
2274
+ ],
2275
+ "type": "object"
2276
+ },
2277
+ "ImageText": {
2278
+ "additionalProperties": false,
2279
+ "description": "A small square image (thumbnail/avatar) with a title and optional subtitle. src must be a real image URL.",
2280
+ "properties": {
2281
+ "alt": {
2282
+ "type": "string"
2283
+ },
2284
+ "bold": {
2285
+ "default": false,
2286
+ "type": "boolean"
2287
+ },
2288
+ "imageSize": {
2289
+ "type": "number"
2290
+ },
2291
+ "layout": {
2292
+ "default": "horizontal",
2293
+ "enum": [
2294
+ "horizontal",
2295
+ "vertical"
2296
+ ],
2297
+ "type": "string"
2298
+ },
2299
+ "src": {
2300
+ "type": "string"
2301
+ },
2302
+ "subtitle": {
2303
+ "type": "string"
2304
+ },
2305
+ "title": {
2306
+ "type": "string"
2307
+ }
2308
+ },
2309
+ "required": [
2310
+ "src",
2311
+ "title",
2312
+ "bold",
2313
+ "layout"
2314
+ ],
2315
+ "type": "object"
2316
+ },
2317
+ "ImageTextLarge": {
2318
+ "additionalProperties": false,
2319
+ "description": "A full-width banner image above a bold title and optional subtitle. src must be a real image URL.",
2320
+ "properties": {
2321
+ "alt": {
2322
+ "type": "string"
2323
+ },
2324
+ "bold": {
2325
+ "default": false,
2326
+ "type": "boolean"
2327
+ },
2328
+ "src": {
2329
+ "type": "string"
2330
+ },
2331
+ "subtitle": {
2332
+ "type": "string"
2333
+ },
2334
+ "title": {
2335
+ "type": "string"
2336
+ }
2337
+ },
2338
+ "required": [
2339
+ "src",
2340
+ "title",
2341
+ "bold"
2342
+ ],
2343
+ "type": "object"
2344
+ },
2345
+ "InlineHeader": {
2346
+ "additionalProperties": false,
2347
+ "description": "Compact section heading with an optional one-line description, for use inside cards.",
2348
+ "properties": {
2349
+ "description": {
2350
+ "type": "string"
2351
+ },
2352
+ "heading": {
2353
+ "type": "string"
2354
+ }
2355
+ },
2356
+ "required": [
2357
+ "heading"
2358
+ ],
2359
+ "type": "object"
2360
+ },
2361
+ "Input": {
2362
+ "additionalProperties": false,
2363
+ "properties": {
2364
+ "name": {
2365
+ "type": "string"
2366
+ },
2367
+ "placeholder": {
2368
+ "type": "string"
2369
+ },
2370
+ "rules": {
2371
+ "additionalProperties": false,
2372
+ "properties": {
2373
+ "email": {
2374
+ "type": "boolean"
2375
+ },
2376
+ "max": {
2377
+ "type": "number"
2378
+ },
2379
+ "maxLength": {
2380
+ "type": "number"
2381
+ },
2382
+ "min": {
2383
+ "type": "number"
2384
+ },
2385
+ "minLength": {
2386
+ "type": "number"
2387
+ },
2388
+ "numeric": {
2389
+ "type": "boolean"
2390
+ },
2391
+ "pattern": {
2392
+ "type": "string"
2393
+ },
2394
+ "required": {
2395
+ "type": "boolean"
2396
+ },
2397
+ "url": {
2398
+ "type": "boolean"
2399
+ }
2400
+ },
2401
+ "type": "object"
2402
+ },
2403
+ "type": {
2404
+ "enum": [
2405
+ "text",
2406
+ "email",
2407
+ "password",
2408
+ "number",
2409
+ "url"
2410
+ ],
2411
+ "type": "string"
2412
+ },
2413
+ "value": {
2414
+ "type": "string"
2415
+ }
2416
+ },
2417
+ "required": [
2418
+ "name"
2419
+ ],
2420
+ "type": "object"
2421
+ },
2422
+ "Label": {
2423
+ "additionalProperties": false,
2424
+ "description": "Text label",
2425
+ "properties": {
2426
+ "text": {
2427
+ "type": "string"
2428
+ }
2429
+ },
2430
+ "required": [
2431
+ "text"
2432
+ ],
2433
+ "type": "object"
2434
+ },
2435
+ "LineChart": {
2436
+ "additionalProperties": false,
2437
+ "description": "Lines over categories; use for trends and continuous data over time",
2438
+ "properties": {
2439
+ "height": {
2440
+ "type": "number"
2441
+ },
2442
+ "labels": {
2443
+ "items": {
2444
+ "type": "string"
2445
+ },
2446
+ "type": "array"
2447
+ },
2448
+ "series": {
2449
+ "items": {
2450
+ "$ref": "#/$defs/Series"
2451
+ },
2452
+ "type": "array"
2453
+ },
2454
+ "variant": {
2455
+ "enum": [
2456
+ "linear",
2457
+ "natural",
2458
+ "step"
2459
+ ],
2460
+ "type": "string"
2461
+ },
2462
+ "xLabel": {
2463
+ "type": "string"
2464
+ },
2465
+ "yLabel": {
2466
+ "type": "string"
2467
+ }
2468
+ },
2469
+ "required": [
2470
+ "labels",
2471
+ "series"
2472
+ ],
2473
+ "type": "object"
2474
+ },
2475
+ "ListBlock": {
2476
+ "additionalProperties": false,
2477
+ "description": "A list of items with number or image indicators. Each item can optionally have an action. size small renders a compact list.",
2478
+ "properties": {
2479
+ "items": {
2480
+ "items": {
2481
+ "$ref": "#/$defs/ListItem"
2482
+ },
2483
+ "type": "array"
2484
+ },
2485
+ "size": {
2486
+ "enum": [
2487
+ "default",
2488
+ "small"
2489
+ ],
2490
+ "type": "string"
2491
+ },
2492
+ "variant": {
2493
+ "enum": [
2494
+ "number",
2495
+ "image"
2496
+ ],
2497
+ "type": "string"
2498
+ }
2499
+ },
2500
+ "required": [
2501
+ "items"
2502
+ ],
2503
+ "type": "object"
2504
+ },
2505
+ "ListItem": {
2506
+ "additionalProperties": false,
2507
+ "description": "Item in a ListBlock — displays a title with an optional subtitle and image. When action is provided, the item becomes clickable.",
2508
+ "properties": {
2509
+ "action": {
2510
+ "$ref": "#/$defs/ActionExpression"
2511
+ },
2512
+ "actionLabel": {
2513
+ "type": "string"
2514
+ },
2515
+ "image": {
2516
+ "additionalProperties": false,
2517
+ "properties": {
2518
+ "alt": {
2519
+ "type": "string"
2520
+ },
2521
+ "src": {
2522
+ "type": "string"
2523
+ }
2524
+ },
2525
+ "required": [
2526
+ "src",
2527
+ "alt"
2528
+ ],
2529
+ "type": "object"
2530
+ },
2531
+ "subtitle": {
2532
+ "type": "string"
2533
+ },
2534
+ "title": {
2535
+ "type": "string"
2536
+ }
2537
+ },
2538
+ "required": [
2539
+ "title"
2540
+ ],
2541
+ "type": "object"
2542
+ },
2543
+ "MarkDownRenderer": {
2544
+ "additionalProperties": false,
2545
+ "description": "Renders markdown text with optional container variant",
2546
+ "properties": {
2547
+ "textMarkdown": {
2548
+ "type": "string"
2549
+ },
2550
+ "variant": {
2551
+ "enum": [
2552
+ "clear",
2553
+ "card",
2554
+ "sunk"
2555
+ ],
2556
+ "type": "string"
2557
+ }
2558
+ },
2559
+ "required": [
2560
+ "textMarkdown"
2561
+ ],
2562
+ "type": "object"
2563
+ },
2564
+ "MetricIndicatorInline": {
2565
+ "additionalProperties": false,
2566
+ "description": "Headline metric value with an optional +/- percentage trend and subtext, all on one line.",
2567
+ "properties": {
2568
+ "subtext": {
2569
+ "type": "string"
2570
+ },
2571
+ "trend": {
2572
+ "additionalProperties": false,
2573
+ "properties": {
2574
+ "direction": {
2575
+ "enum": [
2576
+ "up",
2577
+ "down"
2578
+ ],
2579
+ "type": "string"
2580
+ },
2581
+ "value": {
2582
+ "type": "number"
2583
+ }
2584
+ },
2585
+ "required": [
2586
+ "direction",
2587
+ "value"
2588
+ ],
2589
+ "type": "object"
2590
+ },
2591
+ "value": {
2592
+ "type": "string"
2593
+ }
2594
+ },
2595
+ "required": [
2596
+ "value"
2597
+ ],
2598
+ "type": "object"
2599
+ },
2600
+ "MetricIndicatorWithStrikethrough": {
2601
+ "additionalProperties": false,
2602
+ "description": "Headline metric value with an optional struck-through previousValue, a +/- percentage trend, and subtext below.",
2603
+ "properties": {
2604
+ "previousValue": {
2605
+ "type": "string"
2606
+ },
2607
+ "subtext": {
2608
+ "type": "string"
2609
+ },
2610
+ "trend": {
2611
+ "additionalProperties": false,
2612
+ "properties": {
2613
+ "direction": {
2614
+ "enum": [
2615
+ "up",
2616
+ "down"
2617
+ ],
2618
+ "type": "string"
2619
+ },
2620
+ "value": {
2621
+ "type": "number"
2622
+ }
2623
+ },
2624
+ "required": [
2625
+ "direction",
2626
+ "value"
2627
+ ],
2628
+ "type": "object"
2629
+ },
2630
+ "value": {
2631
+ "type": "string"
2632
+ }
2633
+ },
2634
+ "required": [
2635
+ "value"
2636
+ ],
2637
+ "type": "object"
2638
+ },
2639
+ "OptionCard": {
2640
+ "additionalProperties": false,
2641
+ "description": "A single selectable card inside an OptionCards group, with a value, title, optional subtitle and an optional Icon or Image on top.",
2642
+ "properties": {
2643
+ "disabled": {
2644
+ "type": "boolean"
2645
+ },
2646
+ "subtitle": {
2647
+ "type": "string"
2648
+ },
2649
+ "title": {
2650
+ "type": "string"
2651
+ },
2652
+ "topContent": {
2653
+ "anyOf": [
2654
+ {
2655
+ "$ref": "#/$defs/Icon"
2656
+ },
2657
+ {
2658
+ "$ref": "#/$defs/Image"
2659
+ }
2660
+ ]
2661
+ },
2662
+ "value": {
2663
+ "type": "string"
2664
+ }
2665
+ },
2666
+ "required": [
2667
+ "value",
2668
+ "title"
2669
+ ],
2670
+ "type": "object"
2671
+ },
2672
+ "OptionCards": {
2673
+ "additionalProperties": false,
2674
+ "description": "A form field of selectable cards (title, optional subtitle, optional icon or image) laid out in a responsive grid for choosing one or many options; the selection is stored under `name`.",
2675
+ "properties": {
2676
+ "defaultValue": {
2677
+ "anyOf": [
2678
+ {
2679
+ "type": "string"
2680
+ },
2681
+ {
2682
+ "items": {
2683
+ "type": "string"
2684
+ },
2685
+ "type": "array"
2686
+ }
2687
+ ]
2688
+ },
2689
+ "items": {
2690
+ "default": [],
2691
+ "items": {
2692
+ "$ref": "#/$defs/OptionCard"
2693
+ },
2694
+ "type": "array"
2695
+ },
2696
+ "name": {
2697
+ "type": "string"
2698
+ },
2699
+ "rules": {
2700
+ "additionalProperties": false,
2701
+ "properties": {
2702
+ "email": {
2703
+ "type": "boolean"
2704
+ },
2705
+ "max": {
2706
+ "type": "number"
2707
+ },
2708
+ "maxLength": {
2709
+ "type": "number"
2710
+ },
2711
+ "min": {
2712
+ "type": "number"
2713
+ },
2714
+ "minLength": {
2715
+ "type": "number"
2716
+ },
2717
+ "numeric": {
2718
+ "type": "boolean"
2719
+ },
2720
+ "pattern": {
2721
+ "type": "string"
2722
+ },
2723
+ "required": {
2724
+ "type": "boolean"
2725
+ },
2726
+ "url": {
2727
+ "type": "boolean"
2728
+ }
2729
+ },
2730
+ "type": "object"
2731
+ },
2732
+ "type": {
2733
+ "default": "single",
2734
+ "enum": [
2735
+ "single",
2736
+ "multiple"
2737
+ ],
2738
+ "type": "string"
2739
+ }
2740
+ },
2741
+ "required": [
2742
+ "name",
2743
+ "type",
2744
+ "items"
2745
+ ],
2746
+ "type": "object"
2747
+ },
2748
+ "OverviewCardBlock": {
2749
+ "additionalProperties": false,
2750
+ "description": "A grid or horizontal carousel of compact overview cards, each with a heading (icon/image/text) on top and an inline metric below; optionally clickable with a shared action.",
2751
+ "properties": {
2752
+ "action": {
2753
+ "$ref": "#/$defs/ActionExpression"
2754
+ },
2755
+ "gap": {
2756
+ "anyOf": [
2757
+ {
2758
+ "type": "number"
2759
+ },
2760
+ {
2761
+ "type": "string"
2762
+ }
2763
+ ]
2764
+ },
2765
+ "items": {
2766
+ "items": {
2767
+ "$ref": "#/$defs/OverviewCardItem"
2768
+ },
2769
+ "minItems": 2,
2770
+ "type": "array"
2771
+ },
2772
+ "layout": {
2773
+ "default": "grid",
2774
+ "enum": [
2775
+ "grid",
2776
+ "carousel"
2777
+ ],
2778
+ "type": "string"
2779
+ },
2780
+ "responsive": {
2781
+ "default": true,
2782
+ "type": "boolean"
2783
+ }
2784
+ },
2785
+ "required": [
2786
+ "items",
2787
+ "layout",
2788
+ "responsive"
2789
+ ],
2790
+ "type": "object"
2791
+ },
2792
+ "OverviewCardItem": {
2793
+ "additionalProperties": false,
2794
+ "description": "One overview card: a heading slot at the top (IconText, ImageText or Text) and an optional MetricIndicatorInline at the bottom.",
2795
+ "properties": {
2796
+ "bottom": {
2797
+ "$ref": "#/$defs/MetricIndicatorInline"
2798
+ },
2799
+ "id": {
2800
+ "type": "string"
2801
+ },
2802
+ "top": {
2803
+ "anyOf": [
2804
+ {
2805
+ "$ref": "#/$defs/IconText"
2806
+ },
2807
+ {
2808
+ "$ref": "#/$defs/ImageText"
2809
+ },
2810
+ {
2811
+ "$ref": "#/$defs/Text"
2812
+ }
2813
+ ]
2814
+ }
2815
+ },
2816
+ "required": [
2817
+ "top"
2818
+ ],
2819
+ "type": "object"
2820
+ },
2821
+ "PieChart": {
2822
+ "additionalProperties": false,
2823
+ "description": "Circular slices; use plucked arrays: PieChart(data.categories, data.values)",
2824
+ "properties": {
2825
+ "appearance": {
2826
+ "enum": [
2827
+ "circular",
2828
+ "semiCircular"
2829
+ ],
2830
+ "type": "string"
2831
+ },
2832
+ "labels": {
2833
+ "items": {
2834
+ "type": "string"
2835
+ },
2836
+ "type": "array"
2837
+ },
2838
+ "values": {
2839
+ "items": {
2840
+ "type": "number"
2841
+ },
2842
+ "type": "array"
2843
+ },
2844
+ "variant": {
2845
+ "enum": [
2846
+ "pie",
2847
+ "donut"
2848
+ ],
2849
+ "type": "string"
2850
+ }
2851
+ },
2852
+ "required": [
2853
+ "labels",
2854
+ "values"
2855
+ ],
2856
+ "type": "object"
2857
+ },
2858
+ "Point": {
2859
+ "additionalProperties": false,
2860
+ "description": "Data point with numeric coordinates",
2861
+ "properties": {
2862
+ "x": {
2863
+ "type": "number"
2864
+ },
2865
+ "y": {
2866
+ "type": "number"
2867
+ },
2868
+ "z": {
2869
+ "type": "number"
2870
+ }
2871
+ },
2872
+ "required": [
2873
+ "x",
2874
+ "y"
2875
+ ],
2876
+ "type": "object"
2877
+ },
2878
+ "RadarChart": {
2879
+ "additionalProperties": false,
2880
+ "description": "Spider/web chart; use for comparing multiple variables across one or more entities",
2881
+ "properties": {
2882
+ "labels": {
2883
+ "items": {
2884
+ "type": "string"
2885
+ },
2886
+ "type": "array"
2887
+ },
2888
+ "series": {
2889
+ "items": {
2890
+ "$ref": "#/$defs/Series"
2891
+ },
2892
+ "type": "array"
2893
+ }
2894
+ },
2895
+ "required": [
2896
+ "labels",
2897
+ "series"
2898
+ ],
2899
+ "type": "object"
2900
+ },
2901
+ "RadialChart": {
2902
+ "additionalProperties": false,
2903
+ "description": "Radial bars; use plucked arrays: RadialChart(data.categories, data.values)",
2904
+ "properties": {
2905
+ "labels": {
2906
+ "items": {
2907
+ "type": "string"
2908
+ },
2909
+ "type": "array"
2910
+ },
2911
+ "values": {
2912
+ "items": {
2913
+ "type": "number"
2914
+ },
2915
+ "type": "array"
2916
+ }
2917
+ },
2918
+ "required": [
2919
+ "labels",
2920
+ "values"
2921
+ ],
2922
+ "type": "object"
2923
+ },
2924
+ "RadioGroup": {
2925
+ "additionalProperties": false,
2926
+ "properties": {
2927
+ "defaultValue": {
2928
+ "type": "string"
2929
+ },
2930
+ "items": {
2931
+ "items": {
2932
+ "$ref": "#/$defs/RadioItem"
2933
+ },
2934
+ "type": "array"
2935
+ },
2936
+ "name": {
2937
+ "type": "string"
2938
+ },
2939
+ "rules": {
2940
+ "additionalProperties": false,
2941
+ "properties": {
2942
+ "email": {
2943
+ "type": "boolean"
2944
+ },
2945
+ "max": {
2946
+ "type": "number"
2947
+ },
2948
+ "maxLength": {
2949
+ "type": "number"
2950
+ },
2951
+ "min": {
2952
+ "type": "number"
2953
+ },
2954
+ "minLength": {
2955
+ "type": "number"
2956
+ },
2957
+ "numeric": {
2958
+ "type": "boolean"
2959
+ },
2960
+ "pattern": {
2961
+ "type": "string"
2962
+ },
2963
+ "required": {
2964
+ "type": "boolean"
2965
+ },
2966
+ "url": {
2967
+ "type": "boolean"
2968
+ }
2969
+ },
2970
+ "type": "object"
2971
+ },
2972
+ "value": {
2973
+ "type": "string"
2974
+ }
2975
+ },
2976
+ "required": [
2977
+ "name",
2978
+ "items"
2979
+ ],
2980
+ "type": "object"
2981
+ },
2982
+ "RadioItem": {
2983
+ "additionalProperties": false,
2984
+ "properties": {
2985
+ "description": {
2986
+ "type": "string"
2987
+ },
2988
+ "label": {
2989
+ "type": "string"
2990
+ },
2991
+ "value": {
2992
+ "type": "string"
2993
+ }
2994
+ },
2995
+ "required": [
2996
+ "label",
2997
+ "description",
2998
+ "value"
2999
+ ],
3000
+ "type": "object"
3001
+ },
3002
+ "ScatterChart": {
3003
+ "additionalProperties": false,
3004
+ "description": "X/Y scatter plot; use for correlations, distributions, and clustering",
3005
+ "properties": {
3006
+ "datasets": {
3007
+ "items": {
3008
+ "$ref": "#/$defs/ScatterSeries"
3009
+ },
3010
+ "type": "array"
3011
+ },
3012
+ "xLabel": {
3013
+ "type": "string"
3014
+ },
3015
+ "yLabel": {
3016
+ "type": "string"
3017
+ }
3018
+ },
3019
+ "required": [
3020
+ "datasets"
3021
+ ],
3022
+ "type": "object"
3023
+ },
3024
+ "ScatterSeries": {
3025
+ "additionalProperties": false,
3026
+ "description": "Named dataset",
3027
+ "properties": {
3028
+ "name": {
3029
+ "type": "string"
3030
+ },
3031
+ "points": {
3032
+ "items": {
3033
+ "$ref": "#/$defs/Point"
3034
+ },
3035
+ "type": "array"
3036
+ }
3037
+ },
3038
+ "required": [
3039
+ "name",
3040
+ "points"
3041
+ ],
3042
+ "type": "object"
3043
+ },
3044
+ "SectionBlock": {
3045
+ "additionalProperties": false,
3046
+ "description": "Collapsible accordion sections. Auto-opens sections as they stream in. Use SectionItem for each section.",
3047
+ "properties": {
3048
+ "isFoldable": {
3049
+ "type": "boolean"
3050
+ },
3051
+ "sections": {
3052
+ "items": {
3053
+ "$ref": "#/$defs/SectionItem"
3054
+ },
3055
+ "type": "array"
3056
+ }
3057
+ },
3058
+ "required": [
3059
+ "sections"
3060
+ ],
3061
+ "type": "object"
3062
+ },
3063
+ "SectionItem": {
3064
+ "additionalProperties": false,
3065
+ "description": "Section with a label and collapsible content — used inside SectionBlock",
3066
+ "properties": {
3067
+ "content": {
3068
+ "items": {
3069
+ "anyOf": [
3070
+ {
3071
+ "$ref": "#/$defs/TextContent"
3072
+ },
3073
+ {
3074
+ "$ref": "#/$defs/MarkDownRenderer"
3075
+ },
3076
+ {
3077
+ "$ref": "#/$defs/CardHeader"
3078
+ },
3079
+ {
3080
+ "$ref": "#/$defs/Callout"
3081
+ },
3082
+ {
3083
+ "$ref": "#/$defs/TextCallout"
3084
+ },
3085
+ {
3086
+ "$ref": "#/$defs/CodeBlock"
3087
+ },
3088
+ {
3089
+ "$ref": "#/$defs/Image"
3090
+ },
3091
+ {
3092
+ "$ref": "#/$defs/ImageBlock"
3093
+ },
3094
+ {
3095
+ "$ref": "#/$defs/ImageGallery"
3096
+ },
3097
+ {
3098
+ "$ref": "#/$defs/Separator"
3099
+ },
3100
+ {
3101
+ "$ref": "#/$defs/HorizontalBarChart"
3102
+ },
3103
+ {
3104
+ "$ref": "#/$defs/RadarChart"
3105
+ },
3106
+ {
3107
+ "$ref": "#/$defs/PieChart"
3108
+ },
3109
+ {
3110
+ "$ref": "#/$defs/RadialChart"
3111
+ },
3112
+ {
3113
+ "$ref": "#/$defs/SingleStackedBarChart"
3114
+ },
3115
+ {
3116
+ "$ref": "#/$defs/ScatterChart"
3117
+ },
3118
+ {
3119
+ "$ref": "#/$defs/AreaChart"
3120
+ },
3121
+ {
3122
+ "$ref": "#/$defs/BarChart"
3123
+ },
3124
+ {
3125
+ "$ref": "#/$defs/LineChart"
3126
+ },
3127
+ {
3128
+ "$ref": "#/$defs/Table"
3129
+ },
3130
+ {
3131
+ "$ref": "#/$defs/TagBlock"
3132
+ },
3133
+ {
3134
+ "$ref": "#/$defs/Form"
3135
+ },
3136
+ {
3137
+ "$ref": "#/$defs/Buttons"
3138
+ },
3139
+ {
3140
+ "$ref": "#/$defs/IconButton"
3141
+ },
3142
+ {
3143
+ "$ref": "#/$defs/Steps"
3144
+ },
3145
+ {
3146
+ "$ref": "#/$defs/InlineHeader"
3147
+ },
3148
+ {
3149
+ "$ref": "#/$defs/EntityList"
3150
+ },
3151
+ {
3152
+ "$ref": "#/$defs/EditableTable"
3153
+ },
3154
+ {
3155
+ "$ref": "#/$defs/SnippetCardBlock"
3156
+ },
3157
+ {
3158
+ "$ref": "#/$defs/OverviewCardBlock"
3159
+ },
3160
+ {
3161
+ "$ref": "#/$defs/ContextCardBlock"
3162
+ },
3163
+ {
3164
+ "$ref": "#/$defs/CompositeCardBlock"
3165
+ },
3166
+ {
3167
+ "$ref": "#/$defs/VisualCardBlock"
3168
+ },
3169
+ {
3170
+ "$ref": "#/$defs/ListBlock"
3171
+ },
3172
+ {
3173
+ "$ref": "#/$defs/FollowUpBlock"
3174
+ },
3175
+ {
3176
+ "$ref": "#/$defs/Tabs"
3177
+ },
3178
+ {
3179
+ "$ref": "#/$defs/Accordion"
3180
+ }
3181
+ ]
3182
+ },
3183
+ "type": "array"
3184
+ },
3185
+ "trigger": {
3186
+ "type": "string"
3187
+ },
3188
+ "value": {
3189
+ "type": "string"
3190
+ }
3191
+ },
3192
+ "required": [
3193
+ "value",
3194
+ "trigger",
3195
+ "content"
3196
+ ],
3197
+ "type": "object"
3198
+ },
3199
+ "Select": {
3200
+ "additionalProperties": false,
3201
+ "properties": {
3202
+ "items": {
3203
+ "items": {
3204
+ "$ref": "#/$defs/SelectItem"
3205
+ },
3206
+ "type": "array"
3207
+ },
3208
+ "name": {
3209
+ "type": "string"
3210
+ },
3211
+ "placeholder": {
3212
+ "type": "string"
3213
+ },
3214
+ "rules": {
3215
+ "additionalProperties": false,
3216
+ "properties": {
3217
+ "email": {
3218
+ "type": "boolean"
3219
+ },
3220
+ "max": {
3221
+ "type": "number"
3222
+ },
3223
+ "maxLength": {
3224
+ "type": "number"
3225
+ },
3226
+ "min": {
3227
+ "type": "number"
3228
+ },
3229
+ "minLength": {
3230
+ "type": "number"
3231
+ },
3232
+ "numeric": {
3233
+ "type": "boolean"
3234
+ },
3235
+ "pattern": {
3236
+ "type": "string"
3237
+ },
3238
+ "required": {
3239
+ "type": "boolean"
3240
+ },
3241
+ "url": {
3242
+ "type": "boolean"
3243
+ }
3244
+ },
3245
+ "type": "object"
3246
+ },
3247
+ "size": {
3248
+ "enum": [
3249
+ "small",
3250
+ "medium",
3251
+ "large"
3252
+ ],
3253
+ "type": "string"
3254
+ },
3255
+ "value": {
3256
+ "type": "string"
3257
+ }
3258
+ },
3259
+ "required": [
3260
+ "name",
3261
+ "items"
3262
+ ],
3263
+ "type": "object"
3264
+ },
3265
+ "SelectItem": {
3266
+ "additionalProperties": false,
3267
+ "description": "Option for Select",
3268
+ "properties": {
3269
+ "label": {
3270
+ "type": "string"
3271
+ },
3272
+ "value": {
3273
+ "type": "string"
3274
+ }
3275
+ },
3276
+ "required": [
3277
+ "value",
3278
+ "label"
3279
+ ],
3280
+ "type": "object"
3281
+ },
3282
+ "Separator": {
3283
+ "additionalProperties": false,
3284
+ "description": "Visual divider between content sections",
3285
+ "properties": {
3286
+ "decorative": {
3287
+ "type": "boolean"
3288
+ },
3289
+ "orientation": {
3290
+ "enum": [
3291
+ "horizontal",
3292
+ "vertical"
3293
+ ],
3294
+ "type": "string"
3295
+ }
3296
+ },
3297
+ "type": "object"
3298
+ },
3299
+ "Series": {
3300
+ "additionalProperties": false,
3301
+ "description": "One data series",
3302
+ "properties": {
3303
+ "category": {
3304
+ "type": "string"
3305
+ },
3306
+ "values": {
3307
+ "items": {
3308
+ "type": "number"
3309
+ },
3310
+ "type": "array"
3311
+ }
3312
+ },
3313
+ "required": [
3314
+ "category",
3315
+ "values"
3316
+ ],
3317
+ "type": "object"
3318
+ },
3319
+ "SingleStackedBarChart": {
3320
+ "additionalProperties": false,
3321
+ "description": "Single horizontal stacked bar; use plucked arrays: SingleStackedBarChart(data.categories, data.values)",
3322
+ "properties": {
3323
+ "labels": {
3324
+ "items": {
3325
+ "type": "string"
3326
+ },
3327
+ "type": "array"
3328
+ },
3329
+ "values": {
3330
+ "items": {
3331
+ "type": "number"
3332
+ },
3333
+ "type": "array"
3334
+ }
3335
+ },
3336
+ "required": [
3337
+ "labels",
3338
+ "values"
3339
+ ],
3340
+ "type": "object"
3341
+ },
3342
+ "Slice": {
3343
+ "additionalProperties": false,
3344
+ "description": "One slice with label and numeric value",
3345
+ "properties": {
3346
+ "category": {
3347
+ "type": "string"
3348
+ },
3349
+ "value": {
3350
+ "type": "number"
3351
+ }
3352
+ },
3353
+ "required": [
3354
+ "category",
3355
+ "value"
3356
+ ],
3357
+ "type": "object"
3358
+ },
3359
+ "Slider": {
3360
+ "additionalProperties": false,
3361
+ "description": "Numeric slider input; supports continuous and discrete (stepped) variants",
3362
+ "properties": {
3363
+ "defaultValue": {
3364
+ "items": {
3365
+ "type": "number"
3366
+ },
3367
+ "type": "array"
3368
+ },
3369
+ "label": {
3370
+ "type": "string"
3371
+ },
3372
+ "max": {
3373
+ "type": "number"
3374
+ },
3375
+ "min": {
3376
+ "type": "number"
3377
+ },
3378
+ "name": {
3379
+ "type": "string"
3380
+ },
3381
+ "rules": {
3382
+ "additionalProperties": false,
3383
+ "properties": {
3384
+ "email": {
3385
+ "type": "boolean"
3386
+ },
3387
+ "max": {
3388
+ "type": "number"
3389
+ },
3390
+ "maxLength": {
3391
+ "type": "number"
3392
+ },
3393
+ "min": {
3394
+ "type": "number"
3395
+ },
3396
+ "minLength": {
3397
+ "type": "number"
3398
+ },
3399
+ "numeric": {
3400
+ "type": "boolean"
3401
+ },
3402
+ "pattern": {
3403
+ "type": "string"
3404
+ },
3405
+ "required": {
3406
+ "type": "boolean"
3407
+ },
3408
+ "url": {
3409
+ "type": "boolean"
3410
+ }
3411
+ },
3412
+ "type": "object"
3413
+ },
3414
+ "step": {
3415
+ "type": "number"
3416
+ },
3417
+ "value": {
3418
+ "items": {
3419
+ "type": "number"
3420
+ },
3421
+ "type": "array"
3422
+ },
3423
+ "variant": {
3424
+ "enum": [
3425
+ "continuous",
3426
+ "discrete"
3427
+ ],
3428
+ "type": "string"
3429
+ }
3430
+ },
3431
+ "required": [
3432
+ "name",
3433
+ "variant",
3434
+ "min",
3435
+ "max"
3436
+ ],
3437
+ "type": "object"
3438
+ },
3439
+ "SnippetCardBlock": {
3440
+ "additionalProperties": false,
3441
+ "description": "A responsive grid of compact label/value cards (2 per row) for showing several short facts side by side; optionally clickable with a shared action.",
3442
+ "properties": {
3443
+ "action": {
3444
+ "$ref": "#/$defs/ActionExpression"
3445
+ },
3446
+ "gap": {
3447
+ "anyOf": [
3448
+ {
3449
+ "type": "number"
3450
+ },
3451
+ {
3452
+ "type": "string"
3453
+ }
3454
+ ]
3455
+ },
3456
+ "items": {
3457
+ "items": {
3458
+ "$ref": "#/$defs/SnippetCardItem"
3459
+ },
3460
+ "minItems": 2,
3461
+ "type": "array"
3462
+ },
3463
+ "layout": {
3464
+ "default": "grid",
3465
+ "enum": [
3466
+ "grid"
3467
+ ],
3468
+ "type": "string"
3469
+ },
3470
+ "responsive": {
3471
+ "default": true,
3472
+ "type": "boolean"
3473
+ }
3474
+ },
3475
+ "required": [
3476
+ "items",
3477
+ "layout",
3478
+ "responsive"
3479
+ ],
3480
+ "type": "object"
3481
+ },
3482
+ "SnippetCardItem": {
3483
+ "additionalProperties": false,
3484
+ "description": "One row-style snippet card: a label on the left (IconText or ImageText) and an optional value on the right (Text or BoldText).",
3485
+ "properties": {
3486
+ "id": {
3487
+ "type": "string"
3488
+ },
3489
+ "lhs": {
3490
+ "anyOf": [
3491
+ {
3492
+ "$ref": "#/$defs/IconText"
3493
+ },
3494
+ {
3495
+ "$ref": "#/$defs/ImageText"
3496
+ }
3497
+ ]
3498
+ },
3499
+ "rhs": {
3500
+ "anyOf": [
3501
+ {
3502
+ "$ref": "#/$defs/Text"
3503
+ },
3504
+ {
3505
+ "$ref": "#/$defs/BoldText"
3506
+ }
3507
+ ]
3508
+ }
3509
+ },
3510
+ "required": [
3511
+ "lhs"
3512
+ ],
3513
+ "type": "object"
3514
+ },
3515
+ "Steps": {
3516
+ "additionalProperties": false,
3517
+ "description": "Step-by-step guide",
3518
+ "properties": {
3519
+ "items": {
3520
+ "items": {
3521
+ "$ref": "#/$defs/StepsItem"
3522
+ },
3523
+ "type": "array"
3524
+ }
3525
+ },
3526
+ "required": [
3527
+ "items"
3528
+ ],
3529
+ "type": "object"
3530
+ },
3531
+ "StepsItem": {
3532
+ "additionalProperties": false,
3533
+ "description": "title and details text for one step",
3534
+ "properties": {
3535
+ "details": {
3536
+ "type": "string"
3537
+ },
3538
+ "title": {
3539
+ "type": "string"
3540
+ }
3541
+ },
3542
+ "required": [
3543
+ "title",
3544
+ "details"
3545
+ ],
3546
+ "type": "object"
3547
+ },
3548
+ "SwitchGroup": {
3549
+ "additionalProperties": false,
3550
+ "description": "Group of switch toggles",
3551
+ "properties": {
3552
+ "items": {
3553
+ "items": {
3554
+ "$ref": "#/$defs/SwitchItem"
3555
+ },
3556
+ "type": "array"
3557
+ },
3558
+ "name": {
3559
+ "type": "string"
3560
+ },
3561
+ "value": {
3562
+ "additionalProperties": {
3563
+ "type": "boolean"
3564
+ },
3565
+ "propertyNames": {
3566
+ "type": "string"
3567
+ },
3568
+ "type": "object"
3569
+ },
3570
+ "variant": {
3571
+ "enum": [
3572
+ "clear",
3573
+ "card",
3574
+ "sunk"
3575
+ ],
3576
+ "type": "string"
3577
+ }
3578
+ },
3579
+ "required": [
3580
+ "name",
3581
+ "items"
3582
+ ],
3583
+ "type": "object"
3584
+ },
3585
+ "SwitchItem": {
3586
+ "additionalProperties": false,
3587
+ "description": "Individual switch toggle",
3588
+ "properties": {
3589
+ "defaultChecked": {
3590
+ "type": "boolean"
3591
+ },
3592
+ "description": {
3593
+ "type": "string"
3594
+ },
3595
+ "label": {
3596
+ "type": "string"
3597
+ },
3598
+ "name": {
3599
+ "type": "string"
3600
+ }
3601
+ },
3602
+ "required": [
3603
+ "name"
3604
+ ],
3605
+ "type": "object"
3606
+ },
3607
+ "TabItem": {
3608
+ "additionalProperties": false,
3609
+ "description": "value is unique id, trigger is tab label, content is array of components",
3610
+ "properties": {
3611
+ "content": {
3612
+ "items": {
3613
+ "anyOf": [
3614
+ {
3615
+ "$ref": "#/$defs/TextContent"
3616
+ },
3617
+ {
3618
+ "$ref": "#/$defs/MarkDownRenderer"
3619
+ },
3620
+ {
3621
+ "$ref": "#/$defs/CardHeader"
3622
+ },
3623
+ {
3624
+ "$ref": "#/$defs/Callout"
3625
+ },
3626
+ {
3627
+ "$ref": "#/$defs/TextCallout"
3628
+ },
3629
+ {
3630
+ "$ref": "#/$defs/CodeBlock"
3631
+ },
3632
+ {
3633
+ "$ref": "#/$defs/Image"
3634
+ },
3635
+ {
3636
+ "$ref": "#/$defs/ImageBlock"
3637
+ },
3638
+ {
3639
+ "$ref": "#/$defs/ImageGallery"
3640
+ },
3641
+ {
3642
+ "$ref": "#/$defs/Separator"
3643
+ },
3644
+ {
3645
+ "$ref": "#/$defs/HorizontalBarChart"
3646
+ },
3647
+ {
3648
+ "$ref": "#/$defs/RadarChart"
3649
+ },
3650
+ {
3651
+ "$ref": "#/$defs/PieChart"
3652
+ },
3653
+ {
3654
+ "$ref": "#/$defs/RadialChart"
3655
+ },
3656
+ {
3657
+ "$ref": "#/$defs/SingleStackedBarChart"
3658
+ },
3659
+ {
3660
+ "$ref": "#/$defs/ScatterChart"
3661
+ },
3662
+ {
3663
+ "$ref": "#/$defs/AreaChart"
3664
+ },
3665
+ {
3666
+ "$ref": "#/$defs/BarChart"
3667
+ },
3668
+ {
3669
+ "$ref": "#/$defs/LineChart"
3670
+ },
3671
+ {
3672
+ "$ref": "#/$defs/Table"
3673
+ },
3674
+ {
3675
+ "$ref": "#/$defs/TagBlock"
3676
+ },
3677
+ {
3678
+ "$ref": "#/$defs/Form"
3679
+ },
3680
+ {
3681
+ "$ref": "#/$defs/Buttons"
3682
+ },
3683
+ {
3684
+ "$ref": "#/$defs/IconButton"
3685
+ },
3686
+ {
3687
+ "$ref": "#/$defs/Steps"
3688
+ },
3689
+ {
3690
+ "$ref": "#/$defs/InlineHeader"
3691
+ },
3692
+ {
3693
+ "$ref": "#/$defs/EntityList"
3694
+ },
3695
+ {
3696
+ "$ref": "#/$defs/EditableTable"
3697
+ },
3698
+ {
3699
+ "$ref": "#/$defs/SnippetCardBlock"
3700
+ },
3701
+ {
3702
+ "$ref": "#/$defs/OverviewCardBlock"
3703
+ },
3704
+ {
3705
+ "$ref": "#/$defs/ContextCardBlock"
3706
+ },
3707
+ {
3708
+ "$ref": "#/$defs/CompositeCardBlock"
3709
+ },
3710
+ {
3711
+ "$ref": "#/$defs/VisualCardBlock"
3712
+ },
3713
+ {
3714
+ "$ref": "#/$defs/ListBlock"
3715
+ },
3716
+ {
3717
+ "$ref": "#/$defs/FollowUpBlock"
3718
+ },
3719
+ {
3720
+ "$ref": "#/$defs/Accordion"
3721
+ }
3722
+ ]
3723
+ },
3724
+ "type": "array"
3725
+ },
3726
+ "trigger": {
3727
+ "type": "string"
3728
+ },
3729
+ "value": {
3730
+ "type": "string"
3731
+ }
3732
+ },
3733
+ "required": [
3734
+ "value",
3735
+ "trigger",
3736
+ "content"
3737
+ ],
3738
+ "type": "object"
3739
+ },
3740
+ "Table": {
3741
+ "additionalProperties": false,
3742
+ "description": "Data table — column-oriented. Each Col holds its own data array.",
3743
+ "properties": {
3744
+ "columns": {
3745
+ "items": {
3746
+ "$ref": "#/$defs/Col"
3747
+ },
3748
+ "type": "array"
3749
+ }
3750
+ },
3751
+ "required": [
3752
+ "columns"
3753
+ ],
3754
+ "type": "object"
3755
+ },
3756
+ "Tabs": {
3757
+ "additionalProperties": false,
3758
+ "description": "Tabbed container",
3759
+ "properties": {
3760
+ "items": {
3761
+ "items": {
3762
+ "$ref": "#/$defs/TabItem"
3763
+ },
3764
+ "type": "array"
3765
+ }
3766
+ },
3767
+ "required": [
3768
+ "items"
3769
+ ],
3770
+ "type": "object"
3771
+ },
3772
+ "Tag": {
3773
+ "additionalProperties": false,
3774
+ "description": "Styled tag/badge with optional Icon and variant",
3775
+ "properties": {
3776
+ "icon": {
3777
+ "$ref": "#/$defs/Icon"
3778
+ },
3779
+ "size": {
3780
+ "enum": [
3781
+ "sm",
3782
+ "md",
3783
+ "lg"
3784
+ ],
3785
+ "type": "string"
3786
+ },
3787
+ "text": {
3788
+ "type": "string"
3789
+ },
3790
+ "variant": {
3791
+ "enum": [
3792
+ "neutral",
3793
+ "info",
3794
+ "success",
3795
+ "warning",
3796
+ "danger"
3797
+ ],
3798
+ "type": "string"
3799
+ }
3800
+ },
3801
+ "required": [
3802
+ "text"
3803
+ ],
3804
+ "type": "object"
3805
+ },
3806
+ "TagBlock": {
3807
+ "additionalProperties": false,
3808
+ "description": "tags is an array of strings; optional size sm | md | lg",
3809
+ "properties": {
3810
+ "size": {
3811
+ "enum": [
3812
+ "sm",
3813
+ "md",
3814
+ "lg"
3815
+ ],
3816
+ "type": "string"
3817
+ },
3818
+ "tags": {
3819
+ "items": {
3820
+ "type": "string"
3821
+ },
3822
+ "type": "array"
3823
+ }
3824
+ },
3825
+ "required": [
3826
+ "tags"
3827
+ ],
3828
+ "type": "object"
3829
+ },
3830
+ "Text": {
3831
+ "additionalProperties": false,
3832
+ "description": "Plain text line with optional subtext. variant 'number' uses tabular number styling; subtextVariant 'metric' colors a leading +/- subtext green/red.",
3833
+ "properties": {
3834
+ "size": {
3835
+ "default": "sm",
3836
+ "enum": [
3837
+ "xs",
3838
+ "sm",
3839
+ "md",
3840
+ "lg"
3841
+ ],
3842
+ "type": "string"
3843
+ },
3844
+ "subtext": {
3845
+ "type": "string"
3846
+ },
3847
+ "subtextVariant": {
3848
+ "default": "text",
3849
+ "enum": [
3850
+ "text",
3851
+ "number",
3852
+ "metric"
3853
+ ],
3854
+ "type": "string"
3855
+ },
3856
+ "value": {
3857
+ "type": "string"
3858
+ },
3859
+ "variant": {
3860
+ "default": "text",
3861
+ "enum": [
3862
+ "text",
3863
+ "number"
3864
+ ],
3865
+ "type": "string"
3866
+ }
3867
+ },
3868
+ "required": [
3869
+ "variant",
3870
+ "value",
3871
+ "subtextVariant",
3872
+ "size"
3873
+ ],
3874
+ "type": "object"
3875
+ },
3876
+ "TextArea": {
3877
+ "additionalProperties": false,
3878
+ "properties": {
3879
+ "name": {
3880
+ "type": "string"
3881
+ },
3882
+ "placeholder": {
3883
+ "type": "string"
3884
+ },
3885
+ "rows": {
3886
+ "type": "number"
3887
+ },
3888
+ "rules": {
3889
+ "additionalProperties": false,
3890
+ "properties": {
3891
+ "email": {
3892
+ "type": "boolean"
3893
+ },
3894
+ "max": {
3895
+ "type": "number"
3896
+ },
3897
+ "maxLength": {
3898
+ "type": "number"
3899
+ },
3900
+ "min": {
3901
+ "type": "number"
3902
+ },
3903
+ "minLength": {
3904
+ "type": "number"
3905
+ },
3906
+ "numeric": {
3907
+ "type": "boolean"
3908
+ },
3909
+ "pattern": {
3910
+ "type": "string"
3911
+ },
3912
+ "required": {
3913
+ "type": "boolean"
3914
+ },
3915
+ "url": {
3916
+ "type": "boolean"
3917
+ }
3918
+ },
3919
+ "type": "object"
3920
+ },
3921
+ "value": {
3922
+ "type": "string"
3923
+ }
3924
+ },
3925
+ "required": [
3926
+ "name"
3927
+ ],
3928
+ "type": "object"
3929
+ },
3930
+ "TextCallout": {
3931
+ "additionalProperties": false,
3932
+ "description": "Text callout with variant, title, and description",
3933
+ "properties": {
3934
+ "description": {
3935
+ "type": "string"
3936
+ },
3937
+ "title": {
3938
+ "type": "string"
3939
+ },
3940
+ "variant": {
3941
+ "enum": [
3942
+ "neutral",
3943
+ "info",
3944
+ "warning",
3945
+ "success",
3946
+ "danger"
3947
+ ],
3948
+ "type": "string"
3949
+ }
3950
+ },
3951
+ "type": "object"
3952
+ },
3953
+ "TextContent": {
3954
+ "additionalProperties": false,
3955
+ "description": "Text block. Supports markdown. Optional size: \"small\" | \"default\" | \"large\" | \"small-heavy\" | \"large-heavy\".",
3956
+ "properties": {
3957
+ "size": {
3958
+ "enum": [
3959
+ "small",
3960
+ "default",
3961
+ "large",
3962
+ "small-heavy",
3963
+ "large-heavy"
3964
+ ],
3965
+ "type": "string"
3966
+ },
3967
+ "text": {
3968
+ "type": "string"
3969
+ }
3970
+ },
3971
+ "required": [
3972
+ "text"
3973
+ ],
3974
+ "type": "object"
3975
+ },
3976
+ "VisualCardBlock": {
3977
+ "additionalProperties": false,
3978
+ "description": "A grid or carousel of photo-first cards: a full-bleed background image with a tag on top and a bold text panel at the bottom; an optional action makes every card clickable.",
3979
+ "properties": {
3980
+ "action": {
3981
+ "$ref": "#/$defs/ActionExpression"
3982
+ },
3983
+ "gap": {
3984
+ "anyOf": [
3985
+ {
3986
+ "type": "number"
3987
+ },
3988
+ {
3989
+ "type": "string"
3990
+ }
3991
+ ]
3992
+ },
3993
+ "items": {
3994
+ "items": {
3995
+ "$ref": "#/$defs/VisualCardItem"
3996
+ },
3997
+ "minItems": 2,
3998
+ "type": "array"
3999
+ },
4000
+ "layout": {
4001
+ "default": "grid",
4002
+ "enum": [
4003
+ "grid",
4004
+ "carousel"
4005
+ ],
4006
+ "type": "string"
4007
+ },
4008
+ "responsive": {
4009
+ "default": true,
4010
+ "type": "boolean"
4011
+ }
4012
+ },
4013
+ "required": [
4014
+ "items",
4015
+ "layout",
4016
+ "responsive"
4017
+ ],
4018
+ "type": "object"
4019
+ },
4020
+ "VisualCardItem": {
4021
+ "additionalProperties": false,
4022
+ "description": "A single photo-first card inside a VisualCardBlock: a BoldText body panel, an optional Tag, and a background image (bgImageSrc must be a real URL; bgImageAlt is its alt text).",
4023
+ "properties": {
4024
+ "bgImageAlt": {
4025
+ "type": "string"
4026
+ },
4027
+ "bgImageSrc": {
4028
+ "type": "string"
4029
+ },
4030
+ "body": {
4031
+ "$ref": "#/$defs/BoldText"
4032
+ },
4033
+ "id": {
4034
+ "type": "string"
4035
+ },
4036
+ "tag": {
4037
+ "$ref": "#/$defs/Tag"
4038
+ }
4039
+ },
4040
+ "required": [
4041
+ "body"
4042
+ ],
4043
+ "type": "object"
4044
+ }
4045
+ },
4046
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4047
+ "additionalProperties": false,
4048
+ "properties": {
4049
+ "Accordion": {
4050
+ "$ref": "#/$defs/Accordion"
4051
+ },
4052
+ "AccordionItem": {
4053
+ "$ref": "#/$defs/AccordionItem"
4054
+ },
4055
+ "AreaChart": {
4056
+ "$ref": "#/$defs/AreaChart"
4057
+ },
4058
+ "BarChart": {
4059
+ "$ref": "#/$defs/BarChart"
4060
+ },
4061
+ "BoldText": {
4062
+ "$ref": "#/$defs/BoldText"
4063
+ },
4064
+ "Button": {
4065
+ "$ref": "#/$defs/Button"
4066
+ },
4067
+ "Buttons": {
4068
+ "$ref": "#/$defs/Buttons"
4069
+ },
4070
+ "Callout": {
4071
+ "$ref": "#/$defs/Callout"
4072
+ },
4073
+ "Card": {
4074
+ "$ref": "#/$defs/Card"
4075
+ },
4076
+ "CardHeader": {
4077
+ "$ref": "#/$defs/CardHeader"
4078
+ },
4079
+ "Carousel": {
4080
+ "$ref": "#/$defs/Carousel"
4081
+ },
4082
+ "CheckBoxGroup": {
4083
+ "$ref": "#/$defs/CheckBoxGroup"
4084
+ },
4085
+ "CheckBoxItem": {
4086
+ "$ref": "#/$defs/CheckBoxItem"
4087
+ },
4088
+ "ChipItem": {
4089
+ "$ref": "#/$defs/ChipItem"
4090
+ },
4091
+ "Chips": {
4092
+ "$ref": "#/$defs/Chips"
4093
+ },
4094
+ "CodeBlock": {
4095
+ "$ref": "#/$defs/CodeBlock"
4096
+ },
4097
+ "Col": {
4098
+ "$ref": "#/$defs/Col"
4099
+ },
4100
+ "CompositeCardBlock": {
4101
+ "$ref": "#/$defs/CompositeCardBlock"
4102
+ },
4103
+ "CompositeCardItem": {
4104
+ "$ref": "#/$defs/CompositeCardItem"
4105
+ },
4106
+ "ContextCardBlock": {
4107
+ "$ref": "#/$defs/ContextCardBlock"
4108
+ },
4109
+ "ContextCardItem": {
4110
+ "$ref": "#/$defs/ContextCardItem"
4111
+ },
4112
+ "DatePicker": {
4113
+ "$ref": "#/$defs/DatePicker"
4114
+ },
4115
+ "EditableTable": {
4116
+ "$ref": "#/$defs/EditableTable"
4117
+ },
4118
+ "EntityList": {
4119
+ "$ref": "#/$defs/EntityList"
4120
+ },
4121
+ "FollowUpBlock": {
4122
+ "$ref": "#/$defs/FollowUpBlock"
4123
+ },
4124
+ "FollowUpItem": {
4125
+ "$ref": "#/$defs/FollowUpItem"
4126
+ },
4127
+ "Form": {
4128
+ "$ref": "#/$defs/Form"
4129
+ },
4130
+ "FormControl": {
4131
+ "$ref": "#/$defs/FormControl"
4132
+ },
4133
+ "HorizontalBarChart": {
4134
+ "$ref": "#/$defs/HorizontalBarChart"
4135
+ },
4136
+ "Icon": {
4137
+ "$ref": "#/$defs/Icon"
4138
+ },
4139
+ "IconButton": {
4140
+ "$ref": "#/$defs/IconButton"
4141
+ },
4142
+ "IconText": {
4143
+ "$ref": "#/$defs/IconText"
4144
+ },
4145
+ "Image": {
4146
+ "$ref": "#/$defs/Image"
4147
+ },
4148
+ "ImageBlock": {
4149
+ "$ref": "#/$defs/ImageBlock"
4150
+ },
4151
+ "ImageGallery": {
4152
+ "$ref": "#/$defs/ImageGallery"
4153
+ },
4154
+ "ImageText": {
4155
+ "$ref": "#/$defs/ImageText"
4156
+ },
4157
+ "ImageTextLarge": {
4158
+ "$ref": "#/$defs/ImageTextLarge"
4159
+ },
4160
+ "InlineHeader": {
4161
+ "$ref": "#/$defs/InlineHeader"
4162
+ },
4163
+ "Input": {
4164
+ "$ref": "#/$defs/Input"
4165
+ },
4166
+ "Label": {
4167
+ "$ref": "#/$defs/Label"
4168
+ },
4169
+ "LineChart": {
4170
+ "$ref": "#/$defs/LineChart"
4171
+ },
4172
+ "ListBlock": {
4173
+ "$ref": "#/$defs/ListBlock"
4174
+ },
4175
+ "ListItem": {
4176
+ "$ref": "#/$defs/ListItem"
4177
+ },
4178
+ "MarkDownRenderer": {
4179
+ "$ref": "#/$defs/MarkDownRenderer"
4180
+ },
4181
+ "MetricIndicatorInline": {
4182
+ "$ref": "#/$defs/MetricIndicatorInline"
4183
+ },
4184
+ "MetricIndicatorWithStrikethrough": {
4185
+ "$ref": "#/$defs/MetricIndicatorWithStrikethrough"
4186
+ },
4187
+ "OptionCard": {
4188
+ "$ref": "#/$defs/OptionCard"
4189
+ },
4190
+ "OptionCards": {
4191
+ "$ref": "#/$defs/OptionCards"
4192
+ },
4193
+ "OverviewCardBlock": {
4194
+ "$ref": "#/$defs/OverviewCardBlock"
4195
+ },
4196
+ "OverviewCardItem": {
4197
+ "$ref": "#/$defs/OverviewCardItem"
4198
+ },
4199
+ "PieChart": {
4200
+ "$ref": "#/$defs/PieChart"
4201
+ },
4202
+ "Point": {
4203
+ "$ref": "#/$defs/Point"
4204
+ },
4205
+ "RadarChart": {
4206
+ "$ref": "#/$defs/RadarChart"
4207
+ },
4208
+ "RadialChart": {
4209
+ "$ref": "#/$defs/RadialChart"
4210
+ },
4211
+ "RadioGroup": {
4212
+ "$ref": "#/$defs/RadioGroup"
4213
+ },
4214
+ "RadioItem": {
4215
+ "$ref": "#/$defs/RadioItem"
4216
+ },
4217
+ "ScatterChart": {
4218
+ "$ref": "#/$defs/ScatterChart"
4219
+ },
4220
+ "ScatterSeries": {
4221
+ "$ref": "#/$defs/ScatterSeries"
4222
+ },
4223
+ "SectionBlock": {
4224
+ "$ref": "#/$defs/SectionBlock"
4225
+ },
4226
+ "SectionItem": {
4227
+ "$ref": "#/$defs/SectionItem"
4228
+ },
4229
+ "Select": {
4230
+ "$ref": "#/$defs/Select"
4231
+ },
4232
+ "SelectItem": {
4233
+ "$ref": "#/$defs/SelectItem"
4234
+ },
4235
+ "Separator": {
4236
+ "$ref": "#/$defs/Separator"
4237
+ },
4238
+ "Series": {
4239
+ "$ref": "#/$defs/Series"
4240
+ },
4241
+ "SingleStackedBarChart": {
4242
+ "$ref": "#/$defs/SingleStackedBarChart"
4243
+ },
4244
+ "Slice": {
4245
+ "$ref": "#/$defs/Slice"
4246
+ },
4247
+ "Slider": {
4248
+ "$ref": "#/$defs/Slider"
4249
+ },
4250
+ "SnippetCardBlock": {
4251
+ "$ref": "#/$defs/SnippetCardBlock"
4252
+ },
4253
+ "SnippetCardItem": {
4254
+ "$ref": "#/$defs/SnippetCardItem"
4255
+ },
4256
+ "Steps": {
4257
+ "$ref": "#/$defs/Steps"
4258
+ },
4259
+ "StepsItem": {
4260
+ "$ref": "#/$defs/StepsItem"
4261
+ },
4262
+ "SwitchGroup": {
4263
+ "$ref": "#/$defs/SwitchGroup"
4264
+ },
4265
+ "SwitchItem": {
4266
+ "$ref": "#/$defs/SwitchItem"
4267
+ },
4268
+ "TabItem": {
4269
+ "$ref": "#/$defs/TabItem"
4270
+ },
4271
+ "Table": {
4272
+ "$ref": "#/$defs/Table"
4273
+ },
4274
+ "Tabs": {
4275
+ "$ref": "#/$defs/Tabs"
4276
+ },
4277
+ "Tag": {
4278
+ "$ref": "#/$defs/Tag"
4279
+ },
4280
+ "TagBlock": {
4281
+ "$ref": "#/$defs/TagBlock"
4282
+ },
4283
+ "Text": {
4284
+ "$ref": "#/$defs/Text"
4285
+ },
4286
+ "TextArea": {
4287
+ "$ref": "#/$defs/TextArea"
4288
+ },
4289
+ "TextCallout": {
4290
+ "$ref": "#/$defs/TextCallout"
4291
+ },
4292
+ "TextContent": {
4293
+ "$ref": "#/$defs/TextContent"
4294
+ },
4295
+ "VisualCardBlock": {
4296
+ "$ref": "#/$defs/VisualCardBlock"
4297
+ },
4298
+ "VisualCardItem": {
4299
+ "$ref": "#/$defs/VisualCardItem"
4300
+ }
4301
+ },
4302
+ "required": [
4303
+ "Card",
4304
+ "CardHeader",
4305
+ "TextContent",
4306
+ "MarkDownRenderer",
4307
+ "Callout",
4308
+ "TextCallout",
4309
+ "Image",
4310
+ "ImageBlock",
4311
+ "ImageGallery",
4312
+ "CodeBlock",
4313
+ "Separator",
4314
+ "Table",
4315
+ "Col",
4316
+ "BarChart",
4317
+ "LineChart",
4318
+ "AreaChart",
4319
+ "RadarChart",
4320
+ "HorizontalBarChart",
4321
+ "Series",
4322
+ "PieChart",
4323
+ "RadialChart",
4324
+ "SingleStackedBarChart",
4325
+ "Slice",
4326
+ "ScatterChart",
4327
+ "ScatterSeries",
4328
+ "Point",
4329
+ "Form",
4330
+ "FormControl",
4331
+ "Label",
4332
+ "Input",
4333
+ "TextArea",
4334
+ "Select",
4335
+ "SelectItem",
4336
+ "DatePicker",
4337
+ "Slider",
4338
+ "CheckBoxGroup",
4339
+ "CheckBoxItem",
4340
+ "RadioGroup",
4341
+ "RadioItem",
4342
+ "SwitchGroup",
4343
+ "SwitchItem",
4344
+ "Button",
4345
+ "Buttons",
4346
+ "ListBlock",
4347
+ "ListItem",
4348
+ "FollowUpBlock",
4349
+ "FollowUpItem",
4350
+ "SectionBlock",
4351
+ "SectionItem",
4352
+ "Tabs",
4353
+ "TabItem",
4354
+ "Accordion",
4355
+ "AccordionItem",
4356
+ "Steps",
4357
+ "StepsItem",
4358
+ "Carousel",
4359
+ "TagBlock",
4360
+ "Tag",
4361
+ "EntityList",
4362
+ "InlineHeader",
4363
+ "Icon",
4364
+ "IconButton",
4365
+ "EditableTable",
4366
+ "ChipItem",
4367
+ "Chips",
4368
+ "OptionCard",
4369
+ "OptionCards",
4370
+ "Text",
4371
+ "BoldText",
4372
+ "IconText",
4373
+ "ImageText",
4374
+ "ImageTextLarge",
4375
+ "MetricIndicatorInline",
4376
+ "MetricIndicatorWithStrikethrough",
4377
+ "SnippetCardItem",
4378
+ "SnippetCardBlock",
4379
+ "OverviewCardItem",
4380
+ "OverviewCardBlock",
4381
+ "ContextCardItem",
4382
+ "ContextCardBlock",
4383
+ "CompositeCardItem",
4384
+ "CompositeCardBlock",
4385
+ "VisualCardItem",
4386
+ "VisualCardBlock"
4387
+ ],
4388
+ "type": "object"
4389
+ }
4390
+ }