@stemy/ngx-dynamic-form 19.5.10 → 19.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/stemy-ngx-dynamic-form.mjs +76 -78
- package/fesm2022/stemy-ngx-dynamic-form.mjs.map +1 -1
- package/ngx-dynamic-form/common-types.d.ts +47 -21
- package/ngx-dynamic-form/components/dynamic-form-alert/dynamic-form-alert.component.d.ts +10 -0
- package/ngx-dynamic-form/ngx-dynamic-form.imports.d.ts +2 -2
- package/ngx-dynamic-form/ngx-dynamic-form.module.d.ts +11 -10
- package/ngx-dynamic-form/services/dynamic-form-schema.service.d.ts +18 -18
- package/ngx-dynamic-form/utils/customizer.d.ts +3 -3
- package/ngx-dynamic-form/utils/internal.d.ts +4 -6
- package/ngx-dynamic-form/utils/misc.d.ts +0 -4
- package/package.json +2 -2
- package/public_api.d.ts +4 -3
|
@@ -324,13 +324,6 @@ function setFieldHooks(field, hooks) {
|
|
|
324
324
|
: hooks[name];
|
|
325
325
|
});
|
|
326
326
|
}
|
|
327
|
-
function additionalFieldValue(field, path) {
|
|
328
|
-
return ObjectUtils.getValue(field.additional, path, null, false);
|
|
329
|
-
}
|
|
330
|
-
function additionalFieldValues(field, values) {
|
|
331
|
-
const additional = field.props?.additional || {};
|
|
332
|
-
setFieldProp(field, "additional", ObjectUtils.assign(additional, values || {}));
|
|
333
|
-
}
|
|
334
327
|
const MIN_INPUT_NUM = -1999999999;
|
|
335
328
|
const MAX_INPUT_NUM = 1999999999;
|
|
336
329
|
const EDITOR_FORMATS = ["php", "json", "html", "css", "scss"];
|
|
@@ -401,15 +394,6 @@ function convertToDate(value) {
|
|
|
401
394
|
function handleConfigs(configs) {
|
|
402
395
|
return Array.isArray(configs) ? configs : [configs];
|
|
403
396
|
}
|
|
404
|
-
function isStringWithVal(val) {
|
|
405
|
-
return typeof val == "string" && val.length > 0;
|
|
406
|
-
}
|
|
407
|
-
function findRefs(property) {
|
|
408
|
-
const refs = Array.isArray(property.allOf)
|
|
409
|
-
? property.allOf.map(o => o.$ref).filter(isStringWithVal)
|
|
410
|
-
: [property.items?.$ref, property.$ref].filter(isStringWithVal);
|
|
411
|
-
return refs.map(t => t.split("/").pop());
|
|
412
|
-
}
|
|
413
397
|
function arrayItemActionToExpression(actionName) {
|
|
414
398
|
return (field) => {
|
|
415
399
|
const action = field.parent?.props?.[actionName];
|
|
@@ -515,7 +499,7 @@ class DynamicFormBuilderService {
|
|
|
515
499
|
group.push(field);
|
|
516
500
|
continue;
|
|
517
501
|
}
|
|
518
|
-
// Otherwise
|
|
502
|
+
// Otherwise, push the fields to the others
|
|
519
503
|
others.push(field);
|
|
520
504
|
}
|
|
521
505
|
// Create a field-set wrapper for each group and concat the other fields to the end
|
|
@@ -529,9 +513,7 @@ class DynamicFormBuilderService {
|
|
|
529
513
|
props: {
|
|
530
514
|
label: this.getLabel(key, key, parent, options),
|
|
531
515
|
hidden: false,
|
|
532
|
-
|
|
533
|
-
className: `dynamic-form-fieldset dynamic-form-fieldset-${id}`
|
|
534
|
-
}
|
|
516
|
+
className: `dynamic-form-fieldset dynamic-form-fieldset-${id}`
|
|
535
517
|
},
|
|
536
518
|
hooks: {},
|
|
537
519
|
expressions: {}
|
|
@@ -578,9 +560,10 @@ class DynamicFormBuilderService {
|
|
|
578
560
|
const type = `${data.type || "select"}`;
|
|
579
561
|
const field = this.createFormField(key, type === "radio" ? type : "select", data, {
|
|
580
562
|
type,
|
|
581
|
-
multiple: data.multiple,
|
|
563
|
+
multiple: data.multiple === true,
|
|
564
|
+
allowEmpty: data.allowEmpty === true,
|
|
582
565
|
groupBy: data.groupBy,
|
|
583
|
-
|
|
566
|
+
invert: data.invert === true
|
|
584
567
|
}, parent, options);
|
|
585
568
|
setFieldHooks(field, {
|
|
586
569
|
onInit: target => {
|
|
@@ -622,7 +605,6 @@ class DynamicFormBuilderService {
|
|
|
622
605
|
useTabs: data.useTabs === true,
|
|
623
606
|
}, parent, options);
|
|
624
607
|
group.defaultValue = {};
|
|
625
|
-
group.wrappers = ["form-group"];
|
|
626
608
|
const result = fields(group);
|
|
627
609
|
const handleGroup = (fieldGroup) => {
|
|
628
610
|
group.fieldGroup = fieldGroup;
|
|
@@ -658,11 +640,7 @@ class DynamicFormBuilderService {
|
|
|
658
640
|
array.fieldArray = {
|
|
659
641
|
wrappers: ["form-group"],
|
|
660
642
|
fieldGroup: items,
|
|
661
|
-
|
|
662
|
-
additional: {
|
|
663
|
-
className: "dynamic-form-field dynamic-form-group",
|
|
664
|
-
}
|
|
665
|
-
},
|
|
643
|
+
className: "dynamic-form-field dynamic-form-group",
|
|
666
644
|
defaultValue: [],
|
|
667
645
|
hooks: {},
|
|
668
646
|
expressions
|
|
@@ -703,7 +681,7 @@ class DynamicFormBuilderService {
|
|
|
703
681
|
options = await Promise.all(options.map(async (option) => {
|
|
704
682
|
const classes = Array.isArray(option.classes) ? option.classes : [`${option.classes}`];
|
|
705
683
|
option = Object.assign({}, option);
|
|
706
|
-
option.className = classes.filter(
|
|
684
|
+
option.className = classes.filter(ObjectUtils.isStringWithValue).join(" ");
|
|
707
685
|
option.label = await this.languages.getTranslation(option.label);
|
|
708
686
|
option.value = option.value ?? option.id;
|
|
709
687
|
option.id = option.id ?? option.value;
|
|
@@ -725,8 +703,13 @@ class DynamicFormBuilderService {
|
|
|
725
703
|
return labelItems.filter(l => l.length > 0).join(".");
|
|
726
704
|
}
|
|
727
705
|
createFormField(key, type, data, props, parent, options) {
|
|
706
|
+
const wrappers = Array.isArray(data.wrappers) ? Array.from(data.wrappers) : [];
|
|
707
|
+
if (type !== "array") {
|
|
708
|
+
wrappers.unshift(!type ? "form-group" : "form-field");
|
|
709
|
+
}
|
|
728
710
|
const field = {
|
|
729
711
|
key,
|
|
712
|
+
wrappers,
|
|
730
713
|
type: data.componentType || type,
|
|
731
714
|
fieldSet: String(data.fieldSet || ""),
|
|
732
715
|
resetOnHide: false,
|
|
@@ -739,13 +722,12 @@ class DynamicFormBuilderService {
|
|
|
739
722
|
label: options.labelCustomizer?.(key, data.label, parent, options.labelPrefix)
|
|
740
723
|
?? this.getLabel(key, data.label, parent, options),
|
|
741
724
|
hideLabel: data.hideLabel === true,
|
|
725
|
+
classes: data.classes || [],
|
|
726
|
+
layout: data.layout || [],
|
|
727
|
+
className: data.className || "",
|
|
742
728
|
hideRequiredMarker: data.hideRequiredMarker === true,
|
|
743
729
|
formCheck: "nolabel",
|
|
744
|
-
labelPosition: "before"
|
|
745
|
-
additional: {
|
|
746
|
-
...(data.additional || {}),
|
|
747
|
-
classes: data.classes || []
|
|
748
|
-
}
|
|
730
|
+
labelPosition: "before"
|
|
749
731
|
},
|
|
750
732
|
modelOptions: {
|
|
751
733
|
updateOn: "change"
|
|
@@ -778,7 +760,8 @@ class DynamicFormBuilderService {
|
|
|
778
760
|
return display;
|
|
779
761
|
},
|
|
780
762
|
valid: target => {
|
|
781
|
-
const
|
|
763
|
+
const control = target.formControl;
|
|
764
|
+
const valid = target.key && control ? control.disabled || control.valid : true;
|
|
782
765
|
if (Array.isArray(target.fieldGroup) && target.fieldGroup.length) {
|
|
783
766
|
return valid && target.fieldGroup.every(f => f.valid);
|
|
784
767
|
}
|
|
@@ -788,7 +771,7 @@ class DynamicFormBuilderService {
|
|
|
788
771
|
if (!target.display) {
|
|
789
772
|
return `dynamic-form-field dynamic-form-hidden`;
|
|
790
773
|
}
|
|
791
|
-
const { classes, className } = target.
|
|
774
|
+
const { classes, layout, className } = target.props || {};
|
|
792
775
|
if (className) {
|
|
793
776
|
return className;
|
|
794
777
|
}
|
|
@@ -796,10 +779,7 @@ class DynamicFormBuilderService {
|
|
|
796
779
|
const typeName = ObjectUtils.isConstructor(type)
|
|
797
780
|
? `${target.type.name}`.toLowerCase().replace("component", "")
|
|
798
781
|
: type;
|
|
799
|
-
return [`dynamic-form-field`, `dynamic-form-field-${target.key}`, `dynamic-form-${typeName}`].concat(Array.isArray(classes) ? classes : [classes || ""]).filter(c => c?.length > 0).join(" ");
|
|
800
|
-
},
|
|
801
|
-
additional: (target) => {
|
|
802
|
-
return target.props?.additional || {};
|
|
782
|
+
return [`dynamic-form-field`, `dynamic-form-field-${target.key}`, `dynamic-form-${typeName}`].concat(Array.isArray(classes) ? classes : [classes || ""], (Array.isArray(layout) ? layout : [layout || ""]).map(layout => `dynamic-form-layout-${layout}`)).filter(c => c?.length > 0).join(" ");
|
|
803
783
|
},
|
|
804
784
|
path: target => {
|
|
805
785
|
const tp = target.parent;
|
|
@@ -853,10 +833,7 @@ class DynamicFormSchemaService {
|
|
|
853
833
|
async getSchema(name) {
|
|
854
834
|
return this.openApi.getSchema(name);
|
|
855
835
|
}
|
|
856
|
-
async getFormFieldsForSchema(
|
|
857
|
-
const schema = await this.getSchema(name);
|
|
858
|
-
if (!schema)
|
|
859
|
-
return [];
|
|
836
|
+
async getFormFieldsForSchema(schema, parent, customizeOrOptions) {
|
|
860
837
|
const options = await toWrapOptions(customizeOrOptions, this.injector, schema);
|
|
861
838
|
const keys = Object.keys(schema.properties || {});
|
|
862
839
|
const fields = [];
|
|
@@ -874,7 +851,7 @@ class DynamicFormSchemaService {
|
|
|
874
851
|
}
|
|
875
852
|
async getFormFieldForProp(property, options, parent) {
|
|
876
853
|
const $enum = property.items?.enum || property.enum;
|
|
877
|
-
if (Array.isArray($enum) ||
|
|
854
|
+
if (Array.isArray($enum) || ObjectUtils.isStringWithValue(property.optionsPath) || ObjectUtils.isStringWithValue(property.endpoint)) {
|
|
878
855
|
return this.getFormSelectConfig($enum, property, options, parent);
|
|
879
856
|
}
|
|
880
857
|
switch (property.type) {
|
|
@@ -891,7 +868,8 @@ class DynamicFormSchemaService {
|
|
|
891
868
|
// if (this.checkIsEditorProperty(property)) {
|
|
892
869
|
// return this.getFormEditorConfig(property, options, parent);
|
|
893
870
|
// }
|
|
894
|
-
|
|
871
|
+
const refs = await this.openApi.getReferences(property, options.schema);
|
|
872
|
+
if (refs.length > 0) {
|
|
895
873
|
return this.getFormGroupConfig(property, options, parent);
|
|
896
874
|
}
|
|
897
875
|
if (property.format == "file" || property.format == "upload") {
|
|
@@ -916,16 +894,21 @@ class DynamicFormSchemaService {
|
|
|
916
894
|
return {
|
|
917
895
|
hidden: property.hidden === true,
|
|
918
896
|
disabled: property.disabled === true,
|
|
897
|
+
label: property.label,
|
|
898
|
+
hideRequiredMarker: property.hideRequiredMarker === true,
|
|
899
|
+
hideLabel: property.hideLabel === true,
|
|
900
|
+
classes: property.classes,
|
|
901
|
+
layout: property.layout,
|
|
919
902
|
serialize: property.serialize === true,
|
|
920
|
-
componentType: property.componentType,
|
|
921
903
|
fieldSet: property.fieldSet,
|
|
922
|
-
|
|
904
|
+
componentType: property.componentType,
|
|
905
|
+
wrappers: property.wrappers,
|
|
923
906
|
validators
|
|
924
907
|
};
|
|
925
908
|
}
|
|
926
909
|
async getFormArrayConfig(property, options, parent) {
|
|
927
910
|
return this.builder.createFormArray(property.id, async (sp) => {
|
|
928
|
-
const subSchemas =
|
|
911
|
+
const subSchemas = await this.openApi.getReferences(property, options.schema);
|
|
929
912
|
if (subSchemas.length > 0) {
|
|
930
913
|
const subModels = await Promise.all(subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options)));
|
|
931
914
|
return mergeFormFields(ObjectUtils.copy(subModels));
|
|
@@ -947,9 +930,9 @@ class DynamicFormSchemaService {
|
|
|
947
930
|
}
|
|
948
931
|
async getFormGroupConfig(property, options, parent) {
|
|
949
932
|
return this.builder.createFormGroup(property.id, async (sp) => {
|
|
950
|
-
const subSchemas =
|
|
951
|
-
const
|
|
952
|
-
return mergeFormFields(
|
|
933
|
+
const subSchemas = await this.openApi.getReferences(property, options.schema);
|
|
934
|
+
const subFields = await Promise.all(subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options)));
|
|
935
|
+
return mergeFormFields(subFields);
|
|
953
936
|
}, {
|
|
954
937
|
...this.getFormFieldData(property, options),
|
|
955
938
|
}, parent, options);
|
|
@@ -998,7 +981,7 @@ class DynamicFormSchemaService {
|
|
|
998
981
|
placeholder: property.placeholder || ""
|
|
999
982
|
}, parent, options);
|
|
1000
983
|
}
|
|
1001
|
-
// getFormEditorConfig(property:
|
|
984
|
+
// getFormEditorConfig(property: OpenApiSchemaProperty, options: ConfigForSchemaWrap): DynamicEditorModelConfig {
|
|
1002
985
|
// const sub = property.type == "array" ? property.items || property : property;
|
|
1003
986
|
// return Object.assign(
|
|
1004
987
|
// this.getFormControlConfig(property, options),
|
|
@@ -1033,6 +1016,7 @@ class DynamicFormSchemaService {
|
|
|
1033
1016
|
type: property.format || "select",
|
|
1034
1017
|
multiple: property.type == "array",
|
|
1035
1018
|
groupBy: property.groupBy,
|
|
1019
|
+
invert: property.invert,
|
|
1036
1020
|
allowEmpty: property.allowEmpty
|
|
1037
1021
|
}, parent, options);
|
|
1038
1022
|
}
|
|
@@ -1058,7 +1042,7 @@ class DynamicFormSchemaService {
|
|
|
1058
1042
|
if (Array.isArray($enum)) {
|
|
1059
1043
|
return this.getFormEnumOptions($enum, property.id, options, field);
|
|
1060
1044
|
}
|
|
1061
|
-
if (
|
|
1045
|
+
if (ObjectUtils.isStringWithValue(property.endpoint)) {
|
|
1062
1046
|
return this.getFormEndpointOptions(property, field);
|
|
1063
1047
|
}
|
|
1064
1048
|
return this.getFormPathOptions(property.optionsPath, field);
|
|
@@ -1080,8 +1064,10 @@ class DynamicFormSchemaService {
|
|
|
1080
1064
|
const endpoint = entries.reduce((res, [key, control]) => {
|
|
1081
1065
|
return this.replaceOptionsEndpoint(res, key, control.value);
|
|
1082
1066
|
}, `${property.endpoint}`);
|
|
1083
|
-
|
|
1084
|
-
|
|
1067
|
+
const data = await this.api.list(endpoint, this.api.makeListParams(1, -1), {
|
|
1068
|
+
cache: this.api.cached(property.cache),
|
|
1069
|
+
read: String(property.responseProperty || "")
|
|
1070
|
+
});
|
|
1085
1071
|
const items = ObjectUtils.isArray(data)
|
|
1086
1072
|
? data
|
|
1087
1073
|
: (ObjectUtils.isArray(data.items) ? data.items : []);
|
|
@@ -1225,7 +1211,7 @@ class DynamicFormService {
|
|
|
1225
1211
|
};
|
|
1226
1212
|
const schema = await this.fs.getSchema(name);
|
|
1227
1213
|
const wrapOptions = await toWrapOptions(customizeOrOptions, this.injector, schema, `"DynamicFormService.${restrictedMethod}" is called from a customizer, which is not allowed. Please use DynamicFormSchemaService instead!`);
|
|
1228
|
-
const fields = await this.fs.getFormFieldsForSchema(
|
|
1214
|
+
const fields = await this.fs.getFormFieldsForSchema(schema, config, wrapOptions);
|
|
1229
1215
|
const fieldGroup = [...fields];
|
|
1230
1216
|
config.fieldGroup = fieldGroup;
|
|
1231
1217
|
// There are no actual fields in the schema, or no schema exists
|
|
@@ -1577,9 +1563,7 @@ class DynamicFormComponent {
|
|
|
1577
1563
|
label: "",
|
|
1578
1564
|
useTabs: this.useTabs(),
|
|
1579
1565
|
hidden: false,
|
|
1580
|
-
|
|
1581
|
-
className: "dynamic-form-root-group"
|
|
1582
|
-
}
|
|
1566
|
+
className: "dynamic-form-root-group"
|
|
1583
1567
|
}, null, options)
|
|
1584
1568
|
];
|
|
1585
1569
|
});
|
|
@@ -1645,7 +1629,7 @@ class DynamicFormArrayComponent extends FieldArrayType {
|
|
|
1645
1629
|
this.currentTab.set(Math.min(this.currentTab(), length - 1));
|
|
1646
1630
|
}
|
|
1647
1631
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormArrayComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1648
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DynamicFormArrayComponent, isStandalone: false, selector: "dynamic-form-array", usesInheritance: true, ngImport: i0, template: "@if (field.display) {\n @if (props.label && props.hideLabel !== true) {\n <label class=\"field-label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n </label>\n }\n <div class=\"field-container\">\n <tabs class=\"form-array-items\" [(value)]=\"currentTab\">\n @for (itemField of field.fieldGroup; track itemField.key; let ix = $index) {\n <ng-template #fieldContent>\n <div class=\"form-array-buttons\">\n @if (itemField.removeItem) {\n <btn icon=\"trash\" (click)=\"removeItem(ix)\"></btn>\n }\n @if (itemField.insertItem) {\n <btn icon=\"plus\" (click)=\"addItem(ix)\"></btn>\n }\n </div>\n <formly-field [field]=\"itemField\"></formly-field>\n </ng-template>\n @if (props.useTabs) {\n <div class=\"form-array-item\"\n [tabsItem]=\"ix\"\n [label]=\"(itemField.formControl.value | getValue : props.tabsLabel) || ix + 1\">\n <ng-container [ngTemplateOutlet]=\"fieldContent\"></ng-container>\n </div>\n } @else {\n <div class=\"form-array-item\">\n <ng-container [ngTemplateOutlet]=\"fieldContent\"></ng-container>\n </div>\n }\n }\n </tabs>\n\n <div class=\"form-array-buttons\">\n @if (props.clearItems) {\n <btn icon=\"trash\" label=\"button.clear-items\" (click)=\"clearItems()\"></btn>\n }\n @if (props.addItem) {\n <btn icon=\"plus\" label=\"button.insert-item\" (click)=\"addItem()\"></btn>\n }\n </div>\n </div>\n}\n", styles: [".form-array-item.hidden-tab{display:none}.form-array-buttons{display:flex;gap:5px;margin-bottom:5px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.TabsItemDirective, selector: "[tabsItem]", inputs: ["tabsItem", "label", "tooltip", "icon", "disabled", "classes"] }, { kind: "component", type: i2.BtnComponent, selector: "btn", inputs: ["label", "tooltip", "icon", "disabled", "type", "size"] }, { kind: "component", type: i2.TabsComponent, selector: "tabs", inputs: ["value", "options", "type", "size"], outputs: ["valueChange"] }, { kind: "component", type: i3.LegacyFormlyField, selector: "formly-field" }, { kind: "pipe", type: i2.GetValuePipe, name: "getValue" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
1632
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DynamicFormArrayComponent, isStandalone: false, selector: "dynamic-form-array", usesInheritance: true, ngImport: i0, template: "@if (field.display) {\n @if (props.label && props.hideLabel !== true) {\n <label class=\"field-label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n </label>\n }\n <div class=\"field-container\">\n <tabs class=\"form-array-items\" [(value)]=\"currentTab\">\n @for (itemField of field.fieldGroup; track itemField.key; let ix = $index) {\n <ng-template #fieldContent>\n <div class=\"form-array-buttons\">\n @if (itemField.removeItem) {\n <btn icon=\"trash\" (click)=\"removeItem(ix)\"></btn>\n }\n @if (itemField.insertItem) {\n <btn icon=\"plus\" (click)=\"addItem(ix)\"></btn>\n }\n </div>\n <formly-field [field]=\"itemField\"></formly-field>\n </ng-template>\n @if (props.useTabs) {\n <div class=\"form-array-item\"\n [tabsItem]=\"ix\"\n [label]=\"(itemField.formControl.value | getValue : props.tabsLabel) || ix + 1\">\n <ng-container [ngTemplateOutlet]=\"fieldContent\"></ng-container>\n </div>\n } @else {\n <div class=\"form-array-item\">\n <ng-container [ngTemplateOutlet]=\"fieldContent\"></ng-container>\n </div>\n }\n }\n </tabs>\n\n <div class=\"form-array-buttons\">\n @if (props.clearItems) {\n <btn icon=\"trash\" label=\"button.clear-items\" (click)=\"clearItems()\"></btn>\n }\n @if (props.addItem) {\n <btn icon=\"plus\" label=\"button.insert-item\" (click)=\"addItem()\"></btn>\n }\n </div>\n </div>\n}\n", styles: [".form-array-item.hidden-tab{display:none}.form-array-buttons{display:flex;gap:5px;margin-bottom:5px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.TabsItemDirective, selector: "[tabsItem]", inputs: ["tabsItem", "label", "tooltip", "icon", "disabled", "classes"] }, { kind: "component", type: i2.BtnComponent, selector: "btn", inputs: ["label", "tooltip", "icon", "disabled", "type", "size"] }, { kind: "component", type: i2.TabsComponent, selector: "tabs", inputs: ["value", "options", "type", "size", "testId", "tabsClass"], outputs: ["valueChange", "selectedChange"] }, { kind: "component", type: i3.LegacyFormlyField, selector: "formly-field" }, { kind: "pipe", type: i2.GetValuePipe, name: "getValue" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
1649
1633
|
}
|
|
1650
1634
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormArrayComponent, decorators: [{
|
|
1651
1635
|
type: Component,
|
|
@@ -1661,6 +1645,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1661
1645
|
args: [{ standalone: false, selector: "dynamic-form-chips", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<chips [formControl]=\"formControl\"\n [type]=\"props.type\"\n [step]=\"props.step\"\n [minLength]=\"props.minLength\"\n [maxLength]=\"props.maxLength\"\n [min]=\"props.min\"\n [max]=\"props.max\"\n [multiple]=\"props.multiple\"\n [formlyAttributes]=\"field\">\n</chips>\n" }]
|
|
1662
1646
|
}] });
|
|
1663
1647
|
|
|
1648
|
+
class DynamicFormUploadComponent extends DynamicFieldType {
|
|
1649
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormUploadComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1650
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormUploadComponent, isStandalone: false, selector: "dynamic-form-upload", usesInheritance: true, ngImport: i0, template: "<upload [formControl]=\"formControl\"\n [multiple]=\"props.multiple\"\n [inline]=\"props.inline\"\n [accept]=\"props.accept\"\n [baseUrl]=\"props.url\"\n [makeUpload]=\"props.createUploadData\"\n [formlyAttributes]=\"field\">\n</upload>\n", dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i2.UploadComponent, selector: "upload", inputs: ["value", "disabled", "inline", "accept", "baseUrl", "message", "multiple", "buttonText", "makeUpload", "preProcess"], outputs: ["onUploaded", "onRemove"] }, { kind: "directive", type: i3.LegacyFormlyAttributes, selector: "[formlyAttributes]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1651
|
+
}
|
|
1652
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormUploadComponent, decorators: [{
|
|
1653
|
+
type: Component,
|
|
1654
|
+
args: [{ standalone: false, selector: "dynamic-form-upload", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<upload [formControl]=\"formControl\"\n [multiple]=\"props.multiple\"\n [inline]=\"props.inline\"\n [accept]=\"props.accept\"\n [baseUrl]=\"props.url\"\n [makeUpload]=\"props.createUploadData\"\n [formlyAttributes]=\"field\">\n</upload>\n" }]
|
|
1655
|
+
}] });
|
|
1656
|
+
|
|
1657
|
+
/**
|
|
1658
|
+
* This is just a test wrapper component
|
|
1659
|
+
*/
|
|
1660
|
+
class DynamicFormAlertComponent extends FieldWrapper {
|
|
1661
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormAlertComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1662
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormAlertComponent, isStandalone: false, selector: "dynamic-form-alert", usesInheritance: true, ngImport: i0, template: "<div class=\"dynamic-form-alert\">\n <ng-container #fieldComponent></ng-container>\n</div>\n", styles: [".dynamic-form-alert{border:2px dashed red;width:100%}\n"], encapsulation: i0.ViewEncapsulation.None });
|
|
1663
|
+
}
|
|
1664
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormAlertComponent, decorators: [{
|
|
1665
|
+
type: Component,
|
|
1666
|
+
args: [{ standalone: false, selector: "dynamic-form-alert", encapsulation: ViewEncapsulation.None, template: "<div class=\"dynamic-form-alert\">\n <ng-container #fieldComponent></ng-container>\n</div>\n", styles: [".dynamic-form-alert{border:2px dashed red;width:100%}\n"] }]
|
|
1667
|
+
}] });
|
|
1668
|
+
|
|
1664
1669
|
class DynamicFormFieldComponent extends FieldWrapper {
|
|
1665
1670
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1666
1671
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DynamicFormFieldComponent, isStandalone: false, selector: "dynamic-form-field", usesInheritance: true, ngImport: i0, template: "@if (props.label && props.hideLabel !== true) {\n <label class=\"field-label\" [for]=\"id\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n @if (props.required && props.hideRequiredMarker !== true) {\n <span class=\"field-required\" aria-hidden=\"true\">*</span>\n }\n </label>\n}\n<div class=\"field-container\">\n <ng-container #fieldComponent></ng-container>\n <div *ngIf=\"showError\" class=\"field-errors invalid-feedback\">\n <formly-validation-message\n [field]=\"field\"\n id=\"{{ id }}-formly-validation-error\"\n role=\"alert\"\n ></formly-validation-message>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LegacyFormlyValidationMessage, selector: "formly-validation-message" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
@@ -1681,32 +1686,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1681
1686
|
|
|
1682
1687
|
class DynamicFormGroupComponent extends FieldWrapper {
|
|
1683
1688
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1684
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DynamicFormGroupComponent, isStandalone: false, selector: "dynamic-form-group", usesInheritance: true, ngImport: i0, template: "@if (field.display) {\n @if (props.label && props.hideLabel !== true) {\n <label class=\"field-label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n </label>\n }\n <tabs class=\"field-container\">\n @for (itemField of field.fieldGroup; track itemField; let ix = $index) {\n @if (itemField.display) {\n @if (props.useTabs && itemField.wrappers | includes: 'form-fieldset') {\n <div class=\"form-fieldset-item\"\n [tabsItem]=\"ix\"\n [classes]=\"['form-fieldset-tab', itemField.valid ? 'valid' : 'invalid']\"\n [label]=\"itemField.props.label\">\n <formly-field [field]=\"itemField\"></formly-field>\n </div>\n } @else {\n <formly-field [field]=\"itemField\"></formly-field>\n }\n }\n }\n </tabs>\n}\n", styles: [".form-fieldset-item.hidden-tab{display:none}.form-fieldset-tab{position:relative;--invalid-bg: rgba(184, 38, 38, 1);--invalid-border: rgba(184, 38, 38, .6);--invalid-color: #ececec;--invalid-box-size: 15px;--invalid-box-pull: -3px}.form-fieldset-tab.invalid>btn .async-target{border:1px solid var(--invalid-border)}.form-fieldset-tab.invalid:after{background:var(--invalid-bg);color:var(--invalid-color);font-size:10px;line-height:var(--invalid-box-size);width:var(--invalid-box-size);height:var(--invalid-box-size);text-align:center;border-radius:5px;content:\"!\";display:block;position:absolute;top:var(--invalid-box-pull);right:var(--invalid-box-pull)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TabsItemDirective, selector: "[tabsItem]", inputs: ["tabsItem", "label", "tooltip", "icon", "disabled", "classes"] }, { kind: "component", type: i2.TabsComponent, selector: "tabs", inputs: ["value", "options", "type", "size"], outputs: ["valueChange"] }, { kind: "component", type: i3.LegacyFormlyField, selector: "formly-field" }, { kind: "pipe", type: i2.IncludesPipe, name: "includes" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
1689
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DynamicFormGroupComponent, isStandalone: false, selector: "dynamic-form-group", usesInheritance: true, ngImport: i0, template: "@if (field.display) {\n @if (props.label && props.hideLabel !== true) {\n <label class=\"field-label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n </label>\n }\n <tabs class=\"field-container\">\n @for (itemField of field.fieldGroup; track itemField; let ix = $index) {\n @if (itemField.display) {\n @if (props.useTabs && itemField.wrappers | includes: 'form-fieldset') {\n <div class=\"form-fieldset-item\"\n [tabsItem]=\"ix\"\n [classes]=\"['form-fieldset-tab', itemField.valid ? 'valid' : 'invalid']\"\n [label]=\"itemField.props.label\">\n <formly-field [field]=\"itemField\"></formly-field>\n </div>\n } @else {\n <formly-field [field]=\"itemField\"></formly-field>\n }\n }\n }\n </tabs>\n}\n", styles: [".form-fieldset-item.hidden-tab{display:none}.form-fieldset-tab{position:relative;--invalid-bg: rgba(184, 38, 38, 1);--invalid-border: rgba(184, 38, 38, .6);--invalid-color: #ececec;--invalid-box-size: 15px;--invalid-box-pull: -3px}.form-fieldset-tab.invalid>btn .async-target{border:1px solid var(--invalid-border)}.form-fieldset-tab.invalid:after{background:var(--invalid-bg);color:var(--invalid-color);font-size:10px;line-height:var(--invalid-box-size);width:var(--invalid-box-size);height:var(--invalid-box-size);text-align:center;border-radius:5px;content:\"!\";display:block;position:absolute;top:var(--invalid-box-pull);right:var(--invalid-box-pull)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TabsItemDirective, selector: "[tabsItem]", inputs: ["tabsItem", "label", "tooltip", "icon", "disabled", "classes"] }, { kind: "component", type: i2.TabsComponent, selector: "tabs", inputs: ["value", "options", "type", "size", "testId", "tabsClass"], outputs: ["valueChange", "selectedChange"] }, { kind: "component", type: i3.LegacyFormlyField, selector: "formly-field" }, { kind: "pipe", type: i2.IncludesPipe, name: "includes" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
1685
1690
|
}
|
|
1686
1691
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormGroupComponent, decorators: [{
|
|
1687
1692
|
type: Component,
|
|
1688
1693
|
args: [{ standalone: false, selector: "dynamic-form-group", encapsulation: ViewEncapsulation.None, template: "@if (field.display) {\n @if (props.label && props.hideLabel !== true) {\n <label class=\"field-label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n </label>\n }\n <tabs class=\"field-container\">\n @for (itemField of field.fieldGroup; track itemField; let ix = $index) {\n @if (itemField.display) {\n @if (props.useTabs && itemField.wrappers | includes: 'form-fieldset') {\n <div class=\"form-fieldset-item\"\n [tabsItem]=\"ix\"\n [classes]=\"['form-fieldset-tab', itemField.valid ? 'valid' : 'invalid']\"\n [label]=\"itemField.props.label\">\n <formly-field [field]=\"itemField\"></formly-field>\n </div>\n } @else {\n <formly-field [field]=\"itemField\"></formly-field>\n }\n }\n }\n </tabs>\n}\n", styles: [".form-fieldset-item.hidden-tab{display:none}.form-fieldset-tab{position:relative;--invalid-bg: rgba(184, 38, 38, 1);--invalid-border: rgba(184, 38, 38, .6);--invalid-color: #ececec;--invalid-box-size: 15px;--invalid-box-pull: -3px}.form-fieldset-tab.invalid>btn .async-target{border:1px solid var(--invalid-border)}.form-fieldset-tab.invalid:after{background:var(--invalid-bg);color:var(--invalid-color);font-size:10px;line-height:var(--invalid-box-size);width:var(--invalid-box-size);height:var(--invalid-box-size);text-align:center;border-radius:5px;content:\"!\";display:block;position:absolute;top:var(--invalid-box-pull);right:var(--invalid-box-pull)}\n"] }]
|
|
1689
1694
|
}] });
|
|
1690
1695
|
|
|
1691
|
-
class DynamicFormUploadComponent extends DynamicFieldType {
|
|
1692
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormUploadComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1693
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormUploadComponent, isStandalone: false, selector: "dynamic-form-upload", usesInheritance: true, ngImport: i0, template: "<upload [formControl]=\"formControl\"\n [multiple]=\"props.multiple\"\n [inline]=\"props.inline\"\n [accept]=\"props.accept\"\n [baseUrl]=\"props.url\"\n [makeUpload]=\"props.createUploadData\"\n [formlyAttributes]=\"field\">\n</upload>\n", dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i2.UploadComponent, selector: "upload", inputs: ["value", "disabled", "inline", "accept", "baseUrl", "message", "multiple", "buttonText", "makeUpload", "preProcess"], outputs: ["onUploaded", "onRemove"] }, { kind: "directive", type: i3.LegacyFormlyAttributes, selector: "[formlyAttributes]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1694
|
-
}
|
|
1695
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormUploadComponent, decorators: [{
|
|
1696
|
-
type: Component,
|
|
1697
|
-
args: [{ standalone: false, selector: "dynamic-form-upload", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<upload [formControl]=\"formControl\"\n [multiple]=\"props.multiple\"\n [inline]=\"props.inline\"\n [accept]=\"props.accept\"\n [baseUrl]=\"props.url\"\n [makeUpload]=\"props.createUploadData\"\n [formlyAttributes]=\"field\">\n</upload>\n" }]
|
|
1698
|
-
}] });
|
|
1699
|
-
|
|
1700
1696
|
// --- Components ---
|
|
1701
1697
|
const components = [
|
|
1702
1698
|
DynamicFieldType,
|
|
1703
1699
|
DynamicFormComponent,
|
|
1704
1700
|
DynamicFormArrayComponent,
|
|
1705
1701
|
DynamicFormChipsComponent,
|
|
1702
|
+
DynamicFormUploadComponent,
|
|
1703
|
+
DynamicFormAlertComponent,
|
|
1706
1704
|
DynamicFormFieldComponent,
|
|
1707
1705
|
DynamicFormFieldsetComponent,
|
|
1708
1706
|
DynamicFormGroupComponent,
|
|
1709
|
-
DynamicFormUploadComponent
|
|
1710
1707
|
];
|
|
1711
1708
|
// --- Directives ---
|
|
1712
1709
|
const directives = [
|
|
@@ -1722,13 +1719,14 @@ class NgxDynamicFormModule {
|
|
|
1722
1719
|
provideFormlyCore({
|
|
1723
1720
|
types: [
|
|
1724
1721
|
{ name: "array", component: DynamicFormArrayComponent },
|
|
1725
|
-
{ name: "chips", component: DynamicFormChipsComponent
|
|
1726
|
-
{ name: "upload", component: DynamicFormUploadComponent
|
|
1722
|
+
{ name: "chips", component: DynamicFormChipsComponent },
|
|
1723
|
+
{ name: "upload", component: DynamicFormUploadComponent }
|
|
1727
1724
|
],
|
|
1728
1725
|
wrappers: [
|
|
1726
|
+
{ name: "form-alert", component: DynamicFormAlertComponent },
|
|
1729
1727
|
{ name: "form-field", component: DynamicFormFieldComponent },
|
|
1730
1728
|
{ name: "form-fieldset", component: DynamicFormFieldsetComponent },
|
|
1731
|
-
{ name: "form-group", component: DynamicFormGroupComponent }
|
|
1729
|
+
{ name: "form-group", component: DynamicFormGroupComponent },
|
|
1732
1730
|
],
|
|
1733
1731
|
extras: {
|
|
1734
1732
|
resetFieldOnHide: false,
|
|
@@ -1751,11 +1749,11 @@ class NgxDynamicFormModule {
|
|
|
1751
1749
|
return makeEnvironmentProviders(NgxDynamicFormModule.getProviders(config));
|
|
1752
1750
|
}
|
|
1753
1751
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NgxDynamicFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1754
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: NgxDynamicFormModule, declarations: [DynamicFieldType, DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent,
|
|
1752
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: NgxDynamicFormModule, declarations: [DynamicFieldType, DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormUploadComponent, DynamicFormAlertComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, AsyncSubmitDirective], imports: [CommonModule,
|
|
1755
1753
|
FormsModule,
|
|
1756
1754
|
ReactiveFormsModule,
|
|
1757
1755
|
NgxUtilsModule,
|
|
1758
|
-
FormlyModule], exports: [DynamicFieldType, DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent,
|
|
1756
|
+
FormlyModule], exports: [DynamicFieldType, DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormUploadComponent, DynamicFormAlertComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, AsyncSubmitDirective, FormsModule,
|
|
1759
1757
|
ReactiveFormsModule,
|
|
1760
1758
|
NgxUtilsModule,
|
|
1761
1759
|
FormlyModule] });
|
|
@@ -1804,5 +1802,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1804
1802
|
* Generated bundle index. Do not edit.
|
|
1805
1803
|
*/
|
|
1806
1804
|
|
|
1807
|
-
export { AsyncSubmitDirective, DynamicFieldType, DynamicFormArrayComponent, DynamicFormBuilderService, DynamicFormChipsComponent, DynamicFormComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, DynamicFormSchemaService, DynamicFormService, DynamicFormUploadComponent, EDITOR_FORMATS, FORM_ROOT_ID, FormFile, FormGroup, FormInput, FormModel, FormSelect, FormSerializable, FormUpload, MAX_INPUT_NUM, MIN_INPUT_NUM, NgxDynamicFormModule, addFieldValidators,
|
|
1805
|
+
export { AsyncSubmitDirective, DynamicFieldType, DynamicFormAlertComponent, DynamicFormArrayComponent, DynamicFormBuilderService, DynamicFormChipsComponent, DynamicFormComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, DynamicFormSchemaService, DynamicFormService, DynamicFormUploadComponent, EDITOR_FORMATS, FORM_ROOT_ID, FormFile, FormGroup, FormInput, FormModel, FormSelect, FormSerializable, FormUpload, MAX_INPUT_NUM, MIN_INPUT_NUM, NgxDynamicFormModule, addFieldValidators, clearFieldArray, controlStatus, controlValues, customizeFormField, emailValidation, getFieldByPath, getFieldsByKey, getFieldsByPredicate, getSelectOptions, insertToFieldArray, jsonValidation, maxLengthValidation, maxValueValidation, minLengthValidation, minValueValidation, phoneValidation, removeFieldValidators, removeFromFieldArray, replaceFieldArray, replaceSpecialChars, requiredValidation, setFieldDisabled, setFieldHidden, setFieldHooks, setFieldProp, translationValidation };
|
|
1808
1806
|
//# sourceMappingURL=stemy-ngx-dynamic-form.mjs.map
|