@exponential-at/ui 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +54 -0
  3. package/README.md +360 -2
  4. package/catalog/a11y.json +668 -0
  5. package/catalog/basic-map.json +104 -0
  6. package/catalog/code.json +58 -0
  7. package/catalog/core.catalog.json +4752 -0
  8. package/catalog/core.schema.json +22667 -0
  9. package/catalog/host.json +64 -0
  10. package/catalog/layout.json +20 -0
  11. package/catalog/limits.json +9 -0
  12. package/catalog/locale.json +48 -0
  13. package/catalog/macros.json +3417 -0
  14. package/catalog/recipes.json +61 -0
  15. package/catalog/strings.json +72 -0
  16. package/catalog/style.json +128 -0
  17. package/catalog/theme.schema.json +42543 -0
  18. package/catalog/tokens.json +47 -0
  19. package/conformance/README.md +217 -0
  20. package/conformance/baseline.ts +101 -0
  21. package/conformance/browser-page.ts +146 -0
  22. package/conformance/browser-suites.ts +683 -0
  23. package/conformance/compare.ts +201 -0
  24. package/conformance/dom.ts +96 -0
  25. package/conformance/dump.ts +163 -0
  26. package/conformance/fonts.json +154 -0
  27. package/conformance/manifest.json +224 -0
  28. package/conformance/parity-compare.ts +191 -0
  29. package/conformance/parity-report.schema.json +73 -0
  30. package/conformance/parity.ts +412 -0
  31. package/conformance/pixel.ts +177 -0
  32. package/conformance/primitives-page.ts +49 -0
  33. package/conformance/report.schema.json +66 -0
  34. package/conformance/run.ts +118 -0
  35. package/dist/chunks/index-98npjvsd.js +3940 -0
  36. package/dist/chunks/index-98npjvsd.js.map +27 -0
  37. package/dist/chunks/index-gwkt14w3.js +7314 -0
  38. package/dist/chunks/index-gwkt14w3.js.map +10 -0
  39. package/dist/chunks/index-njt7yzzm.js +134 -0
  40. package/dist/chunks/index-njt7yzzm.js.map +9 -0
  41. package/dist/chunks/index-we7va6v6.js +7984 -0
  42. package/dist/chunks/index-we7va6v6.js.map +15 -0
  43. package/dist/chunks/index-xrm6f7wc.js +2563 -0
  44. package/dist/chunks/index-xrm6f7wc.js.map +10 -0
  45. package/dist/conformance.js +182749 -0
  46. package/dist/conformance.js.map +10 -0
  47. package/dist/entries/prompt.js +251 -0
  48. package/dist/entries/prompt.js.map +11 -0
  49. package/dist/entries/schema.js +1725 -0
  50. package/dist/entries/schema.js.map +11 -0
  51. package/dist/host/index.js +122 -0
  52. package/dist/host/index.js.map +9 -0
  53. package/dist/index.js +3213 -0
  54. package/dist/index.js.map +27 -0
  55. package/dist/types/src/a11y.d.ts +21 -0
  56. package/dist/types/src/animation.d.ts +76 -0
  57. package/dist/types/src/basic-map.d.ts +38 -0
  58. package/dist/types/src/builder.d.ts +50 -0
  59. package/dist/types/src/catalog.d.ts +54 -0
  60. package/dist/types/src/catalog.described.d.ts +33 -0
  61. package/dist/types/src/catalog.generated.d.ts +829 -0
  62. package/dist/types/src/chart.d.ts +46 -0
  63. package/dist/types/src/code.d.ts +44 -0
  64. package/dist/types/src/color.d.ts +20 -0
  65. package/dist/types/src/conformance.d.ts +39 -0
  66. package/dist/types/src/connector/app.d.ts +14 -0
  67. package/dist/types/src/connector/connector.d.ts +77 -0
  68. package/dist/types/src/connector/index.d.ts +4 -0
  69. package/dist/types/src/css.d.ts +29 -0
  70. package/dist/types/src/define.d.ts +66 -0
  71. package/dist/types/src/direction.d.ts +16 -0
  72. package/dist/types/src/dynamic.d.ts +159 -0
  73. package/dist/types/src/entries/prompt.d.ts +11 -0
  74. package/dist/types/src/entries/schema.d.ts +8 -0
  75. package/dist/types/src/expr.d.ts +71 -0
  76. package/dist/types/src/extension.d.ts +4 -0
  77. package/dist/types/src/format.d.ts +112 -0
  78. package/dist/types/src/geometry.d.ts +40 -0
  79. package/dist/types/src/host/contract.d.ts +188 -0
  80. package/dist/types/src/host/decoders.d.ts +61 -0
  81. package/dist/types/src/host/index.d.ts +11 -0
  82. package/dist/types/src/host/package.d.ts +58 -0
  83. package/dist/types/src/host/policy.d.ts +105 -0
  84. package/dist/types/src/host/router.d.ts +34 -0
  85. package/dist/types/src/host/runtime.d.ts +205 -0
  86. package/dist/types/src/host/sources.d.ts +15 -0
  87. package/dist/types/src/host/transports.d.ts +109 -0
  88. package/dist/types/src/index.d.ts +63 -0
  89. package/dist/types/src/layout.d.ts +20 -0
  90. package/dist/types/src/limits.d.ts +21 -0
  91. package/dist/types/src/list.d.ts +133 -0
  92. package/dist/types/src/locale.d.ts +22 -0
  93. package/dist/types/src/macros.d.ts +29 -0
  94. package/dist/types/src/overlay.d.ts +27 -0
  95. package/dist/types/src/prompt.d.ts +44 -0
  96. package/dist/types/src/recipes.d.ts +17 -0
  97. package/dist/types/src/reducer.d.ts +41 -0
  98. package/dist/types/src/resizable.d.ts +38 -0
  99. package/dist/types/src/schema.d.ts +7 -0
  100. package/dist/types/src/strings.d.ts +13 -0
  101. package/dist/types/src/style.d.ts +201 -0
  102. package/dist/types/src/test-preload.d.ts +1 -0
  103. package/dist/types/src/text-shimmer.d.ts +24 -0
  104. package/dist/types/src/theme-types.d.ts +162 -0
  105. package/dist/types/src/theme.d.ts +73 -0
  106. package/dist/types/src/themes.d.ts +22 -0
  107. package/dist/types/src/tree-guides.d.ts +17 -0
  108. package/dist/types/src/types.d.ts +314 -0
  109. package/dist/types/src/validate.d.ts +31 -0
  110. package/dist/types/src/web/base-css.d.ts +1 -0
  111. package/dist/types/src/web/box-css.d.ts +55 -0
  112. package/dist/types/src/web/coerce.d.ts +32 -0
  113. package/dist/types/src/web/data.d.ts +105 -0
  114. package/dist/types/src/web/dates.d.ts +12 -0
  115. package/dist/types/src/web/form.d.ts +44 -0
  116. package/dist/types/src/web/host-types.d.ts +119 -0
  117. package/dist/types/src/web/index.d.ts +28 -0
  118. package/dist/types/src/web/inputs.d.ts +55 -0
  119. package/dist/types/src/web/list.d.ts +13 -0
  120. package/dist/types/src/web/listbox.d.ts +14 -0
  121. package/dist/types/src/web/markdown.d.ts +96 -0
  122. package/dist/types/src/web/media.d.ts +62 -0
  123. package/dist/types/src/web/parts.d.ts +4 -0
  124. package/dist/types/src/web/primitives/alert-dialog.d.ts +10 -0
  125. package/dist/types/src/web/primitives/alert.d.ts +9 -0
  126. package/dist/types/src/web/primitives/avatar-color.d.ts +2 -0
  127. package/dist/types/src/web/primitives/avatar.d.ts +13 -0
  128. package/dist/types/src/web/primitives/badge.d.ts +10 -0
  129. package/dist/types/src/web/primitives/breadcrumb.d.ts +10 -0
  130. package/dist/types/src/web/primitives/button.d.ts +6 -0
  131. package/dist/types/src/web/primitives/calendar.d.ts +43 -0
  132. package/dist/types/src/web/primitives/card.d.ts +9 -0
  133. package/dist/types/src/web/primitives/checkbox.d.ts +5 -0
  134. package/dist/types/src/web/primitives/choice-tiles.d.ts +32 -0
  135. package/dist/types/src/web/primitives/cn.d.ts +3 -0
  136. package/dist/types/src/web/primitives/code-block.d.ts +24 -0
  137. package/dist/types/src/web/primitives/command.d.ts +134 -0
  138. package/dist/types/src/web/primitives/context-ring.d.ts +24 -0
  139. package/dist/types/src/web/primitives/dialog-arms.d.ts +6 -0
  140. package/dist/types/src/web/primitives/dialog.d.ts +24 -0
  141. package/dist/types/src/web/primitives/disclosure-header.d.ts +5 -0
  142. package/dist/types/src/web/primitives/dock.d.ts +42 -0
  143. package/dist/types/src/web/primitives/dropdown-menu.d.ts +14 -0
  144. package/dist/types/src/web/primitives/empty-state.d.ts +15 -0
  145. package/dist/types/src/web/primitives/glass-card.d.ts +4 -0
  146. package/dist/types/src/web/primitives/hover-card.d.ts +7 -0
  147. package/dist/types/src/web/primitives/icon-disc.d.ts +12 -0
  148. package/dist/types/src/web/primitives/index.d.ts +48 -0
  149. package/dist/types/src/web/primitives/input.d.ts +5 -0
  150. package/dist/types/src/web/primitives/kbd.d.ts +4 -0
  151. package/dist/types/src/web/primitives/label.d.ts +3 -0
  152. package/dist/types/src/web/primitives/menu-surface.d.ts +17 -0
  153. package/dist/types/src/web/primitives/meter.d.ts +21 -0
  154. package/dist/types/src/web/primitives/popover.d.ts +3 -0
  155. package/dist/types/src/web/primitives/progress-ring.d.ts +5 -0
  156. package/dist/types/src/web/primitives/progress.d.ts +8 -0
  157. package/dist/types/src/web/primitives/scroll-area.d.ts +49 -0
  158. package/dist/types/src/web/primitives/segmented-control.d.ts +5 -0
  159. package/dist/types/src/web/primitives/select.d.ts +47 -0
  160. package/dist/types/src/web/primitives/separator.d.ts +3 -0
  161. package/dist/types/src/web/primitives/sheet-chrome.d.ts +4 -0
  162. package/dist/types/src/web/primitives/sheet.d.ts +20 -0
  163. package/dist/types/src/web/primitives/skeleton.d.ts +3 -0
  164. package/dist/types/src/web/primitives/spinner.d.ts +3 -0
  165. package/dist/types/src/web/primitives/switch.d.ts +4 -0
  166. package/dist/types/src/web/primitives/table.d.ts +11 -0
  167. package/dist/types/src/web/primitives/tabs.d.ts +13 -0
  168. package/dist/types/src/web/primitives/textarea.d.ts +3 -0
  169. package/dist/types/src/web/primitives/toast.d.ts +163 -0
  170. package/dist/types/src/web/primitives/tooltip.d.ts +3 -0
  171. package/dist/types/src/web/primitives/truncate.d.ts +7 -0
  172. package/dist/types/src/web/primitives/typeahead-portal.d.ts +12 -0
  173. package/dist/types/src/web/share.d.ts +6 -0
  174. package/dist/types/src/web/table.d.ts +20 -0
  175. package/dist/types/src/web/theme-css.d.ts +69 -0
  176. package/dist/types/src/web/urls.d.ts +21 -0
  177. package/dist/web/index.js +2303 -0
  178. package/dist/web/index.js.map +26 -0
  179. package/dist/web/primitives/index.js +1450 -0
  180. package/dist/web/primitives/index.js.map +57 -0
  181. package/docs/components.generated.json +6238 -0
  182. package/docs/round-1-contract.md +679 -0
  183. package/docs/round-2-contract.md +476 -0
  184. package/docs/round-3-contract.md +174 -0
  185. package/docs/themes.generated.json +3503 -0
  186. package/fixtures/animations.json +2890 -0
  187. package/fixtures/bench-list.json +58 -0
  188. package/fixtures/bind-time.json +30664 -0
  189. package/fixtures/catalog-basic-map.json +1692 -0
  190. package/fixtures/catalog-components.json +9323 -0
  191. package/fixtures/catalog-extension.json +620 -0
  192. package/fixtures/catalog-macros.json +36370 -0
  193. package/fixtures/code-tokens.json +1993 -0
  194. package/fixtures/conformance-baseline.json +55544 -0
  195. package/fixtures/conformance-cases.json +49 -0
  196. package/fixtures/conformance-known.json +2123 -0
  197. package/fixtures/control-geometry.json +4200 -0
  198. package/fixtures/dashboard.data.json +74 -0
  199. package/fixtures/dashboard.json +752 -0
  200. package/fixtures/demo-surface.json +47 -0
  201. package/fixtures/format.json +870 -0
  202. package/fixtures/host-policy.json +1067 -0
  203. package/fixtures/host-router.json +1152 -0
  204. package/fixtures/host-transport.json +590 -0
  205. package/fixtures/interactions-round1.json +773 -0
  206. package/fixtures/kitchen-sink.expanded.json +10844 -0
  207. package/fixtures/kitchen-sink.json +3049 -0
  208. package/fixtures/layout-geometry-round1.json +7278 -0
  209. package/fixtures/layout-geometry.json +2072 -0
  210. package/fixtures/overlay-geometry.json +272 -0
  211. package/fixtures/primitive-specimens.json +58 -0
  212. package/fixtures/prompt-budget.json +33 -0
  213. package/fixtures/resizable.json +714 -0
  214. package/fixtures/round4-contract.json +2985 -0
  215. package/fixtures/specimens.json +9832 -0
  216. package/fixtures/style-conditions.json +336 -0
  217. package/fixtures/template-items.json +2215 -0
  218. package/fixtures/text-direction.json +309 -0
  219. package/fixtures/text-shimmer.json +96 -0
  220. package/fixtures/theme-extends.json +573 -0
  221. package/fixtures/theme-invalid.json +1296 -0
  222. package/fixtures/theme-recipes.json +58600 -0
  223. package/fixtures/theme-resolved.json +23949 -0
  224. package/fixtures/toast-stack.json +215 -0
  225. package/fixtures/tree-guides.json +224 -0
  226. package/fixtures/virtual-list.json +733 -0
  227. package/generated/ExponentialUICatalog.generated.kt +67 -0
  228. package/generated/ExponentialUICatalog.generated.swift +67 -0
  229. package/generated/ExponentialUIThemes.generated.kt +23 -0
  230. package/generated/ExponentialUIThemes.generated.swift +23 -0
  231. package/generated/catalog.descriptions.generated.rs +6 -0
  232. package/generated/catalog.generated.rs +80 -0
  233. package/generated/catalog.themes.generated.rs +34 -0
  234. package/generated/core.descriptions.json +2505 -0
  235. package/generated/core.runtime.json +3609 -0
  236. package/package.json +87 -4
  237. package/themes/exponential.recipes.json +49 -0
  238. package/themes/exponential.theme.json +755 -0
  239. package/themes/neutral.theme.json +5676 -0
  240. package/themes/orange.theme.json +43 -0
  241. package/themes/playful.theme.json +219 -0
  242. package/vendor/a2ui/LICENSE.txt +203 -0
  243. package/vendor/a2ui/README.md +27 -0
  244. package/vendor/a2ui/v0_9/basic_catalog.json +1387 -0
  245. package/vendor/a2ui/v0_9/basic_catalog_rules.txt +5 -0
  246. package/vendor/a2ui/v0_9/client_capabilities.json +97 -0
  247. package/vendor/a2ui/v0_9/client_to_server.json +104 -0
  248. package/vendor/a2ui/v0_9/common_types.json +315 -0
  249. package/vendor/a2ui/v0_9/server_to_client.json +132 -0
  250. package/vendor/json-render/LICENSE.txt +201 -0
  251. package/vendor/json-render/README.md +13 -0
@@ -0,0 +1,4752 @@
1
+ {
2
+ "$comment": "VAPP-85: THE source of the Exponential UI core catalog. Everything else is generated from it (core.schema.json, src/catalog.generated.ts, the Swift/Kotlin/Rust constants, docs/components.generated.json, fixtures/catalog-components.json). Canonical names = shadcn's; the A2UI basic catalog maps onto them (basic-map.json). `kind`: `native` = a renderer paints it, `macro` = macros.json expands it into natives before painting. `lite`: the core-lite subset (the app-shaped vocabulary: no overlays, media, Chart, data tables or the rarer controls) for small prompts. Round 3 (VAPP-102, docs/round-3-contract.md) folded the app vocabulary onto Row, Section, Chip, Segmented and Menu; round 4 (VAPP-103) REMOVED the old names: there are no aliases: an old name reduces to the `unknownComponent` placeholder with an `unknown component <name>` issue. `children`: none | one | many; `slots` = named child slots. Prop `type`: string | markdown | number | boolean | enum (`enum` names a shared list) | icon (an icons.json name) | color (a `$color.*` token ONLY: a literal `#hex`/`rgb()` in a node is refused so light and dark themes both apply; themes keep literals) | style (a Box style object) | array (`items`) | object (`shape` names a `defs` entry) | date (ISO yyyy-mm-dd) | url. `bindable` props take an A2UI data binding `{path}` or function call instead of a literal. Round 1 (docs/round-1-contract.md): `responsive` props ALSO take `{base, sm?, md?, lg?, xl?}` keyed by the `$breakpoint` token names (on a macro the expander turns them into `@media (min-width: $breakpoint.<bp>)` blocks; on a native the RENDERER picks the value of the active breakpoint, src/macros.ts responsiveAt + src/style.ts activeBreakpoint); EVERY component takes the common `visible` (a boolean or a binding; false = not rendered, no layout), `style` and `accessibility`; `slots: [\"*\"]` = any slot name (Table cell templates); a string default or value of the form `$string.<id>` is a built-in UI string (catalog/strings.json) the renderer shows in the surface locale; `object` props without a `shape` take any object. Descriptions are MODEL-FACING: one sentence, what and when. Variant/size LOOKS come from the theme's recipes (VAPP-92), never from here. EXP-1259 (the UI batch) adds the low-level feedback and search pieces the app settled on: `SearchList`, Spinner `xs`, Button `pendingLabel`, Skeleton rows, Tabs `closable`/`addable`, searchable Menu submenus.",
3
+ "id": "https://ui.exponential.at/catalogs/core/v1",
4
+ "liteId": "https://ui.exponential.at/catalogs/core-lite/v1",
5
+ "name": "Exponential UI core",
6
+ "version": "1",
7
+ "unknownComponent": "Unknown",
8
+ "enums": {
9
+ "variant": [
10
+ "default",
11
+ "secondary",
12
+ "outline",
13
+ "ghost",
14
+ "destructive",
15
+ "link"
16
+ ],
17
+ "size": [
18
+ "sm",
19
+ "default",
20
+ "lg",
21
+ "icon"
22
+ ],
23
+ "tone": [
24
+ "neutral",
25
+ "primary",
26
+ "success",
27
+ "warning",
28
+ "danger",
29
+ "info"
30
+ ],
31
+ "gap": [
32
+ "none",
33
+ "xs",
34
+ "sm",
35
+ "md",
36
+ "lg",
37
+ "xl"
38
+ ],
39
+ "align": [
40
+ "start",
41
+ "center",
42
+ "end",
43
+ "stretch"
44
+ ],
45
+ "justify": [
46
+ "start",
47
+ "center",
48
+ "end",
49
+ "between",
50
+ "around",
51
+ "evenly"
52
+ ],
53
+ "textVariant": [
54
+ "body",
55
+ "caption",
56
+ "muted",
57
+ "lead",
58
+ "code",
59
+ "label",
60
+ "title"
61
+ ],
62
+ "headingLevel": [
63
+ "h1",
64
+ "h2",
65
+ "h3",
66
+ "h4"
67
+ ],
68
+ "imageFit": [
69
+ "contain",
70
+ "cover",
71
+ "fill",
72
+ "none",
73
+ "scaleDown"
74
+ ],
75
+ "orientation": [
76
+ "horizontal",
77
+ "vertical"
78
+ ],
79
+ "side": [
80
+ "top",
81
+ "right",
82
+ "bottom",
83
+ "left"
84
+ ],
85
+ "inputType": [
86
+ "text",
87
+ "email",
88
+ "password",
89
+ "number",
90
+ "search",
91
+ "url",
92
+ "tel"
93
+ ],
94
+ "validateOn": [
95
+ "change",
96
+ "blur",
97
+ "submit"
98
+ ],
99
+ "alertType": [
100
+ "info",
101
+ "success",
102
+ "warning",
103
+ "error"
104
+ ],
105
+ "controlSize": [
106
+ "sm",
107
+ "default",
108
+ "lg"
109
+ ],
110
+ "spinnerSize": [
111
+ "xs",
112
+ "sm",
113
+ "default",
114
+ "lg"
115
+ ],
116
+ "tabClosable": [
117
+ "none",
118
+ "hover",
119
+ "always"
120
+ ],
121
+ "groupType": [
122
+ "single",
123
+ "multiple"
124
+ ],
125
+ "rowChevron": [
126
+ "none",
127
+ "right",
128
+ "selector"
129
+ ],
130
+ "rowSurface": [
131
+ "flat",
132
+ "card"
133
+ ],
134
+ "chipShape": [
135
+ "pill",
136
+ "rect"
137
+ ],
138
+ "density": [
139
+ "default",
140
+ "compact"
141
+ ],
142
+ "listDirection": [
143
+ "vertical",
144
+ "horizontal"
145
+ ],
146
+ "chartKind": [
147
+ "bar",
148
+ "stackedBar",
149
+ "line",
150
+ "area",
151
+ "pie",
152
+ "donut",
153
+ "sparkline"
154
+ ],
155
+ "segmentedVariant": [
156
+ "segmented",
157
+ "toggles",
158
+ "outline",
159
+ "bar"
160
+ ],
161
+ "liveTone": [
162
+ "live",
163
+ "attention",
164
+ "done",
165
+ "unread",
166
+ "idle",
167
+ "muted"
168
+ ],
169
+ "menuItemKind": [
170
+ "item",
171
+ "checkbox",
172
+ "separator",
173
+ "label",
174
+ "submenu"
175
+ ],
176
+ "openOn": [
177
+ "press",
178
+ "hover"
179
+ ],
180
+ "menuOpenOn": [
181
+ "press",
182
+ "contextmenu"
183
+ ],
184
+ "live": [
185
+ "off",
186
+ "polite",
187
+ "assertive"
188
+ ],
189
+ "selectable": [
190
+ "none",
191
+ "single",
192
+ "multiple"
193
+ ],
194
+ "cellType": [
195
+ "text",
196
+ "number",
197
+ "date",
198
+ "boolean",
199
+ "badge",
200
+ "slot",
201
+ "currency",
202
+ "percent",
203
+ "relativeTime"
204
+ ],
205
+ "sortDirection": [
206
+ "asc",
207
+ "desc"
208
+ ],
209
+ "imageLoading": [
210
+ "lazy",
211
+ "eager"
212
+ ],
213
+ "scrollDirection": [
214
+ "vertical",
215
+ "horizontal",
216
+ "both"
217
+ ],
218
+ "collapseBelow": [
219
+ "never",
220
+ "sm",
221
+ "md",
222
+ "lg",
223
+ "xl"
224
+ ],
225
+ "codeLanguage": [
226
+ "plain",
227
+ "json",
228
+ "js",
229
+ "ts",
230
+ "tsx",
231
+ "rust",
232
+ "swift",
233
+ "kotlin",
234
+ "python",
235
+ "bash",
236
+ "html",
237
+ "css",
238
+ "sql",
239
+ "yaml",
240
+ "markdown",
241
+ "ansi"
242
+ ],
243
+ "codeToken": [
244
+ "plain",
245
+ "keyword",
246
+ "string",
247
+ "number",
248
+ "comment",
249
+ "punctuation",
250
+ "operator",
251
+ "type",
252
+ "function",
253
+ "property",
254
+ "tag",
255
+ "attribute",
256
+ "success",
257
+ "warning",
258
+ "error"
259
+ ],
260
+ "codeBlockVariant": [
261
+ "default",
262
+ "destructive"
263
+ ],
264
+ "codeBlockSize": [
265
+ "default",
266
+ "sm"
267
+ ],
268
+ "traceStatus": [
269
+ "running",
270
+ "error",
271
+ "pending"
272
+ ],
273
+ "traceSize": [
274
+ "default",
275
+ "sm"
276
+ ]
277
+ },
278
+ "defs": {
279
+ "option": {
280
+ "description": "One selectable option.",
281
+ "properties": {
282
+ "label": {
283
+ "type": "string",
284
+ "required": true,
285
+ "bindable": true,
286
+ "description": "The text shown for the option."
287
+ },
288
+ "value": {
289
+ "type": "string",
290
+ "required": true,
291
+ "description": "The stable value the selection reports."
292
+ },
293
+ "icon": {
294
+ "type": "icon",
295
+ "description": "An icon shown before the label."
296
+ },
297
+ "disabled": {
298
+ "type": "boolean",
299
+ "description": "Shows the option but refuses it."
300
+ },
301
+ "description": {
302
+ "type": "string",
303
+ "description": "A second line."
304
+ },
305
+ "image": {
306
+ "type": "url",
307
+ "description": "A tile picture."
308
+ }
309
+ }
310
+ },
311
+ "check": {
312
+ "description": "A client-side validation rule.",
313
+ "properties": {
314
+ "condition": {
315
+ "type": "boolean",
316
+ "required": true,
317
+ "bindable": true,
318
+ "description": "A function call or binding that must be true for the input to be valid."
319
+ },
320
+ "message": {
321
+ "type": "string",
322
+ "required": true,
323
+ "description": "The error shown when the condition is false."
324
+ }
325
+ }
326
+ },
327
+ "tab": {
328
+ "description": "One tab header.",
329
+ "properties": {
330
+ "label": {
331
+ "type": "string",
332
+ "required": true,
333
+ "bindable": true,
334
+ "description": "The tab title."
335
+ },
336
+ "value": {
337
+ "type": "string",
338
+ "required": true,
339
+ "description": "The value reported when the tab is active."
340
+ },
341
+ "icon": {
342
+ "type": "icon",
343
+ "description": "An icon before the title."
344
+ },
345
+ "count": {
346
+ "type": "number",
347
+ "description": "A count badge after the title."
348
+ }
349
+ }
350
+ },
351
+ "menuItem": {
352
+ "description": "One menu entry: an action, a checkbox, a separator, a group label or a submenu.",
353
+ "properties": {
354
+ "label": {
355
+ "type": "string",
356
+ "description": "The entry text (a separator has none)."
357
+ },
358
+ "value": {
359
+ "type": "string",
360
+ "description": "The value reported on select (actions and checkboxes)."
361
+ },
362
+ "kind": {
363
+ "type": "enum",
364
+ "enum": "menuItemKind",
365
+ "default": "item",
366
+ "description": "What the entry is."
367
+ },
368
+ "icon": {
369
+ "type": "icon",
370
+ "description": "An icon before the text."
371
+ },
372
+ "shortcut": {
373
+ "type": "string",
374
+ "description": "A key-cap hint after the text (`⌘K`)."
375
+ },
376
+ "checked": {
377
+ "type": "boolean",
378
+ "bindable": true,
379
+ "description": "A checkbox entry's state; bind it."
380
+ },
381
+ "destructive": {
382
+ "type": "boolean",
383
+ "description": "Styles the entry as a destructive action."
384
+ },
385
+ "disabled": {
386
+ "type": "boolean",
387
+ "description": "Shows the entry greyed and inert."
388
+ },
389
+ "items": {
390
+ "type": "array",
391
+ "items": {
392
+ "type": "object",
393
+ "shape": "menuItem"
394
+ },
395
+ "bindable": true,
396
+ "description": "A submenu's entries (one level deep); bind it to rows a host source feeds (statuses, members, labels)."
397
+ },
398
+ "searchable": {
399
+ "type": "boolean",
400
+ "description": "Filters the submenu in a search list."
401
+ },
402
+ "placeholder": {
403
+ "type": "string",
404
+ "description": "A searchable submenu's placeholder."
405
+ }
406
+ }
407
+ },
408
+ "searchItem": {
409
+ "description": "One row of a search list.",
410
+ "properties": {
411
+ "label": {
412
+ "type": "string",
413
+ "required": true,
414
+ "bindable": true,
415
+ "description": "The row title."
416
+ },
417
+ "value": {
418
+ "type": "string",
419
+ "required": true,
420
+ "description": "The value a pick reports."
421
+ },
422
+ "icon": {
423
+ "type": "icon",
424
+ "description": "A leading glyph."
425
+ },
426
+ "identifier": {
427
+ "type": "string",
428
+ "description": "A mono id before the title (`EXP-12`)."
429
+ },
430
+ "disabled": {
431
+ "type": "boolean",
432
+ "description": "Refuses the row."
433
+ }
434
+ }
435
+ },
436
+ "accordionItem": {
437
+ "description": "One collapsible section header; its body is the child at the same index.",
438
+ "properties": {
439
+ "title": {
440
+ "type": "string",
441
+ "required": true,
442
+ "bindable": true,
443
+ "description": "The section title."
444
+ },
445
+ "value": {
446
+ "type": "string",
447
+ "required": true,
448
+ "description": "The value reported when the section is open."
449
+ },
450
+ "count": {
451
+ "type": "number",
452
+ "description": "A count shown in the header."
453
+ }
454
+ }
455
+ },
456
+ "segment": {
457
+ "description": "One slice of a meter.",
458
+ "properties": {
459
+ "value": {
460
+ "type": "number",
461
+ "required": true,
462
+ "description": "The slice's share of max."
463
+ },
464
+ "tone": {
465
+ "type": "enum",
466
+ "enum": "tone",
467
+ "description": "The slice's colour tone."
468
+ },
469
+ "label": {
470
+ "type": "string",
471
+ "description": "What the slice stands for."
472
+ }
473
+ }
474
+ },
475
+ "series": {
476
+ "description": "One chart series.",
477
+ "properties": {
478
+ "name": {
479
+ "type": "string",
480
+ "required": true,
481
+ "description": "The legend label."
482
+ },
483
+ "values": {
484
+ "type": "array",
485
+ "items": {
486
+ "type": "number"
487
+ },
488
+ "required": true,
489
+ "description": "One number per category."
490
+ },
491
+ "tone": {
492
+ "type": "enum",
493
+ "enum": "tone",
494
+ "description": "The series' colour tone; charts default to the chart hues in order."
495
+ }
496
+ }
497
+ },
498
+ "pageItem": {
499
+ "description": "One page of a carousel.",
500
+ "properties": {
501
+ "title": {
502
+ "type": "string",
503
+ "description": "A caption over the page."
504
+ }
505
+ }
506
+ },
507
+ "step": {
508
+ "description": "One wizard step.",
509
+ "properties": {
510
+ "label": {
511
+ "type": "string",
512
+ "required": true,
513
+ "description": "The step name."
514
+ },
515
+ "description": {
516
+ "type": "string",
517
+ "description": "A muted line under the name."
518
+ }
519
+ }
520
+ },
521
+ "column": {
522
+ "description": "One table column.",
523
+ "properties": {
524
+ "key": {
525
+ "type": "string",
526
+ "required": true,
527
+ "description": "The row field it shows."
528
+ },
529
+ "label": {
530
+ "type": "string",
531
+ "required": true,
532
+ "description": "The header text."
533
+ },
534
+ "type": {
535
+ "type": "enum",
536
+ "enum": "cellType",
537
+ "default": "text",
538
+ "description": "How cells render: text, a locale number/currency/percent, a date, a relative time, a tick, a badge, or the named slot's component once per row."
539
+ },
540
+ "slot": {
541
+ "type": "string",
542
+ "description": "For `type: slot`: the Table slot whose component renders each cell with the row as its data scope."
543
+ },
544
+ "width": {
545
+ "type": "number",
546
+ "description": "A fixed width in px; otherwise columns share the width."
547
+ },
548
+ "align": {
549
+ "type": "enum",
550
+ "values": [
551
+ "start",
552
+ "center",
553
+ "end"
554
+ ],
555
+ "default": "start",
556
+ "description": "Cell alignment (numbers read best at `end`)."
557
+ },
558
+ "sortable": {
559
+ "type": "boolean",
560
+ "default": false,
561
+ "description": "Lets the header toggle the sort."
562
+ },
563
+ "currency": {
564
+ "type": "string",
565
+ "description": "ISO 4217 code of a currency column (USD)."
566
+ },
567
+ "decimals": {
568
+ "type": "number",
569
+ "description": "Fixed fraction digits of a number, currency or percent column."
570
+ }
571
+ }
572
+ },
573
+ "sort": {
574
+ "description": "A table sort.",
575
+ "properties": {
576
+ "key": {
577
+ "type": "string",
578
+ "required": true,
579
+ "description": "The sorted column's key."
580
+ },
581
+ "direction": {
582
+ "type": "enum",
583
+ "enum": "sortDirection",
584
+ "required": true,
585
+ "description": "Ascending or descending."
586
+ }
587
+ }
588
+ },
589
+ "panel": {
590
+ "description": "One Resizable panel's limits, percent of the group.",
591
+ "properties": {
592
+ "min": {
593
+ "type": "number",
594
+ "description": "Smallest size (10)."
595
+ },
596
+ "max": {
597
+ "type": "number",
598
+ "description": "Largest size (100)."
599
+ },
600
+ "collapsible": {
601
+ "type": "boolean",
602
+ "description": "Drags to 0 below half its min; Enter on the handle toggles."
603
+ }
604
+ }
605
+ },
606
+ "file": {
607
+ "description": "One attached file.",
608
+ "properties": {
609
+ "name": {
610
+ "type": "string",
611
+ "required": true,
612
+ "description": "The file name."
613
+ },
614
+ "size": {
615
+ "type": "number",
616
+ "description": "Bytes."
617
+ },
618
+ "type": {
619
+ "type": "string",
620
+ "description": "The MIME type."
621
+ },
622
+ "url": {
623
+ "type": "url",
624
+ "description": "Where it was stored, for a preview link."
625
+ }
626
+ }
627
+ }
628
+ },
629
+ "functions": {
630
+ "$comment": "The core catalog exposes the A2UI basic catalog's 14 client-side functions, same names and arguments (vendor/a2ui/v0_9/basic_catalog.json#/functions; a basic surface calls them unchanged; the format* functions format in the SURFACE locale, docs/round-1-contract.md §4), plus the 15 CORE functions of round 1 (and round 4's `filter`) (`core` below: named args, what they return) so a macro whose input is a data binding expands into a value the renderer computes at bind time (docs/round-1-contract.md §1; the expander emits them, an author may call them too). Round 2 (docs/round-2-contract.md §3): `formatPercent` and `formatRelativeTime` join them, and EVERY format function (the basic formatNumber/formatCurrency/formatDate/pluralize too) runs through the surface's host-supplied Formatter (locale + timeZone from SurfaceSettings; the English fallback = Intl en-US). Truthiness everywhere = src/expr.ts `truthy`: undefined, null, false and \"\" are false, 0 is TRUE. Arguments are resolved at ANY depth (an array or object argument may hold bindings and calls). `basic` = the basic functions' signatures (vendor/a2ui, flattened) so the prompt lists every function with its arguments. `set` is the one ACTION function: in an Action's `functionCall` it writes `value` to the data model at `path` (two-way binding for macros; an Action may carry `functionCall` AND `event`: every argument and the event context are evaluated FIRST, then the write, then the event).",
631
+ "names": [
632
+ "required",
633
+ "regex",
634
+ "length",
635
+ "numeric",
636
+ "email",
637
+ "formatString",
638
+ "formatNumber",
639
+ "formatCurrency",
640
+ "formatDate",
641
+ "pluralize",
642
+ "openUrl",
643
+ "and",
644
+ "or",
645
+ "not",
646
+ "percent",
647
+ "add",
648
+ "sub",
649
+ "eq",
650
+ "lt",
651
+ "clamp",
652
+ "cond",
653
+ "fallback",
654
+ "concat",
655
+ "coalesce",
656
+ "text",
657
+ "map",
658
+ "len",
659
+ "fill",
660
+ "set",
661
+ "formatPercent",
662
+ "formatRelativeTime",
663
+ "filter"
664
+ ],
665
+ "core": {
666
+ "percent": {
667
+ "description": "The share of max as \"N%\", clamped to 0..100, two decimals; 0% when max is not positive.",
668
+ "args": {
669
+ "value": "number",
670
+ "max": "number"
671
+ },
672
+ "returns": "string"
673
+ },
674
+ "add": {
675
+ "description": "a + b; non-numbers count as 0.",
676
+ "args": {
677
+ "a": "number",
678
+ "b": "number"
679
+ },
680
+ "returns": "number"
681
+ },
682
+ "sub": {
683
+ "description": "a - b; non-numbers count as 0.",
684
+ "args": {
685
+ "a": "number",
686
+ "b": "number"
687
+ },
688
+ "returns": "number"
689
+ },
690
+ "eq": {
691
+ "description": "Strict equality of two values, except that a number equals a string spelling it (5 and \"5\"); nothing else coerces.",
692
+ "args": {
693
+ "a": "any",
694
+ "b": "any"
695
+ },
696
+ "returns": "boolean"
697
+ },
698
+ "lt": {
699
+ "description": "a < b as numbers.",
700
+ "args": {
701
+ "a": "number",
702
+ "b": "number"
703
+ },
704
+ "returns": "boolean"
705
+ },
706
+ "clamp": {
707
+ "description": "value as a number held inside [min, max]; a missing bound does not clamp; min wins when max < min.",
708
+ "args": {
709
+ "value": "number",
710
+ "min": "number",
711
+ "max": "number"
712
+ },
713
+ "returns": "number"
714
+ },
715
+ "cond": {
716
+ "description": "`then` when `if` is truthy, else `else`.",
717
+ "args": {
718
+ "if": "any",
719
+ "then": "any",
720
+ "else": "any"
721
+ },
722
+ "returns": "any"
723
+ },
724
+ "fallback": {
725
+ "description": "value unless it is missing (undefined or null), else default; a template's `{x|default}` over a bound x.",
726
+ "args": {
727
+ "value": "any",
728
+ "default": "any"
729
+ },
730
+ "returns": "any"
731
+ },
732
+ "concat": {
733
+ "description": "The values joined into one string (undefined and null as empty).",
734
+ "args": {
735
+ "values": "array"
736
+ },
737
+ "returns": "string"
738
+ },
739
+ "coalesce": {
740
+ "description": "The first truthy value.",
741
+ "args": {
742
+ "values": "array"
743
+ },
744
+ "returns": "any"
745
+ },
746
+ "text": {
747
+ "description": "The value as a string; no value when it is missing.",
748
+ "args": {
749
+ "value": "any"
750
+ },
751
+ "returns": "string"
752
+ },
753
+ "map": {
754
+ "description": "cases[String(value)] when that case exists, else default.",
755
+ "args": {
756
+ "value": "any",
757
+ "cases": "object",
758
+ "default": "any"
759
+ },
760
+ "returns": "any"
761
+ },
762
+ "len": {
763
+ "description": "An array's or a string's length, else 0.",
764
+ "args": {
765
+ "value": "any"
766
+ },
767
+ "returns": "number"
768
+ },
769
+ "fill": {
770
+ "description": "template with its {name} placeholders filled from params (unknown ones stay); a `$string.<id>` template resolves through the surface's string table first.",
771
+ "args": {
772
+ "template": "string",
773
+ "params": "object"
774
+ },
775
+ "returns": "string"
776
+ },
777
+ "set": {
778
+ "description": "Action only: writes value into the data model at path (a JSON pointer, relative to the node's data scope like a binding).",
779
+ "args": {
780
+ "path": "string",
781
+ "value": "any"
782
+ },
783
+ "returns": "void"
784
+ },
785
+ "formatPercent": {
786
+ "description": "A ratio as a locale percent through the surface Formatter (0.256 → 26%); decimals = fixed fraction digits.",
787
+ "args": {
788
+ "value": "number",
789
+ "decimals": "number"
790
+ },
791
+ "returns": "string"
792
+ },
793
+ "formatRelativeTime": {
794
+ "description": "A date (yyyy-mm-dd, ISO date-time or epoch ms) relative to now (epoch ms or a date; default the clock) through the surface Formatter: 3 minutes ago, yesterday, in 2 hours.",
795
+ "args": {
796
+ "value": "any",
797
+ "now": "any"
798
+ },
799
+ "returns": "string"
800
+ },
801
+ "filter": {
802
+ "description": "The items that match, in order: every `where` field equals its value (an empty value matches all) and `query` is a case-insensitive substring of one of `fields` (default every text field); bind a List or Table to it.",
803
+ "args": {
804
+ "items": "array",
805
+ "query": "string",
806
+ "fields": "array",
807
+ "where": "object"
808
+ },
809
+ "returns": "array"
810
+ }
811
+ },
812
+ "basic": {
813
+ "required": {
814
+ "args": {
815
+ "value": "any"
816
+ },
817
+ "returns": "boolean"
818
+ },
819
+ "regex": {
820
+ "args": {
821
+ "value": "string",
822
+ "pattern": "string"
823
+ },
824
+ "returns": "boolean"
825
+ },
826
+ "length": {
827
+ "args": {
828
+ "value": "string",
829
+ "min": "number",
830
+ "max": "number"
831
+ },
832
+ "returns": "boolean"
833
+ },
834
+ "numeric": {
835
+ "args": {
836
+ "value": "number",
837
+ "min": "number",
838
+ "max": "number"
839
+ },
840
+ "returns": "boolean"
841
+ },
842
+ "email": {
843
+ "args": {
844
+ "value": "string"
845
+ },
846
+ "returns": "boolean"
847
+ },
848
+ "formatString": {
849
+ "args": {
850
+ "value": "string"
851
+ },
852
+ "returns": "string"
853
+ },
854
+ "formatNumber": {
855
+ "args": {
856
+ "value": "number",
857
+ "decimals": "number",
858
+ "grouping": "boolean"
859
+ },
860
+ "returns": "string"
861
+ },
862
+ "formatCurrency": {
863
+ "args": {
864
+ "value": "number",
865
+ "currency": "string",
866
+ "decimals": "number",
867
+ "grouping": "boolean"
868
+ },
869
+ "returns": "string"
870
+ },
871
+ "formatDate": {
872
+ "args": {
873
+ "value": "any",
874
+ "format": "string"
875
+ },
876
+ "returns": "string"
877
+ },
878
+ "pluralize": {
879
+ "args": {
880
+ "value": "number",
881
+ "zero": "string",
882
+ "one": "string",
883
+ "two": "string",
884
+ "few": "string",
885
+ "many": "string",
886
+ "other": "string"
887
+ },
888
+ "returns": "string"
889
+ },
890
+ "openUrl": {
891
+ "args": {
892
+ "url": "string"
893
+ },
894
+ "returns": "void"
895
+ },
896
+ "and": {
897
+ "args": {
898
+ "values": "array"
899
+ },
900
+ "returns": "boolean"
901
+ },
902
+ "or": {
903
+ "args": {
904
+ "values": "array"
905
+ },
906
+ "returns": "boolean"
907
+ },
908
+ "not": {
909
+ "args": {
910
+ "value": "any"
911
+ },
912
+ "returns": "boolean"
913
+ }
914
+ }
915
+ },
916
+ "builtinIcons": {
917
+ "$comment": "Round 1: the glyph every renderer draws for a part it owns (`<Component>.<part>[.<variant>]` → an icons.json name, generated as builtinIconSlots/builtinIconNames), so a copy button, a drop zone or a sort arrow is the same icon on every platform. Append-only.",
918
+ "Accordion.trigger": "ui-chevron-down",
919
+ "Carousel.previous": "ui-chevron-left",
920
+ "Carousel.next": "ui-chevron-right",
921
+ "Checkbox.check": "ui-check",
922
+ "ChipInput.remove": "ui-close",
923
+ "CodeBlock.copy": "ui-copy",
924
+ "CodeBlock.copied": "ui-check",
925
+ "Composer.attachment": "ui-attach",
926
+ "Composer.send": "ui-send",
927
+ "Composer.stop": "ui-stop",
928
+ "DatePicker.trigger": "calendar",
929
+ "DatePicker.previousMonth": "ui-chevron-left",
930
+ "DatePicker.nextMonth": "ui-chevron-right",
931
+ "DateRangePicker.trigger": "calendar",
932
+ "Dialog.close": "ui-close",
933
+ "Menu.check": "ui-check",
934
+ "Menu.submenuIndicator": "ui-chevron-right",
935
+ "FileUpload.icon": "upload",
936
+ "FileUpload.file": "ui-file",
937
+ "FileUpload.remove": "ui-close",
938
+ "Image.fallback": "ui-icon-placeholder",
939
+ "NumberField.decrement": "ui-minus",
940
+ "NumberField.increment": "ui-add",
941
+ "Select.trigger": "ui-selector",
942
+ "Select.search": "search",
943
+ "Select.check": "ui-check",
944
+ "SearchList.search": "search",
945
+ "SearchList.check": "ui-check",
946
+ "Table.sortIcon.asc": "ui-chevron-up",
947
+ "Table.sortIcon.desc": "ui-chevron-down",
948
+ "Tabs.close": "ui-close",
949
+ "Tabs.new": "ui-add",
950
+ "TimePicker.trigger": "ui-clock",
951
+ "Toast.close": "ui-close",
952
+ "Toast.icon.info": "ui-info",
953
+ "Toast.icon.success": "ui-success",
954
+ "Toast.icon.warning": "ui-warning",
955
+ "Toast.icon.error": "ui-error",
956
+ "Unknown.root": "ui-warning"
957
+ },
958
+ "components": {
959
+ "Box": {
960
+ "kind": "native",
961
+ "group": "layout",
962
+ "lite": true,
963
+ "children": "many",
964
+ "description": "A styled container laid out by the whitelisted style object; what every macro expands into.",
965
+ "props": {
966
+ "style": {
967
+ "type": "style",
968
+ "description": "Layout and visual properties from the Box whitelist (flex, grid, sizes, spacing, colours)."
969
+ },
970
+ "pressable": {
971
+ "type": "boolean",
972
+ "description": "Makes the box a press target that fires `press`."
973
+ }
974
+ },
975
+ "events": [
976
+ "press"
977
+ ],
978
+ "example": {
979
+ "style": {
980
+ "display": "flex",
981
+ "flexDirection": "column",
982
+ "gap": "$spacing.md",
983
+ "padding": "$spacing.lg"
984
+ }
985
+ }
986
+ },
987
+ "Stack": {
988
+ "kind": "macro",
989
+ "group": "layout",
990
+ "lite": true,
991
+ "children": "many",
992
+ "description": "A flex container that lays its children out in one direction with a gap.",
993
+ "props": {
994
+ "direction": {
995
+ "type": "enum",
996
+ "enum": "orientation",
997
+ "default": "vertical",
998
+ "responsive": true,
999
+ "bindable": true,
1000
+ "description": "A row or a column (`{base: \"vertical\", md: \"horizontal\"}`)."
1001
+ },
1002
+ "gap": {
1003
+ "type": "enum",
1004
+ "enum": "gap",
1005
+ "default": "md",
1006
+ "responsive": true,
1007
+ "description": "The space between children."
1008
+ },
1009
+ "align": {
1010
+ "type": "enum",
1011
+ "enum": "align",
1012
+ "responsive": true,
1013
+ "bindable": true,
1014
+ "description": "Unset: `center` in a row, `stretch` in a column."
1015
+ },
1016
+ "justify": {
1017
+ "type": "enum",
1018
+ "enum": "justify",
1019
+ "default": "start",
1020
+ "responsive": true,
1021
+ "bindable": true,
1022
+ "description": "Main-axis distribution."
1023
+ },
1024
+ "wrap": {
1025
+ "type": "boolean",
1026
+ "default": false,
1027
+ "responsive": true,
1028
+ "description": "Lets children wrap onto new lines."
1029
+ },
1030
+ "style": {
1031
+ "type": "style",
1032
+ "description": "Extra Box styles merged over the stack's own."
1033
+ }
1034
+ },
1035
+ "example": {
1036
+ "direction": "horizontal",
1037
+ "gap": "sm"
1038
+ }
1039
+ },
1040
+ "Grid": {
1041
+ "kind": "macro",
1042
+ "group": "layout",
1043
+ "lite": true,
1044
+ "children": "many",
1045
+ "description": "An equal-column grid for cards and tiles.",
1046
+ "props": {
1047
+ "columns": {
1048
+ "type": "number",
1049
+ "default": 2,
1050
+ "responsive": true,
1051
+ "description": "Equal columns 1–6 (`{base: 1, md: 2, lg: 3}`)."
1052
+ },
1053
+ "gap": {
1054
+ "type": "enum",
1055
+ "enum": "gap",
1056
+ "default": "md",
1057
+ "responsive": true,
1058
+ "description": "The space between cells."
1059
+ },
1060
+ "style": {
1061
+ "type": "style",
1062
+ "description": "Extra Box styles merged over the grid's own."
1063
+ }
1064
+ },
1065
+ "example": {
1066
+ "columns": 3,
1067
+ "gap": "md"
1068
+ }
1069
+ },
1070
+ "Card": {
1071
+ "kind": "macro",
1072
+ "group": "layout",
1073
+ "lite": true,
1074
+ "children": "many",
1075
+ "description": "A bordered card with an optional title and description, for grouped content, not page headers.",
1076
+ "props": {
1077
+ "title": {
1078
+ "type": "string",
1079
+ "description": "The card heading."
1080
+ },
1081
+ "description": {
1082
+ "type": "string",
1083
+ "description": "A muted line under the heading."
1084
+ },
1085
+ "padded": {
1086
+ "type": "boolean",
1087
+ "default": true,
1088
+ "description": "Pads the body; off for edge-to-edge rows."
1089
+ },
1090
+ "style": {
1091
+ "type": "style",
1092
+ "description": "Extra Box styles merged over the card's own."
1093
+ }
1094
+ },
1095
+ "example": {
1096
+ "title": "Overview",
1097
+ "description": "Your account summary"
1098
+ }
1099
+ },
1100
+ "Separator": {
1101
+ "kind": "macro",
1102
+ "group": "layout",
1103
+ "lite": true,
1104
+ "children": "none",
1105
+ "description": "A hairline that divides content.",
1106
+ "props": {
1107
+ "orientation": {
1108
+ "type": "enum",
1109
+ "enum": "orientation",
1110
+ "default": "horizontal",
1111
+ "description": "A horizontal rule or a vertical bar."
1112
+ }
1113
+ },
1114
+ "example": {
1115
+ "orientation": "horizontal"
1116
+ }
1117
+ },
1118
+ "List": {
1119
+ "kind": "native",
1120
+ "group": "layout",
1121
+ "lite": true,
1122
+ "children": "many",
1123
+ "slots": [
1124
+ "section"
1125
+ ],
1126
+ "slotScope": "row",
1127
+ "description": "A windowed scrolling list for anything longer than a screen; children may come from a data template.",
1128
+ "props": {
1129
+ "direction": {
1130
+ "type": "enum",
1131
+ "enum": "listDirection",
1132
+ "default": "vertical",
1133
+ "description": "Scroll axis."
1134
+ },
1135
+ "gap": {
1136
+ "type": "enum",
1137
+ "enum": "gap",
1138
+ "default": "none",
1139
+ "description": "The space between items."
1140
+ },
1141
+ "divided": {
1142
+ "type": "boolean",
1143
+ "default": false,
1144
+ "description": "Draws a hairline between items."
1145
+ },
1146
+ "sectionBy": {
1147
+ "type": "string",
1148
+ "description": "Groups consecutive items by this field; slot `section` = each header ({value, count})."
1149
+ },
1150
+ "stickyHeaders": {
1151
+ "type": "boolean",
1152
+ "default": false,
1153
+ "description": "Pins the current section header."
1154
+ },
1155
+ "style": {
1156
+ "type": "style",
1157
+ "description": "Extra Box styles for the list frame."
1158
+ }
1159
+ },
1160
+ "example": {
1161
+ "direction": "vertical",
1162
+ "divided": true
1163
+ }
1164
+ },
1165
+ "Resizable": {
1166
+ "kind": "native",
1167
+ "group": "layout",
1168
+ "lite": true,
1169
+ "children": "many",
1170
+ "description": "Panels split by draggable handles; each child is one panel.",
1171
+ "props": {
1172
+ "direction": {
1173
+ "type": "enum",
1174
+ "enum": "orientation",
1175
+ "default": "horizontal",
1176
+ "responsive": true,
1177
+ "description": "Side by side or stacked."
1178
+ },
1179
+ "sizes": {
1180
+ "type": "array",
1181
+ "items": {
1182
+ "type": "number"
1183
+ },
1184
+ "bindable": true,
1185
+ "description": "Percent per panel; bind it."
1186
+ },
1187
+ "panels": {
1188
+ "type": "array",
1189
+ "items": {
1190
+ "type": "object",
1191
+ "shape": "panel"
1192
+ },
1193
+ "description": "Per-panel limits, by index."
1194
+ },
1195
+ "handle": {
1196
+ "type": "boolean",
1197
+ "default": false,
1198
+ "description": "Draws a grip on each handle."
1199
+ },
1200
+ "style": {
1201
+ "type": "style",
1202
+ "description": "Extra Box styles for the group box (give it a height)."
1203
+ }
1204
+ },
1205
+ "events": [
1206
+ "change"
1207
+ ],
1208
+ "example": {
1209
+ "direction": "horizontal",
1210
+ "sizes": [
1211
+ 30,
1212
+ 70
1213
+ ],
1214
+ "handle": true
1215
+ }
1216
+ },
1217
+ "ScrollArea": {
1218
+ "kind": "macro",
1219
+ "group": "layout",
1220
+ "lite": true,
1221
+ "children": "many",
1222
+ "description": "A scrolling region of bounded height or width.",
1223
+ "props": {
1224
+ "direction": {
1225
+ "type": "enum",
1226
+ "enum": "scrollDirection",
1227
+ "default": "vertical",
1228
+ "description": "Which axis scrolls."
1229
+ },
1230
+ "maxHeight": {
1231
+ "type": "number",
1232
+ "description": "Px it scrolls within; omit to fill the parent."
1233
+ },
1234
+ "style": {
1235
+ "type": "style",
1236
+ "description": "Extra Box styles merged over the region's own."
1237
+ }
1238
+ },
1239
+ "example": {
1240
+ "direction": "vertical",
1241
+ "maxHeight": 240
1242
+ }
1243
+ },
1244
+ "Sidebar": {
1245
+ "kind": "macro",
1246
+ "group": "layout",
1247
+ "lite": true,
1248
+ "children": "many",
1249
+ "slots": [
1250
+ "sidebar"
1251
+ ],
1252
+ "description": "A two-column shell: a navigation column (`sidebar` slot) beside the children, hidden narrow or `collapsed`.",
1253
+ "props": {
1254
+ "side": {
1255
+ "type": "enum",
1256
+ "values": [
1257
+ "left",
1258
+ "right"
1259
+ ],
1260
+ "default": "left",
1261
+ "description": "Which edge the column sits on."
1262
+ },
1263
+ "width": {
1264
+ "type": "number",
1265
+ "default": 240,
1266
+ "description": "The column width in px."
1267
+ },
1268
+ "collapseBelow": {
1269
+ "type": "enum",
1270
+ "enum": "collapseBelow",
1271
+ "default": "md",
1272
+ "description": "Hides the column below this breakpoint."
1273
+ },
1274
+ "collapsed": {
1275
+ "type": "boolean",
1276
+ "default": false,
1277
+ "bindable": true,
1278
+ "description": "Hides the column at any width; bind it to a toggle."
1279
+ }
1280
+ },
1281
+ "example": {
1282
+ "side": "left",
1283
+ "width": 240,
1284
+ "collapseBelow": "md"
1285
+ }
1286
+ },
1287
+ "SplitView": {
1288
+ "kind": "macro",
1289
+ "group": "layout",
1290
+ "lite": true,
1291
+ "children": "many",
1292
+ "slots": [
1293
+ "list"
1294
+ ],
1295
+ "description": "List (`list` slot) + detail (children); phones show one at a time, the detail with a back button.",
1296
+ "props": {
1297
+ "open": {
1298
+ "type": "boolean",
1299
+ "default": false,
1300
+ "bindable": true,
1301
+ "description": "On phones, the detail shows instead of the list; bind it to the open item."
1302
+ },
1303
+ "width": {
1304
+ "type": "number",
1305
+ "default": 320,
1306
+ "description": "The list column width in px."
1307
+ }
1308
+ },
1309
+ "events": [
1310
+ "back"
1311
+ ],
1312
+ "example": {
1313
+ "open": true,
1314
+ "width": 320
1315
+ }
1316
+ },
1317
+ "AppBar": {
1318
+ "kind": "macro",
1319
+ "group": "layout",
1320
+ "lite": true,
1321
+ "children": "none",
1322
+ "slots": [
1323
+ "leading",
1324
+ "trailing"
1325
+ ],
1326
+ "description": "A top bar: title, optional subtitle and back button, `leading`/`trailing` slots.",
1327
+ "props": {
1328
+ "title": {
1329
+ "type": "string",
1330
+ "required": true,
1331
+ "bindable": true,
1332
+ "description": "The screen title."
1333
+ },
1334
+ "subtitle": {
1335
+ "type": "string",
1336
+ "bindable": true,
1337
+ "description": "A muted line under the title."
1338
+ },
1339
+ "back": {
1340
+ "type": "boolean",
1341
+ "default": false,
1342
+ "description": "Shows a back button that fires `back`."
1343
+ }
1344
+ },
1345
+ "events": [
1346
+ "back"
1347
+ ],
1348
+ "example": {
1349
+ "title": "Settings",
1350
+ "back": true
1351
+ }
1352
+ },
1353
+ "Page": {
1354
+ "kind": "macro",
1355
+ "group": "layout",
1356
+ "lite": true,
1357
+ "children": "many",
1358
+ "slots": [
1359
+ "leading",
1360
+ "trailing"
1361
+ ],
1362
+ "description": "A screen: an AppBar row (back, title, trailing actions) over a padded scrolling body.",
1363
+ "props": {
1364
+ "title": {
1365
+ "type": "string",
1366
+ "required": true,
1367
+ "bindable": true,
1368
+ "description": "The screen title."
1369
+ },
1370
+ "subtitle": {
1371
+ "type": "string",
1372
+ "bindable": true,
1373
+ "description": "A muted line under the title."
1374
+ },
1375
+ "back": {
1376
+ "type": "boolean",
1377
+ "default": false,
1378
+ "description": "Shows a back button that fires `back`."
1379
+ },
1380
+ "padded": {
1381
+ "type": "boolean",
1382
+ "default": true,
1383
+ "description": "Pads the body; off for edge-to-edge lists."
1384
+ }
1385
+ },
1386
+ "events": [
1387
+ "back"
1388
+ ],
1389
+ "example": {
1390
+ "title": "Settings",
1391
+ "back": true
1392
+ }
1393
+ },
1394
+ "Toolbar": {
1395
+ "kind": "macro",
1396
+ "group": "layout",
1397
+ "lite": true,
1398
+ "children": "many",
1399
+ "slots": [
1400
+ "trailing"
1401
+ ],
1402
+ "description": "Controls in one row, bottoms aligned, wrapping on phones; `trailing` = the end action.",
1403
+ "props": {
1404
+ "gap": {
1405
+ "type": "enum",
1406
+ "enum": "gap",
1407
+ "default": "sm",
1408
+ "description": "The space between controls."
1409
+ }
1410
+ },
1411
+ "example": {
1412
+ "gap": "sm"
1413
+ }
1414
+ },
1415
+ "Section": {
1416
+ "kind": "macro",
1417
+ "group": "list",
1418
+ "lite": true,
1419
+ "children": "many",
1420
+ "slots": [
1421
+ "leading",
1422
+ "trailing"
1423
+ ],
1424
+ "description": "A band header over hairline-divided rows: title, caption, count and glyph, foldable, tinted; no title = just the rows.",
1425
+ "props": {
1426
+ "title": {
1427
+ "type": "string",
1428
+ "bindable": true,
1429
+ "description": "The band's label; omit it for a bare run of rows."
1430
+ },
1431
+ "caption": {
1432
+ "type": "string",
1433
+ "bindable": true,
1434
+ "description": "Muted text after the title."
1435
+ },
1436
+ "count": {
1437
+ "type": "number",
1438
+ "bindable": true,
1439
+ "description": "A count after the title; off unless given."
1440
+ },
1441
+ "icon": {
1442
+ "type": "icon",
1443
+ "description": "A glyph before the title (the `leading` slot replaces it)."
1444
+ },
1445
+ "collapsible": {
1446
+ "type": "boolean",
1447
+ "default": false,
1448
+ "description": "The header folds the rows (chevron, press)."
1449
+ },
1450
+ "open": {
1451
+ "type": "boolean",
1452
+ "default": true,
1453
+ "bindable": true,
1454
+ "description": "Whether the rows show; bind it."
1455
+ },
1456
+ "tint": {
1457
+ "type": "enum",
1458
+ "enum": "tone",
1459
+ "default": "neutral",
1460
+ "description": "The band's colour tone."
1461
+ },
1462
+ "tree": {
1463
+ "type": "boolean",
1464
+ "default": false,
1465
+ "description": "The rows form a tree: each `Row.depth` indents and draws its guides."
1466
+ },
1467
+ "loading": {
1468
+ "type": "boolean",
1469
+ "default": false,
1470
+ "bindable": true,
1471
+ "description": "A refetch is running: a small spinner before the count. The first load is a Skeleton instead."
1472
+ },
1473
+ "style": {
1474
+ "type": "style",
1475
+ "description": "Extra Box styles for the frame."
1476
+ }
1477
+ },
1478
+ "events": [
1479
+ "change"
1480
+ ],
1481
+ "example": {
1482
+ "title": "In progress",
1483
+ "icon": "nav-issues"
1484
+ }
1485
+ },
1486
+ "Group": {
1487
+ "kind": "macro",
1488
+ "group": "list",
1489
+ "lite": true,
1490
+ "children": "many",
1491
+ "description": "A form-field container: a rounded group of rows with an optional title and footnote.",
1492
+ "props": {
1493
+ "title": {
1494
+ "type": "string",
1495
+ "description": "A caption above the group."
1496
+ },
1497
+ "footer": {
1498
+ "type": "string",
1499
+ "description": "A muted note under the group."
1500
+ }
1501
+ },
1502
+ "example": {
1503
+ "title": "Notifications"
1504
+ }
1505
+ },
1506
+ "Text": {
1507
+ "kind": "native",
1508
+ "group": "text",
1509
+ "lite": true,
1510
+ "children": "none",
1511
+ "description": "A run of text in one of the type styles; prefer dedicated components over inline markdown.",
1512
+ "props": {
1513
+ "text": {
1514
+ "type": "string",
1515
+ "required": true,
1516
+ "bindable": true,
1517
+ "description": "The text to show."
1518
+ },
1519
+ "variant": {
1520
+ "type": "enum",
1521
+ "enum": "textVariant",
1522
+ "default": "body",
1523
+ "description": "The type style."
1524
+ },
1525
+ "align": {
1526
+ "type": "enum",
1527
+ "values": [
1528
+ "start",
1529
+ "center",
1530
+ "end"
1531
+ ],
1532
+ "description": "Horizontal alignment inside its box."
1533
+ },
1534
+ "lines": {
1535
+ "type": "number",
1536
+ "description": "Truncates to this many lines with an ellipsis."
1537
+ },
1538
+ "tone": {
1539
+ "type": "enum",
1540
+ "enum": "tone",
1541
+ "description": "A colour tone instead of the default foreground."
1542
+ },
1543
+ "shimmer": {
1544
+ "type": "boolean",
1545
+ "default": false,
1546
+ "description": "Animates a highlight across the text while work runs."
1547
+ },
1548
+ "live": {
1549
+ "type": "enum",
1550
+ "enum": "live",
1551
+ "default": "off",
1552
+ "description": "Announces changes (`assertive` interrupts)."
1553
+ },
1554
+ "style": {
1555
+ "type": "style",
1556
+ "description": "Extra Box styles for the text box."
1557
+ }
1558
+ },
1559
+ "example": {
1560
+ "text": "Hello, world!",
1561
+ "variant": "body"
1562
+ }
1563
+ },
1564
+ "Heading": {
1565
+ "kind": "macro",
1566
+ "group": "text",
1567
+ "lite": true,
1568
+ "children": "none",
1569
+ "description": "A section or page heading at one of four levels.",
1570
+ "props": {
1571
+ "text": {
1572
+ "type": "string",
1573
+ "required": true,
1574
+ "bindable": true,
1575
+ "description": "The heading text."
1576
+ },
1577
+ "level": {
1578
+ "type": "enum",
1579
+ "enum": "headingLevel",
1580
+ "default": "h2",
1581
+ "description": "h1 is the page title, h4 the smallest."
1582
+ }
1583
+ },
1584
+ "example": {
1585
+ "text": "Welcome",
1586
+ "level": "h1"
1587
+ }
1588
+ },
1589
+ "Markdown": {
1590
+ "kind": "native",
1591
+ "group": "text",
1592
+ "lite": true,
1593
+ "children": "none",
1594
+ "description": "Rendered GitHub-flavoured markdown, for prose.",
1595
+ "props": {
1596
+ "text": {
1597
+ "type": "markdown",
1598
+ "required": true,
1599
+ "bindable": true,
1600
+ "description": "The GFM source."
1601
+ },
1602
+ "lines": {
1603
+ "type": "number",
1604
+ "description": "Truncates the rendered body to this many lines with an ellipsis."
1605
+ },
1606
+ "style": {
1607
+ "type": "style",
1608
+ "description": "Extra Box styles for the markdown box."
1609
+ }
1610
+ },
1611
+ "example": {
1612
+ "text": "**Bold** and a list:\n\n- one\n- two"
1613
+ }
1614
+ },
1615
+ "CodeBlock": {
1616
+ "kind": "native",
1617
+ "group": "text",
1618
+ "lite": true,
1619
+ "children": "none",
1620
+ "description": "Source code in a mono block: syntax colouring, optional line numbers, a copy button.",
1621
+ "props": {
1622
+ "code": {
1623
+ "type": "string",
1624
+ "required": true,
1625
+ "bindable": true,
1626
+ "description": "The source text."
1627
+ },
1628
+ "language": {
1629
+ "type": "enum",
1630
+ "enum": "codeLanguage",
1631
+ "default": "plain",
1632
+ "description": "The syntax colouring."
1633
+ },
1634
+ "title": {
1635
+ "type": "string",
1636
+ "description": "A header line (a file name)."
1637
+ },
1638
+ "lineNumbers": {
1639
+ "type": "boolean",
1640
+ "default": false,
1641
+ "description": "Shows a line-number gutter."
1642
+ },
1643
+ "wrap": {
1644
+ "type": "boolean",
1645
+ "default": false,
1646
+ "description": "Wraps long lines instead of scrolling sideways."
1647
+ },
1648
+ "copyable": {
1649
+ "type": "boolean",
1650
+ "default": true,
1651
+ "description": "Shows the copy-to-clipboard button."
1652
+ },
1653
+ "highlight": {
1654
+ "type": "array",
1655
+ "items": {
1656
+ "type": "number"
1657
+ },
1658
+ "description": "1-based line numbers to emphasise."
1659
+ },
1660
+ "maxLines": {
1661
+ "type": "number",
1662
+ "description": "Lines shown before the block scrolls."
1663
+ },
1664
+ "variant": {
1665
+ "type": "enum",
1666
+ "enum": "codeBlockVariant",
1667
+ "default": "default",
1668
+ "bindable": true,
1669
+ "description": "destructive = failed output."
1670
+ },
1671
+ "size": {
1672
+ "type": "enum",
1673
+ "enum": "codeBlockSize",
1674
+ "default": "default",
1675
+ "description": "sm = compact."
1676
+ }
1677
+ },
1678
+ "example": {
1679
+ "code": "const answer = 42 // the answer",
1680
+ "language": "ts",
1681
+ "lineNumbers": true
1682
+ }
1683
+ },
1684
+ "Kbd": {
1685
+ "kind": "macro",
1686
+ "group": "text",
1687
+ "lite": true,
1688
+ "children": "none",
1689
+ "description": "A keyboard shortcut drawn as a key cap.",
1690
+ "props": {
1691
+ "keys": {
1692
+ "type": "string",
1693
+ "required": true,
1694
+ "description": "The shortcut text (`⌘K`, `Ctrl+Shift+P`)."
1695
+ }
1696
+ },
1697
+ "example": {
1698
+ "keys": "⌘K"
1699
+ }
1700
+ },
1701
+ "Label": {
1702
+ "kind": "macro",
1703
+ "group": "text",
1704
+ "lite": true,
1705
+ "children": "none",
1706
+ "description": "A caption for a control that has no label of its own, with an optional required mark.",
1707
+ "props": {
1708
+ "text": {
1709
+ "type": "string",
1710
+ "required": true,
1711
+ "bindable": true,
1712
+ "description": "The caption."
1713
+ },
1714
+ "for": {
1715
+ "type": "string",
1716
+ "description": "The id of the control it labels."
1717
+ },
1718
+ "required": {
1719
+ "type": "boolean",
1720
+ "default": false,
1721
+ "description": "Adds the required mark."
1722
+ }
1723
+ },
1724
+ "example": {
1725
+ "text": "Visibility",
1726
+ "for": "visibility"
1727
+ }
1728
+ },
1729
+ "Image": {
1730
+ "kind": "native",
1731
+ "group": "media",
1732
+ "lite": false,
1733
+ "children": "none",
1734
+ "description": "A picture from a URL, or a placeholder box when it has none.",
1735
+ "props": {
1736
+ "src": {
1737
+ "type": "url",
1738
+ "bindable": true,
1739
+ "description": "The image URL; omit for a placeholder."
1740
+ },
1741
+ "alt": {
1742
+ "type": "string",
1743
+ "required": true,
1744
+ "bindable": true,
1745
+ "description": "The accessibility description."
1746
+ },
1747
+ "fit": {
1748
+ "type": "enum",
1749
+ "enum": "imageFit",
1750
+ "default": "cover",
1751
+ "description": "How the picture fills its box."
1752
+ },
1753
+ "width": {
1754
+ "type": "number",
1755
+ "description": "Fixed width in px; otherwise the box decides."
1756
+ },
1757
+ "height": {
1758
+ "type": "number",
1759
+ "description": "Fixed height in px."
1760
+ },
1761
+ "aspectRatio": {
1762
+ "type": "number",
1763
+ "description": "Width over height (16:9 when unset and no height); the box never waits for the picture."
1764
+ },
1765
+ "fallback": {
1766
+ "type": "icon",
1767
+ "description": "An icon shown when the picture fails or is missing."
1768
+ },
1769
+ "loading": {
1770
+ "type": "enum",
1771
+ "enum": "imageLoading",
1772
+ "default": "lazy",
1773
+ "description": "Defer loading until near the viewport, or load at once."
1774
+ },
1775
+ "focalX": {
1776
+ "type": "number",
1777
+ "description": "Horizontal focal point 0..1 kept when cropped (0.5)."
1778
+ },
1779
+ "focalY": {
1780
+ "type": "number",
1781
+ "description": "Vertical focal point 0..1 kept when cropped (0.5)."
1782
+ },
1783
+ "style": {
1784
+ "type": "style",
1785
+ "description": "Extra Box styles for the image box."
1786
+ }
1787
+ },
1788
+ "example": {
1789
+ "src": "https://example.com/cover.jpg",
1790
+ "alt": "Cover",
1791
+ "fit": "cover",
1792
+ "aspectRatio": 1.7777778
1793
+ }
1794
+ },
1795
+ "Icon": {
1796
+ "kind": "native",
1797
+ "group": "media",
1798
+ "lite": true,
1799
+ "children": "none",
1800
+ "description": "One icon from the shared Lucide registry, by name.",
1801
+ "props": {
1802
+ "name": {
1803
+ "type": "icon",
1804
+ "required": true,
1805
+ "bindable": true,
1806
+ "description": "The icon name (an icons.json concept or Lucide name)."
1807
+ },
1808
+ "size": {
1809
+ "type": "enum",
1810
+ "enum": "controlSize",
1811
+ "default": "default",
1812
+ "description": "Glyph size."
1813
+ },
1814
+ "tone": {
1815
+ "type": "enum",
1816
+ "enum": "tone",
1817
+ "bindable": true,
1818
+ "description": "A colour tone instead of the current text colour."
1819
+ },
1820
+ "label": {
1821
+ "type": "string",
1822
+ "description": "An accessibility label when the icon stands alone."
1823
+ }
1824
+ },
1825
+ "example": {
1826
+ "name": "ui-check",
1827
+ "size": "default"
1828
+ }
1829
+ },
1830
+ "Video": {
1831
+ "kind": "native",
1832
+ "group": "media",
1833
+ "lite": false,
1834
+ "children": "none",
1835
+ "description": "A video player: the poster until play, then the platform player with its controls.",
1836
+ "props": {
1837
+ "src": {
1838
+ "type": "url",
1839
+ "required": true,
1840
+ "bindable": true,
1841
+ "description": "The video URL (H.264 + AAC MP4 plays everywhere)."
1842
+ },
1843
+ "poster": {
1844
+ "type": "url",
1845
+ "description": "A still shown before playback."
1846
+ },
1847
+ "durationMs": {
1848
+ "type": "number",
1849
+ "description": "Known length for the scrubber."
1850
+ },
1851
+ "autoplay": {
1852
+ "type": "boolean",
1853
+ "default": false,
1854
+ "description": "Starts muted playback on appear."
1855
+ },
1856
+ "aspectRatio": {
1857
+ "type": "number",
1858
+ "default": 1.7777778,
1859
+ "description": "Width over height of the player box."
1860
+ },
1861
+ "style": {
1862
+ "type": "style",
1863
+ "description": "Extra Box styles for the player box."
1864
+ }
1865
+ },
1866
+ "example": {
1867
+ "src": "https://example.com/clip.mp4",
1868
+ "durationMs": 12000
1869
+ }
1870
+ },
1871
+ "AudioPlayer": {
1872
+ "kind": "native",
1873
+ "group": "media",
1874
+ "lite": false,
1875
+ "children": "none",
1876
+ "description": "An audio player with a title and a play control.",
1877
+ "props": {
1878
+ "src": {
1879
+ "type": "url",
1880
+ "required": true,
1881
+ "bindable": true,
1882
+ "description": "The audio URL."
1883
+ },
1884
+ "title": {
1885
+ "type": "string",
1886
+ "description": "What is playing."
1887
+ },
1888
+ "durationMs": {
1889
+ "type": "number",
1890
+ "description": "Known length for the scrubber."
1891
+ }
1892
+ },
1893
+ "example": {
1894
+ "src": "https://example.com/track.mp3",
1895
+ "title": "Episode 12"
1896
+ }
1897
+ },
1898
+ "Avatar": {
1899
+ "kind": "native",
1900
+ "group": "media",
1901
+ "lite": true,
1902
+ "children": "none",
1903
+ "description": "A round user picture that falls back to initials on a stable hue.",
1904
+ "props": {
1905
+ "name": {
1906
+ "type": "string",
1907
+ "required": true,
1908
+ "bindable": true,
1909
+ "description": "The person's name; initials come from it."
1910
+ },
1911
+ "src": {
1912
+ "type": "url",
1913
+ "bindable": true,
1914
+ "description": "The picture URL."
1915
+ },
1916
+ "size": {
1917
+ "type": "enum",
1918
+ "enum": "controlSize",
1919
+ "default": "default",
1920
+ "description": "Diameter class."
1921
+ },
1922
+ "seed": {
1923
+ "type": "string",
1924
+ "description": "Hashes the fallback hue; defaults to the name."
1925
+ }
1926
+ },
1927
+ "example": {
1928
+ "name": "Jane Doe",
1929
+ "size": "default"
1930
+ }
1931
+ },
1932
+ "Carousel": {
1933
+ "kind": "native",
1934
+ "group": "media",
1935
+ "lite": false,
1936
+ "children": "many",
1937
+ "description": "A horizontally paging scroller; each child is one page.",
1938
+ "props": {
1939
+ "page": {
1940
+ "type": "number",
1941
+ "default": 0,
1942
+ "bindable": true,
1943
+ "description": "The active page index."
1944
+ },
1945
+ "loop": {
1946
+ "type": "boolean",
1947
+ "default": false,
1948
+ "description": "Wraps from the last page to the first."
1949
+ },
1950
+ "indicators": {
1951
+ "type": "boolean",
1952
+ "default": true,
1953
+ "description": "Shows the page dots."
1954
+ }
1955
+ },
1956
+ "events": [
1957
+ "change"
1958
+ ],
1959
+ "example": {
1960
+ "page": 0,
1961
+ "indicators": true
1962
+ }
1963
+ },
1964
+ "Tabs": {
1965
+ "kind": "native",
1966
+ "group": "navigation",
1967
+ "lite": true,
1968
+ "children": "many",
1969
+ "description": "Tab navigation; the child at index i is the panel of tab i.",
1970
+ "props": {
1971
+ "tabs": {
1972
+ "type": "array",
1973
+ "items": {
1974
+ "type": "object",
1975
+ "shape": "tab"
1976
+ },
1977
+ "required": true,
1978
+ "description": "The tab headers in order."
1979
+ },
1980
+ "value": {
1981
+ "type": "string",
1982
+ "bindable": true,
1983
+ "description": "The active tab's value; bind it for two-way state."
1984
+ },
1985
+ "fill": {
1986
+ "type": "boolean",
1987
+ "default": false,
1988
+ "description": "Stretches the headers across the width."
1989
+ },
1990
+ "closable": {
1991
+ "type": "enum",
1992
+ "enum": "tabClosable",
1993
+ "default": "none",
1994
+ "description": "Close glyphs firing `close`; `hover` = on hover."
1995
+ },
1996
+ "addable": {
1997
+ "type": "boolean",
1998
+ "default": false,
1999
+ "description": "A + button firing `new`."
2000
+ }
2001
+ },
2002
+ "events": [
2003
+ "change",
2004
+ "close",
2005
+ "new"
2006
+ ],
2007
+ "example": {
2008
+ "tabs": [
2009
+ {
2010
+ "label": "Issue",
2011
+ "value": "issue"
2012
+ },
2013
+ {
2014
+ "label": "Run",
2015
+ "value": "run"
2016
+ }
2017
+ ],
2018
+ "value": "issue"
2019
+ }
2020
+ },
2021
+ "Segmented": {
2022
+ "kind": "native",
2023
+ "group": "navigation",
2024
+ "lite": true,
2025
+ "children": "none",
2026
+ "description": "ONE row of segments picking one or many values: a pill track, toggles, joined outline buttons or a bottom bar.",
2027
+ "props": {
2028
+ "items": {
2029
+ "type": "array",
2030
+ "items": {
2031
+ "type": "object",
2032
+ "shape": "option"
2033
+ },
2034
+ "required": true,
2035
+ "description": "The segments in order."
2036
+ },
2037
+ "type": {
2038
+ "type": "enum",
2039
+ "enum": "groupType",
2040
+ "default": "single",
2041
+ "description": "One active value or several."
2042
+ },
2043
+ "value": {
2044
+ "type": "string",
2045
+ "bindable": true,
2046
+ "description": "The selected value (comma-joined when multiple); bind it."
2047
+ },
2048
+ "variant": {
2049
+ "type": "enum",
2050
+ "enum": "segmentedVariant",
2051
+ "default": "segmented",
2052
+ "description": "Pill track, bare toggles, joined outline buttons, or a full-width icon `bar`."
2053
+ },
2054
+ "size": {
2055
+ "type": "enum",
2056
+ "enum": "controlSize",
2057
+ "default": "default",
2058
+ "description": "Control height class."
2059
+ },
2060
+ "fill": {
2061
+ "type": "boolean",
2062
+ "default": false,
2063
+ "description": "Stretches the segments across the width (a `bar` always does)."
2064
+ }
2065
+ },
2066
+ "events": [
2067
+ "change"
2068
+ ],
2069
+ "example": {
2070
+ "items": [
2071
+ {
2072
+ "label": "List",
2073
+ "value": "list"
2074
+ },
2075
+ {
2076
+ "label": "Board",
2077
+ "value": "board"
2078
+ }
2079
+ ],
2080
+ "value": "list"
2081
+ }
2082
+ },
2083
+ "Accordion": {
2084
+ "kind": "native",
2085
+ "group": "navigation",
2086
+ "lite": false,
2087
+ "children": "many",
2088
+ "description": "Collapsible sections; the child at index i is the body of item i.",
2089
+ "props": {
2090
+ "items": {
2091
+ "type": "array",
2092
+ "items": {
2093
+ "type": "object",
2094
+ "shape": "accordionItem"
2095
+ },
2096
+ "required": true,
2097
+ "description": "The section headers in order."
2098
+ },
2099
+ "type": {
2100
+ "type": "enum",
2101
+ "enum": "groupType",
2102
+ "default": "single",
2103
+ "description": "One section open at a time, or any number."
2104
+ },
2105
+ "value": {
2106
+ "type": "string",
2107
+ "bindable": true,
2108
+ "description": "The open section's value (comma-joined when multiple); bind it."
2109
+ }
2110
+ },
2111
+ "events": [
2112
+ "change"
2113
+ ],
2114
+ "example": {
2115
+ "items": [
2116
+ {
2117
+ "title": "Details",
2118
+ "value": "details"
2119
+ }
2120
+ ],
2121
+ "type": "single",
2122
+ "value": "details"
2123
+ }
2124
+ },
2125
+ "Collapsible": {
2126
+ "kind": "macro",
2127
+ "group": "navigation",
2128
+ "lite": true,
2129
+ "children": "many",
2130
+ "description": "One disclosure section with a title row that shows or hides its children.",
2131
+ "props": {
2132
+ "title": {
2133
+ "type": "string",
2134
+ "required": true,
2135
+ "description": "The header text."
2136
+ },
2137
+ "open": {
2138
+ "type": "boolean",
2139
+ "default": false,
2140
+ "bindable": true,
2141
+ "description": "Whether the body shows; bind it."
2142
+ },
2143
+ "count": {
2144
+ "type": "number",
2145
+ "description": "A count shown in the header."
2146
+ }
2147
+ },
2148
+ "events": [
2149
+ "change"
2150
+ ],
2151
+ "example": {
2152
+ "title": "Advanced",
2153
+ "open": false
2154
+ }
2155
+ },
2156
+ "Trace": {
2157
+ "kind": "macro",
2158
+ "group": "list",
2159
+ "lite": true,
2160
+ "children": "many",
2161
+ "description": "A column of TraceItem lines (an agent's steps).",
2162
+ "props": {
2163
+ "size": {
2164
+ "type": "enum",
2165
+ "enum": "traceSize",
2166
+ "default": "default",
2167
+ "description": "Line spacing; match the items."
2168
+ }
2169
+ },
2170
+ "example": {
2171
+ "size": "default"
2172
+ }
2173
+ },
2174
+ "TraceItem": {
2175
+ "kind": "macro",
2176
+ "group": "list",
2177
+ "lite": true,
2178
+ "children": "many",
2179
+ "description": "One step line: icon, title, muted detail; may expand to show its children.",
2180
+ "props": {
2181
+ "title": {
2182
+ "type": "string",
2183
+ "required": true,
2184
+ "bindable": true,
2185
+ "description": "What happened."
2186
+ },
2187
+ "icon": {
2188
+ "type": "icon",
2189
+ "description": "The lead glyph."
2190
+ },
2191
+ "description": {
2192
+ "type": "string",
2193
+ "description": "A muted detail (a duration)."
2194
+ },
2195
+ "status": {
2196
+ "type": "enum",
2197
+ "enum": "traceStatus",
2198
+ "description": "running shimmers, error tints, pending dims."
2199
+ },
2200
+ "size": {
2201
+ "type": "enum",
2202
+ "enum": "traceSize",
2203
+ "default": "default",
2204
+ "description": "sm = compact."
2205
+ },
2206
+ "collapsible": {
2207
+ "type": "boolean",
2208
+ "default": false,
2209
+ "description": "The line toggles its children."
2210
+ },
2211
+ "open": {
2212
+ "type": "boolean",
2213
+ "default": false,
2214
+ "bindable": true,
2215
+ "description": "Whether the children show; bind it."
2216
+ }
2217
+ },
2218
+ "events": [
2219
+ "change"
2220
+ ],
2221
+ "example": {
2222
+ "title": "Ran bun test",
2223
+ "icon": "trace-terminal",
2224
+ "description": "4s",
2225
+ "collapsible": true,
2226
+ "open": true
2227
+ }
2228
+ },
2229
+ "Pagination": {
2230
+ "kind": "macro",
2231
+ "group": "navigation",
2232
+ "lite": false,
2233
+ "children": "none",
2234
+ "description": "Previous, next and the current page out of a total.",
2235
+ "props": {
2236
+ "totalPages": {
2237
+ "type": "number",
2238
+ "required": true,
2239
+ "description": "How many pages there are."
2240
+ },
2241
+ "page": {
2242
+ "type": "number",
2243
+ "default": 1,
2244
+ "bindable": true,
2245
+ "description": "The current 1-based page; bind it."
2246
+ }
2247
+ },
2248
+ "events": [
2249
+ "change"
2250
+ ],
2251
+ "example": {
2252
+ "totalPages": 5,
2253
+ "page": 2
2254
+ }
2255
+ },
2256
+ "Breadcrumb": {
2257
+ "kind": "macro",
2258
+ "group": "navigation",
2259
+ "lite": true,
2260
+ "children": "none",
2261
+ "description": "The path to the current page; every item but the last is a link firing `select`.",
2262
+ "props": {
2263
+ "items": {
2264
+ "type": "array",
2265
+ "items": {
2266
+ "type": "object",
2267
+ "shape": "option"
2268
+ },
2269
+ "required": true,
2270
+ "description": "The path from the root to the current page."
2271
+ }
2272
+ },
2273
+ "events": [
2274
+ "select"
2275
+ ],
2276
+ "example": {
2277
+ "items": [
2278
+ {
2279
+ "label": "Boards",
2280
+ "value": "boards"
2281
+ },
2282
+ {
2283
+ "label": "Sprint 12",
2284
+ "value": "sprint-12"
2285
+ },
2286
+ {
2287
+ "label": "EXP-42",
2288
+ "value": "exp-42"
2289
+ }
2290
+ ]
2291
+ }
2292
+ },
2293
+ "Stepper": {
2294
+ "kind": "macro",
2295
+ "group": "navigation",
2296
+ "lite": true,
2297
+ "children": "none",
2298
+ "description": "Wizard progress: numbered steps, finished ones ticked.",
2299
+ "props": {
2300
+ "steps": {
2301
+ "type": "array",
2302
+ "items": {
2303
+ "type": "object",
2304
+ "shape": "step"
2305
+ },
2306
+ "required": true,
2307
+ "description": "The steps in order."
2308
+ },
2309
+ "current": {
2310
+ "type": "number",
2311
+ "default": 0,
2312
+ "bindable": true,
2313
+ "description": "The 0-based index of the active step."
2314
+ },
2315
+ "orientation": {
2316
+ "type": "enum",
2317
+ "enum": "orientation",
2318
+ "default": "horizontal",
2319
+ "description": "In a row or stacked."
2320
+ }
2321
+ },
2322
+ "example": {
2323
+ "steps": [
2324
+ {
2325
+ "label": "Account"
2326
+ },
2327
+ {
2328
+ "label": "Team"
2329
+ },
2330
+ {
2331
+ "label": "Done"
2332
+ }
2333
+ ],
2334
+ "current": 1
2335
+ }
2336
+ },
2337
+ "Dialog": {
2338
+ "kind": "native",
2339
+ "group": "overlay",
2340
+ "lite": false,
2341
+ "children": "many",
2342
+ "slots": [
2343
+ "trigger",
2344
+ "footer"
2345
+ ],
2346
+ "description": "A centred modal over the surface, opened by its trigger slot or by binding `open`.",
2347
+ "props": {
2348
+ "title": {
2349
+ "type": "string",
2350
+ "description": "The dialog heading."
2351
+ },
2352
+ "description": {
2353
+ "type": "string",
2354
+ "description": "A muted line under the heading."
2355
+ },
2356
+ "open": {
2357
+ "type": "boolean",
2358
+ "default": false,
2359
+ "bindable": true,
2360
+ "description": "Whether it shows; bind it to a boolean path."
2361
+ },
2362
+ "dismissible": {
2363
+ "type": "boolean",
2364
+ "default": true,
2365
+ "description": "Closes on the backdrop or Escape."
2366
+ }
2367
+ },
2368
+ "events": [
2369
+ "change"
2370
+ ],
2371
+ "example": {
2372
+ "title": "Delete board?",
2373
+ "description": "This cannot be undone.",
2374
+ "open": false
2375
+ }
2376
+ },
2377
+ "Drawer": {
2378
+ "kind": "native",
2379
+ "group": "overlay",
2380
+ "lite": false,
2381
+ "children": "many",
2382
+ "slots": [
2383
+ "trigger",
2384
+ "footer"
2385
+ ],
2386
+ "description": "A panel sliding in from an edge (a bottom sheet on phones).",
2387
+ "props": {
2388
+ "title": {
2389
+ "type": "string",
2390
+ "description": "The drawer heading."
2391
+ },
2392
+ "description": {
2393
+ "type": "string",
2394
+ "description": "A muted line under the heading."
2395
+ },
2396
+ "open": {
2397
+ "type": "boolean",
2398
+ "default": false,
2399
+ "bindable": true,
2400
+ "description": "Whether it shows; bind it to a boolean path."
2401
+ },
2402
+ "side": {
2403
+ "type": "enum",
2404
+ "enum": "side",
2405
+ "default": "bottom",
2406
+ "responsive": true,
2407
+ "description": "The edge it slides from; `{base: \"bottom\", md: \"right\"}` turns the phone sheet into a side panel on wide surfaces."
2408
+ },
2409
+ "dismissible": {
2410
+ "type": "boolean",
2411
+ "default": true,
2412
+ "description": "Closes on the backdrop or Escape."
2413
+ },
2414
+ "dragToDismiss": {
2415
+ "type": "boolean",
2416
+ "default": true,
2417
+ "description": "Lets a swipe toward its edge close it."
2418
+ }
2419
+ },
2420
+ "events": [
2421
+ "change"
2422
+ ],
2423
+ "example": {
2424
+ "title": "Filters",
2425
+ "side": "bottom",
2426
+ "open": false
2427
+ }
2428
+ },
2429
+ "DockCard": {
2430
+ "kind": "macro",
2431
+ "group": "overlay",
2432
+ "lite": false,
2433
+ "children": "many",
2434
+ "slots": [
2435
+ "footer"
2436
+ ],
2437
+ "description": "A floating one-row card whose children open in a bottom sheet with a pinned footer.",
2438
+ "props": {
2439
+ "label": {
2440
+ "type": "string",
2441
+ "required": true,
2442
+ "bindable": true,
2443
+ "description": "The tinted header word."
2444
+ },
2445
+ "title": {
2446
+ "type": "string",
2447
+ "required": true,
2448
+ "bindable": true,
2449
+ "description": "The one line under the header."
2450
+ },
2451
+ "caption": {
2452
+ "type": "string",
2453
+ "bindable": true,
2454
+ "description": "Muted text after the label."
2455
+ },
2456
+ "meta": {
2457
+ "type": "string",
2458
+ "bindable": true,
2459
+ "description": "Muted text at the header's end."
2460
+ },
2461
+ "icon": {
2462
+ "type": "icon",
2463
+ "description": "The glyph before the label."
2464
+ },
2465
+ "tone": {
2466
+ "type": "enum",
2467
+ "enum": "tone",
2468
+ "default": "neutral",
2469
+ "description": "The glyph's and the label's tone."
2470
+ },
2471
+ "open": {
2472
+ "type": "boolean",
2473
+ "default": false,
2474
+ "bindable": true,
2475
+ "description": "Whether the sheet shows; bind it."
2476
+ }
2477
+ },
2478
+ "events": [
2479
+ "press",
2480
+ "change"
2481
+ ],
2482
+ "example": {
2483
+ "label": "Plan ready",
2484
+ "caption": "Ask dock",
2485
+ "meta": "3 questions",
2486
+ "title": "Fold the composer into the Dock",
2487
+ "icon": "coding-plan",
2488
+ "tone": "primary"
2489
+ }
2490
+ },
2491
+ "AlertDialog": {
2492
+ "kind": "macro",
2493
+ "group": "overlay",
2494
+ "lite": false,
2495
+ "children": "many",
2496
+ "slots": [
2497
+ "trigger"
2498
+ ],
2499
+ "description": "A modal that asks for a confirmation and ignores clicks outside; fires `confirm` or `cancel`.",
2500
+ "props": {
2501
+ "title": {
2502
+ "type": "string",
2503
+ "required": true,
2504
+ "description": "The question."
2505
+ },
2506
+ "description": {
2507
+ "type": "string",
2508
+ "description": "What will happen."
2509
+ },
2510
+ "confirmLabel": {
2511
+ "type": "string",
2512
+ "default": "$string.confirm",
2513
+ "description": "The confirming button's text."
2514
+ },
2515
+ "cancelLabel": {
2516
+ "type": "string",
2517
+ "default": "$string.cancel",
2518
+ "description": "The cancelling button's text."
2519
+ },
2520
+ "destructive": {
2521
+ "type": "boolean",
2522
+ "default": false,
2523
+ "description": "Styles the confirming button as dangerous."
2524
+ },
2525
+ "open": {
2526
+ "type": "boolean",
2527
+ "default": false,
2528
+ "bindable": true,
2529
+ "description": "Whether it shows; bind it."
2530
+ }
2531
+ },
2532
+ "events": [
2533
+ "confirm",
2534
+ "cancel",
2535
+ "change"
2536
+ ],
2537
+ "example": {
2538
+ "title": "Delete board?",
2539
+ "description": "This cannot be undone.",
2540
+ "destructive": true
2541
+ }
2542
+ },
2543
+ "Popover": {
2544
+ "kind": "native",
2545
+ "group": "overlay",
2546
+ "lite": false,
2547
+ "children": "many",
2548
+ "slots": [
2549
+ "trigger"
2550
+ ],
2551
+ "description": "A small panel anchored to its trigger, opened on press.",
2552
+ "props": {
2553
+ "open": {
2554
+ "type": "boolean",
2555
+ "default": false,
2556
+ "bindable": true,
2557
+ "description": "Whether it shows; bind it."
2558
+ },
2559
+ "side": {
2560
+ "type": "enum",
2561
+ "enum": "side",
2562
+ "default": "bottom",
2563
+ "description": "Preferred side of the trigger."
2564
+ },
2565
+ "openOn": {
2566
+ "type": "enum",
2567
+ "enum": "openOn",
2568
+ "default": "press",
2569
+ "description": "Press, or hover over the trigger (press on touch)."
2570
+ }
2571
+ },
2572
+ "events": [
2573
+ "change"
2574
+ ],
2575
+ "example": {
2576
+ "side": "bottom"
2577
+ }
2578
+ },
2579
+ "Tooltip": {
2580
+ "kind": "native",
2581
+ "group": "overlay",
2582
+ "lite": false,
2583
+ "children": "many",
2584
+ "description": "A short hint shown on hover or long-press over its children.",
2585
+ "props": {
2586
+ "content": {
2587
+ "type": "string",
2588
+ "required": true,
2589
+ "description": "The hint text."
2590
+ },
2591
+ "side": {
2592
+ "type": "enum",
2593
+ "enum": "side",
2594
+ "default": "top",
2595
+ "description": "Preferred side of the anchor."
2596
+ }
2597
+ },
2598
+ "example": {
2599
+ "content": "Copy link"
2600
+ }
2601
+ },
2602
+ "Menu": {
2603
+ "kind": "native",
2604
+ "group": "overlay",
2605
+ "lite": false,
2606
+ "children": "one",
2607
+ "description": "A menu of actions, checkboxes, groups and submenus, opened by pressing its child or right-click / long-press.",
2608
+ "props": {
2609
+ "label": {
2610
+ "type": "string",
2611
+ "description": "The default trigger's text when no child is given."
2612
+ },
2613
+ "icon": {
2614
+ "type": "icon",
2615
+ "description": "The default trigger's icon."
2616
+ },
2617
+ "items": {
2618
+ "type": "array",
2619
+ "items": {
2620
+ "type": "object",
2621
+ "shape": "menuItem"
2622
+ },
2623
+ "required": true,
2624
+ "description": "The entries in order."
2625
+ },
2626
+ "openOn": {
2627
+ "type": "enum",
2628
+ "enum": "menuOpenOn",
2629
+ "default": "press",
2630
+ "description": "A press on the child, or the context gesture over it."
2631
+ }
2632
+ },
2633
+ "events": [
2634
+ "select"
2635
+ ],
2636
+ "example": {
2637
+ "label": "More",
2638
+ "items": [
2639
+ {
2640
+ "label": "Rename",
2641
+ "value": "rename"
2642
+ },
2643
+ {
2644
+ "label": "Delete",
2645
+ "value": "delete",
2646
+ "destructive": true
2647
+ }
2648
+ ]
2649
+ }
2650
+ },
2651
+ "Toast": {
2652
+ "kind": "native",
2653
+ "group": "overlay",
2654
+ "lite": false,
2655
+ "children": "none",
2656
+ "description": "A transient notice in the toast layer; render one per notice with `open` bound.",
2657
+ "props": {
2658
+ "title": {
2659
+ "type": "string",
2660
+ "required": true,
2661
+ "bindable": true,
2662
+ "description": "The notice."
2663
+ },
2664
+ "description": {
2665
+ "type": "string",
2666
+ "bindable": true,
2667
+ "description": "Detail under the notice."
2668
+ },
2669
+ "type": {
2670
+ "type": "enum",
2671
+ "enum": "alertType",
2672
+ "default": "info",
2673
+ "description": "Severity: icon and tone (`error` interrupts readers)."
2674
+ },
2675
+ "open": {
2676
+ "type": "boolean",
2677
+ "default": true,
2678
+ "bindable": true,
2679
+ "description": "Whether it shows; bind it so the host learns of a dismissal."
2680
+ },
2681
+ "duration": {
2682
+ "type": "number",
2683
+ "default": 5000,
2684
+ "description": "Ms until it dismisses itself; 0 = never."
2685
+ },
2686
+ "actionLabel": {
2687
+ "type": "string",
2688
+ "description": "A button label; pressing it fires `action`."
2689
+ },
2690
+ "dismissible": {
2691
+ "type": "boolean",
2692
+ "default": true,
2693
+ "description": "Shows the close control."
2694
+ }
2695
+ },
2696
+ "events": [
2697
+ "dismiss",
2698
+ "action",
2699
+ "change"
2700
+ ],
2701
+ "example": {
2702
+ "title": "Couldn't save the board",
2703
+ "description": "The server did not answer.",
2704
+ "type": "error",
2705
+ "actionLabel": "Retry"
2706
+ }
2707
+ },
2708
+ "Badge": {
2709
+ "kind": "macro",
2710
+ "group": "feedback",
2711
+ "lite": true,
2712
+ "children": "none",
2713
+ "description": "A small count or status label.",
2714
+ "props": {
2715
+ "text": {
2716
+ "type": "string",
2717
+ "required": true,
2718
+ "bindable": true,
2719
+ "description": "The label or number."
2720
+ },
2721
+ "variant": {
2722
+ "type": "enum",
2723
+ "enum": "variant",
2724
+ "default": "default",
2725
+ "bindable": true,
2726
+ "description": "Filled, secondary, outlined or destructive."
2727
+ },
2728
+ "icon": {
2729
+ "type": "icon",
2730
+ "description": "An icon before the text."
2731
+ }
2732
+ },
2733
+ "example": {
2734
+ "text": "Active",
2735
+ "variant": "default"
2736
+ }
2737
+ },
2738
+ "Alert": {
2739
+ "kind": "macro",
2740
+ "group": "feedback",
2741
+ "lite": true,
2742
+ "children": "none",
2743
+ "description": "An inline banner with an icon, a title and a message.",
2744
+ "props": {
2745
+ "title": {
2746
+ "type": "string",
2747
+ "required": true,
2748
+ "description": "The banner heading."
2749
+ },
2750
+ "message": {
2751
+ "type": "string",
2752
+ "description": "The detail under the heading."
2753
+ },
2754
+ "type": {
2755
+ "type": "enum",
2756
+ "enum": "alertType",
2757
+ "default": "info",
2758
+ "description": "The severity, which picks the icon and tone."
2759
+ }
2760
+ },
2761
+ "example": {
2762
+ "title": "Saved",
2763
+ "message": "Your changes have been saved.",
2764
+ "type": "success"
2765
+ }
2766
+ },
2767
+ "Chip": {
2768
+ "kind": "macro",
2769
+ "group": "feedback",
2770
+ "lite": true,
2771
+ "children": "none",
2772
+ "slots": [
2773
+ "leading"
2774
+ ],
2775
+ "description": "A small token: a pill (filter, label, state) or a rect naming an entity with a glyph or image; removable.",
2776
+ "props": {
2777
+ "label": {
2778
+ "type": "string",
2779
+ "required": true,
2780
+ "bindable": true,
2781
+ "description": "The chip text."
2782
+ },
2783
+ "shape": {
2784
+ "type": "enum",
2785
+ "enum": "chipShape",
2786
+ "default": "pill",
2787
+ "description": "A rounded pill or a squarer entity chip."
2788
+ },
2789
+ "selected": {
2790
+ "type": "boolean",
2791
+ "default": false,
2792
+ "description": "Draws it as the active choice."
2793
+ },
2794
+ "tone": {
2795
+ "type": "enum",
2796
+ "enum": "tone",
2797
+ "default": "neutral",
2798
+ "bindable": true,
2799
+ "description": "Colour tone of the chip."
2800
+ },
2801
+ "dot": {
2802
+ "type": "color",
2803
+ "description": "A colour dot before the text (a label chip)."
2804
+ },
2805
+ "icon": {
2806
+ "type": "icon",
2807
+ "description": "An icon before the text."
2808
+ },
2809
+ "image": {
2810
+ "type": "url",
2811
+ "description": "A round picture instead of the icon."
2812
+ },
2813
+ "detail": {
2814
+ "type": "string",
2815
+ "description": "Muted text after the label."
2816
+ },
2817
+ "removable": {
2818
+ "type": "boolean",
2819
+ "default": false,
2820
+ "description": "Shows a remove control that fires `remove`."
2821
+ },
2822
+ "pressable": {
2823
+ "type": "boolean",
2824
+ "default": false,
2825
+ "description": "Makes it a press target that fires `press`."
2826
+ }
2827
+ },
2828
+ "events": [
2829
+ "press",
2830
+ "remove"
2831
+ ],
2832
+ "example": {
2833
+ "label": "Drafts",
2834
+ "selected": true
2835
+ }
2836
+ },
2837
+ "EmptyState": {
2838
+ "kind": "macro",
2839
+ "group": "feedback",
2840
+ "lite": true,
2841
+ "children": "none",
2842
+ "description": "What an empty screen or list says: a short title; `page` adds the icon disc, a sentence and an action, `list` one muted line.",
2843
+ "props": {
2844
+ "icon": {
2845
+ "type": "icon",
2846
+ "required": true,
2847
+ "description": "The glyph: in the disc on `page`, bare on `list`."
2848
+ },
2849
+ "title": {
2850
+ "type": "string",
2851
+ "required": true,
2852
+ "description": "What is empty."
2853
+ },
2854
+ "description": {
2855
+ "type": "string",
2856
+ "description": "The next step, `page` only."
2857
+ },
2858
+ "actionLabel": {
2859
+ "type": "string",
2860
+ "description": "A button label, `page` only; pressing it fires `press`."
2861
+ },
2862
+ "size": {
2863
+ "type": "enum",
2864
+ "values": [
2865
+ "page",
2866
+ "list"
2867
+ ],
2868
+ "default": "page",
2869
+ "description": "page = a whole screen's empty state with disc, sentence and action; list = one muted line under a bare glyph, no description, no action."
2870
+ }
2871
+ },
2872
+ "events": [
2873
+ "press"
2874
+ ],
2875
+ "example": {
2876
+ "icon": "nav-inbox",
2877
+ "title": "No notifications",
2878
+ "description": "You are all caught up."
2879
+ }
2880
+ },
2881
+ "Progress": {
2882
+ "kind": "macro",
2883
+ "group": "feedback",
2884
+ "lite": true,
2885
+ "children": "none",
2886
+ "description": "A horizontal progress bar with an optional label.",
2887
+ "props": {
2888
+ "value": {
2889
+ "type": "number",
2890
+ "required": true,
2891
+ "bindable": true,
2892
+ "description": "The current amount, 0 to max."
2893
+ },
2894
+ "max": {
2895
+ "type": "number",
2896
+ "default": 100,
2897
+ "description": "The full amount."
2898
+ },
2899
+ "label": {
2900
+ "type": "string",
2901
+ "description": "A caption above the bar."
2902
+ },
2903
+ "tone": {
2904
+ "type": "enum",
2905
+ "enum": "tone",
2906
+ "default": "primary",
2907
+ "description": "The fill colour tone."
2908
+ }
2909
+ },
2910
+ "example": {
2911
+ "value": 65,
2912
+ "max": 100,
2913
+ "label": "Upload"
2914
+ }
2915
+ },
2916
+ "Meter": {
2917
+ "kind": "macro",
2918
+ "group": "feedback",
2919
+ "lite": true,
2920
+ "children": "none",
2921
+ "description": "A usage track: a bar of coloured segments against a maximum, with a caption and a value.",
2922
+ "props": {
2923
+ "segments": {
2924
+ "type": "array",
2925
+ "items": {
2926
+ "type": "object",
2927
+ "shape": "segment"
2928
+ },
2929
+ "required": true,
2930
+ "description": "The slices in order."
2931
+ },
2932
+ "max": {
2933
+ "type": "number",
2934
+ "default": 100,
2935
+ "description": "The full amount."
2936
+ },
2937
+ "label": {
2938
+ "type": "string",
2939
+ "description": "A caption before the track."
2940
+ },
2941
+ "value": {
2942
+ "type": "string",
2943
+ "description": "A formatted value after the track."
2944
+ }
2945
+ },
2946
+ "example": {
2947
+ "segments": [
2948
+ {
2949
+ "value": 40,
2950
+ "tone": "primary"
2951
+ },
2952
+ {
2953
+ "value": 25,
2954
+ "tone": "warning"
2955
+ }
2956
+ ],
2957
+ "max": 100,
2958
+ "label": "Storage",
2959
+ "value": "650 MB of 1 GB"
2960
+ }
2961
+ },
2962
+ "Ring": {
2963
+ "kind": "native",
2964
+ "group": "feedback",
2965
+ "lite": true,
2966
+ "children": "none",
2967
+ "description": "A circular progress ring for a fraction, sized like an icon.",
2968
+ "props": {
2969
+ "value": {
2970
+ "type": "number",
2971
+ "required": true,
2972
+ "bindable": true,
2973
+ "description": "The fraction 0 to 1."
2974
+ },
2975
+ "size": {
2976
+ "type": "enum",
2977
+ "enum": "controlSize",
2978
+ "default": "default",
2979
+ "description": "Diameter class."
2980
+ },
2981
+ "tone": {
2982
+ "type": "enum",
2983
+ "enum": "tone",
2984
+ "default": "primary",
2985
+ "description": "The arc colour tone."
2986
+ },
2987
+ "label": {
2988
+ "type": "string",
2989
+ "description": "An accessibility label."
2990
+ }
2991
+ },
2992
+ "example": {
2993
+ "value": 0.62,
2994
+ "tone": "primary"
2995
+ }
2996
+ },
2997
+ "Spinner": {
2998
+ "kind": "native",
2999
+ "group": "feedback",
3000
+ "lite": false,
3001
+ "children": "none",
3002
+ "description": "An indeterminate activity indicator.",
3003
+ "props": {
3004
+ "size": {
3005
+ "type": "enum",
3006
+ "enum": "spinnerSize",
3007
+ "default": "default",
3008
+ "description": "Diameter class; `xs` = inline in a header."
3009
+ },
3010
+ "label": {
3011
+ "type": "string",
3012
+ "description": "A caption or accessibility label."
3013
+ }
3014
+ },
3015
+ "example": {
3016
+ "size": "default"
3017
+ }
3018
+ },
3019
+ "Skeleton": {
3020
+ "kind": "native",
3021
+ "group": "feedback",
3022
+ "lite": true,
3023
+ "children": "none",
3024
+ "description": "A pulsing placeholder: a block, or `rows` rows.",
3025
+ "props": {
3026
+ "width": {
3027
+ "type": "string",
3028
+ "description": "A length (px or %); defaults to the full width."
3029
+ },
3030
+ "height": {
3031
+ "type": "string",
3032
+ "description": "A length (px); defaults to one text line."
3033
+ },
3034
+ "rounded": {
3035
+ "type": "boolean",
3036
+ "default": false,
3037
+ "description": "A circle instead of a bar."
3038
+ },
3039
+ "rows": {
3040
+ "type": "number",
3041
+ "description": "Rows instead of a block."
3042
+ },
3043
+ "rowHeight": {
3044
+ "type": "number",
3045
+ "description": "A row's height in px."
3046
+ },
3047
+ "dot": {
3048
+ "type": "boolean",
3049
+ "default": true,
3050
+ "description": "A dot per row."
3051
+ }
3052
+ },
3053
+ "example": {
3054
+ "width": "60%",
3055
+ "height": "16px"
3056
+ }
3057
+ },
3058
+ "Table": {
3059
+ "kind": "native",
3060
+ "group": "data",
3061
+ "lite": false,
3062
+ "children": "none",
3063
+ "slots": [
3064
+ "*"
3065
+ ],
3066
+ "slotScope": "row",
3067
+ "description": "A data table of typed columns: sorting, selection, widths, alignment, windowed; `slot` columns render components.",
3068
+ "props": {
3069
+ "columns": {
3070
+ "type": "array",
3071
+ "items": {
3072
+ "type": "object",
3073
+ "shape": "column"
3074
+ },
3075
+ "required": true,
3076
+ "description": "The columns in order."
3077
+ },
3078
+ "rows": {
3079
+ "type": "array",
3080
+ "items": {
3081
+ "type": "object"
3082
+ },
3083
+ "required": true,
3084
+ "bindable": true,
3085
+ "description": "One object per row keyed by column key; bind it for live data."
3086
+ },
3087
+ "rowKey": {
3088
+ "type": "string",
3089
+ "default": "id",
3090
+ "description": "The row field that identifies a row."
3091
+ },
3092
+ "sort": {
3093
+ "type": "object",
3094
+ "shape": "sort",
3095
+ "bindable": true,
3096
+ "description": "The active sort; bound = you order `rows`, unbound = sorted locally."
3097
+ },
3098
+ "selectable": {
3099
+ "type": "enum",
3100
+ "enum": "selectable",
3101
+ "default": "none",
3102
+ "description": "Row selection (many = a checkbox column)."
3103
+ },
3104
+ "selected": {
3105
+ "type": "array",
3106
+ "items": {
3107
+ "type": "string"
3108
+ },
3109
+ "bindable": true,
3110
+ "description": "The selected row keys; bind them."
3111
+ },
3112
+ "caption": {
3113
+ "type": "string",
3114
+ "description": "A caption under the table."
3115
+ },
3116
+ "emptyText": {
3117
+ "type": "string",
3118
+ "default": "$string.noResults",
3119
+ "description": "Shown when there are no rows."
3120
+ },
3121
+ "striped": {
3122
+ "type": "boolean",
3123
+ "default": false,
3124
+ "description": "Alternates row fills."
3125
+ },
3126
+ "density": {
3127
+ "type": "enum",
3128
+ "enum": "density",
3129
+ "default": "default",
3130
+ "description": "Row height class."
3131
+ },
3132
+ "stickyHeader": {
3133
+ "type": "boolean",
3134
+ "default": false,
3135
+ "description": "Keeps the header visible while the rows scroll."
3136
+ }
3137
+ },
3138
+ "events": [
3139
+ "sort",
3140
+ "select",
3141
+ "rowPress"
3142
+ ],
3143
+ "example": {
3144
+ "columns": [
3145
+ {
3146
+ "key": "name",
3147
+ "label": "Name"
3148
+ },
3149
+ {
3150
+ "key": "role",
3151
+ "label": "Role"
3152
+ },
3153
+ {
3154
+ "key": "runs",
3155
+ "label": "Runs",
3156
+ "type": "number",
3157
+ "sortable": true,
3158
+ "align": "end"
3159
+ }
3160
+ ],
3161
+ "rows": [
3162
+ {
3163
+ "id": "a",
3164
+ "name": "Alice",
3165
+ "role": "Owner",
3166
+ "runs": 12
3167
+ },
3168
+ {
3169
+ "id": "b",
3170
+ "name": "Bob",
3171
+ "role": "Member",
3172
+ "runs": 3
3173
+ }
3174
+ ]
3175
+ }
3176
+ },
3177
+ "Chart": {
3178
+ "kind": "native",
3179
+ "group": "data",
3180
+ "lite": false,
3181
+ "children": "none",
3182
+ "description": "A bar, stacked-bar, line, area, pie, donut or sparkline chart with axes, legend and tooltip.",
3183
+ "props": {
3184
+ "kind": {
3185
+ "type": "enum",
3186
+ "enum": "chartKind",
3187
+ "required": true,
3188
+ "description": "The chart form."
3189
+ },
3190
+ "categories": {
3191
+ "type": "array",
3192
+ "items": {
3193
+ "type": "string"
3194
+ },
3195
+ "bindable": true,
3196
+ "description": "The x-axis labels, or the pie slices; omit for a sparkline."
3197
+ },
3198
+ "series": {
3199
+ "type": "array",
3200
+ "items": {
3201
+ "type": "object",
3202
+ "shape": "series"
3203
+ },
3204
+ "required": true,
3205
+ "bindable": true,
3206
+ "description": "One per line, bar group or pie ring."
3207
+ },
3208
+ "title": {
3209
+ "type": "string",
3210
+ "description": "A title above the chart."
3211
+ },
3212
+ "height": {
3213
+ "type": "number",
3214
+ "default": 200,
3215
+ "description": "The whole chart's height in px (title, legend, axes inside); the width is the box's."
3216
+ },
3217
+ "xLabel": {
3218
+ "type": "string",
3219
+ "description": "A caption under the x axis."
3220
+ },
3221
+ "yLabel": {
3222
+ "type": "string",
3223
+ "description": "A caption beside the y axis."
3224
+ },
3225
+ "min": {
3226
+ "type": "number",
3227
+ "description": "The y-axis floor; defaults to 0."
3228
+ },
3229
+ "max": {
3230
+ "type": "number",
3231
+ "description": "The y-axis ceiling; defaults to the largest value."
3232
+ },
3233
+ "showAxes": {
3234
+ "type": "boolean",
3235
+ "default": true,
3236
+ "description": "Draws the axes with tick labels."
3237
+ },
3238
+ "showGrid": {
3239
+ "type": "boolean",
3240
+ "default": true,
3241
+ "description": "Draws horizontal grid lines at the ticks."
3242
+ },
3243
+ "showLegend": {
3244
+ "type": "boolean",
3245
+ "default": true,
3246
+ "description": "Draws the legend (2+ series or slices)."
3247
+ },
3248
+ "showValues": {
3249
+ "type": "boolean",
3250
+ "default": false,
3251
+ "description": "Writes each value on its bar, point or slice."
3252
+ }
3253
+ },
3254
+ "example": {
3255
+ "kind": "bar",
3256
+ "categories": [
3257
+ "Mon",
3258
+ "Tue"
3259
+ ],
3260
+ "series": [
3261
+ {
3262
+ "name": "Runs",
3263
+ "values": [
3264
+ 3,
3265
+ 5
3266
+ ]
3267
+ }
3268
+ ]
3269
+ }
3270
+ },
3271
+ "Sparkline": {
3272
+ "kind": "macro",
3273
+ "group": "data",
3274
+ "lite": false,
3275
+ "children": "none",
3276
+ "description": "A tiny inline trend line of recent values, no axes or legend.",
3277
+ "props": {
3278
+ "values": {
3279
+ "type": "array",
3280
+ "items": {
3281
+ "type": "number"
3282
+ },
3283
+ "required": true,
3284
+ "bindable": true,
3285
+ "description": "The points, oldest first."
3286
+ },
3287
+ "tone": {
3288
+ "type": "enum",
3289
+ "enum": "tone",
3290
+ "default": "primary",
3291
+ "description": "The line colour tone."
3292
+ },
3293
+ "height": {
3294
+ "type": "number",
3295
+ "default": 24,
3296
+ "description": "The height in px."
3297
+ }
3298
+ },
3299
+ "example": {
3300
+ "values": [
3301
+ 1,
3302
+ 3,
3303
+ 2,
3304
+ 5,
3305
+ 4
3306
+ ]
3307
+ }
3308
+ },
3309
+ "StatTile": {
3310
+ "kind": "macro",
3311
+ "group": "data",
3312
+ "lite": true,
3313
+ "children": "none",
3314
+ "description": "A dashboard tile: label, big value, toned change, trend sparkline.",
3315
+ "props": {
3316
+ "label": {
3317
+ "type": "string",
3318
+ "required": true,
3319
+ "bindable": true,
3320
+ "description": "What is measured."
3321
+ },
3322
+ "value": {
3323
+ "type": "string",
3324
+ "required": true,
3325
+ "bindable": true,
3326
+ "description": "The formatted value."
3327
+ },
3328
+ "delta": {
3329
+ "type": "string",
3330
+ "bindable": true,
3331
+ "description": "The change (`+12 %`)."
3332
+ },
3333
+ "tone": {
3334
+ "type": "enum",
3335
+ "enum": "tone",
3336
+ "default": "neutral",
3337
+ "bindable": true,
3338
+ "description": "The change's tone."
3339
+ },
3340
+ "trend": {
3341
+ "type": "array",
3342
+ "items": {
3343
+ "type": "number"
3344
+ },
3345
+ "bindable": true,
3346
+ "description": "Recent values (sparkline)."
3347
+ }
3348
+ },
3349
+ "example": {
3350
+ "label": "Active users",
3351
+ "value": "1,284",
3352
+ "delta": "+12 %",
3353
+ "tone": "success",
3354
+ "trend": [
3355
+ 3,
3356
+ 4,
3357
+ 3,
3358
+ 5,
3359
+ 6,
3360
+ 8
3361
+ ]
3362
+ }
3363
+ },
3364
+ "Button": {
3365
+ "kind": "native",
3366
+ "group": "action",
3367
+ "lite": true,
3368
+ "children": "one",
3369
+ "description": "A press target with a label and optional icon (or one custom child).",
3370
+ "props": {
3371
+ "label": {
3372
+ "type": "string",
3373
+ "bindable": true,
3374
+ "description": "The button text (omit for an icon-only button)."
3375
+ },
3376
+ "icon": {
3377
+ "type": "icon",
3378
+ "bindable": true,
3379
+ "description": "An icon before the label, or alone with size `icon`."
3380
+ },
3381
+ "variant": {
3382
+ "type": "enum",
3383
+ "enum": "variant",
3384
+ "default": "default",
3385
+ "description": "`default` = the primary action, `destructive` = dangerous, `ghost`/`link` = quiet."
3386
+ },
3387
+ "size": {
3388
+ "type": "enum",
3389
+ "enum": "size",
3390
+ "default": "default",
3391
+ "description": "Control height class; `icon` is a square icon-only button."
3392
+ },
3393
+ "disabled": {
3394
+ "type": "boolean",
3395
+ "default": false,
3396
+ "bindable": true,
3397
+ "description": "Shows it inert."
3398
+ },
3399
+ "loading": {
3400
+ "type": "boolean",
3401
+ "default": false,
3402
+ "description": "Pending: refuses presses, then shows a spinner."
3403
+ },
3404
+ "pendingLabel": {
3405
+ "type": "string",
3406
+ "description": "Label while loading."
3407
+ },
3408
+ "submit": {
3409
+ "type": "boolean",
3410
+ "default": false,
3411
+ "description": "Submits the enclosing Form on press."
3412
+ }
3413
+ },
3414
+ "events": [
3415
+ "press"
3416
+ ],
3417
+ "example": {
3418
+ "label": "Submit",
3419
+ "variant": "default"
3420
+ }
3421
+ },
3422
+ "Link": {
3423
+ "kind": "native",
3424
+ "group": "action",
3425
+ "lite": true,
3426
+ "children": "none",
3427
+ "description": "Inline link text that opens a URL or fires `press`.",
3428
+ "props": {
3429
+ "label": {
3430
+ "type": "string",
3431
+ "required": true,
3432
+ "bindable": true,
3433
+ "description": "The link text."
3434
+ },
3435
+ "href": {
3436
+ "type": "url",
3437
+ "description": "The URL to open; omit to handle `press` yourself."
3438
+ },
3439
+ "external": {
3440
+ "type": "boolean",
3441
+ "default": false,
3442
+ "description": "Marks it as leaving the app."
3443
+ }
3444
+ },
3445
+ "events": [
3446
+ "press"
3447
+ ],
3448
+ "example": {
3449
+ "label": "Open docs",
3450
+ "href": "https://ui.exponential.at"
3451
+ }
3452
+ },
3453
+ "Toggle": {
3454
+ "kind": "native",
3455
+ "group": "action",
3456
+ "lite": false,
3457
+ "children": "none",
3458
+ "description": "A two-state button that stays pressed.",
3459
+ "props": {
3460
+ "label": {
3461
+ "type": "string",
3462
+ "required": true,
3463
+ "description": "The button text or accessibility label."
3464
+ },
3465
+ "icon": {
3466
+ "type": "icon",
3467
+ "description": "An icon before or instead of the label."
3468
+ },
3469
+ "pressed": {
3470
+ "type": "boolean",
3471
+ "default": false,
3472
+ "bindable": true,
3473
+ "description": "The state; bind it."
3474
+ },
3475
+ "variant": {
3476
+ "type": "enum",
3477
+ "values": [
3478
+ "default",
3479
+ "outline"
3480
+ ],
3481
+ "default": "default",
3482
+ "description": "Plain or outlined."
3483
+ },
3484
+ "size": {
3485
+ "type": "enum",
3486
+ "enum": "controlSize",
3487
+ "default": "default",
3488
+ "description": "Control height class."
3489
+ }
3490
+ },
3491
+ "events": [
3492
+ "change"
3493
+ ],
3494
+ "example": {
3495
+ "label": "Bold",
3496
+ "icon": "editor-bold",
3497
+ "pressed": false
3498
+ }
3499
+ },
3500
+ "Form": {
3501
+ "kind": "native",
3502
+ "group": "input",
3503
+ "lite": true,
3504
+ "children": "many",
3505
+ "description": "Collects its fields by `name` and fires `submit` with their values once every check passes.",
3506
+ "props": {
3507
+ "name": {
3508
+ "type": "string",
3509
+ "required": true,
3510
+ "description": "The form's key in the submit payload."
3511
+ },
3512
+ "disabled": {
3513
+ "type": "boolean",
3514
+ "default": false,
3515
+ "bindable": true,
3516
+ "description": "Makes every field inert."
3517
+ },
3518
+ "busy": {
3519
+ "type": "boolean",
3520
+ "default": false,
3521
+ "bindable": true,
3522
+ "description": "Shows the submit pending and refuses another submit."
3523
+ },
3524
+ "summary": {
3525
+ "type": "boolean",
3526
+ "default": false,
3527
+ "description": "Also lists every failed check above the fields."
3528
+ }
3529
+ },
3530
+ "events": [
3531
+ "submit",
3532
+ "invalid",
3533
+ "change"
3534
+ ],
3535
+ "example": {
3536
+ "name": "profile"
3537
+ }
3538
+ },
3539
+ "FieldGroup": {
3540
+ "kind": "macro",
3541
+ "group": "input",
3542
+ "lite": true,
3543
+ "children": "many",
3544
+ "description": "Fields side by side (Starts / Ends) that stack on phones.",
3545
+ "props": {
3546
+ "columns": {
3547
+ "type": "number",
3548
+ "default": 2,
3549
+ "description": "Columns from md up (1-4)."
3550
+ }
3551
+ },
3552
+ "example": {
3553
+ "columns": 2
3554
+ }
3555
+ },
3556
+ "FormActions": {
3557
+ "kind": "macro",
3558
+ "group": "input",
3559
+ "lite": true,
3560
+ "children": "many",
3561
+ "description": "The end-aligned button row: children, Cancel, then THE submit (the one primary).",
3562
+ "props": {
3563
+ "submit": {
3564
+ "type": "string",
3565
+ "required": true,
3566
+ "bindable": true,
3567
+ "description": "The submit label."
3568
+ },
3569
+ "cancel": {
3570
+ "type": "boolean",
3571
+ "default": false,
3572
+ "description": "An outline Cancel firing `cancel`."
3573
+ },
3574
+ "destructive": {
3575
+ "type": "boolean",
3576
+ "default": false,
3577
+ "description": "A dangerous submit."
3578
+ }
3579
+ },
3580
+ "events": [
3581
+ "cancel"
3582
+ ],
3583
+ "example": {
3584
+ "submit": "Save",
3585
+ "cancel": true
3586
+ }
3587
+ },
3588
+ "Input": {
3589
+ "kind": "native",
3590
+ "group": "input",
3591
+ "lite": true,
3592
+ "children": "none",
3593
+ "description": "A single-line text field.",
3594
+ "props": {
3595
+ "label": {
3596
+ "type": "string",
3597
+ "required": true,
3598
+ "description": "The field label."
3599
+ },
3600
+ "name": {
3601
+ "type": "string",
3602
+ "required": true,
3603
+ "description": "The field's key in the submitted data."
3604
+ },
3605
+ "type": {
3606
+ "type": "enum",
3607
+ "enum": "inputType",
3608
+ "default": "text",
3609
+ "description": "The keyboard and masking kind."
3610
+ },
3611
+ "placeholder": {
3612
+ "type": "string",
3613
+ "description": "Hint text while empty."
3614
+ },
3615
+ "value": {
3616
+ "type": "string",
3617
+ "bindable": true,
3618
+ "description": "The text; bind it to a data path."
3619
+ },
3620
+ "disabled": {
3621
+ "type": "boolean",
3622
+ "default": false,
3623
+ "description": "Shows it inert."
3624
+ },
3625
+ "checks": {
3626
+ "type": "array",
3627
+ "items": {
3628
+ "type": "object",
3629
+ "shape": "check"
3630
+ },
3631
+ "description": "Validation rules (required, email, length, regex, numeric)."
3632
+ },
3633
+ "validateOn": {
3634
+ "type": "enum",
3635
+ "enum": "validateOn",
3636
+ "default": "blur",
3637
+ "description": "When the checks run."
3638
+ }
3639
+ },
3640
+ "events": [
3641
+ "change",
3642
+ "submit",
3643
+ "focus",
3644
+ "blur"
3645
+ ],
3646
+ "example": {
3647
+ "label": "Email",
3648
+ "name": "email",
3649
+ "type": "email",
3650
+ "placeholder": "you@example.com"
3651
+ }
3652
+ },
3653
+ "Textarea": {
3654
+ "kind": "native",
3655
+ "group": "input",
3656
+ "lite": true,
3657
+ "children": "none",
3658
+ "description": "A multi-line text field.",
3659
+ "props": {
3660
+ "label": {
3661
+ "type": "string",
3662
+ "required": true,
3663
+ "description": "The field label."
3664
+ },
3665
+ "name": {
3666
+ "type": "string",
3667
+ "required": true,
3668
+ "description": "The field's key in the submitted data."
3669
+ },
3670
+ "placeholder": {
3671
+ "type": "string",
3672
+ "description": "Hint text while empty."
3673
+ },
3674
+ "rows": {
3675
+ "type": "number",
3676
+ "default": 3,
3677
+ "description": "Visible lines (the minimum when autosizing)."
3678
+ },
3679
+ "autosize": {
3680
+ "type": "boolean",
3681
+ "default": false,
3682
+ "description": "Grows with the text from `rows` up to `maxRows`."
3683
+ },
3684
+ "maxRows": {
3685
+ "type": "number",
3686
+ "description": "Autosize stops growing here and scrolls."
3687
+ },
3688
+ "value": {
3689
+ "type": "string",
3690
+ "bindable": true,
3691
+ "description": "The text; bind it to a data path."
3692
+ },
3693
+ "disabled": {
3694
+ "type": "boolean",
3695
+ "default": false,
3696
+ "description": "Shows it inert."
3697
+ },
3698
+ "checks": {
3699
+ "type": "array",
3700
+ "items": {
3701
+ "type": "object",
3702
+ "shape": "check"
3703
+ },
3704
+ "description": "Validation rules."
3705
+ },
3706
+ "validateOn": {
3707
+ "type": "enum",
3708
+ "enum": "validateOn",
3709
+ "default": "blur",
3710
+ "description": "When the checks run."
3711
+ }
3712
+ },
3713
+ "events": [
3714
+ "change",
3715
+ "focus",
3716
+ "blur"
3717
+ ],
3718
+ "example": {
3719
+ "label": "Notes",
3720
+ "name": "notes",
3721
+ "rows": 4
3722
+ }
3723
+ },
3724
+ "NumberField": {
3725
+ "kind": "native",
3726
+ "group": "input",
3727
+ "lite": true,
3728
+ "children": "none",
3729
+ "description": "A numeric field with steppers, min/max/step clamping and locale formatting.",
3730
+ "props": {
3731
+ "label": {
3732
+ "type": "string",
3733
+ "required": true,
3734
+ "description": "The field label."
3735
+ },
3736
+ "name": {
3737
+ "type": "string",
3738
+ "required": true,
3739
+ "description": "The field's key in the submitted data."
3740
+ },
3741
+ "value": {
3742
+ "type": "number",
3743
+ "bindable": true,
3744
+ "description": "The number; bind it."
3745
+ },
3746
+ "min": {
3747
+ "type": "number",
3748
+ "description": "The lowest value."
3749
+ },
3750
+ "max": {
3751
+ "type": "number",
3752
+ "description": "The highest value."
3753
+ },
3754
+ "step": {
3755
+ "type": "number",
3756
+ "default": 1,
3757
+ "description": "What the steppers and arrow keys add; Shift multiplies by 10."
3758
+ },
3759
+ "precision": {
3760
+ "type": "number",
3761
+ "description": "Decimal places shown; defaults to the step's."
3762
+ },
3763
+ "unit": {
3764
+ "type": "string",
3765
+ "description": "A suffix after the number (`kg`, `%`)."
3766
+ },
3767
+ "placeholder": {
3768
+ "type": "string",
3769
+ "description": "Hint text while empty."
3770
+ },
3771
+ "disabled": {
3772
+ "type": "boolean",
3773
+ "default": false,
3774
+ "description": "Shows it inert."
3775
+ },
3776
+ "checks": {
3777
+ "type": "array",
3778
+ "items": {
3779
+ "type": "object",
3780
+ "shape": "check"
3781
+ },
3782
+ "description": "Validation rules."
3783
+ },
3784
+ "validateOn": {
3785
+ "type": "enum",
3786
+ "enum": "validateOn",
3787
+ "default": "blur",
3788
+ "description": "When the checks run."
3789
+ }
3790
+ },
3791
+ "events": [
3792
+ "change",
3793
+ "submit",
3794
+ "focus",
3795
+ "blur"
3796
+ ],
3797
+ "example": {
3798
+ "label": "Seats",
3799
+ "name": "seats",
3800
+ "value": 3,
3801
+ "min": 1,
3802
+ "max": 50
3803
+ }
3804
+ },
3805
+ "Checkbox": {
3806
+ "kind": "native",
3807
+ "group": "input",
3808
+ "lite": true,
3809
+ "children": "none",
3810
+ "description": "A labelled checkbox; bind `checked`.",
3811
+ "props": {
3812
+ "label": {
3813
+ "type": "string",
3814
+ "required": true,
3815
+ "bindable": true,
3816
+ "description": "The text beside the box."
3817
+ },
3818
+ "name": {
3819
+ "type": "string",
3820
+ "required": true,
3821
+ "description": "The field's key in the submitted data."
3822
+ },
3823
+ "checked": {
3824
+ "type": "boolean",
3825
+ "default": false,
3826
+ "bindable": true,
3827
+ "description": "The state; bind it."
3828
+ },
3829
+ "disabled": {
3830
+ "type": "boolean",
3831
+ "default": false,
3832
+ "description": "Shows it inert."
3833
+ },
3834
+ "checks": {
3835
+ "type": "array",
3836
+ "items": {
3837
+ "type": "object",
3838
+ "shape": "check"
3839
+ },
3840
+ "description": "Validation rules."
3841
+ }
3842
+ },
3843
+ "events": [
3844
+ "change"
3845
+ ],
3846
+ "example": {
3847
+ "label": "I agree",
3848
+ "name": "agree",
3849
+ "checked": false
3850
+ }
3851
+ },
3852
+ "Radio": {
3853
+ "kind": "native",
3854
+ "group": "input",
3855
+ "lite": false,
3856
+ "children": "none",
3857
+ "description": "A labelled group of radio options choosing one value; bind `value`.",
3858
+ "props": {
3859
+ "label": {
3860
+ "type": "string",
3861
+ "description": "The group label."
3862
+ },
3863
+ "name": {
3864
+ "type": "string",
3865
+ "required": true,
3866
+ "description": "The field's key in the submitted data."
3867
+ },
3868
+ "options": {
3869
+ "type": "array",
3870
+ "items": {
3871
+ "type": "object",
3872
+ "shape": "option"
3873
+ },
3874
+ "required": true,
3875
+ "description": "The choices in order."
3876
+ },
3877
+ "value": {
3878
+ "type": "string",
3879
+ "bindable": true,
3880
+ "description": "The chosen value; bind it."
3881
+ },
3882
+ "orientation": {
3883
+ "type": "enum",
3884
+ "enum": "orientation",
3885
+ "default": "vertical",
3886
+ "description": "Stacked or in a row."
3887
+ },
3888
+ "checks": {
3889
+ "type": "array",
3890
+ "items": {
3891
+ "type": "object",
3892
+ "shape": "check"
3893
+ },
3894
+ "description": "Validation rules."
3895
+ }
3896
+ },
3897
+ "events": [
3898
+ "change"
3899
+ ],
3900
+ "example": {
3901
+ "label": "Plan",
3902
+ "name": "plan",
3903
+ "options": [
3904
+ {
3905
+ "label": "Free",
3906
+ "value": "free"
3907
+ },
3908
+ {
3909
+ "label": "Team",
3910
+ "value": "team"
3911
+ }
3912
+ ],
3913
+ "value": "free"
3914
+ }
3915
+ },
3916
+ "ChoiceTiles": {
3917
+ "kind": "native",
3918
+ "group": "input",
3919
+ "lite": false,
3920
+ "children": "none",
3921
+ "description": "Picture tiles picking one or many values; options show `image` and `description`.",
3922
+ "props": {
3923
+ "name": {
3924
+ "type": "string",
3925
+ "required": true,
3926
+ "description": "The field's key in the submitted data."
3927
+ },
3928
+ "options": {
3929
+ "type": "array",
3930
+ "items": {
3931
+ "type": "object",
3932
+ "shape": "option"
3933
+ },
3934
+ "required": true,
3935
+ "description": "The choices in order."
3936
+ },
3937
+ "type": {
3938
+ "type": "enum",
3939
+ "enum": "groupType",
3940
+ "default": "single",
3941
+ "description": "One pick or several."
3942
+ },
3943
+ "value": {
3944
+ "type": "string",
3945
+ "bindable": true,
3946
+ "description": "The pick (comma-joined when multiple); bind it."
3947
+ },
3948
+ "columns": {
3949
+ "type": "number",
3950
+ "default": 2,
3951
+ "description": "Tiles per row."
3952
+ },
3953
+ "disabled": {
3954
+ "type": "boolean",
3955
+ "default": false,
3956
+ "description": "Inert."
3957
+ },
3958
+ "checks": {
3959
+ "type": "array",
3960
+ "items": {
3961
+ "type": "object",
3962
+ "shape": "check"
3963
+ },
3964
+ "description": "Validation rules."
3965
+ }
3966
+ },
3967
+ "events": [
3968
+ "change"
3969
+ ],
3970
+ "example": {
3971
+ "name": "design",
3972
+ "options": [
3973
+ {
3974
+ "label": "Two columns",
3975
+ "value": "two",
3976
+ "description": "Pictures beside the text",
3977
+ "image": "https://example.com/two.png"
3978
+ },
3979
+ {
3980
+ "label": "One column",
3981
+ "value": "one",
3982
+ "description": "Pictures under the text",
3983
+ "image": "https://example.com/one.png"
3984
+ }
3985
+ ],
3986
+ "value": "two"
3987
+ }
3988
+ },
3989
+ "Switch": {
3990
+ "kind": "native",
3991
+ "group": "input",
3992
+ "lite": true,
3993
+ "children": "none",
3994
+ "description": "A labelled on/off switch; bind `checked`.",
3995
+ "props": {
3996
+ "label": {
3997
+ "type": "string",
3998
+ "required": true,
3999
+ "bindable": true,
4000
+ "description": "The text beside the switch."
4001
+ },
4002
+ "name": {
4003
+ "type": "string",
4004
+ "required": true,
4005
+ "description": "The field's key in the submitted data."
4006
+ },
4007
+ "checked": {
4008
+ "type": "boolean",
4009
+ "default": false,
4010
+ "bindable": true,
4011
+ "description": "The state; bind it."
4012
+ },
4013
+ "description": {
4014
+ "type": "string",
4015
+ "description": "A muted line under the label."
4016
+ },
4017
+ "disabled": {
4018
+ "type": "boolean",
4019
+ "default": false,
4020
+ "description": "Shows it inert."
4021
+ }
4022
+ },
4023
+ "events": [
4024
+ "change"
4025
+ ],
4026
+ "example": {
4027
+ "label": "Auto-scan",
4028
+ "name": "autoScan",
4029
+ "checked": true
4030
+ }
4031
+ },
4032
+ "Slider": {
4033
+ "kind": "native",
4034
+ "group": "input",
4035
+ "lite": false,
4036
+ "children": "none",
4037
+ "description": "A range slider between min and max; bind `value`.",
4038
+ "props": {
4039
+ "label": {
4040
+ "type": "string",
4041
+ "description": "The field label."
4042
+ },
4043
+ "min": {
4044
+ "type": "number",
4045
+ "default": 0,
4046
+ "bindable": true,
4047
+ "description": "The lowest value."
4048
+ },
4049
+ "max": {
4050
+ "type": "number",
4051
+ "required": true,
4052
+ "bindable": true,
4053
+ "description": "The highest value."
4054
+ },
4055
+ "step": {
4056
+ "type": "number",
4057
+ "default": 1,
4058
+ "description": "The increment."
4059
+ },
4060
+ "value": {
4061
+ "type": "number",
4062
+ "bindable": true,
4063
+ "description": "The current value; bind it."
4064
+ }
4065
+ },
4066
+ "events": [
4067
+ "change"
4068
+ ],
4069
+ "example": {
4070
+ "label": "Volume",
4071
+ "min": 0,
4072
+ "max": 100,
4073
+ "value": 40
4074
+ }
4075
+ },
4076
+ "Rating": {
4077
+ "kind": "macro",
4078
+ "group": "input",
4079
+ "lite": true,
4080
+ "children": "none",
4081
+ "description": "A row of stars scoring out of `max`; `readOnly` only displays.",
4082
+ "props": {
4083
+ "value": {
4084
+ "type": "number",
4085
+ "default": 0,
4086
+ "bindable": true,
4087
+ "description": "The score, 0 to max."
4088
+ },
4089
+ "max": {
4090
+ "type": "number",
4091
+ "default": 5,
4092
+ "minimum": 1,
4093
+ "maximum": 100,
4094
+ "description": "How many stars (1 to 100)."
4095
+ },
4096
+ "readOnly": {
4097
+ "type": "boolean",
4098
+ "default": false,
4099
+ "description": "Display only; no presses."
4100
+ },
4101
+ "size": {
4102
+ "type": "enum",
4103
+ "enum": "controlSize",
4104
+ "default": "default",
4105
+ "description": "Star size."
4106
+ }
4107
+ },
4108
+ "events": [
4109
+ "change"
4110
+ ],
4111
+ "example": {
4112
+ "value": 3,
4113
+ "max": 5
4114
+ }
4115
+ },
4116
+ "Select": {
4117
+ "kind": "native",
4118
+ "group": "input",
4119
+ "lite": true,
4120
+ "children": "none",
4121
+ "description": "A dropdown picker of one or many options; `searchable` = a filtering combobox, `source` = a host list.",
4122
+ "props": {
4123
+ "label": {
4124
+ "type": "string",
4125
+ "description": "The field label."
4126
+ },
4127
+ "name": {
4128
+ "type": "string",
4129
+ "required": true,
4130
+ "description": "The field's key in the submitted data."
4131
+ },
4132
+ "options": {
4133
+ "type": "array",
4134
+ "items": {
4135
+ "type": "object",
4136
+ "shape": "option"
4137
+ },
4138
+ "bindable": true,
4139
+ "description": "Inline choices, or a path the host refills on `search`; omit with `source`."
4140
+ },
4141
+ "source": {
4142
+ "type": "string",
4143
+ "description": "A host list id (e.g. `exp:statuses`) that supplies the options."
4144
+ },
4145
+ "placeholder": {
4146
+ "type": "string",
4147
+ "description": "Shown while nothing is chosen."
4148
+ },
4149
+ "value": {
4150
+ "type": "string",
4151
+ "bindable": true,
4152
+ "description": "The chosen value (comma-joined when multiple); bind it."
4153
+ },
4154
+ "multiple": {
4155
+ "type": "boolean",
4156
+ "default": false,
4157
+ "description": "Allows several values."
4158
+ },
4159
+ "searchable": {
4160
+ "type": "boolean",
4161
+ "default": false,
4162
+ "description": "Adds a filter field; typing fires `search`."
4163
+ },
4164
+ "emptyText": {
4165
+ "type": "string",
4166
+ "default": "$string.noResults",
4167
+ "description": "Shown when the search matches nothing."
4168
+ },
4169
+ "disabled": {
4170
+ "type": "boolean",
4171
+ "default": false,
4172
+ "description": "Shows it inert."
4173
+ },
4174
+ "checks": {
4175
+ "type": "array",
4176
+ "items": {
4177
+ "type": "object",
4178
+ "shape": "check"
4179
+ },
4180
+ "description": "Validation rules."
4181
+ },
4182
+ "validateOn": {
4183
+ "type": "enum",
4184
+ "enum": "validateOn",
4185
+ "default": "change",
4186
+ "description": "When the checks run."
4187
+ }
4188
+ },
4189
+ "events": [
4190
+ "change",
4191
+ "search"
4192
+ ],
4193
+ "example": {
4194
+ "label": "Board",
4195
+ "name": "board",
4196
+ "options": [
4197
+ {
4198
+ "label": "Backlog",
4199
+ "value": "backlog"
4200
+ },
4201
+ {
4202
+ "label": "Sprint",
4203
+ "value": "sprint"
4204
+ }
4205
+ ],
4206
+ "value": "sprint"
4207
+ }
4208
+ },
4209
+ "SearchList": {
4210
+ "kind": "native",
4211
+ "group": "input",
4212
+ "lite": true,
4213
+ "children": "none",
4214
+ "description": "A search field over rows: typing filters, arrows move, Enter picks.",
4215
+ "props": {
4216
+ "items": {
4217
+ "type": "array",
4218
+ "items": {
4219
+ "type": "object",
4220
+ "shape": "searchItem"
4221
+ },
4222
+ "required": true,
4223
+ "bindable": true,
4224
+ "description": "The rows; refill on `search`."
4225
+ },
4226
+ "query": {
4227
+ "type": "string",
4228
+ "bindable": true,
4229
+ "description": "The input text."
4230
+ },
4231
+ "placeholder": {
4232
+ "type": "string",
4233
+ "default": "$string.search",
4234
+ "description": "The placeholder."
4235
+ },
4236
+ "value": {
4237
+ "type": "string",
4238
+ "bindable": true,
4239
+ "description": "The picked value (a check)."
4240
+ },
4241
+ "emptyText": {
4242
+ "type": "string",
4243
+ "default": "$string.noResults",
4244
+ "description": "Shown on no match."
4245
+ },
4246
+ "maxRows": {
4247
+ "type": "number",
4248
+ "default": 8,
4249
+ "description": "Rows before it scrolls."
4250
+ },
4251
+ "showCount": {
4252
+ "type": "boolean",
4253
+ "default": true,
4254
+ "description": "A count while typing."
4255
+ }
4256
+ },
4257
+ "events": [
4258
+ "search",
4259
+ "select"
4260
+ ],
4261
+ "example": {
4262
+ "placeholder": "Search issues",
4263
+ "items": [
4264
+ {
4265
+ "label": "Ship the search list",
4266
+ "value": "exp-12",
4267
+ "identifier": "EXP-12",
4268
+ "icon": "status-in-progress"
4269
+ },
4270
+ {
4271
+ "label": "Close tabs on hover",
4272
+ "value": "exp-15",
4273
+ "identifier": "EXP-15",
4274
+ "icon": "status-done"
4275
+ }
4276
+ ]
4277
+ }
4278
+ },
4279
+ "ChipInput": {
4280
+ "kind": "native",
4281
+ "group": "input",
4282
+ "lite": true,
4283
+ "children": "none",
4284
+ "description": "A multi-value field of removable chips (Enter or comma adds); bind `values`.",
4285
+ "props": {
4286
+ "label": {
4287
+ "type": "string",
4288
+ "description": "The field label."
4289
+ },
4290
+ "name": {
4291
+ "type": "string",
4292
+ "required": true,
4293
+ "description": "The field's key in the submitted data."
4294
+ },
4295
+ "values": {
4296
+ "type": "array",
4297
+ "items": {
4298
+ "type": "string"
4299
+ },
4300
+ "bindable": true,
4301
+ "description": "The entries; bind them."
4302
+ },
4303
+ "suggestions": {
4304
+ "type": "array",
4305
+ "items": {
4306
+ "type": "object",
4307
+ "shape": "option"
4308
+ },
4309
+ "bindable": true,
4310
+ "description": "Completions offered while typing."
4311
+ },
4312
+ "placeholder": {
4313
+ "type": "string",
4314
+ "description": "Hint text while empty."
4315
+ },
4316
+ "max": {
4317
+ "type": "number",
4318
+ "description": "The most entries allowed."
4319
+ },
4320
+ "disabled": {
4321
+ "type": "boolean",
4322
+ "default": false,
4323
+ "description": "Shows it inert."
4324
+ },
4325
+ "checks": {
4326
+ "type": "array",
4327
+ "items": {
4328
+ "type": "object",
4329
+ "shape": "check"
4330
+ },
4331
+ "description": "Validation rules."
4332
+ }
4333
+ },
4334
+ "events": [
4335
+ "change",
4336
+ "add",
4337
+ "remove"
4338
+ ],
4339
+ "example": {
4340
+ "label": "Labels",
4341
+ "name": "labels",
4342
+ "values": [
4343
+ "bug",
4344
+ "ios"
4345
+ ]
4346
+ }
4347
+ },
4348
+ "DatePicker": {
4349
+ "kind": "native",
4350
+ "group": "input",
4351
+ "lite": true,
4352
+ "children": "none",
4353
+ "description": "A calendar date field (ISO yyyy-mm-dd).",
4354
+ "props": {
4355
+ "label": {
4356
+ "type": "string",
4357
+ "description": "The field label."
4358
+ },
4359
+ "name": {
4360
+ "type": "string",
4361
+ "required": true,
4362
+ "description": "The field's key in the submitted data."
4363
+ },
4364
+ "value": {
4365
+ "type": "date",
4366
+ "bindable": true,
4367
+ "description": "The chosen day as yyyy-mm-dd, or empty."
4368
+ },
4369
+ "min": {
4370
+ "type": "date",
4371
+ "description": "The earliest allowed day."
4372
+ },
4373
+ "max": {
4374
+ "type": "date",
4375
+ "description": "The latest allowed day."
4376
+ },
4377
+ "placeholder": {
4378
+ "type": "string",
4379
+ "description": "Shown while empty."
4380
+ },
4381
+ "firstDayOfWeek": {
4382
+ "type": "number",
4383
+ "description": "0 (Sunday) to 6; else the locale's."
4384
+ }
4385
+ },
4386
+ "events": [
4387
+ "change"
4388
+ ],
4389
+ "example": {
4390
+ "label": "Due",
4391
+ "name": "due",
4392
+ "value": "2026-10-14"
4393
+ }
4394
+ },
4395
+ "DateRangePicker": {
4396
+ "kind": "native",
4397
+ "group": "input",
4398
+ "lite": true,
4399
+ "children": "none",
4400
+ "description": "A two-date range field with one calendar (ISO dates).",
4401
+ "props": {
4402
+ "label": {
4403
+ "type": "string",
4404
+ "description": "The field label."
4405
+ },
4406
+ "name": {
4407
+ "type": "string",
4408
+ "required": true,
4409
+ "description": "The field's key in the submitted data (`{start, end}`)."
4410
+ },
4411
+ "start": {
4412
+ "type": "date",
4413
+ "bindable": true,
4414
+ "description": "The first day as yyyy-mm-dd, or empty."
4415
+ },
4416
+ "end": {
4417
+ "type": "date",
4418
+ "bindable": true,
4419
+ "description": "The last day as yyyy-mm-dd, or empty."
4420
+ },
4421
+ "min": {
4422
+ "type": "date",
4423
+ "description": "The earliest allowed day."
4424
+ },
4425
+ "max": {
4426
+ "type": "date",
4427
+ "description": "The latest allowed day."
4428
+ },
4429
+ "placeholder": {
4430
+ "type": "string",
4431
+ "description": "Shown while empty."
4432
+ },
4433
+ "firstDayOfWeek": {
4434
+ "type": "number",
4435
+ "description": "0 (Sunday) to 6; else the locale's."
4436
+ }
4437
+ },
4438
+ "events": [
4439
+ "change"
4440
+ ],
4441
+ "example": {
4442
+ "label": "Sprint",
4443
+ "name": "sprint",
4444
+ "start": "2026-10-07",
4445
+ "end": "2026-10-21"
4446
+ }
4447
+ },
4448
+ "TimePicker": {
4449
+ "kind": "native",
4450
+ "group": "input",
4451
+ "lite": true,
4452
+ "children": "none",
4453
+ "description": "A time-of-day field (`HH:mm`) picked from a list every `step` minutes, or typed.",
4454
+ "props": {
4455
+ "label": {
4456
+ "type": "string",
4457
+ "description": "The field label."
4458
+ },
4459
+ "name": {
4460
+ "type": "string",
4461
+ "required": true,
4462
+ "description": "The field's key in the submitted data."
4463
+ },
4464
+ "value": {
4465
+ "type": "string",
4466
+ "bindable": true,
4467
+ "description": "The time as `HH:mm`, or empty."
4468
+ },
4469
+ "min": {
4470
+ "type": "string",
4471
+ "description": "The earliest time, `HH:mm`."
4472
+ },
4473
+ "max": {
4474
+ "type": "string",
4475
+ "description": "The latest time, `HH:mm`."
4476
+ },
4477
+ "step": {
4478
+ "type": "number",
4479
+ "default": 15,
4480
+ "description": "Minutes between list entries."
4481
+ },
4482
+ "placeholder": {
4483
+ "type": "string",
4484
+ "description": "Shown while empty."
4485
+ },
4486
+ "disabled": {
4487
+ "type": "boolean",
4488
+ "default": false,
4489
+ "description": "Shows it inert."
4490
+ }
4491
+ },
4492
+ "events": [
4493
+ "change"
4494
+ ],
4495
+ "example": {
4496
+ "label": "Starts",
4497
+ "name": "startsAt",
4498
+ "value": "09:30"
4499
+ }
4500
+ },
4501
+ "FileUpload": {
4502
+ "kind": "native",
4503
+ "group": "input",
4504
+ "lite": true,
4505
+ "children": "none",
4506
+ "description": "A drop zone with a browse button; files reach the host via `upload`, listed back in `files`.",
4507
+ "props": {
4508
+ "label": {
4509
+ "type": "string",
4510
+ "description": "The field label."
4511
+ },
4512
+ "name": {
4513
+ "type": "string",
4514
+ "required": true,
4515
+ "description": "The field's key in the submitted data."
4516
+ },
4517
+ "accept": {
4518
+ "type": "string",
4519
+ "description": "Accepted types, comma-separated (`image/*,.pdf`)."
4520
+ },
4521
+ "multiple": {
4522
+ "type": "boolean",
4523
+ "default": false,
4524
+ "description": "Allows more than one file."
4525
+ },
4526
+ "maxSize": {
4527
+ "type": "number",
4528
+ "description": "Max bytes per file; bigger ones are refused."
4529
+ },
4530
+ "files": {
4531
+ "type": "array",
4532
+ "items": {
4533
+ "type": "object",
4534
+ "shape": "file"
4535
+ },
4536
+ "bindable": true,
4537
+ "description": "The attached files, each removable."
4538
+ },
4539
+ "hint": {
4540
+ "type": "string",
4541
+ "description": "Text under the drop zone's title."
4542
+ },
4543
+ "disabled": {
4544
+ "type": "boolean",
4545
+ "default": false,
4546
+ "description": "Shows it inert."
4547
+ }
4548
+ },
4549
+ "events": [
4550
+ "upload",
4551
+ "remove"
4552
+ ],
4553
+ "example": {
4554
+ "label": "Attachments",
4555
+ "name": "attachments",
4556
+ "accept": "image/*",
4557
+ "multiple": true
4558
+ }
4559
+ },
4560
+ "Composer": {
4561
+ "kind": "native",
4562
+ "group": "input",
4563
+ "lite": true,
4564
+ "children": "none",
4565
+ "description": "The chat input box: a growing text field with a submit button and optional attachments.",
4566
+ "props": {
4567
+ "placeholder": {
4568
+ "type": "string",
4569
+ "description": "Hint text while empty."
4570
+ },
4571
+ "value": {
4572
+ "type": "string",
4573
+ "bindable": true,
4574
+ "description": "The draft text; bind it."
4575
+ },
4576
+ "submitLabel": {
4577
+ "type": "string",
4578
+ "default": "$string.send",
4579
+ "description": "The submit button's accessibility label."
4580
+ },
4581
+ "attachments": {
4582
+ "type": "boolean",
4583
+ "default": false,
4584
+ "description": "Shows the attach control."
4585
+ },
4586
+ "busy": {
4587
+ "type": "boolean",
4588
+ "default": false,
4589
+ "description": "Turns submit into a stop while a reply streams."
4590
+ }
4591
+ },
4592
+ "events": [
4593
+ "submit",
4594
+ "change",
4595
+ "stop"
4596
+ ],
4597
+ "example": {
4598
+ "placeholder": "Ask anything"
4599
+ }
4600
+ },
4601
+ "Row": {
4602
+ "kind": "macro",
4603
+ "group": "list",
4604
+ "lite": true,
4605
+ "children": "none",
4606
+ "slots": [
4607
+ "leading",
4608
+ "trailing"
4609
+ ],
4610
+ "description": "THE list row: a lead glyph or slot, a mono identifier, title and subtitle, trailing meta or value, a slot and a chevron; flat or card, nestable.",
4611
+ "props": {
4612
+ "title": {
4613
+ "type": "string",
4614
+ "required": true,
4615
+ "bindable": true,
4616
+ "description": "The main text."
4617
+ },
4618
+ "identifier": {
4619
+ "type": "string",
4620
+ "bindable": true,
4621
+ "description": "A mono identifier before the title (`EXP-12`)."
4622
+ },
4623
+ "subtitle": {
4624
+ "type": "string",
4625
+ "bindable": true,
4626
+ "description": "A muted second line."
4627
+ },
4628
+ "meta": {
4629
+ "type": "string",
4630
+ "bindable": true,
4631
+ "description": "Trailing muted text (a count, a time)."
4632
+ },
4633
+ "value": {
4634
+ "type": "string",
4635
+ "bindable": true,
4636
+ "description": "A trailing readable value (a property, a pick)."
4637
+ },
4638
+ "placeholder": {
4639
+ "type": "string",
4640
+ "description": "Muted trailing text while `value` is empty."
4641
+ },
4642
+ "icon": {
4643
+ "type": "icon",
4644
+ "bindable": true,
4645
+ "description": "The lead glyph (the `leading` slot replaces it)."
4646
+ },
4647
+ "chevron": {
4648
+ "type": "enum",
4649
+ "enum": "rowChevron",
4650
+ "default": "none",
4651
+ "bindable": true,
4652
+ "description": "Trailing disclosure or picker glyph."
4653
+ },
4654
+ "selected": {
4655
+ "type": "boolean",
4656
+ "default": false,
4657
+ "bindable": true,
4658
+ "description": "Draws it as the active row."
4659
+ },
4660
+ "density": {
4661
+ "type": "enum",
4662
+ "enum": "density",
4663
+ "default": "default",
4664
+ "description": "Row height class."
4665
+ },
4666
+ "surface": {
4667
+ "type": "enum",
4668
+ "enum": "rowSurface",
4669
+ "default": "flat",
4670
+ "description": "A flat row, or a padded card with its own fill and border."
4671
+ },
4672
+ "pressable": {
4673
+ "type": "boolean",
4674
+ "default": false,
4675
+ "description": "Makes it a press target that fires `press` (an `on.press` implies it)."
4676
+ },
4677
+ "depth": {
4678
+ "type": "number",
4679
+ "default": 0,
4680
+ "description": "Depth under a tree Section (0 = root)."
4681
+ }
4682
+ },
4683
+ "events": [
4684
+ "press"
4685
+ ],
4686
+ "example": {
4687
+ "title": "r/selfhosted",
4688
+ "meta": "312 posts",
4689
+ "pressable": true
4690
+ }
4691
+ },
4692
+ "TreeGuides": {
4693
+ "kind": "native",
4694
+ "group": "list",
4695
+ "lite": true,
4696
+ "children": "none",
4697
+ "hidden": true,
4698
+ "description": "The tree gutter a nested Row draws (filled by the core); never authored directly.",
4699
+ "props": {
4700
+ "depth": {
4701
+ "type": "number",
4702
+ "required": true,
4703
+ "description": "The row's nesting depth (0 = root)."
4704
+ },
4705
+ "elbowAt": {
4706
+ "type": "number",
4707
+ "description": "The gutter index that draws the elbow into this row; omit for a root."
4708
+ },
4709
+ "tee": {
4710
+ "type": "boolean",
4711
+ "default": false,
4712
+ "description": "Continues the line past this row to a later sibling."
4713
+ },
4714
+ "passThrough": {
4715
+ "type": "array",
4716
+ "items": {
4717
+ "type": "number"
4718
+ },
4719
+ "description": "Gutter indexes whose ancestor line continues straight through."
4720
+ }
4721
+ },
4722
+ "example": {
4723
+ "depth": 1,
4724
+ "elbowAt": 0,
4725
+ "tee": true,
4726
+ "passThrough": []
4727
+ }
4728
+ },
4729
+ "Unknown": {
4730
+ "kind": "native",
4731
+ "group": "feedback",
4732
+ "lite": true,
4733
+ "children": "none",
4734
+ "hidden": true,
4735
+ "description": "A renderer's placeholder for an undefined component; never authored directly.",
4736
+ "props": {
4737
+ "component": {
4738
+ "type": "string",
4739
+ "required": true,
4740
+ "description": "The unmapped component's name."
4741
+ },
4742
+ "catalogId": {
4743
+ "type": "string",
4744
+ "description": "The catalog the component was authored against."
4745
+ }
4746
+ },
4747
+ "example": {
4748
+ "component": "Gauge"
4749
+ }
4750
+ }
4751
+ }
4752
+ }