@seed-ship/mcp-ui-solid 5.4.0 → 5.5.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 (43) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/dist/mcp-ui-spec/dist/schemas.cjs +493 -0
  3. package/dist/mcp-ui-spec/dist/schemas.cjs.map +1 -0
  4. package/dist/mcp-ui-spec/dist/schemas.js +493 -0
  5. package/dist/mcp-ui-spec/dist/schemas.js.map +1 -0
  6. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.cjs +118 -0
  7. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.cjs.map +1 -0
  8. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js +118 -0
  9. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js.map +1 -0
  10. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.cjs +10 -0
  11. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.cjs.map +1 -0
  12. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js +10 -0
  13. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js.map +1 -0
  14. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.cjs +8 -0
  15. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.cjs.map +1 -0
  16. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js +9 -0
  17. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  18. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.cjs +122 -0
  19. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.cjs.map +1 -0
  20. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js +122 -0
  21. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  22. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.cjs +137 -0
  23. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.cjs.map +1 -0
  24. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js +139 -0
  25. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js.map +1 -0
  26. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.cjs +105 -0
  27. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.cjs.map +1 -0
  28. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js +106 -0
  29. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js.map +1 -0
  30. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs +3229 -0
  31. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs.map +1 -0
  32. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js +3230 -0
  33. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js.map +1 -0
  34. package/dist/services/validation.cjs +73 -154
  35. package/dist/services/validation.cjs.map +1 -1
  36. package/dist/services/validation.d.ts.map +1 -1
  37. package/dist/services/validation.js +73 -154
  38. package/dist/services/validation.js.map +1 -1
  39. package/package.json +3 -2
  40. package/src/services/validation.spec-migration.test.ts +207 -0
  41. package/src/services/validation.test.ts +53 -3
  42. package/src/services/validation.ts +143 -181
  43. package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,87 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [5.5.1] - 2026-04-27
9
+
10
+ ### Security — Iframe whitelist bug fix
11
+
12
+ - **`validateIframeDomain` predicate bug** : `services/validation.ts:572` checked `allowed === 'localhost'` (the whitelist entry being literally the string `'localhost'`) instead of `domain === 'localhost'` (the URL's hostname being localhost). Once `'localhost'` was added to `DEFAULT_IFRAME_DOMAINS` (Sprint 0+, present since the beginning), the whitelist became **fully inoperative** — every external URL passed the check. Affected all iframe + video components rendered through `<UIResourceRenderer>` / `<StreamingUIRenderer>`.
13
+ - **Fix** : loopback (`localhost` and `127.0.0.x`) is detected on the URL's hostname only ; the literal `'localhost'` whitelist entry is skipped from the iteration. Whitelisted domains + their subdomains continue to pass as before.
14
+ - **Impact** : pre-v5.5.1, an LLM-generated iframe with `https://evil.example.com/x` would render. Post-v5.5.1, it's rejected with `DOMAIN_NOT_WHITELISTED` (the existing code, behavior now actually fires).
15
+ - **Backward compat** : Apps using `<iframe url="https://..." />` with **legitimately whitelisted** URLs are unaffected. Apps relying on the bug to display arbitrary iframes will now see them rejected — workaround is `iframePolicy: 'extend'` + `customIframeDomains: [...]` or `iframePolicy: 'allow-all'` (latter for trusted contexts only).
16
+
17
+ ### Tests
18
+
19
+ - `services/validation.test.ts` : new `describe('validateIframeDomain — security regression (v5.5.1)')` block — 8 tests locking in the correct behavior (rejects external + typo-squat domains, accepts whitelist + subdomains + localhost + 127.0.0.x, respects `allow-all` and `extend` policies).
20
+ - 2 test cosmetics: `chartType` typo → `type` at `validation.test.ts:50`, `artifact` moved from `PASSTHROUGH_TYPES` to `VALIDATED_TYPES` (it has its own case since v5.5.0).
21
+ - Total solid suite : **530/530 tests pass** (vs 523 on v5.5.0, +7 net).
22
+
23
+ ## [5.5.0] - 2026-04-27
24
+
25
+ B.1 PR2 — `services/validation.ts` migration vers Zod schemas spec-driven (cf. audit deposium `MCP-UI-AUDIT-2026-04-26.md` §I + greenlight §J). **Non-breaking, aucune migration consumer requise.**
26
+
27
+ ### Changed — validation refactor (B.1 PR2)
28
+
29
+ - Nouvelle dépendance : **`@seed-ship/mcp-ui-spec` ^5.0.1** (workspace).
30
+ - `validateComponent()` consomme désormais les Zod schemas exportés depuis `mcp-ui-spec` pour **12 ComponentTypes sur 17** : `metric`, `text`, `iframe`, `image`, `link`, `action`, `video`, `carousel`, `image-gallery`, `action-group`, `code`, `artifact`.
31
+ - Mapper interne **`mapZodIssuesToErrors(issues, legacyCode)`** : convertit `ZodIssue[]` → `ValidationError[]` en préservant le `code` legacy par type (`INVALID_METRIC`, `EMPTY_CAROUSEL`, etc.). **L'API publique `validateComponent()` retourne exactement la même shape `{valid, errors: [{path, message, code}]}` qu'avant** — voir audit §J.1 (deposium a confirmé que `errors[].code` n'est lu nulle part en logique métier).
32
+ - Path Zod normalisé : `params.<joined>` (ex. `params.title`, `params.data.datasets`) — cohérent avec les chemins legacy.
33
+ - 5 ComponentTypes restent **délibérément sur le path impératif** :
34
+ - `chart` + `table` — leurs validateurs (`validateChartComponent`, `validateTableComponent`) font cross-field consistency + resource limits + codes riches (`MISSING_DATA`, `DATA_LENGTH_MISMATCH`, `DUPLICATE_COLUMN_KEY`...) que Zod ne peut pas exprimer aussi proprement.
35
+ - `form` — `FormComponentParamsSchema` du spec a une regex stricte sur les noms de fields qui pourrait rejeter des payloads LLM valides. Conservatisme.
36
+ - `map` — spec exige `center: tuple([number, number])` mais la prod accepte `{lat, lng}` objects. Backward-compat.
37
+ - `modal` — tous params optionnels, rien à valider.
38
+
39
+ ### Fixed — Artifact validation drift (side-effect)
40
+
41
+ - **Pré-v5.5.0 bug** : `validation.ts` exigeait `params.content` (code `INVALID_ARTIFACT`) mais `<ArtifactRenderer>` consomme `url + filename + mimeType`. Tout artifact rendu valide échouait la validation, et tout artifact "validé" ne pouvait pas être rendu.
42
+ - **Fix** : la migration vers `ArtifactComponentParamsSchema` aligne automatiquement la validation sur ce que le renderer attend (`url + filename + mimeType` requis, `size` ≥ 0, `description` optionnel).
43
+ - Code legacy `INVALID_ARTIFACT` préservé pour les consumers qui filtrent dessus.
44
+
45
+ ### Preserved — Resource limits + iframe whitelist (sécurité)
46
+
47
+ Explicitement **gardés impératifs**, hors scope de la migration Zod :
48
+ - `validatePayloadSize` (max 50KB par défaut)
49
+ - `validateChartComponent` data points limits (max 1000 par défaut)
50
+ - `validateTableComponent` row limits (max 100 par défaut)
51
+ - `validateIframeDomain` + `DEFAULT_IFRAME_DOMAINS` whitelist (~45 domaines)
52
+ - `getIframeSandbox` tiered sandbox flags
53
+
54
+ Ces couches sont chaînées **après** le spec parse (cf. `iframe` + `video` → spec parse réussi → domain whitelist).
55
+
56
+ ### Build pipeline (mcp-ui-spec @ 5.0.1+)
57
+
58
+ Bonus : remplacement du `scripts/generate-dts.js` hand-rolled (qui ne déclarait que 9 schemas sur ~30) par `tsc -p tsconfig.build.json --emitDeclarationOnly`. Les 30+ schemas sont maintenant tous correctement déclarés dans `dist/schemas.d.ts` automatiquement. Élimine une dette de maintenance.
59
+
60
+ ### Tests
61
+
62
+ - `services/validation.test.ts` (49 tests) — **inchangé**, passe tel quel → preuve que l'API externe est préservée.
63
+ - `services/validation.spec-migration.test.ts` — **+18 nouveaux tests** ciblant explicitement v5.5.0 :
64
+ - Mapper preserve legacy `code` per type (12 types vérifiés)
65
+ - ZodIssue path → `params.<joined>` translation
66
+ - Artifact bug fix (url+filename+mimeType requis, plus content)
67
+ - Iframe + video chain : spec parse réussi → domain check, parse failed → SKIP domain check (no cascade)
68
+ - Imperative passthrough types préservent leurs codes riches (`MISSING_DATA`, `EMPTY_COLUMNS`, `EMPTY_FORM`, etc.)
69
+ - Invariants : `UNKNOWN_COMPONENT_TYPE`, `MISSING_PARAMS`, `INVALID_GRID_COL_START` toujours émis
70
+
71
+ Suite totale solid : **523/523 tests pass** (vs 505 sur v5.4.0).
72
+
73
+ ### Cross-stack — bénéfice deposium
74
+
75
+ Avec spec@5.0.1 + solid@5.5.0, deposium peut maintenant factoriser sa validation cross-stack :
76
+ ```ts
77
+ import { ChartComponentParamsSchema } from '@seed-ship/mcp-ui-spec'
78
+ // Côté MCPs (backend) : valider extracted_charts à la source
79
+ // Côté Solid (frontend) : héritage automatique via mcp-ui-solid
80
+ ```
81
+
82
+ ### Non-breaking guarantee
83
+
84
+ - API `validateComponent()` shape **identique** : `{ valid: boolean, errors?: Array<{path, message, code}> }`.
85
+ - Tous les codes legacy préservés via le mapper (51 codes existants).
86
+ - Resource limits + iframe whitelist + sandbox flags **inchangés**.
87
+ - Seul changement de comportement observable : `artifact` accepte maintenant les payloads que le renderer rend réellement (bug fix).
88
+
8
89
  ## [5.4.0] - 2026-04-26
9
90
 
10
91
  Combo non-breaking d'observabilité + UX, motivé par l'audit deposium_MCPs `MCP-UI-AUDIT-2026-04-26.md` (items B.2 + B.3 + B.4).
@@ -0,0 +1,493 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const types = require("../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs");
4
+ const GridPositionSchema = types.object({
5
+ colStart: types.number().int().min(1).max(12),
6
+ colSpan: types.number().int().min(1).max(12),
7
+ rowStart: types.number().int().min(1).optional(),
8
+ rowSpan: types.number().int().min(1).default(1).optional()
9
+ });
10
+ const ComponentTypeSchema = types.enum([
11
+ "chart",
12
+ "table",
13
+ "metric",
14
+ "text",
15
+ "composite",
16
+ "grid",
17
+ // Phase 5.0: Nested grid layouts
18
+ "iframe",
19
+ "image",
20
+ "link",
21
+ "action",
22
+ // Phase 5.0: Tool call actions
23
+ "footer",
24
+ // Phase 5.0: Metadata footer
25
+ "carousel",
26
+ "artifact",
27
+ "form",
28
+ // Sprint 1: Form component
29
+ "modal",
30
+ // Sprint 3: Modal/dialog component
31
+ "action-group",
32
+ // Sprint 3: Action grouping component
33
+ "image-gallery",
34
+ // Sprint 5: Image gallery with lightbox
35
+ "video",
36
+ // Sprint 5: Video embed (YouTube, Vimeo, direct)
37
+ "code",
38
+ // Sprint 6: Syntax highlighted code block
39
+ "map"
40
+ // Sprint 6: Interactive map (Leaflet)
41
+ ]);
42
+ const FormFieldOptionSchema = types.object({
43
+ label: types.string().min(1),
44
+ value: types.string(),
45
+ disabled: types.boolean().optional()
46
+ });
47
+ const FormFieldTypeSchema = types.enum([
48
+ "text",
49
+ "email",
50
+ "password",
51
+ "number",
52
+ "date",
53
+ "textarea",
54
+ "select",
55
+ "checkbox",
56
+ "radio",
57
+ "autocomplete",
58
+ "range",
59
+ "tags",
60
+ "toggle",
61
+ "fieldset"
62
+ ]);
63
+ const ShowWhenOperatorSchema = types.enum([
64
+ "equals",
65
+ "notEquals",
66
+ "in",
67
+ "notIn",
68
+ "contains",
69
+ "startsWith",
70
+ "endsWith",
71
+ "greaterThan",
72
+ "lessThan",
73
+ "isEmpty",
74
+ "isNotEmpty",
75
+ "isTrue",
76
+ "isFalse"
77
+ ]);
78
+ const ShowWhenConditionSchema = types.object({
79
+ field: types.string().min(1),
80
+ operator: ShowWhenOperatorSchema,
81
+ value: types.any().optional()
82
+ });
83
+ const PrefillSourceSchema = types.enum(["user", "detected", "inferred", "default"]);
84
+ const FormFieldSchema = types.object({
85
+ name: types.string().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/),
86
+ type: FormFieldTypeSchema,
87
+ label: types.string().optional(),
88
+ placeholder: types.string().optional(),
89
+ helpText: types.string().optional(),
90
+ required: types.boolean().optional(),
91
+ disabled: types.boolean().optional(),
92
+ defaultValue: types.any().optional(),
93
+ // Prefill — pre-populated value with source tracking (v4.2.0)
94
+ prefill: types.union([types.string(), types.array(types.string())]).optional(),
95
+ displayHint: types.string().optional(),
96
+ source: PrefillSourceSchema.optional(),
97
+ muted: types.boolean().optional(),
98
+ // Prefill mode for autocomplete fields (v4.3.0)
99
+ prefillMode: types.enum(["exact", "resolve"]).optional(),
100
+ // Value format validation (v4.3.0)
101
+ valueFormat: types.string().optional(),
102
+ valueFormatHint: types.string().optional(),
103
+ // Text/textarea specific
104
+ minLength: types.number().int().min(0).optional(),
105
+ maxLength: types.number().int().min(1).optional(),
106
+ pattern: types.string().optional(),
107
+ // Number specific
108
+ min: types.number().optional(),
109
+ max: types.number().optional(),
110
+ step: types.number().optional(),
111
+ // Date specific
112
+ minDate: types.string().optional(),
113
+ maxDate: types.string().optional(),
114
+ // Select/Radio specific
115
+ options: types.array(FormFieldOptionSchema).optional(),
116
+ // Multi-select (v2.6.0)
117
+ multiple: types.boolean().optional(),
118
+ // Autocomplete specific (v2.6.0)
119
+ apiUrl: types.string().url().optional(),
120
+ searchParam: types.string().optional(),
121
+ labelField: types.string().optional(),
122
+ valueField: types.string().optional(),
123
+ extraParams: types.record(types.string()).optional(),
124
+ minChars: types.number().int().min(0).optional(),
125
+ debounceMs: types.number().int().min(0).optional(),
126
+ // Dependent field (v2.7.0)
127
+ dependsOn: types.object({
128
+ field: types.string(),
129
+ apiUrl: types.string(),
130
+ labelField: types.string(),
131
+ valueField: types.string(),
132
+ extraParams: types.record(types.string()).optional()
133
+ }).optional(),
134
+ // Field status — API capability indicator (v2.11.0)
135
+ fieldStatus: types.enum(["required", "optional", "unsupported", "unknown"]).optional(),
136
+ statusReason: types.string().optional(),
137
+ // Checkbox specific
138
+ checkboxLabel: types.string().optional(),
139
+ // Textarea specific
140
+ rows: types.number().int().min(1).max(20).optional(),
141
+ // Conditional visibility
142
+ showWhen: ShowWhenConditionSchema.optional()
143
+ });
144
+ const FormSubmitActionSchema = types.object({
145
+ toolName: types.string().min(1),
146
+ params: types.record(types.unknown()).optional()
147
+ });
148
+ types.object({
149
+ title: types.string().optional(),
150
+ fields: types.array(FormFieldSchema).min(1),
151
+ submitLabel: types.string().optional(),
152
+ showReset: types.boolean().optional(),
153
+ submitAction: FormSubmitActionSchema.optional(),
154
+ // Persistence options (Sprint 4)
155
+ persistKey: types.string().optional(),
156
+ excludeFromPersistence: types.array(types.string()).optional(),
157
+ persistExpiresIn: types.number().int().positive().optional(),
158
+ layout: types.enum(["vertical", "horizontal", "inline"]).optional(),
159
+ // Auto-submit countdown in ms when all required fields are prefilled (v4.2.0)
160
+ autoSubmitDelay: types.number().int().min(1e3).max(3e4).optional()
161
+ });
162
+ const ModalSizeSchema = types.enum(["sm", "md", "lg", "xl", "full"]);
163
+ types.object({
164
+ title: types.string().optional(),
165
+ size: ModalSizeSchema.optional(),
166
+ showClose: types.boolean().optional(),
167
+ closeOnEscape: types.boolean().optional(),
168
+ closeOnBackdrop: types.boolean().optional(),
169
+ maxHeight: types.string().optional()
170
+ // Note: content and footer are UIComponent references, validated separately
171
+ });
172
+ const ActionGroupLayoutSchema = types.enum([
173
+ "horizontal",
174
+ "vertical",
175
+ "space-between",
176
+ "end",
177
+ "center"
178
+ ]);
179
+ const ActionGroupGapSchema = types.enum(["none", "sm", "md", "lg"]);
180
+ const ActionParamsSchema = types.object({
181
+ label: types.string().min(1),
182
+ type: types.enum(["button", "link"]).optional(),
183
+ action: types.enum(["tool-call", "link", "submit"]).optional(),
184
+ toolName: types.string().optional(),
185
+ params: types.record(types.unknown()).optional(),
186
+ url: types.string().optional(),
187
+ variant: types.enum(["primary", "secondary", "outline", "ghost", "danger"]).optional(),
188
+ size: types.enum(["sm", "md", "lg"]).optional(),
189
+ icon: types.string().optional(),
190
+ disabled: types.boolean().optional()
191
+ });
192
+ const ActionGroupParamsSchema = types.object({
193
+ actions: types.array(ActionParamsSchema).min(1),
194
+ layout: ActionGroupLayoutSchema.optional(),
195
+ gap: ActionGroupGapSchema.optional(),
196
+ fullWidth: types.boolean().optional(),
197
+ label: types.string().optional()
198
+ });
199
+ const GalleryImageSchema = types.object({
200
+ url: types.string().url(),
201
+ thumbnail: types.string().url().optional(),
202
+ alt: types.string().optional(),
203
+ caption: types.string().optional(),
204
+ srcset: types.string().optional(),
205
+ sizes: types.string().optional()
206
+ });
207
+ types.enum(["2", "3", "4", "5"]).transform(Number);
208
+ const ImageGalleryGapSchema = types.enum(["none", "sm", "md", "lg"]);
209
+ const ImageGalleryAspectRatioSchema = types.enum(["1:1", "16:9", "4:3", "auto"]);
210
+ const ImageGalleryParamsSchema = types.object({
211
+ title: types.string().optional(),
212
+ images: types.array(GalleryImageSchema).min(1),
213
+ columns: types.union([types.literal(2), types.literal(3), types.literal(4), types.literal(5)]).optional(),
214
+ gap: ImageGalleryGapSchema.optional(),
215
+ aspectRatio: ImageGalleryAspectRatioSchema.optional(),
216
+ lightbox: types.boolean().optional(),
217
+ showCaptions: types.boolean().optional()
218
+ });
219
+ const VideoAspectRatioSchema = types.enum(["16:9", "4:3", "1:1", "21:9"]);
220
+ const VideoComponentParamsSchema = types.object({
221
+ url: types.string().url(),
222
+ title: types.string().optional(),
223
+ caption: types.string().optional(),
224
+ poster: types.string().url().optional(),
225
+ aspectRatio: VideoAspectRatioSchema.optional(),
226
+ autoplay: types.boolean().optional(),
227
+ controls: types.boolean().optional(),
228
+ loop: types.boolean().optional(),
229
+ muted: types.boolean().optional(),
230
+ startTime: types.number().int().min(0).optional()
231
+ });
232
+ const CodeComponentParamsSchema = types.object({
233
+ code: types.string(),
234
+ language: types.string().optional(),
235
+ filename: types.string().optional(),
236
+ showLineNumbers: types.boolean().optional(),
237
+ startLine: types.number().optional(),
238
+ highlightLines: types.array(types.number()).optional(),
239
+ maxHeight: types.string().optional(),
240
+ theme: types.enum(["light", "dark"]).optional()
241
+ });
242
+ const MapMarkerSchema = types.object({
243
+ position: types.tuple([types.number(), types.number()]),
244
+ tooltip: types.string().optional(),
245
+ popup: types.string().optional()
246
+ });
247
+ types.object({
248
+ center: types.tuple([types.number(), types.number()]).optional(),
249
+ zoom: types.number().optional(),
250
+ markers: types.array(MapMarkerSchema).optional(),
251
+ height: types.string().optional(),
252
+ fitBounds: types.boolean().optional(),
253
+ zoomControl: types.boolean().optional(),
254
+ scrollWheelZoom: types.boolean().optional(),
255
+ tileLayer: types.string().optional(),
256
+ attribution: types.string().optional()
257
+ });
258
+ const ChartTypeSchema = types.enum([
259
+ "bar",
260
+ "line",
261
+ "pie",
262
+ "doughnut",
263
+ "radar",
264
+ "scatter",
265
+ "bubble",
266
+ "polarArea"
267
+ ]);
268
+ const ChartDatasetSchema = types.object({
269
+ label: types.string(),
270
+ // Either an array of numbers or an array of {x, y} points (Chart.js shapes)
271
+ data: types.union([
272
+ types.array(types.number()),
273
+ types.array(
274
+ types.object({
275
+ x: types.union([types.string(), types.number()]),
276
+ y: types.number()
277
+ })
278
+ )
279
+ ]),
280
+ backgroundColor: types.union([types.string(), types.array(types.string())]).optional(),
281
+ borderColor: types.union([types.string(), types.array(types.string())]).optional(),
282
+ borderWidth: types.number().optional(),
283
+ fill: types.union([types.boolean(), types.string()]).optional(),
284
+ tension: types.number().optional()
285
+ });
286
+ const ChartTimeAxisSchema = types.object({
287
+ parser: types.string().optional(),
288
+ unit: types.enum(["day", "week", "month", "quarter", "year"]).optional(),
289
+ tooltipFormat: types.string().optional(),
290
+ min: types.string().optional(),
291
+ max: types.string().optional()
292
+ });
293
+ types.object({
294
+ type: ChartTypeSchema,
295
+ title: types.string().optional(),
296
+ data: types.object({
297
+ labels: types.array(types.string()),
298
+ datasets: types.array(ChartDatasetSchema)
299
+ }),
300
+ options: types.object({
301
+ responsive: types.boolean().optional(),
302
+ maintainAspectRatio: types.boolean().optional(),
303
+ tension: types.number().optional(),
304
+ // `scales` and `plugins` are Chart.js opaque config objects — kept loose
305
+ scales: types.unknown().optional(),
306
+ plugins: types.unknown().optional()
307
+ }).optional(),
308
+ renderer: types.enum(["native", "iframe", "auto"]).optional(),
309
+ exportable: types.boolean().optional(),
310
+ timeAxis: ChartTimeAxisSchema.optional(),
311
+ height: types.string().optional(),
312
+ className: types.string().optional()
313
+ });
314
+ const TableColumnSchema = types.object({
315
+ key: types.string().min(1),
316
+ label: types.string(),
317
+ sortable: types.boolean().optional(),
318
+ width: types.string().optional()
319
+ });
320
+ const TablePaginationSchema = types.object({
321
+ currentPage: types.number().int().min(1),
322
+ pageSize: types.number().int().min(1),
323
+ totalRows: types.number().int().min(0)
324
+ });
325
+ const TableVirtualizeOptionsSchema = types.object({
326
+ enabled: types.boolean().optional(),
327
+ rowHeight: types.number().int().min(1).optional(),
328
+ overscan: types.number().int().min(0).optional(),
329
+ threshold: types.number().int().min(1).optional()
330
+ });
331
+ const TableExportableSchema = types.union([
332
+ types.boolean(),
333
+ types.object({
334
+ formats: types.array(types.enum(["csv", "tsv", "json"])).optional(),
335
+ filename: types.string().optional()
336
+ })
337
+ ]);
338
+ types.object({
339
+ title: types.string().optional(),
340
+ columns: types.array(TableColumnSchema).min(1),
341
+ rows: types.array(types.record(types.unknown())),
342
+ pagination: TablePaginationSchema.optional(),
343
+ virtualize: types.union([types.boolean(), TableVirtualizeOptionsSchema]).optional(),
344
+ exportable: TableExportableSchema.optional(),
345
+ className: types.string().optional()
346
+ });
347
+ const MetricTrendSchema = types.object({
348
+ value: types.number(),
349
+ direction: types.enum(["up", "down", "neutral"])
350
+ });
351
+ const MetricComponentParamsSchema = types.object({
352
+ title: types.string().min(1),
353
+ value: types.union([types.string(), types.number()]),
354
+ unit: types.string().optional(),
355
+ trend: MetricTrendSchema.optional(),
356
+ subtitle: types.string().optional(),
357
+ icon: types.string().optional(),
358
+ className: types.string().optional()
359
+ });
360
+ const TextComponentParamsSchema = types.object({
361
+ content: types.string().min(1),
362
+ markdown: types.boolean().optional(),
363
+ className: types.string().optional()
364
+ });
365
+ const IframeComponentParamsSchema = types.object({
366
+ url: types.string().min(1),
367
+ title: types.string().optional(),
368
+ height: types.string().optional(),
369
+ className: types.string().optional()
370
+ });
371
+ const ImageComponentParamsSchema = types.object({
372
+ url: types.string().min(1),
373
+ alt: types.string().optional(),
374
+ caption: types.string().optional(),
375
+ className: types.string().optional()
376
+ });
377
+ const LinkComponentParamsSchema = types.object({
378
+ url: types.string().min(1),
379
+ label: types.string().optional(),
380
+ description: types.string().optional(),
381
+ className: types.string().optional()
382
+ });
383
+ const CarouselComponentParamsSchema = types.object({
384
+ items: types.array(types.unknown()).min(1),
385
+ height: types.string().optional(),
386
+ className: types.string().optional()
387
+ });
388
+ const ArtifactComponentParamsSchema = types.object({
389
+ url: types.string().min(1),
390
+ filename: types.string().min(1),
391
+ mimeType: types.string().min(1),
392
+ size: types.number().int().min(0).optional(),
393
+ description: types.string().optional()
394
+ });
395
+ const SandboxFlagSchema = types.enum([
396
+ "allow-scripts",
397
+ "allow-same-origin",
398
+ "allow-forms",
399
+ "allow-popups",
400
+ "allow-modals"
401
+ ]);
402
+ const SecurityConstraintsSchema = types.object({
403
+ requiresAuth: types.boolean().default(false).optional(),
404
+ allowedDomains: types.array(types.string()).optional(),
405
+ maxIframeDepth: types.number().int().min(0).max(3).default(1).optional(),
406
+ sandboxFlags: types.array(SandboxFlagSchema).optional()
407
+ });
408
+ const PerformanceConstraintsSchema = types.object({
409
+ maxRenderTime: types.number().int().min(100).default(5e3).optional(),
410
+ maxDataSize: types.number().int().min(1024).default(102400).optional()
411
+ });
412
+ const ComponentSchemaSchema = types.object({
413
+ type: types.literal("object"),
414
+ required: types.array(types.string()).optional(),
415
+ properties: types.record(types.unknown()),
416
+ additionalProperties: types.boolean().optional()
417
+ });
418
+ const ComponentExampleSchema = types.object({
419
+ name: types.string().min(1),
420
+ description: types.string().optional(),
421
+ params: types.record(types.unknown()),
422
+ position: GridPositionSchema.optional()
423
+ });
424
+ const ComponentSchema = types.object({
425
+ id: types.string().regex(/^[a-z0-9-]+$/),
426
+ type: ComponentTypeSchema,
427
+ name: types.string().min(1),
428
+ description: types.string().optional(),
429
+ schema: ComponentSchemaSchema,
430
+ examples: types.array(ComponentExampleSchema).min(1),
431
+ security: SecurityConstraintsSchema.optional(),
432
+ performance: PerformanceConstraintsSchema.optional(),
433
+ tags: types.array(types.string().regex(/^[a-z0-9-]+$/)).optional(),
434
+ version: types.string().regex(/^\d+\.\d+\.\d+$/).optional(),
435
+ deprecated: types.boolean().default(false).optional(),
436
+ deprecationMessage: types.string().optional()
437
+ });
438
+ const RegistryMetadataSchema = types.object({
439
+ name: types.string().optional(),
440
+ description: types.string().optional(),
441
+ author: types.string().optional(),
442
+ repository: types.string().url().optional()
443
+ });
444
+ types.object({
445
+ version: types.literal("1.0.0"),
446
+ metadata: RegistryMetadataSchema.optional(),
447
+ components: types.array(ComponentSchema).min(1)
448
+ });
449
+ exports.ActionGroupGapSchema = ActionGroupGapSchema;
450
+ exports.ActionGroupLayoutSchema = ActionGroupLayoutSchema;
451
+ exports.ActionGroupParamsSchema = ActionGroupParamsSchema;
452
+ exports.ActionParamsSchema = ActionParamsSchema;
453
+ exports.ArtifactComponentParamsSchema = ArtifactComponentParamsSchema;
454
+ exports.CarouselComponentParamsSchema = CarouselComponentParamsSchema;
455
+ exports.ChartDatasetSchema = ChartDatasetSchema;
456
+ exports.ChartTimeAxisSchema = ChartTimeAxisSchema;
457
+ exports.ChartTypeSchema = ChartTypeSchema;
458
+ exports.CodeComponentParamsSchema = CodeComponentParamsSchema;
459
+ exports.ComponentExampleSchema = ComponentExampleSchema;
460
+ exports.ComponentSchema = ComponentSchema;
461
+ exports.ComponentSchemaSchema = ComponentSchemaSchema;
462
+ exports.ComponentTypeSchema = ComponentTypeSchema;
463
+ exports.FormFieldOptionSchema = FormFieldOptionSchema;
464
+ exports.FormFieldSchema = FormFieldSchema;
465
+ exports.FormFieldTypeSchema = FormFieldTypeSchema;
466
+ exports.FormSubmitActionSchema = FormSubmitActionSchema;
467
+ exports.GalleryImageSchema = GalleryImageSchema;
468
+ exports.GridPositionSchema = GridPositionSchema;
469
+ exports.IframeComponentParamsSchema = IframeComponentParamsSchema;
470
+ exports.ImageComponentParamsSchema = ImageComponentParamsSchema;
471
+ exports.ImageGalleryAspectRatioSchema = ImageGalleryAspectRatioSchema;
472
+ exports.ImageGalleryGapSchema = ImageGalleryGapSchema;
473
+ exports.ImageGalleryParamsSchema = ImageGalleryParamsSchema;
474
+ exports.LinkComponentParamsSchema = LinkComponentParamsSchema;
475
+ exports.MapMarkerSchema = MapMarkerSchema;
476
+ exports.MetricComponentParamsSchema = MetricComponentParamsSchema;
477
+ exports.MetricTrendSchema = MetricTrendSchema;
478
+ exports.ModalSizeSchema = ModalSizeSchema;
479
+ exports.PerformanceConstraintsSchema = PerformanceConstraintsSchema;
480
+ exports.PrefillSourceSchema = PrefillSourceSchema;
481
+ exports.RegistryMetadataSchema = RegistryMetadataSchema;
482
+ exports.SandboxFlagSchema = SandboxFlagSchema;
483
+ exports.SecurityConstraintsSchema = SecurityConstraintsSchema;
484
+ exports.ShowWhenConditionSchema = ShowWhenConditionSchema;
485
+ exports.ShowWhenOperatorSchema = ShowWhenOperatorSchema;
486
+ exports.TableColumnSchema = TableColumnSchema;
487
+ exports.TableExportableSchema = TableExportableSchema;
488
+ exports.TablePaginationSchema = TablePaginationSchema;
489
+ exports.TableVirtualizeOptionsSchema = TableVirtualizeOptionsSchema;
490
+ exports.TextComponentParamsSchema = TextComponentParamsSchema;
491
+ exports.VideoAspectRatioSchema = VideoAspectRatioSchema;
492
+ exports.VideoComponentParamsSchema = VideoComponentParamsSchema;
493
+ //# sourceMappingURL=schemas.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.cjs","sources":["../../../../mcp-ui-spec/dist/schemas.js"],"sourcesContent":["import { z } from \"zod\";\nconst GridPositionSchema = z.object({\n colStart: z.number().int().min(1).max(12),\n colSpan: z.number().int().min(1).max(12),\n rowStart: z.number().int().min(1).optional(),\n rowSpan: z.number().int().min(1).default(1).optional()\n});\nconst ComponentTypeSchema = z.enum([\n \"chart\",\n \"table\",\n \"metric\",\n \"text\",\n \"composite\",\n \"grid\",\n // Phase 5.0: Nested grid layouts\n \"iframe\",\n \"image\",\n \"link\",\n \"action\",\n // Phase 5.0: Tool call actions\n \"footer\",\n // Phase 5.0: Metadata footer\n \"carousel\",\n \"artifact\",\n \"form\",\n // Sprint 1: Form component\n \"modal\",\n // Sprint 3: Modal/dialog component\n \"action-group\",\n // Sprint 3: Action grouping component\n \"image-gallery\",\n // Sprint 5: Image gallery with lightbox\n \"video\",\n // Sprint 5: Video embed (YouTube, Vimeo, direct)\n \"code\",\n // Sprint 6: Syntax highlighted code block\n \"map\"\n // Sprint 6: Interactive map (Leaflet)\n]);\nconst FormFieldOptionSchema = z.object({\n label: z.string().min(1),\n value: z.string(),\n disabled: z.boolean().optional()\n});\nconst FormFieldTypeSchema = z.enum([\n \"text\",\n \"email\",\n \"password\",\n \"number\",\n \"date\",\n \"textarea\",\n \"select\",\n \"checkbox\",\n \"radio\",\n \"autocomplete\",\n \"range\",\n \"tags\",\n \"toggle\",\n \"fieldset\"\n]);\nconst ShowWhenOperatorSchema = z.enum([\n \"equals\",\n \"notEquals\",\n \"in\",\n \"notIn\",\n \"contains\",\n \"startsWith\",\n \"endsWith\",\n \"greaterThan\",\n \"lessThan\",\n \"isEmpty\",\n \"isNotEmpty\",\n \"isTrue\",\n \"isFalse\"\n]);\nconst ShowWhenConditionSchema = z.object({\n field: z.string().min(1),\n operator: ShowWhenOperatorSchema,\n value: z.any().optional()\n});\nconst PrefillSourceSchema = z.enum([\"user\", \"detected\", \"inferred\", \"default\"]);\nconst FormFieldSchema = z.object({\n name: z.string().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/),\n type: FormFieldTypeSchema,\n label: z.string().optional(),\n placeholder: z.string().optional(),\n helpText: z.string().optional(),\n required: z.boolean().optional(),\n disabled: z.boolean().optional(),\n defaultValue: z.any().optional(),\n // Prefill — pre-populated value with source tracking (v4.2.0)\n prefill: z.union([z.string(), z.array(z.string())]).optional(),\n displayHint: z.string().optional(),\n source: PrefillSourceSchema.optional(),\n muted: z.boolean().optional(),\n // Prefill mode for autocomplete fields (v4.3.0)\n prefillMode: z.enum([\"exact\", \"resolve\"]).optional(),\n // Value format validation (v4.3.0)\n valueFormat: z.string().optional(),\n valueFormatHint: z.string().optional(),\n // Text/textarea specific\n minLength: z.number().int().min(0).optional(),\n maxLength: z.number().int().min(1).optional(),\n pattern: z.string().optional(),\n // Number specific\n min: z.number().optional(),\n max: z.number().optional(),\n step: z.number().optional(),\n // Date specific\n minDate: z.string().optional(),\n maxDate: z.string().optional(),\n // Select/Radio specific\n options: z.array(FormFieldOptionSchema).optional(),\n // Multi-select (v2.6.0)\n multiple: z.boolean().optional(),\n // Autocomplete specific (v2.6.0)\n apiUrl: z.string().url().optional(),\n searchParam: z.string().optional(),\n labelField: z.string().optional(),\n valueField: z.string().optional(),\n extraParams: z.record(z.string()).optional(),\n minChars: z.number().int().min(0).optional(),\n debounceMs: z.number().int().min(0).optional(),\n // Dependent field (v2.7.0)\n dependsOn: z.object({\n field: z.string(),\n apiUrl: z.string(),\n labelField: z.string(),\n valueField: z.string(),\n extraParams: z.record(z.string()).optional()\n }).optional(),\n // Field status — API capability indicator (v2.11.0)\n fieldStatus: z.enum([\"required\", \"optional\", \"unsupported\", \"unknown\"]).optional(),\n statusReason: z.string().optional(),\n // Checkbox specific\n checkboxLabel: z.string().optional(),\n // Textarea specific\n rows: z.number().int().min(1).max(20).optional(),\n // Conditional visibility\n showWhen: ShowWhenConditionSchema.optional()\n});\nconst FormSubmitActionSchema = z.object({\n toolName: z.string().min(1),\n params: z.record(z.unknown()).optional()\n});\nconst FormComponentParamsSchema = z.object({\n title: z.string().optional(),\n fields: z.array(FormFieldSchema).min(1),\n submitLabel: z.string().optional(),\n showReset: z.boolean().optional(),\n submitAction: FormSubmitActionSchema.optional(),\n // Persistence options (Sprint 4)\n persistKey: z.string().optional(),\n excludeFromPersistence: z.array(z.string()).optional(),\n persistExpiresIn: z.number().int().positive().optional(),\n layout: z.enum([\"vertical\", \"horizontal\", \"inline\"]).optional(),\n // Auto-submit countdown in ms when all required fields are prefilled (v4.2.0)\n autoSubmitDelay: z.number().int().min(1e3).max(3e4).optional()\n});\nconst ModalSizeSchema = z.enum([\"sm\", \"md\", \"lg\", \"xl\", \"full\"]);\nconst ModalComponentParamsSchema = z.object({\n title: z.string().optional(),\n size: ModalSizeSchema.optional(),\n showClose: z.boolean().optional(),\n closeOnEscape: z.boolean().optional(),\n closeOnBackdrop: z.boolean().optional(),\n maxHeight: z.string().optional()\n // Note: content and footer are UIComponent references, validated separately\n});\nconst ActionGroupLayoutSchema = z.enum([\n \"horizontal\",\n \"vertical\",\n \"space-between\",\n \"end\",\n \"center\"\n]);\nconst ActionGroupGapSchema = z.enum([\"none\", \"sm\", \"md\", \"lg\"]);\nconst ActionParamsSchema = z.object({\n label: z.string().min(1),\n type: z.enum([\"button\", \"link\"]).optional(),\n action: z.enum([\"tool-call\", \"link\", \"submit\"]).optional(),\n toolName: z.string().optional(),\n params: z.record(z.unknown()).optional(),\n url: z.string().optional(),\n variant: z.enum([\"primary\", \"secondary\", \"outline\", \"ghost\", \"danger\"]).optional(),\n size: z.enum([\"sm\", \"md\", \"lg\"]).optional(),\n icon: z.string().optional(),\n disabled: z.boolean().optional()\n});\nconst ActionGroupParamsSchema = z.object({\n actions: z.array(ActionParamsSchema).min(1),\n layout: ActionGroupLayoutSchema.optional(),\n gap: ActionGroupGapSchema.optional(),\n fullWidth: z.boolean().optional(),\n label: z.string().optional()\n});\nconst GalleryImageSchema = z.object({\n url: z.string().url(),\n thumbnail: z.string().url().optional(),\n alt: z.string().optional(),\n caption: z.string().optional(),\n srcset: z.string().optional(),\n sizes: z.string().optional()\n});\nconst ImageGalleryColumnsSchema = z.enum([\"2\", \"3\", \"4\", \"5\"]).transform(Number);\nconst ImageGalleryGapSchema = z.enum([\"none\", \"sm\", \"md\", \"lg\"]);\nconst ImageGalleryAspectRatioSchema = z.enum([\"1:1\", \"16:9\", \"4:3\", \"auto\"]);\nconst ImageGalleryParamsSchema = z.object({\n title: z.string().optional(),\n images: z.array(GalleryImageSchema).min(1),\n columns: z.union([z.literal(2), z.literal(3), z.literal(4), z.literal(5)]).optional(),\n gap: ImageGalleryGapSchema.optional(),\n aspectRatio: ImageGalleryAspectRatioSchema.optional(),\n lightbox: z.boolean().optional(),\n showCaptions: z.boolean().optional()\n});\nconst VideoAspectRatioSchema = z.enum([\"16:9\", \"4:3\", \"1:1\", \"21:9\"]);\nconst VideoComponentParamsSchema = z.object({\n url: z.string().url(),\n title: z.string().optional(),\n caption: z.string().optional(),\n poster: z.string().url().optional(),\n aspectRatio: VideoAspectRatioSchema.optional(),\n autoplay: z.boolean().optional(),\n controls: z.boolean().optional(),\n loop: z.boolean().optional(),\n muted: z.boolean().optional(),\n startTime: z.number().int().min(0).optional()\n});\nconst CodeComponentParamsSchema = z.object({\n code: z.string(),\n language: z.string().optional(),\n filename: z.string().optional(),\n showLineNumbers: z.boolean().optional(),\n startLine: z.number().optional(),\n highlightLines: z.array(z.number()).optional(),\n maxHeight: z.string().optional(),\n theme: z.enum([\"light\", \"dark\"]).optional()\n});\nconst MapMarkerSchema = z.object({\n position: z.tuple([z.number(), z.number()]),\n tooltip: z.string().optional(),\n popup: z.string().optional()\n});\nconst MapComponentParamsSchema = z.object({\n center: z.tuple([z.number(), z.number()]).optional(),\n zoom: z.number().optional(),\n markers: z.array(MapMarkerSchema).optional(),\n height: z.string().optional(),\n fitBounds: z.boolean().optional(),\n zoomControl: z.boolean().optional(),\n scrollWheelZoom: z.boolean().optional(),\n tileLayer: z.string().optional(),\n attribution: z.string().optional()\n});\nconst ChartTypeSchema = z.enum([\n \"bar\",\n \"line\",\n \"pie\",\n \"doughnut\",\n \"radar\",\n \"scatter\",\n \"bubble\",\n \"polarArea\"\n]);\nconst ChartDatasetSchema = z.object({\n label: z.string(),\n // Either an array of numbers or an array of {x, y} points (Chart.js shapes)\n data: z.union([\n z.array(z.number()),\n z.array(\n z.object({\n x: z.union([z.string(), z.number()]),\n y: z.number()\n })\n )\n ]),\n backgroundColor: z.union([z.string(), z.array(z.string())]).optional(),\n borderColor: z.union([z.string(), z.array(z.string())]).optional(),\n borderWidth: z.number().optional(),\n fill: z.union([z.boolean(), z.string()]).optional(),\n tension: z.number().optional()\n});\nconst ChartTimeAxisSchema = z.object({\n parser: z.string().optional(),\n unit: z.enum([\"day\", \"week\", \"month\", \"quarter\", \"year\"]).optional(),\n tooltipFormat: z.string().optional(),\n min: z.string().optional(),\n max: z.string().optional()\n});\nconst ChartComponentParamsSchema = z.object({\n type: ChartTypeSchema,\n title: z.string().optional(),\n data: z.object({\n labels: z.array(z.string()),\n datasets: z.array(ChartDatasetSchema)\n }),\n options: z.object({\n responsive: z.boolean().optional(),\n maintainAspectRatio: z.boolean().optional(),\n tension: z.number().optional(),\n // `scales` and `plugins` are Chart.js opaque config objects — kept loose\n scales: z.unknown().optional(),\n plugins: z.unknown().optional()\n }).optional(),\n renderer: z.enum([\"native\", \"iframe\", \"auto\"]).optional(),\n exportable: z.boolean().optional(),\n timeAxis: ChartTimeAxisSchema.optional(),\n height: z.string().optional(),\n className: z.string().optional()\n});\nconst TableColumnSchema = z.object({\n key: z.string().min(1),\n label: z.string(),\n sortable: z.boolean().optional(),\n width: z.string().optional()\n});\nconst TablePaginationSchema = z.object({\n currentPage: z.number().int().min(1),\n pageSize: z.number().int().min(1),\n totalRows: z.number().int().min(0)\n});\nconst TableVirtualizeOptionsSchema = z.object({\n enabled: z.boolean().optional(),\n rowHeight: z.number().int().min(1).optional(),\n overscan: z.number().int().min(0).optional(),\n threshold: z.number().int().min(1).optional()\n});\nconst TableExportableSchema = z.union([\n z.boolean(),\n z.object({\n formats: z.array(z.enum([\"csv\", \"tsv\", \"json\"])).optional(),\n filename: z.string().optional()\n })\n]);\nconst TableComponentParamsSchema = z.object({\n title: z.string().optional(),\n columns: z.array(TableColumnSchema).min(1),\n rows: z.array(z.record(z.unknown())),\n pagination: TablePaginationSchema.optional(),\n virtualize: z.union([z.boolean(), TableVirtualizeOptionsSchema]).optional(),\n exportable: TableExportableSchema.optional(),\n className: z.string().optional()\n});\nconst MetricTrendSchema = z.object({\n value: z.number(),\n direction: z.enum([\"up\", \"down\", \"neutral\"])\n});\nconst MetricComponentParamsSchema = z.object({\n title: z.string().min(1),\n value: z.union([z.string(), z.number()]),\n unit: z.string().optional(),\n trend: MetricTrendSchema.optional(),\n subtitle: z.string().optional(),\n icon: z.string().optional(),\n className: z.string().optional()\n});\nconst TextComponentParamsSchema = z.object({\n content: z.string().min(1),\n markdown: z.boolean().optional(),\n className: z.string().optional()\n});\nconst IframeComponentParamsSchema = z.object({\n url: z.string().min(1),\n title: z.string().optional(),\n height: z.string().optional(),\n className: z.string().optional()\n});\nconst ImageComponentParamsSchema = z.object({\n url: z.string().min(1),\n alt: z.string().optional(),\n caption: z.string().optional(),\n className: z.string().optional()\n});\nconst LinkComponentParamsSchema = z.object({\n url: z.string().min(1),\n label: z.string().optional(),\n description: z.string().optional(),\n className: z.string().optional()\n});\nconst CarouselComponentParamsSchema = z.object({\n items: z.array(z.unknown()).min(1),\n height: z.string().optional(),\n className: z.string().optional()\n});\nconst ArtifactComponentParamsSchema = z.object({\n url: z.string().min(1),\n filename: z.string().min(1),\n mimeType: z.string().min(1),\n size: z.number().int().min(0).optional(),\n description: z.string().optional()\n});\nconst SandboxFlagSchema = z.enum([\n \"allow-scripts\",\n \"allow-same-origin\",\n \"allow-forms\",\n \"allow-popups\",\n \"allow-modals\"\n]);\nconst SecurityConstraintsSchema = z.object({\n requiresAuth: z.boolean().default(false).optional(),\n allowedDomains: z.array(z.string()).optional(),\n maxIframeDepth: z.number().int().min(0).max(3).default(1).optional(),\n sandboxFlags: z.array(SandboxFlagSchema).optional()\n});\nconst PerformanceConstraintsSchema = z.object({\n maxRenderTime: z.number().int().min(100).default(5e3).optional(),\n maxDataSize: z.number().int().min(1024).default(102400).optional()\n});\nconst ComponentSchemaSchema = z.object({\n type: z.literal(\"object\"),\n required: z.array(z.string()).optional(),\n properties: z.record(z.unknown()),\n additionalProperties: z.boolean().optional()\n});\nconst ComponentExampleSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n params: z.record(z.unknown()),\n position: GridPositionSchema.optional()\n});\nconst ComponentSchema = z.object({\n id: z.string().regex(/^[a-z0-9-]+$/),\n type: ComponentTypeSchema,\n name: z.string().min(1),\n description: z.string().optional(),\n schema: ComponentSchemaSchema,\n examples: z.array(ComponentExampleSchema).min(1),\n security: SecurityConstraintsSchema.optional(),\n performance: PerformanceConstraintsSchema.optional(),\n tags: z.array(z.string().regex(/^[a-z0-9-]+$/)).optional(),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/).optional(),\n deprecated: z.boolean().default(false).optional(),\n deprecationMessage: z.string().optional()\n});\nconst RegistryMetadataSchema = z.object({\n name: z.string().optional(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().url().optional()\n});\nconst ComponentRegistrySchema = z.object({\n version: z.literal(\"1.0.0\"),\n metadata: RegistryMetadataSchema.optional(),\n components: z.array(ComponentSchema).min(1)\n});\nexport {\n ActionGroupGapSchema,\n ActionGroupLayoutSchema,\n ActionGroupParamsSchema,\n ActionParamsSchema,\n ArtifactComponentParamsSchema,\n CarouselComponentParamsSchema,\n ChartComponentParamsSchema,\n ChartDatasetSchema,\n ChartTimeAxisSchema,\n ChartTypeSchema,\n CodeComponentParamsSchema,\n ComponentExampleSchema,\n ComponentRegistrySchema,\n ComponentSchema,\n ComponentSchemaSchema,\n ComponentTypeSchema,\n FormComponentParamsSchema,\n FormFieldOptionSchema,\n FormFieldSchema,\n FormFieldTypeSchema,\n FormSubmitActionSchema,\n GalleryImageSchema,\n GridPositionSchema,\n IframeComponentParamsSchema,\n ImageComponentParamsSchema,\n ImageGalleryAspectRatioSchema,\n ImageGalleryColumnsSchema,\n ImageGalleryGapSchema,\n ImageGalleryParamsSchema,\n LinkComponentParamsSchema,\n MapComponentParamsSchema,\n MapMarkerSchema,\n MetricComponentParamsSchema,\n MetricTrendSchema,\n ModalComponentParamsSchema,\n ModalSizeSchema,\n PerformanceConstraintsSchema,\n PrefillSourceSchema,\n RegistryMetadataSchema,\n SandboxFlagSchema,\n SecurityConstraintsSchema,\n ShowWhenConditionSchema,\n ShowWhenOperatorSchema,\n TableColumnSchema,\n TableComponentParamsSchema,\n TableExportableSchema,\n TablePaginationSchema,\n TableVirtualizeOptionsSchema,\n TextComponentParamsSchema,\n VideoAspectRatioSchema,\n VideoComponentParamsSchema\n};\n//# sourceMappingURL=schemas.js.map\n"],"names":["z.object","z.number","z.enum","z.string","z.boolean","z.any","z.union","z.array","z.record","z.unknown","z.literal","z.tuple"],"mappings":"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"}