@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,6 @@
1
+ // AUTO-GENERATED by packages/exponential-ui/scripts/generate.ts — do not edit.
2
+ // Source of truth: packages/exponential-ui/catalog/core.catalog.json (+ tokens.json, style.json, basic-map.json, strings.json, locale.json, code.json, a11y.json, layout.json).
3
+ // VAPP-106: the model-facing descriptions and examples of the catalog (generated/core.descriptions.json), keyed like the
4
+ // catalog; the runtime catalog (CORE_CATALOG_JSON) carries none. Embedded only with the `descriptions` feature.
5
+
6
+ pub const CORE_CATALOG_DESCRIPTIONS_JSON: &str = r####"{"components":{"Box":{"props":{"style":{"description":"Layout and visual properties from the Box whitelist (flex, grid, sizes, spacing, colours)."},"pressable":{"description":"Makes the box a press target that fires `press`."}},"description":"A styled container laid out by the whitelisted style object; what every macro expands into.","example":{"style":{"display":"flex","flexDirection":"column","gap":"$spacing.md","padding":"$spacing.lg"}}},"Stack":{"props":{"direction":{"description":"A row or a column (`{base: \"vertical\", md: \"horizontal\"}`)."},"gap":{"description":"The space between children."},"align":{"description":"Unset: `center` in a row, `stretch` in a column."},"justify":{"description":"Main-axis distribution."},"wrap":{"description":"Lets children wrap onto new lines."},"style":{"description":"Extra Box styles merged over the stack's own."}},"description":"A flex container that lays its children out in one direction with a gap.","example":{"direction":"horizontal","gap":"sm"}},"Grid":{"props":{"columns":{"description":"Equal columns 1–6 (`{base: 1, md: 2, lg: 3}`)."},"gap":{"description":"The space between cells."},"style":{"description":"Extra Box styles merged over the grid's own."}},"description":"An equal-column grid for cards and tiles.","example":{"columns":3,"gap":"md"}},"Card":{"props":{"title":{"description":"The card heading."},"description":{"description":"A muted line under the heading."},"padded":{"description":"Pads the body; off for edge-to-edge rows."},"style":{"description":"Extra Box styles merged over the card's own."}},"description":"A bordered card with an optional title and description, for grouped content, not page headers.","example":{"title":"Overview","description":"Your account summary"}},"Separator":{"props":{"orientation":{"description":"A horizontal rule or a vertical bar."}},"description":"A hairline that divides content.","example":{"orientation":"horizontal"}},"List":{"props":{"direction":{"description":"Scroll axis."},"gap":{"description":"The space between items."},"divided":{"description":"Draws a hairline between items."},"sectionBy":{"description":"Groups consecutive items by this field; slot `section` = each header ({value, count})."},"stickyHeaders":{"description":"Pins the current section header."},"style":{"description":"Extra Box styles for the list frame."}},"description":"A windowed scrolling list for anything longer than a screen; children may come from a data template.","example":{"direction":"vertical","divided":true}},"Resizable":{"props":{"direction":{"description":"Side by side or stacked."},"sizes":{"description":"Percent per panel; bind it."},"panels":{"description":"Per-panel limits, by index."},"handle":{"description":"Draws a grip on each handle."},"style":{"description":"Extra Box styles for the group box (give it a height)."}},"description":"Panels split by draggable handles; each child is one panel.","example":{"direction":"horizontal","sizes":[30,70],"handle":true}},"ScrollArea":{"props":{"direction":{"description":"Which axis scrolls."},"maxHeight":{"description":"Px it scrolls within; omit to fill the parent."},"style":{"description":"Extra Box styles merged over the region's own."}},"description":"A scrolling region of bounded height or width.","example":{"direction":"vertical","maxHeight":240}},"Sidebar":{"props":{"side":{"description":"Which edge the column sits on."},"width":{"description":"The column width in px."},"collapseBelow":{"description":"Hides the column below this breakpoint."},"collapsed":{"description":"Hides the column at any width; bind it to a toggle."}},"description":"A two-column shell: a navigation column (`sidebar` slot) beside the children, hidden narrow or `collapsed`.","example":{"side":"left","width":240,"collapseBelow":"md"}},"SplitView":{"props":{"open":{"description":"On phones, the detail shows instead of the list; bind it to the open item."},"width":{"description":"The list column width in px."}},"description":"List (`list` slot) + detail (children); phones show one at a time, the detail with a back button.","example":{"open":true,"width":320}},"AppBar":{"props":{"title":{"description":"The screen title."},"subtitle":{"description":"A muted line under the title."},"back":{"description":"Shows a back button that fires `back`."}},"description":"A top bar: title, optional subtitle and back button, `leading`/`trailing` slots.","example":{"title":"Settings","back":true}},"Page":{"props":{"title":{"description":"The screen title."},"subtitle":{"description":"A muted line under the title."},"back":{"description":"Shows a back button that fires `back`."},"padded":{"description":"Pads the body; off for edge-to-edge lists."}},"description":"A screen: an AppBar row (back, title, trailing actions) over a padded scrolling body.","example":{"title":"Settings","back":true}},"Toolbar":{"props":{"gap":{"description":"The space between controls."}},"description":"Controls in one row, bottoms aligned, wrapping on phones; `trailing` = the end action.","example":{"gap":"sm"}},"Section":{"props":{"title":{"description":"The band's label; omit it for a bare run of rows."},"caption":{"description":"Muted text after the title."},"count":{"description":"A count after the title; off unless given."},"icon":{"description":"A glyph before the title (the `leading` slot replaces it)."},"collapsible":{"description":"The header folds the rows (chevron, press)."},"open":{"description":"Whether the rows show; bind it."},"tint":{"description":"The band's colour tone."},"tree":{"description":"The rows form a tree: each `Row.depth` indents and draws its guides."},"loading":{"description":"A refetch is running: a small spinner before the count. The first load is a Skeleton instead."},"style":{"description":"Extra Box styles for the frame."}},"description":"A band header over hairline-divided rows: title, caption, count and glyph, foldable, tinted; no title = just the rows.","example":{"title":"In progress","icon":"nav-issues"}},"Group":{"props":{"title":{"description":"A caption above the group."},"footer":{"description":"A muted note under the group."}},"description":"A form-field container: a rounded group of rows with an optional title and footnote.","example":{"title":"Notifications"}},"Text":{"props":{"text":{"description":"The text to show."},"variant":{"description":"The type style."},"align":{"description":"Horizontal alignment inside its box."},"lines":{"description":"Truncates to this many lines with an ellipsis."},"tone":{"description":"A colour tone instead of the default foreground."},"shimmer":{"description":"Animates a highlight across the text while work runs."},"live":{"description":"Announces changes (`assertive` interrupts)."},"style":{"description":"Extra Box styles for the text box."}},"description":"A run of text in one of the type styles; prefer dedicated components over inline markdown.","example":{"text":"Hello, world!","variant":"body"}},"Heading":{"props":{"text":{"description":"The heading text."},"level":{"description":"h1 is the page title, h4 the smallest."}},"description":"A section or page heading at one of four levels.","example":{"text":"Welcome","level":"h1"}},"Markdown":{"props":{"text":{"description":"The GFM source."},"lines":{"description":"Truncates the rendered body to this many lines with an ellipsis."},"style":{"description":"Extra Box styles for the markdown box."}},"description":"Rendered GitHub-flavoured markdown, for prose.","example":{"text":"**Bold** and a list:\n\n- one\n- two"}},"CodeBlock":{"props":{"code":{"description":"The source text."},"language":{"description":"The syntax colouring."},"title":{"description":"A header line (a file name)."},"lineNumbers":{"description":"Shows a line-number gutter."},"wrap":{"description":"Wraps long lines instead of scrolling sideways."},"copyable":{"description":"Shows the copy-to-clipboard button."},"highlight":{"description":"1-based line numbers to emphasise."},"maxLines":{"description":"Lines shown before the block scrolls."},"variant":{"description":"destructive = failed output."},"size":{"description":"sm = compact."}},"description":"Source code in a mono block: syntax colouring, optional line numbers, a copy button.","example":{"code":"const answer = 42 // the answer","language":"ts","lineNumbers":true}},"Kbd":{"props":{"keys":{"description":"The shortcut text (`⌘K`, `Ctrl+Shift+P`)."}},"description":"A keyboard shortcut drawn as a key cap.","example":{"keys":"⌘K"}},"Label":{"props":{"text":{"description":"The caption."},"for":{"description":"The id of the control it labels."},"required":{"description":"Adds the required mark."}},"description":"A caption for a control that has no label of its own, with an optional required mark.","example":{"text":"Visibility","for":"visibility"}},"Image":{"props":{"src":{"description":"The image URL; omit for a placeholder."},"alt":{"description":"The accessibility description."},"fit":{"description":"How the picture fills its box."},"width":{"description":"Fixed width in px; otherwise the box decides."},"height":{"description":"Fixed height in px."},"aspectRatio":{"description":"Width over height (16:9 when unset and no height); the box never waits for the picture."},"fallback":{"description":"An icon shown when the picture fails or is missing."},"loading":{"description":"Defer loading until near the viewport, or load at once."},"focalX":{"description":"Horizontal focal point 0..1 kept when cropped (0.5)."},"focalY":{"description":"Vertical focal point 0..1 kept when cropped (0.5)."},"style":{"description":"Extra Box styles for the image box."}},"description":"A picture from a URL, or a placeholder box when it has none.","example":{"src":"https://example.com/cover.jpg","alt":"Cover","fit":"cover","aspectRatio":1.7777778}},"Icon":{"props":{"name":{"description":"The icon name (an icons.json concept or Lucide name)."},"size":{"description":"Glyph size."},"tone":{"description":"A colour tone instead of the current text colour."},"label":{"description":"An accessibility label when the icon stands alone."}},"description":"One icon from the shared Lucide registry, by name.","example":{"name":"ui-check","size":"default"}},"Video":{"props":{"src":{"description":"The video URL (H.264 + AAC MP4 plays everywhere)."},"poster":{"description":"A still shown before playback."},"durationMs":{"description":"Known length for the scrubber."},"autoplay":{"description":"Starts muted playback on appear."},"aspectRatio":{"description":"Width over height of the player box."},"style":{"description":"Extra Box styles for the player box."}},"description":"A video player: the poster until play, then the platform player with its controls.","example":{"src":"https://example.com/clip.mp4","durationMs":12000}},"AudioPlayer":{"props":{"src":{"description":"The audio URL."},"title":{"description":"What is playing."},"durationMs":{"description":"Known length for the scrubber."}},"description":"An audio player with a title and a play control.","example":{"src":"https://example.com/track.mp3","title":"Episode 12"}},"Avatar":{"props":{"name":{"description":"The person's name; initials come from it."},"src":{"description":"The picture URL."},"size":{"description":"Diameter class."},"seed":{"description":"Hashes the fallback hue; defaults to the name."}},"description":"A round user picture that falls back to initials on a stable hue.","example":{"name":"Jane Doe","size":"default"}},"Carousel":{"props":{"page":{"description":"The active page index."},"loop":{"description":"Wraps from the last page to the first."},"indicators":{"description":"Shows the page dots."}},"description":"A horizontally paging scroller; each child is one page.","example":{"page":0,"indicators":true}},"Tabs":{"props":{"tabs":{"description":"The tab headers in order."},"value":{"description":"The active tab's value; bind it for two-way state."},"fill":{"description":"Stretches the headers across the width."},"closable":{"description":"Close glyphs firing `close`; `hover` = on hover."},"addable":{"description":"A + button firing `new`."}},"description":"Tab navigation; the child at index i is the panel of tab i.","example":{"tabs":[{"label":"Issue","value":"issue"},{"label":"Run","value":"run"}],"value":"issue"}},"Segmented":{"props":{"items":{"description":"The segments in order."},"type":{"description":"One active value or several."},"value":{"description":"The selected value (comma-joined when multiple); bind it."},"variant":{"description":"Pill track, bare toggles, joined outline buttons, or a full-width icon `bar`."},"size":{"description":"Control height class."},"fill":{"description":"Stretches the segments across the width (a `bar` always does)."}},"description":"ONE row of segments picking one or many values: a pill track, toggles, joined outline buttons or a bottom bar.","example":{"items":[{"label":"List","value":"list"},{"label":"Board","value":"board"}],"value":"list"}},"Accordion":{"props":{"items":{"description":"The section headers in order."},"type":{"description":"One section open at a time, or any number."},"value":{"description":"The open section's value (comma-joined when multiple); bind it."}},"description":"Collapsible sections; the child at index i is the body of item i.","example":{"items":[{"title":"Details","value":"details"}],"type":"single","value":"details"}},"Collapsible":{"props":{"title":{"description":"The header text."},"open":{"description":"Whether the body shows; bind it."},"count":{"description":"A count shown in the header."}},"description":"One disclosure section with a title row that shows or hides its children.","example":{"title":"Advanced","open":false}},"Trace":{"props":{"size":{"description":"Line spacing; match the items."}},"description":"A column of TraceItem lines (an agent's steps).","example":{"size":"default"}},"TraceItem":{"props":{"title":{"description":"What happened."},"icon":{"description":"The lead glyph."},"description":{"description":"A muted detail (a duration)."},"status":{"description":"running shimmers, error tints, pending dims."},"size":{"description":"sm = compact."},"collapsible":{"description":"The line toggles its children."},"open":{"description":"Whether the children show; bind it."}},"description":"One step line: icon, title, muted detail; may expand to show its children.","example":{"title":"Ran bun test","icon":"trace-terminal","description":"4s","collapsible":true,"open":true}},"Pagination":{"props":{"totalPages":{"description":"How many pages there are."},"page":{"description":"The current 1-based page; bind it."}},"description":"Previous, next and the current page out of a total.","example":{"totalPages":5,"page":2}},"Breadcrumb":{"props":{"items":{"description":"The path from the root to the current page."}},"description":"The path to the current page; every item but the last is a link firing `select`.","example":{"items":[{"label":"Boards","value":"boards"},{"label":"Sprint 12","value":"sprint-12"},{"label":"EXP-42","value":"exp-42"}]}},"Stepper":{"props":{"steps":{"description":"The steps in order."},"current":{"description":"The 0-based index of the active step."},"orientation":{"description":"In a row or stacked."}},"description":"Wizard progress: numbered steps, finished ones ticked.","example":{"steps":[{"label":"Account"},{"label":"Team"},{"label":"Done"}],"current":1}},"Dialog":{"props":{"title":{"description":"The dialog heading."},"description":{"description":"A muted line under the heading."},"open":{"description":"Whether it shows; bind it to a boolean path."},"dismissible":{"description":"Closes on the backdrop or Escape."}},"description":"A centred modal over the surface, opened by its trigger slot or by binding `open`.","example":{"title":"Delete board?","description":"This cannot be undone.","open":false}},"Drawer":{"props":{"title":{"description":"The drawer heading."},"description":{"description":"A muted line under the heading."},"open":{"description":"Whether it shows; bind it to a boolean path."},"side":{"description":"The edge it slides from; `{base: \"bottom\", md: \"right\"}` turns the phone sheet into a side panel on wide surfaces."},"dismissible":{"description":"Closes on the backdrop or Escape."},"dragToDismiss":{"description":"Lets a swipe toward its edge close it."}},"description":"A panel sliding in from an edge (a bottom sheet on phones).","example":{"title":"Filters","side":"bottom","open":false}},"DockCard":{"props":{"label":{"description":"The tinted header word."},"title":{"description":"The one line under the header."},"caption":{"description":"Muted text after the label."},"meta":{"description":"Muted text at the header's end."},"icon":{"description":"The glyph before the label."},"tone":{"description":"The glyph's and the label's tone."},"open":{"description":"Whether the sheet shows; bind it."}},"description":"A floating one-row card whose children open in a bottom sheet with a pinned footer.","example":{"label":"Plan ready","caption":"Ask dock","meta":"3 questions","title":"Fold the composer into the Dock","icon":"coding-plan","tone":"primary"}},"AlertDialog":{"props":{"title":{"description":"The question."},"description":{"description":"What will happen."},"confirmLabel":{"description":"The confirming button's text."},"cancelLabel":{"description":"The cancelling button's text."},"destructive":{"description":"Styles the confirming button as dangerous."},"open":{"description":"Whether it shows; bind it."}},"description":"A modal that asks for a confirmation and ignores clicks outside; fires `confirm` or `cancel`.","example":{"title":"Delete board?","description":"This cannot be undone.","destructive":true}},"Popover":{"props":{"open":{"description":"Whether it shows; bind it."},"side":{"description":"Preferred side of the trigger."},"openOn":{"description":"Press, or hover over the trigger (press on touch)."}},"description":"A small panel anchored to its trigger, opened on press.","example":{"side":"bottom"}},"Tooltip":{"props":{"content":{"description":"The hint text."},"side":{"description":"Preferred side of the anchor."}},"description":"A short hint shown on hover or long-press over its children.","example":{"content":"Copy link"}},"Menu":{"props":{"label":{"description":"The default trigger's text when no child is given."},"icon":{"description":"The default trigger's icon."},"items":{"description":"The entries in order."},"openOn":{"description":"A press on the child, or the context gesture over it."}},"description":"A menu of actions, checkboxes, groups and submenus, opened by pressing its child or right-click / long-press.","example":{"label":"More","items":[{"label":"Rename","value":"rename"},{"label":"Delete","value":"delete","destructive":true}]}},"Toast":{"props":{"title":{"description":"The notice."},"description":{"description":"Detail under the notice."},"type":{"description":"Severity: icon and tone (`error` interrupts readers)."},"open":{"description":"Whether it shows; bind it so the host learns of a dismissal."},"duration":{"description":"Ms until it dismisses itself; 0 = never."},"actionLabel":{"description":"A button label; pressing it fires `action`."},"dismissible":{"description":"Shows the close control."}},"description":"A transient notice in the toast layer; render one per notice with `open` bound.","example":{"title":"Couldn't save the board","description":"The server did not answer.","type":"error","actionLabel":"Retry"}},"Badge":{"props":{"text":{"description":"The label or number."},"variant":{"description":"Filled, secondary, outlined or destructive."},"icon":{"description":"An icon before the text."}},"description":"A small count or status label.","example":{"text":"Active","variant":"default"}},"Alert":{"props":{"title":{"description":"The banner heading."},"message":{"description":"The detail under the heading."},"type":{"description":"The severity, which picks the icon and tone."}},"description":"An inline banner with an icon, a title and a message.","example":{"title":"Saved","message":"Your changes have been saved.","type":"success"}},"Chip":{"props":{"label":{"description":"The chip text."},"shape":{"description":"A rounded pill or a squarer entity chip."},"selected":{"description":"Draws it as the active choice."},"tone":{"description":"Colour tone of the chip."},"dot":{"description":"A colour dot before the text (a label chip)."},"icon":{"description":"An icon before the text."},"image":{"description":"A round picture instead of the icon."},"detail":{"description":"Muted text after the label."},"removable":{"description":"Shows a remove control that fires `remove`."},"pressable":{"description":"Makes it a press target that fires `press`."}},"description":"A small token: a pill (filter, label, state) or a rect naming an entity with a glyph or image; removable.","example":{"label":"Drafts","selected":true}},"EmptyState":{"props":{"icon":{"description":"The glyph: in the disc on `page`, bare on `list`."},"title":{"description":"What is empty."},"description":{"description":"The next step, `page` only."},"actionLabel":{"description":"A button label, `page` only; pressing it fires `press`."},"size":{"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."}},"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.","example":{"icon":"nav-inbox","title":"No notifications","description":"You are all caught up."}},"Progress":{"props":{"value":{"description":"The current amount, 0 to max."},"max":{"description":"The full amount."},"label":{"description":"A caption above the bar."},"tone":{"description":"The fill colour tone."}},"description":"A horizontal progress bar with an optional label.","example":{"value":65,"max":100,"label":"Upload"}},"Meter":{"props":{"segments":{"description":"The slices in order."},"max":{"description":"The full amount."},"label":{"description":"A caption before the track."},"value":{"description":"A formatted value after the track."}},"description":"A usage track: a bar of coloured segments against a maximum, with a caption and a value.","example":{"segments":[{"value":40,"tone":"primary"},{"value":25,"tone":"warning"}],"max":100,"label":"Storage","value":"650 MB of 1 GB"}},"Ring":{"props":{"value":{"description":"The fraction 0 to 1."},"size":{"description":"Diameter class."},"tone":{"description":"The arc colour tone."},"label":{"description":"An accessibility label."}},"description":"A circular progress ring for a fraction, sized like an icon.","example":{"value":0.62,"tone":"primary"}},"Spinner":{"props":{"size":{"description":"Diameter class; `xs` = inline in a header."},"label":{"description":"A caption or accessibility label."}},"description":"An indeterminate activity indicator.","example":{"size":"default"}},"Skeleton":{"props":{"width":{"description":"A length (px or %); defaults to the full width."},"height":{"description":"A length (px); defaults to one text line."},"rounded":{"description":"A circle instead of a bar."},"rows":{"description":"Rows instead of a block."},"rowHeight":{"description":"A row's height in px."},"dot":{"description":"A dot per row."}},"description":"A pulsing placeholder: a block, or `rows` rows.","example":{"width":"60%","height":"16px"}},"Table":{"props":{"columns":{"description":"The columns in order."},"rows":{"description":"One object per row keyed by column key; bind it for live data."},"rowKey":{"description":"The row field that identifies a row."},"sort":{"description":"The active sort; bound = you order `rows`, unbound = sorted locally."},"selectable":{"description":"Row selection (many = a checkbox column)."},"selected":{"description":"The selected row keys; bind them."},"caption":{"description":"A caption under the table."},"emptyText":{"description":"Shown when there are no rows."},"striped":{"description":"Alternates row fills."},"density":{"description":"Row height class."},"stickyHeader":{"description":"Keeps the header visible while the rows scroll."}},"description":"A data table of typed columns: sorting, selection, widths, alignment, windowed; `slot` columns render components.","example":{"columns":[{"key":"name","label":"Name"},{"key":"role","label":"Role"},{"key":"runs","label":"Runs","type":"number","sortable":true,"align":"end"}],"rows":[{"id":"a","name":"Alice","role":"Owner","runs":12},{"id":"b","name":"Bob","role":"Member","runs":3}]}},"Chart":{"props":{"kind":{"description":"The chart form."},"categories":{"description":"The x-axis labels, or the pie slices; omit for a sparkline."},"series":{"description":"One per line, bar group or pie ring."},"title":{"description":"A title above the chart."},"height":{"description":"The whole chart's height in px (title, legend, axes inside); the width is the box's."},"xLabel":{"description":"A caption under the x axis."},"yLabel":{"description":"A caption beside the y axis."},"min":{"description":"The y-axis floor; defaults to 0."},"max":{"description":"The y-axis ceiling; defaults to the largest value."},"showAxes":{"description":"Draws the axes with tick labels."},"showGrid":{"description":"Draws horizontal grid lines at the ticks."},"showLegend":{"description":"Draws the legend (2+ series or slices)."},"showValues":{"description":"Writes each value on its bar, point or slice."}},"description":"A bar, stacked-bar, line, area, pie, donut or sparkline chart with axes, legend and tooltip.","example":{"kind":"bar","categories":["Mon","Tue"],"series":[{"name":"Runs","values":[3,5]}]}},"Sparkline":{"props":{"values":{"description":"The points, oldest first."},"tone":{"description":"The line colour tone."},"height":{"description":"The height in px."}},"description":"A tiny inline trend line of recent values, no axes or legend.","example":{"values":[1,3,2,5,4]}},"StatTile":{"props":{"label":{"description":"What is measured."},"value":{"description":"The formatted value."},"delta":{"description":"The change (`+12 %`)."},"tone":{"description":"The change's tone."},"trend":{"description":"Recent values (sparkline)."}},"description":"A dashboard tile: label, big value, toned change, trend sparkline.","example":{"label":"Active users","value":"1,284","delta":"+12 %","tone":"success","trend":[3,4,3,5,6,8]}},"Button":{"props":{"label":{"description":"The button text (omit for an icon-only button)."},"icon":{"description":"An icon before the label, or alone with size `icon`."},"variant":{"description":"`default` = the primary action, `destructive` = dangerous, `ghost`/`link` = quiet."},"size":{"description":"Control height class; `icon` is a square icon-only button."},"disabled":{"description":"Shows it inert."},"loading":{"description":"Pending: refuses presses, then shows a spinner."},"pendingLabel":{"description":"Label while loading."},"submit":{"description":"Submits the enclosing Form on press."}},"description":"A press target with a label and optional icon (or one custom child).","example":{"label":"Submit","variant":"default"}},"Link":{"props":{"label":{"description":"The link text."},"href":{"description":"The URL to open; omit to handle `press` yourself."},"external":{"description":"Marks it as leaving the app."}},"description":"Inline link text that opens a URL or fires `press`.","example":{"label":"Open docs","href":"https://ui.exponential.at"}},"Toggle":{"props":{"label":{"description":"The button text or accessibility label."},"icon":{"description":"An icon before or instead of the label."},"pressed":{"description":"The state; bind it."},"variant":{"description":"Plain or outlined."},"size":{"description":"Control height class."}},"description":"A two-state button that stays pressed.","example":{"label":"Bold","icon":"editor-bold","pressed":false}},"Form":{"props":{"name":{"description":"The form's key in the submit payload."},"disabled":{"description":"Makes every field inert."},"busy":{"description":"Shows the submit pending and refuses another submit."},"summary":{"description":"Also lists every failed check above the fields."}},"description":"Collects its fields by `name` and fires `submit` with their values once every check passes.","example":{"name":"profile"}},"FieldGroup":{"props":{"columns":{"description":"Columns from md up (1-4)."}},"description":"Fields side by side (Starts / Ends) that stack on phones.","example":{"columns":2}},"FormActions":{"props":{"submit":{"description":"The submit label."},"cancel":{"description":"An outline Cancel firing `cancel`."},"destructive":{"description":"A dangerous submit."}},"description":"The end-aligned button row: children, Cancel, then THE submit (the one primary).","example":{"submit":"Save","cancel":true}},"Input":{"props":{"label":{"description":"The field label."},"name":{"description":"The field's key in the submitted data."},"type":{"description":"The keyboard and masking kind."},"placeholder":{"description":"Hint text while empty."},"value":{"description":"The text; bind it to a data path."},"disabled":{"description":"Shows it inert."},"checks":{"description":"Validation rules (required, email, length, regex, numeric)."},"validateOn":{"description":"When the checks run."}},"description":"A single-line text field.","example":{"label":"Email","name":"email","type":"email","placeholder":"you@example.com"}},"Textarea":{"props":{"label":{"description":"The field label."},"name":{"description":"The field's key in the submitted data."},"placeholder":{"description":"Hint text while empty."},"rows":{"description":"Visible lines (the minimum when autosizing)."},"autosize":{"description":"Grows with the text from `rows` up to `maxRows`."},"maxRows":{"description":"Autosize stops growing here and scrolls."},"value":{"description":"The text; bind it to a data path."},"disabled":{"description":"Shows it inert."},"checks":{"description":"Validation rules."},"validateOn":{"description":"When the checks run."}},"description":"A multi-line text field.","example":{"label":"Notes","name":"notes","rows":4}},"NumberField":{"props":{"label":{"description":"The field label."},"name":{"description":"The field's key in the submitted data."},"value":{"description":"The number; bind it."},"min":{"description":"The lowest value."},"max":{"description":"The highest value."},"step":{"description":"What the steppers and arrow keys add; Shift multiplies by 10."},"precision":{"description":"Decimal places shown; defaults to the step's."},"unit":{"description":"A suffix after the number (`kg`, `%`)."},"placeholder":{"description":"Hint text while empty."},"disabled":{"description":"Shows it inert."},"checks":{"description":"Validation rules."},"validateOn":{"description":"When the checks run."}},"description":"A numeric field with steppers, min/max/step clamping and locale formatting.","example":{"label":"Seats","name":"seats","value":3,"min":1,"max":50}},"Checkbox":{"props":{"label":{"description":"The text beside the box."},"name":{"description":"The field's key in the submitted data."},"checked":{"description":"The state; bind it."},"disabled":{"description":"Shows it inert."},"checks":{"description":"Validation rules."}},"description":"A labelled checkbox; bind `checked`.","example":{"label":"I agree","name":"agree","checked":false}},"Radio":{"props":{"label":{"description":"The group label."},"name":{"description":"The field's key in the submitted data."},"options":{"description":"The choices in order."},"value":{"description":"The chosen value; bind it."},"orientation":{"description":"Stacked or in a row."},"checks":{"description":"Validation rules."}},"description":"A labelled group of radio options choosing one value; bind `value`.","example":{"label":"Plan","name":"plan","options":[{"label":"Free","value":"free"},{"label":"Team","value":"team"}],"value":"free"}},"ChoiceTiles":{"props":{"name":{"description":"The field's key in the submitted data."},"options":{"description":"The choices in order."},"type":{"description":"One pick or several."},"value":{"description":"The pick (comma-joined when multiple); bind it."},"columns":{"description":"Tiles per row."},"disabled":{"description":"Inert."},"checks":{"description":"Validation rules."}},"description":"Picture tiles picking one or many values; options show `image` and `description`.","example":{"name":"design","options":[{"label":"Two columns","value":"two","description":"Pictures beside the text","image":"https://example.com/two.png"},{"label":"One column","value":"one","description":"Pictures under the text","image":"https://example.com/one.png"}],"value":"two"}},"Switch":{"props":{"label":{"description":"The text beside the switch."},"name":{"description":"The field's key in the submitted data."},"checked":{"description":"The state; bind it."},"description":{"description":"A muted line under the label."},"disabled":{"description":"Shows it inert."}},"description":"A labelled on/off switch; bind `checked`.","example":{"label":"Auto-scan","name":"autoScan","checked":true}},"Slider":{"props":{"label":{"description":"The field label."},"min":{"description":"The lowest value."},"max":{"description":"The highest value."},"step":{"description":"The increment."},"value":{"description":"The current value; bind it."}},"description":"A range slider between min and max; bind `value`.","example":{"label":"Volume","min":0,"max":100,"value":40}},"Rating":{"props":{"value":{"description":"The score, 0 to max."},"max":{"description":"How many stars (1 to 100)."},"readOnly":{"description":"Display only; no presses."},"size":{"description":"Star size."}},"description":"A row of stars scoring out of `max`; `readOnly` only displays.","example":{"value":3,"max":5}},"Select":{"props":{"label":{"description":"The field label."},"name":{"description":"The field's key in the submitted data."},"options":{"description":"Inline choices, or a path the host refills on `search`; omit with `source`."},"source":{"description":"A host list id (e.g. `exp:statuses`) that supplies the options."},"placeholder":{"description":"Shown while nothing is chosen."},"value":{"description":"The chosen value (comma-joined when multiple); bind it."},"multiple":{"description":"Allows several values."},"searchable":{"description":"Adds a filter field; typing fires `search`."},"emptyText":{"description":"Shown when the search matches nothing."},"disabled":{"description":"Shows it inert."},"checks":{"description":"Validation rules."},"validateOn":{"description":"When the checks run."}},"description":"A dropdown picker of one or many options; `searchable` = a filtering combobox, `source` = a host list.","example":{"label":"Board","name":"board","options":[{"label":"Backlog","value":"backlog"},{"label":"Sprint","value":"sprint"}],"value":"sprint"}},"SearchList":{"props":{"items":{"description":"The rows; refill on `search`."},"query":{"description":"The input text."},"placeholder":{"description":"The placeholder."},"value":{"description":"The picked value (a check)."},"emptyText":{"description":"Shown on no match."},"maxRows":{"description":"Rows before it scrolls."},"showCount":{"description":"A count while typing."}},"description":"A search field over rows: typing filters, arrows move, Enter picks.","example":{"placeholder":"Search issues","items":[{"label":"Ship the search list","value":"exp-12","identifier":"EXP-12","icon":"status-in-progress"},{"label":"Close tabs on hover","value":"exp-15","identifier":"EXP-15","icon":"status-done"}]}},"ChipInput":{"props":{"label":{"description":"The field label."},"name":{"description":"The field's key in the submitted data."},"values":{"description":"The entries; bind them."},"suggestions":{"description":"Completions offered while typing."},"placeholder":{"description":"Hint text while empty."},"max":{"description":"The most entries allowed."},"disabled":{"description":"Shows it inert."},"checks":{"description":"Validation rules."}},"description":"A multi-value field of removable chips (Enter or comma adds); bind `values`.","example":{"label":"Labels","name":"labels","values":["bug","ios"]}},"DatePicker":{"props":{"label":{"description":"The field label."},"name":{"description":"The field's key in the submitted data."},"value":{"description":"The chosen day as yyyy-mm-dd, or empty."},"min":{"description":"The earliest allowed day."},"max":{"description":"The latest allowed day."},"placeholder":{"description":"Shown while empty."},"firstDayOfWeek":{"description":"0 (Sunday) to 6; else the locale's."}},"description":"A calendar date field (ISO yyyy-mm-dd).","example":{"label":"Due","name":"due","value":"2026-10-14"}},"DateRangePicker":{"props":{"label":{"description":"The field label."},"name":{"description":"The field's key in the submitted data (`{start, end}`)."},"start":{"description":"The first day as yyyy-mm-dd, or empty."},"end":{"description":"The last day as yyyy-mm-dd, or empty."},"min":{"description":"The earliest allowed day."},"max":{"description":"The latest allowed day."},"placeholder":{"description":"Shown while empty."},"firstDayOfWeek":{"description":"0 (Sunday) to 6; else the locale's."}},"description":"A two-date range field with one calendar (ISO dates).","example":{"label":"Sprint","name":"sprint","start":"2026-10-07","end":"2026-10-21"}},"TimePicker":{"props":{"label":{"description":"The field label."},"name":{"description":"The field's key in the submitted data."},"value":{"description":"The time as `HH:mm`, or empty."},"min":{"description":"The earliest time, `HH:mm`."},"max":{"description":"The latest time, `HH:mm`."},"step":{"description":"Minutes between list entries."},"placeholder":{"description":"Shown while empty."},"disabled":{"description":"Shows it inert."}},"description":"A time-of-day field (`HH:mm`) picked from a list every `step` minutes, or typed.","example":{"label":"Starts","name":"startsAt","value":"09:30"}},"FileUpload":{"props":{"label":{"description":"The field label."},"name":{"description":"The field's key in the submitted data."},"accept":{"description":"Accepted types, comma-separated (`image/*,.pdf`)."},"multiple":{"description":"Allows more than one file."},"maxSize":{"description":"Max bytes per file; bigger ones are refused."},"files":{"description":"The attached files, each removable."},"hint":{"description":"Text under the drop zone's title."},"disabled":{"description":"Shows it inert."}},"description":"A drop zone with a browse button; files reach the host via `upload`, listed back in `files`.","example":{"label":"Attachments","name":"attachments","accept":"image/*","multiple":true}},"Composer":{"props":{"placeholder":{"description":"Hint text while empty."},"value":{"description":"The draft text; bind it."},"submitLabel":{"description":"The submit button's accessibility label."},"attachments":{"description":"Shows the attach control."},"busy":{"description":"Turns submit into a stop while a reply streams."}},"description":"The chat input box: a growing text field with a submit button and optional attachments.","example":{"placeholder":"Ask anything"}},"Row":{"props":{"title":{"description":"The main text."},"identifier":{"description":"A mono identifier before the title (`EXP-12`)."},"subtitle":{"description":"A muted second line."},"meta":{"description":"Trailing muted text (a count, a time)."},"value":{"description":"A trailing readable value (a property, a pick)."},"placeholder":{"description":"Muted trailing text while `value` is empty."},"icon":{"description":"The lead glyph (the `leading` slot replaces it)."},"chevron":{"description":"Trailing disclosure or picker glyph."},"selected":{"description":"Draws it as the active row."},"density":{"description":"Row height class."},"surface":{"description":"A flat row, or a padded card with its own fill and border."},"pressable":{"description":"Makes it a press target that fires `press` (an `on.press` implies it)."},"depth":{"description":"Depth under a tree Section (0 = root)."}},"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.","example":{"title":"r/selfhosted","meta":"312 posts","pressable":true}},"TreeGuides":{"props":{"depth":{"description":"The row's nesting depth (0 = root)."},"elbowAt":{"description":"The gutter index that draws the elbow into this row; omit for a root."},"tee":{"description":"Continues the line past this row to a later sibling."},"passThrough":{"description":"Gutter indexes whose ancestor line continues straight through."}},"description":"The tree gutter a nested Row draws (filled by the core); never authored directly.","example":{"depth":1,"elbowAt":0,"tee":true,"passThrough":[]}},"Unknown":{"props":{"component":{"description":"The unmapped component's name."},"catalogId":{"description":"The catalog the component was authored against."}},"description":"A renderer's placeholder for an undefined component; never authored directly.","example":{"component":"Gauge"}}},"defs":{"option":{"properties":{"label":{"description":"The text shown for the option."},"value":{"description":"The stable value the selection reports."},"icon":{"description":"An icon shown before the label."},"disabled":{"description":"Shows the option but refuses it."},"description":{"description":"A second line."},"image":{"description":"A tile picture."}},"description":"One selectable option."},"check":{"properties":{"condition":{"description":"A function call or binding that must be true for the input to be valid."},"message":{"description":"The error shown when the condition is false."}},"description":"A client-side validation rule."},"tab":{"properties":{"label":{"description":"The tab title."},"value":{"description":"The value reported when the tab is active."},"icon":{"description":"An icon before the title."},"count":{"description":"A count badge after the title."}},"description":"One tab header."},"menuItem":{"properties":{"label":{"description":"The entry text (a separator has none)."},"value":{"description":"The value reported on select (actions and checkboxes)."},"kind":{"description":"What the entry is."},"icon":{"description":"An icon before the text."},"shortcut":{"description":"A key-cap hint after the text (`⌘K`)."},"checked":{"description":"A checkbox entry's state; bind it."},"destructive":{"description":"Styles the entry as a destructive action."},"disabled":{"description":"Shows the entry greyed and inert."},"items":{"description":"A submenu's entries (one level deep); bind it to rows a host source feeds (statuses, members, labels)."},"searchable":{"description":"Filters the submenu in a search list."},"placeholder":{"description":"A searchable submenu's placeholder."}},"description":"One menu entry: an action, a checkbox, a separator, a group label or a submenu."},"searchItem":{"properties":{"label":{"description":"The row title."},"value":{"description":"The value a pick reports."},"icon":{"description":"A leading glyph."},"identifier":{"description":"A mono id before the title (`EXP-12`)."},"disabled":{"description":"Refuses the row."}},"description":"One row of a search list."},"accordionItem":{"properties":{"title":{"description":"The section title."},"value":{"description":"The value reported when the section is open."},"count":{"description":"A count shown in the header."}},"description":"One collapsible section header; its body is the child at the same index."},"segment":{"properties":{"value":{"description":"The slice's share of max."},"tone":{"description":"The slice's colour tone."},"label":{"description":"What the slice stands for."}},"description":"One slice of a meter."},"series":{"properties":{"name":{"description":"The legend label."},"values":{"description":"One number per category."},"tone":{"description":"The series' colour tone; charts default to the chart hues in order."}},"description":"One chart series."},"pageItem":{"properties":{"title":{"description":"A caption over the page."}},"description":"One page of a carousel."},"step":{"properties":{"label":{"description":"The step name."},"description":{"description":"A muted line under the name."}},"description":"One wizard step."},"column":{"properties":{"key":{"description":"The row field it shows."},"label":{"description":"The header text."},"type":{"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."},"slot":{"description":"For `type: slot`: the Table slot whose component renders each cell with the row as its data scope."},"width":{"description":"A fixed width in px; otherwise columns share the width."},"align":{"description":"Cell alignment (numbers read best at `end`)."},"sortable":{"description":"Lets the header toggle the sort."},"currency":{"description":"ISO 4217 code of a currency column (USD)."},"decimals":{"description":"Fixed fraction digits of a number, currency or percent column."}},"description":"One table column."},"sort":{"properties":{"key":{"description":"The sorted column's key."},"direction":{"description":"Ascending or descending."}},"description":"A table sort."},"panel":{"properties":{"min":{"description":"Smallest size (10)."},"max":{"description":"Largest size (100)."},"collapsible":{"description":"Drags to 0 below half its min; Enter on the handle toggles."}},"description":"One Resizable panel's limits, percent of the group."},"file":{"properties":{"name":{"description":"The file name."},"size":{"description":"Bytes."},"type":{"description":"The MIME type."},"url":{"description":"Where it was stored, for a preview link."}},"description":"One attached file."}},"functions":{"core":{"percent":"The share of max as \"N%\", clamped to 0..100, two decimals; 0% when max is not positive.","add":"a + b; non-numbers count as 0.","sub":"a - b; non-numbers count as 0.","eq":"Strict equality of two values, except that a number equals a string spelling it (5 and \"5\"); nothing else coerces.","lt":"a < b as numbers.","clamp":"value as a number held inside [min, max]; a missing bound does not clamp; min wins when max < min.","cond":"`then` when `if` is truthy, else `else`.","fallback":"value unless it is missing (undefined or null), else default; a template's `{x|default}` over a bound x.","concat":"The values joined into one string (undefined and null as empty).","coalesce":"The first truthy value.","text":"The value as a string; no value when it is missing.","map":"cases[String(value)] when that case exists, else default.","len":"An array's or a string's length, else 0.","fill":"template with its {name} placeholders filled from params (unknown ones stay); a `$string.<id>` template resolves through the surface's string table first.","set":"Action only: writes value into the data model at path (a JSON pointer, relative to the node's data scope like a binding).","formatPercent":"A ratio as a locale percent through the surface Formatter (0.256 → 26%); decimals = fixed fraction digits.","formatRelativeTime":"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.","filter":"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."},"basic":{}}}"####;