@ng-forge/dynamic-form-mcp 1.2.0-next.9 → 1.3.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/index.js CHANGED
@@ -282,8 +282,8 @@ var FIELD_TYPES = [
282
282
  props: {},
283
283
  validationSupported: false,
284
284
  source: "core",
285
- allowedIn: ["top-level (single-page forms only)", "page.fields", "group.fields", "array.fields", "container"],
286
- notAllowedIn: ["row", "top-level when using pages"],
285
+ allowedIn: ["top-level (single-page forms only)", "page.fields", "group.fields", "array.fields", "row", "container"],
286
+ notAllowedIn: ["top-level when using pages"],
287
287
  example: `// Hidden field - value is REQUIRED!
288
288
  {
289
289
  key: 'userId',
@@ -300,7 +300,8 @@ var FIELD_TYPES = [
300
300
  // - label, logic, validators, required, props
301
301
  // - disabled, readonly, hidden, col, tabIndex, meta
302
302
  // - Validation shorthand: email, min, max, minLength, maxLength, pattern`,
303
- minimalExample: `{ key: 'id', type: 'hidden', value: 'abc123' }`
303
+ minimalExample: `{ key: 'id', type: 'hidden', value: 'abc123' }`,
304
+ illustrative: { example: "several snippets and a forbidden-property list, not one expression" }
304
305
  },
305
306
  {
306
307
  type: "text",
@@ -380,7 +381,8 @@ var FIELD_TYPES = [
380
381
  }
381
382
  // NOT ALLOWED in rows:
382
383
  // - type: 'page' (pages are top-level only)`,
383
- minimalExample: `{ key: 'row1', type: 'row', fields: [...] }`
384
+ minimalExample: `{ key: 'row1', type: 'row', fields: [{ key: 'firstName', type: 'input', label: 'First Name', col: 6 }, { key: 'lastName', type: 'input', label: 'Last Name', col: 6 }] }`,
385
+ illustrative: { example: "ends with a not-allowed-in list, so it is not one expression" }
384
386
  },
385
387
  {
386
388
  type: "group",
@@ -467,7 +469,8 @@ var FIELD_TYPES = [
467
469
  validators: [{ type: 'custom', functionName: 'dateOrder' }],
468
470
  validationMessages: { dateOrder: 'The end must not be before the start.' }
469
471
  }`,
470
- minimalExample: `{ key: 'address', type: 'group', fields: [...] }`
472
+ minimalExample: `{ key: 'address', type: 'group', fields: [{ key: 'street', type: 'input', label: 'Street' }] }`,
473
+ illustrative: { example: "two snippets: a plain group and one carrying a cross-field rule" }
471
474
  },
472
475
  {
473
476
  type: "array",
@@ -586,7 +589,8 @@ var FIELD_TYPES = [
586
589
  // periodOrder receives the whole item list:
587
590
  // (ctx) => (ctx.value() ?? []).some(r => r.from && r.to && r.to < r.from)
588
591
  // ? { kind: 'periodOrder' } : null`,
589
- minimalExample: `{ key: 'items', type: 'array', fields: [...] }`
592
+ minimalExample: `{ key: 'items', type: 'array', fields: [{ key: 'tag', type: 'input', label: 'Tag' }] }`,
593
+ illustrative: { example: "three snippets: flat, object-item and per-row-rule arrays" }
590
594
  },
591
595
  {
592
596
  type: "container",
@@ -654,7 +658,8 @@ var FIELD_TYPES = [
654
658
  // Values flatten: { street: '', city: '' } \u2014 no 'billingChrome' key
655
659
  // NOT ALLOWED in containers:
656
660
  // - type: 'page' (pages are top-level only)`,
657
- minimalExample: `{ key: 'chrome', type: 'container', wrappers: [], fields: [...] }`
661
+ minimalExample: `{ key: 'chrome', type: 'container', wrappers: [], fields: [{ key: 'street', type: 'input', label: 'Street' }] }`,
662
+ illustrative: { example: "ends with a not-allowed-in list, so it is not one expression" }
658
663
  },
659
664
  {
660
665
  type: "page",
@@ -707,7 +712,7 @@ var FIELD_TYPES = [
707
712
  { key: 'next', type: 'next', label: 'Next' }
708
713
  ]
709
714
  }`,
710
- minimalExample: `{ key: 'step1', type: 'page', fields: [...] }`
715
+ minimalExample: `{ key: 'step1', type: 'page', fields: [{ key: 'firstName', type: 'input', label: 'First Name' }] }`
711
716
  },
712
717
  {
713
718
  type: "next",
@@ -775,7 +780,11 @@ var FIELD_TYPES = [
775
780
  label: 'Custom Action',
776
781
  event: MyCustomEvent // Must be the class reference
777
782
  }`,
778
- minimalExample: `{ key: 'action', type: 'button', label: 'Action', event: MyEvent }`
783
+ minimalExample: `{ key: 'action', type: 'button', label: 'Action', event: MyEvent }`,
784
+ illustrative: {
785
+ minimalExample: "names an event class only a real app defines and registers",
786
+ example: "four snippets plus the registration steps they depend on"
787
+ }
779
788
  },
780
789
  {
781
790
  type: "submit",
@@ -800,16 +809,34 @@ var FIELD_TYPES = [
800
809
  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.)",
801
810
  valueType: void 0,
802
811
  baseInterface: "FieldDef",
803
- props: {},
812
+ props: {
813
+ template: {
814
+ name: "template",
815
+ type: "ArrayAllowedChildren | readonly ArrayAllowedChildren[]",
816
+ 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.",
817
+ required: true
818
+ },
819
+ arrayKey: {
820
+ name: "arrayKey",
821
+ type: "string",
822
+ description: "Key of the array to act on. Optional when the button sits inside that array, which supplies it from context.",
823
+ required: false
824
+ }
825
+ },
804
826
  validationSupported: false,
805
827
  source: "adapter",
806
828
  allowedIn: ["array", "row", "group", "container"],
807
829
  example: `{
808
830
  key: 'addContact',
809
831
  type: 'add-array-item',
810
- label: 'Add Contact'
832
+ label: 'Add Contact',
833
+ // REQUIRED: what one new item looks like.
834
+ template: [
835
+ { key: 'name', type: 'input', label: 'Name' },
836
+ { key: 'email', type: 'input', label: 'Email' }
837
+ ]
811
838
  }`,
812
- minimalExample: `{ key: 'add', type: 'add-array-item', label: 'Add Item' }`
839
+ minimalExample: `{ key: 'add', type: 'add-array-item', label: 'Add Item', template: { key: 'tag', type: 'input', label: 'Tag' } }`
813
840
  },
814
841
  {
815
842
  type: "prepend-array-item",
@@ -817,16 +844,34 @@ var FIELD_TYPES = [
817
844
  description: "Button to add a new item to the beginning of an array field. (Legacy alias: prependArrayItem.)",
818
845
  valueType: void 0,
819
846
  baseInterface: "FieldDef",
820
- props: {},
847
+ props: {
848
+ template: {
849
+ name: "template",
850
+ type: "ArrayAllowedChildren | readonly ArrayAllowedChildren[]",
851
+ 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.",
852
+ required: true
853
+ },
854
+ arrayKey: {
855
+ name: "arrayKey",
856
+ type: "string",
857
+ description: "Key of the array to act on. Optional when the button sits inside that array, which supplies it from context.",
858
+ required: false
859
+ }
860
+ },
821
861
  validationSupported: false,
822
862
  source: "adapter",
823
863
  allowedIn: ["array", "row", "group", "container"],
824
864
  example: `{
825
865
  key: 'prependContact',
826
866
  type: 'prepend-array-item',
827
- label: 'Add to Top'
867
+ label: 'Add to Top',
868
+ // REQUIRED: what one new item looks like.
869
+ template: [
870
+ { key: 'name', type: 'input', label: 'Name' },
871
+ { key: 'email', type: 'input', label: 'Email' }
872
+ ]
828
873
  }`,
829
- minimalExample: `{ key: 'prepend', type: 'prepend-array-item', label: 'Add First' }`
874
+ minimalExample: `{ key: 'prepend', type: 'prepend-array-item', label: 'Add First', template: { key: 'tag', type: 'input', label: 'Tag' } }`
830
875
  },
831
876
  {
832
877
  type: "insert-array-item",
@@ -834,7 +879,26 @@ var FIELD_TYPES = [
834
879
  description: "Button to insert a new item at a specific index in an array field (set via the index property). (Legacy alias: insertArrayItem.)",
835
880
  valueType: void 0,
836
881
  baseInterface: "FieldDef",
837
- props: {},
882
+ props: {
883
+ index: {
884
+ name: "index",
885
+ type: "number",
886
+ description: "REQUIRED. The position to insert at.",
887
+ required: true
888
+ },
889
+ template: {
890
+ name: "template",
891
+ type: "ArrayAllowedChildren | readonly ArrayAllowedChildren[]",
892
+ 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.",
893
+ required: true
894
+ },
895
+ arrayKey: {
896
+ name: "arrayKey",
897
+ type: "string",
898
+ description: "Key of the array to act on. Optional when the button sits inside that array, which supplies it from context.",
899
+ required: false
900
+ }
901
+ },
838
902
  validationSupported: false,
839
903
  source: "adapter",
840
904
  allowedIn: ["array", "row", "group", "container"],
@@ -842,9 +906,14 @@ var FIELD_TYPES = [
842
906
  key: 'insertContact',
843
907
  type: 'insert-array-item',
844
908
  label: 'Insert',
845
- index: 1
909
+ index: 1,
910
+ // REQUIRED: what one new item looks like.
911
+ template: [
912
+ { key: 'name', type: 'input', label: 'Name' },
913
+ { key: 'email', type: 'input', label: 'Email' }
914
+ ]
846
915
  }`,
847
- minimalExample: `{ key: 'insert', type: 'insert-array-item', label: 'Insert', index: 0 }`
916
+ minimalExample: `{ key: 'insert', type: 'insert-array-item', label: 'Insert', index: 0, template: { key: 'tag', type: 'input', label: 'Tag' } }`
848
917
  },
849
918
  {
850
919
  type: "remove-array-item",
@@ -2816,7 +2885,7 @@ You MUST follow these practices when generating FormConfig objects for ng-forge.
2816
2885
 
2817
2886
  ## Core Principles
2818
2887
 
2819
- 1. **Configuration-driven**: ng-forge wraps Angular Reactive Forms. Define structure declaratively via \`FormConfig\`, not imperatively.
2888
+ 1. **Configuration-driven**: ng-forge is built on Angular Signal Forms. Define structure declaratively via \`FormConfig\`, not imperatively.
2820
2889
  2. **Type-safe**: Use TypeScript interfaces for form values. The library provides full type inference.
2821
2890
  3. **Validation-first**: Always include validation and user-friendly error messages.
2822
2891
 
@@ -3313,6 +3382,7 @@ Recommended when consuming Ionic's \`apply-ionic-legacy-error-styles\` mixin, wh
3313
3382
  - \`withEventFormValue()\` \u2014 attach the current form value to every dispatched event
3314
3383
  - \`withValueExclusionDefaults(options)\` \u2014 set form-wide value exclusion defaults
3315
3384
  - \`withValidationExecutionDefaults(options)\` \u2014 set form-wide validation execution defaults (e.g. defer until touched)
3385
+ - \`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.
3316
3386
 
3317
3387
  All features are exported from \`@ng-forge/dynamic-forms\`.
3318
3388
 
@@ -3358,23 +3428,31 @@ All features are exported from \`@ng-forge/dynamic-forms\`.
3358
3428
 
3359
3429
  ## CRITICAL: UI Library Differences
3360
3430
 
3361
- Different UI libraries support different properties. Always validate against the correct library using \`ngforge_validate\` with the appropriate \`uiIntegration\` parameter.
3431
+ Different UI libraries support different \`props\`. Always validate against the library the project actually uses.
3362
3432
 
3363
- ### Property Differences by Library
3433
+ Which props exist is answered per adapter, not here: use the adapter's own reference
3434
+ (\`ngforge_lookup\` with the adapter, or the \`ng-forge-dynamic-forms-<adapter>\` skill). A table
3435
+ repeated here would be a second copy of the adapter registries and would drift from them.
3364
3436
 
3365
- | Property | Material | Bootstrap | PrimeNG | Ionic |
3366
- |----------|----------|-----------|---------|-------|
3367
- | \`appearance\` | \u2713 (fill, outline) | \u2717 | \u2717 | \u2713 (fill, outline) |
3368
- | \`subscriptSizing\` | \u2713 | \u2717 | \u2717 | \u2717 |
3369
- | \`floatLabel\` | \u2713 (auto, always, never) | \u2717 | \u2717 | \u2717 |
3370
- | \`hideRequiredMarker\` | \u2713 | \u2717 | \u2717 | \u2717 |
3371
- | \`hint\` | \u2713 | \u2713 (as \`helpText\`) | \u2713 | \u2713 |
3437
+ Two adapters cannot both provide the same field type, so a project has one adapter per
3438
+ field type; TypeScript reports error 2717 when two try.
3372
3439
 
3373
3440
  ### Container Fields
3374
3441
 
3375
- Container fields (\`page\`, \`group\`, \`row\`) do NOT support these properties:
3376
- - \`label\` - Use \`text\` field type for headings instead
3377
- - \`required\`, \`email\`, \`min\`, \`max\`, etc. - Validation is for leaf fields only
3442
+ No container has a \`label\`. Use a \`text\` field for a heading instead.
3443
+
3444
+ Validation splits by whether the container owns a value:
3445
+
3446
+ - \`group\` and \`array\` DO accept \`required\`, \`validators\`, \`validationMessages\`
3447
+ and \`validateWhenHidden\`. A validator there runs against the container's own
3448
+ subtree, so a cross-field rule (dateTo after dateFrom) belongs on the group
3449
+ rather than on one of its children. \`ctx.value()\` is the group's object or the
3450
+ array's item list.
3451
+ - \`page\`, \`row\` and \`container\` do NOT. They flatten into their parent and have
3452
+ no schema path, so a validator on them would have nothing to run against.
3453
+
3454
+ Leaf-level validators such as \`email\`, \`min\` and \`max\` belong on the field that
3455
+ holds the value, on any container.
3378
3456
 
3379
3457
  ### Common Mistakes to Avoid
3380
3458
 
@@ -3392,34 +3470,48 @@ Container fields (\`page\`, \`group\`, \`row\`) do NOT support these properties:
3392
3470
 
3393
3471
  3. **Adding \`id\` to FormConfig** - The root FormConfig does not accept an \`id\` property.
3394
3472
 
3395
- 4. **Putting slider min/max in props** - For slider fields, \`min\`, \`max\`, and \`step\` are field-level properties:
3473
+ 4. **Using \`min\`/\`max\` for a slider's range** - A slider's range is
3474
+ \`minValue\`, \`maxValue\` and \`step\`, at field level. \`min\` and \`max\` are
3475
+ validation shorthands: they typecheck, they validate clean, and the slider
3476
+ still renders its default 0-100 range, so nothing catches the mistake.
3396
3477
  \`\`\`typescript
3397
- // \u274C WRONG
3478
+ // \u274C WRONG - validates clean, renders the wrong range
3398
3479
  { key: 'volume', type: 'slider', label: 'Volume', props: { min: 0, max: 100 } }
3480
+ { key: 'volume', type: 'slider', label: 'Volume', min: 0, max: 100 }
3399
3481
 
3400
3482
  // \u2705 CORRECT
3401
- { key: 'volume', type: 'slider', label: 'Volume', min: 0, max: 100 }
3483
+ { key: 'volume', type: 'slider', label: 'Volume', minValue: 0, maxValue: 100, step: 5 }
3402
3484
  \`\`\`
3403
3485
 
3404
3486
  5. **Using unsupported field types** - Each UI library supports specific field types. Use \`ngforge_lookup\` with \`depth: "schema"\` to see available types.
3405
3487
 
3406
3488
  ## Validation Before Use
3407
3489
 
3408
- 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.
3490
+ Never hand back a config you have not checked. Two routes, depending on what is
3491
+ available:
3409
3492
 
3410
- \`\`\`typescript
3411
- // Always specify the UI integration you're using
3412
- ngforge_validate({
3413
- uiIntegration: 'material', // or 'bootstrap', 'primeng', 'ionic'
3414
- config: { fields: [...] }
3415
- })
3416
- \`\`\`
3493
+ - With the MCP server: \`ngforge_validate({ uiIntegration: 'material', config })\`
3494
+ - Without it: \`npx --yes @ng-forge/dynamic-forms-cli@next "path/to/your.form.ts" --ui material\`
3417
3495
 
3418
- To understand what properties are supported for each field type, use \`ngforge_lookup\` with \`depth: "schema"\`:
3496
+ Both run the same schemas, so they agree.
3419
3497
 
3420
- \`\`\`typescript
3421
- ngforge_lookup({ topic: 'input', depth: 'schema', uiIntegration: 'material' })
3422
- \`\`\`
3498
+ ### What a clean run does and does not mean
3499
+
3500
+ A clean run means the structure is right: the field types exist, required
3501
+ properties are present, options are in the right place, and containers are not
3502
+ carrying properties they cannot have.
3503
+
3504
+ It does NOT mean every property you wrote is real. The schemas strip unknown keys
3505
+ rather than rejecting them, so an invented or misplaced property passes
3506
+ validation and is silently dropped at runtime. Measured examples that pass today:
3507
+ \`hideWhen\` on a field and \`targetProperty\` inside a derivation.
3508
+
3509
+ \`as const satisfies FormConfig\` is what catches those, because TypeScript checks
3510
+ the property names. Use both: the type annotation for what exists, the validator
3511
+ for what is structurally correct.
3512
+
3513
+ To see which properties a field type supports, use \`ngforge_lookup\` with
3514
+ \`depth: "schema"\`, or read the field-types reference in the skill.
3423
3515
  `;
3424
3516
 
3425
3517
  // packages/dynamic-form-mcp/src/resources/instructions.resource.ts
@@ -4449,18 +4541,41 @@ import { z as z3 } from "zod";
4449
4541
  var FieldMetaSchema = z3.record(z3.string(), z3.union([z3.string(), z3.number(), z3.boolean(), z3.undefined()]));
4450
4542
 
4451
4543
  // internal/dynamic-forms-validation/src/lib/schemas/field/field-def.schema.ts
4544
+ import { z as z5 } from "zod";
4545
+
4546
+ // internal/dynamic-forms-validation/src/lib/schemas/field/field-web-mcp.schema.ts
4452
4547
  import { z as z4 } from "zod";
4453
- var BaseFieldDefSchema = z4.object({
4548
+ var FieldWebMcpOptionsSchema = z4.object({
4549
+ /**
4550
+ * Whether an agent may see this field's value in a tool response.
4551
+ *
4552
+ * Defaults to true, except for a `hidden` field type or an input whose
4553
+ * `props.type` is `'password'`. A withheld value is replaced by a marker
4554
+ * rather than dropped, so the agent still knows the field exists.
4555
+ */
4556
+ readable: z4.boolean().optional(),
4557
+ /**
4558
+ * Whether an agent may write this field.
4559
+ *
4560
+ * Defaults to true, except for a `hidden` field type, a field with a
4561
+ * `derivation`, or one that is `readonly`.
4562
+ */
4563
+ writable: z4.boolean().optional()
4564
+ });
4565
+ var FieldWebMcpConfigSchema = z4.union([FieldWebMcpOptionsSchema, z4.literal(false)]);
4566
+
4567
+ // internal/dynamic-forms-validation/src/lib/schemas/field/field-def.schema.ts
4568
+ var BaseFieldDefSchema = z5.object({
4454
4569
  /**
4455
4570
  * Unique field identifier within the form.
4456
4571
  * Used as the form control name and for targeting in logic expressions.
4457
4572
  */
4458
- key: z4.string(),
4573
+ key: z5.string(),
4459
4574
  /**
4460
4575
  * Field type discriminant.
4461
4576
  * Determines which component renders the field.
4462
4577
  */
4463
- type: z4.string(),
4578
+ type: z5.string(),
4464
4579
  /**
4465
4580
  * Human-readable label displayed next to the field.
4466
4581
  */
@@ -4473,58 +4588,68 @@ var BaseFieldDefSchema = z4.object({
4473
4588
  /**
4474
4589
  * CSS classes applied to the field wrapper (space-separated).
4475
4590
  */
4476
- className: z4.string().optional(),
4591
+ className: z5.string().optional(),
4477
4592
  /**
4478
4593
  * Whether the field is disabled (non-interactive but visible).
4479
4594
  */
4480
- disabled: z4.boolean().optional(),
4595
+ disabled: z5.boolean().optional(),
4481
4596
  /**
4482
4597
  * Whether the field is read-only (displays value but not editable).
4483
4598
  */
4484
- readonly: z4.boolean().optional(),
4599
+ readonly: z5.boolean().optional(),
4485
4600
  /**
4486
4601
  * Whether the field is hidden from view.
4487
4602
  */
4488
- hidden: z4.boolean().optional(),
4603
+ hidden: z5.boolean().optional(),
4489
4604
  /**
4490
4605
  * Tab order for keyboard navigation.
4491
4606
  */
4492
- tabIndex: z4.number().optional(),
4607
+ tabIndex: z5.number().optional(),
4493
4608
  /**
4494
4609
  * Grid column width (1-12) in a 12-column layout system.
4495
4610
  */
4496
- col: z4.number().min(1).max(12).optional(),
4611
+ col: z5.number().min(1).max(12).optional(),
4497
4612
  /**
4498
4613
  * Whether to exclude this field's value from submission output when hidden.
4499
4614
  * Overrides both the global and form-level settings.
4500
4615
  */
4501
- excludeValueIfHidden: z4.boolean().optional(),
4616
+ excludeValueIfHidden: z5.boolean().optional(),
4502
4617
  /**
4503
4618
  * Whether to exclude this field's value from submission output when disabled.
4504
4619
  * Overrides both the global and form-level settings.
4505
4620
  */
4506
- excludeValueIfDisabled: z4.boolean().optional(),
4621
+ excludeValueIfDisabled: z5.boolean().optional(),
4507
4622
  /**
4508
4623
  * Whether to exclude this field's value from submission output when readonly.
4509
4624
  * Overrides both the global and form-level settings.
4510
4625
  */
4511
- excludeValueIfReadonly: z4.boolean().optional(),
4626
+ excludeValueIfReadonly: z5.boolean().optional(),
4512
4627
  /**
4513
4628
  * Whether to run validation when this field is hidden.
4514
4629
  * Inherited from the parent field (and form/global defaults). Defaults to false.
4515
4630
  */
4516
- validateWhenHidden: z4.boolean().optional()
4631
+ validateWhenHidden: z5.boolean().optional(),
4632
+ /**
4633
+ * What a browser AI agent may do with this field, when the form opts in to
4634
+ * WebMCP through `options.webMcp`.
4635
+ *
4636
+ * Overrides either axis of the conservative default, or `false` to hide the
4637
+ * field from agents entirely. Without this key on the schema a parsed config
4638
+ * silently loses the policy, so a generated or round-tripped config would
4639
+ * quietly widen what an agent can see and write.
4640
+ */
4641
+ webMcp: FieldWebMcpConfigSchema.optional()
4517
4642
  });
4518
4643
 
4519
4644
  // internal/dynamic-forms-validation/src/lib/schemas/field/field-with-validation.schema.ts
4520
- import { z as z11 } from "zod";
4645
+ import { z as z12 } from "zod";
4521
4646
 
4522
4647
  // internal/dynamic-forms-validation/src/lib/schemas/validation/validator-config.schema.ts
4523
- import { z as z6 } from "zod";
4648
+ import { z as z7 } from "zod";
4524
4649
 
4525
4650
  // internal/dynamic-forms-validation/src/lib/schemas/logic/conditional-expression.schema.ts
4526
- import { z as z5 } from "zod";
4527
- var ComparisonOperatorSchema = z5.enum([
4651
+ import { z as z6 } from "zod";
4652
+ var ComparisonOperatorSchema = z6.enum([
4528
4653
  "equals",
4529
4654
  "notEquals",
4530
4655
  "greater",
@@ -4536,35 +4661,35 @@ var ComparisonOperatorSchema = z5.enum([
4536
4661
  "endsWith",
4537
4662
  "matches"
4538
4663
  ]);
4539
- var BaseComparisonConditionSchema = z5.object({
4664
+ var BaseComparisonConditionSchema = z6.object({
4540
4665
  operator: ComparisonOperatorSchema.optional(),
4541
- value: z5.unknown().optional()
4666
+ value: z6.unknown().optional()
4542
4667
  });
4543
4668
  var FieldValueConditionSchema = BaseComparisonConditionSchema.extend({
4544
- type: z5.literal("fieldValue"),
4669
+ type: z6.literal("fieldValue"),
4545
4670
  /**
4546
4671
  * Path to the field to check.
4547
4672
  * Supports dot notation for nested fields.
4548
4673
  */
4549
- fieldPath: z5.string()
4674
+ fieldPath: z6.string()
4550
4675
  });
4551
- var CustomConditionSchema = z5.object({
4552
- type: z5.literal("custom"),
4676
+ var CustomConditionSchema = z6.object({
4677
+ type: z6.literal("custom"),
4553
4678
  /**
4554
4679
  * Name of a registered custom function to invoke.
4555
4680
  */
4556
- functionName: z5.string()
4681
+ functionName: z6.string()
4557
4682
  });
4558
- var JavaScriptConditionSchema = z5.object({
4559
- type: z5.literal("javascript"),
4683
+ var JavaScriptConditionSchema = z6.object({
4684
+ type: z6.literal("javascript"),
4560
4685
  /**
4561
4686
  * JavaScript expression to evaluate.
4562
4687
  * Has access to: fieldValue, formValue, fieldPath
4563
4688
  */
4564
- expression: z5.string()
4689
+ expression: z6.string()
4565
4690
  });
4566
- var ConditionalExpressionSchema = z5.lazy(
4567
- () => z5.discriminatedUnion("type", [
4691
+ var ConditionalExpressionSchema = z6.lazy(
4692
+ () => z6.discriminatedUnion("type", [
4568
4693
  FieldValueConditionSchema,
4569
4694
  CustomConditionSchema,
4570
4695
  JavaScriptConditionSchema,
@@ -4572,116 +4697,116 @@ var ConditionalExpressionSchema = z5.lazy(
4572
4697
  OrConditionSchema
4573
4698
  ])
4574
4699
  );
4575
- var AndConditionSchema = z5.object({
4576
- type: z5.literal("and"),
4700
+ var AndConditionSchema = z6.object({
4701
+ type: z6.literal("and"),
4577
4702
  /**
4578
4703
  * Array of conditions that must all be true.
4579
4704
  */
4580
- conditions: z5.array(z5.lazy(() => ConditionalExpressionSchema))
4705
+ conditions: z6.array(z6.lazy(() => ConditionalExpressionSchema))
4581
4706
  });
4582
- var OrConditionSchema = z5.object({
4583
- type: z5.literal("or"),
4707
+ var OrConditionSchema = z6.object({
4708
+ type: z6.literal("or"),
4584
4709
  /**
4585
4710
  * Array of conditions where at least one must be true.
4586
4711
  */
4587
- conditions: z5.array(z5.lazy(() => ConditionalExpressionSchema))
4712
+ conditions: z6.array(z6.lazy(() => ConditionalExpressionSchema))
4588
4713
  });
4589
4714
 
4590
4715
  // internal/dynamic-forms-validation/src/lib/schemas/validation/validator-config.schema.ts
4591
- var BaseValidatorSchema = z6.object({
4716
+ var BaseValidatorSchema = z7.object({
4592
4717
  /**
4593
4718
  * Condition for when this validator should be applied.
4594
4719
  * If omitted, validator is always active.
4595
4720
  */
4596
4721
  when: ConditionalExpressionSchema.optional()
4597
4722
  });
4598
- var BuiltInValidatorParamsSchema = z6.object({
4723
+ var BuiltInValidatorParamsSchema = z7.object({
4599
4724
  /**
4600
4725
  * Static value for the validator parameter.
4601
4726
  */
4602
- value: z6.union([z6.number(), z6.string()]).optional(),
4727
+ value: z7.union([z7.number(), z7.string()]).optional(),
4603
4728
  /**
4604
4729
  * Dynamic expression that evaluates to the validator parameter.
4605
4730
  */
4606
- expression: z6.string().optional()
4731
+ expression: z7.string().optional()
4607
4732
  });
4608
- var ValidatorConfigSchema = z6.discriminatedUnion("type", [
4733
+ var ValidatorConfigSchema = z7.discriminatedUnion("type", [
4609
4734
  // Built-in validators
4610
4735
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4611
- type: z6.literal("required")
4736
+ type: z7.literal("required")
4612
4737
  }),
4613
4738
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4614
- type: z6.literal("email")
4739
+ type: z7.literal("email")
4615
4740
  }),
4616
4741
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4617
- type: z6.literal("min")
4742
+ type: z7.literal("min")
4618
4743
  }),
4619
4744
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4620
- type: z6.literal("max")
4745
+ type: z7.literal("max")
4621
4746
  }),
4622
4747
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4623
- type: z6.literal("minLength")
4748
+ type: z7.literal("minLength")
4624
4749
  }),
4625
4750
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4626
- type: z6.literal("maxLength")
4751
+ type: z7.literal("maxLength")
4627
4752
  }),
4628
4753
  BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
4629
- type: z6.literal("pattern")
4754
+ type: z7.literal("pattern")
4630
4755
  }),
4631
4756
  // Custom synchronous validators
4632
4757
  BaseValidatorSchema.extend({
4633
- type: z6.literal("custom"),
4758
+ type: z7.literal("custom"),
4634
4759
  /**
4635
4760
  * Name of a registered custom validator function.
4636
4761
  */
4637
- functionName: z6.string().optional(),
4762
+ functionName: z7.string().optional(),
4638
4763
  /**
4639
4764
  * Parameters passed to the custom validator function.
4640
4765
  */
4641
- params: z6.record(z6.string(), z6.unknown()).optional(),
4766
+ params: z7.record(z7.string(), z7.unknown()).optional(),
4642
4767
  /**
4643
4768
  * JavaScript expression to evaluate for validation.
4644
4769
  */
4645
- expression: z6.string().optional(),
4770
+ expression: z7.string().optional(),
4646
4771
  /**
4647
4772
  * Error kind identifier for linking to validation messages.
4648
4773
  */
4649
- kind: z6.string().optional(),
4774
+ kind: z7.string().optional(),
4650
4775
  /**
4651
4776
  * Error context parameters for message interpolation.
4652
4777
  */
4653
- errorParams: z6.record(z6.string(), z6.string()).optional()
4778
+ errorParams: z7.record(z7.string(), z7.string()).optional()
4654
4779
  }),
4655
4780
  // Async validators
4656
4781
  BaseValidatorSchema.extend({
4657
- type: z6.literal("async"),
4782
+ type: z7.literal("async"),
4658
4783
  /**
4659
4784
  * Name of a registered async validator function. Required.
4660
4785
  */
4661
- functionName: z6.string(),
4786
+ functionName: z7.string(),
4662
4787
  /**
4663
4788
  * Parameters passed to the async validator function.
4664
4789
  */
4665
- params: z6.record(z6.string(), z6.unknown()).optional()
4790
+ params: z7.record(z7.string(), z7.unknown()).optional()
4666
4791
  }),
4667
4792
  // HTTP validators
4668
4793
  BaseValidatorSchema.extend({
4669
- type: z6.literal("http"),
4794
+ type: z7.literal("http"),
4670
4795
  /**
4671
4796
  * Name of a registered HTTP validator config function. Required.
4672
4797
  */
4673
- functionName: z6.string(),
4798
+ functionName: z7.string(),
4674
4799
  /**
4675
4800
  * Parameters passed to the HTTP validator function.
4676
4801
  */
4677
- params: z6.record(z6.string(), z6.unknown()).optional()
4802
+ params: z7.record(z7.string(), z7.unknown()).optional()
4678
4803
  })
4679
4804
  ]);
4680
- var ValidatorsArraySchema = z6.array(ValidatorConfigSchema);
4805
+ var ValidatorsArraySchema = z7.array(ValidatorConfigSchema);
4681
4806
 
4682
4807
  // internal/dynamic-forms-validation/src/lib/schemas/validation/validation-messages.schema.ts
4683
- import { z as z7 } from "zod";
4684
- var ValidationMessagesSchema = z7.object({
4808
+ import { z as z8 } from "zod";
4809
+ var ValidationMessagesSchema = z8.object({
4685
4810
  required: DynamicTextSchema.optional(),
4686
4811
  email: DynamicTextSchema.optional(),
4687
4812
  min: DynamicTextSchema.optional(),
@@ -4692,15 +4817,15 @@ var ValidationMessagesSchema = z7.object({
4692
4817
  }).catchall(DynamicTextSchema.optional());
4693
4818
 
4694
4819
  // internal/dynamic-forms-validation/src/lib/schemas/logic/logic-config.schema.ts
4695
- import { z as z10 } from "zod";
4820
+ import { z as z11 } from "zod";
4696
4821
 
4697
4822
  // internal/dynamic-forms-validation/src/lib/schemas/logic/state-logic.schema.ts
4698
- import { z as z8 } from "zod";
4699
- var StateLogicTypeSchema = z8.enum(["hidden", "readonly", "disabled", "required"]);
4700
- var FormStateConditionSchema = z8.enum(["formInvalid", "formSubmitting", "pageInvalid"]);
4701
- var StateConditionSchema = z8.union([ConditionalExpressionSchema, z8.boolean(), FormStateConditionSchema]);
4702
- var LogicTriggerSchema = z8.enum(["onChange", "debounced"]);
4703
- var ImmediateStateLogicConfigSchema = z8.object({
4823
+ import { z as z9 } from "zod";
4824
+ var StateLogicTypeSchema = z9.enum(["hidden", "readonly", "disabled", "required"]);
4825
+ var FormStateConditionSchema = z9.enum(["formInvalid", "formSubmitting", "pageInvalid"]);
4826
+ var StateConditionSchema = z9.union([ConditionalExpressionSchema, z9.boolean(), FormStateConditionSchema]);
4827
+ var LogicTriggerSchema = z9.enum(["onChange", "debounced"]);
4828
+ var ImmediateStateLogicConfigSchema = z9.object({
4704
4829
  /**
4705
4830
  * The state property to control.
4706
4831
  */
@@ -4712,9 +4837,9 @@ var ImmediateStateLogicConfigSchema = z8.object({
4712
4837
  /**
4713
4838
  * Trigger type - defaults to 'onChange' for immediate evaluation.
4714
4839
  */
4715
- trigger: z8.literal("onChange").optional()
4840
+ trigger: z9.literal("onChange").optional()
4716
4841
  });
4717
- var DebouncedStateLogicConfigSchema = z8.object({
4842
+ var DebouncedStateLogicConfigSchema = z9.object({
4718
4843
  /**
4719
4844
  * The state property to control.
4720
4845
  */
@@ -4726,101 +4851,101 @@ var DebouncedStateLogicConfigSchema = z8.object({
4726
4851
  /**
4727
4852
  * Trigger type - must be 'debounced' for delayed evaluation.
4728
4853
  */
4729
- trigger: z8.literal("debounced"),
4854
+ trigger: z9.literal("debounced"),
4730
4855
  /**
4731
4856
  * Debounce duration in milliseconds. Defaults to 500.
4732
4857
  */
4733
- debounceMs: z8.number().positive().optional()
4858
+ debounceMs: z9.number().positive().optional()
4734
4859
  });
4735
- var StateLogicConfigSchema = z8.union([ImmediateStateLogicConfigSchema, DebouncedStateLogicConfigSchema]);
4860
+ var StateLogicConfigSchema = z9.union([ImmediateStateLogicConfigSchema, DebouncedStateLogicConfigSchema]);
4736
4861
 
4737
4862
  // internal/dynamic-forms-validation/src/lib/schemas/logic/derivation-logic.schema.ts
4738
- import { z as z9 } from "zod";
4739
- var OnChangeDerivationLogicConfigSchema = z9.object({
4863
+ import { z as z10 } from "zod";
4864
+ var OnChangeDerivationLogicConfigSchema = z10.object({
4740
4865
  /**
4741
4866
  * Discriminant for derivation logic.
4742
4867
  */
4743
- type: z9.literal("derivation"),
4868
+ type: z10.literal("derivation"),
4744
4869
  /**
4745
4870
  * Debug name for logging and troubleshooting.
4746
4871
  */
4747
- debugName: z9.string().optional(),
4872
+ debugName: z10.string().optional(),
4748
4873
  /**
4749
4874
  * Condition for when this derivation should run.
4750
4875
  * Defaults to true (always runs).
4751
4876
  */
4752
- condition: z9.union([ConditionalExpressionSchema, z9.boolean()]).optional(),
4877
+ condition: z10.union([ConditionalExpressionSchema, z10.boolean()]).optional(),
4753
4878
  /**
4754
4879
  * Static value to set. Mutually exclusive with expression/functionName.
4755
4880
  */
4756
- value: z9.unknown().optional(),
4881
+ value: z10.unknown().optional(),
4757
4882
  /**
4758
4883
  * JavaScript expression to evaluate for the value.
4759
4884
  * Has access to: fieldValue, formValue, fieldPath
4760
4885
  */
4761
- expression: z9.string().optional(),
4886
+ expression: z10.string().optional(),
4762
4887
  /**
4763
4888
  * Name of a registered derivation function.
4764
4889
  * The function must be registered in customFnConfig.derivations.
4765
4890
  */
4766
- functionName: z9.string().optional(),
4891
+ functionName: z10.string().optional(),
4767
4892
  /**
4768
4893
  * Explicit dependencies for determining when to re-evaluate.
4769
4894
  * If omitted, dependencies are auto-detected from the expression.
4770
4895
  */
4771
- dependsOn: z9.array(z9.string()).optional(),
4896
+ dependsOn: z10.array(z10.string()).optional(),
4772
4897
  /**
4773
4898
  * Trigger type - defaults to 'onChange' for immediate evaluation.
4774
4899
  */
4775
- trigger: z9.literal("onChange").optional()
4900
+ trigger: z10.literal("onChange").optional()
4776
4901
  });
4777
- var DebouncedDerivationLogicConfigSchema = z9.object({
4902
+ var DebouncedDerivationLogicConfigSchema = z10.object({
4778
4903
  /**
4779
4904
  * Discriminant for derivation logic.
4780
4905
  */
4781
- type: z9.literal("derivation"),
4906
+ type: z10.literal("derivation"),
4782
4907
  /**
4783
4908
  * Debug name for logging and troubleshooting.
4784
4909
  */
4785
- debugName: z9.string().optional(),
4910
+ debugName: z10.string().optional(),
4786
4911
  /**
4787
4912
  * Condition for when this derivation should run.
4788
4913
  */
4789
- condition: z9.union([ConditionalExpressionSchema, z9.boolean()]).optional(),
4914
+ condition: z10.union([ConditionalExpressionSchema, z10.boolean()]).optional(),
4790
4915
  /**
4791
4916
  * Static value to set.
4792
4917
  */
4793
- value: z9.unknown().optional(),
4918
+ value: z10.unknown().optional(),
4794
4919
  /**
4795
4920
  * JavaScript expression to evaluate for the value.
4796
4921
  */
4797
- expression: z9.string().optional(),
4922
+ expression: z10.string().optional(),
4798
4923
  /**
4799
4924
  * Name of a registered derivation function.
4800
4925
  */
4801
- functionName: z9.string().optional(),
4926
+ functionName: z10.string().optional(),
4802
4927
  /**
4803
4928
  * Explicit dependencies for determining when to re-evaluate.
4804
4929
  */
4805
- dependsOn: z9.array(z9.string()).optional(),
4930
+ dependsOn: z10.array(z10.string()).optional(),
4806
4931
  /**
4807
4932
  * Trigger type - must be 'debounced' for delayed evaluation.
4808
4933
  */
4809
- trigger: z9.literal("debounced"),
4934
+ trigger: z10.literal("debounced"),
4810
4935
  /**
4811
4936
  * Debounce duration in milliseconds. Defaults to 500.
4812
4937
  */
4813
- debounceMs: z9.number().positive().optional()
4938
+ debounceMs: z10.number().positive().optional()
4814
4939
  });
4815
- var DerivationLogicConfigSchema = z9.union([OnChangeDerivationLogicConfigSchema, DebouncedDerivationLogicConfigSchema]);
4940
+ var DerivationLogicConfigSchema = z10.union([OnChangeDerivationLogicConfigSchema, DebouncedDerivationLogicConfigSchema]);
4816
4941
 
4817
4942
  // internal/dynamic-forms-validation/src/lib/schemas/logic/logic-config.schema.ts
4818
- var LogicConfigSchema = z10.union([StateLogicConfigSchema, DerivationLogicConfigSchema]);
4819
- var LogicArraySchema = z10.array(LogicConfigSchema);
4943
+ var LogicConfigSchema = z11.union([StateLogicConfigSchema, DerivationLogicConfigSchema]);
4944
+ var LogicArraySchema = z11.array(LogicConfigSchema);
4820
4945
 
4821
4946
  // internal/dynamic-forms-validation/src/lib/schemas/field/field-with-validation.schema.ts
4822
- var SchemaApplicationTypeSchema = z11.enum(["apply", "applyWhen", "applyWhenValue", "applyEach"]);
4823
- var SchemaApplicationConfigSchema = z11.object({
4947
+ var SchemaApplicationTypeSchema = z12.enum(["apply", "applyWhen", "applyWhenValue", "applyEach"]);
4948
+ var SchemaApplicationConfigSchema = z12.object({
4824
4949
  /**
4825
4950
  * How to apply the schema.
4826
4951
  */
@@ -4829,7 +4954,7 @@ var SchemaApplicationConfigSchema = z11.object({
4829
4954
  * Schema name (reference) or inline schema definition.
4830
4955
  * For JSON configs, this is always a string reference.
4831
4956
  */
4832
- schema: z11.string(),
4957
+ schema: z12.string(),
4833
4958
  /**
4834
4959
  * Condition for 'applyWhen' type.
4835
4960
  */
@@ -4837,34 +4962,34 @@ var SchemaApplicationConfigSchema = z11.object({
4837
4962
  /**
4838
4963
  * Type predicate expression for 'applyWhenValue' type.
4839
4964
  */
4840
- typePredicate: z11.string().optional()
4965
+ typePredicate: z12.string().optional()
4841
4966
  });
4842
- var FieldWithValidationSchema = z11.object({
4967
+ var FieldWithValidationSchema = z12.object({
4843
4968
  // Simple validation rules (ease of use)
4844
4969
  /**
4845
4970
  * Whether the field is required.
4846
4971
  */
4847
- required: z11.boolean().optional(),
4972
+ required: z12.boolean().optional(),
4848
4973
  /**
4849
4974
  * Whether to apply email validation.
4850
4975
  */
4851
- email: z11.boolean().optional(),
4976
+ email: z12.boolean().optional(),
4852
4977
  /**
4853
4978
  * Minimum numeric value.
4854
4979
  */
4855
- min: z11.number().optional(),
4980
+ min: z12.number().optional(),
4856
4981
  /**
4857
4982
  * Maximum numeric value.
4858
4983
  */
4859
- max: z11.number().optional(),
4984
+ max: z12.number().optional(),
4860
4985
  /**
4861
4986
  * Minimum string length.
4862
4987
  */
4863
- minLength: z11.number().optional(),
4988
+ minLength: z12.number().optional(),
4864
4989
  /**
4865
4990
  * Maximum string length.
4866
4991
  */
4867
- maxLength: z11.number().optional(),
4992
+ maxLength: z12.number().optional(),
4868
4993
  /**
4869
4994
  * Regex pattern for validation.
4870
4995
  *
@@ -4880,7 +5005,7 @@ var FieldWithValidationSchema = z11.object({
4880
5005
  * "pattern": "^[a-z]+$"
4881
5006
  * ```
4882
5007
  */
4883
- pattern: z11.string().optional(),
5008
+ pattern: z12.string().optional(),
4884
5009
  // Advanced validation configuration
4885
5010
  /**
4886
5011
  * Array of advanced validator configurations.
@@ -4899,22 +5024,22 @@ var FieldWithValidationSchema = z11.object({
4899
5024
  * Shorthand for simple computed/derived fields.
4900
5025
  * JavaScript expression that computes the field value.
4901
5026
  */
4902
- derivation: z11.string().optional(),
5027
+ derivation: z12.string().optional(),
4903
5028
  // Schema applications
4904
5029
  /**
4905
5030
  * Array of schema applications for reusable validation patterns.
4906
5031
  */
4907
- schemas: z11.array(SchemaApplicationConfigSchema).optional()
5032
+ schemas: z12.array(SchemaApplicationConfigSchema).optional()
4908
5033
  });
4909
5034
 
4910
5035
  // internal/dynamic-forms-validation/src/lib/schemas/field/nullable-value.refinement.ts
4911
- import { z as z12 } from "zod";
5036
+ import { z as z13 } from "zod";
4912
5037
  var nullableValueRefine = (data, ctx) => {
4913
5038
  if (!data || typeof data !== "object") return;
4914
5039
  const field = data;
4915
5040
  if (field.value === null && field.nullable !== true) {
4916
5041
  ctx.addIssue({
4917
- code: z12.ZodIssueCode.custom,
5042
+ code: z13.ZodIssueCode.custom,
4918
5043
  path: ["value"],
4919
5044
  message: "value: null is only allowed when nullable is true. Add `nullable: true` or remove the null value."
4920
5045
  });
@@ -4922,10 +5047,10 @@ var nullableValueRefine = (data, ctx) => {
4922
5047
  };
4923
5048
 
4924
5049
  // internal/dynamic-forms-validation/src/lib/schemas/containers/factories.ts
4925
- import { z as z13 } from "zod";
4926
- var ContainerLogicSchema = z13.object({
4927
- type: z13.literal("hidden"),
4928
- condition: z13.union([ConditionalExpressionSchema, z13.boolean()])
5050
+ import { z as z14 } from "zod";
5051
+ var ContainerLogicSchema = z14.object({
5052
+ type: z14.literal("hidden"),
5053
+ condition: z14.union([ConditionalExpressionSchema, z14.boolean()])
4929
5054
  });
4930
5055
  var SIMPLIFIED_ONLY_PROPS = ["template", "value", "addButton", "removeButton"];
4931
5056
  var SIMPLIFIED_ONLY_HINTS = {
@@ -4936,8 +5061,8 @@ var SIMPLIFIED_ONLY_HINTS = {
4936
5061
  };
4937
5062
  function createContainerSchemas(options) {
4938
5063
  const { leafFieldSchema } = options;
4939
- const AnyFieldSchema = z13.lazy(
4940
- () => z13.discriminatedUnion("type", [
5064
+ const AnyFieldSchema = z14.lazy(
5065
+ () => z14.discriminatedUnion("type", [
4941
5066
  leafFieldSchema,
4942
5067
  PageFieldSchema,
4943
5068
  RowFieldSchema,
@@ -4952,72 +5077,72 @@ function createContainerSchemas(options) {
4952
5077
  }).extend({
4953
5078
  // Explicitly forbid label on container fields
4954
5079
  // This makes Zod reject any value for these properties
4955
- label: z13.never().optional(),
4956
- meta: z13.never().optional()
5080
+ label: z14.never().optional(),
5081
+ meta: z14.never().optional()
4957
5082
  });
4958
5083
  const ContainerValidationShape = {
4959
- required: z13.boolean().optional(),
5084
+ required: z14.boolean().optional(),
4960
5085
  validators: ValidatorsArraySchema.optional(),
4961
5086
  validationMessages: ValidationMessagesSchema.optional()
4962
5087
  };
4963
- const WrapperConfigSchema = z13.object({ type: z13.string() }).passthrough();
5088
+ const WrapperConfigSchema = z14.object({ type: z14.string() }).passthrough();
4964
5089
  const ContainerFieldSchema = ContainerBaseSchema.extend({
4965
- type: z13.literal("container"),
4966
- fields: z13.array(AnyFieldSchema),
4967
- wrappers: z13.array(WrapperConfigSchema),
4968
- logic: z13.array(ContainerLogicSchema).optional()
5090
+ type: z14.literal("container"),
5091
+ fields: z14.array(AnyFieldSchema),
5092
+ wrappers: z14.array(WrapperConfigSchema),
5093
+ logic: z14.array(ContainerLogicSchema).optional()
4969
5094
  });
4970
5095
  const PageFieldSchema = ContainerBaseSchema.extend({
4971
- type: z13.literal("page"),
4972
- fields: z13.array(AnyFieldSchema),
4973
- logic: z13.array(ContainerLogicSchema).optional(),
5096
+ type: z14.literal("page"),
5097
+ fields: z14.array(AnyFieldSchema),
5098
+ logic: z14.array(ContainerLogicSchema).optional(),
4974
5099
  // Also forbid title (common mistake)
4975
- title: z13.never().optional()
5100
+ title: z14.never().optional()
4976
5101
  });
4977
5102
  const RowFieldSchema = ContainerBaseSchema.extend({
4978
- type: z13.literal("row"),
4979
- fields: z13.array(AnyFieldSchema),
5103
+ type: z14.literal("row"),
5104
+ fields: z14.array(AnyFieldSchema),
4980
5105
  // Container logic - only 'hidden' type allowed (same as pages)
4981
- logic: z13.array(ContainerLogicSchema).optional()
5106
+ logic: z14.array(ContainerLogicSchema).optional()
4982
5107
  });
4983
5108
  const GroupFieldSchema = ContainerBaseSchema.extend({
4984
- type: z13.literal("group"),
4985
- fields: z13.array(AnyFieldSchema),
5109
+ type: z14.literal("group"),
5110
+ fields: z14.array(AnyFieldSchema),
4986
5111
  ...ContainerValidationShape,
4987
5112
  // Container logic - only 'hidden' type allowed (same as pages)
4988
- logic: z13.array(ContainerLogicSchema).optional()
5113
+ logic: z14.array(ContainerLogicSchema).optional()
4989
5114
  });
4990
- const ArrayButtonConfigSchema = z13.object({
4991
- label: z13.string().optional(),
4992
- props: z13.record(z13.string(), z13.unknown()).optional()
5115
+ const ArrayButtonConfigSchema = z14.object({
5116
+ label: z14.string().optional(),
5117
+ props: z14.record(z14.string(), z14.unknown()).optional()
4993
5118
  });
4994
- const ArrayAllowedChildSchema = z13.lazy(
5119
+ const ArrayAllowedChildSchema = z14.lazy(
4995
5120
  () => AnyFieldSchema.refine((field) => field.type !== "page" && field.type !== "array", {
4996
5121
  message: "Array templates cannot contain page or array fields. Only leaf fields, rows, and groups are allowed."
4997
5122
  })
4998
5123
  );
4999
5124
  const ArrayFieldSchema = ContainerBaseSchema.extend({
5000
- type: z13.literal("array"),
5125
+ type: z14.literal("array"),
5001
5126
  ...ContainerValidationShape,
5002
5127
  // Full API: explicit item definitions.
5003
- fields: z13.array(AnyFieldSchema).optional(),
5128
+ fields: z14.array(AnyFieldSchema).optional(),
5004
5129
  // Simplified API: single field (primitive array) or array of fields (object array).
5005
5130
  // Only ArrayAllowedChildren (leaf fields, rows, groups) are valid — no pages or nested arrays.
5006
- template: z13.union([ArrayAllowedChildSchema, z13.array(ArrayAllowedChildSchema)]).optional(),
5131
+ template: z14.union([ArrayAllowedChildSchema, z14.array(ArrayAllowedChildSchema)]).optional(),
5007
5132
  // Initial values for the array
5008
- value: z13.array(z13.unknown()).optional(),
5133
+ value: z14.array(z14.unknown()).optional(),
5009
5134
  // Button customization or opt-out (false to disable)
5010
- addButton: z13.union([ArrayButtonConfigSchema, z13.literal(false)]).optional(),
5011
- removeButton: z13.union([ArrayButtonConfigSchema, z13.literal(false)]).optional(),
5012
- logic: z13.array(ContainerLogicSchema).optional(),
5135
+ addButton: z14.union([ArrayButtonConfigSchema, z14.literal(false)]).optional(),
5136
+ removeButton: z14.union([ArrayButtonConfigSchema, z14.literal(false)]).optional(),
5137
+ logic: z14.array(ContainerLogicSchema).optional(),
5013
5138
  // Array length validation
5014
- minLength: z13.number().int().min(0).optional(),
5015
- maxLength: z13.number().int().min(0).optional(),
5139
+ minLength: z14.number().int().min(0).optional(),
5140
+ maxLength: z14.number().int().min(0).optional(),
5016
5141
  // The array size properties are minLength/maxLength. These are the common
5017
5142
  // wrong spelling, and naming them keeps the mistake from being silently
5018
5143
  // stripped. Previously only the simplified API rejected them.
5019
- minItems: z13.never().optional(),
5020
- maxItems: z13.never().optional()
5144
+ minItems: z14.never().optional(),
5145
+ maxItems: z14.never().optional()
5021
5146
  }).superRefine((field, ctx) => {
5022
5147
  const hasFields = field.fields !== void 0;
5023
5148
  const hasTemplate = field.template !== void 0;
@@ -5076,9 +5201,9 @@ function createContainerSchemas(options) {
5076
5201
  }
5077
5202
 
5078
5203
  // internal/dynamic-forms-validation/src/lib/schemas/leaves/text-field.schema.ts
5079
- import { z as z14 } from "zod";
5080
- var TextElementTypeSchema = z14.enum(["p", "h1", "h2", "h3", "h4", "h5", "h6", "span"]);
5081
- var TextPropsSchema = z14.object({
5204
+ import { z as z15 } from "zod";
5205
+ var TextElementTypeSchema = z15.enum(["p", "h1", "h2", "h3", "h4", "h5", "h6", "span"]);
5206
+ var TextPropsSchema = z15.object({
5082
5207
  /**
5083
5208
  * HTML element type to render the text.
5084
5209
  */
@@ -5088,7 +5213,7 @@ var TextFieldSchema = BaseFieldDefSchema.extend({
5088
5213
  /**
5089
5214
  * Field type discriminant.
5090
5215
  */
5091
- type: z14.literal("text"),
5216
+ type: z15.literal("text"),
5092
5217
  /**
5093
5218
  * Text-specific properties.
5094
5219
  */
@@ -5100,9 +5225,9 @@ var TextFieldSchema = BaseFieldDefSchema.extend({
5100
5225
  });
5101
5226
 
5102
5227
  // internal/dynamic-forms-validation/src/lib/schemas/leaves/hidden-field.schema.ts
5103
- import { z as z15 } from "zod";
5104
- var HiddenScalarSchema = z15.union([z15.string(), z15.number(), z15.boolean()]);
5105
- var HiddenValueSchema = z15.union([HiddenScalarSchema, z15.array(HiddenScalarSchema)]);
5228
+ import { z as z16 } from "zod";
5229
+ var HiddenScalarSchema = z16.union([z16.string(), z16.number(), z16.boolean()]);
5230
+ var HiddenValueSchema = z16.union([HiddenScalarSchema, z16.array(HiddenScalarSchema)]);
5106
5231
  var HiddenFieldSchema = BaseFieldDefSchema.omit({
5107
5232
  label: true,
5108
5233
  meta: true,
@@ -5118,7 +5243,7 @@ var HiddenFieldSchema = BaseFieldDefSchema.omit({
5118
5243
  /**
5119
5244
  * Field type discriminant.
5120
5245
  */
5121
- type: z15.literal("hidden"),
5246
+ type: z16.literal("hidden"),
5122
5247
  /**
5123
5248
  * The value to store. Required for hidden fields.
5124
5249
  */
@@ -5126,42 +5251,70 @@ var HiddenFieldSchema = BaseFieldDefSchema.omit({
5126
5251
  });
5127
5252
 
5128
5253
  // internal/dynamic-forms-validation/src/lib/schemas/form/form-options.schema.ts
5129
- import { z as z16 } from "zod";
5130
- var SubmitButtonOptionsSchema = z16.object({
5254
+ import { z as z17 } from "zod";
5255
+ var SubmitButtonOptionsSchema = z17.object({
5131
5256
  /**
5132
5257
  * Whether to disable the submit button when the form is invalid.
5133
5258
  * Defaults to true.
5134
5259
  */
5135
- disableWhenInvalid: z16.boolean().optional(),
5260
+ disableWhenInvalid: z17.boolean().optional(),
5136
5261
  /**
5137
5262
  * Whether to disable the submit button while the form is submitting.
5138
5263
  * Defaults to true.
5139
5264
  */
5140
- disableWhileSubmitting: z16.boolean().optional()
5265
+ disableWhileSubmitting: z17.boolean().optional()
5141
5266
  });
5142
- var NextButtonOptionsSchema = z16.object({
5267
+ var NextButtonOptionsSchema = z17.object({
5143
5268
  /**
5144
5269
  * Whether to disable the next button when the current page is invalid.
5145
5270
  * Defaults to true.
5146
5271
  */
5147
- disableWhenPageInvalid: z16.boolean().optional(),
5272
+ disableWhenPageInvalid: z17.boolean().optional(),
5148
5273
  /**
5149
5274
  * Whether to disable the next button while the form is submitting.
5150
5275
  * Defaults to true.
5151
5276
  */
5152
- disableWhileSubmitting: z16.boolean().optional()
5277
+ disableWhileSubmitting: z17.boolean().optional()
5278
+ });
5279
+ var WebMcpToolOptionsSchema = z17.object({
5280
+ /**
5281
+ * Base name for this form's tools, registered as `fill_{name}` and
5282
+ * `submit_{name}`. Must be unique across every form mounted on the page.
5283
+ *
5284
+ * The registered name has to satisfy the WebMCP draft's own rule — 1-128
5285
+ * characters of `A-Z`, `a-z`, `0-9`, `_`, `-` or `.` — and `registerTool()`
5286
+ * rejects anything else, so the same rule is enforced here (minus the room the
5287
+ * `fill_` / `submit_` prefix takes).
5288
+ *
5289
+ * @see https://webmachinelearning.github.io/webmcp/
5290
+ */
5291
+ 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'),
5292
+ /**
5293
+ * What this form is for, and when an agent should reach for it.
5294
+ */
5295
+ description: z17.string().min(1),
5296
+ /**
5297
+ * Whether an agent may submit this form directly. Off by default; without it
5298
+ * the agent can fill the form but a human presses the button.
5299
+ */
5300
+ allowSubmit: z17.boolean().optional(),
5301
+ /**
5302
+ * How much of the form a tool response hands back. `'changed'` (the default)
5303
+ * returns only what the call set; `'all'` returns the whole readable model.
5304
+ */
5305
+ readback: z17.enum(["changed", "all"]).optional()
5153
5306
  });
5154
- var FormOptionsSchema = z16.object({
5307
+ var FormOptionsSchema = z17.object({
5155
5308
  /**
5156
5309
  * Whether the entire form is disabled.
5157
5310
  */
5158
- disabled: z16.boolean().optional(),
5311
+ disabled: z17.boolean().optional(),
5159
5312
  /**
5160
5313
  * Maximum number of derivation iterations before stopping.
5161
5314
  * Prevents infinite loops in circular derivations.
5162
5315
  * Defaults to 10.
5163
5316
  */
5164
- maxDerivationIterations: z16.number().positive().optional(),
5317
+ maxDerivationIterations: z17.number().positive().optional(),
5165
5318
  /**
5166
5319
  * Options for the submit button behavior.
5167
5320
  */
@@ -5174,42 +5327,47 @@ var FormOptionsSchema = z16.object({
5174
5327
  * Whether to exclude values of hidden fields from submission output.
5175
5328
  * Overrides the global withValueExclusionDefaults() setting for this form.
5176
5329
  */
5177
- excludeValueIfHidden: z16.boolean().optional(),
5330
+ excludeValueIfHidden: z17.boolean().optional(),
5178
5331
  /**
5179
5332
  * Whether to exclude values of disabled fields from submission output.
5180
5333
  * Overrides the global withValueExclusionDefaults() setting for this form.
5181
5334
  */
5182
- excludeValueIfDisabled: z16.boolean().optional(),
5335
+ excludeValueIfDisabled: z17.boolean().optional(),
5183
5336
  /**
5184
5337
  * Whether to exclude values of readonly fields from submission output.
5185
5338
  * Overrides the global withValueExclusionDefaults() setting for this form.
5186
5339
  */
5187
- excludeValueIfReadonly: z16.boolean().optional(),
5340
+ excludeValueIfReadonly: z17.boolean().optional(),
5188
5341
  /**
5189
5342
  * Whether to run validation while a field is hidden.
5190
5343
  * Acts as the root inherited value for the form. Per-field
5191
5344
  * validateWhenHidden overrides cascade through the field tree.
5192
5345
  */
5193
- validateWhenHidden: z16.boolean().optional()
5346
+ validateWhenHidden: z17.boolean().optional(),
5347
+ /**
5348
+ * Exposes this form to browser AI agents as WebMCP tools (experimental).
5349
+ * Requires the `withExperimentalWebMcp()` feature on `provideDynamicForm(...)`.
5350
+ */
5351
+ webMcp: WebMcpToolOptionsSchema.optional()
5194
5352
  });
5195
5353
 
5196
5354
  // internal/dynamic-forms-validation/src/lib/schemas/form/schema-definition.schema.ts
5197
- import { z as z17 } from "zod";
5198
- var SchemaDefinitionSchema = z17.object({
5355
+ import { z as z18 } from "zod";
5356
+ var SchemaDefinitionSchema = z18.object({
5199
5357
  /**
5200
5358
  * Unique identifier for the schema.
5201
5359
  * Used to reference the schema in SchemaApplicationConfig.
5202
5360
  */
5203
- name: z17.string(),
5361
+ name: z18.string(),
5204
5362
  /**
5205
5363
  * Human-readable description of what this schema validates.
5206
5364
  */
5207
- description: z17.string().optional(),
5365
+ description: z18.string().optional(),
5208
5366
  /**
5209
5367
  * Field path pattern for automatic schema application.
5210
5368
  * Supports glob-like patterns.
5211
5369
  */
5212
- pathPattern: z17.string().optional(),
5370
+ pathPattern: z18.string().optional(),
5213
5371
  /**
5214
5372
  * Validators to apply to fields using this schema.
5215
5373
  */
@@ -5221,18 +5379,18 @@ var SchemaDefinitionSchema = z17.object({
5221
5379
  /**
5222
5380
  * Nested schema applications for composing schemas.
5223
5381
  */
5224
- subSchemas: z17.array(SchemaApplicationConfigSchema).optional()
5382
+ subSchemas: z18.array(SchemaApplicationConfigSchema).optional()
5225
5383
  });
5226
- var SchemaDefinitionsArraySchema = z17.array(SchemaDefinitionSchema);
5384
+ var SchemaDefinitionsArraySchema = z18.array(SchemaDefinitionSchema);
5227
5385
 
5228
5386
  // internal/dynamic-forms-validation/src/lib/schemas/form/form-config.schema.ts
5229
- import { z as z18 } from "zod";
5387
+ import { z as z19 } from "zod";
5230
5388
  function createFormConfigSchema(fieldSchema, propsSchema) {
5231
- const baseSchema = z18.object({
5389
+ const baseSchema = z19.object({
5232
5390
  /**
5233
5391
  * Array of field definitions that make up the form.
5234
5392
  */
5235
- fields: z18.array(fieldSchema),
5393
+ fields: z19.array(fieldSchema),
5236
5394
  /**
5237
5395
  * Form-level options controlling behavior.
5238
5396
  */
@@ -5272,23 +5430,23 @@ function createFormConfigSchema(fieldSchema, propsSchema) {
5272
5430
  }
5273
5431
  return baseSchema;
5274
5432
  }
5275
- var BaseFormConfigSchema = z18.object({
5276
- fields: z18.array(z18.any()),
5433
+ var BaseFormConfigSchema = z19.object({
5434
+ fields: z19.array(z19.any()),
5277
5435
  options: FormOptionsSchema.optional(),
5278
5436
  schemas: SchemaDefinitionsArraySchema.optional(),
5279
5437
  defaultValidationMessages: ValidationMessagesSchema.optional()
5280
5438
  });
5281
5439
 
5282
5440
  // internal/dynamic-forms-validation/validate/src/json-schema/form-config-json-schema.ts
5283
- import { z as z55 } from "zod";
5441
+ import { z as z57 } from "zod";
5284
5442
 
5285
5443
  // internal/dynamic-forms-validation/material/src/props/mat-common-props.schema.ts
5286
- import { z as z19 } from "zod";
5287
- var MatFormFieldAppearanceSchema = z19.enum(["fill", "outline"]);
5288
- var SubscriptSizingSchema = z19.enum(["fixed", "dynamic"]);
5289
- var ThemePaletteSchema = z19.enum(["primary", "accent", "warn"]);
5290
- var LabelPositionSchema = z19.enum(["before", "after"]);
5291
- var MatFormFieldPropsSchema = z19.object({
5444
+ import { z as z20 } from "zod";
5445
+ var MatFormFieldAppearanceSchema = z20.enum(["fill", "outline"]);
5446
+ var SubscriptSizingSchema = z20.enum(["fixed", "dynamic"]);
5447
+ var ThemePaletteSchema = z20.enum(["primary", "accent", "warn"]);
5448
+ var LabelPositionSchema = z20.enum(["before", "after"]);
5449
+ var MatFormFieldPropsSchema = z20.object({
5292
5450
  /**
5293
5451
  * Form field appearance style.
5294
5452
  */
@@ -5302,13 +5460,13 @@ var MatFormFieldPropsSchema = z19.object({
5302
5460
  */
5303
5461
  hint: DynamicTextSchema.optional()
5304
5462
  });
5305
- var RipplePropsSchema = z19.object({
5463
+ var RipplePropsSchema = z20.object({
5306
5464
  /**
5307
5465
  * Whether to disable the ripple effect.
5308
5466
  */
5309
- disableRipple: z19.boolean().optional()
5467
+ disableRipple: z20.boolean().optional()
5310
5468
  });
5311
- var ColorPropsSchema = z19.object({
5469
+ var ColorPropsSchema = z20.object({
5312
5470
  /**
5313
5471
  * Material theme color.
5314
5472
  */
@@ -5316,9 +5474,9 @@ var ColorPropsSchema = z19.object({
5316
5474
  });
5317
5475
 
5318
5476
  // internal/dynamic-forms-validation/material/src/props/mat-input-props.schema.ts
5319
- import { z as z20 } from "zod";
5320
- var MatInputTypeSchema = z20.enum(["text", "email", "password", "number", "tel", "url", "search"]);
5321
- var MatInputPropsSchema = z20.object({
5477
+ import { z as z21 } from "zod";
5478
+ var MatInputTypeSchema = z21.enum(["text", "email", "password", "number", "tel", "url", "search"]);
5479
+ var MatInputPropsSchema = z21.object({
5322
5480
  /**
5323
5481
  * HTML input type.
5324
5482
  */
@@ -5334,7 +5492,7 @@ var MatInputPropsSchema = z20.object({
5334
5492
  /**
5335
5493
  * Whether to disable the ripple effect.
5336
5494
  */
5337
- disableRipple: z20.boolean().optional(),
5495
+ disableRipple: z21.boolean().optional(),
5338
5496
  /**
5339
5497
  * How to size the subscript (hint/error area).
5340
5498
  */
@@ -5346,9 +5504,9 @@ var MatInputPropsSchema = z20.object({
5346
5504
  });
5347
5505
 
5348
5506
  // internal/dynamic-forms-validation/material/src/props/mat-textarea-props.schema.ts
5349
- import { z as z21 } from "zod";
5350
- var TextareaResizeSchema = z21.enum(["none", "both", "horizontal", "vertical"]);
5351
- var MatTextareaPropsSchema = z21.object({
5507
+ import { z as z22 } from "zod";
5508
+ var TextareaResizeSchema = z22.enum(["none", "both", "horizontal", "vertical"]);
5509
+ var MatTextareaPropsSchema = z22.object({
5352
5510
  /**
5353
5511
  * Placeholder text for the textarea.
5354
5512
  */
@@ -5356,11 +5514,11 @@ var MatTextareaPropsSchema = z21.object({
5356
5514
  /**
5357
5515
  * Number of visible text rows.
5358
5516
  */
5359
- rows: z21.number().positive().optional(),
5517
+ rows: z22.number().positive().optional(),
5360
5518
  /**
5361
5519
  * Number of visible text columns.
5362
5520
  */
5363
- cols: z21.number().positive().optional(),
5521
+ cols: z22.number().positive().optional(),
5364
5522
  /**
5365
5523
  * Form field appearance style.
5366
5524
  */
@@ -5380,12 +5538,12 @@ var MatTextareaPropsSchema = z21.object({
5380
5538
  /**
5381
5539
  * Maximum character length.
5382
5540
  */
5383
- maxLength: z21.number().positive().optional()
5541
+ maxLength: z22.number().positive().optional()
5384
5542
  });
5385
5543
 
5386
5544
  // internal/dynamic-forms-validation/material/src/props/mat-select-props.schema.ts
5387
- import { z as z22 } from "zod";
5388
- var MatSelectPropsSchema = z22.object({
5545
+ import { z as z23 } from "zod";
5546
+ var MatSelectPropsSchema = z23.object({
5389
5547
  /**
5390
5548
  * Placeholder text for the select.
5391
5549
  */
@@ -5397,11 +5555,11 @@ var MatSelectPropsSchema = z22.object({
5397
5555
  /**
5398
5556
  * Whether to allow multiple selections.
5399
5557
  */
5400
- multiple: z22.boolean().optional(),
5558
+ multiple: z23.boolean().optional(),
5401
5559
  /**
5402
5560
  * Maximum height of the select panel (CSS value).
5403
5561
  */
5404
- panelMaxHeight: z22.string().optional(),
5562
+ panelMaxHeight: z23.string().optional(),
5405
5563
  /**
5406
5564
  * How to size the subscript (hint/error area).
5407
5565
  */
@@ -5417,8 +5575,8 @@ var MatSelectPropsSchema = z22.object({
5417
5575
  });
5418
5576
 
5419
5577
  // internal/dynamic-forms-validation/material/src/props/mat-checkbox-props.schema.ts
5420
- import { z as z23 } from "zod";
5421
- var MatCheckboxPropsSchema = z23.object({
5578
+ import { z as z24 } from "zod";
5579
+ var MatCheckboxPropsSchema = z24.object({
5422
5580
  /**
5423
5581
  * Material theme color.
5424
5582
  */
@@ -5426,7 +5584,7 @@ var MatCheckboxPropsSchema = z23.object({
5426
5584
  /**
5427
5585
  * Whether to disable the ripple effect.
5428
5586
  */
5429
- disableRipple: z23.boolean().optional(),
5587
+ disableRipple: z24.boolean().optional(),
5430
5588
  /**
5431
5589
  * Position of the label relative to the checkbox.
5432
5590
  */
@@ -5438,12 +5596,12 @@ var MatCheckboxPropsSchema = z23.object({
5438
5596
  /**
5439
5597
  * Whether the checkbox is in indeterminate state.
5440
5598
  */
5441
- indeterminate: z23.boolean().optional()
5599
+ indeterminate: z24.boolean().optional()
5442
5600
  });
5443
5601
 
5444
5602
  // internal/dynamic-forms-validation/material/src/props/mat-radio-props.schema.ts
5445
- import { z as z24 } from "zod";
5446
- var MatRadioPropsSchema = z24.object({
5603
+ import { z as z25 } from "zod";
5604
+ var MatRadioPropsSchema = z25.object({
5447
5605
  /**
5448
5606
  * Material theme color.
5449
5607
  */
@@ -5451,7 +5609,7 @@ var MatRadioPropsSchema = z24.object({
5451
5609
  /**
5452
5610
  * Whether to disable the ripple effect.
5453
5611
  */
5454
- disableRipple: z24.boolean().optional(),
5612
+ disableRipple: z25.boolean().optional(),
5455
5613
  /**
5456
5614
  * Position of the label relative to the radio button.
5457
5615
  */
@@ -5463,8 +5621,8 @@ var MatRadioPropsSchema = z24.object({
5463
5621
  });
5464
5622
 
5465
5623
  // internal/dynamic-forms-validation/material/src/props/mat-multi-checkbox-props.schema.ts
5466
- import { z as z25 } from "zod";
5467
- var MatMultiCheckboxPropsSchema = z25.object({
5624
+ import { z as z26 } from "zod";
5625
+ var MatMultiCheckboxPropsSchema = z26.object({
5468
5626
  /**
5469
5627
  * Material theme color.
5470
5628
  */
@@ -5472,11 +5630,11 @@ var MatMultiCheckboxPropsSchema = z25.object({
5472
5630
  /**
5473
5631
  * Whether to disable the ripple effect.
5474
5632
  */
5475
- disableRipple: z25.boolean().optional(),
5633
+ disableRipple: z26.boolean().optional(),
5476
5634
  /**
5477
5635
  * Tab index for keyboard navigation.
5478
5636
  */
5479
- tabIndex: z25.number().optional(),
5637
+ tabIndex: z26.number().optional(),
5480
5638
  /**
5481
5639
  * Position of the labels relative to the checkboxes.
5482
5640
  */
@@ -5488,8 +5646,8 @@ var MatMultiCheckboxPropsSchema = z25.object({
5488
5646
  });
5489
5647
 
5490
5648
  // internal/dynamic-forms-validation/material/src/props/mat-toggle-props.schema.ts
5491
- import { z as z26 } from "zod";
5492
- var MatTogglePropsSchema = z26.object({
5649
+ import { z as z27 } from "zod";
5650
+ var MatTogglePropsSchema = z27.object({
5493
5651
  /**
5494
5652
  * Material theme color.
5495
5653
  */
@@ -5497,7 +5655,7 @@ var MatTogglePropsSchema = z26.object({
5497
5655
  /**
5498
5656
  * Whether to disable the ripple effect.
5499
5657
  */
5500
- disableRipple: z26.boolean().optional(),
5658
+ disableRipple: z27.boolean().optional(),
5501
5659
  /**
5502
5660
  * Position of the label relative to the toggle.
5503
5661
  */
@@ -5513,12 +5671,12 @@ var MatTogglePropsSchema = z26.object({
5513
5671
  /**
5514
5672
  * Whether to hide the icon inside the toggle.
5515
5673
  */
5516
- hideIcon: z26.boolean().optional()
5674
+ hideIcon: z27.boolean().optional()
5517
5675
  });
5518
5676
 
5519
5677
  // internal/dynamic-forms-validation/material/src/props/mat-slider-props.schema.ts
5520
- import { z as z27 } from "zod";
5521
- var MatSliderPropsSchema = z27.object({
5678
+ import { z as z28 } from "zod";
5679
+ var MatSliderPropsSchema = z28.object({
5522
5680
  /**
5523
5681
  * Material theme color.
5524
5682
  */
@@ -5535,25 +5693,25 @@ var MatSliderPropsSchema = z27.object({
5535
5693
  * Whether to display the thumb label.
5536
5694
  * @deprecated Use showThumbLabel instead
5537
5695
  */
5538
- thumbLabel: z27.boolean().optional(),
5696
+ thumbLabel: z28.boolean().optional(),
5539
5697
  /**
5540
5698
  * Whether to show the thumb label with the current value.
5541
5699
  */
5542
- showThumbLabel: z27.boolean().optional(),
5700
+ showThumbLabel: z28.boolean().optional(),
5543
5701
  /**
5544
5702
  * Interval for tick marks. 'auto' spaces them automatically.
5545
5703
  */
5546
- tickInterval: z27.union([z27.number().positive(), z27.literal("auto")]).optional(),
5704
+ tickInterval: z28.union([z28.number().positive(), z28.literal("auto")]).optional(),
5547
5705
  /**
5548
5706
  * Step increment for the slider.
5549
5707
  */
5550
- step: z27.number().positive().optional()
5708
+ step: z28.number().positive().optional()
5551
5709
  });
5552
5710
 
5553
5711
  // internal/dynamic-forms-validation/material/src/props/mat-datepicker-props.schema.ts
5554
- import { z as z28 } from "zod";
5555
- var DatepickerStartViewSchema = z28.enum(["month", "year", "multi-year"]);
5556
- var MatDatepickerPropsSchema = z28.object({
5712
+ import { z as z29 } from "zod";
5713
+ var DatepickerStartViewSchema = z29.enum(["month", "year", "multi-year"]);
5714
+ var MatDatepickerPropsSchema = z29.object({
5557
5715
  /**
5558
5716
  * Placeholder text for the datepicker input.
5559
5717
  */
@@ -5569,7 +5727,7 @@ var MatDatepickerPropsSchema = z28.object({
5569
5727
  /**
5570
5728
  * Whether to disable the ripple effect.
5571
5729
  */
5572
- disableRipple: z28.boolean().optional(),
5730
+ disableRipple: z29.boolean().optional(),
5573
5731
  /**
5574
5732
  * How to size the subscript (hint/error area).
5575
5733
  */
@@ -5581,7 +5739,7 @@ var MatDatepickerPropsSchema = z28.object({
5581
5739
  /**
5582
5740
  * Whether to use touch-friendly UI mode.
5583
5741
  */
5584
- touchUi: z28.boolean().optional(),
5742
+ touchUi: z29.boolean().optional(),
5585
5743
  /**
5586
5744
  * Hint text displayed below the field.
5587
5745
  */
@@ -5589,9 +5747,9 @@ var MatDatepickerPropsSchema = z28.object({
5589
5747
  });
5590
5748
 
5591
5749
  // internal/dynamic-forms-validation/material/src/props/mat-button-props.schema.ts
5592
- import { z as z29 } from "zod";
5593
- var ButtonTypeSchema = z29.enum(["button", "submit", "reset"]);
5594
- var MatButtonPropsSchema = z29.object({
5750
+ import { z as z30 } from "zod";
5751
+ var ButtonTypeSchema = z30.enum(["button", "submit", "reset"]);
5752
+ var MatButtonPropsSchema = z30.object({
5595
5753
  /**
5596
5754
  * Material theme color.
5597
5755
  */
@@ -5603,17 +5761,17 @@ var MatButtonPropsSchema = z29.object({
5603
5761
  });
5604
5762
 
5605
5763
  // internal/dynamic-forms-validation/material/src/fields/mat-input-field.schema.ts
5606
- import { z as z30 } from "zod";
5764
+ import { z as z31 } from "zod";
5607
5765
  var MatInputFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5608
5766
  /**
5609
5767
  * Field type discriminant.
5610
5768
  */
5611
- type: z30.literal("input"),
5612
- nullable: z30.boolean().optional(),
5769
+ type: z31.literal("input"),
5770
+ nullable: z31.boolean().optional(),
5613
5771
  /**
5614
5772
  * Initial value for the input.
5615
5773
  */
5616
- value: z30.string().nullable().optional(),
5774
+ value: z31.string().nullable().optional(),
5617
5775
  /**
5618
5776
  * Placeholder text (can also be in props).
5619
5777
  */
@@ -5626,17 +5784,17 @@ var MatInputFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSche
5626
5784
  var MatInputFieldSchema = MatInputFieldSchemaObject.superRefine(nullableValueRefine);
5627
5785
 
5628
5786
  // internal/dynamic-forms-validation/material/src/fields/mat-textarea-field.schema.ts
5629
- import { z as z31 } from "zod";
5787
+ import { z as z32 } from "zod";
5630
5788
  var MatTextareaFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5631
5789
  /**
5632
5790
  * Field type discriminant.
5633
5791
  */
5634
- type: z31.literal("textarea"),
5635
- nullable: z31.boolean().optional(),
5792
+ type: z32.literal("textarea"),
5793
+ nullable: z32.boolean().optional(),
5636
5794
  /**
5637
5795
  * Initial value for the textarea.
5638
5796
  */
5639
- value: z31.string().nullable().optional(),
5797
+ value: z32.string().nullable().optional(),
5640
5798
  /**
5641
5799
  * Placeholder text (can also be in props).
5642
5800
  */
@@ -5649,18 +5807,18 @@ var MatTextareaFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationS
5649
5807
  var MatTextareaFieldSchema = MatTextareaFieldSchemaObject.superRefine(nullableValueRefine);
5650
5808
 
5651
5809
  // internal/dynamic-forms-validation/material/src/fields/mat-select-field.schema.ts
5652
- import { z as z32 } from "zod";
5810
+ import { z as z33 } from "zod";
5653
5811
  var MatSelectFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5654
5812
  /**
5655
5813
  * Field type discriminant.
5656
5814
  */
5657
- type: z32.literal("select"),
5658
- nullable: z32.boolean().optional(),
5815
+ type: z33.literal("select"),
5816
+ nullable: z33.boolean().optional(),
5659
5817
  /**
5660
5818
  * Initial value for the select.
5661
5819
  * Can be single value or array if multiple is enabled.
5662
5820
  */
5663
- value: z32.unknown().nullable().optional(),
5821
+ value: z33.unknown().nullable().optional(),
5664
5822
  /**
5665
5823
  * Placeholder text (can also be in props).
5666
5824
  */
@@ -5677,16 +5835,16 @@ var MatSelectFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSch
5677
5835
  var MatSelectFieldSchema = MatSelectFieldSchemaObject.superRefine(nullableValueRefine);
5678
5836
 
5679
5837
  // internal/dynamic-forms-validation/material/src/fields/mat-checkbox-field.schema.ts
5680
- import { z as z33 } from "zod";
5838
+ import { z as z34 } from "zod";
5681
5839
  var MatCheckboxFieldSchema = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5682
5840
  /**
5683
5841
  * Field type discriminant.
5684
5842
  */
5685
- type: z33.literal("checkbox"),
5843
+ type: z34.literal("checkbox"),
5686
5844
  /**
5687
5845
  * Initial checked state.
5688
5846
  */
5689
- value: z33.boolean().optional(),
5847
+ value: z34.boolean().optional(),
5690
5848
  /**
5691
5849
  * Placeholder/helper text.
5692
5850
  */
@@ -5698,17 +5856,17 @@ var MatCheckboxFieldSchema = BaseFieldDefSchema.merge(FieldWithValidationSchema)
5698
5856
  });
5699
5857
 
5700
5858
  // internal/dynamic-forms-validation/material/src/fields/mat-radio-field.schema.ts
5701
- import { z as z34 } from "zod";
5859
+ import { z as z35 } from "zod";
5702
5860
  var MatRadioFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5703
5861
  /**
5704
5862
  * Field type discriminant.
5705
5863
  */
5706
- type: z34.literal("radio"),
5707
- nullable: z34.boolean().optional(),
5864
+ type: z35.literal("radio"),
5865
+ nullable: z35.boolean().optional(),
5708
5866
  /**
5709
5867
  * Initial selected value.
5710
5868
  */
5711
- value: z34.unknown().nullable().optional(),
5869
+ value: z35.unknown().nullable().optional(),
5712
5870
  /**
5713
5871
  * Placeholder/helper text.
5714
5872
  */
@@ -5725,17 +5883,17 @@ var MatRadioFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSche
5725
5883
  var MatRadioFieldSchema = MatRadioFieldSchemaObject.superRefine(nullableValueRefine);
5726
5884
 
5727
5885
  // internal/dynamic-forms-validation/material/src/fields/mat-multi-checkbox-field.schema.ts
5728
- import { z as z35 } from "zod";
5886
+ import { z as z36 } from "zod";
5729
5887
  var MatMultiCheckboxFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5730
5888
  /**
5731
5889
  * Field type discriminant.
5732
5890
  */
5733
- type: z35.literal("multi-checkbox"),
5734
- nullable: z35.boolean().optional(),
5891
+ type: z36.literal("multi-checkbox"),
5892
+ nullable: z36.boolean().optional(),
5735
5893
  /**
5736
5894
  * Initial selected values (array).
5737
5895
  */
5738
- value: z35.array(z35.unknown()).nullable().optional(),
5896
+ value: z36.array(z36.unknown()).nullable().optional(),
5739
5897
  /**
5740
5898
  * Placeholder/helper text.
5741
5899
  */
@@ -5752,16 +5910,16 @@ var MatMultiCheckboxFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValida
5752
5910
  var MatMultiCheckboxFieldSchema = MatMultiCheckboxFieldSchemaObject.superRefine(nullableValueRefine);
5753
5911
 
5754
5912
  // internal/dynamic-forms-validation/material/src/fields/mat-toggle-field.schema.ts
5755
- import { z as z36 } from "zod";
5913
+ import { z as z37 } from "zod";
5756
5914
  var MatToggleFieldSchema = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5757
5915
  /**
5758
5916
  * Field type discriminant.
5759
5917
  */
5760
- type: z36.literal("toggle"),
5918
+ type: z37.literal("toggle"),
5761
5919
  /**
5762
5920
  * Initial toggle state.
5763
5921
  */
5764
- value: z36.boolean().optional(),
5922
+ value: z37.boolean().optional(),
5765
5923
  /**
5766
5924
  * Placeholder/helper text.
5767
5925
  */
@@ -5773,29 +5931,29 @@ var MatToggleFieldSchema = BaseFieldDefSchema.merge(FieldWithValidationSchema).e
5773
5931
  });
5774
5932
 
5775
5933
  // internal/dynamic-forms-validation/material/src/fields/mat-slider-field.schema.ts
5776
- import { z as z37 } from "zod";
5934
+ import { z as z38 } from "zod";
5777
5935
  var MatSliderFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5778
5936
  /**
5779
5937
  * Field type discriminant.
5780
5938
  */
5781
- type: z37.literal("slider"),
5782
- nullable: z37.boolean().optional(),
5939
+ type: z38.literal("slider"),
5940
+ nullable: z38.boolean().optional(),
5783
5941
  /**
5784
5942
  * Initial slider value.
5785
5943
  */
5786
- value: z37.number().nullable().optional(),
5944
+ value: z38.number().nullable().optional(),
5787
5945
  /**
5788
5946
  * Minimum slider value.
5789
5947
  */
5790
- minValue: z37.number().optional(),
5948
+ minValue: z38.number().optional(),
5791
5949
  /**
5792
5950
  * Maximum slider value.
5793
5951
  */
5794
- maxValue: z37.number().optional(),
5952
+ maxValue: z38.number().optional(),
5795
5953
  /**
5796
5954
  * Step increment.
5797
5955
  */
5798
- step: z37.number().positive().optional(),
5956
+ step: z38.number().positive().optional(),
5799
5957
  /**
5800
5958
  * Placeholder/helper text.
5801
5959
  */
@@ -5808,14 +5966,14 @@ var MatSliderFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSch
5808
5966
  var MatSliderFieldSchema = MatSliderFieldSchemaObject.superRefine(nullableValueRefine);
5809
5967
 
5810
5968
  // internal/dynamic-forms-validation/material/src/fields/mat-datepicker-field.schema.ts
5811
- import { z as z38 } from "zod";
5812
- var DateValueSchema = z38.union([z38.string(), z38.null()]);
5969
+ import { z as z39 } from "zod";
5970
+ var DateValueSchema = z39.union([z39.string(), z39.null()]);
5813
5971
  var MatDatepickerFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidationSchema).extend({
5814
5972
  /**
5815
5973
  * Field type discriminant.
5816
5974
  */
5817
- type: z38.literal("datepicker"),
5818
- nullable: z38.boolean().optional(),
5975
+ type: z39.literal("datepicker"),
5976
+ nullable: z39.boolean().optional(),
5819
5977
  /**
5820
5978
  * Initial date value (ISO string in JSON configs).
5821
5979
  */
@@ -5844,22 +6002,29 @@ var MatDatepickerFieldSchemaObject = BaseFieldDefSchema.merge(FieldWithValidatio
5844
6002
  var MatDatepickerFieldSchema = MatDatepickerFieldSchemaObject.superRefine(nullableValueRefine);
5845
6003
 
5846
6004
  // internal/dynamic-forms-validation/material/src/fields/mat-button-field.schema.ts
5847
- import { z as z39 } from "zod";
5848
- var EventArgSchema = z39.union([z39.string(), z39.number(), z39.boolean(), z39.null(), z39.undefined()]);
6005
+ import { z as z41 } from "zod";
6006
+
6007
+ // internal/dynamic-forms-validation/src/lib/schemas/field/array-item-template.schema.ts
6008
+ import { z as z40 } from "zod";
6009
+ var FieldLikeSchema = z40.object({ type: z40.string() }).passthrough();
6010
+ var ArrayItemTemplateSchema = z40.union([FieldLikeSchema, z40.array(FieldLikeSchema)]);
6011
+
6012
+ // internal/dynamic-forms-validation/material/src/fields/mat-button-field.schema.ts
6013
+ var EventArgSchema = z41.union([z41.string(), z41.number(), z41.boolean(), z41.null(), z41.undefined()]);
5849
6014
  var MatButtonFieldSchema = BaseFieldDefSchema.extend({
5850
6015
  /**
5851
6016
  * Field type discriminant.
5852
6017
  */
5853
- type: z39.literal("button"),
6018
+ type: z41.literal("button"),
5854
6019
  /**
5855
6020
  * Event type name (string reference to registered event).
5856
6021
  * Note: Full event configuration requires runtime setup.
5857
6022
  */
5858
- event: z39.string().optional(),
6023
+ event: z41.string().optional(),
5859
6024
  /**
5860
6025
  * Arguments passed to the event constructor.
5861
6026
  */
5862
- eventArgs: z39.array(EventArgSchema).optional(),
6027
+ eventArgs: z41.array(EventArgSchema).optional(),
5863
6028
  /**
5864
6029
  * Material-specific button properties.
5865
6030
  */
@@ -5870,79 +6035,94 @@ var MatButtonFieldSchema = BaseFieldDefSchema.extend({
5870
6035
  logic: LogicArraySchema.optional()
5871
6036
  });
5872
6037
  var MatSubmitButtonFieldSchema = BaseFieldDefSchema.extend({
5873
- type: z39.literal("submit"),
6038
+ type: z41.literal("submit"),
5874
6039
  props: MatButtonPropsSchema.optional(),
5875
6040
  logic: LogicArraySchema.optional()
5876
6041
  });
5877
6042
  var MatNextButtonFieldSchema = BaseFieldDefSchema.extend({
5878
- type: z39.literal("next"),
6043
+ type: z41.literal("next"),
5879
6044
  props: MatButtonPropsSchema.optional(),
5880
6045
  logic: LogicArraySchema.optional()
5881
6046
  });
5882
6047
  var MatPreviousButtonFieldSchema = BaseFieldDefSchema.extend({
5883
- type: z39.literal("previous"),
6048
+ type: z41.literal("previous"),
5884
6049
  props: MatButtonPropsSchema.optional()
5885
6050
  });
5886
6051
  var MatAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5887
- type: z39.literal("add-array-item"),
6052
+ /**
6053
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6054
+ * item, or a list of them for an object item.
6055
+ */
6056
+ template: ArrayItemTemplateSchema,
6057
+ type: z41.literal("add-array-item"),
5888
6058
  /**
5889
6059
  * Key of the array field to add items to.
5890
6060
  * If omitted, uses the parent array context.
5891
6061
  */
5892
- arrayKey: z39.string().optional(),
6062
+ arrayKey: z41.string().optional(),
5893
6063
  props: MatButtonPropsSchema.optional()
5894
6064
  });
5895
6065
  var MatRemoveArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5896
- type: z39.literal("remove-array-item"),
6066
+ type: z41.literal("remove-array-item"),
5897
6067
  /**
5898
6068
  * Key of the array field to remove items from.
5899
6069
  * If omitted, uses the parent array context.
5900
6070
  */
5901
- arrayKey: z39.string().optional(),
6071
+ arrayKey: z41.string().optional(),
5902
6072
  props: MatButtonPropsSchema.optional()
5903
6073
  });
5904
6074
  var MatPrependArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5905
- type: z39.literal("prepend-array-item"),
6075
+ /**
6076
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6077
+ * item, or a list of them for an object item.
6078
+ */
6079
+ template: ArrayItemTemplateSchema,
6080
+ type: z41.literal("prepend-array-item"),
5906
6081
  /**
5907
6082
  * Key of the array field to prepend items to.
5908
6083
  * If omitted, uses the parent array context.
5909
6084
  */
5910
- arrayKey: z39.string().optional(),
6085
+ arrayKey: z41.string().optional(),
5911
6086
  props: MatButtonPropsSchema.optional()
5912
6087
  });
5913
6088
  var MatInsertArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5914
- type: z39.literal("insert-array-item"),
6089
+ /**
6090
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6091
+ * item, or a list of them for an object item.
6092
+ */
6093
+ template: ArrayItemTemplateSchema,
6094
+ type: z41.literal("insert-array-item"),
5915
6095
  /**
5916
6096
  * Key of the array field to insert items into.
5917
6097
  * If omitted, uses the parent array context.
5918
6098
  */
5919
- arrayKey: z39.string().optional(),
6099
+ arrayKey: z41.string().optional(),
5920
6100
  /**
5921
6101
  * Index at which to insert the new item.
5922
6102
  */
5923
- index: z39.number(),
6103
+ index: z41.number(),
5924
6104
  props: MatButtonPropsSchema.optional()
5925
6105
  });
5926
6106
  var MatPopArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5927
- type: z39.literal("pop-array-item"),
6107
+ type: z41.literal("pop-array-item"),
5928
6108
  /**
5929
6109
  * Key of the array field to pop items from.
5930
6110
  */
5931
- arrayKey: z39.string(),
6111
+ arrayKey: z41.string(),
5932
6112
  props: MatButtonPropsSchema.optional()
5933
6113
  });
5934
6114
  var MatShiftArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
5935
- type: z39.literal("shift-array-item"),
6115
+ type: z41.literal("shift-array-item"),
5936
6116
  /**
5937
6117
  * Key of the array field to shift items from.
5938
6118
  */
5939
- arrayKey: z39.string(),
6119
+ arrayKey: z41.string(),
5940
6120
  props: MatButtonPropsSchema.optional()
5941
6121
  });
5942
6122
 
5943
6123
  // internal/dynamic-forms-validation/material/src/mat-leaf-field.schema.ts
5944
- import { z as z40 } from "zod";
5945
- var MatLeafFieldSchema = z40.discriminatedUnion("type", [
6124
+ import { z as z42 } from "zod";
6125
+ var MatLeafFieldSchema = z42.discriminatedUnion("type", [
5946
6126
  // Default fields
5947
6127
  TextFieldSchema,
5948
6128
  HiddenFieldSchema,
@@ -5980,8 +6160,8 @@ var MatArrayFieldSchema = containerSchemas.ArrayFieldSchema;
5980
6160
  var MatFieldSchema = containerSchemas.AllFieldsSchema;
5981
6161
 
5982
6162
  // internal/dynamic-forms-validation/material/src/mat-form-config.schema.ts
5983
- import { z as z41 } from "zod";
5984
- var MatFormDefaultPropsSchema = z41.object({
6163
+ import { z as z43 } from "zod";
6164
+ var MatFormDefaultPropsSchema = z43.object({
5985
6165
  /**
5986
6166
  * Default form field appearance for all fields.
5987
6167
  */
@@ -5998,15 +6178,15 @@ var MatFormDefaultPropsSchema = z41.object({
5998
6178
  var MatFormConfigSchema = createFormConfigSchema(MatFieldSchema, MatFormDefaultPropsSchema);
5999
6179
 
6000
6180
  // internal/dynamic-forms-validation/bootstrap/src/props/index.ts
6001
- import { z as z43 } from "zod";
6181
+ import { z as z45 } from "zod";
6002
6182
 
6003
6183
  // internal/dynamic-forms-validation/bootstrap/src/props/bs-common-props.schema.ts
6004
- import { z as z42 } from "zod";
6005
- var BsSizeSchema = z42.enum(["sm", "lg"]);
6006
- var BsButtonVariantSchema = z42.enum(["primary", "secondary", "success", "danger", "warning", "info", "light", "dark", "link"]);
6007
- var BsFormFieldPropsSchema = z42.object({
6184
+ import { z as z44 } from "zod";
6185
+ var BsSizeSchema = z44.enum(["sm", "lg"]);
6186
+ var BsButtonVariantSchema = z44.enum(["primary", "secondary", "success", "danger", "warning", "info", "light", "dark", "link"]);
6187
+ var BsFormFieldPropsSchema = z44.object({
6008
6188
  size: BsSizeSchema.optional(),
6009
- floatingLabel: z42.boolean().optional(),
6189
+ floatingLabel: z44.boolean().optional(),
6010
6190
  hint: DynamicTextSchema.optional(),
6011
6191
  validFeedback: DynamicTextSchema.optional(),
6012
6192
  invalidFeedback: DynamicTextSchema.optional()
@@ -6014,94 +6194,94 @@ var BsFormFieldPropsSchema = z42.object({
6014
6194
 
6015
6195
  // internal/dynamic-forms-validation/bootstrap/src/props/index.ts
6016
6196
  var BsInputPropsSchema = BsFormFieldPropsSchema.extend({
6017
- type: z43.enum(["text", "email", "password", "number", "tel", "url"]).optional(),
6197
+ type: z45.enum(["text", "email", "password", "number", "tel", "url"]).optional(),
6018
6198
  placeholder: DynamicTextSchema.optional(),
6019
- plaintext: z43.boolean().optional()
6199
+ plaintext: z45.boolean().optional()
6020
6200
  });
6021
6201
  var BsTextareaPropsSchema = BsFormFieldPropsSchema.extend({
6022
- rows: z43.number().positive().optional(),
6202
+ rows: z45.number().positive().optional(),
6023
6203
  placeholder: DynamicTextSchema.optional()
6024
6204
  });
6025
6205
  var BsSelectPropsSchema = BsFormFieldPropsSchema.extend({
6026
- multiple: z43.boolean().optional(),
6027
- htmlSize: z43.number().positive().optional(),
6206
+ multiple: z45.boolean().optional(),
6207
+ htmlSize: z45.number().positive().optional(),
6028
6208
  placeholder: DynamicTextSchema.optional()
6029
6209
  });
6030
- var BsCheckboxPropsSchema = z43.object({
6031
- switch: z43.boolean().optional(),
6032
- inline: z43.boolean().optional(),
6033
- reverse: z43.boolean().optional(),
6034
- indeterminate: z43.boolean().optional(),
6210
+ var BsCheckboxPropsSchema = z45.object({
6211
+ switch: z45.boolean().optional(),
6212
+ inline: z45.boolean().optional(),
6213
+ reverse: z45.boolean().optional(),
6214
+ indeterminate: z45.boolean().optional(),
6035
6215
  hint: DynamicTextSchema.optional()
6036
6216
  });
6037
- var BsRadioPropsSchema = z43.object({
6038
- inline: z43.boolean().optional(),
6039
- reverse: z43.boolean().optional(),
6040
- buttonGroup: z43.boolean().optional(),
6217
+ var BsRadioPropsSchema = z45.object({
6218
+ inline: z45.boolean().optional(),
6219
+ reverse: z45.boolean().optional(),
6220
+ buttonGroup: z45.boolean().optional(),
6041
6221
  buttonSize: BsSizeSchema.optional(),
6042
6222
  hint: DynamicTextSchema.optional()
6043
6223
  });
6044
- var BsMultiCheckboxPropsSchema = z43.object({
6045
- switch: z43.boolean().optional(),
6046
- inline: z43.boolean().optional(),
6047
- reverse: z43.boolean().optional(),
6224
+ var BsMultiCheckboxPropsSchema = z45.object({
6225
+ switch: z45.boolean().optional(),
6226
+ inline: z45.boolean().optional(),
6227
+ reverse: z45.boolean().optional(),
6048
6228
  hint: DynamicTextSchema.optional()
6049
6229
  });
6050
- var BsTogglePropsSchema = z43.object({
6230
+ var BsTogglePropsSchema = z45.object({
6051
6231
  size: BsSizeSchema.optional(),
6052
- reverse: z43.boolean().optional(),
6053
- inline: z43.boolean().optional(),
6232
+ reverse: z45.boolean().optional(),
6233
+ inline: z45.boolean().optional(),
6054
6234
  hint: DynamicTextSchema.optional()
6055
6235
  });
6056
6236
  var BsDatepickerPropsSchema = BsFormFieldPropsSchema.extend({
6057
- useNgBootstrap: z43.boolean().optional(),
6058
- displayMonths: z43.number().positive().optional(),
6059
- navigation: z43.enum(["select", "arrows", "none"]).optional(),
6060
- outsideDays: z43.enum(["visible", "collapsed", "hidden"]).optional(),
6061
- showWeekNumbers: z43.boolean().optional(),
6237
+ useNgBootstrap: z45.boolean().optional(),
6238
+ displayMonths: z45.number().positive().optional(),
6239
+ navigation: z45.enum(["select", "arrows", "none"]).optional(),
6240
+ outsideDays: z45.enum(["visible", "collapsed", "hidden"]).optional(),
6241
+ showWeekNumbers: z45.boolean().optional(),
6062
6242
  placeholder: DynamicTextSchema.optional()
6063
6243
  });
6064
- var BsSliderPropsSchema = z43.object({
6065
- showValue: z43.boolean().optional(),
6066
- valuePrefix: z43.string().optional(),
6067
- valueSuffix: z43.string().optional(),
6244
+ var BsSliderPropsSchema = z45.object({
6245
+ showValue: z45.boolean().optional(),
6246
+ valuePrefix: z45.string().optional(),
6247
+ valueSuffix: z45.string().optional(),
6068
6248
  hint: DynamicTextSchema.optional(),
6069
- min: z43.number().optional(),
6070
- max: z43.number().optional(),
6071
- step: z43.number().positive().optional()
6249
+ min: z45.number().optional(),
6250
+ max: z45.number().optional(),
6251
+ step: z45.number().positive().optional()
6072
6252
  });
6073
- var BsButtonPropsSchema = z43.object({
6253
+ var BsButtonPropsSchema = z45.object({
6074
6254
  variant: BsButtonVariantSchema.optional(),
6075
- outline: z43.boolean().optional(),
6255
+ outline: z45.boolean().optional(),
6076
6256
  size: BsSizeSchema.optional(),
6077
- block: z43.boolean().optional(),
6078
- active: z43.boolean().optional(),
6079
- type: z43.enum(["button", "submit", "reset"]).optional()
6257
+ block: z45.boolean().optional(),
6258
+ active: z45.boolean().optional(),
6259
+ type: z45.enum(["button", "submit", "reset"]).optional()
6080
6260
  });
6081
6261
 
6082
6262
  // internal/dynamic-forms-validation/bootstrap/src/fields/index.ts
6083
- import { z as z44 } from "zod";
6263
+ import { z as z46 } from "zod";
6084
6264
  var BsValueFieldBase = BaseFieldDefSchema.merge(FieldWithValidationSchema);
6085
6265
  var BsInputFieldSchemaObject = BsValueFieldBase.extend({
6086
- type: z44.literal("input"),
6087
- nullable: z44.boolean().optional(),
6088
- value: z44.string().nullable().optional(),
6266
+ type: z46.literal("input"),
6267
+ nullable: z46.boolean().optional(),
6268
+ value: z46.string().nullable().optional(),
6089
6269
  placeholder: DynamicTextSchema.optional(),
6090
6270
  props: BsInputPropsSchema.optional()
6091
6271
  });
6092
6272
  var BsInputFieldSchema = BsInputFieldSchemaObject.superRefine(nullableValueRefine);
6093
6273
  var BsTextareaFieldSchemaObject = BsValueFieldBase.extend({
6094
- type: z44.literal("textarea"),
6095
- nullable: z44.boolean().optional(),
6096
- value: z44.string().nullable().optional(),
6274
+ type: z46.literal("textarea"),
6275
+ nullable: z46.boolean().optional(),
6276
+ value: z46.string().nullable().optional(),
6097
6277
  placeholder: DynamicTextSchema.optional(),
6098
6278
  props: BsTextareaPropsSchema.optional()
6099
6279
  });
6100
6280
  var BsTextareaFieldSchema = BsTextareaFieldSchemaObject.superRefine(nullableValueRefine);
6101
6281
  var BsSelectFieldSchemaObject = BsValueFieldBase.extend({
6102
- type: z44.literal("select"),
6103
- nullable: z44.boolean().optional(),
6104
- value: z44.string().nullable().optional(),
6282
+ type: z46.literal("select"),
6283
+ nullable: z46.boolean().optional(),
6284
+ value: z46.string().nullable().optional(),
6105
6285
  // Bootstrap select only supports strings
6106
6286
  placeholder: DynamicTextSchema.optional(),
6107
6287
  options: FieldOptionsSchema,
@@ -6109,113 +6289,128 @@ var BsSelectFieldSchemaObject = BsValueFieldBase.extend({
6109
6289
  });
6110
6290
  var BsSelectFieldSchema = BsSelectFieldSchemaObject.superRefine(nullableValueRefine);
6111
6291
  var BsCheckboxFieldSchema = BsValueFieldBase.extend({
6112
- type: z44.literal("checkbox"),
6113
- value: z44.boolean().optional(),
6292
+ type: z46.literal("checkbox"),
6293
+ value: z46.boolean().optional(),
6114
6294
  placeholder: DynamicTextSchema.optional(),
6115
6295
  props: BsCheckboxPropsSchema.optional()
6116
6296
  });
6117
6297
  var BsRadioFieldSchemaObject = BsValueFieldBase.extend({
6118
- type: z44.literal("radio"),
6119
- nullable: z44.boolean().optional(),
6120
- value: z44.unknown().nullable().optional(),
6298
+ type: z46.literal("radio"),
6299
+ nullable: z46.boolean().optional(),
6300
+ value: z46.unknown().nullable().optional(),
6121
6301
  placeholder: DynamicTextSchema.optional(),
6122
6302
  options: FieldOptionsSchema,
6123
6303
  props: BsRadioPropsSchema.optional()
6124
6304
  });
6125
6305
  var BsRadioFieldSchema = BsRadioFieldSchemaObject.superRefine(nullableValueRefine);
6126
6306
  var BsMultiCheckboxFieldSchemaObject = BsValueFieldBase.extend({
6127
- type: z44.literal("multi-checkbox"),
6128
- nullable: z44.boolean().optional(),
6129
- value: z44.array(z44.unknown()).nullable().optional(),
6307
+ type: z46.literal("multi-checkbox"),
6308
+ nullable: z46.boolean().optional(),
6309
+ value: z46.array(z46.unknown()).nullable().optional(),
6130
6310
  placeholder: DynamicTextSchema.optional(),
6131
6311
  options: FieldOptionsSchema,
6132
6312
  props: BsMultiCheckboxPropsSchema.optional()
6133
6313
  });
6134
6314
  var BsMultiCheckboxFieldSchema = BsMultiCheckboxFieldSchemaObject.superRefine(nullableValueRefine);
6135
6315
  var BsToggleFieldSchema = BsValueFieldBase.extend({
6136
- type: z44.literal("toggle"),
6137
- value: z44.boolean().optional(),
6316
+ type: z46.literal("toggle"),
6317
+ value: z46.boolean().optional(),
6138
6318
  placeholder: DynamicTextSchema.optional(),
6139
6319
  props: BsTogglePropsSchema.optional()
6140
6320
  });
6141
6321
  var BsDatepickerFieldSchemaObject = BsValueFieldBase.extend({
6142
- type: z44.literal("datepicker"),
6143
- nullable: z44.boolean().optional(),
6144
- value: z44.union([z44.string(), z44.null()]).optional(),
6145
- minDate: z44.union([z44.string(), z44.null()]).optional(),
6146
- maxDate: z44.union([z44.string(), z44.null()]).optional(),
6147
- startAt: z44.union([z44.string(), z44.null()]).optional(),
6322
+ type: z46.literal("datepicker"),
6323
+ nullable: z46.boolean().optional(),
6324
+ value: z46.union([z46.string(), z46.null()]).optional(),
6325
+ minDate: z46.union([z46.string(), z46.null()]).optional(),
6326
+ maxDate: z46.union([z46.string(), z46.null()]).optional(),
6327
+ startAt: z46.union([z46.string(), z46.null()]).optional(),
6148
6328
  placeholder: DynamicTextSchema.optional(),
6149
6329
  props: BsDatepickerPropsSchema.optional()
6150
6330
  });
6151
6331
  var BsDatepickerFieldSchema = BsDatepickerFieldSchemaObject.superRefine(nullableValueRefine);
6152
6332
  var BsSliderFieldSchemaObject = BsValueFieldBase.extend({
6153
- type: z44.literal("slider"),
6154
- nullable: z44.boolean().optional(),
6155
- value: z44.number().nullable().optional(),
6156
- minValue: z44.number().optional(),
6157
- maxValue: z44.number().optional(),
6158
- step: z44.number().positive().optional(),
6333
+ type: z46.literal("slider"),
6334
+ nullable: z46.boolean().optional(),
6335
+ value: z46.number().nullable().optional(),
6336
+ minValue: z46.number().optional(),
6337
+ maxValue: z46.number().optional(),
6338
+ step: z46.number().positive().optional(),
6159
6339
  placeholder: DynamicTextSchema.optional(),
6160
6340
  props: BsSliderPropsSchema.optional()
6161
6341
  });
6162
6342
  var BsSliderFieldSchema = BsSliderFieldSchemaObject.superRefine(nullableValueRefine);
6163
6343
  var BsButtonFieldSchema = BaseFieldDefSchema.extend({
6164
- type: z44.literal("button"),
6165
- event: z44.string().optional(),
6166
- eventArgs: z44.array(z44.union([z44.string(), z44.number(), z44.boolean(), z44.null(), z44.undefined()])).optional(),
6344
+ type: z46.literal("button"),
6345
+ event: z46.string().optional(),
6346
+ eventArgs: z46.array(z46.union([z46.string(), z46.number(), z46.boolean(), z46.null(), z46.undefined()])).optional(),
6167
6347
  props: BsButtonPropsSchema.optional(),
6168
6348
  logic: LogicArraySchema.optional()
6169
6349
  });
6170
6350
  var BsSubmitButtonFieldSchema = BaseFieldDefSchema.extend({
6171
- type: z44.literal("submit"),
6351
+ type: z46.literal("submit"),
6172
6352
  props: BsButtonPropsSchema.optional(),
6173
6353
  logic: LogicArraySchema.optional()
6174
6354
  });
6175
6355
  var BsNextButtonFieldSchema = BaseFieldDefSchema.extend({
6176
- type: z44.literal("next"),
6356
+ type: z46.literal("next"),
6177
6357
  props: BsButtonPropsSchema.optional(),
6178
6358
  logic: LogicArraySchema.optional()
6179
6359
  });
6180
6360
  var BsPreviousButtonFieldSchema = BaseFieldDefSchema.extend({
6181
- type: z44.literal("previous"),
6361
+ type: z46.literal("previous"),
6182
6362
  props: BsButtonPropsSchema.optional()
6183
6363
  });
6184
6364
  var BsAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6185
- type: z44.literal("add-array-item"),
6186
- arrayKey: z44.string().optional(),
6365
+ /**
6366
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6367
+ * item, or a list of them for an object item.
6368
+ */
6369
+ template: ArrayItemTemplateSchema,
6370
+ type: z46.literal("add-array-item"),
6371
+ arrayKey: z46.string().optional(),
6187
6372
  props: BsButtonPropsSchema.optional()
6188
6373
  });
6189
6374
  var BsRemoveArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6190
- type: z44.literal("remove-array-item"),
6191
- arrayKey: z44.string().optional(),
6375
+ type: z46.literal("remove-array-item"),
6376
+ arrayKey: z46.string().optional(),
6192
6377
  props: BsButtonPropsSchema.optional()
6193
6378
  });
6194
6379
  var BsPrependArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6195
- type: z44.literal("prepend-array-item"),
6196
- arrayKey: z44.string().optional(),
6380
+ /**
6381
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6382
+ * item, or a list of them for an object item.
6383
+ */
6384
+ template: ArrayItemTemplateSchema,
6385
+ type: z46.literal("prepend-array-item"),
6386
+ arrayKey: z46.string().optional(),
6197
6387
  props: BsButtonPropsSchema.optional()
6198
6388
  });
6199
6389
  var BsInsertArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6200
- type: z44.literal("insert-array-item"),
6201
- arrayKey: z44.string().optional(),
6202
- index: z44.number(),
6390
+ /**
6391
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6392
+ * item, or a list of them for an object item.
6393
+ */
6394
+ template: ArrayItemTemplateSchema,
6395
+ type: z46.literal("insert-array-item"),
6396
+ arrayKey: z46.string().optional(),
6397
+ index: z46.number(),
6203
6398
  props: BsButtonPropsSchema.optional()
6204
6399
  });
6205
6400
  var BsPopArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6206
- type: z44.literal("pop-array-item"),
6207
- arrayKey: z44.string(),
6401
+ type: z46.literal("pop-array-item"),
6402
+ arrayKey: z46.string(),
6208
6403
  props: BsButtonPropsSchema.optional()
6209
6404
  });
6210
6405
  var BsShiftArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6211
- type: z44.literal("shift-array-item"),
6212
- arrayKey: z44.string(),
6406
+ type: z46.literal("shift-array-item"),
6407
+ arrayKey: z46.string(),
6213
6408
  props: BsButtonPropsSchema.optional()
6214
6409
  });
6215
6410
 
6216
6411
  // internal/dynamic-forms-validation/bootstrap/src/bs-leaf-field.schema.ts
6217
- import { z as z45 } from "zod";
6218
- var BsLeafFieldSchema = z45.discriminatedUnion("type", [
6412
+ import { z as z47 } from "zod";
6413
+ var BsLeafFieldSchema = z47.discriminatedUnion("type", [
6219
6414
  TextFieldSchema,
6220
6415
  HiddenFieldSchema,
6221
6416
  BsInputFieldSchemaObject,
@@ -6240,7 +6435,7 @@ var BsLeafFieldSchema = z45.discriminatedUnion("type", [
6240
6435
  ]).superRefine(nullableValueRefine);
6241
6436
 
6242
6437
  // internal/dynamic-forms-validation/bootstrap/src/bs-form-config.schema.ts
6243
- import { z as z46 } from "zod";
6438
+ import { z as z48 } from "zod";
6244
6439
  var containerSchemas2 = createContainerSchemas({
6245
6440
  leafFieldSchema: BsLeafFieldSchema
6246
6441
  });
@@ -6249,210 +6444,225 @@ var BsRowFieldSchema = containerSchemas2.RowFieldSchema;
6249
6444
  var BsGroupFieldSchema = containerSchemas2.GroupFieldSchema;
6250
6445
  var BsArrayFieldSchema = containerSchemas2.ArrayFieldSchema;
6251
6446
  var BsFieldSchema = containerSchemas2.AllFieldsSchema;
6252
- var BsFormDefaultPropsSchema = z46.object({
6447
+ var BsFormDefaultPropsSchema = z48.object({
6253
6448
  size: BsSizeSchema.optional(),
6254
- floatingLabel: z46.boolean().optional()
6449
+ floatingLabel: z48.boolean().optional()
6255
6450
  });
6256
6451
  var BsFormConfigSchema = createFormConfigSchema(BsFieldSchema, BsFormDefaultPropsSchema);
6257
6452
 
6258
6453
  // internal/dynamic-forms-validation/primeng/src/props/index.ts
6259
- import { z as z47 } from "zod";
6260
- var PrimeSeveritySchema = z47.enum(["primary", "secondary", "success", "info", "warn", "danger", "help", "contrast"]);
6261
- var PrimeCommonPropsSchema = z47.object({
6262
- styleClass: z47.string().optional(),
6454
+ import { z as z49 } from "zod";
6455
+ var PrimeSeveritySchema = z49.enum(["primary", "secondary", "success", "info", "warn", "danger", "help", "contrast"]);
6456
+ var PrimeCommonPropsSchema = z49.object({
6457
+ styleClass: z49.string().optional(),
6263
6458
  hint: DynamicTextSchema.optional()
6264
6459
  });
6265
6460
  var PrimeInputPropsSchema = PrimeCommonPropsSchema.extend({
6266
- type: z47.enum(["text", "email", "password", "number", "tel", "url"]).optional(),
6461
+ type: z49.enum(["text", "email", "password", "number", "tel", "url"]).optional(),
6267
6462
  placeholder: DynamicTextSchema.optional(),
6268
- size: z47.enum(["small", "large"]).optional(),
6269
- variant: z47.enum(["outlined", "filled"]).optional()
6463
+ size: z49.enum(["small", "large"]).optional(),
6464
+ variant: z49.enum(["outlined", "filled"]).optional()
6270
6465
  });
6271
6466
  var PrimeCheckboxPropsSchema = PrimeCommonPropsSchema.extend({
6272
- binary: z47.boolean().optional(),
6273
- trueValue: z47.unknown().optional(),
6274
- falseValue: z47.unknown().optional()
6467
+ binary: z49.boolean().optional(),
6468
+ trueValue: z49.unknown().optional(),
6469
+ falseValue: z49.unknown().optional()
6275
6470
  });
6276
6471
  var PrimeRadioPropsSchema = PrimeCommonPropsSchema.extend({
6277
- name: z47.string().optional()
6472
+ name: z49.string().optional()
6278
6473
  });
6279
6474
  var PrimeSelectPropsSchema = PrimeCommonPropsSchema.extend({
6280
- multiple: z47.boolean().optional(),
6281
- filter: z47.boolean().optional(),
6475
+ multiple: z49.boolean().optional(),
6476
+ filter: z49.boolean().optional(),
6282
6477
  placeholder: DynamicTextSchema.optional(),
6283
- showClear: z47.boolean().optional()
6478
+ showClear: z49.boolean().optional()
6284
6479
  });
6285
6480
  var PrimeMultiCheckboxPropsSchema = PrimeCommonPropsSchema;
6286
6481
  var PrimeDatepickerPropsSchema = PrimeCommonPropsSchema.extend({
6287
- dateFormat: z47.string().optional(),
6288
- inline: z47.boolean().optional(),
6289
- showIcon: z47.boolean().optional(),
6290
- showButtonBar: z47.boolean().optional(),
6291
- selectionMode: z47.enum(["single", "multiple", "range"]).optional(),
6292
- touchUI: z47.boolean().optional(),
6293
- view: z47.enum(["date", "month", "year"]).optional(),
6482
+ dateFormat: z49.string().optional(),
6483
+ inline: z49.boolean().optional(),
6484
+ showIcon: z49.boolean().optional(),
6485
+ showButtonBar: z49.boolean().optional(),
6486
+ selectionMode: z49.enum(["single", "multiple", "range"]).optional(),
6487
+ touchUI: z49.boolean().optional(),
6488
+ view: z49.enum(["date", "month", "year"]).optional(),
6294
6489
  placeholder: DynamicTextSchema.optional()
6295
6490
  });
6296
6491
  var PrimeTextareaPropsSchema = PrimeCommonPropsSchema.extend({
6297
- rows: z47.number().positive().optional(),
6298
- autoResize: z47.boolean().optional(),
6492
+ rows: z49.number().positive().optional(),
6493
+ autoResize: z49.boolean().optional(),
6299
6494
  placeholder: DynamicTextSchema.optional()
6300
6495
  });
6301
6496
  var PrimeSliderPropsSchema = PrimeCommonPropsSchema.extend({
6302
- min: z47.number().optional(),
6303
- max: z47.number().optional(),
6304
- step: z47.number().positive().optional(),
6305
- range: z47.boolean().optional(),
6306
- orientation: z47.enum(["horizontal", "vertical"]).optional()
6497
+ min: z49.number().optional(),
6498
+ max: z49.number().optional(),
6499
+ step: z49.number().positive().optional(),
6500
+ range: z49.boolean().optional(),
6501
+ orientation: z49.enum(["horizontal", "vertical"]).optional()
6307
6502
  });
6308
6503
  var PrimeTogglePropsSchema = PrimeCommonPropsSchema;
6309
- var PrimeButtonPropsSchema = z47.object({
6504
+ var PrimeButtonPropsSchema = z49.object({
6310
6505
  severity: PrimeSeveritySchema.optional(),
6311
- text: z47.boolean().optional(),
6312
- outlined: z47.boolean().optional(),
6313
- raised: z47.boolean().optional(),
6314
- rounded: z47.boolean().optional(),
6315
- icon: z47.string().optional(),
6316
- iconPos: z47.enum(["left", "right", "top", "bottom"]).optional(),
6317
- type: z47.enum(["button", "submit", "reset"]).optional()
6506
+ text: z49.boolean().optional(),
6507
+ outlined: z49.boolean().optional(),
6508
+ raised: z49.boolean().optional(),
6509
+ rounded: z49.boolean().optional(),
6510
+ icon: z49.string().optional(),
6511
+ iconPos: z49.enum(["left", "right", "top", "bottom"]).optional(),
6512
+ type: z49.enum(["button", "submit", "reset"]).optional()
6318
6513
  });
6319
6514
 
6320
6515
  // internal/dynamic-forms-validation/primeng/src/fields/index.ts
6321
- import { z as z48 } from "zod";
6516
+ import { z as z50 } from "zod";
6322
6517
  var PrimeValueFieldBase = BaseFieldDefSchema.merge(FieldWithValidationSchema);
6323
6518
  var PrimeInputFieldSchemaObject = PrimeValueFieldBase.extend({
6324
- type: z48.literal("input"),
6325
- nullable: z48.boolean().optional(),
6326
- value: z48.string().nullable().optional(),
6519
+ type: z50.literal("input"),
6520
+ nullable: z50.boolean().optional(),
6521
+ value: z50.string().nullable().optional(),
6327
6522
  placeholder: DynamicTextSchema.optional(),
6328
6523
  props: PrimeInputPropsSchema.optional()
6329
6524
  });
6330
6525
  var PrimeInputFieldSchema = PrimeInputFieldSchemaObject.superRefine(nullableValueRefine);
6331
6526
  var PrimeCheckboxFieldSchema = PrimeValueFieldBase.extend({
6332
- type: z48.literal("checkbox"),
6333
- value: z48.boolean().optional(),
6527
+ type: z50.literal("checkbox"),
6528
+ value: z50.boolean().optional(),
6334
6529
  placeholder: DynamicTextSchema.optional(),
6335
6530
  props: PrimeCheckboxPropsSchema.optional()
6336
6531
  });
6337
6532
  var PrimeRadioFieldSchemaObject = PrimeValueFieldBase.extend({
6338
- type: z48.literal("radio"),
6339
- nullable: z48.boolean().optional(),
6340
- value: z48.unknown().nullable().optional(),
6533
+ type: z50.literal("radio"),
6534
+ nullable: z50.boolean().optional(),
6535
+ value: z50.unknown().nullable().optional(),
6341
6536
  placeholder: DynamicTextSchema.optional(),
6342
6537
  options: FieldOptionsSchema,
6343
6538
  props: PrimeRadioPropsSchema.optional()
6344
6539
  });
6345
6540
  var PrimeRadioFieldSchema = PrimeRadioFieldSchemaObject.superRefine(nullableValueRefine);
6346
6541
  var PrimeSelectFieldSchemaObject = PrimeValueFieldBase.extend({
6347
- type: z48.literal("select"),
6348
- nullable: z48.boolean().optional(),
6349
- value: z48.unknown().nullable().optional(),
6542
+ type: z50.literal("select"),
6543
+ nullable: z50.boolean().optional(),
6544
+ value: z50.unknown().nullable().optional(),
6350
6545
  placeholder: DynamicTextSchema.optional(),
6351
6546
  options: FieldOptionsSchema,
6352
6547
  props: PrimeSelectPropsSchema.optional()
6353
6548
  });
6354
6549
  var PrimeSelectFieldSchema = PrimeSelectFieldSchemaObject.superRefine(nullableValueRefine);
6355
6550
  var PrimeMultiCheckboxFieldSchemaObject = PrimeValueFieldBase.extend({
6356
- type: z48.literal("multi-checkbox"),
6357
- nullable: z48.boolean().optional(),
6358
- value: z48.array(z48.unknown()).nullable().optional(),
6551
+ type: z50.literal("multi-checkbox"),
6552
+ nullable: z50.boolean().optional(),
6553
+ value: z50.array(z50.unknown()).nullable().optional(),
6359
6554
  placeholder: DynamicTextSchema.optional(),
6360
6555
  options: FieldOptionsSchema,
6361
6556
  props: PrimeMultiCheckboxPropsSchema.optional()
6362
6557
  });
6363
6558
  var PrimeMultiCheckboxFieldSchema = PrimeMultiCheckboxFieldSchemaObject.superRefine(nullableValueRefine);
6364
6559
  var PrimeDatepickerFieldSchemaObject = PrimeValueFieldBase.extend({
6365
- type: z48.literal("datepicker"),
6366
- nullable: z48.boolean().optional(),
6367
- value: z48.union([z48.string(), z48.null()]).optional(),
6368
- minDate: z48.union([z48.string(), z48.null()]).optional(),
6369
- maxDate: z48.union([z48.string(), z48.null()]).optional(),
6370
- startAt: z48.union([z48.string(), z48.null()]).optional(),
6560
+ type: z50.literal("datepicker"),
6561
+ nullable: z50.boolean().optional(),
6562
+ value: z50.union([z50.string(), z50.null()]).optional(),
6563
+ minDate: z50.union([z50.string(), z50.null()]).optional(),
6564
+ maxDate: z50.union([z50.string(), z50.null()]).optional(),
6565
+ startAt: z50.union([z50.string(), z50.null()]).optional(),
6371
6566
  placeholder: DynamicTextSchema.optional(),
6372
6567
  props: PrimeDatepickerPropsSchema.optional()
6373
6568
  });
6374
6569
  var PrimeDatepickerFieldSchema = PrimeDatepickerFieldSchemaObject.superRefine(nullableValueRefine);
6375
6570
  var PrimeTextareaFieldSchemaObject = PrimeValueFieldBase.extend({
6376
- type: z48.literal("textarea"),
6377
- nullable: z48.boolean().optional(),
6378
- value: z48.string().nullable().optional(),
6571
+ type: z50.literal("textarea"),
6572
+ nullable: z50.boolean().optional(),
6573
+ value: z50.string().nullable().optional(),
6379
6574
  placeholder: DynamicTextSchema.optional(),
6380
6575
  props: PrimeTextareaPropsSchema.optional()
6381
6576
  });
6382
6577
  var PrimeTextareaFieldSchema = PrimeTextareaFieldSchemaObject.superRefine(nullableValueRefine);
6383
6578
  var PrimeSliderFieldSchemaObject = PrimeValueFieldBase.extend({
6384
- type: z48.literal("slider"),
6385
- nullable: z48.boolean().optional(),
6386
- value: z48.number().nullable().optional(),
6387
- minValue: z48.number().optional(),
6388
- maxValue: z48.number().optional(),
6389
- step: z48.number().positive().optional(),
6579
+ type: z50.literal("slider"),
6580
+ nullable: z50.boolean().optional(),
6581
+ value: z50.number().nullable().optional(),
6582
+ minValue: z50.number().optional(),
6583
+ maxValue: z50.number().optional(),
6584
+ step: z50.number().positive().optional(),
6390
6585
  placeholder: DynamicTextSchema.optional(),
6391
6586
  props: PrimeSliderPropsSchema.optional()
6392
6587
  });
6393
6588
  var PrimeSliderFieldSchema = PrimeSliderFieldSchemaObject.superRefine(nullableValueRefine);
6394
6589
  var PrimeToggleFieldSchema = PrimeValueFieldBase.extend({
6395
- type: z48.literal("toggle"),
6396
- value: z48.boolean().optional(),
6590
+ type: z50.literal("toggle"),
6591
+ value: z50.boolean().optional(),
6397
6592
  placeholder: DynamicTextSchema.optional(),
6398
6593
  props: PrimeTogglePropsSchema.optional()
6399
6594
  });
6400
6595
  var PrimeButtonFieldSchema = BaseFieldDefSchema.extend({
6401
- type: z48.literal("button"),
6402
- event: z48.string().optional(),
6403
- eventArgs: z48.array(z48.union([z48.string(), z48.number(), z48.boolean(), z48.null(), z48.undefined()])).optional(),
6596
+ type: z50.literal("button"),
6597
+ event: z50.string().optional(),
6598
+ eventArgs: z50.array(z50.union([z50.string(), z50.number(), z50.boolean(), z50.null(), z50.undefined()])).optional(),
6404
6599
  props: PrimeButtonPropsSchema.optional(),
6405
6600
  logic: LogicArraySchema.optional()
6406
6601
  });
6407
6602
  var PrimeSubmitButtonFieldSchema = BaseFieldDefSchema.extend({
6408
- type: z48.literal("submit"),
6603
+ type: z50.literal("submit"),
6409
6604
  props: PrimeButtonPropsSchema.optional(),
6410
6605
  logic: LogicArraySchema.optional()
6411
6606
  });
6412
6607
  var PrimeNextButtonFieldSchema = BaseFieldDefSchema.extend({
6413
- type: z48.literal("next"),
6608
+ type: z50.literal("next"),
6414
6609
  props: PrimeButtonPropsSchema.optional(),
6415
6610
  logic: LogicArraySchema.optional()
6416
6611
  });
6417
6612
  var PrimePreviousButtonFieldSchema = BaseFieldDefSchema.extend({
6418
- type: z48.literal("previous"),
6613
+ type: z50.literal("previous"),
6419
6614
  props: PrimeButtonPropsSchema.optional()
6420
6615
  });
6421
6616
  var PrimeAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6422
- type: z48.literal("add-array-item"),
6423
- arrayKey: z48.string().optional(),
6617
+ /**
6618
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6619
+ * item, or a list of them for an object item.
6620
+ */
6621
+ template: ArrayItemTemplateSchema,
6622
+ type: z50.literal("add-array-item"),
6623
+ arrayKey: z50.string().optional(),
6424
6624
  props: PrimeButtonPropsSchema.optional()
6425
6625
  });
6426
6626
  var PrimeRemoveArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6427
- type: z48.literal("remove-array-item"),
6428
- arrayKey: z48.string().optional(),
6627
+ type: z50.literal("remove-array-item"),
6628
+ arrayKey: z50.string().optional(),
6429
6629
  props: PrimeButtonPropsSchema.optional()
6430
6630
  });
6431
6631
  var PrimePrependArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6432
- type: z48.literal("prepend-array-item"),
6433
- arrayKey: z48.string().optional(),
6632
+ /**
6633
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6634
+ * item, or a list of them for an object item.
6635
+ */
6636
+ template: ArrayItemTemplateSchema,
6637
+ type: z50.literal("prepend-array-item"),
6638
+ arrayKey: z50.string().optional(),
6434
6639
  props: PrimeButtonPropsSchema.optional()
6435
6640
  });
6436
6641
  var PrimeInsertArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6437
- type: z48.literal("insert-array-item"),
6438
- arrayKey: z48.string().optional(),
6439
- index: z48.number(),
6642
+ /**
6643
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6644
+ * item, or a list of them for an object item.
6645
+ */
6646
+ template: ArrayItemTemplateSchema,
6647
+ type: z50.literal("insert-array-item"),
6648
+ arrayKey: z50.string().optional(),
6649
+ index: z50.number(),
6440
6650
  props: PrimeButtonPropsSchema.optional()
6441
6651
  });
6442
6652
  var PrimePopArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6443
- type: z48.literal("pop-array-item"),
6444
- arrayKey: z48.string(),
6653
+ type: z50.literal("pop-array-item"),
6654
+ arrayKey: z50.string(),
6445
6655
  props: PrimeButtonPropsSchema.optional()
6446
6656
  });
6447
6657
  var PrimeShiftArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6448
- type: z48.literal("shift-array-item"),
6449
- arrayKey: z48.string(),
6658
+ type: z50.literal("shift-array-item"),
6659
+ arrayKey: z50.string(),
6450
6660
  props: PrimeButtonPropsSchema.optional()
6451
6661
  });
6452
6662
 
6453
6663
  // internal/dynamic-forms-validation/primeng/src/prime-leaf-field.schema.ts
6454
- import { z as z49 } from "zod";
6455
- var PrimeLeafFieldSchema = z49.discriminatedUnion("type", [
6664
+ import { z as z51 } from "zod";
6665
+ var PrimeLeafFieldSchema = z51.discriminatedUnion("type", [
6456
6666
  TextFieldSchema,
6457
6667
  HiddenFieldSchema,
6458
6668
  PrimeInputFieldSchemaObject,
@@ -6477,7 +6687,7 @@ var PrimeLeafFieldSchema = z49.discriminatedUnion("type", [
6477
6687
  ]).superRefine(nullableValueRefine);
6478
6688
 
6479
6689
  // internal/dynamic-forms-validation/primeng/src/prime-form-config.schema.ts
6480
- import { z as z50 } from "zod";
6690
+ import { z as z52 } from "zod";
6481
6691
  var containerSchemas3 = createContainerSchemas({
6482
6692
  leafFieldSchema: PrimeLeafFieldSchema
6483
6693
  });
@@ -6486,252 +6696,267 @@ var PrimeRowFieldSchema = containerSchemas3.RowFieldSchema;
6486
6696
  var PrimeGroupFieldSchema = containerSchemas3.GroupFieldSchema;
6487
6697
  var PrimeArrayFieldSchema = containerSchemas3.ArrayFieldSchema;
6488
6698
  var PrimeFieldSchema = containerSchemas3.AllFieldsSchema;
6489
- var PrimeFormDefaultPropsSchema = z50.object({
6490
- styleClass: z50.string().optional()
6699
+ var PrimeFormDefaultPropsSchema = z52.object({
6700
+ styleClass: z52.string().optional()
6491
6701
  });
6492
6702
  var PrimeFormConfigSchema = createFormConfigSchema(PrimeFieldSchema, PrimeFormDefaultPropsSchema);
6493
6703
 
6494
6704
  // internal/dynamic-forms-validation/ionic/src/props/index.ts
6495
- import { z as z51 } from "zod";
6496
- var IonicColorSchema = z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger", "light", "medium", "dark"]);
6497
- var IonicLabelPlacementSchema = z51.enum(["start", "end", "fixed", "stacked", "floating"]);
6498
- var IonicJustifySchema = z51.enum(["start", "end", "space-between"]);
6499
- var IonicFillSchema = z51.enum(["solid", "outline", "clear", "default"]);
6500
- var IonicInputPropsSchema = z51.object({
6501
- fill: z51.enum(["solid", "outline"]).optional(),
6502
- shape: z51.literal("round").optional(),
6705
+ import { z as z53 } from "zod";
6706
+ var IonicColorSchema = z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger", "light", "medium", "dark"]);
6707
+ var IonicLabelPlacementSchema = z53.enum(["start", "end", "fixed", "stacked", "floating"]);
6708
+ var IonicJustifySchema = z53.enum(["start", "end", "space-between"]);
6709
+ var IonicFillSchema = z53.enum(["solid", "outline", "clear", "default"]);
6710
+ var IonicInputPropsSchema = z53.object({
6711
+ fill: z53.enum(["solid", "outline"]).optional(),
6712
+ shape: z53.literal("round").optional(),
6503
6713
  labelPlacement: IonicLabelPlacementSchema.optional(),
6504
6714
  color: IonicColorSchema.optional(),
6505
6715
  hint: DynamicTextSchema.optional(),
6506
6716
  errorText: DynamicTextSchema.optional(),
6507
- counter: z51.boolean().optional(),
6508
- clearInput: z51.boolean().optional(),
6509
- type: z51.enum(["text", "email", "password", "number", "tel", "url", "search"]).optional(),
6717
+ counter: z53.boolean().optional(),
6718
+ clearInput: z53.boolean().optional(),
6719
+ type: z53.enum(["text", "email", "password", "number", "tel", "url", "search"]).optional(),
6510
6720
  placeholder: DynamicTextSchema.optional()
6511
6721
  });
6512
- var IonicCheckboxPropsSchema = z51.object({
6513
- labelPlacement: z51.enum(["start", "end", "fixed", "stacked"]).optional(),
6722
+ var IonicCheckboxPropsSchema = z53.object({
6723
+ labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
6514
6724
  justify: IonicJustifySchema.optional(),
6515
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6516
- indeterminate: z51.boolean().optional(),
6725
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6726
+ indeterminate: z53.boolean().optional(),
6517
6727
  hint: DynamicTextSchema.optional()
6518
6728
  });
6519
- var IonicRadioPropsSchema = z51.object({
6520
- labelPlacement: z51.enum(["start", "end", "fixed", "stacked"]).optional(),
6729
+ var IonicRadioPropsSchema = z53.object({
6730
+ labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
6521
6731
  justify: IonicJustifySchema.optional(),
6522
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6732
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6523
6733
  hint: DynamicTextSchema.optional()
6524
6734
  });
6525
- var IonicTogglePropsSchema = z51.object({
6526
- labelPlacement: z51.enum(["start", "end", "fixed", "stacked"]).optional(),
6735
+ var IonicTogglePropsSchema = z53.object({
6736
+ labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
6527
6737
  justify: IonicJustifySchema.optional(),
6528
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6529
- enableOnOffLabels: z51.boolean().optional(),
6738
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6739
+ enableOnOffLabels: z53.boolean().optional(),
6530
6740
  hint: DynamicTextSchema.optional()
6531
6741
  });
6532
- var IonicSliderPropsSchema = z51.object({
6533
- min: z51.number().optional(),
6534
- max: z51.number().optional(),
6535
- step: z51.number().positive().optional(),
6536
- dualKnobs: z51.boolean().optional(),
6537
- pin: z51.boolean().optional(),
6538
- ticks: z51.boolean().optional(),
6539
- snaps: z51.boolean().optional(),
6540
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6541
- labelPlacement: z51.enum(["start", "end", "fixed", "stacked"]).optional(),
6742
+ var IonicSliderPropsSchema = z53.object({
6743
+ min: z53.number().optional(),
6744
+ max: z53.number().optional(),
6745
+ step: z53.number().positive().optional(),
6746
+ dualKnobs: z53.boolean().optional(),
6747
+ pin: z53.boolean().optional(),
6748
+ ticks: z53.boolean().optional(),
6749
+ snaps: z53.boolean().optional(),
6750
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6751
+ labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
6542
6752
  hint: DynamicTextSchema.optional()
6543
6753
  });
6544
- var IonicDatepickerPropsSchema = z51.object({
6545
- presentation: z51.enum(["date", "date-time", "time", "time-date", "month", "month-year", "year"]).optional(),
6546
- multiple: z51.boolean().optional(),
6547
- preferWheel: z51.boolean().optional(),
6548
- showDefaultButtons: z51.boolean().optional(),
6549
- showDefaultTitle: z51.boolean().optional(),
6550
- showDefaultTimeLabel: z51.boolean().optional(),
6551
- showClearButton: z51.boolean().optional(),
6552
- doneText: z51.string().optional(),
6553
- cancelText: z51.string().optional(),
6554
- size: z51.enum(["cover", "fixed"]).optional(),
6555
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6754
+ var IonicDatepickerPropsSchema = z53.object({
6755
+ presentation: z53.enum(["date", "date-time", "time", "time-date", "month", "month-year", "year"]).optional(),
6756
+ multiple: z53.boolean().optional(),
6757
+ preferWheel: z53.boolean().optional(),
6758
+ showDefaultButtons: z53.boolean().optional(),
6759
+ showDefaultTitle: z53.boolean().optional(),
6760
+ showDefaultTimeLabel: z53.boolean().optional(),
6761
+ showClearButton: z53.boolean().optional(),
6762
+ doneText: z53.string().optional(),
6763
+ cancelText: z53.string().optional(),
6764
+ size: z53.enum(["cover", "fixed"]).optional(),
6765
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6556
6766
  hint: DynamicTextSchema.optional(),
6557
6767
  placeholder: DynamicTextSchema.optional()
6558
6768
  });
6559
- var IonicSelectPropsSchema = z51.object({
6560
- multiple: z51.boolean().optional(),
6561
- interface: z51.enum(["action-sheet", "popover", "alert"]).optional(),
6562
- cancelText: z51.string().optional(),
6563
- okText: z51.string().optional(),
6769
+ var IonicSelectPropsSchema = z53.object({
6770
+ multiple: z53.boolean().optional(),
6771
+ interface: z53.enum(["action-sheet", "popover", "alert"]).optional(),
6772
+ cancelText: z53.string().optional(),
6773
+ okText: z53.string().optional(),
6564
6774
  placeholder: DynamicTextSchema.optional(),
6565
- fill: z51.enum(["solid", "outline"]).optional(),
6566
- shape: z51.literal("round").optional(),
6775
+ fill: z53.enum(["solid", "outline"]).optional(),
6776
+ shape: z53.literal("round").optional(),
6567
6777
  labelPlacement: IonicLabelPlacementSchema.optional(),
6568
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6778
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6569
6779
  hint: DynamicTextSchema.optional()
6570
6780
  });
6571
- var IonicTextareaPropsSchema = z51.object({
6572
- rows: z51.number().positive().optional(),
6573
- autoGrow: z51.boolean().optional(),
6574
- counter: z51.boolean().optional(),
6575
- fill: z51.enum(["solid", "outline"]).optional(),
6576
- shape: z51.literal("round").optional(),
6781
+ var IonicTextareaPropsSchema = z53.object({
6782
+ rows: z53.number().positive().optional(),
6783
+ autoGrow: z53.boolean().optional(),
6784
+ counter: z53.boolean().optional(),
6785
+ fill: z53.enum(["solid", "outline"]).optional(),
6786
+ shape: z53.literal("round").optional(),
6577
6787
  labelPlacement: IonicLabelPlacementSchema.optional(),
6578
6788
  hint: DynamicTextSchema.optional(),
6579
6789
  errorText: DynamicTextSchema.optional(),
6580
6790
  color: IonicColorSchema.optional(),
6581
6791
  placeholder: DynamicTextSchema.optional()
6582
6792
  });
6583
- var IonicMultiCheckboxPropsSchema = z51.object({
6584
- labelPlacement: z51.enum(["start", "end", "fixed", "stacked"]).optional(),
6793
+ var IonicMultiCheckboxPropsSchema = z53.object({
6794
+ labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
6585
6795
  justify: IonicJustifySchema.optional(),
6586
- color: z51.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6796
+ color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
6587
6797
  hint: DynamicTextSchema.optional()
6588
6798
  });
6589
- var IonicButtonPropsSchema = z51.object({
6590
- expand: z51.enum(["full", "block"]).optional(),
6799
+ var IonicButtonPropsSchema = z53.object({
6800
+ expand: z53.enum(["full", "block"]).optional(),
6591
6801
  fill: IonicFillSchema.optional(),
6592
- shape: z51.literal("round").optional(),
6593
- size: z51.enum(["small", "default", "large"]).optional(),
6802
+ shape: z53.literal("round").optional(),
6803
+ size: z53.enum(["small", "default", "large"]).optional(),
6594
6804
  color: IonicColorSchema.optional(),
6595
- strong: z51.boolean().optional(),
6596
- type: z51.enum(["button", "submit", "reset"]).optional()
6805
+ strong: z53.boolean().optional(),
6806
+ type: z53.enum(["button", "submit", "reset"]).optional()
6597
6807
  });
6598
6808
 
6599
6809
  // internal/dynamic-forms-validation/ionic/src/fields/index.ts
6600
- import { z as z52 } from "zod";
6810
+ import { z as z54 } from "zod";
6601
6811
  var IonicValueFieldBase = BaseFieldDefSchema.merge(FieldWithValidationSchema);
6602
6812
  var IonicInputFieldSchemaObject = IonicValueFieldBase.extend({
6603
- type: z52.literal("input"),
6604
- nullable: z52.boolean().optional(),
6605
- value: z52.string().nullable().optional(),
6813
+ type: z54.literal("input"),
6814
+ nullable: z54.boolean().optional(),
6815
+ value: z54.string().nullable().optional(),
6606
6816
  placeholder: DynamicTextSchema.optional(),
6607
6817
  props: IonicInputPropsSchema.optional()
6608
6818
  });
6609
6819
  var IonicInputFieldSchema = IonicInputFieldSchemaObject.superRefine(nullableValueRefine);
6610
6820
  var IonicCheckboxFieldSchema = IonicValueFieldBase.extend({
6611
- type: z52.literal("checkbox"),
6612
- value: z52.boolean().optional(),
6821
+ type: z54.literal("checkbox"),
6822
+ value: z54.boolean().optional(),
6613
6823
  placeholder: DynamicTextSchema.optional(),
6614
6824
  props: IonicCheckboxPropsSchema.optional()
6615
6825
  });
6616
6826
  var IonicRadioFieldSchemaObject = IonicValueFieldBase.extend({
6617
- type: z52.literal("radio"),
6618
- nullable: z52.boolean().optional(),
6619
- value: z52.unknown().nullable().optional(),
6827
+ type: z54.literal("radio"),
6828
+ nullable: z54.boolean().optional(),
6829
+ value: z54.unknown().nullable().optional(),
6620
6830
  placeholder: DynamicTextSchema.optional(),
6621
6831
  options: FieldOptionsSchema,
6622
6832
  props: IonicRadioPropsSchema.optional()
6623
6833
  });
6624
6834
  var IonicRadioFieldSchema = IonicRadioFieldSchemaObject.superRefine(nullableValueRefine);
6625
6835
  var IonicToggleFieldSchema = IonicValueFieldBase.extend({
6626
- type: z52.literal("toggle"),
6627
- value: z52.boolean().optional(),
6836
+ type: z54.literal("toggle"),
6837
+ value: z54.boolean().optional(),
6628
6838
  placeholder: DynamicTextSchema.optional(),
6629
6839
  props: IonicTogglePropsSchema.optional()
6630
6840
  });
6631
6841
  var IonicSliderFieldSchemaObject = IonicValueFieldBase.extend({
6632
- type: z52.literal("slider"),
6633
- nullable: z52.boolean().optional(),
6634
- value: z52.number().nullable().optional(),
6635
- minValue: z52.number().optional(),
6636
- maxValue: z52.number().optional(),
6637
- step: z52.number().positive().optional(),
6842
+ type: z54.literal("slider"),
6843
+ nullable: z54.boolean().optional(),
6844
+ value: z54.number().nullable().optional(),
6845
+ minValue: z54.number().optional(),
6846
+ maxValue: z54.number().optional(),
6847
+ step: z54.number().positive().optional(),
6638
6848
  placeholder: DynamicTextSchema.optional(),
6639
6849
  props: IonicSliderPropsSchema.optional()
6640
6850
  });
6641
6851
  var IonicSliderFieldSchema = IonicSliderFieldSchemaObject.superRefine(nullableValueRefine);
6642
6852
  var IonicDatepickerFieldSchemaObject = IonicValueFieldBase.extend({
6643
- type: z52.literal("datepicker"),
6644
- nullable: z52.boolean().optional(),
6645
- value: z52.union([z52.string(), z52.null()]).optional(),
6646
- minDate: z52.union([z52.string(), z52.null()]).optional(),
6647
- maxDate: z52.union([z52.string(), z52.null()]).optional(),
6648
- startAt: z52.union([z52.string(), z52.null()]).optional(),
6853
+ type: z54.literal("datepicker"),
6854
+ nullable: z54.boolean().optional(),
6855
+ value: z54.union([z54.string(), z54.null()]).optional(),
6856
+ minDate: z54.union([z54.string(), z54.null()]).optional(),
6857
+ maxDate: z54.union([z54.string(), z54.null()]).optional(),
6858
+ startAt: z54.union([z54.string(), z54.null()]).optional(),
6649
6859
  placeholder: DynamicTextSchema.optional(),
6650
6860
  props: IonicDatepickerPropsSchema.optional()
6651
6861
  });
6652
6862
  var IonicDatepickerFieldSchema = IonicDatepickerFieldSchemaObject.superRefine(nullableValueRefine);
6653
6863
  var IonicSelectFieldSchemaObject = IonicValueFieldBase.extend({
6654
- type: z52.literal("select"),
6655
- nullable: z52.boolean().optional(),
6656
- value: z52.unknown().nullable().optional(),
6864
+ type: z54.literal("select"),
6865
+ nullable: z54.boolean().optional(),
6866
+ value: z54.unknown().nullable().optional(),
6657
6867
  placeholder: DynamicTextSchema.optional(),
6658
6868
  options: FieldOptionsSchema,
6659
6869
  props: IonicSelectPropsSchema.optional()
6660
6870
  });
6661
6871
  var IonicSelectFieldSchema = IonicSelectFieldSchemaObject.superRefine(nullableValueRefine);
6662
6872
  var IonicTextareaFieldSchemaObject = IonicValueFieldBase.extend({
6663
- type: z52.literal("textarea"),
6664
- nullable: z52.boolean().optional(),
6665
- value: z52.string().nullable().optional(),
6873
+ type: z54.literal("textarea"),
6874
+ nullable: z54.boolean().optional(),
6875
+ value: z54.string().nullable().optional(),
6666
6876
  placeholder: DynamicTextSchema.optional(),
6667
6877
  props: IonicTextareaPropsSchema.optional()
6668
6878
  });
6669
6879
  var IonicTextareaFieldSchema = IonicTextareaFieldSchemaObject.superRefine(nullableValueRefine);
6670
6880
  var IonicMultiCheckboxFieldSchemaObject = IonicValueFieldBase.extend({
6671
- type: z52.literal("multi-checkbox"),
6672
- nullable: z52.boolean().optional(),
6673
- value: z52.array(z52.unknown()).nullable().optional(),
6881
+ type: z54.literal("multi-checkbox"),
6882
+ nullable: z54.boolean().optional(),
6883
+ value: z54.array(z54.unknown()).nullable().optional(),
6674
6884
  placeholder: DynamicTextSchema.optional(),
6675
6885
  options: FieldOptionsSchema,
6676
6886
  props: IonicMultiCheckboxPropsSchema.optional()
6677
6887
  });
6678
6888
  var IonicMultiCheckboxFieldSchema = IonicMultiCheckboxFieldSchemaObject.superRefine(nullableValueRefine);
6679
6889
  var IonicButtonFieldSchema = BaseFieldDefSchema.extend({
6680
- type: z52.literal("button"),
6681
- event: z52.string().optional(),
6682
- eventArgs: z52.array(z52.union([z52.string(), z52.number(), z52.boolean(), z52.null(), z52.undefined()])).optional(),
6890
+ type: z54.literal("button"),
6891
+ event: z54.string().optional(),
6892
+ eventArgs: z54.array(z54.union([z54.string(), z54.number(), z54.boolean(), z54.null(), z54.undefined()])).optional(),
6683
6893
  props: IonicButtonPropsSchema.optional(),
6684
6894
  logic: LogicArraySchema.optional()
6685
6895
  });
6686
6896
  var IonicSubmitButtonFieldSchema = BaseFieldDefSchema.extend({
6687
- type: z52.literal("submit"),
6897
+ type: z54.literal("submit"),
6688
6898
  props: IonicButtonPropsSchema.optional(),
6689
6899
  logic: LogicArraySchema.optional()
6690
6900
  });
6691
6901
  var IonicNextButtonFieldSchema = BaseFieldDefSchema.extend({
6692
- type: z52.literal("next"),
6902
+ type: z54.literal("next"),
6693
6903
  props: IonicButtonPropsSchema.optional(),
6694
6904
  logic: LogicArraySchema.optional()
6695
6905
  });
6696
6906
  var IonicPreviousButtonFieldSchema = BaseFieldDefSchema.extend({
6697
- type: z52.literal("previous"),
6907
+ type: z54.literal("previous"),
6698
6908
  props: IonicButtonPropsSchema.optional()
6699
6909
  });
6700
6910
  var IonicAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6701
- type: z52.literal("add-array-item"),
6702
- arrayKey: z52.string().optional(),
6911
+ /**
6912
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6913
+ * item, or a list of them for an object item.
6914
+ */
6915
+ template: ArrayItemTemplateSchema,
6916
+ type: z54.literal("add-array-item"),
6917
+ arrayKey: z54.string().optional(),
6703
6918
  props: IonicButtonPropsSchema.optional()
6704
6919
  });
6705
6920
  var IonicRemoveArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6706
- type: z52.literal("remove-array-item"),
6707
- arrayKey: z52.string().optional(),
6921
+ type: z54.literal("remove-array-item"),
6922
+ arrayKey: z54.string().optional(),
6708
6923
  props: IonicButtonPropsSchema.optional()
6709
6924
  });
6710
6925
  var IonicPrependArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6711
- type: z52.literal("prepend-array-item"),
6712
- arrayKey: z52.string().optional(),
6926
+ /**
6927
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6928
+ * item, or a list of them for an object item.
6929
+ */
6930
+ template: ArrayItemTemplateSchema,
6931
+ type: z54.literal("prepend-array-item"),
6932
+ arrayKey: z54.string().optional(),
6713
6933
  props: IonicButtonPropsSchema.optional()
6714
6934
  });
6715
6935
  var IonicInsertArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6716
- type: z52.literal("insert-array-item"),
6717
- arrayKey: z52.string().optional(),
6718
- index: z52.number(),
6936
+ /**
6937
+ * REQUIRED. What one new item looks like: a field definition for a primitive
6938
+ * item, or a list of them for an object item.
6939
+ */
6940
+ template: ArrayItemTemplateSchema,
6941
+ type: z54.literal("insert-array-item"),
6942
+ arrayKey: z54.string().optional(),
6943
+ index: z54.number(),
6719
6944
  props: IonicButtonPropsSchema.optional()
6720
6945
  });
6721
6946
  var IonicPopArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6722
- type: z52.literal("pop-array-item"),
6723
- arrayKey: z52.string(),
6947
+ type: z54.literal("pop-array-item"),
6948
+ arrayKey: z54.string(),
6724
6949
  props: IonicButtonPropsSchema.optional()
6725
6950
  });
6726
6951
  var IonicShiftArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
6727
- type: z52.literal("shift-array-item"),
6728
- arrayKey: z52.string(),
6952
+ type: z54.literal("shift-array-item"),
6953
+ arrayKey: z54.string(),
6729
6954
  props: IonicButtonPropsSchema.optional()
6730
6955
  });
6731
6956
 
6732
6957
  // internal/dynamic-forms-validation/ionic/src/ionic-leaf-field.schema.ts
6733
- import { z as z53 } from "zod";
6734
- var IonicLeafFieldSchema = z53.discriminatedUnion("type", [
6958
+ import { z as z55 } from "zod";
6959
+ var IonicLeafFieldSchema = z55.discriminatedUnion("type", [
6735
6960
  TextFieldSchema,
6736
6961
  HiddenFieldSchema,
6737
6962
  IonicInputFieldSchemaObject,
@@ -6756,7 +6981,7 @@ var IonicLeafFieldSchema = z53.discriminatedUnion("type", [
6756
6981
  ]).superRefine(nullableValueRefine);
6757
6982
 
6758
6983
  // internal/dynamic-forms-validation/ionic/src/ionic-form-config.schema.ts
6759
- import { z as z54 } from "zod";
6984
+ import { z as z56 } from "zod";
6760
6985
  var containerSchemas4 = createContainerSchemas({
6761
6986
  leafFieldSchema: IonicLeafFieldSchema
6762
6987
  });
@@ -6765,7 +6990,7 @@ var IonicRowFieldSchema = containerSchemas4.RowFieldSchema;
6765
6990
  var IonicGroupFieldSchema = containerSchemas4.GroupFieldSchema;
6766
6991
  var IonicArrayFieldSchema = containerSchemas4.ArrayFieldSchema;
6767
6992
  var IonicFieldSchema = containerSchemas4.AllFieldsSchema;
6768
- var IonicFormDefaultPropsSchema = z54.object({
6993
+ var IonicFormDefaultPropsSchema = z56.object({
6769
6994
  color: IonicColorSchema.optional(),
6770
6995
  labelPlacement: IonicLabelPlacementSchema.optional()
6771
6996
  });
@@ -6779,7 +7004,7 @@ var formConfigSchemas = {
6779
7004
  ionic: IonicFormConfigSchema
6780
7005
  };
6781
7006
  function toJsonSchema(schema, name, basePath) {
6782
- const jsonSchema = z55.toJSONSchema(schema, { target: "draft-7", io: "input", unrepresentable: "any" });
7007
+ const jsonSchema = z57.toJSONSchema(schema, { target: "draft-7", io: "input", unrepresentable: "any" });
6783
7008
  jsonSchema["$id"] = basePath ? `${basePath.replace(/\/$/, "")}/${name}` : name;
6784
7009
  return jsonSchema;
6785
7010
  }
@@ -6897,30 +7122,30 @@ function getLeafFieldJsonSchema(uiIntegration) {
6897
7122
  }
6898
7123
 
6899
7124
  // internal/dynamic-forms-validation/src/lib/schemas/field-type-names.ts
6900
- import { z as z56 } from "zod";
7125
+ import { z as z58 } from "zod";
6901
7126
  var MAX_DEPTH = 20;
6902
7127
  function collectDiscriminator(schema, into) {
6903
- if (schema instanceof z56.ZodLiteral) {
7128
+ if (schema instanceof z58.ZodLiteral) {
6904
7129
  for (const value of schema.def.values) {
6905
7130
  if (typeof value === "string") into.add(value);
6906
7131
  }
6907
7132
  return;
6908
7133
  }
6909
- if (schema instanceof z56.ZodEnum) {
7134
+ if (schema instanceof z58.ZodEnum) {
6910
7135
  for (const value of schema.options) into.add(value);
6911
7136
  }
6912
7137
  }
6913
7138
  function visit(schema, into, depth) {
6914
7139
  if (depth > MAX_DEPTH) return;
6915
- if (schema instanceof z56.ZodLazy) {
7140
+ if (schema instanceof z58.ZodLazy) {
6916
7141
  visit(schema.unwrap(), into, depth + 1);
6917
7142
  return;
6918
7143
  }
6919
- if (schema instanceof z56.ZodUnion) {
7144
+ if (schema instanceof z58.ZodUnion) {
6920
7145
  for (const option of schema.options) visit(option, into, depth + 1);
6921
7146
  return;
6922
7147
  }
6923
- if (schema instanceof z56.ZodObject) {
7148
+ if (schema instanceof z58.ZodObject) {
6924
7149
  collectDiscriminator(schema.shape["type"], into);
6925
7150
  return;
6926
7151
  }
@@ -7136,15 +7361,21 @@ var VALIDATING_CONTAINERS = ["group", "array"];
7136
7361
  var CONTAINER_VALIDATION_PROPS = ["validators", "required", "validationMessages"];
7137
7362
  var ARRAY_SIZE_PROPS = ["minLength", "maxLength"];
7138
7363
  var FIELDS_REQUIRING_OPTIONS = ["select", "radio", "multi-checkbox"];
7364
+ var CONTAINER_NESTING = {
7365
+ forbidden: ["page"],
7366
+ message: "Containers and rows cannot contain pages. ALL top-level fields must be pages if using multi-page mode."
7367
+ };
7139
7368
  var NESTING_RULES = {
7140
7369
  page: {
7141
7370
  forbidden: ["page"],
7142
7371
  message: "Pages cannot be nested inside other containers. ALL top-level fields must be pages if using multi-page mode."
7143
7372
  },
7144
- row: {
7145
- forbidden: ["page", "row", "hidden"],
7146
- message: "Rows cannot contain pages, other rows, or hidden fields. Hidden fields should be at page or form level."
7147
- },
7373
+ container: CONTAINER_NESTING,
7374
+ // A row resolves to a container at runtime, and the types say so outright:
7375
+ // `RowAllowedChildren` is an alias of `ContainerAllowedChildren`. Sharing the
7376
+ // entry keeps that an alias here too, rather than a fifth copy of the list
7377
+ // that can drift from the type it is derived from.
7378
+ row: CONTAINER_NESTING,
7148
7379
  group: {
7149
7380
  forbidden: ["page", "group"],
7150
7381
  message: "Groups cannot contain pages or other groups (no nested groups)."
@@ -7152,10 +7383,6 @@ var NESTING_RULES = {
7152
7383
  array: {
7153
7384
  forbidden: ["page", "array"],
7154
7385
  message: "Arrays cannot contain pages or other arrays (no nested arrays)."
7155
- },
7156
- container: {
7157
- forbidden: ["page"],
7158
- message: "Containers cannot contain pages. Pages are top-level fields only."
7159
7386
  }
7160
7387
  };
7161
7388
  var EXPECTED_STRUCTURE = {
@@ -7164,11 +7391,11 @@ var EXPECTED_STRUCTURE = {
7164
7391
  radio: `{ key: 'fieldKey', type: 'radio', label: 'Label', options: [{ label: 'Option', value: 'value' }] }`,
7165
7392
  "multi-checkbox": `{ key: 'fieldKey', type: 'multi-checkbox', label: 'Label', options: [{ label: 'Option', value: 'value' }] }`,
7166
7393
  slider: `{ key: 'fieldKey', type: 'slider', label: 'Label', minValue: 0, maxValue: 100, step: 1 }`,
7394
+ container: `{ key: 'containerKey', type: 'container', wrappers: [{ type: 'css', cssClasses: 'card' }], fields: [...childFields] }`,
7167
7395
  row: `{ key: 'rowKey', type: 'row', fields: [...childFields] }`,
7168
7396
  group: `{ key: 'groupKey', type: 'group', fields: [...childFields] }`,
7169
7397
  array: `Full API: { key: 'arrayKey', type: 'array', fields: [...itemDefs] } OR Simplified API: { key: 'arrayKey', type: 'array', template: { type: 'input', label: 'Item' }, value: [] }`,
7170
- page: `{ key: 'pageKey', type: 'page', fields: [...childFields, { key: 'next', type: 'next', label: 'Next' }] }`,
7171
- container: `{ key: 'containerKey', type: 'container', wrappers: [{ type: 'css', cssClasses: 'card' }], fields: [...childFields] }`
7398
+ page: `{ key: 'pageKey', type: 'page', fields: [...childFields, { key: 'next', type: 'next', label: 'Next' }] }`
7172
7399
  };
7173
7400
  function preValidateConfig(config) {
7174
7401
  const errors = [];
@@ -7206,6 +7433,7 @@ function preValidateConfig(config) {
7206
7433
  if (prop in v) {
7207
7434
  errors.push({
7208
7435
  path: `${path}.validators[${vIdx}].${prop}`,
7436
+ ruleId: "core/validation-messages-location",
7209
7437
  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.`
7210
7438
  });
7211
7439
  }
@@ -7298,6 +7526,7 @@ function preValidateConfig(config) {
7298
7526
  if (fieldType && rules.forbidden.includes(fieldType)) {
7299
7527
  errors.push({
7300
7528
  path,
7529
+ ruleId: "core/nesting",
7301
7530
  message: `"${fieldType}" is NOT allowed inside "${parentType}". ${rules.message}`
7302
7531
  });
7303
7532
  }
@@ -7346,6 +7575,7 @@ function preValidateConfig(config) {
7346
7575
  if (wrongProps.length > 0) {
7347
7576
  errors.push({
7348
7577
  path: `${path}.props`,
7578
+ ruleId: "core/slider-range-properties",
7349
7579
  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"]}`
7350
7580
  });
7351
7581
  }
@@ -7368,6 +7598,7 @@ function preValidateConfig(config) {
7368
7598
  const propList = foundForbidden.map((p) => `"${p}"`).join(", ");
7369
7599
  errors.push({
7370
7600
  path,
7601
+ ruleId: "core/hidden-minimal",
7371
7602
  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"]}`
7372
7603
  });
7373
7604
  }
@@ -7461,7 +7692,13 @@ function normalizeLegacyArrayActionTypes(value) {
7461
7692
  }
7462
7693
  return value;
7463
7694
  }
7464
- function validateFormConfig(uiIntegration, config) {
7695
+ function applyDisabledRules(errors, disabled) {
7696
+ if (disabled.size === 0) return errors;
7697
+ return errors.map(
7698
+ (error) => error.ruleId && disabled.has(error.ruleId) ? { ...error, severity: "warning" } : { ...error, severity: "error" }
7699
+ );
7700
+ }
7701
+ function validateFormConfig(uiIntegration, config, options) {
7465
7702
  const schema = formConfigSchemas2[uiIntegration];
7466
7703
  if (!schema) {
7467
7704
  return {
@@ -7485,11 +7722,15 @@ function validateFormConfig(uiIntegration, config) {
7485
7722
  };
7486
7723
  }
7487
7724
  const zodErrors = result.success ? [] : formatZodError(result.error, uiIntegration, normalizedConfig);
7488
- const allErrors = [...preErrors, ...zodErrors];
7725
+ const allErrors = applyDisabledRules([...preErrors, ...zodErrors], options?.disabledRules ?? /* @__PURE__ */ new Set());
7726
+ const blocking = allErrors.filter((error) => error.severity !== "warning");
7727
+ if (blocking.length === 0) {
7728
+ return { valid: true, data: result.success ? result.data : void 0, errors: allErrors };
7729
+ }
7489
7730
  return {
7490
7731
  valid: false,
7491
7732
  errors: allErrors,
7492
- errorSummary: generateErrorSummary(allErrors)
7733
+ errorSummary: generateErrorSummary(blocking)
7493
7734
  };
7494
7735
  }
7495
7736
  function isValidFormConfig(uiIntegration, config) {
@@ -7871,7 +8112,7 @@ function extractNode(node, path, warnings, errors) {
7871
8112
 
7872
8113
  // internal/dynamic-forms-validation/discovery/validate-file.ts
7873
8114
  import { readFile } from "node:fs/promises";
7874
- function validateSource(source, filePath, uiIntegration) {
8115
+ function validateSource(source, filePath, uiIntegration, options) {
7875
8116
  const sourceFile = createSourceFile(source, filePath);
7876
8117
  const candidates = findFormConfigCandidates(sourceFile);
7877
8118
  const results = candidates.map((candidate) => {
@@ -7881,7 +8122,7 @@ function validateSource(source, filePath, uiIntegration) {
7881
8122
  line: candidate.startLine,
7882
8123
  matchReason: candidate.matchReason,
7883
8124
  extraction,
7884
- validation: validateFormConfig(uiIntegration, extraction.value)
8125
+ validation: validateFormConfig(uiIntegration, extraction.value, options)
7885
8126
  };
7886
8127
  });
7887
8128
  return {
@@ -7890,12 +8131,16 @@ function validateSource(source, filePath, uiIntegration) {
7890
8131
  results,
7891
8132
  noConfigsFound: results.length === 0,
7892
8133
  valid: results.every((r) => r.validation.valid),
7893
- errorCount: results.reduce((sum, r) => sum + (r.validation.errors?.length ?? 0), 0)
8134
+ // Errors only. A finding downgraded to a warning by a disabled rule does
8135
+ // not block, so counting it here reported "1 error" on a file the same run
8136
+ // called valid.
8137
+ errorCount: results.reduce((sum, r) => sum + (r.validation.errors ?? []).filter((e) => e.severity !== "warning").length, 0),
8138
+ warningCount: results.reduce((sum, r) => sum + (r.validation.errors ?? []).filter((e) => e.severity === "warning").length, 0)
7894
8139
  };
7895
8140
  }
7896
- async function validateFile(filePath, uiIntegration) {
8141
+ async function validateFile(filePath, uiIntegration, options) {
7897
8142
  const source = await readFile(filePath, "utf-8");
7898
- return validateSource(source, filePath, uiIntegration);
8143
+ return validateSource(source, filePath, uiIntegration, options);
7899
8144
  }
7900
8145
  function isFilePath(value) {
7901
8146
  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");
@@ -7972,6 +8217,21 @@ function pushErrors(lines, errors) {
7972
8217
  }
7973
8218
  }
7974
8219
  }
8220
+ function isWarning(error) {
8221
+ return error.severity === "warning";
8222
+ }
8223
+ function pushWarnings(lines, warnings) {
8224
+ if (warnings.length === 0) {
8225
+ return;
8226
+ }
8227
+ lines.push(`### ${warnings.length} Warning(s)`);
8228
+ lines.push("");
8229
+ for (const { name, error } of warnings) {
8230
+ const rule2 = error.ruleId ? ` (${error.ruleId}, disabled)` : "";
8231
+ lines.push(`- **${name}** \`${error.path}\`${rule2}: ${error.message}`);
8232
+ }
8233
+ lines.push("");
8234
+ }
7975
8235
  function pushRelatedDocs(lines, errors, options) {
7976
8236
  const hints = options?.relatedDocs?.(errors) ?? [];
7977
8237
  if (hints.length === 0) {
@@ -8019,30 +8279,35 @@ function formatFileReport(result, options) {
8019
8279
  }
8020
8280
  lines.push("");
8021
8281
  }
8282
+ const warnings = result.results.flatMap(
8283
+ (entry) => (entry.validation.errors ?? []).filter(isWarning).map((error) => ({ name: entry.name, error }))
8284
+ );
8022
8285
  if (result.valid) {
8023
8286
  lines.push("### All Configs Valid");
8024
8287
  lines.push("");
8025
8288
  for (const entry of result.results) {
8026
8289
  lines.push(`- **${entry.name}** (line ${entry.line}): Valid`);
8027
8290
  }
8028
- return lines.join("\n");
8291
+ lines.push("");
8292
+ pushWarnings(lines, warnings);
8293
+ return lines.join("\n").trimEnd();
8029
8294
  }
8030
8295
  lines.push(`### ${result.errorCount} Error(s) Found`);
8031
8296
  lines.push("");
8032
8297
  const allErrors = [];
8033
8298
  for (const entry of result.results) {
8034
- if (entry.validation.valid) {
8299
+ const blocking = (entry.validation.errors ?? []).filter((error) => !isWarning(error));
8300
+ if (blocking.length === 0) {
8035
8301
  lines.push(`#### ${entry.name} (line ${entry.line}): Valid`);
8036
8302
  } else {
8037
8303
  lines.push(`#### ${entry.name} (line ${entry.line}): Invalid`);
8038
8304
  lines.push("");
8039
- if (entry.validation.errors) {
8040
- pushErrors(lines, entry.validation.errors);
8041
- allErrors.push(...entry.validation.errors);
8042
- }
8305
+ pushErrors(lines, blocking);
8306
+ allErrors.push(...blocking);
8043
8307
  }
8044
8308
  lines.push("");
8045
8309
  }
8310
+ pushWarnings(lines, warnings);
8046
8311
  pushRelatedDocs(lines, allErrors, options);
8047
8312
  return lines.join("\n");
8048
8313
  }
@@ -8067,6 +8332,95 @@ function formatConfigReport(uiIntegration, validation, options) {
8067
8332
  return lines.join("\n");
8068
8333
  }
8069
8334
 
8335
+ // internal/dynamic-forms-validation/rules/catalogue.ts
8336
+ function rule(id, summary, why) {
8337
+ return { id, summary, why };
8338
+ }
8339
+ var RULES = Object.freeze(
8340
+ Object.fromEntries(
8341
+ [
8342
+ rule(
8343
+ "core/hidden-minimal",
8344
+ "Keep hidden fields to `key`, `type`, `value` and `className`",
8345
+ "Hidden fields render nothing, so labels, validation and layout properties on them have no effect and mislead the next reader."
8346
+ ),
8347
+ rule(
8348
+ "core/nesting",
8349
+ "Respect which field types may nest inside which",
8350
+ "A page inside a row, or an array inside an array, has no rendering path and fails at runtime rather than at build time."
8351
+ ),
8352
+ rule(
8353
+ "core/validation-messages-location",
8354
+ "Put error text in `validationMessages`, not on the validator",
8355
+ "A message on the validator object is dropped and the field falls back to the default text."
8356
+ ),
8357
+ rule(
8358
+ "core/slider-range-properties",
8359
+ "Use `minValue`, `maxValue` and `step` for a slider range",
8360
+ "`min` and `max` are validation shorthands. They typecheck and validate clean, and the slider still renders its default range, so nothing catches the mistake."
8361
+ )
8362
+ ].map((entry) => [entry.id, entry])
8363
+ )
8364
+ );
8365
+ var RULE_IDS = Object.freeze(Object.keys(RULES).sort());
8366
+ var UnknownRuleError = class extends Error {
8367
+ constructor(unknown) {
8368
+ super(
8369
+ `[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(", ")}.`
8370
+ );
8371
+ this.name = "UnknownRuleError";
8372
+ }
8373
+ };
8374
+ function resolveDisabledRules(disabled) {
8375
+ const unknown = disabled.filter((id) => !RULES[id]);
8376
+ if (unknown.length > 0) throw new UnknownRuleError(unknown);
8377
+ return new Set(disabled);
8378
+ }
8379
+
8380
+ // internal/dynamic-forms-validation/rules/project-rules.ts
8381
+ import { readFile as readFile2 } from "node:fs/promises";
8382
+ import { dirname, join } from "node:path";
8383
+ var RULES_FILE = join(".ng-forge", "rules.json");
8384
+ var RulesConfigError = class extends Error {
8385
+ constructor(path, detail) {
8386
+ super(`[Dynamic Forms] ${path}: ${detail}`);
8387
+ this.name = "RulesConfigError";
8388
+ }
8389
+ };
8390
+ function errorCode(cause) {
8391
+ return typeof cause === "object" && cause !== null && "code" in cause ? String(cause.code) : void 0;
8392
+ }
8393
+ async function loadProjectRules(packageJsonPath) {
8394
+ if (!packageJsonPath) return { disabled: /* @__PURE__ */ new Set() };
8395
+ const path = join(dirname(packageJsonPath), RULES_FILE);
8396
+ let raw;
8397
+ try {
8398
+ raw = await readFile2(path, "utf-8");
8399
+ } catch (cause) {
8400
+ const code = errorCode(cause);
8401
+ if (code === "ENOENT") return { disabled: /* @__PURE__ */ new Set() };
8402
+ throw new RulesConfigError(path, `cannot be read (${code ?? cause.message})`);
8403
+ }
8404
+ let parsed;
8405
+ try {
8406
+ parsed = JSON.parse(raw);
8407
+ } catch (cause) {
8408
+ throw new RulesConfigError(path, `not valid JSON (${cause.message})`);
8409
+ }
8410
+ if (parsed === null || typeof parsed !== "object") {
8411
+ throw new RulesConfigError(path, "must be a JSON object");
8412
+ }
8413
+ const disabled = parsed.disabled ?? [];
8414
+ if (!Array.isArray(disabled) || disabled.some((id) => typeof id !== "string")) {
8415
+ throw new RulesConfigError(path, '"disabled" must be an array of rule ids');
8416
+ }
8417
+ try {
8418
+ return { disabled: resolveDisabledRules(disabled), source: path };
8419
+ } catch (cause) {
8420
+ throw new RulesConfigError(path, cause.message.replace("[Dynamic Forms] ", ""));
8421
+ }
8422
+ }
8423
+
8070
8424
  // packages/dynamic-form-mcp/src/resources/schemas.resource.ts
8071
8425
  var UI_INTEGRATIONS = ["material", "bootstrap", "primeng", "ionic"];
8072
8426
  function registerSchemasResource(server) {
@@ -8235,7 +8589,7 @@ function registerResources(server) {
8235
8589
  }
8236
8590
 
8237
8591
  // packages/dynamic-form-mcp/src/tools/lookup.tool.ts
8238
- import { z as z57 } from "zod";
8592
+ import { z as z59 } from "zod";
8239
8593
 
8240
8594
  // packages/dynamic-form-mcp/src/tools/data/lookup-topics.ts
8241
8595
  var TOPICS = {
@@ -11545,11 +11899,11 @@ Patterns: field-placement, logic-matrix, context-api, containers, multi-page-got
11545
11899
  Use topic="list" to see all available topics with descriptions.
11546
11900
  Use ngforge_search query="your question" to find topics by keyword.`,
11547
11901
  {
11548
- topic: z57.string().describe(
11902
+ topic: z59.string().describe(
11549
11903
  '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'
11550
11904
  ),
11551
- depth: z57.enum(["brief", "full", "schema"]).default("full").describe("brief=quick syntax (~20 lines), full=complete docs with examples, schema=include JSON schema"),
11552
- uiIntegration: z57.enum(UI_INTEGRATIONS2).optional().describe("Filter UI-specific info (only with depth=schema). material, bootstrap, primeng, ionic")
11905
+ depth: z59.enum(["brief", "full", "schema"]).default("full").describe("brief=quick syntax (~20 lines), full=complete docs with examples, schema=include JSON schema"),
11906
+ uiIntegration: z59.enum(UI_INTEGRATIONS2).optional().describe("Filter UI-specific info (only with depth=schema). material, bootstrap, primeng, ionic")
11553
11907
  },
11554
11908
  async ({ topic, depth, uiIntegration }) => {
11555
11909
  const normalizedTopic = topic.toLowerCase().trim();
@@ -11597,7 +11951,7 @@ ${nextSteps}`;
11597
11951
  }
11598
11952
 
11599
11953
  // packages/dynamic-form-mcp/src/tools/examples.tool.ts
11600
- import { z as z58 } from "zod";
11954
+ import { z as z60 } from "zod";
11601
11955
  var PATTERNS = {
11602
11956
  // ========== MINIMAL PATTERNS (NEW) ==========
11603
11957
  "minimal-multipage": {
@@ -13862,10 +14216,10 @@ Standard patterns: derivation, property-derivation, multi-page, conditional, val
13862
14216
  Use pattern="list" to see all available patterns.
13863
14217
  Use depth="minimal" for code-only output (no markdown).`,
13864
14218
  {
13865
- pattern: z58.string().optional().describe(
14219
+ pattern: z60.string().optional().describe(
13866
14220
  '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.'
13867
14221
  ),
13868
- depth: z58.enum(["minimal", "brief", "full", "explained"]).default("full").describe(
14222
+ depth: z60.enum(["minimal", "brief", "full", "explained"]).default("full").describe(
13869
14223
  "minimal=code only (~20-50 lines), brief=code+summary, full=code+comments (default), explained=code+detailed explanation"
13870
14224
  )
13871
14225
  },
@@ -13930,8 +14284,29 @@ function extractCode(markdown) {
13930
14284
  }
13931
14285
 
13932
14286
  // packages/dynamic-form-mcp/src/tools/validate.tool.ts
13933
- import { z as z59 } from "zod";
14287
+ import { access } from "node:fs/promises";
14288
+ import { dirname as dirname2, join as join2, parse, resolve } from "node:path";
14289
+ import { z as z61 } from "zod";
13934
14290
  var UI_INTEGRATIONS3 = ["material", "bootstrap", "primeng", "ionic"];
14291
+ async function projectDisabledRules(filePath) {
14292
+ return (await loadProjectRules(await nearestManifest(dirname2(filePath)))).disabled;
14293
+ }
14294
+ function countBySeverity(errors, severity) {
14295
+ return (errors ?? []).filter((error) => (error.severity ?? "error") === severity).length;
14296
+ }
14297
+ async function nearestManifest(start) {
14298
+ const from = resolve(start);
14299
+ const { root } = parse(from);
14300
+ for (let dir = from; ; dir = dirname2(dir)) {
14301
+ const candidate = join2(dir, "package.json");
14302
+ try {
14303
+ await access(candidate);
14304
+ return candidate;
14305
+ } catch {
14306
+ }
14307
+ if (dir === root) return void 0;
14308
+ }
14309
+ }
13935
14310
  var ERROR_TOPIC_HINTS = [
13936
14311
  { pattern: /options/i, hint: '`ngforge_lookup topic="options-format"` \u2014 correct options syntax' },
13937
14312
  { pattern: /hidden/i, hint: '`ngforge_lookup topic="hidden"` \u2014 hidden field rules' },
@@ -13983,16 +14358,17 @@ Example errors you'll see:
13983
14358
  - "options MUST be at FIELD level, NOT inside props"
13984
14359
  - "containers only support 'hidden' logic type"`,
13985
14360
  {
13986
- config: z59.union([z59.string(), z59.object({}).passthrough()]).describe(
14361
+ config: z61.union([z61.string(), z61.object({}).passthrough()]).describe(
13987
14362
  "File path (.ts/.js) OR JSON string OR JSON object. Auto-detects: paths ending in .ts/.js or starting with / are treated as files."
13988
14363
  ),
13989
- uiIntegration: z59.enum(UI_INTEGRATIONS3).default("material").describe("UI library to validate against (material, bootstrap, primeng, ionic). Defaults to material.")
14364
+ uiIntegration: z61.enum(UI_INTEGRATIONS3).default("material").describe("UI library to validate against (material, bootstrap, primeng, ionic). Defaults to material.")
13990
14365
  },
13991
14366
  async ({ config, uiIntegration }) => {
13992
14367
  try {
13993
14368
  const parsed = parseConfigInput(config);
13994
14369
  if (parsed.type === "file") {
13995
- const result2 = await validateFile(parsed.path, uiIntegration);
14370
+ const disabledRules = await projectDisabledRules(parsed.path);
14371
+ const result2 = await validateFile(parsed.path, uiIntegration, { disabledRules });
13996
14372
  const report2 = formatFileReport(result2, { relatedDocs: collectErrorTopicHints });
13997
14373
  const structured2 = {
13998
14374
  type: "file",
@@ -14000,11 +14376,14 @@ Example errors you'll see:
14000
14376
  uiIntegration,
14001
14377
  configsFound: result2.results.length,
14002
14378
  allValid: result2.valid,
14379
+ errorCount: result2.errorCount,
14380
+ warningCount: result2.warningCount,
14003
14381
  results: result2.results.map((r) => ({
14004
14382
  name: r.name,
14005
14383
  line: r.line,
14006
14384
  valid: r.validation.valid,
14007
- errorCount: r.validation.errors?.length || 0
14385
+ errorCount: countBySeverity(r.validation.errors, "error"),
14386
+ warningCount: countBySeverity(r.validation.errors, "warning")
14008
14387
  }))
14009
14388
  };
14010
14389
  return {
@@ -14021,7 +14400,8 @@ Example errors you'll see:
14021
14400
  type: parsed.type,
14022
14401
  uiIntegration,
14023
14402
  valid: result.valid,
14024
- errorCount: result.errors?.length || 0,
14403
+ errorCount: countBySeverity(result.errors, "error"),
14404
+ warningCount: countBySeverity(result.errors, "warning"),
14025
14405
  errors: result.errors
14026
14406
  };
14027
14407
  return {
@@ -14078,7 +14458,7 @@ If validating JSON, ensure:
14078
14458
  }
14079
14459
 
14080
14460
  // packages/dynamic-form-mcp/src/tools/scaffold.tool.ts
14081
- import { z as z60 } from "zod";
14461
+ import { z as z62 } from "zod";
14082
14462
  var UI_INTEGRATIONS4 = ["material", "bootstrap", "primeng", "ionic"];
14083
14463
  function parseFieldDefs(fields) {
14084
14464
  return fields.map((f) => {
@@ -14333,12 +14713,12 @@ Examples:
14333
14713
  - With groups: pages=0 groups=["address","billing"]
14334
14714
  - With hidden: hidden=["userId:abc123","source:web"]`,
14335
14715
  {
14336
- pages: z60.number().min(0).max(10).default(0).describe("Number of pages (0 = single-page form, 1-10 = multi-page wizard)"),
14337
- arrays: z60.array(z60.string()).optional().describe('Array field names for dynamic lists, e.g., ["contacts", "addresses"]'),
14338
- groups: z60.array(z60.string()).optional().describe('Group field names for nested objects, e.g., ["address", "billing"]'),
14339
- hidden: z60.array(z60.string()).optional().describe('Hidden fields as "name:value" pairs, e.g., ["userId:abc", "version:1"]'),
14340
- fields: z60.array(z60.string()).optional().describe('Basic fields as "name:type" pairs, e.g., ["email:input", "country:select", "age:slider"]'),
14341
- uiIntegration: z60.enum(UI_INTEGRATIONS4).default("material").describe("UI library (for future UI-specific props). Defaults to material.")
14716
+ pages: z62.number().min(0).max(10).default(0).describe("Number of pages (0 = single-page form, 1-10 = multi-page wizard)"),
14717
+ arrays: z62.array(z62.string()).optional().describe('Array field names for dynamic lists, e.g., ["contacts", "addresses"]'),
14718
+ groups: z62.array(z62.string()).optional().describe('Group field names for nested objects, e.g., ["address", "billing"]'),
14719
+ hidden: z62.array(z62.string()).optional().describe('Hidden fields as "name:value" pairs, e.g., ["userId:abc", "version:1"]'),
14720
+ fields: z62.array(z62.string()).optional().describe('Basic fields as "name:type" pairs, e.g., ["email:input", "country:select", "age:slider"]'),
14721
+ uiIntegration: z62.enum(UI_INTEGRATIONS4).default("material").describe("UI library (for future UI-specific props). Defaults to material.")
14342
14722
  },
14343
14723
  async ({ pages, arrays = [], groups = [], hidden = [], fields = [] }) => {
14344
14724
  const fieldDefs = parseFieldDefs(fields);
@@ -14380,7 +14760,7 @@ Examples:
14380
14760
  }
14381
14761
 
14382
14762
  // packages/dynamic-form-mcp/src/tools/search.tool.ts
14383
- import { z as z61 } from "zod";
14763
+ import { z as z63 } from "zod";
14384
14764
  var searchIndex = null;
14385
14765
  function getTopicSubcategory(key) {
14386
14766
  const fieldTypes = ["input", "select", "slider", "radio", "checkbox", "textarea", "datepicker", "toggle", "text", "hidden"];
@@ -14541,7 +14921,7 @@ Use this when you don't know the exact topic name.
14541
14921
 
14542
14922
  New to ng-forge? Start with: ngforge_lookup topic="workflow"`,
14543
14923
  {
14544
- query: z61.string().describe("Natural language or keywords to search for")
14924
+ query: z63.string().describe("Natural language or keywords to search for")
14545
14925
  },
14546
14926
  async ({ query }) => {
14547
14927
  const index = buildIndex();