@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/bin/ng-forge-mcp.js +1094 -714
- package/index.d.ts +37 -1
- package/package.json +6 -6
- package/src/index.js +1094 -714
- package/src/registry/field-types.d.ts.map +1 -1
- package/src/registry/index.d.ts +10 -0
- package/src/registry/index.d.ts.map +1 -1
- package/src/registry/instructions.d.ts +1 -1
- package/src/registry/instructions.d.ts.map +1 -1
- package/src/tools/validate.tool.d.ts.map +1 -1
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: ["
|
|
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
|
|
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
|
|
3431
|
+
Different UI libraries support different \`props\`. Always validate against the library the project actually uses.
|
|
3362
3432
|
|
|
3363
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
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. **
|
|
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',
|
|
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
|
-
|
|
3490
|
+
Never hand back a config you have not checked. Two routes, depending on what is
|
|
3491
|
+
available:
|
|
3409
3492
|
|
|
3410
|
-
|
|
3411
|
-
|
|
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
|
-
|
|
3496
|
+
Both run the same schemas, so they agree.
|
|
3419
3497
|
|
|
3420
|
-
|
|
3421
|
-
|
|
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
|
|
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:
|
|
4573
|
+
key: z5.string(),
|
|
4459
4574
|
/**
|
|
4460
4575
|
* Field type discriminant.
|
|
4461
4576
|
* Determines which component renders the field.
|
|
4462
4577
|
*/
|
|
4463
|
-
type:
|
|
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:
|
|
4591
|
+
className: z5.string().optional(),
|
|
4477
4592
|
/**
|
|
4478
4593
|
* Whether the field is disabled (non-interactive but visible).
|
|
4479
4594
|
*/
|
|
4480
|
-
disabled:
|
|
4595
|
+
disabled: z5.boolean().optional(),
|
|
4481
4596
|
/**
|
|
4482
4597
|
* Whether the field is read-only (displays value but not editable).
|
|
4483
4598
|
*/
|
|
4484
|
-
readonly:
|
|
4599
|
+
readonly: z5.boolean().optional(),
|
|
4485
4600
|
/**
|
|
4486
4601
|
* Whether the field is hidden from view.
|
|
4487
4602
|
*/
|
|
4488
|
-
hidden:
|
|
4603
|
+
hidden: z5.boolean().optional(),
|
|
4489
4604
|
/**
|
|
4490
4605
|
* Tab order for keyboard navigation.
|
|
4491
4606
|
*/
|
|
4492
|
-
tabIndex:
|
|
4607
|
+
tabIndex: z5.number().optional(),
|
|
4493
4608
|
/**
|
|
4494
4609
|
* Grid column width (1-12) in a 12-column layout system.
|
|
4495
4610
|
*/
|
|
4496
|
-
col:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
4527
|
-
var ComparisonOperatorSchema =
|
|
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 =
|
|
4664
|
+
var BaseComparisonConditionSchema = z6.object({
|
|
4540
4665
|
operator: ComparisonOperatorSchema.optional(),
|
|
4541
|
-
value:
|
|
4666
|
+
value: z6.unknown().optional()
|
|
4542
4667
|
});
|
|
4543
4668
|
var FieldValueConditionSchema = BaseComparisonConditionSchema.extend({
|
|
4544
|
-
type:
|
|
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:
|
|
4674
|
+
fieldPath: z6.string()
|
|
4550
4675
|
});
|
|
4551
|
-
var CustomConditionSchema =
|
|
4552
|
-
type:
|
|
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:
|
|
4681
|
+
functionName: z6.string()
|
|
4557
4682
|
});
|
|
4558
|
-
var JavaScriptConditionSchema =
|
|
4559
|
-
type:
|
|
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:
|
|
4689
|
+
expression: z6.string()
|
|
4565
4690
|
});
|
|
4566
|
-
var ConditionalExpressionSchema =
|
|
4567
|
-
() =>
|
|
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 =
|
|
4576
|
-
type:
|
|
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:
|
|
4705
|
+
conditions: z6.array(z6.lazy(() => ConditionalExpressionSchema))
|
|
4581
4706
|
});
|
|
4582
|
-
var OrConditionSchema =
|
|
4583
|
-
type:
|
|
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:
|
|
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 =
|
|
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 =
|
|
4723
|
+
var BuiltInValidatorParamsSchema = z7.object({
|
|
4599
4724
|
/**
|
|
4600
4725
|
* Static value for the validator parameter.
|
|
4601
4726
|
*/
|
|
4602
|
-
value:
|
|
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:
|
|
4731
|
+
expression: z7.string().optional()
|
|
4607
4732
|
});
|
|
4608
|
-
var ValidatorConfigSchema =
|
|
4733
|
+
var ValidatorConfigSchema = z7.discriminatedUnion("type", [
|
|
4609
4734
|
// Built-in validators
|
|
4610
4735
|
BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
|
|
4611
|
-
type:
|
|
4736
|
+
type: z7.literal("required")
|
|
4612
4737
|
}),
|
|
4613
4738
|
BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
|
|
4614
|
-
type:
|
|
4739
|
+
type: z7.literal("email")
|
|
4615
4740
|
}),
|
|
4616
4741
|
BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
|
|
4617
|
-
type:
|
|
4742
|
+
type: z7.literal("min")
|
|
4618
4743
|
}),
|
|
4619
4744
|
BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
|
|
4620
|
-
type:
|
|
4745
|
+
type: z7.literal("max")
|
|
4621
4746
|
}),
|
|
4622
4747
|
BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
|
|
4623
|
-
type:
|
|
4748
|
+
type: z7.literal("minLength")
|
|
4624
4749
|
}),
|
|
4625
4750
|
BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
|
|
4626
|
-
type:
|
|
4751
|
+
type: z7.literal("maxLength")
|
|
4627
4752
|
}),
|
|
4628
4753
|
BaseValidatorSchema.merge(BuiltInValidatorParamsSchema).extend({
|
|
4629
|
-
type:
|
|
4754
|
+
type: z7.literal("pattern")
|
|
4630
4755
|
}),
|
|
4631
4756
|
// Custom synchronous validators
|
|
4632
4757
|
BaseValidatorSchema.extend({
|
|
4633
|
-
type:
|
|
4758
|
+
type: z7.literal("custom"),
|
|
4634
4759
|
/**
|
|
4635
4760
|
* Name of a registered custom validator function.
|
|
4636
4761
|
*/
|
|
4637
|
-
functionName:
|
|
4762
|
+
functionName: z7.string().optional(),
|
|
4638
4763
|
/**
|
|
4639
4764
|
* Parameters passed to the custom validator function.
|
|
4640
4765
|
*/
|
|
4641
|
-
params:
|
|
4766
|
+
params: z7.record(z7.string(), z7.unknown()).optional(),
|
|
4642
4767
|
/**
|
|
4643
4768
|
* JavaScript expression to evaluate for validation.
|
|
4644
4769
|
*/
|
|
4645
|
-
expression:
|
|
4770
|
+
expression: z7.string().optional(),
|
|
4646
4771
|
/**
|
|
4647
4772
|
* Error kind identifier for linking to validation messages.
|
|
4648
4773
|
*/
|
|
4649
|
-
kind:
|
|
4774
|
+
kind: z7.string().optional(),
|
|
4650
4775
|
/**
|
|
4651
4776
|
* Error context parameters for message interpolation.
|
|
4652
4777
|
*/
|
|
4653
|
-
errorParams:
|
|
4778
|
+
errorParams: z7.record(z7.string(), z7.string()).optional()
|
|
4654
4779
|
}),
|
|
4655
4780
|
// Async validators
|
|
4656
4781
|
BaseValidatorSchema.extend({
|
|
4657
|
-
type:
|
|
4782
|
+
type: z7.literal("async"),
|
|
4658
4783
|
/**
|
|
4659
4784
|
* Name of a registered async validator function. Required.
|
|
4660
4785
|
*/
|
|
4661
|
-
functionName:
|
|
4786
|
+
functionName: z7.string(),
|
|
4662
4787
|
/**
|
|
4663
4788
|
* Parameters passed to the async validator function.
|
|
4664
4789
|
*/
|
|
4665
|
-
params:
|
|
4790
|
+
params: z7.record(z7.string(), z7.unknown()).optional()
|
|
4666
4791
|
}),
|
|
4667
4792
|
// HTTP validators
|
|
4668
4793
|
BaseValidatorSchema.extend({
|
|
4669
|
-
type:
|
|
4794
|
+
type: z7.literal("http"),
|
|
4670
4795
|
/**
|
|
4671
4796
|
* Name of a registered HTTP validator config function. Required.
|
|
4672
4797
|
*/
|
|
4673
|
-
functionName:
|
|
4798
|
+
functionName: z7.string(),
|
|
4674
4799
|
/**
|
|
4675
4800
|
* Parameters passed to the HTTP validator function.
|
|
4676
4801
|
*/
|
|
4677
|
-
params:
|
|
4802
|
+
params: z7.record(z7.string(), z7.unknown()).optional()
|
|
4678
4803
|
})
|
|
4679
4804
|
]);
|
|
4680
|
-
var ValidatorsArraySchema =
|
|
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
|
|
4684
|
-
var ValidationMessagesSchema =
|
|
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
|
|
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
|
|
4699
|
-
var StateLogicTypeSchema =
|
|
4700
|
-
var FormStateConditionSchema =
|
|
4701
|
-
var StateConditionSchema =
|
|
4702
|
-
var LogicTriggerSchema =
|
|
4703
|
-
var ImmediateStateLogicConfigSchema =
|
|
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:
|
|
4840
|
+
trigger: z9.literal("onChange").optional()
|
|
4716
4841
|
});
|
|
4717
|
-
var DebouncedStateLogicConfigSchema =
|
|
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:
|
|
4854
|
+
trigger: z9.literal("debounced"),
|
|
4730
4855
|
/**
|
|
4731
4856
|
* Debounce duration in milliseconds. Defaults to 500.
|
|
4732
4857
|
*/
|
|
4733
|
-
debounceMs:
|
|
4858
|
+
debounceMs: z9.number().positive().optional()
|
|
4734
4859
|
});
|
|
4735
|
-
var StateLogicConfigSchema =
|
|
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
|
|
4739
|
-
var OnChangeDerivationLogicConfigSchema =
|
|
4863
|
+
import { z as z10 } from "zod";
|
|
4864
|
+
var OnChangeDerivationLogicConfigSchema = z10.object({
|
|
4740
4865
|
/**
|
|
4741
4866
|
* Discriminant for derivation logic.
|
|
4742
4867
|
*/
|
|
4743
|
-
type:
|
|
4868
|
+
type: z10.literal("derivation"),
|
|
4744
4869
|
/**
|
|
4745
4870
|
* Debug name for logging and troubleshooting.
|
|
4746
4871
|
*/
|
|
4747
|
-
debugName:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
4896
|
+
dependsOn: z10.array(z10.string()).optional(),
|
|
4772
4897
|
/**
|
|
4773
4898
|
* Trigger type - defaults to 'onChange' for immediate evaluation.
|
|
4774
4899
|
*/
|
|
4775
|
-
trigger:
|
|
4900
|
+
trigger: z10.literal("onChange").optional()
|
|
4776
4901
|
});
|
|
4777
|
-
var DebouncedDerivationLogicConfigSchema =
|
|
4902
|
+
var DebouncedDerivationLogicConfigSchema = z10.object({
|
|
4778
4903
|
/**
|
|
4779
4904
|
* Discriminant for derivation logic.
|
|
4780
4905
|
*/
|
|
4781
|
-
type:
|
|
4906
|
+
type: z10.literal("derivation"),
|
|
4782
4907
|
/**
|
|
4783
4908
|
* Debug name for logging and troubleshooting.
|
|
4784
4909
|
*/
|
|
4785
|
-
debugName:
|
|
4910
|
+
debugName: z10.string().optional(),
|
|
4786
4911
|
/**
|
|
4787
4912
|
* Condition for when this derivation should run.
|
|
4788
4913
|
*/
|
|
4789
|
-
condition:
|
|
4914
|
+
condition: z10.union([ConditionalExpressionSchema, z10.boolean()]).optional(),
|
|
4790
4915
|
/**
|
|
4791
4916
|
* Static value to set.
|
|
4792
4917
|
*/
|
|
4793
|
-
value:
|
|
4918
|
+
value: z10.unknown().optional(),
|
|
4794
4919
|
/**
|
|
4795
4920
|
* JavaScript expression to evaluate for the value.
|
|
4796
4921
|
*/
|
|
4797
|
-
expression:
|
|
4922
|
+
expression: z10.string().optional(),
|
|
4798
4923
|
/**
|
|
4799
4924
|
* Name of a registered derivation function.
|
|
4800
4925
|
*/
|
|
4801
|
-
functionName:
|
|
4926
|
+
functionName: z10.string().optional(),
|
|
4802
4927
|
/**
|
|
4803
4928
|
* Explicit dependencies for determining when to re-evaluate.
|
|
4804
4929
|
*/
|
|
4805
|
-
dependsOn:
|
|
4930
|
+
dependsOn: z10.array(z10.string()).optional(),
|
|
4806
4931
|
/**
|
|
4807
4932
|
* Trigger type - must be 'debounced' for delayed evaluation.
|
|
4808
4933
|
*/
|
|
4809
|
-
trigger:
|
|
4934
|
+
trigger: z10.literal("debounced"),
|
|
4810
4935
|
/**
|
|
4811
4936
|
* Debounce duration in milliseconds. Defaults to 500.
|
|
4812
4937
|
*/
|
|
4813
|
-
debounceMs:
|
|
4938
|
+
debounceMs: z10.number().positive().optional()
|
|
4814
4939
|
});
|
|
4815
|
-
var DerivationLogicConfigSchema =
|
|
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 =
|
|
4819
|
-
var LogicArraySchema =
|
|
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 =
|
|
4823
|
-
var SchemaApplicationConfigSchema =
|
|
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:
|
|
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:
|
|
4965
|
+
typePredicate: z12.string().optional()
|
|
4841
4966
|
});
|
|
4842
|
-
var FieldWithValidationSchema =
|
|
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:
|
|
4972
|
+
required: z12.boolean().optional(),
|
|
4848
4973
|
/**
|
|
4849
4974
|
* Whether to apply email validation.
|
|
4850
4975
|
*/
|
|
4851
|
-
email:
|
|
4976
|
+
email: z12.boolean().optional(),
|
|
4852
4977
|
/**
|
|
4853
4978
|
* Minimum numeric value.
|
|
4854
4979
|
*/
|
|
4855
|
-
min:
|
|
4980
|
+
min: z12.number().optional(),
|
|
4856
4981
|
/**
|
|
4857
4982
|
* Maximum numeric value.
|
|
4858
4983
|
*/
|
|
4859
|
-
max:
|
|
4984
|
+
max: z12.number().optional(),
|
|
4860
4985
|
/**
|
|
4861
4986
|
* Minimum string length.
|
|
4862
4987
|
*/
|
|
4863
|
-
minLength:
|
|
4988
|
+
minLength: z12.number().optional(),
|
|
4864
4989
|
/**
|
|
4865
4990
|
* Maximum string length.
|
|
4866
4991
|
*/
|
|
4867
|
-
maxLength:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
4926
|
-
var ContainerLogicSchema =
|
|
4927
|
-
type:
|
|
4928
|
-
condition:
|
|
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 =
|
|
4940
|
-
() =>
|
|
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:
|
|
4956
|
-
meta:
|
|
5080
|
+
label: z14.never().optional(),
|
|
5081
|
+
meta: z14.never().optional()
|
|
4957
5082
|
});
|
|
4958
5083
|
const ContainerValidationShape = {
|
|
4959
|
-
required:
|
|
5084
|
+
required: z14.boolean().optional(),
|
|
4960
5085
|
validators: ValidatorsArraySchema.optional(),
|
|
4961
5086
|
validationMessages: ValidationMessagesSchema.optional()
|
|
4962
5087
|
};
|
|
4963
|
-
const WrapperConfigSchema =
|
|
5088
|
+
const WrapperConfigSchema = z14.object({ type: z14.string() }).passthrough();
|
|
4964
5089
|
const ContainerFieldSchema = ContainerBaseSchema.extend({
|
|
4965
|
-
type:
|
|
4966
|
-
fields:
|
|
4967
|
-
wrappers:
|
|
4968
|
-
logic:
|
|
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:
|
|
4972
|
-
fields:
|
|
4973
|
-
logic:
|
|
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:
|
|
5100
|
+
title: z14.never().optional()
|
|
4976
5101
|
});
|
|
4977
5102
|
const RowFieldSchema = ContainerBaseSchema.extend({
|
|
4978
|
-
type:
|
|
4979
|
-
fields:
|
|
5103
|
+
type: z14.literal("row"),
|
|
5104
|
+
fields: z14.array(AnyFieldSchema),
|
|
4980
5105
|
// Container logic - only 'hidden' type allowed (same as pages)
|
|
4981
|
-
logic:
|
|
5106
|
+
logic: z14.array(ContainerLogicSchema).optional()
|
|
4982
5107
|
});
|
|
4983
5108
|
const GroupFieldSchema = ContainerBaseSchema.extend({
|
|
4984
|
-
type:
|
|
4985
|
-
fields:
|
|
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:
|
|
5113
|
+
logic: z14.array(ContainerLogicSchema).optional()
|
|
4989
5114
|
});
|
|
4990
|
-
const ArrayButtonConfigSchema =
|
|
4991
|
-
label:
|
|
4992
|
-
props:
|
|
5115
|
+
const ArrayButtonConfigSchema = z14.object({
|
|
5116
|
+
label: z14.string().optional(),
|
|
5117
|
+
props: z14.record(z14.string(), z14.unknown()).optional()
|
|
4993
5118
|
});
|
|
4994
|
-
const ArrayAllowedChildSchema =
|
|
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:
|
|
5125
|
+
type: z14.literal("array"),
|
|
5001
5126
|
...ContainerValidationShape,
|
|
5002
5127
|
// Full API: explicit item definitions.
|
|
5003
|
-
fields:
|
|
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:
|
|
5131
|
+
template: z14.union([ArrayAllowedChildSchema, z14.array(ArrayAllowedChildSchema)]).optional(),
|
|
5007
5132
|
// Initial values for the array
|
|
5008
|
-
value:
|
|
5133
|
+
value: z14.array(z14.unknown()).optional(),
|
|
5009
5134
|
// Button customization or opt-out (false to disable)
|
|
5010
|
-
addButton:
|
|
5011
|
-
removeButton:
|
|
5012
|
-
logic:
|
|
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:
|
|
5015
|
-
maxLength:
|
|
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:
|
|
5020
|
-
maxItems:
|
|
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
|
|
5080
|
-
var TextElementTypeSchema =
|
|
5081
|
-
var TextPropsSchema =
|
|
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:
|
|
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
|
|
5104
|
-
var HiddenScalarSchema =
|
|
5105
|
-
var HiddenValueSchema =
|
|
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:
|
|
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
|
|
5130
|
-
var SubmitButtonOptionsSchema =
|
|
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:
|
|
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:
|
|
5265
|
+
disableWhileSubmitting: z17.boolean().optional()
|
|
5141
5266
|
});
|
|
5142
|
-
var NextButtonOptionsSchema =
|
|
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:
|
|
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:
|
|
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 =
|
|
5307
|
+
var FormOptionsSchema = z17.object({
|
|
5155
5308
|
/**
|
|
5156
5309
|
* Whether the entire form is disabled.
|
|
5157
5310
|
*/
|
|
5158
|
-
disabled:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
5198
|
-
var SchemaDefinitionSchema =
|
|
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:
|
|
5361
|
+
name: z18.string(),
|
|
5204
5362
|
/**
|
|
5205
5363
|
* Human-readable description of what this schema validates.
|
|
5206
5364
|
*/
|
|
5207
|
-
description:
|
|
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:
|
|
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:
|
|
5382
|
+
subSchemas: z18.array(SchemaApplicationConfigSchema).optional()
|
|
5225
5383
|
});
|
|
5226
|
-
var SchemaDefinitionsArraySchema =
|
|
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
|
|
5387
|
+
import { z as z19 } from "zod";
|
|
5230
5388
|
function createFormConfigSchema(fieldSchema, propsSchema) {
|
|
5231
|
-
const baseSchema =
|
|
5389
|
+
const baseSchema = z19.object({
|
|
5232
5390
|
/**
|
|
5233
5391
|
* Array of field definitions that make up the form.
|
|
5234
5392
|
*/
|
|
5235
|
-
fields:
|
|
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 =
|
|
5276
|
-
fields:
|
|
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
|
|
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
|
|
5287
|
-
var MatFormFieldAppearanceSchema =
|
|
5288
|
-
var SubscriptSizingSchema =
|
|
5289
|
-
var ThemePaletteSchema =
|
|
5290
|
-
var LabelPositionSchema =
|
|
5291
|
-
var MatFormFieldPropsSchema =
|
|
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 =
|
|
5463
|
+
var RipplePropsSchema = z20.object({
|
|
5306
5464
|
/**
|
|
5307
5465
|
* Whether to disable the ripple effect.
|
|
5308
5466
|
*/
|
|
5309
|
-
disableRipple:
|
|
5467
|
+
disableRipple: z20.boolean().optional()
|
|
5310
5468
|
});
|
|
5311
|
-
var ColorPropsSchema =
|
|
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
|
|
5320
|
-
var MatInputTypeSchema =
|
|
5321
|
-
var MatInputPropsSchema =
|
|
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:
|
|
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
|
|
5350
|
-
var TextareaResizeSchema =
|
|
5351
|
-
var MatTextareaPropsSchema =
|
|
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:
|
|
5517
|
+
rows: z22.number().positive().optional(),
|
|
5360
5518
|
/**
|
|
5361
5519
|
* Number of visible text columns.
|
|
5362
5520
|
*/
|
|
5363
|
-
cols:
|
|
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:
|
|
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
|
|
5388
|
-
var MatSelectPropsSchema =
|
|
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:
|
|
5558
|
+
multiple: z23.boolean().optional(),
|
|
5401
5559
|
/**
|
|
5402
5560
|
* Maximum height of the select panel (CSS value).
|
|
5403
5561
|
*/
|
|
5404
|
-
panelMaxHeight:
|
|
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
|
|
5421
|
-
var MatCheckboxPropsSchema =
|
|
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:
|
|
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:
|
|
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
|
|
5446
|
-
var MatRadioPropsSchema =
|
|
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:
|
|
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
|
|
5467
|
-
var MatMultiCheckboxPropsSchema =
|
|
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:
|
|
5633
|
+
disableRipple: z26.boolean().optional(),
|
|
5476
5634
|
/**
|
|
5477
5635
|
* Tab index for keyboard navigation.
|
|
5478
5636
|
*/
|
|
5479
|
-
tabIndex:
|
|
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
|
|
5492
|
-
var MatTogglePropsSchema =
|
|
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:
|
|
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:
|
|
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
|
|
5521
|
-
var MatSliderPropsSchema =
|
|
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:
|
|
5696
|
+
thumbLabel: z28.boolean().optional(),
|
|
5539
5697
|
/**
|
|
5540
5698
|
* Whether to show the thumb label with the current value.
|
|
5541
5699
|
*/
|
|
5542
|
-
showThumbLabel:
|
|
5700
|
+
showThumbLabel: z28.boolean().optional(),
|
|
5543
5701
|
/**
|
|
5544
5702
|
* Interval for tick marks. 'auto' spaces them automatically.
|
|
5545
5703
|
*/
|
|
5546
|
-
tickInterval:
|
|
5704
|
+
tickInterval: z28.union([z28.number().positive(), z28.literal("auto")]).optional(),
|
|
5547
5705
|
/**
|
|
5548
5706
|
* Step increment for the slider.
|
|
5549
5707
|
*/
|
|
5550
|
-
step:
|
|
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
|
|
5555
|
-
var DatepickerStartViewSchema =
|
|
5556
|
-
var MatDatepickerPropsSchema =
|
|
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:
|
|
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:
|
|
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
|
|
5593
|
-
var ButtonTypeSchema =
|
|
5594
|
-
var MatButtonPropsSchema =
|
|
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
|
|
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:
|
|
5612
|
-
nullable:
|
|
5769
|
+
type: z31.literal("input"),
|
|
5770
|
+
nullable: z31.boolean().optional(),
|
|
5613
5771
|
/**
|
|
5614
5772
|
* Initial value for the input.
|
|
5615
5773
|
*/
|
|
5616
|
-
value:
|
|
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
|
|
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:
|
|
5635
|
-
nullable:
|
|
5792
|
+
type: z32.literal("textarea"),
|
|
5793
|
+
nullable: z32.boolean().optional(),
|
|
5636
5794
|
/**
|
|
5637
5795
|
* Initial value for the textarea.
|
|
5638
5796
|
*/
|
|
5639
|
-
value:
|
|
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
|
|
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:
|
|
5658
|
-
nullable:
|
|
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:
|
|
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
|
|
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:
|
|
5843
|
+
type: z34.literal("checkbox"),
|
|
5686
5844
|
/**
|
|
5687
5845
|
* Initial checked state.
|
|
5688
5846
|
*/
|
|
5689
|
-
value:
|
|
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
|
|
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:
|
|
5707
|
-
nullable:
|
|
5864
|
+
type: z35.literal("radio"),
|
|
5865
|
+
nullable: z35.boolean().optional(),
|
|
5708
5866
|
/**
|
|
5709
5867
|
* Initial selected value.
|
|
5710
5868
|
*/
|
|
5711
|
-
value:
|
|
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
|
|
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:
|
|
5734
|
-
nullable:
|
|
5891
|
+
type: z36.literal("multi-checkbox"),
|
|
5892
|
+
nullable: z36.boolean().optional(),
|
|
5735
5893
|
/**
|
|
5736
5894
|
* Initial selected values (array).
|
|
5737
5895
|
*/
|
|
5738
|
-
value:
|
|
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
|
|
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:
|
|
5918
|
+
type: z37.literal("toggle"),
|
|
5761
5919
|
/**
|
|
5762
5920
|
* Initial toggle state.
|
|
5763
5921
|
*/
|
|
5764
|
-
value:
|
|
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
|
|
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:
|
|
5782
|
-
nullable:
|
|
5939
|
+
type: z38.literal("slider"),
|
|
5940
|
+
nullable: z38.boolean().optional(),
|
|
5783
5941
|
/**
|
|
5784
5942
|
* Initial slider value.
|
|
5785
5943
|
*/
|
|
5786
|
-
value:
|
|
5944
|
+
value: z38.number().nullable().optional(),
|
|
5787
5945
|
/**
|
|
5788
5946
|
* Minimum slider value.
|
|
5789
5947
|
*/
|
|
5790
|
-
minValue:
|
|
5948
|
+
minValue: z38.number().optional(),
|
|
5791
5949
|
/**
|
|
5792
5950
|
* Maximum slider value.
|
|
5793
5951
|
*/
|
|
5794
|
-
maxValue:
|
|
5952
|
+
maxValue: z38.number().optional(),
|
|
5795
5953
|
/**
|
|
5796
5954
|
* Step increment.
|
|
5797
5955
|
*/
|
|
5798
|
-
step:
|
|
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
|
|
5812
|
-
var DateValueSchema =
|
|
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:
|
|
5818
|
-
nullable:
|
|
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
|
|
5848
|
-
|
|
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:
|
|
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:
|
|
6023
|
+
event: z41.string().optional(),
|
|
5859
6024
|
/**
|
|
5860
6025
|
* Arguments passed to the event constructor.
|
|
5861
6026
|
*/
|
|
5862
|
-
eventArgs:
|
|
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:
|
|
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:
|
|
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:
|
|
6048
|
+
type: z41.literal("previous"),
|
|
5884
6049
|
props: MatButtonPropsSchema.optional()
|
|
5885
6050
|
});
|
|
5886
6051
|
var MatAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
|
|
5887
|
-
|
|
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:
|
|
6062
|
+
arrayKey: z41.string().optional(),
|
|
5893
6063
|
props: MatButtonPropsSchema.optional()
|
|
5894
6064
|
});
|
|
5895
6065
|
var MatRemoveArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
|
|
5896
|
-
type:
|
|
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:
|
|
6071
|
+
arrayKey: z41.string().optional(),
|
|
5902
6072
|
props: MatButtonPropsSchema.optional()
|
|
5903
6073
|
});
|
|
5904
6074
|
var MatPrependArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
|
|
5905
|
-
|
|
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:
|
|
6085
|
+
arrayKey: z41.string().optional(),
|
|
5911
6086
|
props: MatButtonPropsSchema.optional()
|
|
5912
6087
|
});
|
|
5913
6088
|
var MatInsertArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
|
|
5914
|
-
|
|
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:
|
|
6099
|
+
arrayKey: z41.string().optional(),
|
|
5920
6100
|
/**
|
|
5921
6101
|
* Index at which to insert the new item.
|
|
5922
6102
|
*/
|
|
5923
|
-
index:
|
|
6103
|
+
index: z41.number(),
|
|
5924
6104
|
props: MatButtonPropsSchema.optional()
|
|
5925
6105
|
});
|
|
5926
6106
|
var MatPopArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
|
|
5927
|
-
type:
|
|
6107
|
+
type: z41.literal("pop-array-item"),
|
|
5928
6108
|
/**
|
|
5929
6109
|
* Key of the array field to pop items from.
|
|
5930
6110
|
*/
|
|
5931
|
-
arrayKey:
|
|
6111
|
+
arrayKey: z41.string(),
|
|
5932
6112
|
props: MatButtonPropsSchema.optional()
|
|
5933
6113
|
});
|
|
5934
6114
|
var MatShiftArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
|
|
5935
|
-
type:
|
|
6115
|
+
type: z41.literal("shift-array-item"),
|
|
5936
6116
|
/**
|
|
5937
6117
|
* Key of the array field to shift items from.
|
|
5938
6118
|
*/
|
|
5939
|
-
arrayKey:
|
|
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
|
|
5945
|
-
var MatLeafFieldSchema =
|
|
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
|
|
5984
|
-
var MatFormDefaultPropsSchema =
|
|
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
|
|
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
|
|
6005
|
-
var BsSizeSchema =
|
|
6006
|
-
var BsButtonVariantSchema =
|
|
6007
|
-
var BsFormFieldPropsSchema =
|
|
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:
|
|
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:
|
|
6197
|
+
type: z45.enum(["text", "email", "password", "number", "tel", "url"]).optional(),
|
|
6018
6198
|
placeholder: DynamicTextSchema.optional(),
|
|
6019
|
-
plaintext:
|
|
6199
|
+
plaintext: z45.boolean().optional()
|
|
6020
6200
|
});
|
|
6021
6201
|
var BsTextareaPropsSchema = BsFormFieldPropsSchema.extend({
|
|
6022
|
-
rows:
|
|
6202
|
+
rows: z45.number().positive().optional(),
|
|
6023
6203
|
placeholder: DynamicTextSchema.optional()
|
|
6024
6204
|
});
|
|
6025
6205
|
var BsSelectPropsSchema = BsFormFieldPropsSchema.extend({
|
|
6026
|
-
multiple:
|
|
6027
|
-
htmlSize:
|
|
6206
|
+
multiple: z45.boolean().optional(),
|
|
6207
|
+
htmlSize: z45.number().positive().optional(),
|
|
6028
6208
|
placeholder: DynamicTextSchema.optional()
|
|
6029
6209
|
});
|
|
6030
|
-
var BsCheckboxPropsSchema =
|
|
6031
|
-
switch:
|
|
6032
|
-
inline:
|
|
6033
|
-
reverse:
|
|
6034
|
-
indeterminate:
|
|
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 =
|
|
6038
|
-
inline:
|
|
6039
|
-
reverse:
|
|
6040
|
-
buttonGroup:
|
|
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 =
|
|
6045
|
-
switch:
|
|
6046
|
-
inline:
|
|
6047
|
-
reverse:
|
|
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 =
|
|
6230
|
+
var BsTogglePropsSchema = z45.object({
|
|
6051
6231
|
size: BsSizeSchema.optional(),
|
|
6052
|
-
reverse:
|
|
6053
|
-
inline:
|
|
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:
|
|
6058
|
-
displayMonths:
|
|
6059
|
-
navigation:
|
|
6060
|
-
outsideDays:
|
|
6061
|
-
showWeekNumbers:
|
|
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 =
|
|
6065
|
-
showValue:
|
|
6066
|
-
valuePrefix:
|
|
6067
|
-
valueSuffix:
|
|
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:
|
|
6070
|
-
max:
|
|
6071
|
-
step:
|
|
6249
|
+
min: z45.number().optional(),
|
|
6250
|
+
max: z45.number().optional(),
|
|
6251
|
+
step: z45.number().positive().optional()
|
|
6072
6252
|
});
|
|
6073
|
-
var BsButtonPropsSchema =
|
|
6253
|
+
var BsButtonPropsSchema = z45.object({
|
|
6074
6254
|
variant: BsButtonVariantSchema.optional(),
|
|
6075
|
-
outline:
|
|
6255
|
+
outline: z45.boolean().optional(),
|
|
6076
6256
|
size: BsSizeSchema.optional(),
|
|
6077
|
-
block:
|
|
6078
|
-
active:
|
|
6079
|
-
type:
|
|
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
|
|
6263
|
+
import { z as z46 } from "zod";
|
|
6084
6264
|
var BsValueFieldBase = BaseFieldDefSchema.merge(FieldWithValidationSchema);
|
|
6085
6265
|
var BsInputFieldSchemaObject = BsValueFieldBase.extend({
|
|
6086
|
-
type:
|
|
6087
|
-
nullable:
|
|
6088
|
-
value:
|
|
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:
|
|
6095
|
-
nullable:
|
|
6096
|
-
value:
|
|
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:
|
|
6103
|
-
nullable:
|
|
6104
|
-
value:
|
|
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:
|
|
6113
|
-
value:
|
|
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:
|
|
6119
|
-
nullable:
|
|
6120
|
-
value:
|
|
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:
|
|
6128
|
-
nullable:
|
|
6129
|
-
value:
|
|
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:
|
|
6137
|
-
value:
|
|
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:
|
|
6143
|
-
nullable:
|
|
6144
|
-
value:
|
|
6145
|
-
minDate:
|
|
6146
|
-
maxDate:
|
|
6147
|
-
startAt:
|
|
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:
|
|
6154
|
-
nullable:
|
|
6155
|
-
value:
|
|
6156
|
-
minValue:
|
|
6157
|
-
maxValue:
|
|
6158
|
-
step:
|
|
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:
|
|
6165
|
-
event:
|
|
6166
|
-
eventArgs:
|
|
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:
|
|
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:
|
|
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:
|
|
6361
|
+
type: z46.literal("previous"),
|
|
6182
6362
|
props: BsButtonPropsSchema.optional()
|
|
6183
6363
|
});
|
|
6184
6364
|
var BsAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
|
|
6185
|
-
|
|
6186
|
-
|
|
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:
|
|
6191
|
-
arrayKey:
|
|
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
|
-
|
|
6196
|
-
|
|
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
|
-
|
|
6201
|
-
|
|
6202
|
-
|
|
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:
|
|
6207
|
-
arrayKey:
|
|
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:
|
|
6212
|
-
arrayKey:
|
|
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
|
|
6218
|
-
var BsLeafFieldSchema =
|
|
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
|
|
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 =
|
|
6447
|
+
var BsFormDefaultPropsSchema = z48.object({
|
|
6253
6448
|
size: BsSizeSchema.optional(),
|
|
6254
|
-
floatingLabel:
|
|
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
|
|
6260
|
-
var PrimeSeveritySchema =
|
|
6261
|
-
var PrimeCommonPropsSchema =
|
|
6262
|
-
styleClass:
|
|
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:
|
|
6461
|
+
type: z49.enum(["text", "email", "password", "number", "tel", "url"]).optional(),
|
|
6267
6462
|
placeholder: DynamicTextSchema.optional(),
|
|
6268
|
-
size:
|
|
6269
|
-
variant:
|
|
6463
|
+
size: z49.enum(["small", "large"]).optional(),
|
|
6464
|
+
variant: z49.enum(["outlined", "filled"]).optional()
|
|
6270
6465
|
});
|
|
6271
6466
|
var PrimeCheckboxPropsSchema = PrimeCommonPropsSchema.extend({
|
|
6272
|
-
binary:
|
|
6273
|
-
trueValue:
|
|
6274
|
-
falseValue:
|
|
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:
|
|
6472
|
+
name: z49.string().optional()
|
|
6278
6473
|
});
|
|
6279
6474
|
var PrimeSelectPropsSchema = PrimeCommonPropsSchema.extend({
|
|
6280
|
-
multiple:
|
|
6281
|
-
filter:
|
|
6475
|
+
multiple: z49.boolean().optional(),
|
|
6476
|
+
filter: z49.boolean().optional(),
|
|
6282
6477
|
placeholder: DynamicTextSchema.optional(),
|
|
6283
|
-
showClear:
|
|
6478
|
+
showClear: z49.boolean().optional()
|
|
6284
6479
|
});
|
|
6285
6480
|
var PrimeMultiCheckboxPropsSchema = PrimeCommonPropsSchema;
|
|
6286
6481
|
var PrimeDatepickerPropsSchema = PrimeCommonPropsSchema.extend({
|
|
6287
|
-
dateFormat:
|
|
6288
|
-
inline:
|
|
6289
|
-
showIcon:
|
|
6290
|
-
showButtonBar:
|
|
6291
|
-
selectionMode:
|
|
6292
|
-
touchUI:
|
|
6293
|
-
view:
|
|
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:
|
|
6298
|
-
autoResize:
|
|
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:
|
|
6303
|
-
max:
|
|
6304
|
-
step:
|
|
6305
|
-
range:
|
|
6306
|
-
orientation:
|
|
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 =
|
|
6504
|
+
var PrimeButtonPropsSchema = z49.object({
|
|
6310
6505
|
severity: PrimeSeveritySchema.optional(),
|
|
6311
|
-
text:
|
|
6312
|
-
outlined:
|
|
6313
|
-
raised:
|
|
6314
|
-
rounded:
|
|
6315
|
-
icon:
|
|
6316
|
-
iconPos:
|
|
6317
|
-
type:
|
|
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
|
|
6516
|
+
import { z as z50 } from "zod";
|
|
6322
6517
|
var PrimeValueFieldBase = BaseFieldDefSchema.merge(FieldWithValidationSchema);
|
|
6323
6518
|
var PrimeInputFieldSchemaObject = PrimeValueFieldBase.extend({
|
|
6324
|
-
type:
|
|
6325
|
-
nullable:
|
|
6326
|
-
value:
|
|
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:
|
|
6333
|
-
value:
|
|
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:
|
|
6339
|
-
nullable:
|
|
6340
|
-
value:
|
|
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:
|
|
6348
|
-
nullable:
|
|
6349
|
-
value:
|
|
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:
|
|
6357
|
-
nullable:
|
|
6358
|
-
value:
|
|
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:
|
|
6366
|
-
nullable:
|
|
6367
|
-
value:
|
|
6368
|
-
minDate:
|
|
6369
|
-
maxDate:
|
|
6370
|
-
startAt:
|
|
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:
|
|
6377
|
-
nullable:
|
|
6378
|
-
value:
|
|
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:
|
|
6385
|
-
nullable:
|
|
6386
|
-
value:
|
|
6387
|
-
minValue:
|
|
6388
|
-
maxValue:
|
|
6389
|
-
step:
|
|
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:
|
|
6396
|
-
value:
|
|
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:
|
|
6402
|
-
event:
|
|
6403
|
-
eventArgs:
|
|
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:
|
|
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:
|
|
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:
|
|
6613
|
+
type: z50.literal("previous"),
|
|
6419
6614
|
props: PrimeButtonPropsSchema.optional()
|
|
6420
6615
|
});
|
|
6421
6616
|
var PrimeAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
|
|
6422
|
-
|
|
6423
|
-
|
|
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:
|
|
6428
|
-
arrayKey:
|
|
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
|
-
|
|
6433
|
-
|
|
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
|
-
|
|
6438
|
-
|
|
6439
|
-
|
|
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:
|
|
6444
|
-
arrayKey:
|
|
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:
|
|
6449
|
-
arrayKey:
|
|
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
|
|
6455
|
-
var PrimeLeafFieldSchema =
|
|
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
|
|
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 =
|
|
6490
|
-
styleClass:
|
|
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
|
|
6496
|
-
var IonicColorSchema =
|
|
6497
|
-
var IonicLabelPlacementSchema =
|
|
6498
|
-
var IonicJustifySchema =
|
|
6499
|
-
var IonicFillSchema =
|
|
6500
|
-
var IonicInputPropsSchema =
|
|
6501
|
-
fill:
|
|
6502
|
-
shape:
|
|
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:
|
|
6508
|
-
clearInput:
|
|
6509
|
-
type:
|
|
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 =
|
|
6513
|
-
labelPlacement:
|
|
6722
|
+
var IonicCheckboxPropsSchema = z53.object({
|
|
6723
|
+
labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
|
|
6514
6724
|
justify: IonicJustifySchema.optional(),
|
|
6515
|
-
color:
|
|
6516
|
-
indeterminate:
|
|
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 =
|
|
6520
|
-
labelPlacement:
|
|
6729
|
+
var IonicRadioPropsSchema = z53.object({
|
|
6730
|
+
labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
|
|
6521
6731
|
justify: IonicJustifySchema.optional(),
|
|
6522
|
-
color:
|
|
6732
|
+
color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
|
|
6523
6733
|
hint: DynamicTextSchema.optional()
|
|
6524
6734
|
});
|
|
6525
|
-
var IonicTogglePropsSchema =
|
|
6526
|
-
labelPlacement:
|
|
6735
|
+
var IonicTogglePropsSchema = z53.object({
|
|
6736
|
+
labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
|
|
6527
6737
|
justify: IonicJustifySchema.optional(),
|
|
6528
|
-
color:
|
|
6529
|
-
enableOnOffLabels:
|
|
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 =
|
|
6533
|
-
min:
|
|
6534
|
-
max:
|
|
6535
|
-
step:
|
|
6536
|
-
dualKnobs:
|
|
6537
|
-
pin:
|
|
6538
|
-
ticks:
|
|
6539
|
-
snaps:
|
|
6540
|
-
color:
|
|
6541
|
-
labelPlacement:
|
|
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 =
|
|
6545
|
-
presentation:
|
|
6546
|
-
multiple:
|
|
6547
|
-
preferWheel:
|
|
6548
|
-
showDefaultButtons:
|
|
6549
|
-
showDefaultTitle:
|
|
6550
|
-
showDefaultTimeLabel:
|
|
6551
|
-
showClearButton:
|
|
6552
|
-
doneText:
|
|
6553
|
-
cancelText:
|
|
6554
|
-
size:
|
|
6555
|
-
color:
|
|
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 =
|
|
6560
|
-
multiple:
|
|
6561
|
-
interface:
|
|
6562
|
-
cancelText:
|
|
6563
|
-
okText:
|
|
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:
|
|
6566
|
-
shape:
|
|
6775
|
+
fill: z53.enum(["solid", "outline"]).optional(),
|
|
6776
|
+
shape: z53.literal("round").optional(),
|
|
6567
6777
|
labelPlacement: IonicLabelPlacementSchema.optional(),
|
|
6568
|
-
color:
|
|
6778
|
+
color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
|
|
6569
6779
|
hint: DynamicTextSchema.optional()
|
|
6570
6780
|
});
|
|
6571
|
-
var IonicTextareaPropsSchema =
|
|
6572
|
-
rows:
|
|
6573
|
-
autoGrow:
|
|
6574
|
-
counter:
|
|
6575
|
-
fill:
|
|
6576
|
-
shape:
|
|
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 =
|
|
6584
|
-
labelPlacement:
|
|
6793
|
+
var IonicMultiCheckboxPropsSchema = z53.object({
|
|
6794
|
+
labelPlacement: z53.enum(["start", "end", "fixed", "stacked"]).optional(),
|
|
6585
6795
|
justify: IonicJustifySchema.optional(),
|
|
6586
|
-
color:
|
|
6796
|
+
color: z53.enum(["primary", "secondary", "tertiary", "success", "warning", "danger"]).optional(),
|
|
6587
6797
|
hint: DynamicTextSchema.optional()
|
|
6588
6798
|
});
|
|
6589
|
-
var IonicButtonPropsSchema =
|
|
6590
|
-
expand:
|
|
6799
|
+
var IonicButtonPropsSchema = z53.object({
|
|
6800
|
+
expand: z53.enum(["full", "block"]).optional(),
|
|
6591
6801
|
fill: IonicFillSchema.optional(),
|
|
6592
|
-
shape:
|
|
6593
|
-
size:
|
|
6802
|
+
shape: z53.literal("round").optional(),
|
|
6803
|
+
size: z53.enum(["small", "default", "large"]).optional(),
|
|
6594
6804
|
color: IonicColorSchema.optional(),
|
|
6595
|
-
strong:
|
|
6596
|
-
type:
|
|
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
|
|
6810
|
+
import { z as z54 } from "zod";
|
|
6601
6811
|
var IonicValueFieldBase = BaseFieldDefSchema.merge(FieldWithValidationSchema);
|
|
6602
6812
|
var IonicInputFieldSchemaObject = IonicValueFieldBase.extend({
|
|
6603
|
-
type:
|
|
6604
|
-
nullable:
|
|
6605
|
-
value:
|
|
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:
|
|
6612
|
-
value:
|
|
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:
|
|
6618
|
-
nullable:
|
|
6619
|
-
value:
|
|
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:
|
|
6627
|
-
value:
|
|
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:
|
|
6633
|
-
nullable:
|
|
6634
|
-
value:
|
|
6635
|
-
minValue:
|
|
6636
|
-
maxValue:
|
|
6637
|
-
step:
|
|
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:
|
|
6644
|
-
nullable:
|
|
6645
|
-
value:
|
|
6646
|
-
minDate:
|
|
6647
|
-
maxDate:
|
|
6648
|
-
startAt:
|
|
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:
|
|
6655
|
-
nullable:
|
|
6656
|
-
value:
|
|
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:
|
|
6664
|
-
nullable:
|
|
6665
|
-
value:
|
|
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:
|
|
6672
|
-
nullable:
|
|
6673
|
-
value:
|
|
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:
|
|
6681
|
-
event:
|
|
6682
|
-
eventArgs:
|
|
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:
|
|
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:
|
|
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:
|
|
6907
|
+
type: z54.literal("previous"),
|
|
6698
6908
|
props: IonicButtonPropsSchema.optional()
|
|
6699
6909
|
});
|
|
6700
6910
|
var IonicAddArrayItemButtonFieldSchema = BaseFieldDefSchema.extend({
|
|
6701
|
-
|
|
6702
|
-
|
|
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:
|
|
6707
|
-
arrayKey:
|
|
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
|
-
|
|
6712
|
-
|
|
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
|
-
|
|
6717
|
-
|
|
6718
|
-
|
|
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:
|
|
6723
|
-
arrayKey:
|
|
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:
|
|
6728
|
-
arrayKey:
|
|
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
|
|
6734
|
-
var IonicLeafFieldSchema =
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
7125
|
+
import { z as z58 } from "zod";
|
|
6901
7126
|
var MAX_DEPTH = 20;
|
|
6902
7127
|
function collectDiscriminator(schema, into) {
|
|
6903
|
-
if (schema instanceof
|
|
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
|
|
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
|
|
7140
|
+
if (schema instanceof z58.ZodLazy) {
|
|
6916
7141
|
visit(schema.unwrap(), into, depth + 1);
|
|
6917
7142
|
return;
|
|
6918
7143
|
}
|
|
6919
|
-
if (schema instanceof
|
|
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
|
|
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
|
-
|
|
7145
|
-
|
|
7146
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
8040
|
-
|
|
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
|
|
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:
|
|
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:
|
|
11552
|
-
uiIntegration:
|
|
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
|
|
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:
|
|
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:
|
|
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 {
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
14337
|
-
arrays:
|
|
14338
|
-
groups:
|
|
14339
|
-
hidden:
|
|
14340
|
-
fields:
|
|
14341
|
-
uiIntegration:
|
|
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
|
|
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:
|
|
14924
|
+
query: z63.string().describe("Natural language or keywords to search for")
|
|
14545
14925
|
},
|
|
14546
14926
|
async ({ query }) => {
|
|
14547
14927
|
const index = buildIndex();
|