@ng-forge/dynamic-form-mcp 1.2.0-next.9 → 1.2.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.
@@ -284,8 +284,8 @@ var FIELD_TYPES = [
284
284
  props: {},
285
285
  validationSupported: false,
286
286
  source: "core",
287
- allowedIn: ["top-level (single-page forms only)", "page.fields", "group.fields", "array.fields", "container"],
288
- notAllowedIn: ["row", "top-level when using pages"],
287
+ allowedIn: ["top-level (single-page forms only)", "page.fields", "group.fields", "array.fields", "row", "container"],
288
+ notAllowedIn: ["top-level when using pages"],
289
289
  example: `// Hidden field - value is REQUIRED!
290
290
  {
291
291
  key: 'userId',
@@ -302,7 +302,8 @@ var FIELD_TYPES = [
302
302
  // - label, logic, validators, required, props
303
303
  // - disabled, readonly, hidden, col, tabIndex, meta
304
304
  // - Validation shorthand: email, min, max, minLength, maxLength, pattern`,
305
- minimalExample: `{ key: 'id', type: 'hidden', value: 'abc123' }`
305
+ minimalExample: `{ key: 'id', type: 'hidden', value: 'abc123' }`,
306
+ illustrative: { example: "several snippets and a forbidden-property list, not one expression" }
306
307
  },
307
308
  {
308
309
  type: "text",
@@ -382,7 +383,8 @@ var FIELD_TYPES = [
382
383
  }
383
384
  // NOT ALLOWED in rows:
384
385
  // - type: 'page' (pages are top-level only)`,
385
- minimalExample: `{ key: 'row1', type: 'row', fields: [...] }`
386
+ minimalExample: `{ key: 'row1', type: 'row', fields: [{ key: 'firstName', type: 'input', label: 'First Name', col: 6 }, { key: 'lastName', type: 'input', label: 'Last Name', col: 6 }] }`,
387
+ illustrative: { example: "ends with a not-allowed-in list, so it is not one expression" }
386
388
  },
387
389
  {
388
390
  type: "group",
@@ -469,7 +471,8 @@ var FIELD_TYPES = [
469
471
  validators: [{ type: 'custom', functionName: 'dateOrder' }],
470
472
  validationMessages: { dateOrder: 'The end must not be before the start.' }
471
473
  }`,
472
- minimalExample: `{ key: 'address', type: 'group', fields: [...] }`
474
+ minimalExample: `{ key: 'address', type: 'group', fields: [{ key: 'street', type: 'input', label: 'Street' }] }`,
475
+ illustrative: { example: "two snippets: a plain group and one carrying a cross-field rule" }
473
476
  },
474
477
  {
475
478
  type: "array",
@@ -588,7 +591,8 @@ var FIELD_TYPES = [
588
591
  // periodOrder receives the whole item list:
589
592
  // (ctx) => (ctx.value() ?? []).some(r => r.from && r.to && r.to < r.from)
590
593
  // ? { kind: 'periodOrder' } : null`,
591
- minimalExample: `{ key: 'items', type: 'array', fields: [...] }`
594
+ minimalExample: `{ key: 'items', type: 'array', fields: [{ key: 'tag', type: 'input', label: 'Tag' }] }`,
595
+ illustrative: { example: "three snippets: flat, object-item and per-row-rule arrays" }
592
596
  },
593
597
  {
594
598
  type: "container",
@@ -656,7 +660,8 @@ var FIELD_TYPES = [
656
660
  // Values flatten: { street: '', city: '' } \u2014 no 'billingChrome' key
657
661
  // NOT ALLOWED in containers:
658
662
  // - type: 'page' (pages are top-level only)`,
659
- minimalExample: `{ key: 'chrome', type: 'container', wrappers: [], fields: [...] }`
663
+ minimalExample: `{ key: 'chrome', type: 'container', wrappers: [], fields: [{ key: 'street', type: 'input', label: 'Street' }] }`,
664
+ illustrative: { example: "ends with a not-allowed-in list, so it is not one expression" }
660
665
  },
661
666
  {
662
667
  type: "page",
@@ -709,7 +714,7 @@ var FIELD_TYPES = [
709
714
  { key: 'next', type: 'next', label: 'Next' }
710
715
  ]
711
716
  }`,
712
- minimalExample: `{ key: 'step1', type: 'page', fields: [...] }`
717
+ minimalExample: `{ key: 'step1', type: 'page', fields: [{ key: 'firstName', type: 'input', label: 'First Name' }] }`
713
718
  },
714
719
  {
715
720
  type: "next",
@@ -777,7 +782,11 @@ var FIELD_TYPES = [
777
782
  label: 'Custom Action',
778
783
  event: MyCustomEvent // Must be the class reference
779
784
  }`,
780
- minimalExample: `{ key: 'action', type: 'button', label: 'Action', event: MyEvent }`
785
+ minimalExample: `{ key: 'action', type: 'button', label: 'Action', event: MyEvent }`,
786
+ illustrative: {
787
+ minimalExample: "names an event class only a real app defines and registers",
788
+ example: "four snippets plus the registration steps they depend on"
789
+ }
781
790
  },
782
791
  {
783
792
  type: "submit",
@@ -802,16 +811,34 @@ var FIELD_TYPES = [
802
811
  description: "Button to append a new item to the end of an array field. Must be placed within or near the array container. (Legacy alias: addArrayItem.)",
803
812
  valueType: void 0,
804
813
  baseInterface: "FieldDef",
805
- props: {},
814
+ props: {
815
+ template: {
816
+ name: "template",
817
+ type: "ArrayAllowedChildren | readonly ArrayAllowedChildren[]",
818
+ description: "REQUIRED. The item this button adds. A single field creates a primitive item (its value is used directly); an array of fields creates an object item (the fields are merged into an object). Without it the config does not compile.",
819
+ required: true
820
+ },
821
+ arrayKey: {
822
+ name: "arrayKey",
823
+ type: "string",
824
+ description: "Key of the array to act on. Optional when the button sits inside that array, which supplies it from context.",
825
+ required: false
826
+ }
827
+ },
806
828
  validationSupported: false,
807
829
  source: "adapter",
808
830
  allowedIn: ["array", "row", "group", "container"],
809
831
  example: `{
810
832
  key: 'addContact',
811
833
  type: 'add-array-item',
812
- label: 'Add Contact'
834
+ label: 'Add Contact',
835
+ // REQUIRED: what one new item looks like.
836
+ template: [
837
+ { key: 'name', type: 'input', label: 'Name' },
838
+ { key: 'email', type: 'input', label: 'Email' }
839
+ ]
813
840
  }`,
814
- minimalExample: `{ key: 'add', type: 'add-array-item', label: 'Add Item' }`
841
+ minimalExample: `{ key: 'add', type: 'add-array-item', label: 'Add Item', template: { key: 'tag', type: 'input', label: 'Tag' } }`
815
842
  },
816
843
  {
817
844
  type: "prepend-array-item",
@@ -819,16 +846,34 @@ var FIELD_TYPES = [
819
846
  description: "Button to add a new item to the beginning of an array field. (Legacy alias: prependArrayItem.)",
820
847
  valueType: void 0,
821
848
  baseInterface: "FieldDef",
822
- props: {},
849
+ props: {
850
+ template: {
851
+ name: "template",
852
+ type: "ArrayAllowedChildren | readonly ArrayAllowedChildren[]",
853
+ description: "REQUIRED. The item this button adds. A single field creates a primitive item (its value is used directly); an array of fields creates an object item (the fields are merged into an object). Without it the config does not compile.",
854
+ required: true
855
+ },
856
+ arrayKey: {
857
+ name: "arrayKey",
858
+ type: "string",
859
+ description: "Key of the array to act on. Optional when the button sits inside that array, which supplies it from context.",
860
+ required: false
861
+ }
862
+ },
823
863
  validationSupported: false,
824
864
  source: "adapter",
825
865
  allowedIn: ["array", "row", "group", "container"],
826
866
  example: `{
827
867
  key: 'prependContact',
828
868
  type: 'prepend-array-item',
829
- label: 'Add to Top'
869
+ label: 'Add to Top',
870
+ // REQUIRED: what one new item looks like.
871
+ template: [
872
+ { key: 'name', type: 'input', label: 'Name' },
873
+ { key: 'email', type: 'input', label: 'Email' }
874
+ ]
830
875
  }`,
831
- minimalExample: `{ key: 'prepend', type: 'prepend-array-item', label: 'Add First' }`
876
+ minimalExample: `{ key: 'prepend', type: 'prepend-array-item', label: 'Add First', template: { key: 'tag', type: 'input', label: 'Tag' } }`
832
877
  },
833
878
  {
834
879
  type: "insert-array-item",
@@ -836,7 +881,26 @@ var FIELD_TYPES = [
836
881
  description: "Button to insert a new item at a specific index in an array field (set via the index property). (Legacy alias: insertArrayItem.)",
837
882
  valueType: void 0,
838
883
  baseInterface: "FieldDef",
839
- props: {},
884
+ props: {
885
+ index: {
886
+ name: "index",
887
+ type: "number",
888
+ description: "REQUIRED. The position to insert at.",
889
+ required: true
890
+ },
891
+ template: {
892
+ name: "template",
893
+ type: "ArrayAllowedChildren | readonly ArrayAllowedChildren[]",
894
+ description: "REQUIRED. The item this button adds. A single field creates a primitive item (its value is used directly); an array of fields creates an object item (the fields are merged into an object). Without it the config does not compile.",
895
+ required: true
896
+ },
897
+ arrayKey: {
898
+ name: "arrayKey",
899
+ type: "string",
900
+ description: "Key of the array to act on. Optional when the button sits inside that array, which supplies it from context.",
901
+ required: false
902
+ }
903
+ },
840
904
  validationSupported: false,
841
905
  source: "adapter",
842
906
  allowedIn: ["array", "row", "group", "container"],
@@ -844,9 +908,14 @@ var FIELD_TYPES = [
844
908
  key: 'insertContact',
845
909
  type: 'insert-array-item',
846
910
  label: 'Insert',
847
- index: 1
911
+ index: 1,
912
+ // REQUIRED: what one new item looks like.
913
+ template: [
914
+ { key: 'name', type: 'input', label: 'Name' },
915
+ { key: 'email', type: 'input', label: 'Email' }
916
+ ]
848
917
  }`,
849
- minimalExample: `{ key: 'insert', type: 'insert-array-item', label: 'Insert', index: 0 }`
918
+ minimalExample: `{ key: 'insert', type: 'insert-array-item', label: 'Insert', index: 0, template: { key: 'tag', type: 'input', label: 'Tag' } }`
850
919
  },
851
920
  {
852
921
  type: "remove-array-item",
@@ -2771,7 +2840,7 @@ You MUST follow these practices when generating FormConfig objects for ng-forge.
2771
2840
 
2772
2841
  ## Core Principles
2773
2842
 
2774
- 1. **Configuration-driven**: ng-forge wraps Angular Reactive Forms. Define structure declaratively via \`FormConfig\`, not imperatively.
2843
+ 1. **Configuration-driven**: ng-forge is built on Angular Signal Forms. Define structure declaratively via \`FormConfig\`, not imperatively.
2775
2844
  2. **Type-safe**: Use TypeScript interfaces for form values. The library provides full type inference.
2776
2845
  3. **Validation-first**: Always include validation and user-friendly error messages.
2777
2846
 
@@ -3268,6 +3337,7 @@ Recommended when consuming Ionic's \`apply-ionic-legacy-error-styles\` mixin, wh
3268
3337
  - \`withEventFormValue()\` \u2014 attach the current form value to every dispatched event
3269
3338
  - \`withValueExclusionDefaults(options)\` \u2014 set form-wide value exclusion defaults
3270
3339
  - \`withValidationExecutionDefaults(options)\` \u2014 set form-wide validation execution defaults (e.g. defer until touched)
3340
+ - \`withExperimentalWebMcp()\` \u2014 EXPERIMENTAL. Expose forms to browser AI agents as WebMCP tools. Opt a form in with \`options.webMcp: { name, description }\`; it registers \`fill_{name}\`, which validates and applies a partial patch of values to the form and returns what it set, which fields apply, which are still empty, and validation errors. Groups are merged key by key; lists are replaced whole, so an agent cannot rewrite a list whose items already hold values it is not allowed to set (a hidden id, a \`readonly\` price) \u2014 that write is refused rather than silently dropping them. Submission is a separate per-form opt-in: add \`allowSubmit: true\` to also register \`submit_{name}\`, which waits for the submission and reports its real outcome. Leave \`allowSubmit\` off for anything that spends money, sends a message, or cannot be undone. \`webMcp.name\` must be 1-121 characters of A-Z, a-z, 0-9, \`_\`, \`-\` or \`.\`, and short enough to read in a tool list. By default a response returns only the values the call set; \`readback: 'all'\` returns the whole readable model and hands the agent everything the form holds, so add it only when asked. Per field, \`webMcp: { readable, writable }\` (or \`webMcp: false\`) overrides the defaults: a \`hidden\` field type is neither readable nor writable, a password input is not readable, a \`readonly\` or derived field is not writable. Do NOT add \`options.webMcp\` unless the user explicitly asks for agent/WebMCP support.
3271
3341
 
3272
3342
  All features are exported from \`@ng-forge/dynamic-forms\`.
3273
3343
 
@@ -3313,23 +3383,31 @@ All features are exported from \`@ng-forge/dynamic-forms\`.
3313
3383
 
3314
3384
  ## CRITICAL: UI Library Differences
3315
3385
 
3316
- Different UI libraries support different properties. Always validate against the correct library using \`ngforge_validate\` with the appropriate \`uiIntegration\` parameter.
3386
+ Different UI libraries support different \`props\`. Always validate against the library the project actually uses.
3317
3387
 
3318
- ### Property Differences by Library
3388
+ Which props exist is answered per adapter, not here: use the adapter's own reference
3389
+ (\`ngforge_lookup\` with the adapter, or the \`ng-forge-dynamic-forms-<adapter>\` skill). A table
3390
+ repeated here would be a second copy of the adapter registries and would drift from them.
3319
3391
 
3320
- | Property | Material | Bootstrap | PrimeNG | Ionic |
3321
- |----------|----------|-----------|---------|-------|
3322
- | \`appearance\` | \u2713 (fill, outline) | \u2717 | \u2717 | \u2713 (fill, outline) |
3323
- | \`subscriptSizing\` | \u2713 | \u2717 | \u2717 | \u2717 |
3324
- | \`floatLabel\` | \u2713 (auto, always, never) | \u2717 | \u2717 | \u2717 |
3325
- | \`hideRequiredMarker\` | \u2713 | \u2717 | \u2717 | \u2717 |
3326
- | \`hint\` | \u2713 | \u2713 (as \`helpText\`) | \u2713 | \u2713 |
3392
+ Two adapters cannot both provide the same field type, so a project has one adapter per
3393
+ field type; TypeScript reports error 2717 when two try.
3327
3394
 
3328
3395
  ### Container Fields
3329
3396
 
3330
- Container fields (\`page\`, \`group\`, \`row\`) do NOT support these properties:
3331
- - \`label\` - Use \`text\` field type for headings instead
3332
- - \`required\`, \`email\`, \`min\`, \`max\`, etc. - Validation is for leaf fields only
3397
+ No container has a \`label\`. Use a \`text\` field for a heading instead.
3398
+
3399
+ Validation splits by whether the container owns a value:
3400
+
3401
+ - \`group\` and \`array\` DO accept \`required\`, \`validators\`, \`validationMessages\`
3402
+ and \`validateWhenHidden\`. A validator there runs against the container's own
3403
+ subtree, so a cross-field rule (dateTo after dateFrom) belongs on the group
3404
+ rather than on one of its children. \`ctx.value()\` is the group's object or the
3405
+ array's item list.
3406
+ - \`page\`, \`row\` and \`container\` do NOT. They flatten into their parent and have
3407
+ no schema path, so a validator on them would have nothing to run against.
3408
+
3409
+ Leaf-level validators such as \`email\`, \`min\` and \`max\` belong on the field that
3410
+ holds the value, on any container.
3333
3411
 
3334
3412
  ### Common Mistakes to Avoid
3335
3413
 
@@ -3347,34 +3425,48 @@ Container fields (\`page\`, \`group\`, \`row\`) do NOT support these properties:
3347
3425
 
3348
3426
  3. **Adding \`id\` to FormConfig** - The root FormConfig does not accept an \`id\` property.
3349
3427
 
3350
- 4. **Putting slider min/max in props** - For slider fields, \`min\`, \`max\`, and \`step\` are field-level properties:
3428
+ 4. **Using \`min\`/\`max\` for a slider's range** - A slider's range is
3429
+ \`minValue\`, \`maxValue\` and \`step\`, at field level. \`min\` and \`max\` are
3430
+ validation shorthands: they typecheck, they validate clean, and the slider
3431
+ still renders its default 0-100 range, so nothing catches the mistake.
3351
3432
  \`\`\`typescript
3352
- // \u274C WRONG
3433
+ // \u274C WRONG - validates clean, renders the wrong range
3353
3434
  { key: 'volume', type: 'slider', label: 'Volume', props: { min: 0, max: 100 } }
3435
+ { key: 'volume', type: 'slider', label: 'Volume', min: 0, max: 100 }
3354
3436
 
3355
3437
  // \u2705 CORRECT
3356
- { key: 'volume', type: 'slider', label: 'Volume', min: 0, max: 100 }
3438
+ { key: 'volume', type: 'slider', label: 'Volume', minValue: 0, maxValue: 100, step: 5 }
3357
3439
  \`\`\`
3358
3440
 
3359
3441
  5. **Using unsupported field types** - Each UI library supports specific field types. Use \`ngforge_lookup\` with \`depth: "schema"\` to see available types.
3360
3442
 
3361
3443
  ## Validation Before Use
3362
3444
 
3363
- Always validate your FormConfig using the \`ngforge_validate\` tool before using it. This tool uses the actual TypeScript/Zod schemas, so if validation passes, the config will work correctly at runtime.
3445
+ Never hand back a config you have not checked. Two routes, depending on what is
3446
+ available:
3364
3447
 
3365
- \`\`\`typescript
3366
- // Always specify the UI integration you're using
3367
- ngforge_validate({
3368
- uiIntegration: 'material', // or 'bootstrap', 'primeng', 'ionic'
3369
- config: { fields: [...] }
3370
- })
3371
- \`\`\`
3448
+ - With the MCP server: \`ngforge_validate({ uiIntegration: 'material', config })\`
3449
+ - Without it: \`npx --yes @ng-forge/dynamic-forms-cli@next "path/to/your.form.ts" --ui material\`
3372
3450
 
3373
- To understand what properties are supported for each field type, use \`ngforge_lookup\` with \`depth: "schema"\`:
3451
+ Both run the same schemas, so they agree.
3374
3452
 
3375
- \`\`\`typescript
3376
- ngforge_lookup({ topic: 'input', depth: 'schema', uiIntegration: 'material' })
3377
- \`\`\`
3453
+ ### What a clean run does and does not mean
3454
+
3455
+ A clean run means the structure is right: the field types exist, required
3456
+ properties are present, options are in the right place, and containers are not
3457
+ carrying properties they cannot have.
3458
+
3459
+ It does NOT mean every property you wrote is real. The schemas strip unknown keys
3460
+ rather than rejecting them, so an invented or misplaced property passes
3461
+ validation and is silently dropped at runtime. Measured examples that pass today:
3462
+ \`hideWhen\` on a field and \`targetProperty\` inside a derivation.
3463
+
3464
+ \`as const satisfies FormConfig\` is what catches those, because TypeScript checks
3465
+ the property names. Use both: the type annotation for what exists, the validator
3466
+ for what is structurally correct.
3467
+
3468
+ To see which properties a field type supports, use \`ngforge_lookup\` with
3469
+ \`depth: "schema"\`, or read the field-types reference in the skill.
3378
3470
  `;
3379
3471
 
3380
3472
  // packages/dynamic-form-mcp/src/resources/instructions.resource.ts
@@ -4404,18 +4496,41 @@ import { z as z3 } from "zod";
4404
4496
  var FieldMetaSchema = z3.record(z3.string(), z3.union([z3.string(), z3.number(), z3.boolean(), z3.undefined()]));
4405
4497
 
4406
4498
  // internal/dynamic-forms-validation/src/lib/schemas/field/field-def.schema.ts
4499
+ import { z as z5 } from "zod";
4500
+
4501
+ // internal/dynamic-forms-validation/src/lib/schemas/field/field-web-mcp.schema.ts
4407
4502
  import { z as z4 } from "zod";
4408
- var BaseFieldDefSchema = z4.object({
4503
+ var FieldWebMcpOptionsSchema = z4.object({
4504
+ /**
4505
+ * Whether an agent may see this field's value in a tool response.
4506
+ *
4507
+ * Defaults to true, except for a `hidden` field type or an input whose
4508
+ * `props.type` is `'password'`. A withheld value is replaced by a marker
4509
+ * rather than dropped, so the agent still knows the field exists.
4510
+ */
4511
+ readable: z4.boolean().optional(),
4512
+ /**
4513
+ * Whether an agent may write this field.
4514
+ *
4515
+ * Defaults to true, except for a `hidden` field type, a field with a
4516
+ * `derivation`, or one that is `readonly`.
4517
+ */
4518
+ writable: z4.boolean().optional()
4519
+ });
4520
+ var FieldWebMcpConfigSchema = z4.union([FieldWebMcpOptionsSchema, z4.literal(false)]);
4521
+
4522
+ // internal/dynamic-forms-validation/src/lib/schemas/field/field-def.schema.ts
4523
+ var BaseFieldDefSchema = z5.object({
4409
4524
  /**
4410
4525
  * Unique field identifier within the form.
4411
4526
  * Used as the form control name and for targeting in logic expressions.
4412
4527
  */
4413
- key: z4.string(),
4528
+ key: z5.string(),
4414
4529
  /**
4415
4530
  * Field type discriminant.
4416
4531
  * Determines which component renders the field.
4417
4532
  */
4418
- type: z4.string(),
4533
+ type: z5.string(),
4419
4534
  /**
4420
4535
  * Human-readable label displayed next to the field.
4421
4536
  */
@@ -4428,58 +4543,68 @@ var BaseFieldDefSchema = z4.object({
4428
4543
  /**
4429
4544
  * CSS classes applied to the field wrapper (space-separated).
4430
4545
  */
4431
- className: z4.string().optional(),
4546
+ className: z5.string().optional(),
4432
4547
  /**
4433
4548
  * Whether the field is disabled (non-interactive but visible).
4434
4549
  */
4435
- disabled: z4.boolean().optional(),
4550
+ disabled: z5.boolean().optional(),
4436
4551
  /**
4437
4552
  * Whether the field is read-only (displays value but not editable).
4438
4553
  */
4439
- readonly: z4.boolean().optional(),
4554
+ readonly: z5.boolean().optional(),
4440
4555
  /**
4441
4556
  * Whether the field is hidden from view.
4442
4557
  */
4443
- hidden: z4.boolean().optional(),
4558
+ hidden: z5.boolean().optional(),
4444
4559
  /**
4445
4560
  * Tab order for keyboard navigation.
4446
4561
  */
4447
- tabIndex: z4.number().optional(),
4562
+ tabIndex: z5.number().optional(),
4448
4563
  /**
4449
4564
  * Grid column width (1-12) in a 12-column layout system.
4450
4565
  */
4451
- col: z4.number().min(1).max(12).optional(),
4566
+ col: z5.number().min(1).max(12).optional(),
4452
4567
  /**
4453
4568
  * Whether to exclude this field's value from submission output when hidden.
4454
4569
  * Overrides both the global and form-level settings.
4455
4570
  */
4456
- excludeValueIfHidden: z4.boolean().optional(),
4571
+ excludeValueIfHidden: z5.boolean().optional(),
4457
4572
  /**
4458
4573
  * Whether to exclude this field's value from submission output when disabled.
4459
4574
  * Overrides both the global and form-level settings.
4460
4575
  */
4461
- excludeValueIfDisabled: z4.boolean().optional(),
4576
+ excludeValueIfDisabled: z5.boolean().optional(),
4462
4577
  /**
4463
4578
  * Whether to exclude this field's value from submission output when readonly.
4464
4579
  * Overrides both the global and form-level settings.
4465
4580
  */
4466
- excludeValueIfReadonly: z4.boolean().optional(),
4581
+ excludeValueIfReadonly: z5.boolean().optional(),
4467
4582
  /**
4468
4583
  * Whether to run validation when this field is hidden.
4469
4584
  * Inherited from the parent field (and form/global defaults). Defaults to false.
4470
4585
  */
4471
- validateWhenHidden: z4.boolean().optional()
4586
+ validateWhenHidden: z5.boolean().optional(),
4587
+ /**
4588
+ * What a browser AI agent may do with this field, when the form opts in to
4589
+ * WebMCP through `options.webMcp`.
4590
+ *
4591
+ * Overrides either axis of the conservative default, or `false` to hide the
4592
+ * field from agents entirely. Without this key on the schema a parsed config
4593
+ * silently loses the policy, so a generated or round-tripped config would
4594
+ * quietly widen what an agent can see and write.
4595
+ */
4596
+ webMcp: FieldWebMcpConfigSchema.optional()
4472
4597
  });
4473
4598
 
4474
4599
  // internal/dynamic-forms-validation/src/lib/schemas/field/field-with-validation.schema.ts
4475
- import { z as z11 } from "zod";
4600
+ import { z as z12 } from "zod";
4476
4601
 
4477
4602
  // internal/dynamic-forms-validation/src/lib/schemas/validation/validator-config.schema.ts
4478
- import { z as z6 } from "zod";
4603
+ import { z as z7 } from "zod";
4479
4604
 
4480
4605
  // internal/dynamic-forms-validation/src/lib/schemas/logic/conditional-expression.schema.ts
4481
- import { z as z5 } from "zod";
4482
- var ComparisonOperatorSchema = z5.enum([
4606
+ import { z as z6 } from "zod";
4607
+ var ComparisonOperatorSchema = z6.enum([
4483
4608
  "equals",
4484
4609
  "notEquals",
4485
4610
  "greater",
@@ -4491,35 +4616,35 @@ var ComparisonOperatorSchema = z5.enum([
4491
4616
  "endsWith",
4492
4617
  "matches"
4493
4618
  ]);
4494
- var BaseComparisonConditionSchema = z5.object({
4619
+ var BaseComparisonConditionSchema = z6.object({
4495
4620
  operator: ComparisonOperatorSchema.optional(),
4496
- value: z5.unknown().optional()
4621
+ value: z6.unknown().optional()
4497
4622
  });
4498
4623
  var FieldValueConditionSchema = BaseComparisonConditionSchema.extend({
4499
- type: z5.literal("fieldValue"),
4624
+ type: z6.literal("fieldValue"),
4500
4625
  /**
4501
4626
  * Path to the field to check.
4502
4627
  * Supports dot notation for nested fields.
4503
4628
  */
4504
- fieldPath: z5.string()
4629
+ fieldPath: z6.string()
4505
4630
  });
4506
- var CustomConditionSchema = z5.object({
4507
- type: z5.literal("custom"),
4631
+ var CustomConditionSchema = z6.object({
4632
+ type: z6.literal("custom"),
4508
4633
  /**
4509
4634
  * Name of a registered custom function to invoke.
4510
4635
  */
4511
- functionName: z5.string()
4636
+ functionName: z6.string()
4512
4637
  });
4513
- var JavaScriptConditionSchema = z5.object({
4514
- type: z5.literal("javascript"),
4638
+ var JavaScriptConditionSchema = z6.object({
4639
+ type: z6.literal("javascript"),
4515
4640
  /**
4516
4641
  * JavaScript expression to evaluate.
4517
4642
  * Has access to: fieldValue, formValue, fieldPath
4518
4643
  */
4519
- expression: z5.string()
4644
+ expression: z6.string()
4520
4645
  });
4521
- var ConditionalExpressionSchema = z5.lazy(
4522
- () => z5.discriminatedUnion("type", [
4646
+ var ConditionalExpressionSchema = z6.lazy(
4647
+ () => z6.discriminatedUnion("type", [
4523
4648
  FieldValueConditionSchema,
4524
4649
  CustomConditionSchema,
4525
4650
  JavaScriptConditionSchema,
@@ -4527,116 +4652,116 @@ var ConditionalExpressionSchema = z5.lazy(
4527
4652
  OrConditionSchema
4528
4653
  ])
4529
4654
  );
4530
- var AndConditionSchema = z5.object({
4531
- type: z5.literal("and"),
4655
+ var AndConditionSchema = z6.object({
4656
+ type: z6.literal("and"),
4532
4657
  /**
4533
4658
  * Array of conditions that must all be true.
4534
4659
  */
4535
- conditions: z5.array(z5.lazy(() => ConditionalExpressionSchema))
4660
+ conditions: z6.array(z6.lazy(() => ConditionalExpressionSchema))
4536
4661
  });
4537
- var OrConditionSchema = z5.object({
4538
- type: z5.literal("or"),
4662
+ var OrConditionSchema = z6.object({
4663
+ type: z6.literal("or"),
4539
4664
  /**
4540
4665
  * Array of conditions where at least one must be true.
4541
4666
  */
4542
- conditions: z5.array(z5.lazy(() => ConditionalExpressionSchema))
4667
+ conditions: z6.array(z6.lazy(() => ConditionalExpressionSchema))
4543
4668
  });
4544
4669
 
4545
4670
  // internal/dynamic-forms-validation/src/lib/schemas/validation/validator-config.schema.ts
4546
- var BaseValidatorSchema = z6.object({
4671
+ var BaseValidatorSchema = z7.object({
4547
4672
  /**
4548
4673
  * Condition for when this validator should be applied.
4549
4674
  * If omitted, validator is always active.
4550
4675
  */
4551
4676
  when: ConditionalExpressionSchema.optional()
4552
4677
  });
4553
- var BuiltInValidatorParamsSchema = z6.object({
4678
+ var BuiltInValidatorParamsSchema = z7.object({
4554
4679
  /**
4555
4680
  * Static value for the validator parameter.
4556
4681
  */
4557
- value: z6.union([z6.number(), z6.string()]).optional(),
4682
+ value: z7.union([z7.number(), z7.string()]).optional(),
4558
4683
  /**
4559
4684
  * Dynamic expression that evaluates to the validator parameter.
4560
4685
  */
4561
- expression: z6.string().optional()
4686
+ expression: z7.string().optional()
4562
4687
  });
4563
- var ValidatorConfigSchema = z6.discriminatedUnion("type", [
4688
+ var ValidatorConfigSchema = z7.discriminatedUnion("type", [
4564
4689
  // Built-in validators
4565
4690
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4566
- type: z6.literal("required")
4691
+ type: z7.literal("required")
4567
4692
  }),
4568
4693
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4569
- type: z6.literal("email")
4694
+ type: z7.literal("email")
4570
4695
  }),
4571
4696
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4572
- type: z6.literal("min")
4697
+ type: z7.literal("min")
4573
4698
  }),
4574
4699
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4575
- type: z6.literal("max")
4700
+ type: z7.literal("max")
4576
4701
  }),
4577
4702
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4578
- type: z6.literal("minLength")
4703
+ type: z7.literal("minLength")
4579
4704
  }),
4580
4705
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4581
- type: z6.literal("maxLength")
4706
+ type: z7.literal("maxLength")
4582
4707
  }),
4583
4708
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4584
- type: z6.literal("pattern")
4709
+ type: z7.literal("pattern")
4585
4710
  }),
4586
4711
  // Custom synchronous validators
4587
4712
  BaseValidatorSchema.extend({
4588
- type: z6.literal("custom"),
4713
+ type: z7.literal("custom"),
4589
4714
  /**
4590
4715
  * Name of a registered custom validator function.
4591
4716
  */
4592
- functionName: z6.string().optional(),
4717
+ functionName: z7.string().optional(),
4593
4718
  /**
4594
4719
  * Parameters passed to the custom validator function.
4595
4720
  */
4596
- params: z6.record(z6.string(), z6.unknown()).optional(),
4721
+ params: z7.record(z7.string(), z7.unknown()).optional(),
4597
4722
  /**
4598
4723
  * JavaScript expression to evaluate for validation.
4599
4724
  */
4600
- expression: z6.string().optional(),
4725
+ expression: z7.string().optional(),
4601
4726
  /**
4602
4727
  * Error kind identifier for linking to validation messages.
4603
4728
  */
4604
- kind: z6.string().optional(),
4729
+ kind: z7.string().optional(),
4605
4730
  /**
4606
4731
  * Error context parameters for message interpolation.
4607
4732
  */
4608
- errorParams: z6.record(z6.string(), z6.string()).optional()
4733
+ errorParams: z7.record(z7.string(), z7.string()).optional()
4609
4734
  }),
4610
4735
  // Async validators
4611
4736
  BaseValidatorSchema.extend({
4612
- type: z6.literal("async"),
4737
+ type: z7.literal("async"),
4613
4738
  /**
4614
4739
  * Name of a registered async validator function. Required.
4615
4740
  */
4616
- functionName: z6.string(),
4741
+ functionName: z7.string(),
4617
4742
  /**
4618
4743
  * Parameters passed to the async validator function.
4619
4744
  */
4620
- params: z6.record(z6.string(), z6.unknown()).optional()
4745
+ params: z7.record(z7.string(), z7.unknown()).optional()
4621
4746
  }),
4622
4747
  // HTTP validators
4623
4748
  BaseValidatorSchema.extend({
4624
- type: z6.literal("http"),
4749
+ type: z7.literal("http"),
4625
4750
  /**
4626
4751
  * Name of a registered HTTP validator config function. Required.
4627
4752
  */
4628
- functionName: z6.string(),
4753
+ functionName: z7.string(),
4629
4754
  /**
4630
4755
  * Parameters passed to the HTTP validator function.
4631
4756
  */
4632
- params: z6.record(z6.string(), z6.unknown()).optional()
4757
+ params: z7.record(z7.string(), z7.unknown()).optional()
4633
4758
  })
4634
4759
  ]);
4635
- var ValidatorsArraySchema = z6.array(ValidatorConfigSchema);
4760
+ var ValidatorsArraySchema = z7.array(ValidatorConfigSchema);
4636
4761
 
4637
4762
  // internal/dynamic-forms-validation/src/lib/schemas/validation/validation-messages.schema.ts
4638
- import { z as z7 } from "zod";
4639
- var ValidationMessagesSchema = z7.object({
4763
+ import { z as z8 } from "zod";
4764
+ var ValidationMessagesSchema = z8.object({
4640
4765
  required: DynamicTextSchema.optional(),
4641
4766
  email: DynamicTextSchema.optional(),
4642
4767
  min: DynamicTextSchema.optional(),
@@ -4647,15 +4772,15 @@ var ValidationMessagesSchema = z7.object({
4647
4772
  }).catchall(DynamicTextSchema.optional());
4648
4773
 
4649
4774
  // internal/dynamic-forms-validation/src/lib/schemas/logic/logic-config.schema.ts
4650
- import { z as z10 } from "zod";
4775
+ import { z as z11 } from "zod";
4651
4776
 
4652
4777
  // internal/dynamic-forms-validation/src/lib/schemas/logic/state-logic.schema.ts
4653
- import { z as z8 } from "zod";
4654
- var StateLogicTypeSchema = z8.enum(["hidden", "readonly", "disabled", "required"]);
4655
- var FormStateConditionSchema = z8.enum(["formInvalid", "formSubmitting", "pageInvalid"]);
4656
- var StateConditionSchema = z8.union([ConditionalExpressionSchema, z8.boolean(), FormStateConditionSchema]);
4657
- var LogicTriggerSchema = z8.enum(["onChange", "debounced"]);
4658
- var ImmediateStateLogicConfigSchema = z8.object({
4778
+ import { z as z9 } from "zod";
4779
+ var StateLogicTypeSchema = z9.enum(["hidden", "readonly", "disabled", "required"]);
4780
+ var FormStateConditionSchema = z9.enum(["formInvalid", "formSubmitting", "pageInvalid"]);
4781
+ var StateConditionSchema = z9.union([ConditionalExpressionSchema, z9.boolean(), FormStateConditionSchema]);
4782
+ var LogicTriggerSchema = z9.enum(["onChange", "debounced"]);
4783
+ var ImmediateStateLogicConfigSchema = z9.object({
4659
4784
  /**
4660
4785
  * The state property to control.
4661
4786
  */
@@ -4667,9 +4792,9 @@ var ImmediateStateLogicConfigSchema = z8.object({
4667
4792
  /**
4668
4793
  * Trigger type - defaults to 'onChange' for immediate evaluation.
4669
4794
  */
4670
- trigger: z8.literal("onChange").optional()
4795
+ trigger: z9.literal("onChange").optional()
4671
4796
  });
4672
- var DebouncedStateLogicConfigSchema = z8.object({
4797
+ var DebouncedStateLogicConfigSchema = z9.object({
4673
4798
  /**
4674
4799
  * The state property to control.
4675
4800
  */
@@ -4681,101 +4806,101 @@ var DebouncedStateLogicConfigSchema = z8.object({
4681
4806
  /**
4682
4807
  * Trigger type - must be 'debounced' for delayed evaluation.
4683
4808
  */
4684
- trigger: z8.literal("debounced"),
4809
+ trigger: z9.literal("debounced"),
4685
4810
  /**
4686
4811
  * Debounce duration in milliseconds. Defaults to 500.
4687
4812
  */
4688
- debounceMs: z8.number().positive().optional()
4813
+ debounceMs: z9.number().positive().optional()
4689
4814
  });
4690
- var StateLogicConfigSchema = z8.union([ImmediateStateLogicConfigSchema, DebouncedStateLogicConfigSchema]);
4815
+ var StateLogicConfigSchema = z9.union([ImmediateStateLogicConfigSchema, DebouncedStateLogicConfigSchema]);
4691
4816
 
4692
4817
  // internal/dynamic-forms-validation/src/lib/schemas/logic/derivation-logic.schema.ts
4693
- import { z as z9 } from "zod";
4694
- var OnChangeDerivationLogicConfigSchema = z9.object({
4818
+ import { z as z10 } from "zod";
4819
+ var OnChangeDerivationLogicConfigSchema = z10.object({
4695
4820
  /**
4696
4821
  * Discriminant for derivation logic.
4697
4822
  */
4698
- type: z9.literal("derivation"),
4823
+ type: z10.literal("derivation"),
4699
4824
  /**
4700
4825
  * Debug name for logging and troubleshooting.
4701
4826
  */
4702
- debugName: z9.string().optional(),
4827
+ debugName: z10.string().optional(),
4703
4828
  /**
4704
4829
  * Condition for when this derivation should run.
4705
4830
  * Defaults to true (always runs).
4706
4831
  */
4707
- condition: z9.union([ConditionalExpressionSchema, z9.boolean()]).optional(),
4832
+ condition: z10.union([ConditionalExpressionSchema, z10.boolean()]).optional(),
4708
4833
  /**
4709
4834
  * Static value to set. Mutually exclusive with expression/functionName.
4710
4835
  */
4711
- value: z9.unknown().optional(),
4836
+ value: z10.unknown().optional(),
4712
4837
  /**
4713
4838
  * JavaScript expression to evaluate for the value.
4714
4839
  * Has access to: fieldValue, formValue, fieldPath
4715
4840
  */
4716
- expression: z9.string().optional(),
4841
+ expression: z10.string().optional(),
4717
4842
  /**
4718
4843
  * Name of a registered derivation function.
4719
4844
  * The function must be registered in customFnConfig.derivations.
4720
4845
  */
4721
- functionName: z9.string().optional(),
4846
+ functionName: z10.string().optional(),
4722
4847
  /**
4723
4848
  * Explicit dependencies for determining when to re-evaluate.
4724
4849
  * If omitted, dependencies are auto-detected from the expression.
4725
4850
  */
4726
- dependsOn: z9.array(z9.string()).optional(),
4851
+ dependsOn: z10.array(z10.string()).optional(),
4727
4852
  /**
4728
4853
  * Trigger type - defaults to 'onChange' for immediate evaluation.
4729
4854
  */
4730
- trigger: z9.literal("onChange").optional()
4855
+ trigger: z10.literal("onChange").optional()
4731
4856
  });
4732
- var DebouncedDerivationLogicConfigSchema = z9.object({
4857
+ var DebouncedDerivationLogicConfigSchema = z10.object({
4733
4858
  /**
4734
4859
  * Discriminant for derivation logic.
4735
4860
  */
4736
- type: z9.literal("derivation"),
4861
+ type: z10.literal("derivation"),
4737
4862
  /**
4738
4863
  * Debug name for logging and troubleshooting.
4739
4864
  */
4740
- debugName: z9.string().optional(),
4865
+ debugName: z10.string().optional(),
4741
4866
  /**
4742
4867
  * Condition for when this derivation should run.
4743
4868
  */
4744
- condition: z9.union([ConditionalExpressionSchema, z9.boolean()]).optional(),
4869
+ condition: z10.union([ConditionalExpressionSchema, z10.boolean()]).optional(),
4745
4870
  /**
4746
4871
  * Static value to set.
4747
4872
  */
4748
- value: z9.unknown().optional(),
4873
+ value: z10.unknown().optional(),
4749
4874
  /**
4750
4875
  * JavaScript expression to evaluate for the value.
4751
4876
  */
4752
- expression: z9.string().optional(),
4877
+ expression: z10.string().optional(),
4753
4878
  /**
4754
4879
  * Name of a registered derivation function.
4755
4880
  */
4756
- functionName: z9.string().optional(),
4881
+ functionName: z10.string().optional(),
4757
4882
  /**
4758
4883
  * Explicit dependencies for determining when to re-evaluate.
4759
4884
  */
4760
- dependsOn: z9.array(z9.string()).optional(),
4885
+ dependsOn: z10.array(z10.string()).optional(),
4761
4886
  /**
4762
4887
  * Trigger type - must be 'debounced' for delayed evaluation.
4763
4888
  */
4764
- trigger: z9.literal("debounced"),
4889
+ trigger: z10.literal("debounced"),
4765
4890
  /**
4766
4891
  * Debounce duration in milliseconds. Defaults to 500.
4767
4892
  */
4768
- debounceMs: z9.number().positive().optional()
4893
+ debounceMs: z10.number().positive().optional()
4769
4894
  });
4770
- var DerivationLogicConfigSchema = z9.union([OnChangeDerivationLogicConfigSchema, DebouncedDerivationLogicConfigSchema]);
4895
+ var DerivationLogicConfigSchema = z10.union([OnChangeDerivationLogicConfigSchema, DebouncedDerivationLogicConfigSchema]);
4771
4896
 
4772
4897
  // internal/dynamic-forms-validation/src/lib/schemas/logic/logic-config.schema.ts
4773
- var LogicConfigSchema = z10.union([StateLogicConfigSchema, DerivationLogicConfigSchema]);
4774
- var LogicArraySchema = z10.array(LogicConfigSchema);
4898
+ var LogicConfigSchema = z11.union([StateLogicConfigSchema, DerivationLogicConfigSchema]);
4899
+ var LogicArraySchema = z11.array(LogicConfigSchema);
4775
4900
 
4776
4901
  // internal/dynamic-forms-validation/src/lib/schemas/field/field-with-validation.schema.ts
4777
- var SchemaApplicationTypeSchema = z11.enum(["apply", "applyWhen", "applyWhenValue", "applyEach"]);
4778
- var SchemaApplicationConfigSchema = z11.object({
4902
+ var SchemaApplicationTypeSchema = z12.enum(["apply", "applyWhen", "applyWhenValue", "applyEach"]);
4903
+ var SchemaApplicationConfigSchema = z12.object({
4779
4904
  /**
4780
4905
  * How to apply the schema.
4781
4906
  */
@@ -4784,7 +4909,7 @@ var SchemaApplicationConfigSchema = z11.object({
4784
4909
  * Schema name (reference) or inline schema definition.
4785
4910
  * For JSON configs, this is always a string reference.
4786
4911
  */
4787
- schema: z11.string(),
4912
+ schema: z12.string(),
4788
4913
  /**
4789
4914
  * Condition for 'applyWhen' type.
4790
4915
  */
@@ -4792,34 +4917,34 @@ var SchemaApplicationConfigSchema = z11.object({
4792
4917
  /**
4793
4918
  * Type predicate expression for 'applyWhenValue' type.
4794
4919
  */
4795
- typePredicate: z11.string().optional()
4920
+ typePredicate: z12.string().optional()
4796
4921
  });
4797
- var FieldWithValidationSchema = z11.object({
4922
+ var FieldWithValidationSchema = z12.object({
4798
4923
  // Simple validation rules (ease of use)
4799
4924
  /**
4800
4925
  * Whether the field is required.
4801
4926
  */
4802
- required: z11.boolean().optional(),
4927
+ required: z12.boolean().optional(),
4803
4928
  /**
4804
4929
  * Whether to apply email validation.
4805
4930
  */
4806
- email: z11.boolean().optional(),
4931
+ email: z12.boolean().optional(),
4807
4932
  /**
4808
4933
  * Minimum numeric value.
4809
4934
  */
4810
- min: z11.number().optional(),
4935
+ min: z12.number().optional(),
4811
4936
  /**
4812
4937
  * Maximum numeric value.
4813
4938
  */
4814
- max: z11.number().optional(),
4939
+ max: z12.number().optional(),
4815
4940
  /**
4816
4941
  * Minimum string length.
4817
4942
  */
4818
- minLength: z11.number().optional(),
4943
+ minLength: z12.number().optional(),
4819
4944
  /**
4820
4945
  * Maximum string length.
4821
4946
  */
4822
- maxLength: z11.number().optional(),
4947
+ maxLength: z12.number().optional(),
4823
4948
  /**
4824
4949
  * Regex pattern for validation.
4825
4950
  *
@@ -4835,7 +4960,7 @@ var FieldWithValidationSchema = z11.object({
4835
4960
  * "pattern": "^[a-z]+$"
4836
4961
  * ```
4837
4962
  */
4838
- pattern: z11.string().optional(),
4963
+ pattern: z12.string().optional(),
4839
4964
  // Advanced validation configuration
4840
4965
  /**
4841
4966
  * Array of advanced validator configurations.
@@ -4854,22 +4979,22 @@ var FieldWithValidationSchema = z11.object({
4854
4979
  * Shorthand for simple computed/derived fields.
4855
4980
  * JavaScript expression that computes the field value.
4856
4981
  */
4857
- derivation: z11.string().optional(),
4982
+ derivation: z12.string().optional(),
4858
4983
  // Schema applications
4859
4984
  /**
4860
4985
  * Array of schema applications for reusable validation patterns.
4861
4986
  */
4862
- schemas: z11.array(SchemaApplicationConfigSchema).optional()
4987
+ schemas: z12.array(SchemaApplicationConfigSchema).optional()
4863
4988
  });
4864
4989
 
4865
4990
  // internal/dynamic-forms-validation/src/lib/schemas/field/nullable-value.refinement.ts
4866
- import { z as z12 } from "zod";
4991
+ import { z as z13 } from "zod";
4867
4992
  var nullableValueRefine = (data, ctx) => {
4868
4993
  if (!data || typeof data !== "object") return;
4869
4994
  const field = data;
4870
4995
  if (field.value === null && field.nullable !== true) {
4871
4996
  ctx.addIssue({
4872
- code: z12.ZodIssueCode.custom,
4997
+ code: z13.ZodIssueCode.custom,
4873
4998
  path: ["value"],
4874
4999
  message: "value: null is only allowed when nullable is true. Add `nullable: true` or remove the null value."
4875
5000
  });
@@ -4877,10 +5002,10 @@ var nullableValueRefine = (data, ctx) => {
4877
5002
  };
4878
5003
 
4879
5004
  // internal/dynamic-forms-validation/src/lib/schemas/containers/factories.ts
4880
- import { z as z13 } from "zod";
4881
- var ContainerLogicSchema = z13.object({
4882
- type: z13.literal("hidden"),
4883
- condition: z13.union([ConditionalExpressionSchema, z13.boolean()])
5005
+ import { z as z14 } from "zod";
5006
+ var ContainerLogicSchema = z14.object({
5007
+ type: z14.literal("hidden"),
5008
+ condition: z14.union([ConditionalExpressionSchema, z14.boolean()])
4884
5009
  });
4885
5010
  var SIMPLIFIED_ONLY_PROPS = ["template", "value", "addButton", "removeButton"];
4886
5011
  var SIMPLIFIED_ONLY_HINTS = {
@@ -4891,8 +5016,8 @@ var SIMPLIFIED_ONLY_HINTS = {
4891
5016
  };
4892
5017
  function createContainerSchemas(options) {
4893
5018
  const { leafFieldSchema } = options;
4894
- const AnyFieldSchema = z13.lazy(
4895
- () => z13.discriminatedUnion("type", [
5019
+ const AnyFieldSchema = z14.lazy(
5020
+ () => z14.discriminatedUnion("type", [
4896
5021
  leafFieldSchema,
4897
5022
  PageFieldSchema,
4898
5023
  RowFieldSchema,
@@ -4907,72 +5032,72 @@ function createContainerSchemas(options) {
4907
5032
  }).extend({
4908
5033
  // Explicitly forbid label on container fields
4909
5034
  // This makes Zod reject any value for these properties
4910
- label: z13.never().optional(),
4911
- meta: z13.never().optional()
5035
+ label: z14.never().optional(),
5036
+ meta: z14.never().optional()
4912
5037
  });
4913
5038
  const ContainerValidationShape = {
4914
- required: z13.boolean().optional(),
5039
+ required: z14.boolean().optional(),
4915
5040
  validators: ValidatorsArraySchema.optional(),
4916
5041
  validationMessages: ValidationMessagesSchema.optional()
4917
5042
  };
4918
- const WrapperConfigSchema = z13.object({ type: z13.string() }).passthrough();
5043
+ const WrapperConfigSchema = z14.object({ type: z14.string() }).passthrough();
4919
5044
  const ContainerFieldSchema = ContainerBaseSchema.extend({
4920
- type: z13.literal("container"),
4921
- fields: z13.array(AnyFieldSchema),
4922
- wrappers: z13.array(WrapperConfigSchema),
4923
- logic: z13.array(ContainerLogicSchema).optional()
5045
+ type: z14.literal("container"),
5046
+ fields: z14.array(AnyFieldSchema),
5047
+ wrappers: z14.array(WrapperConfigSchema),
5048
+ logic: z14.array(ContainerLogicSchema).optional()
4924
5049
  });
4925
5050
  const PageFieldSchema = ContainerBaseSchema.extend({
4926
- type: z13.literal("page"),
4927
- fields: z13.array(AnyFieldSchema),
4928
- logic: z13.array(ContainerLogicSchema).optional(),
5051
+ type: z14.literal("page"),
5052
+ fields: z14.array(AnyFieldSchema),
5053
+ logic: z14.array(ContainerLogicSchema).optional(),
4929
5054
  // Also forbid title (common mistake)
4930
- title: z13.never().optional()
5055
+ title: z14.never().optional()
4931
5056
  });
4932
5057
  const RowFieldSchema = ContainerBaseSchema.extend({
4933
- type: z13.literal("row"),
4934
- fields: z13.array(AnyFieldSchema),
5058
+ type: z14.literal("row"),
5059
+ fields: z14.array(AnyFieldSchema),
4935
5060
  // Container logic - only 'hidden' type allowed (same as pages)
4936
- logic: z13.array(ContainerLogicSchema).optional()
5061
+ logic: z14.array(ContainerLogicSchema).optional()
4937
5062
  });
4938
5063
  const GroupFieldSchema = ContainerBaseSchema.extend({
4939
- type: z13.literal("group"),
4940
- fields: z13.array(AnyFieldSchema),
5064
+ type: z14.literal("group"),
5065
+ fields: z14.array(AnyFieldSchema),
4941
5066
  ...ContainerValidationShape,
4942
5067
  // Container logic - only 'hidden' type allowed (same as pages)
4943
- logic: z13.array(ContainerLogicSchema).optional()
5068
+ logic: z14.array(ContainerLogicSchema).optional()
4944
5069
  });
4945
- const ArrayButtonConfigSchema = z13.object({
4946
- label: z13.string().optional(),
4947
- props: z13.record(z13.string(), z13.unknown()).optional()
5070
+ const ArrayButtonConfigSchema = z14.object({
5071
+ label: z14.string().optional(),
5072
+ props: z14.record(z14.string(), z14.unknown()).optional()
4948
5073
  });
4949
- const ArrayAllowedChildSchema = z13.lazy(
5074
+ const ArrayAllowedChildSchema = z14.lazy(
4950
5075
  () => AnyFieldSchema.refine((field) => field.type !== "page" && field.type !== "array", {
4951
5076
  message: "Array templates cannot contain page or array fields. Only leaf fields, rows, and groups are allowed."
4952
5077
  })
4953
5078
  );
4954
5079
  const ArrayFieldSchema = ContainerBaseSchema.extend({
4955
- type: z13.literal("array"),
5080
+ type: z14.literal("array"),
4956
5081
  ...ContainerValidationShape,
4957
5082
  // Full API: explicit item definitions.
4958
- fields: z13.array(AnyFieldSchema).optional(),
5083
+ fields: z14.array(AnyFieldSchema).optional(),
4959
5084
  // Simplified API: single field (primitive array) or array of fields (object array).
4960
5085
  // Only ArrayAllowedChildren (leaf fields, rows, groups) are valid — no pages or nested arrays.
4961
- template: z13.union([ArrayAllowedChildSchema, z13.array(ArrayAllowedChildSchema)]).optional(),
5086
+ template: z14.union([ArrayAllowedChildSchema, z14.array(ArrayAllowedChildSchema)]).optional(),
4962
5087
  // Initial values for the array
4963
- value: z13.array(z13.unknown()).optional(),
5088
+ value: z14.array(z14.unknown()).optional(),
4964
5089
  // Button customization or opt-out (false to disable)
4965
- addButton: z13.union([ArrayButtonConfigSchema, z13.literal(false)]).optional(),
4966
- removeButton: z13.union([ArrayButtonConfigSchema, z13.literal(false)]).optional(),
4967
- logic: z13.array(ContainerLogicSchema).optional(),
5090
+ addButton: z14.union([ArrayButtonConfigSchema, z14.literal(false)]).optional(),
5091
+ removeButton: z14.union([ArrayButtonConfigSchema, z14.literal(false)]).optional(),
5092
+ logic: z14.array(ContainerLogicSchema).optional(),
4968
5093
  // Array length validation
4969
- minLength: z13.number().int().min(0).optional(),
4970
- maxLength: z13.number().int().min(0).optional(),
5094
+ minLength: z14.number().int().min(0).optional(),
5095
+ maxLength: z14.number().int().min(0).optional(),
4971
5096
  // The array size properties are minLength/maxLength. These are the common
4972
5097
  // wrong spelling, and naming them keeps the mistake from being silently
4973
5098
  // stripped. Previously only the simplified API rejected them.
4974
- minItems: z13.never().optional(),
4975
- maxItems: z13.never().optional()
5099
+ minItems: z14.never().optional(),
5100
+ maxItems: z14.never().optional()
4976
5101
  }).superRefine((field, ctx) => {
4977
5102
  const hasFields = field.fields !== void 0;
4978
5103
  const hasTemplate = field.template !== void 0;
@@ -5031,9 +5156,9 @@ function createContainerSchemas(options) {
5031
5156
  }
5032
5157
 
5033
5158
  // internal/dynamic-forms-validation/src/lib/schemas/leaves/text-field.schema.ts
5034
- import { z as z14 } from "zod";
5035
- var TextElementTypeSchema = z14.enum(["p", "h1", "h2", "h3", "h4", "h5", "h6", "span"]);
5036
- var TextPropsSchema = z14.object({
5159
+ import { z as z15 } from "zod";
5160
+ var TextElementTypeSchema = z15.enum(["p", "h1", "h2", "h3", "h4", "h5", "h6", "span"]);
5161
+ var TextPropsSchema = z15.object({
5037
5162
  /**
5038
5163
  * HTML element type to render the text.
5039
5164
  */
@@ -5043,7 +5168,7 @@ var TextFieldSchema = BaseFieldDefSchema.extend({
5043
5168
  /**
5044
5169
  * Field type discriminant.
5045
5170
  */
5046
- type: z14.literal("text"),
5171
+ type: z15.literal("text"),
5047
5172
  /**
5048
5173
  * Text-specific properties.
5049
5174
  */
@@ -5055,9 +5180,9 @@ var TextFieldSchema = BaseFieldDefSchema.extend({
5055
5180
  });
5056
5181
 
5057
5182
  // internal/dynamic-forms-validation/src/lib/schemas/leaves/hidden-field.schema.ts
5058
- import { z as z15 } from "zod";
5059
- var HiddenScalarSchema = z15.union([z15.string(), z15.number(), z15.boolean()]);
5060
- var HiddenValueSchema = z15.union([HiddenScalarSchema, z15.array(HiddenScalarSchema)]);
5183
+ import { z as z16 } from "zod";
5184
+ var HiddenScalarSchema = z16.union([z16.string(), z16.number(), z16.boolean()]);
5185
+ var HiddenValueSchema = z16.union([HiddenScalarSchema, z16.array(HiddenScalarSchema)]);
5061
5186
  var HiddenFieldSchema = BaseFieldDefSchema.omit({
5062
5187
  label: true,
5063
5188
  meta: true,
@@ -5073,7 +5198,7 @@ var HiddenFieldSchema = BaseFieldDefSchema.omit({
5073
5198
  /**
5074
5199
  * Field type discriminant.
5075
5200
  */
5076
- type: z15.literal("hidden"),
5201
+ type: z16.literal("hidden"),
5077
5202
  /**
5078
5203
  * The value to store. Required for hidden fields.
5079
5204
  */
@@ -5081,42 +5206,70 @@ var HiddenFieldSchema = BaseFieldDefSchema.omit({
5081
5206
  });
5082
5207
 
5083
5208
  // internal/dynamic-forms-validation/src/lib/schemas/form/form-options.schema.ts
5084
- import { z as z16 } from "zod";
5085
- var SubmitButtonOptionsSchema = z16.object({
5209
+ import { z as z17 } from "zod";
5210
+ var SubmitButtonOptionsSchema = z17.object({
5086
5211
  /**
5087
5212
  * Whether to disable the submit button when the form is invalid.
5088
5213
  * Defaults to true.
5089
5214
  */
5090
- disableWhenInvalid: z16.boolean().optional(),
5215
+ disableWhenInvalid: z17.boolean().optional(),
5091
5216
  /**
5092
5217
  * Whether to disable the submit button while the form is submitting.
5093
5218
  * Defaults to true.
5094
5219
  */
5095
- disableWhileSubmitting: z16.boolean().optional()
5220
+ disableWhileSubmitting: z17.boolean().optional()
5096
5221
  });
5097
- var NextButtonOptionsSchema = z16.object({
5222
+ var NextButtonOptionsSchema = z17.object({
5098
5223
  /**
5099
5224
  * Whether to disable the next button when the current page is invalid.
5100
5225
  * Defaults to true.
5101
5226
  */
5102
- disableWhenPageInvalid: z16.boolean().optional(),
5227
+ disableWhenPageInvalid: z17.boolean().optional(),
5103
5228
  /**
5104
5229
  * Whether to disable the next button while the form is submitting.
5105
5230
  * Defaults to true.
5106
5231
  */
5107
- disableWhileSubmitting: z16.boolean().optional()
5232
+ disableWhileSubmitting: z17.boolean().optional()
5233
+ });
5234
+ var WebMcpToolOptionsSchema = z17.object({
5235
+ /**
5236
+ * Base name for this form's tools, registered as `fill_{name}` and
5237
+ * `submit_{name}`. Must be unique across every form mounted on the page.
5238
+ *
5239
+ * The registered name has to satisfy the WebMCP draft's own rule — 1-128
5240
+ * characters of `A-Z`, `a-z`, `0-9`, `_`, `-` or `.` — and `registerTool()`
5241
+ * rejects anything else, so the same rule is enforced here (minus the room the
5242
+ * `fill_` / `submit_` prefix takes).
5243
+ *
5244
+ * @see https://webmachinelearning.github.io/webmcp/
5245
+ */
5246
+ name: z17.string().min(1).max(121).regex(/^[A-Za-z0-9_.-]+$/, 'Only A-Z, a-z, 0-9, "_", "-" and "." are allowed in a WebMCP tool name'),
5247
+ /**
5248
+ * What this form is for, and when an agent should reach for it.
5249
+ */
5250
+ description: z17.string().min(1),
5251
+ /**
5252
+ * Whether an agent may submit this form directly. Off by default; without it
5253
+ * the agent can fill the form but a human presses the button.
5254
+ */
5255
+ allowSubmit: z17.boolean().optional(),
5256
+ /**
5257
+ * How much of the form a tool response hands back. `'changed'` (the default)
5258
+ * returns only what the call set; `'all'` returns the whole readable model.
5259
+ */
5260
+ readback: z17.enum(["changed", "all"]).optional()
5108
5261
  });
5109
- var FormOptionsSchema = z16.object({
5262
+ var FormOptionsSchema = z17.object({
5110
5263
  /**
5111
5264
  * Whether the entire form is disabled.
5112
5265
  */
5113
- disabled: z16.boolean().optional(),
5266
+ disabled: z17.boolean().optional(),
5114
5267
  /**
5115
5268
  * Maximum number of derivation iterations before stopping.
5116
5269
  * Prevents infinite loops in circular derivations.
5117
5270
  * Defaults to 10.
5118
5271
  */
5119
- maxDerivationIterations: z16.number().positive().optional(),
5272
+ maxDerivationIterations: z17.number().positive().optional(),
5120
5273
  /**
5121
5274
  * Options for the submit button behavior.
5122
5275
  */
@@ -5129,42 +5282,47 @@ var FormOptionsSchema = z16.object({
5129
5282
  * Whether to exclude values of hidden fields from submission output.
5130
5283
  * Overrides the global withValueExclusionDefaults() setting for this form.
5131
5284
  */
5132
- excludeValueIfHidden: z16.boolean().optional(),
5285
+ excludeValueIfHidden: z17.boolean().optional(),
5133
5286
  /**
5134
5287
  * Whether to exclude values of disabled fields from submission output.
5135
5288
  * Overrides the global withValueExclusionDefaults() setting for this form.
5136
5289
  */
5137
- excludeValueIfDisabled: z16.boolean().optional(),
5290
+ excludeValueIfDisabled: z17.boolean().optional(),
5138
5291
  /**
5139
5292
  * Whether to exclude values of readonly fields from submission output.
5140
5293
  * Overrides the global withValueExclusionDefaults() setting for this form.
5141
5294
  */
5142
- excludeValueIfReadonly: z16.boolean().optional(),
5295
+ excludeValueIfReadonly: z17.boolean().optional(),
5143
5296
  /**
5144
5297
  * Whether to run validation while a field is hidden.
5145
5298
  * Acts as the root inherited value for the form. Per-field
5146
5299
  * validateWhenHidden overrides cascade through the field tree.
5147
5300
  */
5148
- validateWhenHidden: z16.boolean().optional()
5301
+ validateWhenHidden: z17.boolean().optional(),
5302
+ /**
5303
+ * Exposes this form to browser AI agents as WebMCP tools (experimental).
5304
+ * Requires the `withExperimentalWebMcp()` feature on `provideDynamicForm(...)`.
5305
+ */
5306
+ webMcp: WebMcpToolOptionsSchema.optional()
5149
5307
  });
5150
5308
 
5151
5309
  // internal/dynamic-forms-validation/src/lib/schemas/form/schema-definition.schema.ts
5152
- import { z as z17 } from "zod";
5153
- var SchemaDefinitionSchema = z17.object({
5310
+ import { z as z18 } from "zod";
5311
+ var SchemaDefinitionSchema = z18.object({
5154
5312
  /**
5155
5313
  * Unique identifier for the schema.
5156
5314
  * Used to reference the schema in SchemaApplicationConfig.
5157
5315
  */
5158
- name: z17.string(),
5316
+ name: z18.string(),
5159
5317
  /**
5160
5318
  * Human-readable description of what this schema validates.
5161
5319
  */
5162
- description: z17.string().optional(),
5320
+ description: z18.string().optional(),
5163
5321
  /**
5164
5322
  * Field path pattern for automatic schema application.
5165
5323
  * Supports glob-like patterns.
5166
5324
  */
5167
- pathPattern: z17.string().optional(),
5325
+ pathPattern: z18.string().optional(),
5168
5326
  /**
5169
5327
  * Validators to apply to fields using this schema.
5170
5328
  */
@@ -5176,18 +5334,18 @@ var SchemaDefinitionSchema = z17.object({
5176
5334
  /**
5177
5335
  * Nested schema applications for composing schemas.
5178
5336
  */
5179
- subSchemas: z17.array(SchemaApplicationConfigSchema).optional()
5337
+ subSchemas: z18.array(SchemaApplicationConfigSchema).optional()
5180
5338
  });
5181
- var SchemaDefinitionsArraySchema = z17.array(SchemaDefinitionSchema);
5339
+ var SchemaDefinitionsArraySchema = z18.array(SchemaDefinitionSchema);
5182
5340
 
5183
5341
  // internal/dynamic-forms-validation/src/lib/schemas/form/form-config.schema.ts
5184
- import { z as z18 } from "zod";
5342
+ import { z as z19 } from "zod";
5185
5343
  function createFormConfigSchema(fieldSchema, propsSchema) {
5186
- const baseSchema = z18.object({
5344
+ const baseSchema = z19.object({
5187
5345
  /**
5188
5346
  * Array of field definitions that make up the form.
5189
5347
  */
5190
- fields: z18.array(fieldSchema),
5348
+ fields: z19.array(fieldSchema),
5191
5349
  /**
5192
5350
  * Form-level options controlling behavior.
5193
5351
  */
@@ -5227,23 +5385,23 @@ function createFormConfigSchema(fieldSchema, propsSchema) {
5227
5385
  }
5228
5386
  return baseSchema;
5229
5387
  }
5230
- var BaseFormConfigSchema = z18.object({
5231
- fields: z18.array(z18.any()),
5388
+ var BaseFormConfigSchema = z19.object({
5389
+ fields: z19.array(z19.any()),
5232
5390
  options: FormOptionsSchema.optional(),
5233
5391
  schemas: SchemaDefinitionsArraySchema.optional(),
5234
5392
  defaultValidationMessages: ValidationMessagesSchema.optional()
5235
5393
  });
5236
5394
 
5237
5395
  // internal/dynamic-forms-validation/validate/src/json-schema/form-config-json-schema.ts
5238
- import { z as z55 } from "zod";
5396
+ import { z as z57 } from "zod";
5239
5397
 
5240
5398
  // internal/dynamic-forms-validation/material/src/props/mat-common-props.schema.ts
5241
- import { z as z19 } from "zod";
5242
- var MatFormFieldAppearanceSchema = z19.enum(["fill", "outline"]);
5243
- var SubscriptSizingSchema = z19.enum(["fixed", "dynamic"]);
5244
- var ThemePaletteSchema = z19.enum(["primary", "accent", "warn"]);
5245
- var LabelPositionSchema = z19.enum(["before", "after"]);
5246
- var MatFormFieldPropsSchema = z19.object({
5399
+ import { z as z20 } from "zod";
5400
+ var MatFormFieldAppearanceSchema = z20.enum(["fill", "outline"]);
5401
+ var SubscriptSizingSchema = z20.enum(["fixed", "dynamic"]);
5402
+ var ThemePaletteSchema = z20.enum(["primary", "accent", "warn"]);
5403
+ var LabelPositionSchema = z20.enum(["before", "after"]);
5404
+ var MatFormFieldPropsSchema = z20.object({
5247
5405
  /**
5248
5406
  * Form field appearance style.
5249
5407
  */
@@ -5257,13 +5415,13 @@ var MatFormFieldPropsSchema = z19.object({
5257
5415
  */
5258
5416
  hint: DynamicTextSchema.optional()
5259
5417
  });
5260
- var RipplePropsSchema = z19.object({
5418
+ var RipplePropsSchema = z20.object({
5261
5419
  /**
5262
5420
  * Whether to disable the ripple effect.
5263
5421
  */
5264
- disableRipple: z19.boolean().optional()
5422
+ disableRipple: z20.boolean().optional()
5265
5423
  });
5266
- var ColorPropsSchema = z19.object({
5424
+ var ColorPropsSchema = z20.object({
5267
5425
  /**
5268
5426
  * Material theme color.
5269
5427
  */
@@ -5271,9 +5429,9 @@ var ColorPropsSchema = z19.object({
5271
5429
  });
5272
5430
 
5273
5431
  // internal/dynamic-forms-validation/material/src/props/mat-input-props.schema.ts
5274
- import { z as z20 } from "zod";
5275
- var MatInputTypeSchema = z20.enum(["text", "email", "password", "number", "tel", "url", "search"]);
5276
- var MatInputPropsSchema = z20.object({
5432
+ import { z as z21 } from "zod";
5433
+ var MatInputTypeSchema = z21.enum(["text", "email", "password", "number", "tel", "url", "search"]);
5434
+ var MatInputPropsSchema = z21.object({
5277
5435
  /**
5278
5436
  * HTML input type.
5279
5437
  */
@@ -5289,7 +5447,7 @@ var MatInputPropsSchema = z20.object({
5289
5447
  /**
5290
5448
  * Whether to disable the ripple effect.
5291
5449
  */
5292
- disableRipple: z20.boolean().optional(),
5450
+ disableRipple: z21.boolean().optional(),
5293
5451
  /**
5294
5452
  * How to size the subscript (hint/error area).
5295
5453
  */
@@ -5301,9 +5459,9 @@ var MatInputPropsSchema = z20.object({
5301
5459
  });
5302
5460
 
5303
5461
  // internal/dynamic-forms-validation/material/src/props/mat-textarea-props.schema.ts
5304
- import { z as z21 } from "zod";
5305
- var TextareaResizeSchema = z21.enum(["none", "both", "horizontal", "vertical"]);
5306
- var MatTextareaPropsSchema = z21.object({
5462
+ import { z as z22 } from "zod";
5463
+ var TextareaResizeSchema = z22.enum(["none", "both", "horizontal", "vertical"]);
5464
+ var MatTextareaPropsSchema = z22.object({
5307
5465
  /**
5308
5466
  * Placeholder text for the textarea.
5309
5467
  */
@@ -5311,11 +5469,11 @@ var MatTextareaPropsSchema = z21.object({
5311
5469
  /**
5312
5470
  * Number of visible text rows.
5313
5471
  */
5314
- rows: z21.number().positive().optional(),
5472
+ rows: z22.number().positive().optional(),
5315
5473
  /**
5316
5474
  * Number of visible text columns.
5317
5475
  */
5318
- cols: z21.number().positive().optional(),
5476
+ cols: z22.number().positive().optional(),
5319
5477
  /**
5320
5478
  * Form field appearance style.
5321
5479
  */
@@ -5335,12 +5493,12 @@ var MatTextareaPropsSchema = z21.object({
5335
5493
  /**
5336
5494
  * Maximum character length.
5337
5495
  */
5338
- maxLength: z21.number().positive().optional()
5496
+ maxLength: z22.number().positive().optional()
5339
5497
  });
5340
5498
 
5341
5499
  // internal/dynamic-forms-validation/material/src/props/mat-select-props.schema.ts
5342
- import { z as z22 } from "zod";
5343
- var MatSelectPropsSchema = z22.object({
5500
+ import { z as z23 } from "zod";
5501
+ var MatSelectPropsSchema = z23.object({
5344
5502
  /**
5345
5503
  * Placeholder text for the select.
5346
5504
  */
@@ -5352,11 +5510,11 @@ var MatSelectPropsSchema = z22.object({
5352
5510
  /**
5353
5511
  * Whether to allow multiple selections.
5354
5512
  */
5355
- multiple: z22.boolean().optional(),
5513
+ multiple: z23.boolean().optional(),
5356
5514
  /**
5357
5515
  * Maximum height of the select panel (CSS value).
5358
5516
  */
5359
- panelMaxHeight: z22.string().optional(),
5517
+ panelMaxHeight: z23.string().optional(),
5360
5518
  /**
5361
5519
  * How to size the subscript (hint/error area).
5362
5520
  */
@@ -5372,8 +5530,8 @@ var MatSelectPropsSchema = z22.object({
5372
5530
  });
5373
5531
 
5374
5532
  // internal/dynamic-forms-validation/material/src/props/mat-checkbox-props.schema.ts
5375
- import { z as z23 } from "zod";
5376
- var MatCheckboxPropsSchema = z23.object({
5533
+ import { z as z24 } from "zod";
5534
+ var MatCheckboxPropsSchema = z24.object({
5377
5535
  /**
5378
5536
  * Material theme color.
5379
5537
  */
@@ -5381,7 +5539,7 @@ var MatCheckboxPropsSchema = z23.object({
5381
5539
  /**
5382
5540
  * Whether to disable the ripple effect.
5383
5541
  */
5384
- disableRipple: z23.boolean().optional(),
5542
+ disableRipple: z24.boolean().optional(),
5385
5543
  /**
5386
5544
  * Position of the label relative to the checkbox.
5387
5545
  */
@@ -5393,12 +5551,12 @@ var MatCheckboxPropsSchema = z23.object({
5393
5551
  /**
5394
5552
  * Whether the checkbox is in indeterminate state.
5395
5553
  */
5396
- indeterminate: z23.boolean().optional()
5554
+ indeterminate: z24.boolean().optional()
5397
5555
  });
5398
5556
 
5399
5557
  // internal/dynamic-forms-validation/material/src/props/mat-radio-props.schema.ts
5400
- import { z as z24 } from "zod";
5401
- var MatRadioPropsSchema = z24.object({
5558
+ import { z as z25 } from "zod";
5559
+ var MatRadioPropsSchema = z25.object({
5402
5560
  /**
5403
5561
  * Material theme color.
5404
5562
  */
@@ -5406,7 +5564,7 @@ var MatRadioPropsSchema = z24.object({
5406
5564
  /**
5407
5565
  * Whether to disable the ripple effect.
5408
5566
  */
5409
- disableRipple: z24.boolean().optional(),
5567
+ disableRipple: z25.boolean().optional(),
5410
5568
  /**
5411
5569
  * Position of the label relative to the radio button.
5412
5570
  */
@@ -5418,8 +5576,8 @@ var MatRadioPropsSchema = z24.object({
5418
5576
  });
5419
5577
 
5420
5578
  // internal/dynamic-forms-validation/material/src/props/mat-multi-checkbox-props.schema.ts
5421
- import { z as z25 } from "zod";
5422
- var MatMultiCheckboxPropsSchema = z25.object({
5579
+ import { z as z26 } from "zod";
5580
+ var MatMultiCheckboxPropsSchema = z26.object({
5423
5581
  /**
5424
5582
  * Material theme color.
5425
5583
  */
@@ -5427,11 +5585,11 @@ var MatMultiCheckboxPropsSchema = z25.object({
5427
5585
  /**
5428
5586
  * Whether to disable the ripple effect.
5429
5587
  */
5430
- disableRipple: z25.boolean().optional(),
5588
+ disableRipple: z26.boolean().optional(),
5431
5589
  /**
5432
5590
  * Tab index for keyboard navigation.
5433
5591
  */
5434
- tabIndex: z25.number().optional(),
5592
+ tabIndex: z26.number().optional(),
5435
5593
  /**
5436
5594
  * Position of the labels relative to the checkboxes.
5437
5595
  */
@@ -5443,8 +5601,8 @@ var MatMultiCheckboxPropsSchema = z25.object({
5443
5601
  });
5444
5602
 
5445
5603
  // internal/dynamic-forms-validation/material/src/props/mat-toggle-props.schema.ts
5446
- import { z as z26 } from "zod";
5447
- var MatTogglePropsSchema = z26.object({
5604
+ import { z as z27 } from "zod";
5605
+ var MatTogglePropsSchema = z27.object({
5448
5606
  /**
5449
5607
  * Material theme color.
5450
5608
  */
@@ -5452,7 +5610,7 @@ var MatTogglePropsSchema = z26.object({
5452
5610
  /**
5453
5611
  * Whether to disable the ripple effect.
5454
5612
  */
5455
- disableRipple: z26.boolean().optional(),
5613
+ disableRipple: z27.boolean().optional(),
5456
5614
  /**
5457
5615
  * Position of the label relative to the toggle.
5458
5616
  */
@@ -5468,12 +5626,12 @@ var MatTogglePropsSchema = z26.object({
5468
5626
  /**
5469
5627
  * Whether to hide the icon inside the toggle.
5470
5628
  */
5471
- hideIcon: z26.boolean().optional()
5629
+ hideIcon: z27.boolean().optional()
5472
5630
  });
5473
5631
 
5474
5632
  // internal/dynamic-forms-validation/material/src/props/mat-slider-props.schema.ts
5475
- import { z as z27 } from "zod";
5476
- var MatSliderPropsSchema = z27.object({
5633
+ import { z as z28 } from "zod";
5634
+ var MatSliderPropsSchema = z28.object({
5477
5635
  /**
5478
5636
  * Material theme color.
5479
5637
  */
@@ -5490,25 +5648,25 @@ var MatSliderPropsSchema = z27.object({
5490
5648
  * Whether to display the thumb label.
5491
5649
  * @deprecated Use showThumbLabel instead
5492
5650
  */
5493
- thumbLabel: z27.boolean().optional(),
5651
+ thumbLabel: z28.boolean().optional(),
5494
5652
  /**
5495
5653
  * Whether to show the thumb label with the current value.
5496
5654
  */
5497
- showThumbLabel: z27.boolean().optional(),
5655
+ showThumbLabel: z28.boolean().optional(),
5498
5656
  /**
5499
5657
  * Interval for tick marks. 'auto' spaces them automatically.
5500
5658
  */
5501
- tickInterval: z27.union([z27.number().positive(), z27.literal("auto")]).optional(),
5659
+ tickInterval: z28.union([z28.number().positive(), z28.literal("auto")]).optional(),
5502
5660
  /**
5503
5661
  * Step increment for the slider.
5504
5662
  */
5505
- step: z27.number().positive().optional()
5663
+ step: z28.number().positive().optional()
5506
5664
  });
5507
5665
 
5508
5666
  // internal/dynamic-forms-validation/material/src/props/mat-datepicker-props.schema.ts
5509
- import { z as z28 } from "zod";
5510
- var DatepickerStartViewSchema = z28.enum(["month", "year", "multi-year"]);
5511
- var MatDatepickerPropsSchema = z28.object({
5667
+ import { z as z29 } from "zod";
5668
+ var DatepickerStartViewSchema = z29.enum(["month", "year", "multi-year"]);
5669
+ var MatDatepickerPropsSchema = z29.object({
5512
5670
  /**
5513
5671
  * Placeholder text for the datepicker input.
5514
5672
  */
@@ -5524,7 +5682,7 @@ var MatDatepickerPropsSchema = z28.object({
5524
5682
  /**
5525
5683
  * Whether to disable the ripple effect.
5526
5684
  */
5527
- disableRipple: z28.boolean().optional(),
5685
+ disableRipple: z29.boolean().optional(),
5528
5686
  /**
5529
5687
  * How to size the subscript (hint/error area).
5530
5688
  */
@@ -5536,7 +5694,7 @@ var MatDatepickerPropsSchema = z28.object({
5536
5694
  /**
5537
5695
  * Whether to use touch-friendly UI mode.
5538
5696
  */
5539
- touchUi: z28.boolean().optional(),
5697
+ touchUi: z29.boolean().optional(),
5540
5698
  /**
5541
5699
  * Hint text displayed below the field.
5542
5700
  */
@@ -5544,9 +5702,9 @@ var MatDatepickerPropsSchema = z28.object({
5544
5702
  });
5545
5703
 
5546
5704
  // internal/dynamic-forms-validation/material/src/props/mat-button-props.schema.ts
5547
- import { z as z29 } from "zod";
5548
- var ButtonTypeSchema = z29.enum(["button", "submit", "reset"]);
5549
- var MatButtonPropsSchema = z29.object({
5705
+ import { z as z30 } from "zod";
5706
+ var ButtonTypeSchema = z30.enum(["button", "submit", "reset"]);
5707
+ var MatButtonPropsSchema = z30.object({
5550
5708
  /**
5551
5709
  * Material theme color.
5552
5710
  */
@@ -5558,17 +5716,17 @@ var MatButtonPropsSchema = z29.object({
5558
5716
  });
5559
5717
 
5560
5718
  // internal/dynamic-forms-validation/material/src/fields/mat-input-field.schema.ts
5561
- import { z as z30 } from "zod";
5719
+ import { z as z31 } from "zod";
5562
5720
  var MatInputFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5563
5721
  /**
5564
5722
  * Field type discriminant.
5565
5723
  */
5566
- type: z30.literal("input"),
5567
- nullable: z30.boolean().optional(),
5724
+ type: z31.literal("input"),
5725
+ nullable: z31.boolean().optional(),
5568
5726
  /**
5569
5727
  * Initial value for the input.
5570
5728
  */
5571
- value: z30.string().nullable().optional(),
5729
+ value: z31.string().nullable().optional(),
5572
5730
  /**
5573
5731
  * Placeholder text (can also be in props).
5574
5732
  */
@@ -5581,17 +5739,17 @@ var MatInputFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSche
5581
5739
  var MatInputFieldSchema = MatInputFieldSchemaObject.superRefine(nullableValueRefine);
5582
5740
 
5583
5741
  // internal/dynamic-forms-validation/material/src/fields/mat-textarea-field.schema.ts
5584
- import { z as z31 } from "zod";
5742
+ import { z as z32 } from "zod";
5585
5743
  var MatTextareaFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5586
5744
  /**
5587
5745
  * Field type discriminant.
5588
5746
  */
5589
- type: z31.literal("textarea"),
5590
- nullable: z31.boolean().optional(),
5747
+ type: z32.literal("textarea"),
5748
+ nullable: z32.boolean().optional(),
5591
5749
  /**
5592
5750
  * Initial value for the textarea.
5593
5751
  */
5594
- value: z31.string().nullable().optional(),
5752
+ value: z32.string().nullable().optional(),
5595
5753
  /**
5596
5754
  * Placeholder text (can also be in props).
5597
5755
  */
@@ -5604,18 +5762,18 @@ var MatTextareaFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationS
5604
5762
  var MatTextareaFieldSchema = MatTextareaFieldSchemaObject.superRefine(nullableValueRefine);
5605
5763
 
5606
5764
  // internal/dynamic-forms-validation/material/src/fields/mat-select-field.schema.ts
5607
- import { z as z32 } from "zod";
5765
+ import { z as z33 } from "zod";
5608
5766
  var MatSelectFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5609
5767
  /**
5610
5768
  * Field type discriminant.
5611
5769
  */
5612
- type: z32.literal("select"),
5613
- nullable: z32.boolean().optional(),
5770
+ type: z33.literal("select"),
5771
+ nullable: z33.boolean().optional(),
5614
5772
  /**
5615
5773
  * Initial value for the select.
5616
5774
  * Can be single value or array if multiple is enabled.
5617
5775
  */
5618
- value: z32.unknown().nullable().optional(),
5776
+ value: z33.unknown().nullable().optional(),
5619
5777
  /**
5620
5778
  * Placeholder text (can also be in props).
5621
5779
  */
@@ -5632,16 +5790,16 @@ var MatSelectFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSch
5632
5790
  var MatSelectFieldSchema = MatSelectFieldSchemaObject.superRefine(nullableValueRefine);
5633
5791
 
5634
5792
  // internal/dynamic-forms-validation/material/src/fields/mat-checkbox-field.schema.ts
5635
- import { z as z33 } from "zod";
5793
+ import { z as z34 } from "zod";
5636
5794
  var MatCheckboxFieldSchema = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5637
5795
  /**
5638
5796
  * Field type discriminant.
5639
5797
  */
5640
- type: z33.literal("checkbox"),
5798
+ type: z34.literal("checkbox"),
5641
5799
  /**
5642
5800
  * Initial checked state.
5643
5801
  */
5644
- value: z33.boolean().optional(),
5802
+ value: z34.boolean().optional(),
5645
5803
  /**
5646
5804
  * Placeholder/helper text.
5647
5805
  */
@@ -5653,17 +5811,17 @@ var MatCheckboxFieldSchema = BaseFieldDefSchema.merge(FieldWithValidationSchema)
5653
5811
  });
5654
5812
 
5655
5813
  // internal/dynamic-forms-validation/material/src/fields/mat-radio-field.schema.ts
5656
- import { z as z34 } from "zod";
5814
+ import { z as z35 } from "zod";
5657
5815
  var MatRadioFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5658
5816
  /**
5659
5817
  * Field type discriminant.
5660
5818
  */
5661
- type: z34.literal("radio"),
5662
- nullable: z34.boolean().optional(),
5819
+ type: z35.literal("radio"),
5820
+ nullable: z35.boolean().optional(),
5663
5821
  /**
5664
5822
  * Initial selected value.
5665
5823
  */
5666
- value: z34.unknown().nullable().optional(),
5824
+ value: z35.unknown().nullable().optional(),
5667
5825
  /**
5668
5826
  * Placeholder/helper text.
5669
5827
  */
@@ -5680,17 +5838,17 @@ var MatRadioFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSche
5680
5838
  var MatRadioFieldSchema = MatRadioFieldSchemaObject.superRefine(nullableValueRefine);
5681
5839
 
5682
5840
  // internal/dynamic-forms-validation/material/src/fields/mat-multi-checkbox-field.schema.ts
5683
- import { z as z35 } from "zod";
5841
+ import { z as z36 } from "zod";
5684
5842
  var MatMultiCheckboxFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5685
5843
  /**
5686
5844
  * Field type discriminant.
5687
5845
  */
5688
- type: z35.literal("multi-checkbox"),
5689
- nullable: z35.boolean().optional(),
5846
+ type: z36.literal("multi-checkbox"),
5847
+ nullable: z36.boolean().optional(),
5690
5848
  /**
5691
5849
  * Initial selected values (array).
5692
5850
  */
5693
- value: z35.array(z35.unknown()).nullable().optional(),
5851
+ value: z36.array(z36.unknown()).nullable().optional(),
5694
5852
  /**
5695
5853
  * Placeholder/helper text.
5696
5854
  */
@@ -5707,16 +5865,16 @@ var MatMultiCheckboxFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValida
5707
5865
  var MatMultiCheckboxFieldSchema = MatMultiCheckboxFieldSchemaObject.superRefine(nullableValueRefine);
5708
5866
 
5709
5867
  // internal/dynamic-forms-validation/material/src/fields/mat-toggle-field.schema.ts
5710
- import { z as z36 } from "zod";
5868
+ import { z as z37 } from "zod";
5711
5869
  var MatToggleFieldSchema = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5712
5870
  /**
5713
5871
  * Field type discriminant.
5714
5872
  */
5715
- type: z36.literal("toggle"),
5873
+ type: z37.literal("toggle"),
5716
5874
  /**
5717
5875
  * Initial toggle state.
5718
5876
  */
5719
- value: z36.boolean().optional(),
5877
+ value: z37.boolean().optional(),
5720
5878
  /**
5721
5879
  * Placeholder/helper text.
5722
5880
  */
@@ -5728,29 +5886,29 @@ var MatToggleFieldSchema = BaseFieldDefSchema.merge(FieldWithValidationSchema).e
5728
5886
  });
5729
5887
 
5730
5888
  // internal/dynamic-forms-validation/material/src/fields/mat-slider-field.schema.ts
5731
- import { z as z37 } from "zod";
5889
+ import { z as z38 } from "zod";
5732
5890
  var MatSliderFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5733
5891
  /**
5734
5892
  * Field type discriminant.
5735
5893
  */
5736
- type: z37.literal("slider"),
5737
- nullable: z37.boolean().optional(),
5894
+ type: z38.literal("slider"),
5895
+ nullable: z38.boolean().optional(),
5738
5896
  /**
5739
5897
  * Initial slider value.
5740
5898
  */
5741
- value: z37.number().nullable().optional(),
5899
+ value: z38.number().nullable().optional(),
5742
5900
  /**
5743
5901
  * Minimum slider value.
5744
5902
  */
5745
- minValue: z37.number().optional(),
5903
+ minValue: z38.number().optional(),
5746
5904
  /**
5747
5905
  * Maximum slider value.
5748
5906
  */
5749
- maxValue: z37.number().optional(),
5907
+ maxValue: z38.number().optional(),
5750
5908
  /**
5751
5909
  * Step increment.
5752
5910
  */
5753
- step: z37.number().positive().optional(),
5911
+ step: z38.number().positive().optional(),
5754
5912
  /**
5755
5913
  * Placeholder/helper text.
5756
5914
  */
@@ -5763,14 +5921,14 @@ var MatSliderFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSch
5763
5921
  var MatSliderFieldSchema = MatSliderFieldSchemaObject.superRefine(nullableValueRefine);
5764
5922
 
5765
5923
  // internal/dynamic-forms-validation/material/src/fields/mat-datepicker-field.schema.ts
5766
- import { z as z38 } from "zod";
5767
- var DateValueSchema = z38.union([z38.string(), z38.null()]);
5924
+ import { z as z39 } from "zod";
5925
+ var DateValueSchema = z39.union([z39.string(), z39.null()]);
5768
5926
  var MatDatepickerFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5769
5927
  /**
5770
5928
  * Field type discriminant.
5771
5929
  */
5772
- type: z38.literal("datepicker"),
5773
- nullable: z38.boolean().optional(),
5930
+ type: z39.literal("datepicker"),
5931
+ nullable: z39.boolean().optional(),
5774
5932
  /**
5775
5933
  * Initial date value (ISO string in JSON configs).
5776
5934
  */
@@ -5799,22 +5957,29 @@ var MatDatepickerFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidatio
5799
5957
  var MatDatepickerFieldSchema = MatDatepickerFieldSchemaObject.superRefine(nullableValueRefine);
5800
5958
 
5801
5959
  // internal/dynamic-forms-validation/material/src/fields/mat-button-field.schema.ts
5802
- import { z as z39 } from "zod";
5803
- var EventArgSchema = z39.union([z39.string(), z39.number(), z39.boolean(), z39.null(), z39.undefined()]);
5960
+ import { z as z41 } from "zod";
5961
+
5962
+ // internal/dynamic-forms-validation/src/lib/schemas/field/array-item-template.schema.ts
5963
+ import { z as z40 } from "zod";
5964
+ var FieldLikeSchema = z40.object({ type: z40.string() }).passthrough();
5965
+ var ArrayItemTemplateSchema = z40.union([FieldLikeSchema, z40.array(FieldLikeSchema)]);
5966
+
5967
+ // internal/dynamic-forms-validation/material/src/fields/mat-button-field.schema.ts
5968
+ var EventArgSchema = z41.union([z41.string(), z41.number(), z41.boolean(), z41.null(), z41.undefined()]);
5804
5969
  var MatButtonFieldSchema = BaseFieldDefSchema.extend({
5805
5970
  /**
5806
5971
  * Field type discriminant.
5807
5972
  */
5808
- type: z39.literal("button"),
5973
+ type: z41.literal("button"),
5809
5974
  /**
5810
5975
  * Event type name (string reference to registered event).
5811
5976
  * Note: Full event configuration requires runtime setup.
5812
5977
  */
5813
- event: z39.string().optional(),
5978
+ event: z41.string().optional(),
5814
5979
  /**
5815
5980
  * Arguments passed to the event constructor.
5816
5981
  */
5817
- eventArgs: z39.array(EventArgSchema).optional(),
5982
+ eventArgs: z41.array(EventArgSchema).optional(),
5818
5983
  /**
5819
5984
  * Material-specific button properties.
5820
5985
  */
@@ -5825,79 +5990,94 @@ var MatButtonFieldSchema = BaseFieldDefSchema.extend({
5825
5990
  logic: LogicArraySchema.optional()
5826
5991
  });
5827
5992
  var MatSubmitButtonFieldSchema = BaseFieldDefSchema.extend({
5828
- type: z39.literal("submit"),
5993
+ type: z41.literal("submit"),
5829
5994
  props: MatButtonPropsSchema.optional(),
5830
5995
  logic: LogicArraySchema.optional()
5831
5996
  });
5832
5997
  var MatNextButtonFieldSchema = BaseFieldDefSchema.extend({
5833
- type: z39.literal("next"),
5998
+ type: z41.literal("next"),
5834
5999
  props: MatButtonPropsSchema.optional(),
5835
6000
  logic: LogicArraySchema.optional()
5836
6001
  });
5837
6002
  var MatPreviousButtonFieldSchema = BaseFieldDefSchema.extend({
5838
- type: z39.literal("previous"),
6003
+ type: z41.literal("previous"),
5839
6004
  props: MatButtonPropsSchema.optional()
5840
6005
  });
5841
6006
  var MatAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5842
- type: z39.literal("add-array-item"),
6007
+ /**
6008
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6009
+ * item, or a list of them for an object item.
6010
+ */
6011
+ template: ArrayItemTemplateSchema,
6012
+ type: z41.literal("add-array-item"),
5843
6013
  /**
5844
6014
  * Key of the array field to add items to.
5845
6015
  * If omitted, uses the parent array context.
5846
6016
  */
5847
- arrayKey: z39.string().optional(),
6017
+ arrayKey: z41.string().optional(),
5848
6018
  props: MatButtonPropsSchema.optional()
5849
6019
  });
5850
6020
  var MatRemoveArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5851
- type: z39.literal("remove-array-item"),
6021
+ type: z41.literal("remove-array-item"),
5852
6022
  /**
5853
6023
  * Key of the array field to remove items from.
5854
6024
  * If omitted, uses the parent array context.
5855
6025
  */
5856
- arrayKey: z39.string().optional(),
6026
+ arrayKey: z41.string().optional(),
5857
6027
  props: MatButtonPropsSchema.optional()
5858
6028
  });
5859
6029
  var MatPrependArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5860
- type: z39.literal("prepend-array-item"),
6030
+ /**
6031
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6032
+ * item, or a list of them for an object item.
6033
+ */
6034
+ template: ArrayItemTemplateSchema,
6035
+ type: z41.literal("prepend-array-item"),
5861
6036
  /**
5862
6037
  * Key of the array field to prepend items to.
5863
6038
  * If omitted, uses the parent array context.
5864
6039
  */
5865
- arrayKey: z39.string().optional(),
6040
+ arrayKey: z41.string().optional(),
5866
6041
  props: MatButtonPropsSchema.optional()
5867
6042
  });
5868
6043
  var MatInsertArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5869
- type: z39.literal("insert-array-item"),
6044
+ /**
6045
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6046
+ * item, or a list of them for an object item.
6047
+ */
6048
+ template: ArrayItemTemplateSchema,
6049
+ type: z41.literal("insert-array-item"),
5870
6050
  /**
5871
6051
  * Key of the array field to insert items into.
5872
6052
  * If omitted, uses the parent array context.
5873
6053
  */
5874
- arrayKey: z39.string().optional(),
6054
+ arrayKey: z41.string().optional(),
5875
6055
  /**
5876
6056
  * Index at which to insert the new item.
5877
6057
  */
5878
- index: z39.number(),
6058
+ index: z41.number(),
5879
6059
  props: MatButtonPropsSchema.optional()
5880
6060
  });
5881
6061
  var MatPopArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5882
- type: z39.literal("pop-array-item"),
6062
+ type: z41.literal("pop-array-item"),
5883
6063
  /**
5884
6064
  * Key of the array field to pop items from.
5885
6065
  */
5886
- arrayKey: z39.string(),
6066
+ arrayKey: z41.string(),
5887
6067
  props: MatButtonPropsSchema.optional()
5888
6068
  });
5889
6069
  var MatShiftArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5890
- type: z39.literal("shift-array-item"),
6070
+ type: z41.literal("shift-array-item"),
5891
6071
  /**
5892
6072
  * Key of the array field to shift items from.
5893
6073
  */
5894
- arrayKey: z39.string(),
6074
+ arrayKey: z41.string(),
5895
6075
  props: MatButtonPropsSchema.optional()
5896
6076
  });
5897
6077
 
5898
6078
  // internal/dynamic-forms-validation/material/src/mat-leaf-field.schema.ts
5899
- import { z as z40 } from "zod";
5900
- var MatLeafFieldSchema = z40.discriminatedUnion("type", [
6079
+ import { z as z42 } from "zod";
6080
+ var MatLeafFieldSchema = z42.discriminatedUnion("type", [
5901
6081
  // Default fields
5902
6082
  TextFieldSchema,
5903
6083
  HiddenFieldSchema,
@@ -5935,8 +6115,8 @@ var MatArrayFieldSchema = containerSchemas.ArrayFieldSchema;
5935
6115
  var MatFieldSchema = containerSchemas.AllFieldsSchema;
5936
6116
 
5937
6117
  // internal/dynamic-forms-validation/material/src/mat-form-config.schema.ts
5938
- import { z as z41 } from "zod";
5939
- var MatFormDefaultPropsSchema = z41.object({
6118
+ import { z as z43 } from "zod";
6119
+ var MatFormDefaultPropsSchema = z43.object({
5940
6120
  /**
5941
6121
  * Default form field appearance for all fields.
5942
6122
  */
@@ -5953,15 +6133,15 @@ var MatFormDefaultPropsSchema = z41.object({
5953
6133
  var MatFormConfigSchema = createFormConfigSchema(MatFieldSchema, MatFormDefaultPropsSchema);
5954
6134
 
5955
6135
  // internal/dynamic-forms-validation/bootstrap/src/props/index.ts
5956
- import { z as z43 } from "zod";
6136
+ import { z as z45 } from "zod";
5957
6137
 
5958
6138
  // internal/dynamic-forms-validation/bootstrap/src/props/bs-common-props.schema.ts
5959
- import { z as z42 } from "zod";
5960
- var BsSizeSchema = z42.enum(["sm", "lg"]);
5961
- var BsButtonVariantSchema = z42.enum(["primary", "secondary", "success", "danger", "warning", "info", "light", "dark", "link"]);
5962
- var BsFormFieldPropsSchema = z42.object({
6139
+ import { z as z44 } from "zod";
6140
+ var BsSizeSchema = z44.enum(["sm", "lg"]);
6141
+ var BsButtonVariantSchema = z44.enum(["primary", "secondary", "success", "danger", "warning", "info", "light", "dark", "link"]);
6142
+ var BsFormFieldPropsSchema = z44.object({
5963
6143
  size: BsSizeSchema.optional(),
5964
- floatingLabel: z42.boolean().optional(),
6144
+ floatingLabel: z44.boolean().optional(),
5965
6145
  hint: DynamicTextSchema.optional(),
5966
6146
  validFeedback: DynamicTextSchema.optional(),
5967
6147
  invalidFeedback: DynamicTextSchema.optional()
@@ -5969,94 +6149,94 @@ var BsFormFieldPropsSchema = z42.object({
5969
6149
 
5970
6150
  // internal/dynamic-forms-validation/bootstrap/src/props/index.ts
5971
6151
  var BsInputPropsSchema = BsFormFieldPropsSchema.extend({
5972
- type: z43.enum(["text", "email", "password", "number", "tel", "url"]).optional(),
6152
+ type: z45.enum(["text", "email", "password", "number", "tel", "url"]).optional(),
5973
6153
  placeholder: DynamicTextSchema.optional(),
5974
- plaintext: z43.boolean().optional()
6154
+ plaintext: z45.boolean().optional()
5975
6155
  });
5976
6156
  var BsTextareaPropsSchema = BsFormFieldPropsSchema.extend({
5977
- rows: z43.number().positive().optional(),
6157
+ rows: z45.number().positive().optional(),
5978
6158
  placeholder: DynamicTextSchema.optional()
5979
6159
  });
5980
6160
  var BsSelectPropsSchema = BsFormFieldPropsSchema.extend({
5981
- multiple: z43.boolean().optional(),
5982
- htmlSize: z43.number().positive().optional(),
6161
+ multiple: z45.boolean().optional(),
6162
+ htmlSize: z45.number().positive().optional(),
5983
6163
  placeholder: DynamicTextSchema.optional()
5984
6164
  });
5985
- var BsCheckboxPropsSchema = z43.object({
5986
- switch: z43.boolean().optional(),
5987
- inline: z43.boolean().optional(),
5988
- reverse: z43.boolean().optional(),
5989
- indeterminate: z43.boolean().optional(),
6165
+ var BsCheckboxPropsSchema = z45.object({
6166
+ switch: z45.boolean().optional(),
6167
+ inline: z45.boolean().optional(),
6168
+ reverse: z45.boolean().optional(),
6169
+ indeterminate: z45.boolean().optional(),
5990
6170
  hint: DynamicTextSchema.optional()
5991
6171
  });
5992
- var BsRadioPropsSchema = z43.object({
5993
- inline: z43.boolean().optional(),
5994
- reverse: z43.boolean().optional(),
5995
- buttonGroup: z43.boolean().optional(),
6172
+ var BsRadioPropsSchema = z45.object({
6173
+ inline: z45.boolean().optional(),
6174
+ reverse: z45.boolean().optional(),
6175
+ buttonGroup: z45.boolean().optional(),
5996
6176
  buttonSize: BsSizeSchema.optional(),
5997
6177
  hint: DynamicTextSchema.optional()
5998
6178
  });
5999
- var BsMultiCheckboxPropsSchema = z43.object({
6000
- switch: z43.boolean().optional(),
6001
- inline: z43.boolean().optional(),
6002
- reverse: z43.boolean().optional(),
6179
+ var BsMultiCheckboxPropsSchema = z45.object({
6180
+ switch: z45.boolean().optional(),
6181
+ inline: z45.boolean().optional(),
6182
+ reverse: z45.boolean().optional(),
6003
6183
  hint: DynamicTextSchema.optional()
6004
6184
  });
6005
- var BsTogglePropsSchema = z43.object({
6185
+ var BsTogglePropsSchema = z45.object({
6006
6186
  size: BsSizeSchema.optional(),
6007
- reverse: z43.boolean().optional(),
6008
- inline: z43.boolean().optional(),
6187
+ reverse: z45.boolean().optional(),
6188
+ inline: z45.boolean().optional(),
6009
6189
  hint: DynamicTextSchema.optional()
6010
6190
  });
6011
6191
  var BsDatepickerPropsSchema = BsFormFieldPropsSchema.extend({
6012
- useNgBootstrap: z43.boolean().optional(),
6013
- displayMonths: z43.number().positive().optional(),
6014
- navigation: z43.enum(["select", "arrows", "none"]).optional(),
6015
- outsideDays: z43.enum(["visible", "collapsed", "hidden"]).optional(),
6016
- showWeekNumbers: z43.boolean().optional(),
6192
+ useNgBootstrap: z45.boolean().optional(),
6193
+ displayMonths: z45.number().positive().optional(),
6194
+ navigation: z45.enum(["select", "arrows", "none"]).optional(),
6195
+ outsideDays: z45.enum(["visible", "collapsed", "hidden"]).optional(),
6196
+ showWeekNumbers: z45.boolean().optional(),
6017
6197
  placeholder: DynamicTextSchema.optional()
6018
6198
  });
6019
- var BsSliderPropsSchema = z43.object({
6020
- showValue: z43.boolean().optional(),
6021
- valuePrefix: z43.string().optional(),
6022
- valueSuffix: z43.string().optional(),
6199
+ var BsSliderPropsSchema = z45.object({
6200
+ showValue: z45.boolean().optional(),
6201
+ valuePrefix: z45.string().optional(),
6202
+ valueSuffix: z45.string().optional(),
6023
6203
  hint: DynamicTextSchema.optional(),
6024
- min: z43.number().optional(),
6025
- max: z43.number().optional(),
6026
- step: z43.number().positive().optional()
6204
+ min: z45.number().optional(),
6205
+ max: z45.number().optional(),
6206
+ step: z45.number().positive().optional()
6027
6207
  });
6028
- var BsButtonPropsSchema = z43.object({
6208
+ var BsButtonPropsSchema = z45.object({
6029
6209
  variant: BsButtonVariantSchema.optional(),
6030
- outline: z43.boolean().optional(),
6210
+ outline: z45.boolean().optional(),
6031
6211
  size: BsSizeSchema.optional(),
6032
- block: z43.boolean().optional(),
6033
- active: z43.boolean().optional(),
6034
- type: z43.enum(["button", "submit", "reset"]).optional()
6212
+ block: z45.boolean().optional(),
6213
+ active: z45.boolean().optional(),
6214
+ type: z45.enum(["button", "submit", "reset"]).optional()
6035
6215
  });
6036
6216
 
6037
6217
  // internal/dynamic-forms-validation/bootstrap/src/fields/index.ts
6038
- import { z as z44 } from "zod";
6218
+ import { z as z46 } from "zod";
6039
6219
  var BsValueFieldBase = BaseFieldDefSchema.merge(FieldWithValidationSchema);
6040
6220
  var BsInputFieldSchemaObject = BsValueFieldBase.extend({
6041
- type: z44.literal("input"),
6042
- nullable: z44.boolean().optional(),
6043
- value: z44.string().nullable().optional(),
6221
+ type: z46.literal("input"),
6222
+ nullable: z46.boolean().optional(),
6223
+ value: z46.string().nullable().optional(),
6044
6224
  placeholder: DynamicTextSchema.optional(),
6045
6225
  props: BsInputPropsSchema.optional()
6046
6226
  });
6047
6227
  var BsInputFieldSchema = BsInputFieldSchemaObject.superRefine(nullableValueRefine);
6048
6228
  var BsTextareaFieldSchemaObject = BsValueFieldBase.extend({
6049
- type: z44.literal("textarea"),
6050
- nullable: z44.boolean().optional(),
6051
- value: z44.string().nullable().optional(),
6229
+ type: z46.literal("textarea"),
6230
+ nullable: z46.boolean().optional(),
6231
+ value: z46.string().nullable().optional(),
6052
6232
  placeholder: DynamicTextSchema.optional(),
6053
6233
  props: BsTextareaPropsSchema.optional()
6054
6234
  });
6055
6235
  var BsTextareaFieldSchema = BsTextareaFieldSchemaObject.superRefine(nullableValueRefine);
6056
6236
  var BsSelectFieldSchemaObject = BsValueFieldBase.extend({
6057
- type: z44.literal("select"),
6058
- nullable: z44.boolean().optional(),
6059
- value: z44.string().nullable().optional(),
6237
+ type: z46.literal("select"),
6238
+ nullable: z46.boolean().optional(),
6239
+ value: z46.string().nullable().optional(),
6060
6240
  // Bootstrap select only supports strings
6061
6241
  placeholder: DynamicTextSchema.optional(),
6062
6242
  options: FieldOptionsSchema,
@@ -6064,113 +6244,128 @@ var BsSelectFieldSchemaObject = BsValueFieldBase.extend({
6064
6244
  });
6065
6245
  var BsSelectFieldSchema = BsSelectFieldSchemaObject.superRefine(nullableValueRefine);
6066
6246
  var BsCheckboxFieldSchema = BsValueFieldBase.extend({
6067
- type: z44.literal("checkbox"),
6068
- value: z44.boolean().optional(),
6247
+ type: z46.literal("checkbox"),
6248
+ value: z46.boolean().optional(),
6069
6249
  placeholder: DynamicTextSchema.optional(),
6070
6250
  props: BsCheckboxPropsSchema.optional()
6071
6251
  });
6072
6252
  var BsRadioFieldSchemaObject = BsValueFieldBase.extend({
6073
- type: z44.literal("radio"),
6074
- nullable: z44.boolean().optional(),
6075
- value: z44.unknown().nullable().optional(),
6253
+ type: z46.literal("radio"),
6254
+ nullable: z46.boolean().optional(),
6255
+ value: z46.unknown().nullable().optional(),
6076
6256
  placeholder: DynamicTextSchema.optional(),
6077
6257
  options: FieldOptionsSchema,
6078
6258
  props: BsRadioPropsSchema.optional()
6079
6259
  });
6080
6260
  var BsRadioFieldSchema = BsRadioFieldSchemaObject.superRefine(nullableValueRefine);
6081
6261
  var BsMultiCheckboxFieldSchemaObject = BsValueFieldBase.extend({
6082
- type: z44.literal("multi-checkbox"),
6083
- nullable: z44.boolean().optional(),
6084
- value: z44.array(z44.unknown()).nullable().optional(),
6262
+ type: z46.literal("multi-checkbox"),
6263
+ nullable: z46.boolean().optional(),
6264
+ value: z46.array(z46.unknown()).nullable().optional(),
6085
6265
  placeholder: DynamicTextSchema.optional(),
6086
6266
  options: FieldOptionsSchema,
6087
6267
  props: BsMultiCheckboxPropsSchema.optional()
6088
6268
  });
6089
6269
  var BsMultiCheckboxFieldSchema = BsMultiCheckboxFieldSchemaObject.superRefine(nullableValueRefine);
6090
6270
  var BsToggleFieldSchema = BsValueFieldBase.extend({
6091
- type: z44.literal("toggle"),
6092
- value: z44.boolean().optional(),
6271
+ type: z46.literal("toggle"),
6272
+ value: z46.boolean().optional(),
6093
6273
  placeholder: DynamicTextSchema.optional(),
6094
6274
  props: BsTogglePropsSchema.optional()
6095
6275
  });
6096
6276
  var BsDatepickerFieldSchemaObject = BsValueFieldBase.extend({
6097
- type: z44.literal("datepicker"),
6098
- nullable: z44.boolean().optional(),
6099
- value: z44.union([z44.string(), z44.null()]).optional(),
6100
- minDate: z44.union([z44.string(), z44.null()]).optional(),
6101
- maxDate: z44.union([z44.string(), z44.null()]).optional(),
6102
- startAt: z44.union([z44.string(), z44.null()]).optional(),
6277
+ type: z46.literal("datepicker"),
6278
+ nullable: z46.boolean().optional(),
6279
+ value: z46.union([z46.string(), z46.null()]).optional(),
6280
+ minDate: z46.union([z46.string(), z46.null()]).optional(),
6281
+ maxDate: z46.union([z46.string(), z46.null()]).optional(),
6282
+ startAt: z46.union([z46.string(), z46.null()]).optional(),
6103
6283
  placeholder: DynamicTextSchema.optional(),
6104
6284
  props: BsDatepickerPropsSchema.optional()
6105
6285
  });
6106
6286
  var BsDatepickerFieldSchema = BsDatepickerFieldSchemaObject.superRefine(nullableValueRefine);
6107
6287
  var BsSliderFieldSchemaObject = BsValueFieldBase.extend({
6108
- type: z44.literal("slider"),
6109
- nullable: z44.boolean().optional(),
6110
- value: z44.number().nullable().optional(),
6111
- minValue: z44.number().optional(),
6112
- maxValue: z44.number().optional(),
6113
- step: z44.number().positive().optional(),
6288
+ type: z46.literal("slider"),
6289
+ nullable: z46.boolean().optional(),
6290
+ value: z46.number().nullable().optional(),
6291
+ minValue: z46.number().optional(),
6292
+ maxValue: z46.number().optional(),
6293
+ step: z46.number().positive().optional(),
6114
6294
  placeholder: DynamicTextSchema.optional(),
6115
6295
  props: BsSliderPropsSchema.optional()
6116
6296
  });
6117
6297
  var BsSliderFieldSchema = BsSliderFieldSchemaObject.superRefine(nullableValueRefine);
6118
6298
  var BsButtonFieldSchema = BaseFieldDefSchema.extend({
6119
- type: z44.literal("button"),
6120
- event: z44.string().optional(),
6121
- eventArgs: z44.array(z44.union([z44.string(), z44.number(), z44.boolean(), z44.null(), z44.undefined()])).optional(),
6299
+ type: z46.literal("button"),
6300
+ event: z46.string().optional(),
6301
+ eventArgs: z46.array(z46.union([z46.string(), z46.number(), z46.boolean(), z46.null(), z46.undefined()])).optional(),
6122
6302
  props: BsButtonPropsSchema.optional(),
6123
6303
  logic: LogicArraySchema.optional()
6124
6304
  });
6125
6305
  var BsSubmitButtonFieldSchema = BaseFieldDefSchema.extend({
6126
- type: z44.literal("submit"),
6306
+ type: z46.literal("submit"),
6127
6307
  props: BsButtonPropsSchema.optional(),
6128
6308
  logic: LogicArraySchema.optional()
6129
6309
  });
6130
6310
  var BsNextButtonFieldSchema = BaseFieldDefSchema.extend({
6131
- type: z44.literal("next"),
6311
+ type: z46.literal("next"),
6132
6312
  props: BsButtonPropsSchema.optional(),
6133
6313
  logic: LogicArraySchema.optional()
6134
6314
  });
6135
6315
  var BsPreviousButtonFieldSchema = BaseFieldDefSchema.extend({
6136
- type: z44.literal("previous"),
6316
+ type: z46.literal("previous"),
6137
6317
  props: BsButtonPropsSchema.optional()
6138
6318
  });
6139
6319
  var BsAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6140
- type: z44.literal("add-array-item"),
6141
- arrayKey: z44.string().optional(),
6320
+ /**
6321
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6322
+ * item, or a list of them for an object item.
6323
+ */
6324
+ template: ArrayItemTemplateSchema,
6325
+ type: z46.literal("add-array-item"),
6326
+ arrayKey: z46.string().optional(),
6142
6327
  props: BsButtonPropsSchema.optional()
6143
6328
  });
6144
6329
  var BsRemoveArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6145
- type: z44.literal("remove-array-item"),
6146
- arrayKey: z44.string().optional(),
6330
+ type: z46.literal("remove-array-item"),
6331
+ arrayKey: z46.string().optional(),
6147
6332
  props: BsButtonPropsSchema.optional()
6148
6333
  });
6149
6334
  var BsPrependArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6150
- type: z44.literal("prepend-array-item"),
6151
- arrayKey: z44.string().optional(),
6335
+ /**
6336
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6337
+ * item, or a list of them for an object item.
6338
+ */
6339
+ template: ArrayItemTemplateSchema,
6340
+ type: z46.literal("prepend-array-item"),
6341
+ arrayKey: z46.string().optional(),
6152
6342
  props: BsButtonPropsSchema.optional()
6153
6343
  });
6154
6344
  var BsInsertArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6155
- type: z44.literal("insert-array-item"),
6156
- arrayKey: z44.string().optional(),
6157
- index: z44.number(),
6345
+ /**
6346
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6347
+ * item, or a list of them for an object item.
6348
+ */
6349
+ template: ArrayItemTemplateSchema,
6350
+ type: z46.literal("insert-array-item"),
6351
+ arrayKey: z46.string().optional(),
6352
+ index: z46.number(),
6158
6353
  props: BsButtonPropsSchema.optional()
6159
6354
  });
6160
6355
  var BsPopArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6161
- type: z44.literal("pop-array-item"),
6162
- arrayKey: z44.string(),
6356
+ type: z46.literal("pop-array-item"),
6357
+ arrayKey: z46.string(),
6163
6358
  props: BsButtonPropsSchema.optional()
6164
6359
  });
6165
6360
  var BsShiftArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6166
- type: z44.literal("shift-array-item"),
6167
- arrayKey: z44.string(),
6361
+ type: z46.literal("shift-array-item"),
6362
+ arrayKey: z46.string(),
6168
6363
  props: BsButtonPropsSchema.optional()
6169
6364
  });
6170
6365
 
6171
6366
  // internal/dynamic-forms-validation/bootstrap/src/bs-leaf-field.schema.ts
6172
- import { z as z45 } from "zod";
6173
- var BsLeafFieldSchema = z45.discriminatedUnion("type", [
6367
+ import { z as z47 } from "zod";
6368
+ var BsLeafFieldSchema = z47.discriminatedUnion("type", [
6174
6369
  TextFieldSchema,
6175
6370
  HiddenFieldSchema,
6176
6371
  BsInputFieldSchemaObject,
@@ -6195,7 +6390,7 @@ var BsLeafFieldSchema = z45.discriminatedUnion("type", [
6195
6390
  ]).superRefine(nullableValueRefine);
6196
6391
 
6197
6392
  // internal/dynamic-forms-validation/bootstrap/src/bs-form-config.schema.ts
6198
- import { z as z46 } from "zod";
6393
+ import { z as z48 } from "zod";
6199
6394
  var containerSchemas2 = createContainerSchemas({
6200
6395
  leafFieldSchema: BsLeafFieldSchema
6201
6396
  });
@@ -6204,210 +6399,225 @@ var BsRowFieldSchema = containerSchemas2.RowFieldSchema;
6204
6399
  var BsGroupFieldSchema = containerSchemas2.GroupFieldSchema;
6205
6400
  var BsArrayFieldSchema = containerSchemas2.ArrayFieldSchema;
6206
6401
  var BsFieldSchema = containerSchemas2.AllFieldsSchema;
6207
- var BsFormDefaultPropsSchema = z46.object({
6402
+ var BsFormDefaultPropsSchema = z48.object({
6208
6403
  size: BsSizeSchema.optional(),
6209
- floatingLabel: z46.boolean().optional()
6404
+ floatingLabel: z48.boolean().optional()
6210
6405
  });
6211
6406
  var BsFormConfigSchema = createFormConfigSchema(BsFieldSchema, BsFormDefaultPropsSchema);
6212
6407
 
6213
6408
  // internal/dynamic-forms-validation/primeng/src/props/index.ts
6214
- import { z as z47 } from "zod";
6215
- var PrimeSeveritySchema = z47.enum(["primary", "secondary", "success", "info", "warn", "danger", "help", "contrast"]);
6216
- var PrimeCommonPropsSchema = z47.object({
6217
- styleClass: z47.string().optional(),
6409
+ import { z as z49 } from "zod";
6410
+ var PrimeSeveritySchema = z49.enum(["primary", "secondary", "success", "info", "warn", "danger", "help", "contrast"]);
6411
+ var PrimeCommonPropsSchema = z49.object({
6412
+ styleClass: z49.string().optional(),
6218
6413
  hint: DynamicTextSchema.optional()
6219
6414
  });
6220
6415
  var PrimeInputPropsSchema = PrimeCommonPropsSchema.extend({
6221
- type: z47.enum(["text", "email", "password", "number", "tel", "url"]).optional(),
6416
+ type: z49.enum(["text", "email", "password", "number", "tel", "url"]).optional(),
6222
6417
  placeholder: DynamicTextSchema.optional(),
6223
- size: z47.enum(["small", "large"]).optional(),
6224
- variant: z47.enum(["outlined", "filled"]).optional()
6418
+ size: z49.enum(["small", "large"]).optional(),
6419
+ variant: z49.enum(["outlined", "filled"]).optional()
6225
6420
  });
6226
6421
  var PrimeCheckboxPropsSchema = PrimeCommonPropsSchema.extend({
6227
- binary: z47.boolean().optional(),
6228
- trueValue: z47.unknown().optional(),
6229
- falseValue: z47.unknown().optional()
6422
+ binary: z49.boolean().optional(),
6423
+ trueValue: z49.unknown().optional(),
6424
+ falseValue: z49.unknown().optional()
6230
6425
  });
6231
6426
  var PrimeRadioPropsSchema = PrimeCommonPropsSchema.extend({
6232
- name: z47.string().optional()
6427
+ name: z49.string().optional()
6233
6428
  });
6234
6429
  var PrimeSelectPropsSchema = PrimeCommonPropsSchema.extend({
6235
- multiple: z47.boolean().optional(),
6236
- filter: z47.boolean().optional(),
6430
+ multiple: z49.boolean().optional(),
6431
+ filter: z49.boolean().optional(),
6237
6432
  placeholder: DynamicTextSchema.optional(),
6238
- showClear: z47.boolean().optional()
6433
+ showClear: z49.boolean().optional()
6239
6434
  });
6240
6435
  var PrimeMultiCheckboxPropsSchema = PrimeCommonPropsSchema;
6241
6436
  var PrimeDatepickerPropsSchema = PrimeCommonPropsSchema.extend({
6242
- dateFormat: z47.string().optional(),
6243
- inline: z47.boolean().optional(),
6244
- showIcon: z47.boolean().optional(),
6245
- showButtonBar: z47.boolean().optional(),
6246
- selectionMode: z47.enum(["single", "multiple", "range"]).optional(),
6247
- touchUI: z47.boolean().optional(),
6248
- view: z47.enum(["date", "month", "year"]).optional(),
6437
+ dateFormat: z49.string().optional(),
6438
+ inline: z49.boolean().optional(),
6439
+ showIcon: z49.boolean().optional(),
6440
+ showButtonBar: z49.boolean().optional(),
6441
+ selectionMode: z49.enum(["single", "multiple", "range"]).optional(),
6442
+ touchUI: z49.boolean().optional(),
6443
+ view: z49.enum(["date", "month", "year"]).optional(),
6249
6444
  placeholder: DynamicTextSchema.optional()
6250
6445
  });
6251
6446
  var PrimeTextareaPropsSchema = PrimeCommonPropsSchema.extend({
6252
- rows: z47.number().positive().optional(),
6253
- autoResize: z47.boolean().optional(),
6447
+ rows: z49.number().positive().optional(),
6448
+ autoResize: z49.boolean().optional(),
6254
6449
  placeholder: DynamicTextSchema.optional()
6255
6450
  });
6256
6451
  var PrimeSliderPropsSchema = PrimeCommonPropsSchema.extend({
6257
- min: z47.number().optional(),
6258
- max: z47.number().optional(),
6259
- step: z47.number().positive().optional(),
6260
- range: z47.boolean().optional(),
6261
- orientation: z47.enum(["horizontal", "vertical"]).optional()
6452
+ min: z49.number().optional(),
6453
+ max: z49.number().optional(),
6454
+ step: z49.number().positive().optional(),
6455
+ range: z49.boolean().optional(),
6456
+ orientation: z49.enum(["horizontal", "vertical"]).optional()
6262
6457
  });
6263
6458
  var PrimeTogglePropsSchema = PrimeCommonPropsSchema;
6264
- var PrimeButtonPropsSchema = z47.object({
6459
+ var PrimeButtonPropsSchema = z49.object({
6265
6460
  severity: PrimeSeveritySchema.optional(),
6266
- text: z47.boolean().optional(),
6267
- outlined: z47.boolean().optional(),
6268
- raised: z47.boolean().optional(),
6269
- rounded: z47.boolean().optional(),
6270
- icon: z47.string().optional(),
6271
- iconPos: z47.enum(["left", "right", "top", "bottom"]).optional(),
6272
- type: z47.enum(["button", "submit", "reset"]).optional()
6461
+ text: z49.boolean().optional(),
6462
+ outlined: z49.boolean().optional(),
6463
+ raised: z49.boolean().optional(),
6464
+ rounded: z49.boolean().optional(),
6465
+ icon: z49.string().optional(),
6466
+ iconPos: z49.enum(["left", "right", "top", "bottom"]).optional(),
6467
+ type: z49.enum(["button", "submit", "reset"]).optional()
6273
6468
  });
6274
6469
 
6275
6470
  // internal/dynamic-forms-validation/primeng/src/fields/index.ts
6276
- import { z as z48 } from "zod";
6471
+ import { z as z50 } from "zod";
6277
6472
  var PrimeValueFieldBase = BaseFieldDefSchema.merge(FieldWithValidationSchema);
6278
6473
  var PrimeInputFieldSchemaObject = PrimeValueFieldBase.extend({
6279
- type: z48.literal("input"),
6280
- nullable: z48.boolean().optional(),
6281
- value: z48.string().nullable().optional(),
6474
+ type: z50.literal("input"),
6475
+ nullable: z50.boolean().optional(),
6476
+ value: z50.string().nullable().optional(),
6282
6477
  placeholder: DynamicTextSchema.optional(),
6283
6478
  props: PrimeInputPropsSchema.optional()
6284
6479
  });
6285
6480
  var PrimeInputFieldSchema = PrimeInputFieldSchemaObject.superRefine(nullableValueRefine);
6286
6481
  var PrimeCheckboxFieldSchema = PrimeValueFieldBase.extend({
6287
- type: z48.literal("checkbox"),
6288
- value: z48.boolean().optional(),
6482
+ type: z50.literal("checkbox"),
6483
+ value: z50.boolean().optional(),
6289
6484
  placeholder: DynamicTextSchema.optional(),
6290
6485
  props: PrimeCheckboxPropsSchema.optional()
6291
6486
  });
6292
6487
  var PrimeRadioFieldSchemaObject = PrimeValueFieldBase.extend({
6293
- type: z48.literal("radio"),
6294
- nullable: z48.boolean().optional(),
6295
- value: z48.unknown().nullable().optional(),
6488
+ type: z50.literal("radio"),
6489
+ nullable: z50.boolean().optional(),
6490
+ value: z50.unknown().nullable().optional(),
6296
6491
  placeholder: DynamicTextSchema.optional(),
6297
6492
  options: FieldOptionsSchema,
6298
6493
  props: PrimeRadioPropsSchema.optional()
6299
6494
  });
6300
6495
  var PrimeRadioFieldSchema = PrimeRadioFieldSchemaObject.superRefine(nullableValueRefine);
6301
6496
  var PrimeSelectFieldSchemaObject = PrimeValueFieldBase.extend({
6302
- type: z48.literal("select"),
6303
- nullable: z48.boolean().optional(),
6304
- value: z48.unknown().nullable().optional(),
6497
+ type: z50.literal("select"),
6498
+ nullable: z50.boolean().optional(),
6499
+ value: z50.unknown().nullable().optional(),
6305
6500
  placeholder: DynamicTextSchema.optional(),
6306
6501
  options: FieldOptionsSchema,
6307
6502
  props: PrimeSelectPropsSchema.optional()
6308
6503
  });
6309
6504
  var PrimeSelectFieldSchema = PrimeSelectFieldSchemaObject.superRefine(nullableValueRefine);
6310
6505
  var PrimeMultiCheckboxFieldSchemaObject = PrimeValueFieldBase.extend({
6311
- type: z48.literal("multi-checkbox"),
6312
- nullable: z48.boolean().optional(),
6313
- value: z48.array(z48.unknown()).nullable().optional(),
6506
+ type: z50.literal("multi-checkbox"),
6507
+ nullable: z50.boolean().optional(),
6508
+ value: z50.array(z50.unknown()).nullable().optional(),
6314
6509
  placeholder: DynamicTextSchema.optional(),
6315
6510
  options: FieldOptionsSchema,
6316
6511
  props: PrimeMultiCheckboxPropsSchema.optional()
6317
6512
  });
6318
6513
  var PrimeMultiCheckboxFieldSchema = PrimeMultiCheckboxFieldSchemaObject.superRefine(nullableValueRefine);
6319
6514
  var PrimeDatepickerFieldSchemaObject = PrimeValueFieldBase.extend({
6320
- type: z48.literal("datepicker"),
6321
- nullable: z48.boolean().optional(),
6322
- value: z48.union([z48.string(), z48.null()]).optional(),
6323
- minDate: z48.union([z48.string(), z48.null()]).optional(),
6324
- maxDate: z48.union([z48.string(), z48.null()]).optional(),
6325
- startAt: z48.union([z48.string(), z48.null()]).optional(),
6515
+ type: z50.literal("datepicker"),
6516
+ nullable: z50.boolean().optional(),
6517
+ value: z50.union([z50.string(), z50.null()]).optional(),
6518
+ minDate: z50.union([z50.string(), z50.null()]).optional(),
6519
+ maxDate: z50.union([z50.string(), z50.null()]).optional(),
6520
+ startAt: z50.union([z50.string(), z50.null()]).optional(),
6326
6521
  placeholder: DynamicTextSchema.optional(),
6327
6522
  props: PrimeDatepickerPropsSchema.optional()
6328
6523
  });
6329
6524
  var PrimeDatepickerFieldSchema = PrimeDatepickerFieldSchemaObject.superRefine(nullableValueRefine);
6330
6525
  var PrimeTextareaFieldSchemaObject = PrimeValueFieldBase.extend({
6331
- type: z48.literal("textarea"),
6332
- nullable: z48.boolean().optional(),
6333
- value: z48.string().nullable().optional(),
6526
+ type: z50.literal("textarea"),
6527
+ nullable: z50.boolean().optional(),
6528
+ value: z50.string().nullable().optional(),
6334
6529
  placeholder: DynamicTextSchema.optional(),
6335
6530
  props: PrimeTextareaPropsSchema.optional()
6336
6531
  });
6337
6532
  var PrimeTextareaFieldSchema = PrimeTextareaFieldSchemaObject.superRefine(nullableValueRefine);
6338
6533
  var PrimeSliderFieldSchemaObject = PrimeValueFieldBase.extend({
6339
- type: z48.literal("slider"),
6340
- nullable: z48.boolean().optional(),
6341
- value: z48.number().nullable().optional(),
6342
- minValue: z48.number().optional(),
6343
- maxValue: z48.number().optional(),
6344
- step: z48.number().positive().optional(),
6534
+ type: z50.literal("slider"),
6535
+ nullable: z50.boolean().optional(),
6536
+ value: z50.number().nullable().optional(),
6537
+ minValue: z50.number().optional(),
6538
+ maxValue: z50.number().optional(),
6539
+ step: z50.number().positive().optional(),
6345
6540
  placeholder: DynamicTextSchema.optional(),
6346
6541
  props: PrimeSliderPropsSchema.optional()
6347
6542
  });
6348
6543
  var PrimeSliderFieldSchema = PrimeSliderFieldSchemaObject.superRefine(nullableValueRefine);
6349
6544
  var PrimeToggleFieldSchema = PrimeValueFieldBase.extend({
6350
- type: z48.literal("toggle"),
6351
- value: z48.boolean().optional(),
6545
+ type: z50.literal("toggle"),
6546
+ value: z50.boolean().optional(),
6352
6547
  placeholder: DynamicTextSchema.optional(),
6353
6548
  props: PrimeTogglePropsSchema.optional()
6354
6549
  });
6355
6550
  var PrimeButtonFieldSchema = BaseFieldDefSchema.extend({
6356
- type: z48.literal("button"),
6357
- event: z48.string().optional(),
6358
- eventArgs: z48.array(z48.union([z48.string(), z48.number(), z48.boolean(), z48.null(), z48.undefined()])).optional(),
6551
+ type: z50.literal("button"),
6552
+ event: z50.string().optional(),
6553
+ eventArgs: z50.array(z50.union([z50.string(), z50.number(), z50.boolean(), z50.null(), z50.undefined()])).optional(),
6359
6554
  props: PrimeButtonPropsSchema.optional(),
6360
6555
  logic: LogicArraySchema.optional()
6361
6556
  });
6362
6557
  var PrimeSubmitButtonFieldSchema = BaseFieldDefSchema.extend({
6363
- type: z48.literal("submit"),
6558
+ type: z50.literal("submit"),
6364
6559
  props: PrimeButtonPropsSchema.optional(),
6365
6560
  logic: LogicArraySchema.optional()
6366
6561
  });
6367
6562
  var PrimeNextButtonFieldSchema = BaseFieldDefSchema.extend({
6368
- type: z48.literal("next"),
6563
+ type: z50.literal("next"),
6369
6564
  props: PrimeButtonPropsSchema.optional(),
6370
6565
  logic: LogicArraySchema.optional()
6371
6566
  });
6372
6567
  var PrimePreviousButtonFieldSchema = BaseFieldDefSchema.extend({
6373
- type: z48.literal("previous"),
6568
+ type: z50.literal("previous"),
6374
6569
  props: PrimeButtonPropsSchema.optional()
6375
6570
  });
6376
6571
  var PrimeAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6377
- type: z48.literal("add-array-item"),
6378
- arrayKey: z48.string().optional(),
6572
+ /**
6573
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6574
+ * item, or a list of them for an object item.
6575
+ */
6576
+ template: ArrayItemTemplateSchema,
6577
+ type: z50.literal("add-array-item"),
6578
+ arrayKey: z50.string().optional(),
6379
6579
  props: PrimeButtonPropsSchema.optional()
6380
6580
  });
6381
6581
  var PrimeRemoveArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6382
- type: z48.literal("remove-array-item"),
6383
- arrayKey: z48.string().optional(),
6582
+ type: z50.literal("remove-array-item"),
6583
+ arrayKey: z50.string().optional(),
6384
6584
  props: PrimeButtonPropsSchema.optional()
6385
6585
  });
6386
6586
  var PrimePrependArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6387
- type: z48.literal("prepend-array-item"),
6388
- arrayKey: z48.string().optional(),
6587
+ /**
6588
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6589
+ * item, or a list of them for an object item.
6590
+ */
6591
+ template: ArrayItemTemplateSchema,
6592
+ type: z50.literal("prepend-array-item"),
6593
+ arrayKey: z50.string().optional(),
6389
6594
  props: PrimeButtonPropsSchema.optional()
6390
6595
  });
6391
6596
  var PrimeInsertArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6392
- type: z48.literal("insert-array-item"),
6393
- arrayKey: z48.string().optional(),
6394
- index: z48.number(),
6597
+ /**
6598
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6599
+ * item, or a list of them for an object item.
6600
+ */
6601
+ template: ArrayItemTemplateSchema,
6602
+ type: z50.literal("insert-array-item"),
6603
+ arrayKey: z50.string().optional(),
6604
+ index: z50.number(),
6395
6605
  props: PrimeButtonPropsSchema.optional()
6396
6606
  });
6397
6607
  var PrimePopArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6398
- type: z48.literal("pop-array-item"),
6399
- arrayKey: z48.string(),
6608
+ type: z50.literal("pop-array-item"),
6609
+ arrayKey: z50.string(),
6400
6610
  props: PrimeButtonPropsSchema.optional()
6401
6611
  });
6402
6612
  var PrimeShiftArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6403
- type: z48.literal("shift-array-item"),
6404
- arrayKey: z48.string(),
6613
+ type: z50.literal("shift-array-item"),
6614
+ arrayKey: z50.string(),
6405
6615
  props: PrimeButtonPropsSchema.optional()
6406
6616
  });
6407
6617
 
6408
6618
  // internal/dynamic-forms-validation/primeng/src/prime-leaf-field.schema.ts
6409
- import { z as z49 } from "zod";
6410
- var PrimeLeafFieldSchema = z49.discriminatedUnion("type", [
6619
+ import { z as z51 } from "zod";
6620
+ var PrimeLeafFieldSchema = z51.discriminatedUnion("type", [
6411
6621
  TextFieldSchema,
6412
6622
  HiddenFieldSchema,
6413
6623
  PrimeInputFieldSchemaObject,
@@ -6432,7 +6642,7 @@ var PrimeLeafFieldSchema = z49.discriminatedUnion("type", [
6432
6642
  ]).superRefine(nullableValueRefine);
6433
6643
 
6434
6644
  // internal/dynamic-forms-validation/primeng/src/prime-form-config.schema.ts
6435
- import { z as z50 } from "zod";
6645
+ import { z as z52 } from "zod";
6436
6646
  var containerSchemas3 = createContainerSchemas({
6437
6647
  leafFieldSchema: PrimeLeafFieldSchema
6438
6648
  });
@@ -6441,252 +6651,267 @@ var PrimeRowFieldSchema = containerSchemas3.RowFieldSchema;
6441
6651
  var PrimeGroupFieldSchema = containerSchemas3.GroupFieldSchema;
6442
6652
  var PrimeArrayFieldSchema = containerSchemas3.ArrayFieldSchema;
6443
6653
  var PrimeFieldSchema = containerSchemas3.AllFieldsSchema;
6444
- var PrimeFormDefaultPropsSchema = z50.object({
6445
- styleClass: z50.string().optional()
6654
+ var PrimeFormDefaultPropsSchema = z52.object({
6655
+ styleClass: z52.string().optional()
6446
6656
  });
6447
6657
  var PrimeFormConfigSchema = createFormConfigSchema(PrimeFieldSchema, PrimeFormDefaultPropsSchema);
6448
6658
 
6449
6659
  // internal/dynamic-forms-validation/ionic/src/props/index.ts
6450
- import { z as z51 } from "zod";
6451
- var IonicColorSchema = z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger", "light", "medium", "dark"]);
6452
- var IonicLabelPlacementSchema = z51.enum(["start", "end", "fixed", "stacked", "floating"]);
6453
- var IonicJustifySchema = z51.enum(["start", "end", "space-between"]);
6454
- var IonicFillSchema = z51.enum(["solid", "outline", "clear", "default"]);
6455
- var IonicInputPropsSchema = z51.object({
6456
- fill: z51.enum(["solid", "outline"]).optional(),
6457
- shape: z51.literal("round").optional(),
6660
+ import { z as z53 } from "zod";
6661
+ var IonicColorSchema = z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger", "light", "medium", "dark"]);
6662
+ var IonicLabelPlacementSchema = z53.enum(["start", "end", "fixed", "stacked", "floating"]);
6663
+ var IonicJustifySchema = z53.enum(["start", "end", "space-between"]);
6664
+ var IonicFillSchema = z53.enum(["solid", "outline", "clear", "default"]);
6665
+ var IonicInputPropsSchema = z53.object({
6666
+ fill: z53.enum(["solid", "outline"]).optional(),
6667
+ shape: z53.literal("round").optional(),
6458
6668
  labelPlacement: IonicLabelPlacementSchema.optional(),
6459
6669
  color: IonicColorSchema.optional(),
6460
6670
  hint: DynamicTextSchema.optional(),
6461
6671
  errorText: DynamicTextSchema.optional(),
6462
- counter: z51.boolean().optional(),
6463
- clearInput: z51.boolean().optional(),
6464
- type: z51.enum(["text", "email", "password", "number", "tel", "url", "search"]).optional(),
6672
+ counter: z53.boolean().optional(),
6673
+ clearInput: z53.boolean().optional(),
6674
+ type: z53.enum(["text", "email", "password", "number", "tel", "url", "search"]).optional(),
6465
6675
  placeholder: DynamicTextSchema.optional()
6466
6676
  });
6467
- var IonicCheckboxPropsSchema = z51.object({
6468
- labelPlacement: z51.enum(["start", "end", "fixed", "stacked"]).optional(),
6677
+ var IonicCheckboxPropsSchema = z53.object({
6678
+ labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
6469
6679
  justify: IonicJustifySchema.optional(),
6470
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6471
- indeterminate: z51.boolean().optional(),
6680
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6681
+ indeterminate: z53.boolean().optional(),
6472
6682
  hint: DynamicTextSchema.optional()
6473
6683
  });
6474
- var IonicRadioPropsSchema = z51.object({
6475
- labelPlacement: z51.enum(["start", "end", "fixed", "stacked"]).optional(),
6684
+ var IonicRadioPropsSchema = z53.object({
6685
+ labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
6476
6686
  justify: IonicJustifySchema.optional(),
6477
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6687
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6478
6688
  hint: DynamicTextSchema.optional()
6479
6689
  });
6480
- var IonicTogglePropsSchema = z51.object({
6481
- labelPlacement: z51.enum(["start", "end", "fixed", "stacked"]).optional(),
6690
+ var IonicTogglePropsSchema = z53.object({
6691
+ labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
6482
6692
  justify: IonicJustifySchema.optional(),
6483
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6484
- enableOnOffLabels: z51.boolean().optional(),
6693
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6694
+ enableOnOffLabels: z53.boolean().optional(),
6485
6695
  hint: DynamicTextSchema.optional()
6486
6696
  });
6487
- var IonicSliderPropsSchema = z51.object({
6488
- min: z51.number().optional(),
6489
- max: z51.number().optional(),
6490
- step: z51.number().positive().optional(),
6491
- dualKnobs: z51.boolean().optional(),
6492
- pin: z51.boolean().optional(),
6493
- ticks: z51.boolean().optional(),
6494
- snaps: z51.boolean().optional(),
6495
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6496
- labelPlacement: z51.enum(["start", "end", "fixed", "stacked"]).optional(),
6697
+ var IonicSliderPropsSchema = z53.object({
6698
+ min: z53.number().optional(),
6699
+ max: z53.number().optional(),
6700
+ step: z53.number().positive().optional(),
6701
+ dualKnobs: z53.boolean().optional(),
6702
+ pin: z53.boolean().optional(),
6703
+ ticks: z53.boolean().optional(),
6704
+ snaps: z53.boolean().optional(),
6705
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6706
+ labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
6497
6707
  hint: DynamicTextSchema.optional()
6498
6708
  });
6499
- var IonicDatepickerPropsSchema = z51.object({
6500
- presentation: z51.enum(["date", "date-time", "time", "time-date", "month", "month-year", "year"]).optional(),
6501
- multiple: z51.boolean().optional(),
6502
- preferWheel: z51.boolean().optional(),
6503
- showDefaultButtons: z51.boolean().optional(),
6504
- showDefaultTitle: z51.boolean().optional(),
6505
- showDefaultTimeLabel: z51.boolean().optional(),
6506
- showClearButton: z51.boolean().optional(),
6507
- doneText: z51.string().optional(),
6508
- cancelText: z51.string().optional(),
6509
- size: z51.enum(["cover", "fixed"]).optional(),
6510
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6709
+ var IonicDatepickerPropsSchema = z53.object({
6710
+ presentation: z53.enum(["date", "date-time", "time", "time-date", "month", "month-year", "year"]).optional(),
6711
+ multiple: z53.boolean().optional(),
6712
+ preferWheel: z53.boolean().optional(),
6713
+ showDefaultButtons: z53.boolean().optional(),
6714
+ showDefaultTitle: z53.boolean().optional(),
6715
+ showDefaultTimeLabel: z53.boolean().optional(),
6716
+ showClearButton: z53.boolean().optional(),
6717
+ doneText: z53.string().optional(),
6718
+ cancelText: z53.string().optional(),
6719
+ size: z53.enum(["cover", "fixed"]).optional(),
6720
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6511
6721
  hint: DynamicTextSchema.optional(),
6512
6722
  placeholder: DynamicTextSchema.optional()
6513
6723
  });
6514
- var IonicSelectPropsSchema = z51.object({
6515
- multiple: z51.boolean().optional(),
6516
- interface: z51.enum(["action-sheet", "popover", "alert"]).optional(),
6517
- cancelText: z51.string().optional(),
6518
- okText: z51.string().optional(),
6724
+ var IonicSelectPropsSchema = z53.object({
6725
+ multiple: z53.boolean().optional(),
6726
+ interface: z53.enum(["action-sheet", "popover", "alert"]).optional(),
6727
+ cancelText: z53.string().optional(),
6728
+ okText: z53.string().optional(),
6519
6729
  placeholder: DynamicTextSchema.optional(),
6520
- fill: z51.enum(["solid", "outline"]).optional(),
6521
- shape: z51.literal("round").optional(),
6730
+ fill: z53.enum(["solid", "outline"]).optional(),
6731
+ shape: z53.literal("round").optional(),
6522
6732
  labelPlacement: IonicLabelPlacementSchema.optional(),
6523
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6733
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6524
6734
  hint: DynamicTextSchema.optional()
6525
6735
  });
6526
- var IonicTextareaPropsSchema = z51.object({
6527
- rows: z51.number().positive().optional(),
6528
- autoGrow: z51.boolean().optional(),
6529
- counter: z51.boolean().optional(),
6530
- fill: z51.enum(["solid", "outline"]).optional(),
6531
- shape: z51.literal("round").optional(),
6736
+ var IonicTextareaPropsSchema = z53.object({
6737
+ rows: z53.number().positive().optional(),
6738
+ autoGrow: z53.boolean().optional(),
6739
+ counter: z53.boolean().optional(),
6740
+ fill: z53.enum(["solid", "outline"]).optional(),
6741
+ shape: z53.literal("round").optional(),
6532
6742
  labelPlacement: IonicLabelPlacementSchema.optional(),
6533
6743
  hint: DynamicTextSchema.optional(),
6534
6744
  errorText: DynamicTextSchema.optional(),
6535
6745
  color: IonicColorSchema.optional(),
6536
6746
  placeholder: DynamicTextSchema.optional()
6537
6747
  });
6538
- var IonicMultiCheckboxPropsSchema = z51.object({
6539
- labelPlacement: z51.enum(["start", "end", "fixed", "stacked"]).optional(),
6748
+ var IonicMultiCheckboxPropsSchema = z53.object({
6749
+ labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
6540
6750
  justify: IonicJustifySchema.optional(),
6541
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6751
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6542
6752
  hint: DynamicTextSchema.optional()
6543
6753
  });
6544
- var IonicButtonPropsSchema = z51.object({
6545
- expand: z51.enum(["full", "block"]).optional(),
6754
+ var IonicButtonPropsSchema = z53.object({
6755
+ expand: z53.enum(["full", "block"]).optional(),
6546
6756
  fill: IonicFillSchema.optional(),
6547
- shape: z51.literal("round").optional(),
6548
- size: z51.enum(["small", "default", "large"]).optional(),
6757
+ shape: z53.literal("round").optional(),
6758
+ size: z53.enum(["small", "default", "large"]).optional(),
6549
6759
  color: IonicColorSchema.optional(),
6550
- strong: z51.boolean().optional(),
6551
- type: z51.enum(["button", "submit", "reset"]).optional()
6760
+ strong: z53.boolean().optional(),
6761
+ type: z53.enum(["button", "submit", "reset"]).optional()
6552
6762
  });
6553
6763
 
6554
6764
  // internal/dynamic-forms-validation/ionic/src/fields/index.ts
6555
- import { z as z52 } from "zod";
6765
+ import { z as z54 } from "zod";
6556
6766
  var IonicValueFieldBase = BaseFieldDefSchema.merge(FieldWithValidationSchema);
6557
6767
  var IonicInputFieldSchemaObject = IonicValueFieldBase.extend({
6558
- type: z52.literal("input"),
6559
- nullable: z52.boolean().optional(),
6560
- value: z52.string().nullable().optional(),
6768
+ type: z54.literal("input"),
6769
+ nullable: z54.boolean().optional(),
6770
+ value: z54.string().nullable().optional(),
6561
6771
  placeholder: DynamicTextSchema.optional(),
6562
6772
  props: IonicInputPropsSchema.optional()
6563
6773
  });
6564
6774
  var IonicInputFieldSchema = IonicInputFieldSchemaObject.superRefine(nullableValueRefine);
6565
6775
  var IonicCheckboxFieldSchema = IonicValueFieldBase.extend({
6566
- type: z52.literal("checkbox"),
6567
- value: z52.boolean().optional(),
6776
+ type: z54.literal("checkbox"),
6777
+ value: z54.boolean().optional(),
6568
6778
  placeholder: DynamicTextSchema.optional(),
6569
6779
  props: IonicCheckboxPropsSchema.optional()
6570
6780
  });
6571
6781
  var IonicRadioFieldSchemaObject = IonicValueFieldBase.extend({
6572
- type: z52.literal("radio"),
6573
- nullable: z52.boolean().optional(),
6574
- value: z52.unknown().nullable().optional(),
6782
+ type: z54.literal("radio"),
6783
+ nullable: z54.boolean().optional(),
6784
+ value: z54.unknown().nullable().optional(),
6575
6785
  placeholder: DynamicTextSchema.optional(),
6576
6786
  options: FieldOptionsSchema,
6577
6787
  props: IonicRadioPropsSchema.optional()
6578
6788
  });
6579
6789
  var IonicRadioFieldSchema = IonicRadioFieldSchemaObject.superRefine(nullableValueRefine);
6580
6790
  var IonicToggleFieldSchema = IonicValueFieldBase.extend({
6581
- type: z52.literal("toggle"),
6582
- value: z52.boolean().optional(),
6791
+ type: z54.literal("toggle"),
6792
+ value: z54.boolean().optional(),
6583
6793
  placeholder: DynamicTextSchema.optional(),
6584
6794
  props: IonicTogglePropsSchema.optional()
6585
6795
  });
6586
6796
  var IonicSliderFieldSchemaObject = IonicValueFieldBase.extend({
6587
- type: z52.literal("slider"),
6588
- nullable: z52.boolean().optional(),
6589
- value: z52.number().nullable().optional(),
6590
- minValue: z52.number().optional(),
6591
- maxValue: z52.number().optional(),
6592
- step: z52.number().positive().optional(),
6797
+ type: z54.literal("slider"),
6798
+ nullable: z54.boolean().optional(),
6799
+ value: z54.number().nullable().optional(),
6800
+ minValue: z54.number().optional(),
6801
+ maxValue: z54.number().optional(),
6802
+ step: z54.number().positive().optional(),
6593
6803
  placeholder: DynamicTextSchema.optional(),
6594
6804
  props: IonicSliderPropsSchema.optional()
6595
6805
  });
6596
6806
  var IonicSliderFieldSchema = IonicSliderFieldSchemaObject.superRefine(nullableValueRefine);
6597
6807
  var IonicDatepickerFieldSchemaObject = IonicValueFieldBase.extend({
6598
- type: z52.literal("datepicker"),
6599
- nullable: z52.boolean().optional(),
6600
- value: z52.union([z52.string(), z52.null()]).optional(),
6601
- minDate: z52.union([z52.string(), z52.null()]).optional(),
6602
- maxDate: z52.union([z52.string(), z52.null()]).optional(),
6603
- startAt: z52.union([z52.string(), z52.null()]).optional(),
6808
+ type: z54.literal("datepicker"),
6809
+ nullable: z54.boolean().optional(),
6810
+ value: z54.union([z54.string(), z54.null()]).optional(),
6811
+ minDate: z54.union([z54.string(), z54.null()]).optional(),
6812
+ maxDate: z54.union([z54.string(), z54.null()]).optional(),
6813
+ startAt: z54.union([z54.string(), z54.null()]).optional(),
6604
6814
  placeholder: DynamicTextSchema.optional(),
6605
6815
  props: IonicDatepickerPropsSchema.optional()
6606
6816
  });
6607
6817
  var IonicDatepickerFieldSchema = IonicDatepickerFieldSchemaObject.superRefine(nullableValueRefine);
6608
6818
  var IonicSelectFieldSchemaObject = IonicValueFieldBase.extend({
6609
- type: z52.literal("select"),
6610
- nullable: z52.boolean().optional(),
6611
- value: z52.unknown().nullable().optional(),
6819
+ type: z54.literal("select"),
6820
+ nullable: z54.boolean().optional(),
6821
+ value: z54.unknown().nullable().optional(),
6612
6822
  placeholder: DynamicTextSchema.optional(),
6613
6823
  options: FieldOptionsSchema,
6614
6824
  props: IonicSelectPropsSchema.optional()
6615
6825
  });
6616
6826
  var IonicSelectFieldSchema = IonicSelectFieldSchemaObject.superRefine(nullableValueRefine);
6617
6827
  var IonicTextareaFieldSchemaObject = IonicValueFieldBase.extend({
6618
- type: z52.literal("textarea"),
6619
- nullable: z52.boolean().optional(),
6620
- value: z52.string().nullable().optional(),
6828
+ type: z54.literal("textarea"),
6829
+ nullable: z54.boolean().optional(),
6830
+ value: z54.string().nullable().optional(),
6621
6831
  placeholder: DynamicTextSchema.optional(),
6622
6832
  props: IonicTextareaPropsSchema.optional()
6623
6833
  });
6624
6834
  var IonicTextareaFieldSchema = IonicTextareaFieldSchemaObject.superRefine(nullableValueRefine);
6625
6835
  var IonicMultiCheckboxFieldSchemaObject = IonicValueFieldBase.extend({
6626
- type: z52.literal("multi-checkbox"),
6627
- nullable: z52.boolean().optional(),
6628
- value: z52.array(z52.unknown()).nullable().optional(),
6836
+ type: z54.literal("multi-checkbox"),
6837
+ nullable: z54.boolean().optional(),
6838
+ value: z54.array(z54.unknown()).nullable().optional(),
6629
6839
  placeholder: DynamicTextSchema.optional(),
6630
6840
  options: FieldOptionsSchema,
6631
6841
  props: IonicMultiCheckboxPropsSchema.optional()
6632
6842
  });
6633
6843
  var IonicMultiCheckboxFieldSchema = IonicMultiCheckboxFieldSchemaObject.superRefine(nullableValueRefine);
6634
6844
  var IonicButtonFieldSchema = BaseFieldDefSchema.extend({
6635
- type: z52.literal("button"),
6636
- event: z52.string().optional(),
6637
- eventArgs: z52.array(z52.union([z52.string(), z52.number(), z52.boolean(), z52.null(), z52.undefined()])).optional(),
6845
+ type: z54.literal("button"),
6846
+ event: z54.string().optional(),
6847
+ eventArgs: z54.array(z54.union([z54.string(), z54.number(), z54.boolean(), z54.null(), z54.undefined()])).optional(),
6638
6848
  props: IonicButtonPropsSchema.optional(),
6639
6849
  logic: LogicArraySchema.optional()
6640
6850
  });
6641
6851
  var IonicSubmitButtonFieldSchema = BaseFieldDefSchema.extend({
6642
- type: z52.literal("submit"),
6852
+ type: z54.literal("submit"),
6643
6853
  props: IonicButtonPropsSchema.optional(),
6644
6854
  logic: LogicArraySchema.optional()
6645
6855
  });
6646
6856
  var IonicNextButtonFieldSchema = BaseFieldDefSchema.extend({
6647
- type: z52.literal("next"),
6857
+ type: z54.literal("next"),
6648
6858
  props: IonicButtonPropsSchema.optional(),
6649
6859
  logic: LogicArraySchema.optional()
6650
6860
  });
6651
6861
  var IonicPreviousButtonFieldSchema = BaseFieldDefSchema.extend({
6652
- type: z52.literal("previous"),
6862
+ type: z54.literal("previous"),
6653
6863
  props: IonicButtonPropsSchema.optional()
6654
6864
  });
6655
6865
  var IonicAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6656
- type: z52.literal("add-array-item"),
6657
- arrayKey: z52.string().optional(),
6866
+ /**
6867
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6868
+ * item, or a list of them for an object item.
6869
+ */
6870
+ template: ArrayItemTemplateSchema,
6871
+ type: z54.literal("add-array-item"),
6872
+ arrayKey: z54.string().optional(),
6658
6873
  props: IonicButtonPropsSchema.optional()
6659
6874
  });
6660
6875
  var IonicRemoveArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6661
- type: z52.literal("remove-array-item"),
6662
- arrayKey: z52.string().optional(),
6876
+ type: z54.literal("remove-array-item"),
6877
+ arrayKey: z54.string().optional(),
6663
6878
  props: IonicButtonPropsSchema.optional()
6664
6879
  });
6665
6880
  var IonicPrependArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6666
- type: z52.literal("prepend-array-item"),
6667
- arrayKey: z52.string().optional(),
6881
+ /**
6882
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6883
+ * item, or a list of them for an object item.
6884
+ */
6885
+ template: ArrayItemTemplateSchema,
6886
+ type: z54.literal("prepend-array-item"),
6887
+ arrayKey: z54.string().optional(),
6668
6888
  props: IonicButtonPropsSchema.optional()
6669
6889
  });
6670
6890
  var IonicInsertArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6671
- type: z52.literal("insert-array-item"),
6672
- arrayKey: z52.string().optional(),
6673
- index: z52.number(),
6891
+ /**
6892
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6893
+ * item, or a list of them for an object item.
6894
+ */
6895
+ template: ArrayItemTemplateSchema,
6896
+ type: z54.literal("insert-array-item"),
6897
+ arrayKey: z54.string().optional(),
6898
+ index: z54.number(),
6674
6899
  props: IonicButtonPropsSchema.optional()
6675
6900
  });
6676
6901
  var IonicPopArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6677
- type: z52.literal("pop-array-item"),
6678
- arrayKey: z52.string(),
6902
+ type: z54.literal("pop-array-item"),
6903
+ arrayKey: z54.string(),
6679
6904
  props: IonicButtonPropsSchema.optional()
6680
6905
  });
6681
6906
  var IonicShiftArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6682
- type: z52.literal("shift-array-item"),
6683
- arrayKey: z52.string(),
6907
+ type: z54.literal("shift-array-item"),
6908
+ arrayKey: z54.string(),
6684
6909
  props: IonicButtonPropsSchema.optional()
6685
6910
  });
6686
6911
 
6687
6912
  // internal/dynamic-forms-validation/ionic/src/ionic-leaf-field.schema.ts
6688
- import { z as z53 } from "zod";
6689
- var IonicLeafFieldSchema = z53.discriminatedUnion("type", [
6913
+ import { z as z55 } from "zod";
6914
+ var IonicLeafFieldSchema = z55.discriminatedUnion("type", [
6690
6915
  TextFieldSchema,
6691
6916
  HiddenFieldSchema,
6692
6917
  IonicInputFieldSchemaObject,
@@ -6711,7 +6936,7 @@ var IonicLeafFieldSchema = z53.discriminatedUnion("type", [
6711
6936
  ]).superRefine(nullableValueRefine);
6712
6937
 
6713
6938
  // internal/dynamic-forms-validation/ionic/src/ionic-form-config.schema.ts
6714
- import { z as z54 } from "zod";
6939
+ import { z as z56 } from "zod";
6715
6940
  var containerSchemas4 = createContainerSchemas({
6716
6941
  leafFieldSchema: IonicLeafFieldSchema
6717
6942
  });
@@ -6720,7 +6945,7 @@ var IonicRowFieldSchema = containerSchemas4.RowFieldSchema;
6720
6945
  var IonicGroupFieldSchema = containerSchemas4.GroupFieldSchema;
6721
6946
  var IonicArrayFieldSchema = containerSchemas4.ArrayFieldSchema;
6722
6947
  var IonicFieldSchema = containerSchemas4.AllFieldsSchema;
6723
- var IonicFormDefaultPropsSchema = z54.object({
6948
+ var IonicFormDefaultPropsSchema = z56.object({
6724
6949
  color: IonicColorSchema.optional(),
6725
6950
  labelPlacement: IonicLabelPlacementSchema.optional()
6726
6951
  });
@@ -6728,7 +6953,7 @@ var IonicFormConfigSchema = createFormConfigSchema(IonicFieldSchema, IonicFormDe
6728
6953
 
6729
6954
  // internal/dynamic-forms-validation/validate/src/json-schema/form-config-json-schema.ts
6730
6955
  function toJsonSchema(schema, name, basePath) {
6731
- const jsonSchema = z55.toJSONSchema(schema, { target: "draft-7", io: "input", unrepresentable: "any" });
6956
+ const jsonSchema = z57.toJSONSchema(schema, { target: "draft-7", io: "input", unrepresentable: "any" });
6732
6957
  jsonSchema["$id"] = basePath ? `${basePath.replace(/\/$/, "")}/${name}` : name;
6733
6958
  return jsonSchema;
6734
6959
  }
@@ -6826,30 +7051,30 @@ function getFieldTypeJsonSchema(uiIntegration, fieldType) {
6826
7051
  }
6827
7052
 
6828
7053
  // internal/dynamic-forms-validation/src/lib/schemas/field-type-names.ts
6829
- import { z as z56 } from "zod";
7054
+ import { z as z58 } from "zod";
6830
7055
  var MAX_DEPTH = 20;
6831
7056
  function collectDiscriminator(schema, into) {
6832
- if (schema instanceof z56.ZodLiteral) {
7057
+ if (schema instanceof z58.ZodLiteral) {
6833
7058
  for (const value of schema.def.values) {
6834
7059
  if (typeof value === "string") into.add(value);
6835
7060
  }
6836
7061
  return;
6837
7062
  }
6838
- if (schema instanceof z56.ZodEnum) {
7063
+ if (schema instanceof z58.ZodEnum) {
6839
7064
  for (const value of schema.options) into.add(value);
6840
7065
  }
6841
7066
  }
6842
7067
  function visit(schema, into, depth) {
6843
7068
  if (depth > MAX_DEPTH) return;
6844
- if (schema instanceof z56.ZodLazy) {
7069
+ if (schema instanceof z58.ZodLazy) {
6845
7070
  visit(schema.unwrap(), into, depth + 1);
6846
7071
  return;
6847
7072
  }
6848
- if (schema instanceof z56.ZodUnion) {
7073
+ if (schema instanceof z58.ZodUnion) {
6849
7074
  for (const option of schema.options) visit(option, into, depth + 1);
6850
7075
  return;
6851
7076
  }
6852
- if (schema instanceof z56.ZodObject) {
7077
+ if (schema instanceof z58.ZodObject) {
6853
7078
  collectDiscriminator(schema.shape["type"], into);
6854
7079
  return;
6855
7080
  }
@@ -7065,15 +7290,21 @@ var VALIDATING_CONTAINERS = ["group", "array"];
7065
7290
  var CONTAINER_VALIDATION_PROPS = ["validators", "required", "validationMessages"];
7066
7291
  var ARRAY_SIZE_PROPS = ["minLength", "maxLength"];
7067
7292
  var FIELDS_REQUIRING_OPTIONS = ["select", "radio", "multi-checkbox"];
7293
+ var CONTAINER_NESTING = {
7294
+ forbidden: ["page"],
7295
+ message: "Containers and rows cannot contain pages. ALL top-level fields must be pages if using multi-page mode."
7296
+ };
7068
7297
  var NESTING_RULES = {
7069
7298
  page: {
7070
7299
  forbidden: ["page"],
7071
7300
  message: "Pages cannot be nested inside other containers. ALL top-level fields must be pages if using multi-page mode."
7072
7301
  },
7073
- row: {
7074
- forbidden: ["page", "row", "hidden"],
7075
- message: "Rows cannot contain pages, other rows, or hidden fields. Hidden fields should be at page or form level."
7076
- },
7302
+ container: CONTAINER_NESTING,
7303
+ // A row resolves to a container at runtime, and the types say so outright:
7304
+ // `RowAllowedChildren` is an alias of `ContainerAllowedChildren`. Sharing the
7305
+ // entry keeps that an alias here too, rather than a fifth copy of the list
7306
+ // that can drift from the type it is derived from.
7307
+ row: CONTAINER_NESTING,
7077
7308
  group: {
7078
7309
  forbidden: ["page", "group"],
7079
7310
  message: "Groups cannot contain pages or other groups (no nested groups)."
@@ -7081,10 +7312,6 @@ var NESTING_RULES = {
7081
7312
  array: {
7082
7313
  forbidden: ["page", "array"],
7083
7314
  message: "Arrays cannot contain pages or other arrays (no nested arrays)."
7084
- },
7085
- container: {
7086
- forbidden: ["page"],
7087
- message: "Containers cannot contain pages. Pages are top-level fields only."
7088
7315
  }
7089
7316
  };
7090
7317
  var EXPECTED_STRUCTURE = {
@@ -7093,11 +7320,11 @@ var EXPECTED_STRUCTURE = {
7093
7320
  radio: `{ key: 'fieldKey', type: 'radio', label: 'Label', options: [{ label: 'Option', value: 'value' }] }`,
7094
7321
  "multi-checkbox": `{ key: 'fieldKey', type: 'multi-checkbox', label: 'Label', options: [{ label: 'Option', value: 'value' }] }`,
7095
7322
  slider: `{ key: 'fieldKey', type: 'slider', label: 'Label', minValue: 0, maxValue: 100, step: 1 }`,
7323
+ container: `{ key: 'containerKey', type: 'container', wrappers: [{ type: 'css', cssClasses: 'card' }], fields: [...childFields] }`,
7096
7324
  row: `{ key: 'rowKey', type: 'row', fields: [...childFields] }`,
7097
7325
  group: `{ key: 'groupKey', type: 'group', fields: [...childFields] }`,
7098
7326
  array: `Full API: { key: 'arrayKey', type: 'array', fields: [...itemDefs] } OR Simplified API: { key: 'arrayKey', type: 'array', template: { type: 'input', label: 'Item' }, value: [] }`,
7099
- page: `{ key: 'pageKey', type: 'page', fields: [...childFields, { key: 'next', type: 'next', label: 'Next' }] }`,
7100
- container: `{ key: 'containerKey', type: 'container', wrappers: [{ type: 'css', cssClasses: 'card' }], fields: [...childFields] }`
7327
+ page: `{ key: 'pageKey', type: 'page', fields: [...childFields, { key: 'next', type: 'next', label: 'Next' }] }`
7101
7328
  };
7102
7329
  function preValidateConfig(config) {
7103
7330
  const errors = [];
@@ -7135,6 +7362,7 @@ function preValidateConfig(config) {
7135
7362
  if (prop in v) {
7136
7363
  errors.push({
7137
7364
  path: `${path}.validators[${vIdx}].${prop}`,
7365
+ ruleId: "core/validation-messages-location",
7138
7366
  message: `"${prop}" is NOT a valid validator property. Error messages go in "validationMessages" at the FIELD level, not on the validator config. Use "kind" to specify an error key, then define the message in the field's validationMessages.`
7139
7367
  });
7140
7368
  }
@@ -7227,6 +7455,7 @@ function preValidateConfig(config) {
7227
7455
  if (fieldType && rules.forbidden.includes(fieldType)) {
7228
7456
  errors.push({
7229
7457
  path,
7458
+ ruleId: "core/nesting",
7230
7459
  message: `"${fieldType}" is NOT allowed inside "${parentType}". ${rules.message}`
7231
7460
  });
7232
7461
  }
@@ -7275,6 +7504,7 @@ function preValidateConfig(config) {
7275
7504
  if (wrongProps.length > 0) {
7276
7505
  errors.push({
7277
7506
  path: `${path}.props`,
7507
+ ruleId: "core/slider-range-properties",
7278
7508
  message: `Slider has properties in wrong location: ${wrongProps.join(", ")}. For sliders, use minValue, maxValue, and step at FIELD level, not inside props. Expected structure: ${EXPECTED_STRUCTURE["slider"]}`
7279
7509
  });
7280
7510
  }
@@ -7297,6 +7527,7 @@ function preValidateConfig(config) {
7297
7527
  const propList = foundForbidden.map((p) => `"${p}"`).join(", ");
7298
7528
  errors.push({
7299
7529
  path,
7530
+ ruleId: "core/hidden-minimal",
7300
7531
  message: `Hidden field "${fieldKey || "unknown"}" has FORBIDDEN properties: ${propList}. Hidden fields ONLY support: key, type, value, className. They do not render and cannot be validated. Expected structure: ${EXPECTED_STRUCTURE["hidden"]}`
7301
7532
  });
7302
7533
  }
@@ -7390,7 +7621,13 @@ function normalizeLegacyArrayActionTypes(value) {
7390
7621
  }
7391
7622
  return value;
7392
7623
  }
7393
- function validateFormConfig(uiIntegration, config) {
7624
+ function applyDisabledRules(errors, disabled) {
7625
+ if (disabled.size === 0) return errors;
7626
+ return errors.map(
7627
+ (error) => error.ruleId && disabled.has(error.ruleId) ? { ...error, severity: "warning" } : { ...error, severity: "error" }
7628
+ );
7629
+ }
7630
+ function validateFormConfig(uiIntegration, config, options) {
7394
7631
  const schema = formConfigSchemas[uiIntegration];
7395
7632
  if (!schema) {
7396
7633
  return {
@@ -7414,11 +7651,15 @@ function validateFormConfig(uiIntegration, config) {
7414
7651
  };
7415
7652
  }
7416
7653
  const zodErrors = result.success ? [] : formatZodError(result.error, uiIntegration, normalizedConfig);
7417
- const allErrors = [...preErrors, ...zodErrors];
7654
+ const allErrors = applyDisabledRules([...preErrors, ...zodErrors], options?.disabledRules ?? /* @__PURE__ */ new Set());
7655
+ const blocking = allErrors.filter((error) => error.severity !== "warning");
7656
+ if (blocking.length === 0) {
7657
+ return { valid: true, data: result.success ? result.data : void 0, errors: allErrors };
7658
+ }
7418
7659
  return {
7419
7660
  valid: false,
7420
7661
  errors: allErrors,
7421
- errorSummary: generateErrorSummary(allErrors)
7662
+ errorSummary: generateErrorSummary(blocking)
7422
7663
  };
7423
7664
  }
7424
7665
 
@@ -7797,7 +8038,7 @@ function extractNode(node, path, warnings, errors) {
7797
8038
 
7798
8039
  // internal/dynamic-forms-validation/discovery/validate-file.ts
7799
8040
  import { readFile } from "node:fs/promises";
7800
- function validateSource(source, filePath, uiIntegration) {
8041
+ function validateSource(source, filePath, uiIntegration, options) {
7801
8042
  const sourceFile = createSourceFile(source, filePath);
7802
8043
  const candidates = findFormConfigCandidates(sourceFile);
7803
8044
  const results = candidates.map((candidate) => {
@@ -7807,7 +8048,7 @@ function validateSource(source, filePath, uiIntegration) {
7807
8048
  line: candidate.startLine,
7808
8049
  matchReason: candidate.matchReason,
7809
8050
  extraction,
7810
- validation: validateFormConfig(uiIntegration, extraction.value)
8051
+ validation: validateFormConfig(uiIntegration, extraction.value, options)
7811
8052
  };
7812
8053
  });
7813
8054
  return {
@@ -7816,12 +8057,16 @@ function validateSource(source, filePath, uiIntegration) {
7816
8057
  results,
7817
8058
  noConfigsFound: results.length === 0,
7818
8059
  valid: results.every((r) => r.validation.valid),
7819
- errorCount: results.reduce((sum, r) => sum + (r.validation.errors?.length ?? 0), 0)
8060
+ // Errors only. A finding downgraded to a warning by a disabled rule does
8061
+ // not block, so counting it here reported "1 error" on a file the same run
8062
+ // called valid.
8063
+ errorCount: results.reduce((sum, r) => sum + (r.validation.errors ?? []).filter((e) => e.severity !== "warning").length, 0),
8064
+ warningCount: results.reduce((sum, r) => sum + (r.validation.errors ?? []).filter((e) => e.severity === "warning").length, 0)
7820
8065
  };
7821
8066
  }
7822
- async function validateFile(filePath, uiIntegration) {
8067
+ async function validateFile(filePath, uiIntegration, options) {
7823
8068
  const source = await readFile(filePath, "utf-8");
7824
- return validateSource(source, filePath, uiIntegration);
8069
+ return validateSource(source, filePath, uiIntegration, options);
7825
8070
  }
7826
8071
  function isFilePath(value) {
7827
8072
  return value.startsWith("/") || value.startsWith("./") || value.startsWith("../") || value.startsWith("~") || /^[a-zA-Z]:\\/.test(value) || value.endsWith(".ts") || value.endsWith(".js") || value.endsWith(".tsx") || value.endsWith(".jsx");
@@ -7898,6 +8143,21 @@ function pushErrors(lines, errors) {
7898
8143
  }
7899
8144
  }
7900
8145
  }
8146
+ function isWarning(error) {
8147
+ return error.severity === "warning";
8148
+ }
8149
+ function pushWarnings(lines, warnings) {
8150
+ if (warnings.length === 0) {
8151
+ return;
8152
+ }
8153
+ lines.push(`### ${warnings.length} Warning(s)`);
8154
+ lines.push("");
8155
+ for (const { name, error } of warnings) {
8156
+ const rule2 = error.ruleId ? ` (${error.ruleId}, disabled)` : "";
8157
+ lines.push(`- **${name}** \`${error.path}\`${rule2}: ${error.message}`);
8158
+ }
8159
+ lines.push("");
8160
+ }
7901
8161
  function pushRelatedDocs(lines, errors, options) {
7902
8162
  const hints = options?.relatedDocs?.(errors) ?? [];
7903
8163
  if (hints.length === 0) {
@@ -7945,30 +8205,35 @@ function formatFileReport(result, options) {
7945
8205
  }
7946
8206
  lines.push("");
7947
8207
  }
8208
+ const warnings = result.results.flatMap(
8209
+ (entry) => (entry.validation.errors ?? []).filter(isWarning).map((error) => ({ name: entry.name, error }))
8210
+ );
7948
8211
  if (result.valid) {
7949
8212
  lines.push("### All Configs Valid");
7950
8213
  lines.push("");
7951
8214
  for (const entry of result.results) {
7952
8215
  lines.push(`- **${entry.name}** (line ${entry.line}): Valid`);
7953
8216
  }
7954
- return lines.join("\n");
8217
+ lines.push("");
8218
+ pushWarnings(lines, warnings);
8219
+ return lines.join("\n").trimEnd();
7955
8220
  }
7956
8221
  lines.push(`### ${result.errorCount} Error(s) Found`);
7957
8222
  lines.push("");
7958
8223
  const allErrors = [];
7959
8224
  for (const entry of result.results) {
7960
- if (entry.validation.valid) {
8225
+ const blocking = (entry.validation.errors ?? []).filter((error) => !isWarning(error));
8226
+ if (blocking.length === 0) {
7961
8227
  lines.push(`#### ${entry.name} (line ${entry.line}): Valid`);
7962
8228
  } else {
7963
8229
  lines.push(`#### ${entry.name} (line ${entry.line}): Invalid`);
7964
8230
  lines.push("");
7965
- if (entry.validation.errors) {
7966
- pushErrors(lines, entry.validation.errors);
7967
- allErrors.push(...entry.validation.errors);
7968
- }
8231
+ pushErrors(lines, blocking);
8232
+ allErrors.push(...blocking);
7969
8233
  }
7970
8234
  lines.push("");
7971
8235
  }
8236
+ pushWarnings(lines, warnings);
7972
8237
  pushRelatedDocs(lines, allErrors, options);
7973
8238
  return lines.join("\n");
7974
8239
  }
@@ -7993,6 +8258,95 @@ function formatConfigReport(uiIntegration, validation, options) {
7993
8258
  return lines.join("\n");
7994
8259
  }
7995
8260
 
8261
+ // internal/dynamic-forms-validation/rules/catalogue.ts
8262
+ function rule(id, summary, why) {
8263
+ return { id, summary, why };
8264
+ }
8265
+ var RULES = Object.freeze(
8266
+ Object.fromEntries(
8267
+ [
8268
+ rule(
8269
+ "core/hidden-minimal",
8270
+ "Keep hidden fields to `key`, `type`, `value` and `className`",
8271
+ "Hidden fields render nothing, so labels, validation and layout properties on them have no effect and mislead the next reader."
8272
+ ),
8273
+ rule(
8274
+ "core/nesting",
8275
+ "Respect which field types may nest inside which",
8276
+ "A page inside a row, or an array inside an array, has no rendering path and fails at runtime rather than at build time."
8277
+ ),
8278
+ rule(
8279
+ "core/validation-messages-location",
8280
+ "Put error text in `validationMessages`, not on the validator",
8281
+ "A message on the validator object is dropped and the field falls back to the default text."
8282
+ ),
8283
+ rule(
8284
+ "core/slider-range-properties",
8285
+ "Use `minValue`, `maxValue` and `step` for a slider range",
8286
+ "`min` and `max` are validation shorthands. They typecheck and validate clean, and the slider still renders its default range, so nothing catches the mistake."
8287
+ )
8288
+ ].map((entry) => [entry.id, entry])
8289
+ )
8290
+ );
8291
+ var RULE_IDS = Object.freeze(Object.keys(RULES).sort());
8292
+ var UnknownRuleError = class extends Error {
8293
+ constructor(unknown) {
8294
+ super(
8295
+ `[Dynamic Forms] unknown rule id(s): ${unknown.join(", ")}. A rule that does not exist cannot be disabled, and silently ignoring it would leave you believing a rule is off when it is not. Known ids: ${RULE_IDS.join(", ")}.`
8296
+ );
8297
+ this.name = "UnknownRuleError";
8298
+ }
8299
+ };
8300
+ function resolveDisabledRules(disabled) {
8301
+ const unknown = disabled.filter((id) => !RULES[id]);
8302
+ if (unknown.length > 0) throw new UnknownRuleError(unknown);
8303
+ return new Set(disabled);
8304
+ }
8305
+
8306
+ // internal/dynamic-forms-validation/rules/project-rules.ts
8307
+ import { readFile as readFile2 } from "node:fs/promises";
8308
+ import { dirname, join } from "node:path";
8309
+ var RULES_FILE = join(".ng-forge", "rules.json");
8310
+ var RulesConfigError = class extends Error {
8311
+ constructor(path, detail) {
8312
+ super(`[Dynamic Forms] ${path}: ${detail}`);
8313
+ this.name = "RulesConfigError";
8314
+ }
8315
+ };
8316
+ function errorCode(cause) {
8317
+ return typeof cause === "object" && cause !== null && "code" in cause ? String(cause.code) : void 0;
8318
+ }
8319
+ async function loadProjectRules(packageJsonPath) {
8320
+ if (!packageJsonPath) return { disabled: /* @__PURE__ */ new Set() };
8321
+ const path = join(dirname(packageJsonPath), RULES_FILE);
8322
+ let raw;
8323
+ try {
8324
+ raw = await readFile2(path, "utf-8");
8325
+ } catch (cause) {
8326
+ const code = errorCode(cause);
8327
+ if (code === "ENOENT") return { disabled: /* @__PURE__ */ new Set() };
8328
+ throw new RulesConfigError(path, `cannot be read (${code ?? cause.message})`);
8329
+ }
8330
+ let parsed;
8331
+ try {
8332
+ parsed = JSON.parse(raw);
8333
+ } catch (cause) {
8334
+ throw new RulesConfigError(path, `not valid JSON (${cause.message})`);
8335
+ }
8336
+ if (parsed === null || typeof parsed !== "object") {
8337
+ throw new RulesConfigError(path, "must be a JSON object");
8338
+ }
8339
+ const disabled = parsed.disabled ?? [];
8340
+ if (!Array.isArray(disabled) || disabled.some((id) => typeof id !== "string")) {
8341
+ throw new RulesConfigError(path, '"disabled" must be an array of rule ids');
8342
+ }
8343
+ try {
8344
+ return { disabled: resolveDisabledRules(disabled), source: path };
8345
+ } catch (cause) {
8346
+ throw new RulesConfigError(path, cause.message.replace("[Dynamic Forms] ", ""));
8347
+ }
8348
+ }
8349
+
7996
8350
  // packages/dynamic-form-mcp/src/resources/schemas.resource.ts
7997
8351
  var UI_INTEGRATIONS = ["material", "bootstrap", "primeng", "ionic"];
7998
8352
  function registerSchemasResource(server) {
@@ -8161,7 +8515,7 @@ function registerResources(server) {
8161
8515
  }
8162
8516
 
8163
8517
  // packages/dynamic-form-mcp/src/tools/lookup.tool.ts
8164
- import { z as z57 } from "zod";
8518
+ import { z as z59 } from "zod";
8165
8519
 
8166
8520
  // packages/dynamic-form-mcp/src/tools/data/lookup-topics.ts
8167
8521
  var TOPICS = {
@@ -11471,11 +11825,11 @@ Patterns: field-placement, logic-matrix, context-api, containers, multi-page-got
11471
11825
  Use topic="list" to see all available topics with descriptions.
11472
11826
  Use ngforge_search query="your question" to find topics by keyword.`,
11473
11827
  {
11474
- topic: z57.string().describe(
11828
+ topic: z59.string().describe(
11475
11829
  'Topic to look up: field types (input, select, hidden, group, row, array, container, page), wrappers (wrappers, css, section, arraySection), concepts (validation, conditional, derivation, property-derivation, options-format), patterns (golden-path, pitfalls, multi-page-gotchas), or "list" to see all topics'
11476
11830
  ),
11477
- depth: z57.enum(["brief", "full", "schema"]).default("full").describe("brief=quick syntax (~20 lines), full=complete docs with examples, schema=include JSON schema"),
11478
- uiIntegration: z57.enum(UI_INTEGRATIONS2).optional().describe("Filter UI-specific info (only with depth=schema). material, bootstrap, primeng, ionic")
11831
+ depth: z59.enum(["brief", "full", "schema"]).default("full").describe("brief=quick syntax (~20 lines), full=complete docs with examples, schema=include JSON schema"),
11832
+ uiIntegration: z59.enum(UI_INTEGRATIONS2).optional().describe("Filter UI-specific info (only with depth=schema). material, bootstrap, primeng, ionic")
11479
11833
  },
11480
11834
  async ({ topic, depth, uiIntegration }) => {
11481
11835
  const normalizedTopic = topic.toLowerCase().trim();
@@ -11523,7 +11877,7 @@ ${nextSteps}`;
11523
11877
  }
11524
11878
 
11525
11879
  // packages/dynamic-form-mcp/src/tools/examples.tool.ts
11526
- import { z as z58 } from "zod";
11880
+ import { z as z60 } from "zod";
11527
11881
  var PATTERNS = {
11528
11882
  // ========== MINIMAL PATTERNS (NEW) ==========
11529
11883
  "minimal-multipage": {
@@ -13788,10 +14142,10 @@ Standard patterns: derivation, property-derivation, multi-page, conditional, val
13788
14142
  Use pattern="list" to see all available patterns.
13789
14143
  Use depth="minimal" for code-only output (no markdown).`,
13790
14144
  {
13791
- pattern: z58.string().optional().describe(
14145
+ pattern: z60.string().optional().describe(
13792
14146
  'Pattern to get: minimal-multipage, minimal-array, minimal-simplified-array, minimal-conditional, minimal-validation, minimal-hidden, derivation, property-derivation, multi-page, conditional, validation, complete, mega. Use "list" to see all.'
13793
14147
  ),
13794
- depth: z58.enum(["minimal", "brief", "full", "explained"]).default("full").describe(
14148
+ depth: z60.enum(["minimal", "brief", "full", "explained"]).default("full").describe(
13795
14149
  "minimal=code only (~20-50 lines), brief=code+summary, full=code+comments (default), explained=code+detailed explanation"
13796
14150
  )
13797
14151
  },
@@ -13856,8 +14210,29 @@ function extractCode(markdown) {
13856
14210
  }
13857
14211
 
13858
14212
  // packages/dynamic-form-mcp/src/tools/validate.tool.ts
13859
- import { z as z59 } from "zod";
14213
+ import { access } from "node:fs/promises";
14214
+ import { dirname as dirname2, join as join2, parse, resolve } from "node:path";
14215
+ import { z as z61 } from "zod";
13860
14216
  var UI_INTEGRATIONS3 = ["material", "bootstrap", "primeng", "ionic"];
14217
+ async function projectDisabledRules(filePath) {
14218
+ return (await loadProjectRules(await nearestManifest(dirname2(filePath)))).disabled;
14219
+ }
14220
+ function countBySeverity(errors, severity) {
14221
+ return (errors ?? []).filter((error) => (error.severity ?? "error") === severity).length;
14222
+ }
14223
+ async function nearestManifest(start) {
14224
+ const from = resolve(start);
14225
+ const { root } = parse(from);
14226
+ for (let dir = from; ; dir = dirname2(dir)) {
14227
+ const candidate = join2(dir, "package.json");
14228
+ try {
14229
+ await access(candidate);
14230
+ return candidate;
14231
+ } catch {
14232
+ }
14233
+ if (dir === root) return void 0;
14234
+ }
14235
+ }
13861
14236
  var ERROR_TOPIC_HINTS = [
13862
14237
  { pattern: /options/i, hint: '`ngforge_lookup topic="options-format"` \u2014 correct options syntax' },
13863
14238
  { pattern: /hidden/i, hint: '`ngforge_lookup topic="hidden"` \u2014 hidden field rules' },
@@ -13909,16 +14284,17 @@ Example errors you'll see:
13909
14284
  - "options MUST be at FIELD level, NOT inside props"
13910
14285
  - "containers only support 'hidden' logic type"`,
13911
14286
  {
13912
- config: z59.union([z59.string(), z59.object({}).passthrough()]).describe(
14287
+ config: z61.union([z61.string(), z61.object({}).passthrough()]).describe(
13913
14288
  "File path (.ts/.js) OR JSON string OR JSON object. Auto-detects: paths ending in .ts/.js or starting with / are treated as files."
13914
14289
  ),
13915
- uiIntegration: z59.enum(UI_INTEGRATIONS3).default("material").describe("UI library to validate against (material, bootstrap, primeng, ionic). Defaults to material.")
14290
+ uiIntegration: z61.enum(UI_INTEGRATIONS3).default("material").describe("UI library to validate against (material, bootstrap, primeng, ionic). Defaults to material.")
13916
14291
  },
13917
14292
  async ({ config, uiIntegration }) => {
13918
14293
  try {
13919
14294
  const parsed = parseConfigInput(config);
13920
14295
  if (parsed.type === "file") {
13921
- const result2 = await validateFile(parsed.path, uiIntegration);
14296
+ const disabledRules = await projectDisabledRules(parsed.path);
14297
+ const result2 = await validateFile(parsed.path, uiIntegration, { disabledRules });
13922
14298
  const report2 = formatFileReport(result2, { relatedDocs: collectErrorTopicHints });
13923
14299
  const structured2 = {
13924
14300
  type: "file",
@@ -13926,11 +14302,14 @@ Example errors you'll see:
13926
14302
  uiIntegration,
13927
14303
  configsFound: result2.results.length,
13928
14304
  allValid: result2.valid,
14305
+ errorCount: result2.errorCount,
14306
+ warningCount: result2.warningCount,
13929
14307
  results: result2.results.map((r) => ({
13930
14308
  name: r.name,
13931
14309
  line: r.line,
13932
14310
  valid: r.validation.valid,
13933
- errorCount: r.validation.errors?.length || 0
14311
+ errorCount: countBySeverity(r.validation.errors, "error"),
14312
+ warningCount: countBySeverity(r.validation.errors, "warning")
13934
14313
  }))
13935
14314
  };
13936
14315
  return {
@@ -13947,7 +14326,8 @@ Example errors you'll see:
13947
14326
  type: parsed.type,
13948
14327
  uiIntegration,
13949
14328
  valid: result.valid,
13950
- errorCount: result.errors?.length || 0,
14329
+ errorCount: countBySeverity(result.errors, "error"),
14330
+ warningCount: countBySeverity(result.errors, "warning"),
13951
14331
  errors: result.errors
13952
14332
  };
13953
14333
  return {
@@ -14004,7 +14384,7 @@ If validating JSON, ensure:
14004
14384
  }
14005
14385
 
14006
14386
  // packages/dynamic-form-mcp/src/tools/scaffold.tool.ts
14007
- import { z as z60 } from "zod";
14387
+ import { z as z62 } from "zod";
14008
14388
  var UI_INTEGRATIONS4 = ["material", "bootstrap", "primeng", "ionic"];
14009
14389
  function parseFieldDefs(fields) {
14010
14390
  return fields.map((f) => {
@@ -14259,12 +14639,12 @@ Examples:
14259
14639
  - With groups: pages=0 groups=["address","billing"]
14260
14640
  - With hidden: hidden=["userId:abc123","source:web"]`,
14261
14641
  {
14262
- pages: z60.number().min(0).max(10).default(0).describe("Number of pages (0 = single-page form, 1-10 = multi-page wizard)"),
14263
- arrays: z60.array(z60.string()).optional().describe('Array field names for dynamic lists, e.g., ["contacts", "addresses"]'),
14264
- groups: z60.array(z60.string()).optional().describe('Group field names for nested objects, e.g., ["address", "billing"]'),
14265
- hidden: z60.array(z60.string()).optional().describe('Hidden fields as "name:value" pairs, e.g., ["userId:abc", "version:1"]'),
14266
- fields: z60.array(z60.string()).optional().describe('Basic fields as "name:type" pairs, e.g., ["email:input", "country:select", "age:slider"]'),
14267
- uiIntegration: z60.enum(UI_INTEGRATIONS4).default("material").describe("UI library (for future UI-specific props). Defaults to material.")
14642
+ pages: z62.number().min(0).max(10).default(0).describe("Number of pages (0 = single-page form, 1-10 = multi-page wizard)"),
14643
+ arrays: z62.array(z62.string()).optional().describe('Array field names for dynamic lists, e.g., ["contacts", "addresses"]'),
14644
+ groups: z62.array(z62.string()).optional().describe('Group field names for nested objects, e.g., ["address", "billing"]'),
14645
+ hidden: z62.array(z62.string()).optional().describe('Hidden fields as "name:value" pairs, e.g., ["userId:abc", "version:1"]'),
14646
+ fields: z62.array(z62.string()).optional().describe('Basic fields as "name:type" pairs, e.g., ["email:input", "country:select", "age:slider"]'),
14647
+ uiIntegration: z62.enum(UI_INTEGRATIONS4).default("material").describe("UI library (for future UI-specific props). Defaults to material.")
14268
14648
  },
14269
14649
  async ({ pages, arrays = [], groups = [], hidden = [], fields = [] }) => {
14270
14650
  const fieldDefs = parseFieldDefs(fields);
@@ -14306,7 +14686,7 @@ Examples:
14306
14686
  }
14307
14687
 
14308
14688
  // packages/dynamic-form-mcp/src/tools/search.tool.ts
14309
- import { z as z61 } from "zod";
14689
+ import { z as z63 } from "zod";
14310
14690
  var searchIndex = null;
14311
14691
  function getTopicSubcategory(key) {
14312
14692
  const fieldTypes = ["input", "select", "slider", "radio", "checkbox", "textarea", "datepicker", "toggle", "text", "hidden"];
@@ -14467,7 +14847,7 @@ Use this when you don't know the exact topic name.
14467
14847
 
14468
14848
  New to ng-forge? Start with: ngforge_lookup topic="workflow"`,
14469
14849
  {
14470
- query: z61.string().describe("Natural language or keywords to search for")
14850
+ query: z63.string().describe("Natural language or keywords to search for")
14471
14851
  },
14472
14852
  async ({ query }) => {
14473
14853
  const index = buildIndex();