@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,1725 @@
1
+ import {
2
+ coreCatalog2,
3
+ TOKEN_GROUPS2,
4
+ catalogView2
5
+ } from "../chunks/index-gwkt14w3.js";
6
+ import {
7
+ describeCatalog2
8
+ } from "../chunks/index-xrm6f7wc.js";
9
+ import {
10
+ style_default
11
+ } from "../chunks/index-njt7yzzm.js";
12
+ // packages/exponential-ui/vendor/a2ui/v0_9/basic_catalog.json
13
+ var basic_catalog_default = {
14
+ $schema: "https://json-schema.org/draft/2020-12/schema",
15
+ $id: "https://a2ui.org/specification/v0_9/basic_catalog.json",
16
+ title: "A2UI Basic Catalog",
17
+ description: "Unified catalog of basic A2UI components and functions.",
18
+ catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json",
19
+ components: {
20
+ Text: {
21
+ type: "object",
22
+ allOf: [
23
+ {
24
+ $ref: "common_types.json#/$defs/ComponentCommon"
25
+ },
26
+ {
27
+ $ref: "#/$defs/CatalogComponentCommon"
28
+ },
29
+ {
30
+ type: "object",
31
+ properties: {
32
+ component: {
33
+ const: "Text"
34
+ },
35
+ text: {
36
+ $ref: "common_types.json#/$defs/DynamicString",
37
+ description: "The text content to display. While simple Markdown formatting is supported (i.e. without HTML, images, or links), utilizing dedicated UI components is generally preferred for a richer and more structured presentation."
38
+ },
39
+ variant: {
40
+ type: "string",
41
+ description: "A hint for the base text style.",
42
+ enum: ["h1", "h2", "h3", "h4", "h5", "caption", "body"],
43
+ default: "body"
44
+ }
45
+ },
46
+ required: ["component", "text"]
47
+ }
48
+ ],
49
+ unevaluatedProperties: false
50
+ },
51
+ Image: {
52
+ type: "object",
53
+ allOf: [
54
+ {
55
+ $ref: "common_types.json#/$defs/ComponentCommon"
56
+ },
57
+ {
58
+ $ref: "#/$defs/CatalogComponentCommon"
59
+ },
60
+ {
61
+ type: "object",
62
+ properties: {
63
+ component: {
64
+ const: "Image"
65
+ },
66
+ url: {
67
+ $ref: "common_types.json#/$defs/DynamicString",
68
+ description: "The URL of the image to display."
69
+ },
70
+ description: {
71
+ $ref: "common_types.json#/$defs/DynamicString",
72
+ description: "Accessibility text for the image."
73
+ },
74
+ fit: {
75
+ type: "string",
76
+ description: "Specifies how the image should be resized to fit its container. This corresponds to the CSS 'object-fit' property.",
77
+ enum: ["contain", "cover", "fill", "none", "scaleDown"],
78
+ default: "fill"
79
+ },
80
+ variant: {
81
+ type: "string",
82
+ description: "A hint for the image size and style.",
83
+ enum: [
84
+ "icon",
85
+ "avatar",
86
+ "smallFeature",
87
+ "mediumFeature",
88
+ "largeFeature",
89
+ "header"
90
+ ],
91
+ default: "mediumFeature"
92
+ }
93
+ },
94
+ required: ["component", "url"]
95
+ }
96
+ ],
97
+ unevaluatedProperties: false
98
+ },
99
+ Icon: {
100
+ type: "object",
101
+ allOf: [
102
+ {
103
+ $ref: "common_types.json#/$defs/ComponentCommon"
104
+ },
105
+ {
106
+ $ref: "#/$defs/CatalogComponentCommon"
107
+ },
108
+ {
109
+ type: "object",
110
+ properties: {
111
+ component: {
112
+ const: "Icon"
113
+ },
114
+ name: {
115
+ description: "The name of the icon to display.",
116
+ oneOf: [
117
+ {
118
+ type: "string",
119
+ enum: [
120
+ "accountCircle",
121
+ "add",
122
+ "arrowBack",
123
+ "arrowForward",
124
+ "attachFile",
125
+ "calendarToday",
126
+ "call",
127
+ "camera",
128
+ "check",
129
+ "close",
130
+ "delete",
131
+ "download",
132
+ "edit",
133
+ "event",
134
+ "error",
135
+ "fastForward",
136
+ "favorite",
137
+ "favoriteOff",
138
+ "folder",
139
+ "help",
140
+ "home",
141
+ "info",
142
+ "locationOn",
143
+ "lock",
144
+ "lockOpen",
145
+ "mail",
146
+ "menu",
147
+ "moreVert",
148
+ "moreHoriz",
149
+ "notificationsOff",
150
+ "notifications",
151
+ "pause",
152
+ "payment",
153
+ "person",
154
+ "phone",
155
+ "photo",
156
+ "play",
157
+ "print",
158
+ "refresh",
159
+ "rewind",
160
+ "search",
161
+ "send",
162
+ "settings",
163
+ "share",
164
+ "shoppingCart",
165
+ "skipNext",
166
+ "skipPrevious",
167
+ "star",
168
+ "starHalf",
169
+ "starOff",
170
+ "stop",
171
+ "upload",
172
+ "visibility",
173
+ "visibilityOff",
174
+ "volumeDown",
175
+ "volumeMute",
176
+ "volumeOff",
177
+ "volumeUp",
178
+ "warning"
179
+ ]
180
+ },
181
+ {
182
+ type: "object",
183
+ properties: {
184
+ path: {
185
+ type: "string"
186
+ }
187
+ },
188
+ required: ["path"],
189
+ additionalProperties: false
190
+ }
191
+ ]
192
+ }
193
+ },
194
+ required: ["component", "name"]
195
+ }
196
+ ],
197
+ unevaluatedProperties: false
198
+ },
199
+ Video: {
200
+ type: "object",
201
+ allOf: [
202
+ {
203
+ $ref: "common_types.json#/$defs/ComponentCommon"
204
+ },
205
+ {
206
+ $ref: "#/$defs/CatalogComponentCommon"
207
+ },
208
+ {
209
+ type: "object",
210
+ properties: {
211
+ component: {
212
+ const: "Video"
213
+ },
214
+ url: {
215
+ $ref: "common_types.json#/$defs/DynamicString",
216
+ description: "The URL of the video to display."
217
+ }
218
+ },
219
+ required: ["component", "url"]
220
+ }
221
+ ],
222
+ unevaluatedProperties: false
223
+ },
224
+ AudioPlayer: {
225
+ type: "object",
226
+ allOf: [
227
+ {
228
+ $ref: "common_types.json#/$defs/ComponentCommon"
229
+ },
230
+ {
231
+ $ref: "#/$defs/CatalogComponentCommon"
232
+ },
233
+ {
234
+ type: "object",
235
+ properties: {
236
+ component: {
237
+ const: "AudioPlayer"
238
+ },
239
+ url: {
240
+ $ref: "common_types.json#/$defs/DynamicString",
241
+ description: "The URL of the audio to be played."
242
+ },
243
+ description: {
244
+ description: "A description of the audio, such as a title or summary.",
245
+ $ref: "common_types.json#/$defs/DynamicString"
246
+ }
247
+ },
248
+ required: ["component", "url"]
249
+ }
250
+ ],
251
+ unevaluatedProperties: false
252
+ },
253
+ Row: {
254
+ type: "object",
255
+ allOf: [
256
+ {
257
+ $ref: "common_types.json#/$defs/ComponentCommon"
258
+ },
259
+ {
260
+ $ref: "#/$defs/CatalogComponentCommon"
261
+ },
262
+ {
263
+ type: "object",
264
+ description: "A layout component that arranges its children horizontally. To create a grid layout, nest Columns within this Row.",
265
+ properties: {
266
+ component: {
267
+ const: "Row"
268
+ },
269
+ children: {
270
+ description: "Defines the children. Use an array of strings for a fixed set of children, or a template object to generate children from a data list. Children cannot be defined inline, they must be referred to by ID.",
271
+ $ref: "common_types.json#/$defs/ChildList"
272
+ },
273
+ justify: {
274
+ type: "string",
275
+ description: "Defines the arrangement of children along the main axis (horizontally). Use 'spaceBetween' to push items to the edges, or 'start'/'end'/'center' to pack them together.",
276
+ enum: [
277
+ "center",
278
+ "end",
279
+ "spaceAround",
280
+ "spaceBetween",
281
+ "spaceEvenly",
282
+ "start",
283
+ "stretch"
284
+ ],
285
+ default: "start"
286
+ },
287
+ align: {
288
+ type: "string",
289
+ description: "Defines the alignment of children along the cross axis (vertically). This is similar to the CSS 'align-items' property, but uses camelCase values (e.g., 'start').",
290
+ enum: ["start", "center", "end", "stretch"],
291
+ default: "stretch"
292
+ }
293
+ },
294
+ required: ["component", "children"]
295
+ }
296
+ ],
297
+ unevaluatedProperties: false
298
+ },
299
+ Column: {
300
+ type: "object",
301
+ allOf: [
302
+ {
303
+ $ref: "common_types.json#/$defs/ComponentCommon"
304
+ },
305
+ {
306
+ $ref: "#/$defs/CatalogComponentCommon"
307
+ },
308
+ {
309
+ type: "object",
310
+ description: "A layout component that arranges its children vertically. To create a grid layout, nest Rows within this Column.",
311
+ properties: {
312
+ component: {
313
+ const: "Column"
314
+ },
315
+ children: {
316
+ description: "Defines the children. Use an array of strings for a fixed set of children, or a template object to generate children from a data list. Children cannot be defined inline, they must be referred to by ID.",
317
+ $ref: "common_types.json#/$defs/ChildList"
318
+ },
319
+ justify: {
320
+ type: "string",
321
+ description: "Defines the arrangement of children along the main axis (vertically). Use 'spaceBetween' to push items to the edges (e.g. header at top, footer at bottom), or 'start'/'end'/'center' to pack them together.",
322
+ enum: [
323
+ "start",
324
+ "center",
325
+ "end",
326
+ "spaceBetween",
327
+ "spaceAround",
328
+ "spaceEvenly",
329
+ "stretch"
330
+ ],
331
+ default: "start"
332
+ },
333
+ align: {
334
+ type: "string",
335
+ description: "Defines the alignment of children along the cross axis (horizontally). This is similar to the CSS 'align-items' property.",
336
+ enum: ["center", "end", "start", "stretch"],
337
+ default: "stretch"
338
+ }
339
+ },
340
+ required: ["component", "children"]
341
+ }
342
+ ],
343
+ unevaluatedProperties: false
344
+ },
345
+ List: {
346
+ type: "object",
347
+ allOf: [
348
+ {
349
+ $ref: "common_types.json#/$defs/ComponentCommon"
350
+ },
351
+ {
352
+ $ref: "#/$defs/CatalogComponentCommon"
353
+ },
354
+ {
355
+ type: "object",
356
+ properties: {
357
+ component: {
358
+ const: "List"
359
+ },
360
+ children: {
361
+ description: "Defines the children. Use an array of strings for a fixed set of children, or a template object to generate children from a data list.",
362
+ $ref: "common_types.json#/$defs/ChildList"
363
+ },
364
+ direction: {
365
+ type: "string",
366
+ description: "The direction in which the list items are laid out.",
367
+ enum: ["vertical", "horizontal"],
368
+ default: "vertical"
369
+ },
370
+ align: {
371
+ type: "string",
372
+ description: "Defines the alignment of children along the cross axis.",
373
+ enum: ["start", "center", "end", "stretch"],
374
+ default: "stretch"
375
+ }
376
+ },
377
+ required: ["component", "children"]
378
+ }
379
+ ],
380
+ unevaluatedProperties: false
381
+ },
382
+ Card: {
383
+ type: "object",
384
+ allOf: [
385
+ {
386
+ $ref: "common_types.json#/$defs/ComponentCommon"
387
+ },
388
+ {
389
+ $ref: "#/$defs/CatalogComponentCommon"
390
+ },
391
+ {
392
+ type: "object",
393
+ properties: {
394
+ component: {
395
+ const: "Card"
396
+ },
397
+ child: {
398
+ $ref: "common_types.json#/$defs/ComponentId",
399
+ description: "The ID of the single child component to be rendered inside the card. To display multiple elements, you MUST wrap them in a layout component (like Column or Row) and pass that container's ID here. Do NOT pass multiple IDs or a non-existent ID. Do NOT define the child component inline."
400
+ }
401
+ },
402
+ required: ["component", "child"]
403
+ }
404
+ ],
405
+ unevaluatedProperties: false
406
+ },
407
+ Tabs: {
408
+ type: "object",
409
+ allOf: [
410
+ {
411
+ $ref: "common_types.json#/$defs/ComponentCommon"
412
+ },
413
+ {
414
+ $ref: "#/$defs/CatalogComponentCommon"
415
+ },
416
+ {
417
+ type: "object",
418
+ properties: {
419
+ component: {
420
+ const: "Tabs"
421
+ },
422
+ tabs: {
423
+ type: "array",
424
+ description: "An array of objects, where each object defines a tab with a title and a child component.",
425
+ minItems: 1,
426
+ items: {
427
+ type: "object",
428
+ properties: {
429
+ title: {
430
+ description: "The tab title.",
431
+ $ref: "common_types.json#/$defs/DynamicString"
432
+ },
433
+ child: {
434
+ $ref: "common_types.json#/$defs/ComponentId",
435
+ description: "The ID of the child component. Do NOT define the component inline."
436
+ }
437
+ },
438
+ required: ["title", "child"],
439
+ additionalProperties: false
440
+ }
441
+ }
442
+ },
443
+ required: ["component", "tabs"]
444
+ }
445
+ ],
446
+ unevaluatedProperties: false
447
+ },
448
+ Modal: {
449
+ type: "object",
450
+ allOf: [
451
+ {
452
+ $ref: "common_types.json#/$defs/ComponentCommon"
453
+ },
454
+ {
455
+ $ref: "#/$defs/CatalogComponentCommon"
456
+ },
457
+ {
458
+ type: "object",
459
+ properties: {
460
+ component: {
461
+ const: "Modal"
462
+ },
463
+ trigger: {
464
+ $ref: "common_types.json#/$defs/ComponentId",
465
+ description: "The ID of the component that opens the modal when interacted with (e.g., a button). Do NOT define the component inline."
466
+ },
467
+ content: {
468
+ $ref: "common_types.json#/$defs/ComponentId",
469
+ description: "The ID of the component to be displayed inside the modal. Do NOT define the component inline."
470
+ }
471
+ },
472
+ required: ["component", "trigger", "content"]
473
+ }
474
+ ],
475
+ unevaluatedProperties: false
476
+ },
477
+ Divider: {
478
+ type: "object",
479
+ allOf: [
480
+ {
481
+ $ref: "common_types.json#/$defs/ComponentCommon"
482
+ },
483
+ {
484
+ $ref: "#/$defs/CatalogComponentCommon"
485
+ },
486
+ {
487
+ type: "object",
488
+ properties: {
489
+ component: {
490
+ const: "Divider"
491
+ },
492
+ axis: {
493
+ type: "string",
494
+ description: "The orientation of the divider.",
495
+ enum: ["horizontal", "vertical"],
496
+ default: "horizontal"
497
+ }
498
+ },
499
+ required: ["component"]
500
+ }
501
+ ],
502
+ unevaluatedProperties: false
503
+ },
504
+ Button: {
505
+ type: "object",
506
+ allOf: [
507
+ {
508
+ $ref: "common_types.json#/$defs/ComponentCommon"
509
+ },
510
+ {
511
+ $ref: "#/$defs/CatalogComponentCommon"
512
+ },
513
+ {
514
+ $ref: "common_types.json#/$defs/Checkable"
515
+ },
516
+ {
517
+ type: "object",
518
+ properties: {
519
+ component: {
520
+ const: "Button"
521
+ },
522
+ child: {
523
+ $ref: "common_types.json#/$defs/ComponentId",
524
+ description: "The ID of the child component. Use a 'Text' component for a labeled button. Only use an 'Icon' if the requirements explicitly ask for an icon-only button. Do NOT define the child component inline."
525
+ },
526
+ variant: {
527
+ type: "string",
528
+ description: "A hint for the button style. If omitted, a default button style is used. 'primary' indicates this is the main call-to-action button. 'borderless' means the button has no visual border or background, making its child content appear like a clickable link.",
529
+ enum: ["default", "primary", "borderless"],
530
+ default: "default"
531
+ },
532
+ action: {
533
+ $ref: "common_types.json#/$defs/Action"
534
+ }
535
+ },
536
+ required: ["component", "child", "action"]
537
+ }
538
+ ],
539
+ unevaluatedProperties: false
540
+ },
541
+ TextField: {
542
+ type: "object",
543
+ allOf: [
544
+ {
545
+ $ref: "common_types.json#/$defs/ComponentCommon"
546
+ },
547
+ {
548
+ $ref: "#/$defs/CatalogComponentCommon"
549
+ },
550
+ {
551
+ $ref: "common_types.json#/$defs/Checkable"
552
+ },
553
+ {
554
+ type: "object",
555
+ properties: {
556
+ component: {
557
+ const: "TextField"
558
+ },
559
+ label: {
560
+ $ref: "common_types.json#/$defs/DynamicString",
561
+ description: "The text label for the input field."
562
+ },
563
+ value: {
564
+ $ref: "common_types.json#/$defs/DynamicString",
565
+ description: "The value of the text field."
566
+ },
567
+ variant: {
568
+ type: "string",
569
+ description: "The type of input field to display.",
570
+ enum: ["longText", "number", "shortText", "obscured"],
571
+ default: "shortText"
572
+ },
573
+ validationRegexp: {
574
+ type: "string",
575
+ description: "A regular expression used for client-side validation of the input."
576
+ }
577
+ },
578
+ required: ["component", "label"]
579
+ }
580
+ ],
581
+ unevaluatedProperties: false
582
+ },
583
+ CheckBox: {
584
+ type: "object",
585
+ allOf: [
586
+ {
587
+ $ref: "common_types.json#/$defs/ComponentCommon"
588
+ },
589
+ {
590
+ $ref: "#/$defs/CatalogComponentCommon"
591
+ },
592
+ {
593
+ $ref: "common_types.json#/$defs/Checkable"
594
+ },
595
+ {
596
+ type: "object",
597
+ properties: {
598
+ component: {
599
+ const: "CheckBox"
600
+ },
601
+ label: {
602
+ $ref: "common_types.json#/$defs/DynamicString",
603
+ description: "The text to display next to the checkbox."
604
+ },
605
+ value: {
606
+ $ref: "common_types.json#/$defs/DynamicBoolean",
607
+ description: "The current state of the checkbox (true for checked, false for unchecked)."
608
+ }
609
+ },
610
+ required: ["component", "label", "value"]
611
+ }
612
+ ],
613
+ unevaluatedProperties: false
614
+ },
615
+ ChoicePicker: {
616
+ type: "object",
617
+ allOf: [
618
+ {
619
+ $ref: "common_types.json#/$defs/ComponentCommon"
620
+ },
621
+ {
622
+ $ref: "#/$defs/CatalogComponentCommon"
623
+ },
624
+ {
625
+ $ref: "common_types.json#/$defs/Checkable"
626
+ },
627
+ {
628
+ type: "object",
629
+ description: "A component that allows selecting one or more options from a list.",
630
+ properties: {
631
+ component: {
632
+ const: "ChoicePicker"
633
+ },
634
+ label: {
635
+ $ref: "common_types.json#/$defs/DynamicString",
636
+ description: "The label for the group of options."
637
+ },
638
+ variant: {
639
+ type: "string",
640
+ description: "A hint for how the choice picker should be displayed and behave.",
641
+ enum: ["multipleSelection", "mutuallyExclusive"],
642
+ default: "mutuallyExclusive"
643
+ },
644
+ options: {
645
+ type: "array",
646
+ description: "The list of available options to choose from.",
647
+ items: {
648
+ type: "object",
649
+ properties: {
650
+ label: {
651
+ description: "The text to display for this option.",
652
+ $ref: "common_types.json#/$defs/DynamicString"
653
+ },
654
+ value: {
655
+ type: "string",
656
+ description: "The stable value associated with this option."
657
+ }
658
+ },
659
+ required: ["label", "value"],
660
+ additionalProperties: false
661
+ }
662
+ },
663
+ value: {
664
+ $ref: "common_types.json#/$defs/DynamicStringList",
665
+ description: "The list of currently selected values. This should be bound to a string array in the data model."
666
+ },
667
+ displayStyle: {
668
+ type: "string",
669
+ description: "The display style of the component.",
670
+ enum: ["checkbox", "chips"],
671
+ default: "checkbox"
672
+ },
673
+ filterable: {
674
+ type: "boolean",
675
+ description: "If true, displays a search input to filter the options.",
676
+ default: false
677
+ }
678
+ },
679
+ required: ["component", "options", "value"]
680
+ }
681
+ ],
682
+ unevaluatedProperties: false
683
+ },
684
+ Slider: {
685
+ type: "object",
686
+ allOf: [
687
+ {
688
+ $ref: "common_types.json#/$defs/ComponentCommon"
689
+ },
690
+ {
691
+ $ref: "#/$defs/CatalogComponentCommon"
692
+ },
693
+ {
694
+ $ref: "common_types.json#/$defs/Checkable"
695
+ },
696
+ {
697
+ type: "object",
698
+ properties: {
699
+ component: {
700
+ const: "Slider"
701
+ },
702
+ label: {
703
+ $ref: "common_types.json#/$defs/DynamicString",
704
+ description: "The label for the slider."
705
+ },
706
+ min: {
707
+ type: "number",
708
+ description: "The minimum value of the slider.",
709
+ default: 0
710
+ },
711
+ max: {
712
+ type: "number",
713
+ description: "The maximum value of the slider."
714
+ },
715
+ value: {
716
+ $ref: "common_types.json#/$defs/DynamicNumber",
717
+ description: "The current value of the slider."
718
+ }
719
+ },
720
+ required: ["component", "value", "max"]
721
+ }
722
+ ],
723
+ unevaluatedProperties: false
724
+ },
725
+ DateTimeInput: {
726
+ type: "object",
727
+ allOf: [
728
+ {
729
+ $ref: "common_types.json#/$defs/ComponentCommon"
730
+ },
731
+ {
732
+ $ref: "#/$defs/CatalogComponentCommon"
733
+ },
734
+ {
735
+ $ref: "common_types.json#/$defs/Checkable"
736
+ },
737
+ {
738
+ type: "object",
739
+ properties: {
740
+ component: {
741
+ const: "DateTimeInput"
742
+ },
743
+ value: {
744
+ $ref: "common_types.json#/$defs/DynamicString",
745
+ description: "The selected date and/or time value in ISO 8601 format. If not yet set, initialize with an empty string."
746
+ },
747
+ enableDate: {
748
+ type: "boolean",
749
+ description: "If true, allows the user to select a date.",
750
+ default: false
751
+ },
752
+ enableTime: {
753
+ type: "boolean",
754
+ description: "If true, allows the user to select a time.",
755
+ default: false
756
+ },
757
+ min: {
758
+ allOf: [
759
+ {
760
+ $ref: "common_types.json#/$defs/DynamicString"
761
+ },
762
+ {
763
+ if: {
764
+ type: "string"
765
+ },
766
+ then: {
767
+ oneOf: [
768
+ {
769
+ format: "date"
770
+ },
771
+ {
772
+ format: "time"
773
+ },
774
+ {
775
+ format: "date-time"
776
+ }
777
+ ]
778
+ }
779
+ }
780
+ ],
781
+ description: "The minimum allowed date/time in ISO 8601 format."
782
+ },
783
+ max: {
784
+ allOf: [
785
+ {
786
+ $ref: "common_types.json#/$defs/DynamicString"
787
+ },
788
+ {
789
+ if: {
790
+ type: "string"
791
+ },
792
+ then: {
793
+ oneOf: [
794
+ {
795
+ format: "date"
796
+ },
797
+ {
798
+ format: "time"
799
+ },
800
+ {
801
+ format: "date-time"
802
+ }
803
+ ]
804
+ }
805
+ }
806
+ ],
807
+ description: "The maximum allowed date/time in ISO 8601 format."
808
+ },
809
+ label: {
810
+ $ref: "common_types.json#/$defs/DynamicString",
811
+ description: "The text label for the input field."
812
+ }
813
+ },
814
+ required: ["component", "value"]
815
+ }
816
+ ],
817
+ unevaluatedProperties: false
818
+ }
819
+ },
820
+ functions: {
821
+ required: {
822
+ type: "object",
823
+ description: "Checks that the value is not null, undefined, or empty.",
824
+ properties: {
825
+ call: {
826
+ const: "required"
827
+ },
828
+ args: {
829
+ type: "object",
830
+ properties: {
831
+ value: {
832
+ description: "The value to check."
833
+ }
834
+ },
835
+ required: ["value"],
836
+ additionalProperties: false
837
+ },
838
+ returnType: {
839
+ const: "boolean"
840
+ }
841
+ },
842
+ required: ["call", "args"],
843
+ unevaluatedProperties: false
844
+ },
845
+ regex: {
846
+ type: "object",
847
+ description: "Checks that the value matches a regular expression string.",
848
+ properties: {
849
+ call: {
850
+ const: "regex"
851
+ },
852
+ args: {
853
+ type: "object",
854
+ properties: {
855
+ value: {
856
+ $ref: "common_types.json#/$defs/DynamicString"
857
+ },
858
+ pattern: {
859
+ type: "string",
860
+ description: "The regex pattern to match against."
861
+ }
862
+ },
863
+ required: ["value", "pattern"],
864
+ unevaluatedProperties: false
865
+ },
866
+ returnType: {
867
+ const: "boolean"
868
+ }
869
+ },
870
+ required: ["call", "args"],
871
+ unevaluatedProperties: false
872
+ },
873
+ length: {
874
+ type: "object",
875
+ description: "Checks string length constraints.",
876
+ properties: {
877
+ call: {
878
+ const: "length"
879
+ },
880
+ args: {
881
+ type: "object",
882
+ properties: {
883
+ value: {
884
+ $ref: "common_types.json#/$defs/DynamicString"
885
+ },
886
+ min: {
887
+ type: "integer",
888
+ minimum: 0,
889
+ description: "The minimum allowed length."
890
+ },
891
+ max: {
892
+ type: "integer",
893
+ minimum: 0,
894
+ description: "The maximum allowed length."
895
+ }
896
+ },
897
+ required: ["value"],
898
+ anyOf: [
899
+ {
900
+ required: ["min"]
901
+ },
902
+ {
903
+ required: ["max"]
904
+ }
905
+ ],
906
+ unevaluatedProperties: false
907
+ },
908
+ returnType: {
909
+ const: "boolean"
910
+ }
911
+ },
912
+ required: ["call", "args"],
913
+ unevaluatedProperties: false
914
+ },
915
+ numeric: {
916
+ type: "object",
917
+ description: "Checks numeric range constraints.",
918
+ properties: {
919
+ call: {
920
+ const: "numeric"
921
+ },
922
+ args: {
923
+ type: "object",
924
+ properties: {
925
+ value: {
926
+ $ref: "common_types.json#/$defs/DynamicNumber"
927
+ },
928
+ min: {
929
+ type: "number",
930
+ description: "The minimum allowed value."
931
+ },
932
+ max: {
933
+ type: "number",
934
+ description: "The maximum allowed value."
935
+ }
936
+ },
937
+ required: ["value"],
938
+ anyOf: [
939
+ {
940
+ required: ["min"]
941
+ },
942
+ {
943
+ required: ["max"]
944
+ }
945
+ ],
946
+ unevaluatedProperties: false
947
+ },
948
+ returnType: {
949
+ const: "boolean"
950
+ }
951
+ },
952
+ required: ["call", "args"],
953
+ unevaluatedProperties: false
954
+ },
955
+ email: {
956
+ type: "object",
957
+ description: "Checks that the value is a valid email address.",
958
+ properties: {
959
+ call: {
960
+ const: "email"
961
+ },
962
+ args: {
963
+ type: "object",
964
+ properties: {
965
+ value: {
966
+ $ref: "common_types.json#/$defs/DynamicString"
967
+ }
968
+ },
969
+ required: ["value"],
970
+ unevaluatedProperties: false
971
+ },
972
+ returnType: {
973
+ const: "boolean"
974
+ }
975
+ },
976
+ required: ["call", "args"],
977
+ unevaluatedProperties: false
978
+ },
979
+ formatString: {
980
+ type: "object",
981
+ description: "Performs string interpolation of data model values and other functions in the catalog functions list and returns the resulting string. The value string can contain interpolated expressions in the `${expression}` format. Supported expression types include: JSON Pointer paths to the data model (e.g., `${/absolute/path}` or `${relative/path}`), and client-side function calls (e.g., `${now()}`). Function arguments must be named (e.g., `${formatDate(value:${/currentDate}, format:'MM-dd')}`). To include a literal `${` sequence, escape it as `\\${`.",
982
+ properties: {
983
+ call: {
984
+ const: "formatString"
985
+ },
986
+ args: {
987
+ type: "object",
988
+ properties: {
989
+ value: {
990
+ $ref: "common_types.json#/$defs/DynamicString"
991
+ }
992
+ },
993
+ required: ["value"],
994
+ unevaluatedProperties: false
995
+ },
996
+ returnType: {
997
+ const: "string"
998
+ }
999
+ },
1000
+ required: ["call", "args"],
1001
+ unevaluatedProperties: false
1002
+ },
1003
+ formatNumber: {
1004
+ type: "object",
1005
+ description: "Formats a number with the specified grouping and decimal precision.",
1006
+ properties: {
1007
+ call: {
1008
+ const: "formatNumber"
1009
+ },
1010
+ args: {
1011
+ type: "object",
1012
+ properties: {
1013
+ value: {
1014
+ $ref: "common_types.json#/$defs/DynamicNumber",
1015
+ description: "The number to format."
1016
+ },
1017
+ decimals: {
1018
+ $ref: "common_types.json#/$defs/DynamicNumber",
1019
+ description: "Optional. The number of decimal places to show. Defaults to 0 or 2 depending on locale."
1020
+ },
1021
+ grouping: {
1022
+ $ref: "common_types.json#/$defs/DynamicBoolean",
1023
+ description: "Optional. If true, uses locale-specific grouping separators (e.g. '1,000'). If false, returns raw digits (e.g. '1000'). Defaults to true."
1024
+ }
1025
+ },
1026
+ required: ["value"],
1027
+ unevaluatedProperties: false
1028
+ },
1029
+ returnType: {
1030
+ const: "string"
1031
+ }
1032
+ },
1033
+ required: ["call", "args"],
1034
+ unevaluatedProperties: false
1035
+ },
1036
+ formatCurrency: {
1037
+ type: "object",
1038
+ description: "Formats a number as a currency string.",
1039
+ properties: {
1040
+ call: {
1041
+ const: "formatCurrency"
1042
+ },
1043
+ args: {
1044
+ type: "object",
1045
+ properties: {
1046
+ value: {
1047
+ $ref: "common_types.json#/$defs/DynamicNumber",
1048
+ description: "The monetary amount."
1049
+ },
1050
+ currency: {
1051
+ $ref: "common_types.json#/$defs/DynamicString",
1052
+ description: "The ISO 4217 currency code (e.g., 'USD', 'EUR')."
1053
+ },
1054
+ decimals: {
1055
+ $ref: "common_types.json#/$defs/DynamicNumber",
1056
+ description: "Optional. The number of decimal places to show. Defaults to 0 or 2 depending on locale."
1057
+ },
1058
+ grouping: {
1059
+ $ref: "common_types.json#/$defs/DynamicBoolean",
1060
+ description: "Optional. If true, uses locale-specific grouping separators (e.g. '1,000'). If false, returns raw digits (e.g. '1000'). Defaults to true."
1061
+ }
1062
+ },
1063
+ required: ["currency", "value"],
1064
+ unevaluatedProperties: false
1065
+ },
1066
+ returnType: {
1067
+ const: "string"
1068
+ }
1069
+ },
1070
+ required: ["call", "args"],
1071
+ unevaluatedProperties: false
1072
+ },
1073
+ formatDate: {
1074
+ type: "object",
1075
+ description: "Formats a timestamp into a string using a pattern.",
1076
+ properties: {
1077
+ call: {
1078
+ const: "formatDate"
1079
+ },
1080
+ args: {
1081
+ type: "object",
1082
+ properties: {
1083
+ value: {
1084
+ $ref: "common_types.json#/$defs/DynamicValue",
1085
+ description: "The date to format."
1086
+ },
1087
+ format: {
1088
+ $ref: "common_types.json#/$defs/DynamicString",
1089
+ description: `A Unicode TR35 date pattern string.
1090
+
1091
+ Token Reference:
1092
+ - Year: 'yy' (26), 'yyyy' (2026)
1093
+ - Month: 'M' (1), 'MM' (01), 'MMM' (Jan), 'MMMM' (January)
1094
+ - Day: 'd' (1), 'dd' (01), 'E' (Tue), 'EEEE' (Tuesday)
1095
+ - Hour (12h): 'h' (1-12), 'hh' (01-12) - requires 'a' for AM/PM
1096
+ - Hour (24h): 'H' (0-23), 'HH' (00-23) - Military Time
1097
+ - Minute: 'mm' (00-59)
1098
+ - Second: 'ss' (00-59)
1099
+ - Period: 'a' (AM/PM)
1100
+
1101
+ Examples:
1102
+ - 'MMM dd, yyyy' -> 'Jan 16, 2026'
1103
+ - 'HH:mm' -> '14:30' (Military)
1104
+ - 'h:mm a' -> '2:30 PM'
1105
+ - 'EEEE, d MMMM' -> 'Friday, 16 January'`
1106
+ }
1107
+ },
1108
+ required: ["format", "value"],
1109
+ unevaluatedProperties: false
1110
+ },
1111
+ returnType: {
1112
+ const: "string"
1113
+ }
1114
+ },
1115
+ required: ["call", "args"],
1116
+ unevaluatedProperties: false
1117
+ },
1118
+ pluralize: {
1119
+ type: "object",
1120
+ description: "Returns a localized string based on the Common Locale Data Repository (CLDR) plural category of the count (zero, one, two, few, many, other). Requires an 'other' fallback. For English, just use 'one' and 'other'.",
1121
+ properties: {
1122
+ call: {
1123
+ const: "pluralize"
1124
+ },
1125
+ args: {
1126
+ type: "object",
1127
+ properties: {
1128
+ value: {
1129
+ $ref: "common_types.json#/$defs/DynamicNumber",
1130
+ description: "The numeric value used to determine the plural category."
1131
+ },
1132
+ zero: {
1133
+ $ref: "common_types.json#/$defs/DynamicString",
1134
+ description: "String for the 'zero' category (e.g., 0 items)."
1135
+ },
1136
+ one: {
1137
+ $ref: "common_types.json#/$defs/DynamicString",
1138
+ description: "String for the 'one' category (e.g., 1 item)."
1139
+ },
1140
+ two: {
1141
+ $ref: "common_types.json#/$defs/DynamicString",
1142
+ description: "String for the 'two' category (used in Arabic, Welsh, etc.)."
1143
+ },
1144
+ few: {
1145
+ $ref: "common_types.json#/$defs/DynamicString",
1146
+ description: "String for the 'few' category (e.g., small groups in Slavic languages)."
1147
+ },
1148
+ many: {
1149
+ $ref: "common_types.json#/$defs/DynamicString",
1150
+ description: "String for the 'many' category (e.g., large groups in various languages)."
1151
+ },
1152
+ other: {
1153
+ $ref: "common_types.json#/$defs/DynamicString",
1154
+ description: "The default/fallback string (used for general plural cases)."
1155
+ }
1156
+ },
1157
+ required: ["value", "other"],
1158
+ unevaluatedProperties: false
1159
+ },
1160
+ returnType: {
1161
+ const: "string"
1162
+ }
1163
+ },
1164
+ required: ["call", "args"],
1165
+ unevaluatedProperties: false
1166
+ },
1167
+ openUrl: {
1168
+ type: "object",
1169
+ description: "Opens the specified URL in a browser or handler. This function has no return value.",
1170
+ properties: {
1171
+ call: {
1172
+ const: "openUrl"
1173
+ },
1174
+ args: {
1175
+ type: "object",
1176
+ properties: {
1177
+ url: {
1178
+ type: "string",
1179
+ format: "uri",
1180
+ description: "The URL to open."
1181
+ }
1182
+ },
1183
+ required: ["url"],
1184
+ additionalProperties: false
1185
+ },
1186
+ returnType: {
1187
+ const: "void"
1188
+ }
1189
+ },
1190
+ required: ["call", "args"],
1191
+ unevaluatedProperties: false
1192
+ },
1193
+ and: {
1194
+ type: "object",
1195
+ description: "Performs a logical AND operation on a list of boolean values.",
1196
+ properties: {
1197
+ call: {
1198
+ const: "and"
1199
+ },
1200
+ args: {
1201
+ type: "object",
1202
+ properties: {
1203
+ values: {
1204
+ type: "array",
1205
+ description: "The list of boolean values to evaluate.",
1206
+ items: {
1207
+ $ref: "common_types.json#/$defs/DynamicBoolean"
1208
+ },
1209
+ minItems: 2
1210
+ }
1211
+ },
1212
+ required: ["values"],
1213
+ unevaluatedProperties: false
1214
+ },
1215
+ returnType: {
1216
+ const: "boolean"
1217
+ }
1218
+ },
1219
+ required: ["call", "args"],
1220
+ unevaluatedProperties: false
1221
+ },
1222
+ or: {
1223
+ type: "object",
1224
+ description: "Performs a logical OR operation on a list of boolean values.",
1225
+ properties: {
1226
+ call: {
1227
+ const: "or"
1228
+ },
1229
+ args: {
1230
+ type: "object",
1231
+ properties: {
1232
+ values: {
1233
+ type: "array",
1234
+ description: "The list of boolean values to evaluate.",
1235
+ items: {
1236
+ $ref: "common_types.json#/$defs/DynamicBoolean"
1237
+ },
1238
+ minItems: 2
1239
+ }
1240
+ },
1241
+ required: ["values"],
1242
+ unevaluatedProperties: false
1243
+ },
1244
+ returnType: {
1245
+ const: "boolean"
1246
+ }
1247
+ },
1248
+ required: ["call", "args"],
1249
+ unevaluatedProperties: false
1250
+ },
1251
+ not: {
1252
+ type: "object",
1253
+ description: "Performs a logical NOT operation on a boolean value.",
1254
+ properties: {
1255
+ call: {
1256
+ const: "not"
1257
+ },
1258
+ args: {
1259
+ type: "object",
1260
+ properties: {
1261
+ value: {
1262
+ $ref: "common_types.json#/$defs/DynamicBoolean",
1263
+ description: "The boolean value to negate."
1264
+ }
1265
+ },
1266
+ required: ["value"],
1267
+ unevaluatedProperties: false
1268
+ },
1269
+ returnType: {
1270
+ const: "boolean"
1271
+ }
1272
+ },
1273
+ required: ["call", "args"],
1274
+ unevaluatedProperties: false
1275
+ }
1276
+ },
1277
+ $defs: {
1278
+ CatalogComponentCommon: {
1279
+ type: "object",
1280
+ properties: {
1281
+ weight: {
1282
+ type: "number",
1283
+ description: "The relative weight of this component within a Row or Column. This is similar to the CSS 'flex-grow' property. Note: this may ONLY be set when the component is a direct descendant of a Row or Column."
1284
+ }
1285
+ }
1286
+ },
1287
+ theme: {
1288
+ type: "object",
1289
+ properties: {
1290
+ primaryColor: {
1291
+ type: "string",
1292
+ description: "The primary brand color used for highlights (e.g., primary buttons, active borders). Renderers may generate variants of this color for different contexts. Format: Hexadecimal code (e.g., '#00BFFF').",
1293
+ pattern: "^#[0-9a-fA-F]{6}$"
1294
+ },
1295
+ iconUrl: {
1296
+ type: "string",
1297
+ format: "uri",
1298
+ description: "A URL for an image that identifies the agent or tool associated with the surface."
1299
+ },
1300
+ agentDisplayName: {
1301
+ type: "string",
1302
+ description: "Text to be displayed next to the surface to identify the agent or tool that created it."
1303
+ }
1304
+ },
1305
+ additionalProperties: true
1306
+ },
1307
+ anyComponent: {
1308
+ oneOf: [
1309
+ {
1310
+ $ref: "#/components/Text"
1311
+ },
1312
+ {
1313
+ $ref: "#/components/Image"
1314
+ },
1315
+ {
1316
+ $ref: "#/components/Icon"
1317
+ },
1318
+ {
1319
+ $ref: "#/components/Video"
1320
+ },
1321
+ {
1322
+ $ref: "#/components/AudioPlayer"
1323
+ },
1324
+ {
1325
+ $ref: "#/components/Row"
1326
+ },
1327
+ {
1328
+ $ref: "#/components/Column"
1329
+ },
1330
+ {
1331
+ $ref: "#/components/List"
1332
+ },
1333
+ {
1334
+ $ref: "#/components/Card"
1335
+ },
1336
+ {
1337
+ $ref: "#/components/Tabs"
1338
+ },
1339
+ {
1340
+ $ref: "#/components/Modal"
1341
+ },
1342
+ {
1343
+ $ref: "#/components/Divider"
1344
+ },
1345
+ {
1346
+ $ref: "#/components/Button"
1347
+ },
1348
+ {
1349
+ $ref: "#/components/TextField"
1350
+ },
1351
+ {
1352
+ $ref: "#/components/CheckBox"
1353
+ },
1354
+ {
1355
+ $ref: "#/components/ChoicePicker"
1356
+ },
1357
+ {
1358
+ $ref: "#/components/Slider"
1359
+ },
1360
+ {
1361
+ $ref: "#/components/DateTimeInput"
1362
+ }
1363
+ ],
1364
+ discriminator: {
1365
+ propertyName: "component"
1366
+ }
1367
+ },
1368
+ anyFunction: {
1369
+ oneOf: [
1370
+ {
1371
+ $ref: "#/functions/required"
1372
+ },
1373
+ {
1374
+ $ref: "#/functions/regex"
1375
+ },
1376
+ {
1377
+ $ref: "#/functions/length"
1378
+ },
1379
+ {
1380
+ $ref: "#/functions/numeric"
1381
+ },
1382
+ {
1383
+ $ref: "#/functions/email"
1384
+ },
1385
+ {
1386
+ $ref: "#/functions/formatString"
1387
+ },
1388
+ {
1389
+ $ref: "#/functions/formatNumber"
1390
+ },
1391
+ {
1392
+ $ref: "#/functions/formatCurrency"
1393
+ },
1394
+ {
1395
+ $ref: "#/functions/formatDate"
1396
+ },
1397
+ {
1398
+ $ref: "#/functions/pluralize"
1399
+ },
1400
+ {
1401
+ $ref: "#/functions/openUrl"
1402
+ },
1403
+ {
1404
+ $ref: "#/functions/and"
1405
+ },
1406
+ {
1407
+ $ref: "#/functions/or"
1408
+ },
1409
+ {
1410
+ $ref: "#/functions/not"
1411
+ }
1412
+ ]
1413
+ }
1414
+ }
1415
+ };
1416
+
1417
+ // packages/exponential-ui/src/schema.ts
1418
+ var TOKEN_PATTERN = `^\\$[a-z][a-zA-Z0-9.]*\\.[a-zA-Z0-9]+$`;
1419
+ var DYNAMIC = { oneOf: [{ $ref: `#/$defs/DataBinding` }, { $ref: `#/$defs/FunctionCall` }] };
1420
+ function propToSchema(schema, view, iconNames) {
1421
+ let base;
1422
+ switch (schema.type) {
1423
+ case `string`:
1424
+ case `markdown`:
1425
+ base = { type: `string` };
1426
+ break;
1427
+ case `url`:
1428
+ base = { type: `string`, format: `uri-reference` };
1429
+ break;
1430
+ case `date`:
1431
+ base = { type: `string`, pattern: `^(\\d{4}-\\d{2}-\\d{2})?$` };
1432
+ break;
1433
+ case `number`:
1434
+ base = { type: `number`, ...schema.minimum !== undefined ? { minimum: schema.minimum } : {}, ...schema.maximum !== undefined ? { maximum: schema.maximum } : {} };
1435
+ break;
1436
+ case `boolean`:
1437
+ base = { type: `boolean` };
1438
+ break;
1439
+ case `enum`:
1440
+ base = { enum: [...schema.values ?? view.enums[schema.enum ?? ``] ?? []] };
1441
+ break;
1442
+ case `icon`:
1443
+ base = { type: `string`, enum: [...iconNames] };
1444
+ break;
1445
+ case `color`:
1446
+ base = { type: `string`, pattern: `^\\$color\\.[a-zA-Z0-9]+$` };
1447
+ break;
1448
+ case `style`:
1449
+ base = { $ref: `#/$defs/Style` };
1450
+ break;
1451
+ case `array`:
1452
+ base = { type: `array`, items: schema.items ? propToSchema(schema.items, view, iconNames) : {} };
1453
+ break;
1454
+ case `object`:
1455
+ base = schema.shape ? { $ref: `#/$defs/${schema.shape}` } : { type: `object` };
1456
+ break;
1457
+ }
1458
+ const alternatives = [base];
1459
+ if (schema.responsive) {
1460
+ const value = { ...base };
1461
+ alternatives.push({ type: `object`, properties: Object.fromEntries([`base`, ...TOKEN_GROUPS2.breakpoint].map((k) => [k, value])), required: [`base`], additionalProperties: false });
1462
+ }
1463
+ if (schema.bindable)
1464
+ alternatives.push(...DYNAMIC.oneOf);
1465
+ const out = alternatives.length === 1 ? base : { oneOf: alternatives };
1466
+ if (schema.description)
1467
+ out.description = schema.description;
1468
+ if (schema.default !== undefined)
1469
+ out.default = schema.default;
1470
+ return out;
1471
+ }
1472
+ function componentSchema(name, def, view, iconNames) {
1473
+ const properties = { component: { const: name } };
1474
+ const required = [`component`];
1475
+ for (const [prop, schema] of Object.entries(def.props)) {
1476
+ properties[prop] = propToSchema(schema, view, iconNames);
1477
+ if (schema.required)
1478
+ required.push(prop);
1479
+ }
1480
+ if (def.children !== `none`)
1481
+ properties.children = { $ref: `#/$defs/ChildList` };
1482
+ if (def.slots?.length) {
1483
+ const slots = {};
1484
+ for (const slot of def.slots)
1485
+ if (slot !== `*`)
1486
+ slots[slot] = { $ref: `#/$defs/ComponentId` };
1487
+ properties.slots = { type: `object`, properties: slots, additionalProperties: def.slots.includes(`*`) ? { $ref: `#/$defs/ComponentId` } : false };
1488
+ }
1489
+ if (def.events?.length) {
1490
+ const on = {};
1491
+ for (const event of def.events)
1492
+ on[event] = { $ref: `#/$defs/Action` };
1493
+ properties.on = { type: `object`, properties: on, additionalProperties: false };
1494
+ }
1495
+ properties.style = { $ref: `#/$defs/Style` };
1496
+ properties.visible = { $ref: `#/$defs/Visible` };
1497
+ properties.accessibility = { $ref: `#/$defs/AccessibilityAttributes` };
1498
+ return {
1499
+ type: `object`,
1500
+ description: def.description,
1501
+ allOf: [
1502
+ { $ref: `#/$defs/ComponentCommon` },
1503
+ { type: `object`, properties, required }
1504
+ ],
1505
+ unevaluatedProperties: false
1506
+ };
1507
+ }
1508
+ function styleSchema() {
1509
+ const length = {
1510
+ oneOf: [{ type: `number` }, { type: `string`, pattern: `^(-?\\d+(\\.\\d+)?(px|%)|auto|\\$[a-z][a-zA-Z0-9.]*\\.[a-zA-Z0-9]+)$` }]
1511
+ };
1512
+ const number = { oneOf: [{ type: `number` }, { type: `string`, pattern: TOKEN_PATTERN }] };
1513
+ const color = { type: `string`, pattern: `^\\$color\\.[a-zA-Z0-9]+$` };
1514
+ const gradient = {
1515
+ type: `object`,
1516
+ properties: { angle: { type: `number` }, stops: { type: `array`, minItems: 2, items: { type: `object`, properties: { color, offset: { type: `number`, minimum: 0, maximum: 1 } }, required: [`color`, `offset`], additionalProperties: false } } },
1517
+ required: [`angle`, `stops`],
1518
+ additionalProperties: false
1519
+ };
1520
+ const keys = {};
1521
+ const groups = { ...style_default.layout, ...style_default.visual };
1522
+ for (const [key, spec] of Object.entries(groups)) {
1523
+ if (spec.enum)
1524
+ keys[key] = { enum: spec.enum };
1525
+ else if (spec.type === `length`)
1526
+ keys[key] = length;
1527
+ else if (spec.type === `number`)
1528
+ keys[key] = number;
1529
+ else if (spec.type === `color`)
1530
+ keys[key] = color;
1531
+ else if (spec.type === `token`)
1532
+ keys[key] = { type: `string`, pattern: `^\\$${spec.group}\\.[a-zA-Z0-9]+$` };
1533
+ else if (spec.type === `ratio`)
1534
+ keys[key] = { oneOf: [{ type: `number` }, { type: `string`, pattern: `^\\d+(\\.\\d+)?/\\d+(\\.\\d+)?$` }] };
1535
+ else if (spec.type === `areas`)
1536
+ keys[key] = { type: `array`, items: { type: `string` } };
1537
+ else if (spec.type === `gradient`)
1538
+ keys[key] = gradient;
1539
+ else if (spec.type === `transform`)
1540
+ keys[key] = { type: `string`, pattern: style_default.conditions.transform };
1541
+ else
1542
+ keys[key] = { type: `string` };
1543
+ }
1544
+ const base = { type: `object`, properties: keys, additionalProperties: false };
1545
+ return {
1546
+ type: `object`,
1547
+ description: `The Box style whitelist (VAPP-4, round 1): layout + visual keys, numbers in px, token references $<group>.<name>; conditions nest one level: @media (min-/max-width|height, orientation, hover, prefers-reduced-motion; px or $breakpoint.<name>) in source order, then the states ${style_default.conditions.states.join(`, `)}.`,
1548
+ properties: {
1549
+ ...keys,
1550
+ ...Object.fromEntries(style_default.conditions.states.map((state) => [state, base]))
1551
+ },
1552
+ patternProperties: { [style_default.conditions.media]: base },
1553
+ additionalProperties: false
1554
+ };
1555
+ }
1556
+ function defsSchema(view, iconNames) {
1557
+ const defs = {
1558
+ ComponentId: { type: `string`, description: `The unique identifier for a component within a surface.` },
1559
+ ComponentCommon: {
1560
+ type: `object`,
1561
+ properties: { id: { $ref: `#/$defs/ComponentId` }, accessibility: { $ref: `#/$defs/AccessibilityAttributes` } },
1562
+ required: [`id`]
1563
+ },
1564
+ AccessibilityAttributes: {
1565
+ type: `object`,
1566
+ description: `A2UI AccessibilityAttributes: label and description are DynamicStrings (a literal, a binding or a call, resolved at bind time).`,
1567
+ properties: {
1568
+ label: { oneOf: [{ type: `string` }, { $ref: `#/$defs/DataBinding` }, { $ref: `#/$defs/FunctionCall` }] },
1569
+ description: { oneOf: [{ type: `string` }, { $ref: `#/$defs/DataBinding` }, { $ref: `#/$defs/FunctionCall` }] }
1570
+ },
1571
+ additionalProperties: false
1572
+ },
1573
+ ChildList: {
1574
+ oneOf: [
1575
+ { type: `array`, items: { $ref: `#/$defs/ComponentId` } },
1576
+ {
1577
+ type: `object`,
1578
+ properties: {
1579
+ componentId: { $ref: `#/$defs/ComponentId` },
1580
+ path: { type: `string` },
1581
+ key: { type: `string`, description: `A pointer relative to each item that identifies it, so reordering keeps the item's component state (the index when absent).` }
1582
+ },
1583
+ required: [`componentId`, `path`],
1584
+ additionalProperties: false
1585
+ }
1586
+ ]
1587
+ },
1588
+ Visible: {
1589
+ description: `Round 1: false (or a binding/call resolving falsy) = the node is not rendered and takes no space; absent = visible.`,
1590
+ oneOf: [{ type: `boolean` }, { $ref: `#/$defs/DataBinding` }, { $ref: `#/$defs/FunctionCall` }]
1591
+ },
1592
+ DataBinding: { type: `object`, properties: { path: { type: `string` } }, required: [`path`], additionalProperties: false },
1593
+ FunctionCall: {
1594
+ type: `object`,
1595
+ properties: { call: { type: `string`, enum: [...coreCatalog2.functions.names] }, args: { type: `object` }, returnType: { type: `string` } },
1596
+ required: [`call`]
1597
+ },
1598
+ ActionFunctionCall: {
1599
+ description: `A function an action runs: a catalog function (built in) or a host function (namespaced, \`app.toast\`; the host registers it and its policy gates it, catalog/host.json).`,
1600
+ type: `object`,
1601
+ properties: { call: { type: `string`, minLength: 1, examples: [...coreCatalog2.functions.names] }, args: { type: `object` }, returnType: { type: `string` } },
1602
+ required: [`call`]
1603
+ },
1604
+ Action: {
1605
+ description: `A server event, a client function, or (round 1) both: the function args and the event context are evaluated first, then the function runs, then the event is dispatched. \`functionCall\` = A2UI's key.`,
1606
+ type: `object`,
1607
+ properties: {
1608
+ event: { type: `object`, properties: { name: { type: `string` }, context: { type: `object` } }, required: [`name`] },
1609
+ functionCall: { $ref: `#/$defs/ActionFunctionCall` }
1610
+ },
1611
+ anyOf: [{ required: [`event`] }, { required: [`functionCall`] }],
1612
+ additionalProperties: false
1613
+ },
1614
+ Style: styleSchema(),
1615
+ Tokens: {
1616
+ type: `object`,
1617
+ description: `The token NAMES a theme must define, by group (values come from the theme).`,
1618
+ properties: Object.fromEntries(Object.entries(TOKEN_GROUPS2).map(([group, names]) => [group, { type: `array`, items: { enum: [...names] } }]))
1619
+ }
1620
+ };
1621
+ for (const [name, def] of Object.entries(view.defs)) {
1622
+ const properties = {};
1623
+ const required = [];
1624
+ for (const [prop, schema] of Object.entries(def.properties)) {
1625
+ properties[prop] = propToSchema(schema, view, iconNames);
1626
+ if (schema.required)
1627
+ required.push(prop);
1628
+ }
1629
+ defs[name] = { type: `object`, description: def.description, properties, required, additionalProperties: false };
1630
+ }
1631
+ return defs;
1632
+ }
1633
+ var CORE_FUNCTION_SPECS = coreCatalog2.functions.core;
1634
+ function coreFunctionSchemas() {
1635
+ const argSchema = (type) => type === `any` ? {} : type === `array` ? { type: `array` } : type === `object` ? { type: `object` } : { oneOf: [{ type }, { $ref: `#/$defs/DataBinding` }, { $ref: `#/$defs/FunctionCall` }] };
1636
+ const out = {};
1637
+ for (const [name, spec] of Object.entries(CORE_FUNCTION_SPECS)) {
1638
+ out[name] = {
1639
+ type: `object`,
1640
+ description: spec.description,
1641
+ properties: {
1642
+ call: { const: name },
1643
+ args: { type: `object`, properties: Object.fromEntries(Object.entries(spec.args).map(([arg, type]) => [arg, argSchema(type)])), additionalProperties: false },
1644
+ returnType: { const: spec.returns }
1645
+ },
1646
+ required: [`call`, `args`],
1647
+ unevaluatedProperties: false
1648
+ };
1649
+ }
1650
+ return out;
1651
+ }
1652
+ function coreSchema(iconNames) {
1653
+ const view = catalogView2();
1654
+ const components = {};
1655
+ for (const [name, def] of Object.entries(coreCatalog2.components))
1656
+ components[name] = componentSchema(name, def, view, iconNames);
1657
+ const basic = basic_catalog_default;
1658
+ return {
1659
+ $schema: `https://json-schema.org/draft/2020-12/schema`,
1660
+ $id: coreCatalog2.id,
1661
+ title: coreCatalog2.name,
1662
+ description: `Exponential UI core catalog v${coreCatalog2.version}: ${Object.keys(coreCatalog2.components).length} components (natives + macros), the A2UI basic catalog's 14 functions plus ${Object.keys(CORE_FUNCTION_SPECS).length} core functions, the Box style whitelist and the token names. Generated by packages/exponential-ui/scripts/generate.ts from catalog/core.catalog.json — do not edit.`,
1663
+ catalogId: coreCatalog2.id,
1664
+ liteCatalogId: coreCatalog2.liteId,
1665
+ components,
1666
+ functions: { ...basic.functions, ...coreFunctionSchemas() },
1667
+ $defs: {
1668
+ ...defsSchema(view, iconNames),
1669
+ anyComponent: { oneOf: Object.keys(coreCatalog2.components).map((name) => ({ $ref: `#/components/${name}` })) },
1670
+ anyFunction: { oneOf: [...Object.keys(basic.functions), ...Object.keys(CORE_FUNCTION_SPECS)].map((name) => ({ $ref: `#/functions/${name}` })) }
1671
+ }
1672
+ };
1673
+ }
1674
+ function extensionSchema(ext, iconNames) {
1675
+ const view = catalogView2([ext]);
1676
+ const components = {};
1677
+ for (const [name, def] of Object.entries(ext.components))
1678
+ components[name] = componentSchema(name, def, view, iconNames);
1679
+ const defs = {};
1680
+ for (const [name, def] of Object.entries(ext.defs ?? {})) {
1681
+ const properties = {};
1682
+ const required = [];
1683
+ for (const [prop, schema] of Object.entries(def.properties)) {
1684
+ properties[prop] = propToSchema(schema, view, iconNames);
1685
+ if (schema.required)
1686
+ required.push(prop);
1687
+ }
1688
+ defs[name] = { type: `object`, description: def.description, properties, required, additionalProperties: false };
1689
+ }
1690
+ return {
1691
+ $schema: `https://json-schema.org/draft/2020-12/schema`,
1692
+ $id: ext.id,
1693
+ title: ext.name,
1694
+ catalogId: ext.id,
1695
+ extends: ext.extends,
1696
+ components,
1697
+ $defs: {
1698
+ ...defs,
1699
+ anyComponent: {
1700
+ oneOf: [
1701
+ { $ref: `${ext.extends}#/$defs/anyComponent` },
1702
+ ...Object.keys(ext.components).map((name) => ({ $ref: `#/components/${name}` }))
1703
+ ]
1704
+ }
1705
+ }
1706
+ };
1707
+ }
1708
+
1709
+ // packages/exponential-ui/src/entries/schema.ts
1710
+ function coreSchema2(iconNames) {
1711
+ describeCatalog2();
1712
+ return coreSchema(iconNames);
1713
+ }
1714
+ function extensionSchema2(ext, iconNames) {
1715
+ describeCatalog2();
1716
+ return extensionSchema(ext, iconNames);
1717
+ }
1718
+ export {
1719
+ coreSchema2 as coreSchema,
1720
+ describeCatalog2 as describeCatalog,
1721
+ extensionSchema2 as extensionSchema
1722
+ };
1723
+
1724
+ //# debugId=B3036483D2393DFF64756E2164756E21
1725
+ //# sourceMappingURL=schema.js.map