@stemy/ngx-dynamic-form 19.6.9 → 19.7.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/fesm2022/stemy-ngx-dynamic-form.mjs +56 -37
- package/fesm2022/stemy-ngx-dynamic-form.mjs.map +1 -1
- package/ngx-dynamic-form/common-types.d.ts +11 -2
- package/ngx-dynamic-form/ngx-dynamic-form.module.d.ts +2 -1
- package/ngx-dynamic-form/services/dynamic-form-builder.service.d.ts +2 -0
- package/package.json +2 -2
|
@@ -11,6 +11,8 @@ import * as i3 from '@ngx-formly/core';
|
|
|
11
11
|
import { FieldType, ɵobserve as _observe, FieldArrayType, FieldWrapper, provideFormlyConfig, provideFormlyCore, FormlyModule } from '@ngx-formly/core';
|
|
12
12
|
import * as i1$1 from '@angular/common';
|
|
13
13
|
import { CommonModule } from '@angular/common';
|
|
14
|
+
import * as i5 from '@ngx-formly/core/select';
|
|
15
|
+
import { FormlySelectModule } from '@ngx-formly/core/select';
|
|
14
16
|
|
|
15
17
|
// --- Basic frm constants ---
|
|
16
18
|
const FORM_ROOT_ID = "__root";
|
|
@@ -35,10 +37,12 @@ function customizeFormField(...providers) {
|
|
|
35
37
|
function defineFormControl(target, propertyKey, cb) {
|
|
36
38
|
const fields = ReflectUtils.getMetadata("dynamicFormFields", target) || new Set();
|
|
37
39
|
const existing = ReflectUtils.getMetadata("dynamicFormField", target, propertyKey);
|
|
38
|
-
const builder =
|
|
39
|
-
const data = existing(fb, opts, path)
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
const builder = (fb, opts, path) => {
|
|
41
|
+
const data = ObjectUtils.isFunction(existing) ? existing(fb, opts, path) : {
|
|
42
|
+
priority: Number.MAX_SAFE_INTEGER
|
|
43
|
+
};
|
|
44
|
+
return ObjectUtils.assign(data, cb(fb, opts, path) || {});
|
|
45
|
+
};
|
|
42
46
|
fields.add(propertyKey);
|
|
43
47
|
ReflectUtils.defineMetadata("dynamicFormField", builder, target, propertyKey);
|
|
44
48
|
ReflectUtils.defineMetadata("dynamicFormFields", fields, target);
|
|
@@ -426,7 +430,7 @@ async function toWrapOptions(customizeOrOptions, injector, schema, errorMsg) {
|
|
|
426
430
|
throw new Error(errorMsg);
|
|
427
431
|
}
|
|
428
432
|
if (customizeOrOptions instanceof ConfigForSchemaWrap) {
|
|
429
|
-
return customizeOrOptions;
|
|
433
|
+
return customizeOrOptions.forSchema(schema);
|
|
430
434
|
}
|
|
431
435
|
let schemaOptions = customizeOrOptions;
|
|
432
436
|
if (!ObjectUtils.isObject(schemaOptions)) {
|
|
@@ -526,6 +530,8 @@ class DynamicFormBuilderService {
|
|
|
526
530
|
createFieldSets(fields, parent, options) {
|
|
527
531
|
const result = [];
|
|
528
532
|
const groups = {};
|
|
533
|
+
fields = Array.from(fields || [])
|
|
534
|
+
.sort((a, b) => a.priority - b.priority);
|
|
529
535
|
fields.forEach(f => {
|
|
530
536
|
if (Array.isArray(f.fieldGroup) && Array.isArray(f.wrappers) && f.wrappers[0] === "form-fieldset") {
|
|
531
537
|
// This field is an already existing set
|
|
@@ -606,9 +612,11 @@ class DynamicFormBuilderService {
|
|
|
606
612
|
createFormSelect(key, data, parent, options) {
|
|
607
613
|
data = data || {};
|
|
608
614
|
const type = `${data.type || "select"}`;
|
|
609
|
-
const
|
|
615
|
+
const fieldType = type === "radio" ? type : (data.strict === false ? "chips" : "select");
|
|
616
|
+
const field = this.createFormField(key, fieldType, data, {
|
|
610
617
|
type,
|
|
611
618
|
multiple: data.multiple === true,
|
|
619
|
+
strict: data.strict !== false,
|
|
612
620
|
allowEmpty: data.allowEmpty === true,
|
|
613
621
|
groupBy: data.groupBy,
|
|
614
622
|
invert: data.invert === true
|
|
@@ -760,10 +768,11 @@ class DynamicFormBuilderService {
|
|
|
760
768
|
const disabled = ReflectUtils.resolve(data.disabled, this.injector);
|
|
761
769
|
const hidden = ReflectUtils.resolve(data.hidden, this.injector);
|
|
762
770
|
const field = {
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
type: data.componentType || type,
|
|
771
|
+
serializer: data.serializer,
|
|
772
|
+
serialize: data.serialize || false,
|
|
766
773
|
fieldSet: String(data.fieldSet || ""),
|
|
774
|
+
priority: isNaN(data.priority) ? Number.MAX_SAFE_INTEGER : Number(data.priority),
|
|
775
|
+
type: data.componentType || type,
|
|
767
776
|
resetOnHide: false,
|
|
768
777
|
validators: {},
|
|
769
778
|
validation: {},
|
|
@@ -787,8 +796,6 @@ class DynamicFormBuilderService {
|
|
|
787
796
|
},
|
|
788
797
|
hooks: {},
|
|
789
798
|
expressions: {
|
|
790
|
-
serializer: () => data.serializer,
|
|
791
|
-
serialize: () => data.serialize,
|
|
792
799
|
"props.hideRequiredMarker": target => target.type === "checkbox",
|
|
793
800
|
"props.required": target => !!target.validators?.required,
|
|
794
801
|
"props.disabled": target => {
|
|
@@ -799,7 +806,9 @@ class DynamicFormBuilderService {
|
|
|
799
806
|
const hidden = target.props?.__hidden;
|
|
800
807
|
return !!hidden(target, this.injector);
|
|
801
808
|
}
|
|
802
|
-
}
|
|
809
|
+
},
|
|
810
|
+
key,
|
|
811
|
+
wrappers,
|
|
803
812
|
};
|
|
804
813
|
// Parent object will be available for customizers as a property, until it gets redefined by formly
|
|
805
814
|
Object.defineProperty(field, "parent", {
|
|
@@ -811,23 +820,25 @@ class DynamicFormBuilderService {
|
|
|
811
820
|
this.setExpressions(field, options);
|
|
812
821
|
return field;
|
|
813
822
|
}
|
|
823
|
+
shouldDisplay(field) {
|
|
824
|
+
const display = field.props?.hidden !== true;
|
|
825
|
+
if (Array.isArray(field.fieldGroup) && field.fieldGroup.length) {
|
|
826
|
+
return display && field.fieldGroup.some(f => this.shouldDisplay(f));
|
|
827
|
+
}
|
|
828
|
+
return display;
|
|
829
|
+
}
|
|
830
|
+
isValid(field) {
|
|
831
|
+
const control = field.formControl;
|
|
832
|
+
const valid = field.key && control ? (control.disabled || control.valid) !== false : true;
|
|
833
|
+
if (Array.isArray(field.fieldGroup) && field.fieldGroup.length) {
|
|
834
|
+
return valid && field.fieldGroup.every(f => this.isValid(f));
|
|
835
|
+
}
|
|
836
|
+
return valid;
|
|
837
|
+
}
|
|
814
838
|
setExpressions(field, options) {
|
|
815
839
|
const expressions = {
|
|
816
|
-
display: target =>
|
|
817
|
-
|
|
818
|
-
if (Array.isArray(target.fieldGroup) && target.fieldGroup.length) {
|
|
819
|
-
return display && target.fieldGroup.some(f => f.display);
|
|
820
|
-
}
|
|
821
|
-
return display;
|
|
822
|
-
},
|
|
823
|
-
valid: target => {
|
|
824
|
-
const control = target.formControl;
|
|
825
|
-
const valid = target.key && control ? control.disabled || control.valid : true;
|
|
826
|
-
if (Array.isArray(target.fieldGroup) && target.fieldGroup.length) {
|
|
827
|
-
return valid && target.fieldGroup.every(f => f.valid);
|
|
828
|
-
}
|
|
829
|
-
return valid;
|
|
830
|
-
},
|
|
840
|
+
display: target => this.shouldDisplay(target),
|
|
841
|
+
valid: target => this.isValid(target),
|
|
831
842
|
className: (target) => {
|
|
832
843
|
if (!target.display) {
|
|
833
844
|
return `dynamic-form-field dynamic-form-hidden`;
|
|
@@ -962,6 +973,7 @@ class DynamicFormSchemaService {
|
|
|
962
973
|
layout: property.layout,
|
|
963
974
|
serialize: property.serialize === true,
|
|
964
975
|
fieldSet: property.fieldSet,
|
|
976
|
+
priority: property.priority,
|
|
965
977
|
componentType: property.componentType,
|
|
966
978
|
wrappers: property.wrappers,
|
|
967
979
|
props: property,
|
|
@@ -1077,6 +1089,7 @@ class DynamicFormSchemaService {
|
|
|
1077
1089
|
options: field => this.getFormSelectOptions($enum, property, options, field),
|
|
1078
1090
|
type: property.format || "select",
|
|
1079
1091
|
multiple: property.type == "array",
|
|
1092
|
+
strict: property.strict,
|
|
1080
1093
|
groupBy: property.groupBy,
|
|
1081
1094
|
invert: property.invert,
|
|
1082
1095
|
allowEmpty: property.allowEmpty
|
|
@@ -1701,11 +1714,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1701
1714
|
|
|
1702
1715
|
class DynamicFormChipsComponent extends DynamicFieldType {
|
|
1703
1716
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormChipsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1704
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormChipsComponent, isStandalone: false, selector: "dynamic-form-chips", usesInheritance: true, ngImport: i0, 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", 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.ChipsComponent, selector: "chips", inputs: ["value", "multiple", "disabled", "type", "min", "max", "minLength", "maxLength", "step", "placeholder", "unique", "options"], outputs: ["valueChange"] }, { kind: "directive", type: i3.LegacyFormlyAttributes, selector: "[formlyAttributes]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1717
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormChipsComponent, isStandalone: false, selector: "dynamic-form-chips", usesInheritance: true, ngImport: i0, 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 [strict]=\"props.strict\"\n [options]=\"props.options | formlySelectOptions | async\"\n [testId]=\"field.testId\"\n [formlyAttributes]=\"field\">\n</chips>\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.ChipsComponent, selector: "chips", inputs: ["testId", "value", "multiple", "disabled", "type", "min", "max", "minLength", "maxLength", "step", "placeholder", "unique", "strict", "options"], outputs: ["valueChange"] }, { kind: "directive", type: i3.LegacyFormlyAttributes, selector: "[formlyAttributes]" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.LegacyFormlySelectOptionsPipe, name: "formlySelectOptions" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1705
1718
|
}
|
|
1706
1719
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormChipsComponent, decorators: [{
|
|
1707
1720
|
type: Component,
|
|
1708
|
-
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" }]
|
|
1721
|
+
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 [strict]=\"props.strict\"\n [options]=\"props.options | formlySelectOptions | async\"\n [testId]=\"field.testId\"\n [formlyAttributes]=\"field\">\n</chips>\n" }]
|
|
1709
1722
|
}] });
|
|
1710
1723
|
|
|
1711
1724
|
class DynamicFormUploadComponent extends DynamicFieldType {
|
|
@@ -1749,11 +1762,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1749
1762
|
|
|
1750
1763
|
class DynamicFormGroupComponent extends FieldWrapper {
|
|
1751
1764
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1752
|
-
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 ? '
|
|
1765
|
+
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 === false ? 'invalid' : 'valid']\"\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 });
|
|
1753
1766
|
}
|
|
1754
1767
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormGroupComponent, decorators: [{
|
|
1755
1768
|
type: Component,
|
|
1756
|
-
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 ? '
|
|
1769
|
+
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 === false ? 'invalid' : 'valid']\"\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"] }]
|
|
1757
1770
|
}] });
|
|
1758
1771
|
|
|
1759
1772
|
// --- Components ---
|
|
@@ -1816,20 +1829,24 @@ class NgxDynamicFormModule {
|
|
|
1816
1829
|
FormsModule,
|
|
1817
1830
|
ReactiveFormsModule,
|
|
1818
1831
|
NgxUtilsModule,
|
|
1819
|
-
FormlyModule
|
|
1832
|
+
FormlyModule,
|
|
1833
|
+
FormlySelectModule], exports: [DynamicFieldType, DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormUploadComponent, DynamicFormAlertComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, AsyncSubmitDirective, FormsModule,
|
|
1820
1834
|
ReactiveFormsModule,
|
|
1821
1835
|
NgxUtilsModule,
|
|
1822
|
-
FormlyModule
|
|
1836
|
+
FormlyModule,
|
|
1837
|
+
FormlySelectModule] });
|
|
1823
1838
|
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NgxDynamicFormModule, providers: [
|
|
1824
1839
|
...pipes
|
|
1825
1840
|
], imports: [CommonModule,
|
|
1826
1841
|
FormsModule,
|
|
1827
1842
|
ReactiveFormsModule,
|
|
1828
1843
|
NgxUtilsModule,
|
|
1829
|
-
FormlyModule,
|
|
1844
|
+
FormlyModule,
|
|
1845
|
+
FormlySelectModule, FormsModule,
|
|
1830
1846
|
ReactiveFormsModule,
|
|
1831
1847
|
NgxUtilsModule,
|
|
1832
|
-
FormlyModule
|
|
1848
|
+
FormlyModule,
|
|
1849
|
+
FormlySelectModule] });
|
|
1833
1850
|
}
|
|
1834
1851
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NgxDynamicFormModule, decorators: [{
|
|
1835
1852
|
type: NgModule,
|
|
@@ -1844,7 +1861,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1844
1861
|
FormsModule,
|
|
1845
1862
|
ReactiveFormsModule,
|
|
1846
1863
|
NgxUtilsModule,
|
|
1847
|
-
FormlyModule
|
|
1864
|
+
FormlyModule,
|
|
1865
|
+
FormlySelectModule
|
|
1848
1866
|
],
|
|
1849
1867
|
exports: [
|
|
1850
1868
|
...components,
|
|
@@ -1853,7 +1871,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1853
1871
|
FormsModule,
|
|
1854
1872
|
ReactiveFormsModule,
|
|
1855
1873
|
NgxUtilsModule,
|
|
1856
|
-
FormlyModule
|
|
1874
|
+
FormlyModule,
|
|
1875
|
+
FormlySelectModule
|
|
1857
1876
|
],
|
|
1858
1877
|
providers: [
|
|
1859
1878
|
...pipes
|