neba 1.16.2 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/README.md +5 -5
  2. package/dist/a2ui/adapter-catalog.json +1 -0
  3. package/dist/a2ui/catalog.json +632 -145
  4. package/dist/a2ui/components.js +1 -1
  5. package/dist/a2ui/index.d.ts +22 -10
  6. package/dist/a2ui/index.js +1 -1
  7. package/dist/a2ui/schema.d.ts +8 -6
  8. package/dist/a2ui/schema.js +1 -1
  9. package/dist/components/accordion/Accordion.js +1 -1
  10. package/dist/components/agent-steps/AgentSteps.js +1 -1
  11. package/dist/components/alert/Alert.js +1 -1
  12. package/dist/components/anchor/Anchor.d.ts +3 -1
  13. package/dist/components/anchor/Anchor.js +1 -1
  14. package/dist/components/animate-counter/AnimateCounter.d.ts +11 -4
  15. package/dist/components/animate-counter/AnimateCounter.js +1 -1
  16. package/dist/components/animate-scramble/AnimateScramble.d.ts +6 -3
  17. package/dist/components/animate-scramble/AnimateScramble.js +1 -1
  18. package/dist/components/animate-split/AnimateSplit.d.ts +6 -3
  19. package/dist/components/animate-split/AnimateSplit.js +1 -1
  20. package/dist/components/animate-typing/AnimateTyping.js +1 -1
  21. package/dist/components/app-logo/AppLogo.js +1 -1
  22. package/dist/components/approval/Approval.js +1 -1
  23. package/dist/components/avatar/Avatar.js +1 -1
  24. package/dist/components/bar-chart/BarChart.js +1 -1
  25. package/dist/components/bottom-navigation/BottomNavigation.js +1 -1
  26. package/dist/components/box/Box.js +1 -1
  27. package/dist/components/breadcrumb/Breadcrumb.d.ts +3 -3
  28. package/dist/components/breadcrumb/Breadcrumb.js +1 -1
  29. package/dist/components/card/Card.js +1 -1
  30. package/dist/components/chat-bubble/ChatBubble.js +1 -1
  31. package/dist/components/chip/Chip.d.ts +4 -1
  32. package/dist/components/chip/Chip.js +1 -1
  33. package/dist/components/code-block/CodeBlock.js +1 -1
  34. package/dist/components/collapsible/Collapsible.js +1 -1
  35. package/dist/components/color-picker/ColorPicker.d.ts +3 -1
  36. package/dist/components/color-picker/ColorPicker.js +1 -1
  37. package/dist/components/combobox/Combobox.js +1 -1
  38. package/dist/components/command-palette/CommandPalette.js +1 -1
  39. package/dist/components/confirm/Confirm.js +1 -1
  40. package/dist/components/context-window/ContextWindow.d.ts +4 -1
  41. package/dist/components/context-window/ContextWindow.js +1 -1
  42. package/dist/components/data-list/DataList.d.ts +3 -2
  43. package/dist/components/data-list/DataList.js +1 -1
  44. package/dist/components/data-table/DataTable.d.ts +11 -5
  45. package/dist/components/data-table/DataTable.js +1 -1
  46. package/dist/components/date-range-picker/DateRangePicker.d.ts +3 -2
  47. package/dist/components/date-range-picker/DateRangePicker.js +1 -1
  48. package/dist/components/dialog/Dialog.js +1 -1
  49. package/dist/components/drawer/Drawer.js +1 -1
  50. package/dist/components/fieldset/Fieldset.js +1 -1
  51. package/dist/components/file-picker/FilePicker.d.ts +4 -0
  52. package/dist/components/file-picker/FilePicker.js +1 -1
  53. package/dist/components/footer/Footer.d.ts +4 -2
  54. package/dist/components/form/Form.d.ts +0 -14
  55. package/dist/components/form/Form.js +1 -1
  56. package/dist/components/gallery/Gallery.js +1 -1
  57. package/dist/components/gallery/GalleryViewer.js +1 -1
  58. package/dist/components/header/Header.d.ts +4 -3
  59. package/dist/components/heatmap-chart/HeatmapChart.js +1 -1
  60. package/dist/components/hover-card/HoverCard.d.ts +1 -1
  61. package/dist/components/how-to-steps/HowToSteps.d.ts +2 -1
  62. package/dist/components/how-to-steps/HowToSteps.js +1 -1
  63. package/dist/components/image/Image.d.ts +4 -1
  64. package/dist/components/image/Image.js +1 -1
  65. package/dist/components/inline-citation/InlineCitation.d.ts +4 -2
  66. package/dist/components/inline-citation/InlineCitation.js +1 -1
  67. package/dist/components/menu/Menu.d.ts +6 -2
  68. package/dist/components/menu/Menu.js +1 -1
  69. package/dist/components/mockup/Mockup.js +1 -1
  70. package/dist/components/navigation-menu/NavigationMenu.d.ts +1 -1
  71. package/dist/components/navigation-menu/NavigationMenu.js +1 -1
  72. package/dist/components/number-field/NumberField.js +1 -1
  73. package/dist/components/overlay/Overlay.d.ts +1 -1
  74. package/dist/components/page-layout/PageLayout.js +1 -1
  75. package/dist/components/pagination/Pagination.d.ts +3 -2
  76. package/dist/components/panes/Panes.js +1 -1
  77. package/dist/components/pie-chart/PieChart.js +1 -1
  78. package/dist/components/pill/Pill.js +1 -1
  79. package/dist/components/popover/Popover.js +1 -1
  80. package/dist/components/progress-box/ProgressBox.js +1 -1
  81. package/dist/components/prompt-input/PromptInput.d.ts +5 -3
  82. package/dist/components/prompt-input/PromptInput.js +1 -1
  83. package/dist/components/radio-group/RadioGroup.js +1 -1
  84. package/dist/components/rating/Rating.js +1 -1
  85. package/dist/components/reasoning/Reasoning.d.ts +7 -4
  86. package/dist/components/reasoning/Reasoning.js +1 -1
  87. package/dist/components/scatter-chart/ScatterChart.d.ts +7 -1
  88. package/dist/components/scatter-chart/ScatterChart.js +1 -1
  89. package/dist/components/scroll-area/ScrollArea.d.ts +12 -0
  90. package/dist/components/scroll-area/ScrollArea.js +1 -1
  91. package/dist/components/scroll-zone/ScrollZone.js +1 -1
  92. package/dist/components/segmented-button/SegmentedButton.js +1 -1
  93. package/dist/components/select/Select.d.ts +2 -1
  94. package/dist/components/select/Select.js +1 -1
  95. package/dist/components/sidebar/Sidebar.js +1 -1
  96. package/dist/components/sidebar/SidebarTrigger.js +1 -1
  97. package/dist/components/skeleton/Skeleton.js +1 -1
  98. package/dist/components/sources/Sources.d.ts +1 -1
  99. package/dist/components/sources/Sources.js +1 -1
  100. package/dist/components/stack/Stack.js +1 -1
  101. package/dist/components/streaming-text/StreamingText.js +1 -1
  102. package/dist/components/switch/Switch.d.ts +13 -2
  103. package/dist/components/switch/Switch.js +1 -1
  104. package/dist/components/switch/index.d.ts +1 -1
  105. package/dist/components/table/Table.d.ts +4 -2
  106. package/dist/components/tabs/Tabs.js +1 -1
  107. package/dist/components/text-field/TextField.js +1 -1
  108. package/dist/components/text-link/TextLink.js +1 -1
  109. package/dist/components/timeline-chart/TimelineChart.d.ts +6 -1
  110. package/dist/components/timeline-chart/TimelineChart.js +1 -1
  111. package/dist/components/toggle/Toggle.js +1 -1
  112. package/dist/components/tool-call/ToolCall.js +1 -1
  113. package/dist/components/tour/Tour.js +1 -1
  114. package/dist/components/transfer/Transfer.js +1 -1
  115. package/dist/components/tree-select/TreeSelect.js +1 -1
  116. package/dist/components/tree-view/TreeView.js +1 -1
  117. package/dist/components/typography/Typography.js +1 -1
  118. package/dist/components/visually-hidden/VisuallyHidden.d.ts +2 -2
  119. package/dist/components/window-pane/WindowPane.js +1 -1
  120. package/dist/hooks/useElementSize.d.ts +6 -2
  121. package/dist/hooks/useElementSize.js +1 -1
  122. package/dist/hooks/useMediaQuery.d.ts +3 -2
  123. package/dist/hooks/useOnScreen.d.ts +2 -2
  124. package/dist/hooks/useShortcut.d.ts +11 -3
  125. package/dist/hooks/useShortcut.js +1 -1
  126. package/dist/internal/animate.d.ts +8 -0
  127. package/dist/internal/animate.js +1 -1
  128. package/dist/internal/calendar.js +1 -1
  129. package/dist/internal/chart-brush.d.ts +3 -1
  130. package/dist/internal/chart-brush.js +1 -1
  131. package/dist/internal/chart-frame.d.ts +28 -2
  132. package/dist/internal/chart-frame.js +1 -1
  133. package/dist/internal/chart-line.js +1 -1
  134. package/dist/internal/chart.d.ts +21 -0
  135. package/dist/internal/chart.js +1 -1
  136. package/dist/internal/drag.d.ts +15 -0
  137. package/dist/internal/drag.js +1 -1
  138. package/dist/internal/drop.d.ts +12 -8
  139. package/dist/internal/drop.js +1 -1
  140. package/dist/internal/highlight.js +1 -1
  141. package/dist/internal/i18n.d.ts +40 -4
  142. package/dist/internal/i18n.js +1 -1
  143. package/dist/internal/icons.d.ts +3 -0
  144. package/dist/internal/icons.js +1 -1
  145. package/dist/internal/link.d.ts +27 -0
  146. package/dist/internal/link.js +1 -1
  147. package/dist/internal/new-tab.d.ts +21 -0
  148. package/dist/internal/new-tab.js +1 -0
  149. package/dist/internal/notch.d.ts +23 -1
  150. package/dist/internal/notch.js +1 -1
  151. package/dist/internal/observe.d.ts +3 -4
  152. package/dist/internal/picker.d.ts +21 -3
  153. package/dist/internal/picker.js +1 -1
  154. package/dist/internal/run.d.ts +7 -5
  155. package/dist/internal/run.js +1 -1
  156. package/dist/internal/search.d.ts +3 -3
  157. package/dist/internal/styles.d.ts +33 -1
  158. package/dist/internal/styles.js +1 -1
  159. package/dist/locales/ar.js +1 -1
  160. package/dist/locales/de.js +1 -1
  161. package/dist/locales/es.js +1 -1
  162. package/dist/locales/fr.js +1 -1
  163. package/dist/locales/hi.js +1 -1
  164. package/dist/locales/id.js +1 -1
  165. package/dist/locales/it.js +1 -1
  166. package/dist/locales/ja.js +1 -1
  167. package/dist/locales/ko.js +1 -1
  168. package/dist/locales/nl.js +1 -1
  169. package/dist/locales/pl.js +1 -1
  170. package/dist/locales/pt.js +1 -1
  171. package/dist/locales/ru.js +1 -1
  172. package/dist/locales/th.js +1 -1
  173. package/dist/locales/tr.js +1 -1
  174. package/dist/locales/vi.js +1 -1
  175. package/dist/locales/zh-hans.js +1 -1
  176. package/dist/locales/zh-hant.js +1 -1
  177. package/dist/styles.css +1 -1
  178. package/dist/tailwind.css +31 -4
  179. package/package.json +9 -3
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://neba.cdget.com/a2ui/catalog.json",
3
+ "$id": "https://neba.cdget.com/a2ui/1.17/catalog.json",
4
4
  "protocolVersion": "1.0",
5
5
  "title": "Neba",
6
6
  "description": "The subset of the Neba component library an agent can describe: eighteen components whose every prop is a literal, an enumerated value or a reference to another component by ID.",
7
- "catalogId": "https://neba.cdget.com/a2ui/catalog.json",
8
- "instructions": "Neba is a React component library. Every component below is a real one, and what you write here is turned into that component rather than into markup.\n\n## Laying a surface out\n\nNothing has a margin of its own. Two components sit beside each other only inside a `Flex`, and the gutter between them is that `Flex`'s `spacing`. Nest a vertical `Flex` inside a horizontal one to build a grid.\n\nA component that takes a child takes an **ID**, never an inline definition, and a `Card` and an `Alert` take exactly one — wrap several in a `Flex` and pass that.\n\n## Colour means something here\n\n`color` is one of six semantic families and never a decorative choice. `success`, `warning` and `danger` say how something went; `info` is a note; `primary` is the product's own accent and `secondary` is the quiet one. Do not reach for a family because a screen needs variety, and do not use `danger` for anything but something that failed or something that destroys.\n\nThere is **one** `solid` control in a view — the action the view exists for. Everything else is `outline` or `text`.\n\n## One ladder\n\n`size` is the same five steps on every component, so an `md` Button, an `md` TextField and an `md` Select are the same height and line up in a row. Pick one size for a screen and stay on it; `density` is the prop for making something tighter, and it changes padding only.\n\n## Fields carry their own words\n\nA `TextField`, a `Select`, a `Checkbox` and the rest each draw their own label, helper line and error message. Never add a `Typography` above a field to label it, and never add one below it to show an error — put the message in the field's own `checks`.\n\n## Text\n\nEvery string a reader sees is a `Typography`. Its `level` says what the text *is* rather than how big it should be: use `h1`…`h6` in order for real headings, and do not pick a heading level because you want larger text.\n\n## Building a sentence out of a value\n\nThere are no operators. `formatString(\"Hello ${/user/name}\")` is how a value is put into a sentence, and `formatNumber`, `formatCurrency`, `formatDate` and `pluralize` are how a number or a date is written in the reader's own language. Never assemble a date out of its parts.",
7
+ "catalogId": "https://neba.cdget.com/a2ui/1.17/catalog.json",
8
+ "instructions": "Neba is a React component library. Every component below is a real one, and what you write here is turned into that component rather than into markup.\n\n## Laying a surface out\n\nNothing has a margin of its own. Two components sit beside each other only inside a `Flex`, and the gutter between them is that `Flex`'s `spacing`. Nest a vertical `Flex` inside a horizontal one to build a grid.\n\nA component that takes a child takes an **ID**, never an inline definition, and a `Card` and an `Alert` take exactly one — wrap several in a `Flex` and pass that.\n\n## Colour means something here\n\n`color` is one of six semantic families and never a decorative choice. `success`, `warning` and `danger` say how something went; `info` is a note; `primary` is the product's own accent and `secondary` is the quiet one. Do not reach for a family because a screen needs variety, and do not use `danger` for anything but something that failed or something that destroys.\n\nThere is **one** `solid` control in a view — the action the view exists for. Everything else is `outline` or `text`.\n\n## One ladder\n\n`size` is the same five steps on every component, so an `md` Button, an `md` TextField and an `md` Select are the same height and line up in a row. Pick one size for a screen and stay on it; `density` is the prop for making something tighter, and it changes padding only.\n\n## Fields carry their own words\n\nA `TextField`, a `Select`, a `Checkbox` and the rest each draw their own label, helper line and error message. Never add a `Typography` above a field to label it, and never add one below it to show an error — put the message in the field's own `checks`. Give every check a `message` that says what to fix: one without a message shows \"Validation failed\", which tells the reader nothing.\n\n## Text\n\nEvery string a reader sees is a `Typography`. Its `level` says what the text *is* rather than how big it should be: use `h1`…`h6` in order for real headings, and do not pick a heading level because you want larger text.\n\n## Building a sentence out of a value\n\nThere are no operators. `formatString(\"Hello ${/user/name}\")` is how a value is put into a sentence, and `formatNumber`, `formatCurrency`, `formatDate` and `pluralize` are how a number or a date is written in the reader's own language. Never assemble a date out of its parts.",
9
9
  "components": {
10
10
  "Flex": {
11
11
  "type": "object",
@@ -20,7 +20,10 @@
20
20
  },
21
21
  "direction": {
22
22
  "type": "string",
23
- "enum": ["horizontal", "vertical"],
23
+ "enum": [
24
+ "horizontal",
25
+ "vertical"
26
+ ],
24
27
  "default": "horizontal",
25
28
  "description": "Which way the children run. `horizontal` is a row and `vertical` is a column."
26
29
  },
@@ -45,7 +48,13 @@
45
48
  },
46
49
  "alignItems": {
47
50
  "type": "string",
48
- "enum": ["start", "center", "end", "stretch", "baseline"],
51
+ "enum": [
52
+ "start",
53
+ "center",
54
+ "end",
55
+ "stretch",
56
+ "baseline"
57
+ ],
49
58
  "default": "stretch",
50
59
  "description": "Where the children sit across the direction."
51
60
  },
@@ -55,7 +64,10 @@
55
64
  "description": "Lets the children fall onto another line when they do not fit. Set it on a row of chips or of cards; leave it off on a row of two buttons."
56
65
  }
57
66
  },
58
- "required": ["component", "children"]
67
+ "required": [
68
+ "component",
69
+ "children"
70
+ ]
59
71
  },
60
72
  "Card": {
61
73
  "type": "object",
@@ -78,36 +90,63 @@
78
90
  },
79
91
  "variant": {
80
92
  "type": "string",
81
- "enum": ["solid", "outline", "text"],
93
+ "enum": [
94
+ "solid",
95
+ "outline",
96
+ "text"
97
+ ],
82
98
  "default": "outline",
83
99
  "description": "The weight of the sheet. `outline` is a hairline, `solid` a filled panel, `text` no sheet at all."
84
100
  },
85
101
  "size": {
86
102
  "type": "string",
87
- "enum": ["xs", "sm", "md", "lg", "xl"],
103
+ "enum": [
104
+ "xs",
105
+ "sm",
106
+ "md",
107
+ "lg",
108
+ "xl"
109
+ ],
88
110
  "default": "md",
89
111
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
90
112
  },
91
113
  "color": {
92
114
  "type": "string",
93
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
115
+ "enum": [
116
+ "primary",
117
+ "secondary",
118
+ "success",
119
+ "warning",
120
+ "danger",
121
+ "info"
122
+ ],
94
123
  "default": "primary",
95
124
  "description": "The family the edge and the focus ring take. The sheet itself is never dyed: a card holds other people's content, and tinting the paper under it puts every colour on that content on a background nobody chose."
96
125
  },
97
126
  "density": {
98
127
  "type": "string",
99
- "enum": ["default", "compact"],
128
+ "enum": [
129
+ "default",
130
+ "compact"
131
+ ],
100
132
  "default": "default",
101
133
  "description": "How tightly it packs its content. Padding only — never a height and never the type scale, so a compact control still lines up with a default one beside it."
102
134
  },
103
135
  "elevation": {
104
136
  "type": "integer",
105
- "enum": [0, 1, 2, 3],
137
+ "enum": [
138
+ 0,
139
+ 1,
140
+ 2,
141
+ 3
142
+ ],
106
143
  "default": 0,
107
144
  "description": "How far it sits off the page, as a drop shadow. `0` means no shadow at all, and is right for almost everything: the surface already has an edge. Raise it only for something that genuinely floats over the content around it."
108
145
  }
109
146
  },
110
- "required": ["component"]
147
+ "required": [
148
+ "component"
149
+ ]
111
150
  },
112
151
  "Divider": {
113
152
  "type": "object",
@@ -122,18 +161,29 @@
122
161
  },
123
162
  "orientation": {
124
163
  "type": "string",
125
- "enum": ["horizontal", "vertical"],
164
+ "enum": [
165
+ "horizontal",
166
+ "vertical"
167
+ ],
126
168
  "default": "horizontal",
127
169
  "description": "Which way the rule runs."
128
170
  },
129
171
  "size": {
130
172
  "type": "string",
131
- "enum": ["xs", "sm", "md", "lg", "xl"],
173
+ "enum": [
174
+ "xs",
175
+ "sm",
176
+ "md",
177
+ "lg",
178
+ "xl"
179
+ ],
132
180
  "default": "md",
133
181
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
134
182
  }
135
183
  },
136
- "required": ["component"]
184
+ "required": [
185
+ "component"
186
+ ]
137
187
  },
138
188
  "Typography": {
139
189
  "type": "object",
@@ -148,26 +198,52 @@
148
198
  },
149
199
  "level": {
150
200
  "type": "string",
151
- "enum": ["h1", "h2", "h3", "h4", "h5", "h6", "body", "lead", "caption", "overline"],
201
+ "enum": [
202
+ "h1",
203
+ "h2",
204
+ "h3",
205
+ "h4",
206
+ "h5",
207
+ "h6",
208
+ "body",
209
+ "lead",
210
+ "caption",
211
+ "overline"
212
+ ],
152
213
  "default": "body",
153
214
  "description": "What the text *is*, not how big it should be. `h1`…`h6` are headings and are drawn as real heading elements, so use them in order and do not pick one for its size; `lead` is the opening paragraph, `caption` a note under something, `overline` a small label above a figure."
154
215
  },
155
216
  "weight": {
156
217
  "type": "string",
157
- "enum": ["regular", "medium", "semibold", "bold"],
218
+ "enum": [
219
+ "regular",
220
+ "medium",
221
+ "semibold",
222
+ "bold"
223
+ ],
158
224
  "default": "regular",
159
225
  "description": "How heavy it is. A heading is already heavier than body text, so this is for the rare line that has to stand out inside one weight."
160
226
  },
161
227
  "align": {
162
228
  "type": "string",
163
- "enum": ["start", "center", "end", "justify"],
164
- "default": "start",
165
- "description": "Where the text sits in the width it has."
229
+ "enum": [
230
+ "start",
231
+ "center",
232
+ "end",
233
+ "justify"
234
+ ],
235
+ "description": "Where the text sits in the width it has. Left out, it follows the text around it."
166
236
  },
167
237
  "color": {
168
238
  "type": "string",
169
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
170
- "default": "primary",
239
+ "enum": [
240
+ "primary",
241
+ "secondary",
242
+ "success",
243
+ "warning",
244
+ "danger",
245
+ "info"
246
+ ],
171
247
  "description": "A semantic family, and it is deliberately not set by default: text in a paragraph is the paragraph's colour. Set it only when the colour *means* something — a figure that is over budget."
172
248
  },
173
249
  "lines": {
@@ -176,7 +252,10 @@
176
252
  "description": "Cuts the text off after this many lines with an ellipsis. Do not put it on anything a reader has to read."
177
253
  }
178
254
  },
179
- "required": ["component", "text"]
255
+ "required": [
256
+ "component",
257
+ "text"
258
+ ]
180
259
  },
181
260
  "Image": {
182
261
  "type": "object",
@@ -199,17 +278,33 @@
199
278
  },
200
279
  "fit": {
201
280
  "type": "string",
202
- "enum": ["cover", "contain", "fill", "none", "scale-down"],
281
+ "enum": [
282
+ "cover",
283
+ "contain",
284
+ "fill",
285
+ "none",
286
+ "scale-down"
287
+ ],
203
288
  "default": "cover",
204
289
  "description": "What the picture does inside that box. `cover` crops to fill it and `contain` fits the whole picture inside it."
205
290
  },
206
291
  "rounded": {
207
292
  "type": "string",
208
- "enum": ["xs", "sm", "md", "lg", "xl"],
293
+ "enum": [
294
+ "xs",
295
+ "sm",
296
+ "md",
297
+ "lg",
298
+ "xl"
299
+ ],
209
300
  "description": "Rounds the corners by one step of the radius ladder."
210
301
  }
211
302
  },
212
- "required": ["component", "src", "alt"]
303
+ "required": [
304
+ "component",
305
+ "src",
306
+ "alt"
307
+ ]
213
308
  },
214
309
  "Chip": {
215
310
  "type": "object",
@@ -224,19 +319,36 @@
224
319
  },
225
320
  "variant": {
226
321
  "type": "string",
227
- "enum": ["solid", "outline", "text"],
322
+ "enum": [
323
+ "solid",
324
+ "outline",
325
+ "text"
326
+ ],
228
327
  "default": "outline",
229
328
  "description": "The weight of the surface."
230
329
  },
231
330
  "size": {
232
331
  "type": "string",
233
- "enum": ["xs", "sm", "md", "lg", "xl"],
234
- "default": "sm",
332
+ "enum": [
333
+ "xs",
334
+ "sm",
335
+ "md",
336
+ "lg",
337
+ "xl"
338
+ ],
339
+ "default": "md",
235
340
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
236
341
  },
237
342
  "color": {
238
343
  "type": "string",
239
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
344
+ "enum": [
345
+ "primary",
346
+ "secondary",
347
+ "success",
348
+ "warning",
349
+ "danger",
350
+ "info"
351
+ ],
240
352
  "default": "primary",
241
353
  "description": "The family. It is the one thing a chip says beyond its word, so let it mean something: `success` for a state that is good, `danger` for one that is not."
242
354
  },
@@ -250,7 +362,10 @@
250
362
  "description": "Draws it as chosen. For a row of filters where some are on."
251
363
  }
252
364
  },
253
- "required": ["component", "text"]
365
+ "required": [
366
+ "component",
367
+ "text"
368
+ ]
254
369
  },
255
370
  "Avatar": {
256
371
  "type": "object",
@@ -269,24 +384,42 @@
269
384
  },
270
385
  "shape": {
271
386
  "type": "string",
272
- "enum": ["circle", "square"],
387
+ "enum": [
388
+ "circle",
389
+ "square"
390
+ ],
273
391
  "default": "circle",
274
392
  "description": "A circle for a person, a square for an organisation or a thing."
275
393
  },
276
394
  "size": {
277
395
  "type": "string",
278
- "enum": ["xs", "sm", "md", "lg", "xl"],
396
+ "enum": [
397
+ "xs",
398
+ "sm",
399
+ "md",
400
+ "lg",
401
+ "xl"
402
+ ],
279
403
  "default": "md",
280
404
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
281
405
  },
282
406
  "color": {
283
407
  "type": "string",
284
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
408
+ "enum": [
409
+ "primary",
410
+ "secondary",
411
+ "success",
412
+ "warning",
413
+ "danger",
414
+ "info"
415
+ ],
285
416
  "default": "primary",
286
417
  "description": "The family behind the initials, when they are what is drawn."
287
418
  }
288
419
  },
289
- "required": ["component"]
420
+ "required": [
421
+ "component"
422
+ ]
290
423
  },
291
424
  "Statistic": {
292
425
  "type": "object",
@@ -301,7 +434,7 @@
301
434
  },
302
435
  "value": {
303
436
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
304
- "description": "The figure itself."
437
+ "description": "The figure itself. Write it as plain digits, such as `1234.5`, when `previousValue` is given: that is the number the delta is worked out from, and it is then written in the reader's own language. Anything else is drawn as written, with no delta."
305
438
  },
306
439
  "unit": {
307
440
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
@@ -317,30 +450,51 @@
317
450
  },
318
451
  "delta": {
319
452
  "type": "string",
320
- "enum": ["percent", "absolute", "both", "none"],
453
+ "enum": [
454
+ "percent",
455
+ "absolute",
456
+ "both",
457
+ "none"
458
+ ],
321
459
  "default": "percent",
322
460
  "description": "How the change is written."
323
461
  },
324
462
  "betterWhen": {
325
463
  "type": "string",
326
- "enum": ["up", "down"],
464
+ "enum": [
465
+ "up",
466
+ "down"
467
+ ],
327
468
  "default": "up",
328
469
  "description": "Which direction is good news, and therefore which colour the delta takes. Set it to `down` for anything that should be falling — failures, latency, cost — or a drop will be drawn in red."
329
470
  },
330
471
  "size": {
331
472
  "type": "string",
332
- "enum": ["xs", "sm", "md", "lg", "xl"],
473
+ "enum": [
474
+ "xs",
475
+ "sm",
476
+ "md",
477
+ "lg",
478
+ "xl"
479
+ ],
333
480
  "default": "md",
334
481
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
335
482
  },
336
483
  "align": {
337
484
  "type": "string",
338
- "enum": ["start", "center", "end"],
485
+ "enum": [
486
+ "start",
487
+ "center",
488
+ "end"
489
+ ],
339
490
  "default": "start",
340
491
  "description": "Where the block sits in the width it has."
341
492
  }
342
493
  },
343
- "required": ["component", "value"]
494
+ "required": [
495
+ "component",
496
+ "value"
497
+ ]
344
498
  },
345
499
  "DataList": {
346
500
  "type": "object",
@@ -364,13 +518,19 @@
364
518
  "description": "The value."
365
519
  }
366
520
  },
367
- "required": ["label", "value"],
521
+ "required": [
522
+ "label",
523
+ "value"
524
+ ],
368
525
  "additionalProperties": false
369
526
  }
370
527
  },
371
528
  "orientation": {
372
529
  "type": "string",
373
- "enum": ["horizontal", "vertical"],
530
+ "enum": [
531
+ "horizontal",
532
+ "vertical"
533
+ ],
374
534
  "default": "horizontal",
375
535
  "description": "`horizontal` puts the label beside the value, which is what a details panel wants; `vertical` puts it above, for a narrow column or for values long enough that a label beside them would leave the row mostly empty."
376
536
  },
@@ -381,18 +541,30 @@
381
541
  },
382
542
  "size": {
383
543
  "type": "string",
384
- "enum": ["xs", "sm", "md", "lg", "xl"],
544
+ "enum": [
545
+ "xs",
546
+ "sm",
547
+ "md",
548
+ "lg",
549
+ "xl"
550
+ ],
385
551
  "default": "md",
386
552
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
387
553
  },
388
554
  "density": {
389
555
  "type": "string",
390
- "enum": ["default", "compact"],
556
+ "enum": [
557
+ "default",
558
+ "compact"
559
+ ],
391
560
  "default": "default",
392
561
  "description": "How tightly it packs its content. Padding only — never a height and never the type scale, so a compact control still lines up with a default one beside it."
393
562
  }
394
563
  },
395
- "required": ["component", "items"]
564
+ "required": [
565
+ "component",
566
+ "items"
567
+ ]
396
568
  },
397
569
  "Alert": {
398
570
  "type": "object",
@@ -411,30 +583,52 @@
411
583
  },
412
584
  "color": {
413
585
  "type": "string",
414
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
586
+ "enum": [
587
+ "primary",
588
+ "secondary",
589
+ "success",
590
+ "warning",
591
+ "danger",
592
+ "info"
593
+ ],
415
594
  "default": "info",
416
595
  "description": "Which kind of message it is, and the one prop here that carries meaning. `info` is a note, `success` something that went right, `warning` something to look at before it goes wrong, `danger` something that failed. The shape of the mark changes with it too, so the message is not carried by colour alone."
417
596
  },
418
597
  "variant": {
419
598
  "type": "string",
420
- "enum": ["solid", "outline", "text"],
599
+ "enum": [
600
+ "solid",
601
+ "outline",
602
+ "text"
603
+ ],
421
604
  "default": "outline",
422
605
  "description": "The weight of the surface. `text` draws no box, which is right for an alert set among form fields."
423
606
  },
424
607
  "size": {
425
608
  "type": "string",
426
- "enum": ["xs", "sm", "md", "lg", "xl"],
609
+ "enum": [
610
+ "xs",
611
+ "sm",
612
+ "md",
613
+ "lg",
614
+ "xl"
615
+ ],
427
616
  "default": "md",
428
617
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
429
618
  },
430
619
  "density": {
431
620
  "type": "string",
432
- "enum": ["default", "compact"],
621
+ "enum": [
622
+ "default",
623
+ "compact"
624
+ ],
433
625
  "default": "default",
434
626
  "description": "How tightly it packs its content. Padding only — never a height and never the type scale, so a compact control still lines up with a default one beside it."
435
627
  }
436
628
  },
437
- "required": ["component"]
629
+ "required": [
630
+ "component"
631
+ ]
438
632
  },
439
633
  "Button": {
440
634
  "type": "object",
@@ -458,31 +652,56 @@
458
652
  },
459
653
  "variant": {
460
654
  "type": "string",
461
- "enum": ["solid", "outline", "text"],
655
+ "enum": [
656
+ "solid",
657
+ "outline",
658
+ "text"
659
+ ],
462
660
  "default": "solid",
463
661
  "description": "How loud it is. There is **one** `solid` button in a view — the thing the view is for — and everything else is `outline` or `text`. Three filled buttons in a row is three buttons with no answer."
464
662
  },
465
663
  "size": {
466
664
  "type": "string",
467
- "enum": ["xs", "sm", "md", "lg", "xl"],
665
+ "enum": [
666
+ "xs",
667
+ "sm",
668
+ "md",
669
+ "lg",
670
+ "xl"
671
+ ],
468
672
  "default": "md",
469
673
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
470
674
  },
471
675
  "color": {
472
676
  "type": "string",
473
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
677
+ "enum": [
678
+ "primary",
679
+ "secondary",
680
+ "success",
681
+ "warning",
682
+ "danger",
683
+ "info"
684
+ ],
474
685
  "default": "primary",
475
686
  "description": "The family. Use `danger` for something that destroys, and leave the rest alone: a button is not coloured for variety."
476
687
  },
477
688
  "density": {
478
689
  "type": "string",
479
- "enum": ["default", "compact"],
690
+ "enum": [
691
+ "default",
692
+ "compact"
693
+ ],
480
694
  "default": "default",
481
695
  "description": "How tightly it packs its content. Padding only — never a height and never the type scale, so a compact control still lines up with a default one beside it."
482
696
  },
483
697
  "elevation": {
484
698
  "type": "integer",
485
- "enum": [0, 1, 2, 3],
699
+ "enum": [
700
+ 0,
701
+ 1,
702
+ 2,
703
+ 3
704
+ ],
486
705
  "default": 0,
487
706
  "description": "How far it sits off the page, as a drop shadow. `0` means no shadow at all, and is right for almost everything: the surface already has an edge. Raise it only for something that genuinely floats over the content around it."
488
707
  },
@@ -502,7 +721,11 @@
502
721
  "description": "Stretches it to the width it is given."
503
722
  }
504
723
  },
505
- "required": ["component", "text", "action"]
724
+ "required": [
725
+ "component",
726
+ "text",
727
+ "action"
728
+ ]
506
729
  }
507
730
  ]
508
731
  },
@@ -525,7 +748,7 @@
525
748
  },
526
749
  "value": {
527
750
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
528
- "description": "What is in it."
751
+ "description": "What is in it. Bind it to a path in the data model, which is where what the reader enters is written; a literal is only where it starts, and nothing the reader does to it reaches the data model."
529
752
  },
530
753
  "placeholder": {
531
754
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
@@ -548,25 +771,45 @@
548
771
  },
549
772
  "variant": {
550
773
  "type": "string",
551
- "enum": ["solid", "outline", "text"],
774
+ "enum": [
775
+ "solid",
776
+ "outline",
777
+ "text"
778
+ ],
552
779
  "default": "outline",
553
780
  "description": "The weight of the shell."
554
781
  },
555
782
  "size": {
556
783
  "type": "string",
557
- "enum": ["xs", "sm", "md", "lg", "xl"],
784
+ "enum": [
785
+ "xs",
786
+ "sm",
787
+ "md",
788
+ "lg",
789
+ "xl"
790
+ ],
558
791
  "default": "md",
559
792
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
560
793
  },
561
794
  "color": {
562
795
  "type": "string",
563
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
796
+ "enum": [
797
+ "primary",
798
+ "secondary",
799
+ "success",
800
+ "warning",
801
+ "danger",
802
+ "info"
803
+ ],
564
804
  "default": "primary",
565
805
  "description": "The family the edge, the ring and the caret take."
566
806
  },
567
807
  "density": {
568
808
  "type": "string",
569
- "enum": ["default", "compact"],
809
+ "enum": [
810
+ "default",
811
+ "compact"
812
+ ],
570
813
  "default": "default",
571
814
  "description": "How tightly it packs its content. Padding only — never a height and never the type scale, so a compact control still lines up with a default one beside it."
572
815
  },
@@ -591,7 +834,10 @@
591
834
  "description": "Stretches it to the width it is given."
592
835
  }
593
836
  },
594
- "required": ["component", "label"]
837
+ "required": [
838
+ "component",
839
+ "label"
840
+ ]
595
841
  }
596
842
  ]
597
843
  },
@@ -614,7 +860,7 @@
614
860
  },
615
861
  "value": {
616
862
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicNumber",
617
- "description": "The number."
863
+ "description": "The number. Bind it to a path in the data model, which is where what the reader enters is written; a literal is only where it starts, and nothing the reader does to it reaches the data model."
618
864
  },
619
865
  "description": {
620
866
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
@@ -635,25 +881,45 @@
635
881
  },
636
882
  "variant": {
637
883
  "type": "string",
638
- "enum": ["solid", "outline", "text"],
884
+ "enum": [
885
+ "solid",
886
+ "outline",
887
+ "text"
888
+ ],
639
889
  "default": "outline",
640
890
  "description": "The weight of the shell."
641
891
  },
642
892
  "size": {
643
893
  "type": "string",
644
- "enum": ["xs", "sm", "md", "lg", "xl"],
894
+ "enum": [
895
+ "xs",
896
+ "sm",
897
+ "md",
898
+ "lg",
899
+ "xl"
900
+ ],
645
901
  "default": "md",
646
902
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
647
903
  },
648
904
  "color": {
649
905
  "type": "string",
650
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
906
+ "enum": [
907
+ "primary",
908
+ "secondary",
909
+ "success",
910
+ "warning",
911
+ "danger",
912
+ "info"
913
+ ],
651
914
  "default": "primary",
652
915
  "description": "The family the edge, the ring and the caret take."
653
916
  },
654
917
  "density": {
655
918
  "type": "string",
656
- "enum": ["default", "compact"],
919
+ "enum": [
920
+ "default",
921
+ "compact"
922
+ ],
657
923
  "default": "default",
658
924
  "description": "How tightly it packs its content. Padding only — never a height and never the type scale, so a compact control still lines up with a default one beside it."
659
925
  },
@@ -673,7 +939,10 @@
673
939
  "description": "Shown but not editable."
674
940
  }
675
941
  },
676
- "required": ["component", "label"]
942
+ "required": [
943
+ "component",
944
+ "label"
945
+ ]
677
946
  }
678
947
  ]
679
948
  },
@@ -696,7 +965,7 @@
696
965
  },
697
966
  "checked": {
698
967
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicBoolean",
699
- "description": "Whether it is ticked."
968
+ "description": "Whether it is ticked. Bind it to a path in the data model, which is where what the reader enters is written; a literal is only where it starts, and nothing the reader does to it reaches the data model."
700
969
  },
701
970
  "description": {
702
971
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
@@ -704,13 +973,26 @@
704
973
  },
705
974
  "size": {
706
975
  "type": "string",
707
- "enum": ["xs", "sm", "md", "lg", "xl"],
976
+ "enum": [
977
+ "xs",
978
+ "sm",
979
+ "md",
980
+ "lg",
981
+ "xl"
982
+ ],
708
983
  "default": "md",
709
984
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
710
985
  },
711
986
  "color": {
712
987
  "type": "string",
713
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
988
+ "enum": [
989
+ "primary",
990
+ "secondary",
991
+ "success",
992
+ "warning",
993
+ "danger",
994
+ "info"
995
+ ],
714
996
  "default": "primary",
715
997
  "description": "The family the tick takes."
716
998
  },
@@ -725,7 +1007,10 @@
725
1007
  "description": "Unavailable."
726
1008
  }
727
1009
  },
728
- "required": ["component", "label"]
1010
+ "required": [
1011
+ "component",
1012
+ "label"
1013
+ ]
729
1014
  }
730
1015
  ]
731
1016
  },
@@ -742,7 +1027,7 @@
742
1027
  },
743
1028
  "checked": {
744
1029
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicBoolean",
745
- "description": "Whether it is on."
1030
+ "description": "Whether it is on. Bind it to a path in the data model, which is where what the reader enters is written; a literal is only where it starts, and nothing the reader does to it reaches the data model."
746
1031
  },
747
1032
  "description": {
748
1033
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
@@ -750,13 +1035,26 @@
750
1035
  },
751
1036
  "size": {
752
1037
  "type": "string",
753
- "enum": ["xs", "sm", "md", "lg", "xl"],
1038
+ "enum": [
1039
+ "xs",
1040
+ "sm",
1041
+ "md",
1042
+ "lg",
1043
+ "xl"
1044
+ ],
754
1045
  "default": "md",
755
1046
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
756
1047
  },
757
1048
  "color": {
758
1049
  "type": "string",
759
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
1050
+ "enum": [
1051
+ "primary",
1052
+ "secondary",
1053
+ "success",
1054
+ "warning",
1055
+ "danger",
1056
+ "info"
1057
+ ],
760
1058
  "default": "primary",
761
1059
  "description": "The family the track takes when it is on."
762
1060
  },
@@ -766,7 +1064,10 @@
766
1064
  "description": "Unavailable."
767
1065
  }
768
1066
  },
769
- "required": ["component", "label"]
1067
+ "required": [
1068
+ "component",
1069
+ "label"
1070
+ ]
770
1071
  },
771
1072
  "RadioGroup": {
772
1073
  "type": "object",
@@ -787,7 +1088,7 @@
787
1088
  },
788
1089
  "value": {
789
1090
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
790
- "description": "Which option is taken, by its `value`."
1091
+ "description": "Which option is taken, by its `value`. Bind it to a path in the data model, which is where what the reader enters is written; a literal is only where it starts, and nothing the reader does to it reaches the data model."
791
1092
  },
792
1093
  "options": {
793
1094
  "type": "array",
@@ -813,7 +1114,10 @@
813
1114
  "description": "Offered but not available."
814
1115
  }
815
1116
  },
816
- "required": ["label", "value"],
1117
+ "required": [
1118
+ "label",
1119
+ "value"
1120
+ ],
817
1121
  "additionalProperties": false
818
1122
  }
819
1123
  },
@@ -823,19 +1127,35 @@
823
1127
  },
824
1128
  "orientation": {
825
1129
  "type": "string",
826
- "enum": ["horizontal", "vertical"],
1130
+ "enum": [
1131
+ "horizontal",
1132
+ "vertical"
1133
+ ],
827
1134
  "default": "vertical",
828
1135
  "description": "Which way the options run. A column is nearly always right; a row only works while every label is one word."
829
1136
  },
830
1137
  "size": {
831
1138
  "type": "string",
832
- "enum": ["xs", "sm", "md", "lg", "xl"],
1139
+ "enum": [
1140
+ "xs",
1141
+ "sm",
1142
+ "md",
1143
+ "lg",
1144
+ "xl"
1145
+ ],
833
1146
  "default": "md",
834
1147
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
835
1148
  },
836
1149
  "color": {
837
1150
  "type": "string",
838
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
1151
+ "enum": [
1152
+ "primary",
1153
+ "secondary",
1154
+ "success",
1155
+ "warning",
1156
+ "danger",
1157
+ "info"
1158
+ ],
839
1159
  "default": "primary",
840
1160
  "description": "The family the chosen dot takes."
841
1161
  },
@@ -850,7 +1170,11 @@
850
1170
  "description": "Unavailable."
851
1171
  }
852
1172
  },
853
- "required": ["component", "label", "options"]
1173
+ "required": [
1174
+ "component",
1175
+ "label",
1176
+ "options"
1177
+ ]
854
1178
  }
855
1179
  ]
856
1180
  },
@@ -873,7 +1197,7 @@
873
1197
  },
874
1198
  "value": {
875
1199
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
876
- "description": "Which option is taken, by its `value`."
1200
+ "description": "Which option is taken, by its `value`. Bind it to a path in the data model, which is where what the reader enters is written; a literal is only where it starts, and nothing the reader does to it reaches the data model."
877
1201
  },
878
1202
  "placeholder": {
879
1203
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
@@ -903,7 +1227,9 @@
903
1227
  "description": "Listed but not available."
904
1228
  }
905
1229
  },
906
- "required": ["value"],
1230
+ "required": [
1231
+ "value"
1232
+ ],
907
1233
  "additionalProperties": false
908
1234
  }
909
1235
  },
@@ -913,25 +1239,45 @@
913
1239
  },
914
1240
  "variant": {
915
1241
  "type": "string",
916
- "enum": ["solid", "outline", "text"],
1242
+ "enum": [
1243
+ "solid",
1244
+ "outline",
1245
+ "text"
1246
+ ],
917
1247
  "default": "outline",
918
1248
  "description": "The weight of the trigger, which is a field's shell."
919
1249
  },
920
1250
  "size": {
921
1251
  "type": "string",
922
- "enum": ["xs", "sm", "md", "lg", "xl"],
1252
+ "enum": [
1253
+ "xs",
1254
+ "sm",
1255
+ "md",
1256
+ "lg",
1257
+ "xl"
1258
+ ],
923
1259
  "default": "md",
924
1260
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
925
1261
  },
926
1262
  "color": {
927
1263
  "type": "string",
928
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
1264
+ "enum": [
1265
+ "primary",
1266
+ "secondary",
1267
+ "success",
1268
+ "warning",
1269
+ "danger",
1270
+ "info"
1271
+ ],
929
1272
  "default": "primary",
930
1273
  "description": "The family the edge and the ring take."
931
1274
  },
932
1275
  "density": {
933
1276
  "type": "string",
934
- "enum": ["default", "compact"],
1277
+ "enum": [
1278
+ "default",
1279
+ "compact"
1280
+ ],
935
1281
  "default": "default",
936
1282
  "description": "How tightly it packs its content. Padding only — never a height and never the type scale, so a compact control still lines up with a default one beside it."
937
1283
  },
@@ -951,7 +1297,11 @@
951
1297
  "description": "Stretches it to the width it is given."
952
1298
  }
953
1299
  },
954
- "required": ["component", "label", "options"]
1300
+ "required": [
1301
+ "component",
1302
+ "label",
1303
+ "options"
1304
+ ]
955
1305
  }
956
1306
  ]
957
1307
  },
@@ -968,7 +1318,7 @@
968
1318
  },
969
1319
  "value": {
970
1320
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicNumber",
971
- "description": "Where it is."
1321
+ "description": "Where it is. Bind it to a path in the data model, which is where what the reader enters is written; a literal is only where it starts, and nothing the reader does to it reaches the data model."
972
1322
  },
973
1323
  "min": {
974
1324
  "type": "number",
@@ -991,13 +1341,26 @@
991
1341
  },
992
1342
  "size": {
993
1343
  "type": "string",
994
- "enum": ["xs", "sm", "md", "lg", "xl"],
1344
+ "enum": [
1345
+ "xs",
1346
+ "sm",
1347
+ "md",
1348
+ "lg",
1349
+ "xl"
1350
+ ],
995
1351
  "default": "md",
996
1352
  "description": "How big it is. One ladder for the whole library: an `md` Button, field and Chip are the same height and line up in a row."
997
1353
  },
998
1354
  "color": {
999
1355
  "type": "string",
1000
- "enum": ["primary", "secondary", "success", "warning", "danger", "info"],
1356
+ "enum": [
1357
+ "primary",
1358
+ "secondary",
1359
+ "success",
1360
+ "warning",
1361
+ "danger",
1362
+ "info"
1363
+ ],
1001
1364
  "default": "primary",
1002
1365
  "description": "The family the filled part of the track takes."
1003
1366
  },
@@ -1007,7 +1370,10 @@
1007
1370
  "description": "Unavailable."
1008
1371
  }
1009
1372
  },
1010
- "required": ["component", "label"]
1373
+ "required": [
1374
+ "component",
1375
+ "label"
1376
+ ]
1011
1377
  }
1012
1378
  },
1013
1379
  "functions": {
@@ -1025,16 +1391,21 @@
1025
1391
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString"
1026
1392
  }
1027
1393
  },
1028
- "required": ["value"],
1394
+ "required": [
1395
+ "value"
1396
+ ],
1029
1397
  "unevaluatedProperties": false
1030
1398
  }
1031
1399
  },
1032
- "required": ["call", "args"],
1400
+ "required": [
1401
+ "call",
1402
+ "args"
1403
+ ],
1033
1404
  "returnType": "boolean"
1034
1405
  },
1035
1406
  "length": {
1036
1407
  "type": "object",
1037
- "description": "True when the value is between `min` and `max` characters long. Either bound may be left out.",
1408
+ "description": "True when the value is at least `min` and at most `max` characters long. Give at least one of the two.",
1038
1409
  "properties": {
1039
1410
  "call": {
1040
1411
  "const": "length"
@@ -1052,11 +1423,28 @@
1052
1423
  "type": "number"
1053
1424
  }
1054
1425
  },
1055
- "required": ["value"],
1056
- "unevaluatedProperties": false
1426
+ "required": [
1427
+ "value"
1428
+ ],
1429
+ "unevaluatedProperties": false,
1430
+ "anyOf": [
1431
+ {
1432
+ "required": [
1433
+ "min"
1434
+ ]
1435
+ },
1436
+ {
1437
+ "required": [
1438
+ "max"
1439
+ ]
1440
+ }
1441
+ ]
1057
1442
  }
1058
1443
  },
1059
- "required": ["call", "args"],
1444
+ "required": [
1445
+ "call",
1446
+ "args"
1447
+ ],
1060
1448
  "returnType": "boolean"
1061
1449
  },
1062
1450
  "regex": {
@@ -1076,16 +1464,22 @@
1076
1464
  "type": "string"
1077
1465
  }
1078
1466
  },
1079
- "required": ["value", "pattern"],
1467
+ "required": [
1468
+ "value",
1469
+ "pattern"
1470
+ ],
1080
1471
  "unevaluatedProperties": false
1081
1472
  }
1082
1473
  },
1083
- "required": ["call", "args"],
1474
+ "required": [
1475
+ "call",
1476
+ "args"
1477
+ ],
1084
1478
  "returnType": "boolean"
1085
1479
  },
1086
1480
  "numeric": {
1087
1481
  "type": "object",
1088
- "description": "True when the value is a number, and between `min` and `max` if either is given.",
1482
+ "description": "True when the value is a number at least `min` and at most `max`. Give at least one of the two.",
1089
1483
  "properties": {
1090
1484
  "call": {
1091
1485
  "const": "numeric"
@@ -1103,11 +1497,28 @@
1103
1497
  "type": "number"
1104
1498
  }
1105
1499
  },
1106
- "required": ["value"],
1107
- "unevaluatedProperties": false
1500
+ "required": [
1501
+ "value"
1502
+ ],
1503
+ "unevaluatedProperties": false,
1504
+ "anyOf": [
1505
+ {
1506
+ "required": [
1507
+ "min"
1508
+ ]
1509
+ },
1510
+ {
1511
+ "required": [
1512
+ "max"
1513
+ ]
1514
+ }
1515
+ ]
1108
1516
  }
1109
1517
  },
1110
- "required": ["call", "args"],
1518
+ "required": [
1519
+ "call",
1520
+ "args"
1521
+ ],
1111
1522
  "returnType": "boolean"
1112
1523
  },
1113
1524
  "email": {
@@ -1124,11 +1535,16 @@
1124
1535
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString"
1125
1536
  }
1126
1537
  },
1127
- "required": ["value"],
1538
+ "required": [
1539
+ "value"
1540
+ ],
1128
1541
  "unevaluatedProperties": false
1129
1542
  }
1130
1543
  },
1131
- "required": ["call", "args"],
1544
+ "required": [
1545
+ "call",
1546
+ "args"
1547
+ ],
1132
1548
  "returnType": "boolean"
1133
1549
  },
1134
1550
  "formatString": {
@@ -1145,16 +1561,21 @@
1145
1561
  "type": "string"
1146
1562
  }
1147
1563
  },
1148
- "required": ["value"],
1564
+ "required": [
1565
+ "value"
1566
+ ],
1149
1567
  "unevaluatedProperties": false
1150
1568
  }
1151
1569
  },
1152
- "required": ["call", "args"],
1570
+ "required": [
1571
+ "call",
1572
+ "args"
1573
+ ],
1153
1574
  "returnType": "string"
1154
1575
  },
1155
1576
  "formatNumber": {
1156
1577
  "type": "object",
1157
- "description": "Writes a number in the reader's own language, with the digit grouping that language uses.",
1578
+ "description": "Writes a number in the language the renderer was built for, with the digit grouping that language uses.",
1158
1579
  "properties": {
1159
1580
  "call": {
1160
1581
  "const": "formatNumber"
@@ -1165,18 +1586,26 @@
1165
1586
  "value": {
1166
1587
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicNumber"
1167
1588
  },
1168
- "minimumFractionDigits": {
1169
- "type": "number"
1589
+ "decimals": {
1590
+ "type": "number",
1591
+ "description": "How many digits follow the decimal point. Left out, the number keeps the digits it has."
1170
1592
  },
1171
- "maximumFractionDigits": {
1172
- "type": "number"
1593
+ "grouping": {
1594
+ "type": "boolean",
1595
+ "description": "Whether to write the thousands separators.",
1596
+ "default": true
1173
1597
  }
1174
1598
  },
1175
- "required": ["value"],
1599
+ "required": [
1600
+ "value"
1601
+ ],
1176
1602
  "unevaluatedProperties": false
1177
1603
  }
1178
1604
  },
1179
- "required": ["call", "args"],
1605
+ "required": [
1606
+ "call",
1607
+ "args"
1608
+ ],
1180
1609
  "returnType": "string"
1181
1610
  },
1182
1611
  "formatCurrency": {
@@ -1195,18 +1624,33 @@
1195
1624
  "currency": {
1196
1625
  "type": "string",
1197
1626
  "description": "An ISO 4217 code, such as `USD` or `KRW`."
1627
+ },
1628
+ "decimals": {
1629
+ "type": "number",
1630
+ "description": "How many digits follow the decimal point. Left out, the currency's own number of them."
1631
+ },
1632
+ "grouping": {
1633
+ "type": "boolean",
1634
+ "description": "Whether to write the thousands separators.",
1635
+ "default": true
1198
1636
  }
1199
1637
  },
1200
- "required": ["value", "currency"],
1638
+ "required": [
1639
+ "value",
1640
+ "currency"
1641
+ ],
1201
1642
  "unevaluatedProperties": false
1202
1643
  }
1203
1644
  },
1204
- "required": ["call", "args"],
1645
+ "required": [
1646
+ "call",
1647
+ "args"
1648
+ ],
1205
1649
  "returnType": "string"
1206
1650
  },
1207
1651
  "formatDate": {
1208
1652
  "type": "object",
1209
- "description": "Writes a date in the reader's own language. Never assemble one out of numbers: the order of the parts is exactly what differs between languages.",
1653
+ "description": "Writes a date or a time through a pattern. The names of months and weekdays are English whatever the reader's language, so for a reader in another language write a pattern of numbers in the order that language uses.",
1210
1654
  "properties": {
1211
1655
  "call": {
1212
1656
  "const": "formatDate"
@@ -1218,25 +1662,27 @@
1218
1662
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString",
1219
1663
  "description": "An ISO 8601 date or date-time."
1220
1664
  },
1221
- "dateStyle": {
1665
+ "format": {
1222
1666
  "type": "string",
1223
- "enum": ["full", "long", "medium", "short"]
1224
- },
1225
- "timeStyle": {
1226
- "type": "string",
1227
- "enum": ["full", "long", "medium", "short"]
1667
+ "description": "A Unicode TR35 pattern, such as `MMM d, yyyy` or `HH:mm`; or `ISO` for the ISO 8601 string."
1228
1668
  }
1229
1669
  },
1230
- "required": ["value"],
1670
+ "required": [
1671
+ "value",
1672
+ "format"
1673
+ ],
1231
1674
  "unevaluatedProperties": false
1232
1675
  }
1233
1676
  },
1234
- "required": ["call", "args"],
1677
+ "required": [
1678
+ "call",
1679
+ "args"
1680
+ ],
1235
1681
  "returnType": "string"
1236
1682
  },
1237
1683
  "pluralize": {
1238
1684
  "type": "object",
1239
- "description": "Picks the wording that goes with a count. English has two forms and other languages have up to six, which is why this is a function rather than a ternary.",
1685
+ "description": "Picks the wording that goes with a count, by the plural category of the language the renderer was built for. English needs `one` and `other`; other languages use up to six categories, and `other` is the one that is always required.",
1240
1686
  "properties": {
1241
1687
  "call": {
1242
1688
  "const": "pluralize"
@@ -1244,21 +1690,40 @@
1244
1690
  "args": {
1245
1691
  "type": "object",
1246
1692
  "properties": {
1247
- "count": {
1248
- "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicNumber"
1693
+ "value": {
1694
+ "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicNumber",
1695
+ "description": "The count."
1696
+ },
1697
+ "zero": {
1698
+ "type": "string"
1249
1699
  },
1250
1700
  "one": {
1251
1701
  "type": "string"
1252
1702
  },
1703
+ "two": {
1704
+ "type": "string"
1705
+ },
1706
+ "few": {
1707
+ "type": "string"
1708
+ },
1709
+ "many": {
1710
+ "type": "string"
1711
+ },
1253
1712
  "other": {
1254
1713
  "type": "string"
1255
1714
  }
1256
1715
  },
1257
- "required": ["count", "one", "other"],
1716
+ "required": [
1717
+ "value",
1718
+ "other"
1719
+ ],
1258
1720
  "unevaluatedProperties": false
1259
1721
  }
1260
1722
  },
1261
- "required": ["call", "args"],
1723
+ "required": [
1724
+ "call",
1725
+ "args"
1726
+ ],
1262
1727
  "returnType": "string"
1263
1728
  },
1264
1729
  "openUrl": {
@@ -1275,18 +1740,23 @@
1275
1740
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicString"
1276
1741
  }
1277
1742
  },
1278
- "required": ["url"],
1743
+ "required": [
1744
+ "url"
1745
+ ],
1279
1746
  "unevaluatedProperties": false
1280
1747
  }
1281
1748
  },
1282
- "required": ["call", "args"],
1749
+ "required": [
1750
+ "call",
1751
+ "args"
1752
+ ],
1283
1753
  "returnType": "void",
1284
1754
  "allowedCallers": "rendererOnly",
1285
1755
  "requiresUserActivation": true
1286
1756
  },
1287
1757
  "and": {
1288
1758
  "type": "object",
1289
- "description": "True when every one of them is.",
1759
+ "description": "True when every one of two or more values is.",
1290
1760
  "properties": {
1291
1761
  "call": {
1292
1762
  "const": "and"
@@ -1298,19 +1768,25 @@
1298
1768
  "type": "array",
1299
1769
  "items": {
1300
1770
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicBoolean"
1301
- }
1771
+ },
1772
+ "minItems": 2
1302
1773
  }
1303
1774
  },
1304
- "required": ["values"],
1775
+ "required": [
1776
+ "values"
1777
+ ],
1305
1778
  "unevaluatedProperties": false
1306
1779
  }
1307
1780
  },
1308
- "required": ["call", "args"],
1781
+ "required": [
1782
+ "call",
1783
+ "args"
1784
+ ],
1309
1785
  "returnType": "boolean"
1310
1786
  },
1311
1787
  "or": {
1312
1788
  "type": "object",
1313
- "description": "True when any one of them is.",
1789
+ "description": "True when any one of two or more values is.",
1314
1790
  "properties": {
1315
1791
  "call": {
1316
1792
  "const": "or"
@@ -1322,14 +1798,20 @@
1322
1798
  "type": "array",
1323
1799
  "items": {
1324
1800
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicBoolean"
1325
- }
1801
+ },
1802
+ "minItems": 2
1326
1803
  }
1327
1804
  },
1328
- "required": ["values"],
1805
+ "required": [
1806
+ "values"
1807
+ ],
1329
1808
  "unevaluatedProperties": false
1330
1809
  }
1331
1810
  },
1332
- "required": ["call", "args"],
1811
+ "required": [
1812
+ "call",
1813
+ "args"
1814
+ ],
1333
1815
  "returnType": "boolean"
1334
1816
  },
1335
1817
  "not": {
@@ -1346,11 +1828,16 @@
1346
1828
  "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DynamicBoolean"
1347
1829
  }
1348
1830
  },
1349
- "required": ["value"],
1831
+ "required": [
1832
+ "value"
1833
+ ],
1350
1834
  "unevaluatedProperties": false
1351
1835
  }
1352
1836
  },
1353
- "required": ["call", "args"],
1837
+ "required": [
1838
+ "call",
1839
+ "args"
1840
+ ],
1354
1841
  "returnType": "boolean"
1355
1842
  }
1356
1843
  },