@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.
@@ -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 = !ObjectUtils.isFunction(existing) ? cb : ((fb, opts, path) => {
39
- const data = existing(fb, opts, path);
40
- return ObjectUtils.assign(data || {}, cb(fb, opts, path) || {});
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 field = this.createFormField(key, type === "radio" ? type : "select", data, {
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
- key,
764
- wrappers,
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
- const display = target.props?.hidden !== true;
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 ? '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 });
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 ? '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"] }]
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], exports: [DynamicFieldType, DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormUploadComponent, DynamicFormAlertComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, AsyncSubmitDirective, FormsModule,
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, FormsModule,
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