@stemy/ngx-dynamic-form 19.5.11 → 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 +74 -77
- 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"
|
|
@@ -789,7 +771,7 @@ class DynamicFormBuilderService {
|
|
|
789
771
|
if (!target.display) {
|
|
790
772
|
return `dynamic-form-field dynamic-form-hidden`;
|
|
791
773
|
}
|
|
792
|
-
const { classes, className } = target.
|
|
774
|
+
const { classes, layout, className } = target.props || {};
|
|
793
775
|
if (className) {
|
|
794
776
|
return className;
|
|
795
777
|
}
|
|
@@ -797,10 +779,7 @@ class DynamicFormBuilderService {
|
|
|
797
779
|
const typeName = ObjectUtils.isConstructor(type)
|
|
798
780
|
? `${target.type.name}`.toLowerCase().replace("component", "")
|
|
799
781
|
: type;
|
|
800
|
-
return [`dynamic-form-field`, `dynamic-form-field-${target.key}`, `dynamic-form-${typeName}`].concat(Array.isArray(classes) ? classes : [classes || ""]).filter(c => c?.length > 0).join(" ");
|
|
801
|
-
},
|
|
802
|
-
additional: (target) => {
|
|
803
|
-
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(" ");
|
|
804
783
|
},
|
|
805
784
|
path: target => {
|
|
806
785
|
const tp = target.parent;
|
|
@@ -854,10 +833,7 @@ class DynamicFormSchemaService {
|
|
|
854
833
|
async getSchema(name) {
|
|
855
834
|
return this.openApi.getSchema(name);
|
|
856
835
|
}
|
|
857
|
-
async getFormFieldsForSchema(
|
|
858
|
-
const schema = await this.getSchema(name);
|
|
859
|
-
if (!schema)
|
|
860
|
-
return [];
|
|
836
|
+
async getFormFieldsForSchema(schema, parent, customizeOrOptions) {
|
|
861
837
|
const options = await toWrapOptions(customizeOrOptions, this.injector, schema);
|
|
862
838
|
const keys = Object.keys(schema.properties || {});
|
|
863
839
|
const fields = [];
|
|
@@ -875,7 +851,7 @@ class DynamicFormSchemaService {
|
|
|
875
851
|
}
|
|
876
852
|
async getFormFieldForProp(property, options, parent) {
|
|
877
853
|
const $enum = property.items?.enum || property.enum;
|
|
878
|
-
if (Array.isArray($enum) ||
|
|
854
|
+
if (Array.isArray($enum) || ObjectUtils.isStringWithValue(property.optionsPath) || ObjectUtils.isStringWithValue(property.endpoint)) {
|
|
879
855
|
return this.getFormSelectConfig($enum, property, options, parent);
|
|
880
856
|
}
|
|
881
857
|
switch (property.type) {
|
|
@@ -892,7 +868,8 @@ class DynamicFormSchemaService {
|
|
|
892
868
|
// if (this.checkIsEditorProperty(property)) {
|
|
893
869
|
// return this.getFormEditorConfig(property, options, parent);
|
|
894
870
|
// }
|
|
895
|
-
|
|
871
|
+
const refs = await this.openApi.getReferences(property, options.schema);
|
|
872
|
+
if (refs.length > 0) {
|
|
896
873
|
return this.getFormGroupConfig(property, options, parent);
|
|
897
874
|
}
|
|
898
875
|
if (property.format == "file" || property.format == "upload") {
|
|
@@ -917,16 +894,21 @@ class DynamicFormSchemaService {
|
|
|
917
894
|
return {
|
|
918
895
|
hidden: property.hidden === true,
|
|
919
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,
|
|
920
902
|
serialize: property.serialize === true,
|
|
921
|
-
componentType: property.componentType,
|
|
922
903
|
fieldSet: property.fieldSet,
|
|
923
|
-
|
|
904
|
+
componentType: property.componentType,
|
|
905
|
+
wrappers: property.wrappers,
|
|
924
906
|
validators
|
|
925
907
|
};
|
|
926
908
|
}
|
|
927
909
|
async getFormArrayConfig(property, options, parent) {
|
|
928
910
|
return this.builder.createFormArray(property.id, async (sp) => {
|
|
929
|
-
const subSchemas =
|
|
911
|
+
const subSchemas = await this.openApi.getReferences(property, options.schema);
|
|
930
912
|
if (subSchemas.length > 0) {
|
|
931
913
|
const subModels = await Promise.all(subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options)));
|
|
932
914
|
return mergeFormFields(ObjectUtils.copy(subModels));
|
|
@@ -948,9 +930,9 @@ class DynamicFormSchemaService {
|
|
|
948
930
|
}
|
|
949
931
|
async getFormGroupConfig(property, options, parent) {
|
|
950
932
|
return this.builder.createFormGroup(property.id, async (sp) => {
|
|
951
|
-
const subSchemas =
|
|
952
|
-
const
|
|
953
|
-
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);
|
|
954
936
|
}, {
|
|
955
937
|
...this.getFormFieldData(property, options),
|
|
956
938
|
}, parent, options);
|
|
@@ -999,7 +981,7 @@ class DynamicFormSchemaService {
|
|
|
999
981
|
placeholder: property.placeholder || ""
|
|
1000
982
|
}, parent, options);
|
|
1001
983
|
}
|
|
1002
|
-
// getFormEditorConfig(property:
|
|
984
|
+
// getFormEditorConfig(property: OpenApiSchemaProperty, options: ConfigForSchemaWrap): DynamicEditorModelConfig {
|
|
1003
985
|
// const sub = property.type == "array" ? property.items || property : property;
|
|
1004
986
|
// return Object.assign(
|
|
1005
987
|
// this.getFormControlConfig(property, options),
|
|
@@ -1034,6 +1016,7 @@ class DynamicFormSchemaService {
|
|
|
1034
1016
|
type: property.format || "select",
|
|
1035
1017
|
multiple: property.type == "array",
|
|
1036
1018
|
groupBy: property.groupBy,
|
|
1019
|
+
invert: property.invert,
|
|
1037
1020
|
allowEmpty: property.allowEmpty
|
|
1038
1021
|
}, parent, options);
|
|
1039
1022
|
}
|
|
@@ -1059,7 +1042,7 @@ class DynamicFormSchemaService {
|
|
|
1059
1042
|
if (Array.isArray($enum)) {
|
|
1060
1043
|
return this.getFormEnumOptions($enum, property.id, options, field);
|
|
1061
1044
|
}
|
|
1062
|
-
if (
|
|
1045
|
+
if (ObjectUtils.isStringWithValue(property.endpoint)) {
|
|
1063
1046
|
return this.getFormEndpointOptions(property, field);
|
|
1064
1047
|
}
|
|
1065
1048
|
return this.getFormPathOptions(property.optionsPath, field);
|
|
@@ -1081,8 +1064,10 @@ class DynamicFormSchemaService {
|
|
|
1081
1064
|
const endpoint = entries.reduce((res, [key, control]) => {
|
|
1082
1065
|
return this.replaceOptionsEndpoint(res, key, control.value);
|
|
1083
1066
|
}, `${property.endpoint}`);
|
|
1084
|
-
|
|
1085
|
-
|
|
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
|
+
});
|
|
1086
1071
|
const items = ObjectUtils.isArray(data)
|
|
1087
1072
|
? data
|
|
1088
1073
|
: (ObjectUtils.isArray(data.items) ? data.items : []);
|
|
@@ -1226,7 +1211,7 @@ class DynamicFormService {
|
|
|
1226
1211
|
};
|
|
1227
1212
|
const schema = await this.fs.getSchema(name);
|
|
1228
1213
|
const wrapOptions = await toWrapOptions(customizeOrOptions, this.injector, schema, `"DynamicFormService.${restrictedMethod}" is called from a customizer, which is not allowed. Please use DynamicFormSchemaService instead!`);
|
|
1229
|
-
const fields = await this.fs.getFormFieldsForSchema(
|
|
1214
|
+
const fields = await this.fs.getFormFieldsForSchema(schema, config, wrapOptions);
|
|
1230
1215
|
const fieldGroup = [...fields];
|
|
1231
1216
|
config.fieldGroup = fieldGroup;
|
|
1232
1217
|
// There are no actual fields in the schema, or no schema exists
|
|
@@ -1578,9 +1563,7 @@ class DynamicFormComponent {
|
|
|
1578
1563
|
label: "",
|
|
1579
1564
|
useTabs: this.useTabs(),
|
|
1580
1565
|
hidden: false,
|
|
1581
|
-
|
|
1582
|
-
className: "dynamic-form-root-group"
|
|
1583
|
-
}
|
|
1566
|
+
className: "dynamic-form-root-group"
|
|
1584
1567
|
}, null, options)
|
|
1585
1568
|
];
|
|
1586
1569
|
});
|
|
@@ -1646,7 +1629,7 @@ class DynamicFormArrayComponent extends FieldArrayType {
|
|
|
1646
1629
|
this.currentTab.set(Math.min(this.currentTab(), length - 1));
|
|
1647
1630
|
}
|
|
1648
1631
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormArrayComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1649
|
-
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 });
|
|
1650
1633
|
}
|
|
1651
1634
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormArrayComponent, decorators: [{
|
|
1652
1635
|
type: Component,
|
|
@@ -1662,6 +1645,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1662
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" }]
|
|
1663
1646
|
}] });
|
|
1664
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
|
+
|
|
1665
1669
|
class DynamicFormFieldComponent extends FieldWrapper {
|
|
1666
1670
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1667
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 });
|
|
@@ -1682,32 +1686,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1682
1686
|
|
|
1683
1687
|
class DynamicFormGroupComponent extends FieldWrapper {
|
|
1684
1688
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1685
|
-
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 });
|
|
1686
1690
|
}
|
|
1687
1691
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormGroupComponent, decorators: [{
|
|
1688
1692
|
type: Component,
|
|
1689
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"] }]
|
|
1690
1694
|
}] });
|
|
1691
1695
|
|
|
1692
|
-
class DynamicFormUploadComponent extends DynamicFieldType {
|
|
1693
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormUploadComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1694
|
-
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 });
|
|
1695
|
-
}
|
|
1696
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormUploadComponent, decorators: [{
|
|
1697
|
-
type: Component,
|
|
1698
|
-
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" }]
|
|
1699
|
-
}] });
|
|
1700
|
-
|
|
1701
1696
|
// --- Components ---
|
|
1702
1697
|
const components = [
|
|
1703
1698
|
DynamicFieldType,
|
|
1704
1699
|
DynamicFormComponent,
|
|
1705
1700
|
DynamicFormArrayComponent,
|
|
1706
1701
|
DynamicFormChipsComponent,
|
|
1702
|
+
DynamicFormUploadComponent,
|
|
1703
|
+
DynamicFormAlertComponent,
|
|
1707
1704
|
DynamicFormFieldComponent,
|
|
1708
1705
|
DynamicFormFieldsetComponent,
|
|
1709
1706
|
DynamicFormGroupComponent,
|
|
1710
|
-
DynamicFormUploadComponent
|
|
1711
1707
|
];
|
|
1712
1708
|
// --- Directives ---
|
|
1713
1709
|
const directives = [
|
|
@@ -1723,13 +1719,14 @@ class NgxDynamicFormModule {
|
|
|
1723
1719
|
provideFormlyCore({
|
|
1724
1720
|
types: [
|
|
1725
1721
|
{ name: "array", component: DynamicFormArrayComponent },
|
|
1726
|
-
{ name: "chips", component: DynamicFormChipsComponent
|
|
1727
|
-
{ name: "upload", component: DynamicFormUploadComponent
|
|
1722
|
+
{ name: "chips", component: DynamicFormChipsComponent },
|
|
1723
|
+
{ name: "upload", component: DynamicFormUploadComponent }
|
|
1728
1724
|
],
|
|
1729
1725
|
wrappers: [
|
|
1726
|
+
{ name: "form-alert", component: DynamicFormAlertComponent },
|
|
1730
1727
|
{ name: "form-field", component: DynamicFormFieldComponent },
|
|
1731
1728
|
{ name: "form-fieldset", component: DynamicFormFieldsetComponent },
|
|
1732
|
-
{ name: "form-group", component: DynamicFormGroupComponent }
|
|
1729
|
+
{ name: "form-group", component: DynamicFormGroupComponent },
|
|
1733
1730
|
],
|
|
1734
1731
|
extras: {
|
|
1735
1732
|
resetFieldOnHide: false,
|
|
@@ -1752,11 +1749,11 @@ class NgxDynamicFormModule {
|
|
|
1752
1749
|
return makeEnvironmentProviders(NgxDynamicFormModule.getProviders(config));
|
|
1753
1750
|
}
|
|
1754
1751
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NgxDynamicFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1755
|
-
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,
|
|
1756
1753
|
FormsModule,
|
|
1757
1754
|
ReactiveFormsModule,
|
|
1758
1755
|
NgxUtilsModule,
|
|
1759
|
-
FormlyModule], exports: [DynamicFieldType, DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent,
|
|
1756
|
+
FormlyModule], exports: [DynamicFieldType, DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormUploadComponent, DynamicFormAlertComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, AsyncSubmitDirective, FormsModule,
|
|
1760
1757
|
ReactiveFormsModule,
|
|
1761
1758
|
NgxUtilsModule,
|
|
1762
1759
|
FormlyModule] });
|
|
@@ -1805,5 +1802,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1805
1802
|
* Generated bundle index. Do not edit.
|
|
1806
1803
|
*/
|
|
1807
1804
|
|
|
1808
|
-
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 };
|
|
1809
1806
|
//# sourceMappingURL=stemy-ngx-dynamic-form.mjs.map
|