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