@covalent/dynamic-forms 0.0.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.
Files changed (36) hide show
  1. package/README.md +183 -0
  2. package/covalent-dynamic-forms.d.ts +5 -0
  3. package/esm2020/covalent-dynamic-forms.mjs +5 -0
  4. package/esm2020/lib/behaviors/control-value-accesor.mixin.mjs +41 -0
  5. package/esm2020/lib/dynamic-element.component.mjs +178 -0
  6. package/esm2020/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.mjs +19 -0
  7. package/esm2020/lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.mjs +23 -0
  8. package/esm2020/lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component.mjs +28 -0
  9. package/esm2020/lib/dynamic-elements/dynamic-input/dynamic-input.component.mjs +22 -0
  10. package/esm2020/lib/dynamic-elements/dynamic-select/dynamic-select.component.mjs +23 -0
  11. package/esm2020/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.mjs +19 -0
  12. package/esm2020/lib/dynamic-elements/dynamic-slider/dynamic-slider.component.mjs +26 -0
  13. package/esm2020/lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component.mjs +22 -0
  14. package/esm2020/lib/dynamic-forms.component.mjs +185 -0
  15. package/esm2020/lib/dynamic-forms.module.mjs +127 -0
  16. package/esm2020/lib/services/dynamic-forms.service.mjs +140 -0
  17. package/esm2020/public_api.mjs +13 -0
  18. package/fesm2015/covalent-dynamic-forms.mjs +787 -0
  19. package/fesm2015/covalent-dynamic-forms.mjs.map +1 -0
  20. package/fesm2020/covalent-dynamic-forms.mjs +785 -0
  21. package/fesm2020/covalent-dynamic-forms.mjs.map +1 -0
  22. package/lib/behaviors/control-value-accesor.mixin.d.ts +16 -0
  23. package/lib/dynamic-element.component.d.ts +103 -0
  24. package/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.d.ts +11 -0
  25. package/lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.d.ts +17 -0
  26. package/lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component.d.ts +15 -0
  27. package/lib/dynamic-elements/dynamic-input/dynamic-input.component.d.ts +19 -0
  28. package/lib/dynamic-elements/dynamic-select/dynamic-select.component.d.ts +16 -0
  29. package/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.d.ts +11 -0
  30. package/lib/dynamic-elements/dynamic-slider/dynamic-slider.component.d.ts +17 -0
  31. package/lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component.d.ts +14 -0
  32. package/lib/dynamic-forms.component.d.ts +68 -0
  33. package/lib/dynamic-forms.module.d.ts +28 -0
  34. package/lib/services/dynamic-forms.service.d.ts +74 -0
  35. package/package.json +40 -0
  36. package/public_api.d.ts +12 -0
@@ -0,0 +1,787 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component, Injectable, Optional, SkipSelf, Directive, Input, Type, forwardRef, ViewChild, HostBinding, ChangeDetectionStrategy, ContentChildren, NgModule } from '@angular/core';
3
+ import * as i4 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i3 from '@angular/forms';
6
+ import { FormControl, Validators, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
7
+ import * as i1 from '@angular/material/form-field';
8
+ import { MatFormFieldModule } from '@angular/material/form-field';
9
+ import * as i2 from '@angular/material/input';
10
+ import { MatInputModule } from '@angular/material/input';
11
+ import * as i2$2 from '@angular/material/select';
12
+ import { MatSelectModule } from '@angular/material/select';
13
+ import * as i1$2 from '@angular/material/checkbox';
14
+ import { MatCheckboxModule } from '@angular/material/checkbox';
15
+ import * as i1$3 from '@angular/material/slider';
16
+ import { MatSliderModule } from '@angular/material/slider';
17
+ import * as i1$1 from '@angular/material/slide-toggle';
18
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
19
+ import * as i3$1 from '@angular/material/icon';
20
+ import { MatIconModule } from '@angular/material/icon';
21
+ import * as i2$1 from '@angular/material/button';
22
+ import { MatButtonModule } from '@angular/material/button';
23
+ import * as i2$3 from '@angular/material/datepicker';
24
+ import { MatDatepickerModule } from '@angular/material/datepicker';
25
+ import * as i4$1 from '@covalent/core/file';
26
+ import { CovalentFileModule } from '@covalent/core/file';
27
+ import { CdkPortal } from '@angular/cdk/portal';
28
+ import { Subject, timer } from 'rxjs';
29
+ import * as i3$2 from '@angular/material/core';
30
+ import { filter, takeUntil } from 'rxjs/operators';
31
+
32
+ const noop = () => {
33
+ // empty method
34
+ };
35
+ /** Mixin to augment a component with ngModel support. */
36
+ function mixinControlValueAccessor(base, initialValue) {
37
+ return class extends base {
38
+ constructor(...args) {
39
+ super(...args);
40
+ this._value = initialValue instanceof Array
41
+ ? Object.assign([], initialValue)
42
+ : initialValue;
43
+ this.onChange = (_) => noop;
44
+ this.onTouched = () => noop;
45
+ this._subjectValueChanges = new Subject();
46
+ this.valueChanges = this._subjectValueChanges.asObservable();
47
+ }
48
+ set value(v) {
49
+ if (v !== this._value) {
50
+ this._value = v;
51
+ this.onChange(v);
52
+ this._changeDetectorRef.markForCheck();
53
+ this._subjectValueChanges.next(v);
54
+ }
55
+ }
56
+ get value() {
57
+ return this._value;
58
+ }
59
+ writeValue(value) {
60
+ this.value = value;
61
+ this._changeDetectorRef.markForCheck();
62
+ }
63
+ registerOnChange(fn) {
64
+ this.onChange = fn;
65
+ }
66
+ registerOnTouched(fn) {
67
+ this.onTouched = fn;
68
+ }
69
+ };
70
+ }
71
+
72
+ class TdDynamicInputComponent {
73
+ constructor() {
74
+ this.label = '';
75
+ this.hint = '';
76
+ this.required = false;
77
+ this.name = '';
78
+ this.placeholder = '';
79
+ }
80
+ }
81
+ TdDynamicInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
82
+ TdDynamicInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicInputComponent, selector: "td-dynamic-input", ngImport: i0, template: "<div class=\"td-dynamic-input-wrapper\">\n <mat-form-field class=\"td-dynamic-input-field\">\n <mat-label>{{ label }}</mat-label>\n <input\n #elementInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [type]=\"type\"\n [required]=\"required\"\n [attr.name]=\"name\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.minLength]=\"minLength\"\n [attr.maxLength]=\"maxLength\"\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control?.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-input-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-input-wrapper .td-dynamic-input-field{flex:1;box-sizing:border-box}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i1.MatLabel, selector: "mat-label" }, { type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicInputComponent, decorators: [{
84
+ type: Component,
85
+ args: [{ selector: 'td-dynamic-input', template: "<div class=\"td-dynamic-input-wrapper\">\n <mat-form-field class=\"td-dynamic-input-field\">\n <mat-label>{{ label }}</mat-label>\n <input\n #elementInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [type]=\"type\"\n [required]=\"required\"\n [attr.name]=\"name\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.minLength]=\"minLength\"\n [attr.maxLength]=\"maxLength\"\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control?.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-input-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-input-wrapper .td-dynamic-input-field{flex:1;box-sizing:border-box}\n"] }]
86
+ }] });
87
+
88
+ class TdDynamicFileInputComponent {
89
+ constructor() {
90
+ this.required = false;
91
+ this.label = '';
92
+ this.name = '';
93
+ this.hint = '';
94
+ this.placeholder = '';
95
+ }
96
+ _handlefileDrop(value) {
97
+ var _a;
98
+ (_a = this.control) === null || _a === void 0 ? void 0 : _a.setValue(value);
99
+ }
100
+ }
101
+ TdDynamicFileInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFileInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
102
+ TdDynamicFileInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicFileInputComponent, selector: "td-dynamic-file-input", ngImport: i0, template: "<div class=\"td-dynamic-file-input-wrapper\">\n <mat-form-field\n tdFileDrop\n class=\"td-dynamic-file-input-field\"\n floatLabel=\"never\"\n [disabled]=\"control?.disabled\"\n (fileDrop)=\"_handlefileDrop($event)\"\n (click)=\"!control?.disabled && fileInput.inputElement.click()\"\n (keyup.enter)=\"!control?.disabled && fileInput.inputElement.click()\"\n (keyup.delete)=\"fileInput.clear()\"\n (keyup.backspace)=\"fileInput.clear()\"\n >\n <mat-label>{{ label }}</mat-label>\n <input\n matInput\n [value]=\"control?.value?.name\"\n [placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [disabled]=\"control?.disabled\"\n readonly\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control?.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n <button\n mat-icon-button\n *ngIf=\"control.value\"\n (click)=\"fileInput.clear()\"\n (keyup.enter)=\"fileInput.clear()\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n <td-file-input class=\"td-file-input\" #fileInput [formControl]=\"control\">\n <mat-icon>folder</mat-icon>\n <span>{{ label }}</span>\n </td-file-input>\n</div>\n", styles: [".td-dynamic-file-input-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-file-input-wrapper .td-dynamic-file-input-field{flex:1;box-sizing:border-box}.td-file-input{margin-left:10px}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4$1.TdFileInputComponent, selector: "td-file-input", inputs: ["color", "multiple", "accept", "disabled", "value"], outputs: ["selectFile"] }], directives: [{ type: i4$1.TdFileDropDirective, selector: "[tdFileDrop]", inputs: ["multiple", "disabled"], outputs: ["fileDrop"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFileInputComponent, decorators: [{
104
+ type: Component,
105
+ args: [{ selector: 'td-dynamic-file-input', template: "<div class=\"td-dynamic-file-input-wrapper\">\n <mat-form-field\n tdFileDrop\n class=\"td-dynamic-file-input-field\"\n floatLabel=\"never\"\n [disabled]=\"control?.disabled\"\n (fileDrop)=\"_handlefileDrop($event)\"\n (click)=\"!control?.disabled && fileInput.inputElement.click()\"\n (keyup.enter)=\"!control?.disabled && fileInput.inputElement.click()\"\n (keyup.delete)=\"fileInput.clear()\"\n (keyup.backspace)=\"fileInput.clear()\"\n >\n <mat-label>{{ label }}</mat-label>\n <input\n matInput\n [value]=\"control?.value?.name\"\n [placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [disabled]=\"control?.disabled\"\n readonly\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control?.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n <button\n mat-icon-button\n *ngIf=\"control.value\"\n (click)=\"fileInput.clear()\"\n (keyup.enter)=\"fileInput.clear()\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n <td-file-input class=\"td-file-input\" #fileInput [formControl]=\"control\">\n <mat-icon>folder</mat-icon>\n <span>{{ label }}</span>\n </td-file-input>\n</div>\n", styles: [".td-dynamic-file-input-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-file-input-wrapper .td-dynamic-file-input-field{flex:1;box-sizing:border-box}.td-file-input{margin-left:10px}\n"] }]
106
+ }] });
107
+
108
+ class TdDynamicTextareaComponent {
109
+ constructor() {
110
+ this.label = '';
111
+ this.hint = '';
112
+ this.name = '';
113
+ this.required = false;
114
+ this.placeholder = '';
115
+ }
116
+ }
117
+ TdDynamicTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicTextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
118
+ TdDynamicTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicTextareaComponent, selector: "td-dynamic-textarea", ngImport: i0, template: "<div class=\"td-dynamic-textarea-wrapper\">\n <mat-form-field class=\"td-dynamic-textarea-field\">\n <mat-label>{{ label }}</mat-label>\n <textarea\n #elementInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [attr.name]=\"name\"\n rows=\"4\"\n ></textarea>\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control?.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-textarea-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-textarea-wrapper .td-dynamic-textarea-field{flex:1;box-sizing:border-box}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i1.MatLabel, selector: "mat-label" }, { type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicTextareaComponent, decorators: [{
120
+ type: Component,
121
+ args: [{ selector: 'td-dynamic-textarea', template: "<div class=\"td-dynamic-textarea-wrapper\">\n <mat-form-field class=\"td-dynamic-textarea-field\">\n <mat-label>{{ label }}</mat-label>\n <textarea\n #elementInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [attr.name]=\"name\"\n rows=\"4\"\n ></textarea>\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control?.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-textarea-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-textarea-wrapper .td-dynamic-textarea-field{flex:1;box-sizing:border-box}\n"] }]
122
+ }] });
123
+
124
+ class TdDynamicSlideToggleComponent {
125
+ constructor() {
126
+ this.label = '';
127
+ this.name = '';
128
+ this.hint = '';
129
+ this.required = false;
130
+ }
131
+ }
132
+ TdDynamicSlideToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSlideToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
133
+ TdDynamicSlideToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicSlideToggleComponent, selector: "td-dynamic-slide-toggle", ngImport: i0, template: "<div class=\"td-dynamic-slide-toggle-wrapper\">\n <mat-slide-toggle\n [formControl]=\"control\"\n [attr.name]=\"name\"\n [required]=\"required\"\n >\n {{ label }}\n </mat-slide-toggle>\n <span class=\"mat-hint td-dynamic-element-hint\">{{ hint }}</span>\n</div>\n", styles: [""], components: [{ type: i1$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }], directives: [{ type: i1$1.MatSlideToggleRequiredValidator, selector: "mat-slide-toggle[required][formControlName], mat-slide-toggle[required][formControl], mat-slide-toggle[required][ngModel]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }] });
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSlideToggleComponent, decorators: [{
135
+ type: Component,
136
+ args: [{ selector: 'td-dynamic-slide-toggle', template: "<div class=\"td-dynamic-slide-toggle-wrapper\">\n <mat-slide-toggle\n [formControl]=\"control\"\n [attr.name]=\"name\"\n [required]=\"required\"\n >\n {{ label }}\n </mat-slide-toggle>\n <span class=\"mat-hint td-dynamic-element-hint\">{{ hint }}</span>\n</div>\n", styles: [""] }]
137
+ }] });
138
+
139
+ class TdDynamicCheckboxComponent {
140
+ constructor() {
141
+ this.label = '';
142
+ this.name = '';
143
+ this.hint = '';
144
+ this.required = false;
145
+ }
146
+ }
147
+ TdDynamicCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
148
+ TdDynamicCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicCheckboxComponent, selector: "td-dynamic-checkbox", ngImport: i0, template: "<div class=\"td-dynamic-checkbox-wrapper\">\n <mat-checkbox [formControl]=\"control\" [name]=\"name\" [required]=\"required\">\n {{ label }}\n </mat-checkbox>\n <span class=\"mat-hint td-dynamic-element-hint\">{{ hint }}</span>\n</div>\n", styles: [""], components: [{ type: i1$2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i1$2.MatCheckboxRequiredValidator, selector: "mat-checkbox[required][formControlName], mat-checkbox[required][formControl], mat-checkbox[required][ngModel]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }] });
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicCheckboxComponent, decorators: [{
150
+ type: Component,
151
+ args: [{ selector: 'td-dynamic-checkbox', template: "<div class=\"td-dynamic-checkbox-wrapper\">\n <mat-checkbox [formControl]=\"control\" [name]=\"name\" [required]=\"required\">\n {{ label }}\n </mat-checkbox>\n <span class=\"mat-hint td-dynamic-element-hint\">{{ hint }}</span>\n</div>\n", styles: [""] }]
152
+ }] });
153
+
154
+ class TdDynamicSliderComponent {
155
+ constructor(_changeDetectorRef) {
156
+ this._changeDetectorRef = _changeDetectorRef;
157
+ this.label = '';
158
+ this.required = false;
159
+ this.name = '';
160
+ this.hint = '';
161
+ }
162
+ _handleBlur() {
163
+ setTimeout(() => {
164
+ this._changeDetectorRef.markForCheck();
165
+ });
166
+ }
167
+ }
168
+ TdDynamicSliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSliderComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
169
+ TdDynamicSliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicSliderComponent, selector: "td-dynamic-slider", ngImport: i0, template: "<div\n class=\"td-dynamic-slider-wrapper mat-form-field mat-form-field-can-float mat-form-field-should-float\"\n [class.mat-focused]=\"slider._isActive\"\n>\n <span class=\"mat-form-field-label-wrapper\">\n <label class=\"mat-form-field-label mat-primary td-slider-label\">\n {{ label }}\n <span\n *ngIf=\"required && !control?.disabled\"\n class=\"mat-form-field-required-marker\"\n >*</span\n >\n </label>\n </span>\n <div class=\"td-dynamic-slider-field\">\n <mat-slider\n #slider\n class=\"td-dynamic-slider\"\n [formControl]=\"control\"\n [attr.name]=\"name\"\n [min]=\"min\"\n [max]=\"max\"\n thumbLabel\n tickInterval=\"auto\"\n [required]=\"required\"\n (blur)=\"_handleBlur()\"\n ></mat-slider>\n </div>\n <span class=\"mat-hint td-dynamic-element-hint\">{{ hint }}</span>\n</div>\n", styles: [":host .td-dynamic-slider-wrapper{display:block}.td-dynamic-slider-field{position:relative;flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-slider-field .td-dynamic-slider{flex:1}\n"], components: [{ type: i1$3.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "displayWith", "valueText", "vertical"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }] });
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSliderComponent, decorators: [{
171
+ type: Component,
172
+ args: [{ selector: 'td-dynamic-slider', template: "<div\n class=\"td-dynamic-slider-wrapper mat-form-field mat-form-field-can-float mat-form-field-should-float\"\n [class.mat-focused]=\"slider._isActive\"\n>\n <span class=\"mat-form-field-label-wrapper\">\n <label class=\"mat-form-field-label mat-primary td-slider-label\">\n {{ label }}\n <span\n *ngIf=\"required && !control?.disabled\"\n class=\"mat-form-field-required-marker\"\n >*</span\n >\n </label>\n </span>\n <div class=\"td-dynamic-slider-field\">\n <mat-slider\n #slider\n class=\"td-dynamic-slider\"\n [formControl]=\"control\"\n [attr.name]=\"name\"\n [min]=\"min\"\n [max]=\"max\"\n thumbLabel\n tickInterval=\"auto\"\n [required]=\"required\"\n (blur)=\"_handleBlur()\"\n ></mat-slider>\n </div>\n <span class=\"mat-hint td-dynamic-element-hint\">{{ hint }}</span>\n</div>\n", styles: [":host .td-dynamic-slider-wrapper{display:block}.td-dynamic-slider-field{position:relative;flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-slider-field .td-dynamic-slider{flex:1}\n"] }]
173
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });
174
+
175
+ class TdDynamicSelectComponent {
176
+ constructor() {
177
+ this.label = '';
178
+ this.hint = '';
179
+ this.name = '';
180
+ this.required = false;
181
+ this.placeholder = '';
182
+ }
183
+ }
184
+ TdDynamicSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
185
+ TdDynamicSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicSelectComponent, selector: "td-dynamic-select", ngImport: i0, template: "<div class=\"td-dynamic-select-wrapper\">\n <mat-form-field class=\"td-dynamic-select-field\">\n <mat-label>{{ label }}</mat-label>\n <mat-select\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [attr.name]=\"name\"\n [multiple]=\"multiple\"\n >\n <mat-option\n *ngFor=\"let selection of selections\"\n [value]=\"selection.value || selection\"\n >\n {{ selection.label || selection }}\n </mat-option>\n </mat-select>\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control?.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-select-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-select-wrapper .td-dynamic-select-field{flex:1;box-sizing:border-box}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2$2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3$2.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i1.MatLabel, selector: "mat-label" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
186
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSelectComponent, decorators: [{
187
+ type: Component,
188
+ args: [{ selector: 'td-dynamic-select', template: "<div class=\"td-dynamic-select-wrapper\">\n <mat-form-field class=\"td-dynamic-select-field\">\n <mat-label>{{ label }}</mat-label>\n <mat-select\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [attr.name]=\"name\"\n [multiple]=\"multiple\"\n >\n <mat-option\n *ngFor=\"let selection of selections\"\n [value]=\"selection.value || selection\"\n >\n {{ selection.label || selection }}\n </mat-option>\n </mat-select>\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control?.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-select-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-select-wrapper .td-dynamic-select-field{flex:1;box-sizing:border-box}\n"] }]
189
+ }] });
190
+
191
+ class TdDynamicDatepickerComponent {
192
+ constructor() {
193
+ this.label = '';
194
+ this.hint = '';
195
+ this.name = '';
196
+ this.required = false;
197
+ this.placeholder = '';
198
+ }
199
+ }
200
+ TdDynamicDatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicDatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
201
+ TdDynamicDatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicDatepickerComponent, selector: "td-dynamic-datepicker", ngImport: i0, template: "<div class=\"td-dynamic-datepicker-wrapper\">\n <mat-form-field class=\"td-dynamic-datepicker-field\">\n <mat-label>{{ label }}</mat-label>\n <input\n #elementInput\n matInput\n [matDatepicker]=\"dynamicDatePicker\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [name]=\"name\"\n [min]=\"min\"\n [max]=\"max\"\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control?.errors\n }\"\n ></ng-template>\n </mat-error>\n <mat-datepicker-toggle\n matSuffix\n [for]=\"dynamicDatePicker\"\n ></mat-datepicker-toggle>\n <mat-datepicker #dynamicDatePicker></mat-datepicker>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-datepicker-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-datepicker-wrapper .td-dynamic-datepicker-field{flex:1;box-sizing:border-box}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2$3.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i2$3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }], directives: [{ type: i1.MatLabel, selector: "mat-label" }, { type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i2$3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }] });
202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicDatepickerComponent, decorators: [{
203
+ type: Component,
204
+ args: [{ selector: 'td-dynamic-datepicker', template: "<div class=\"td-dynamic-datepicker-wrapper\">\n <mat-form-field class=\"td-dynamic-datepicker-field\">\n <mat-label>{{ label }}</mat-label>\n <input\n #elementInput\n matInput\n [matDatepicker]=\"dynamicDatePicker\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [name]=\"name\"\n [min]=\"min\"\n [max]=\"max\"\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control?.errors\n }\"\n ></ng-template>\n </mat-error>\n <mat-datepicker-toggle\n matSuffix\n [for]=\"dynamicDatePicker\"\n ></mat-datepicker-toggle>\n <mat-datepicker #dynamicDatePicker></mat-datepicker>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-datepicker-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-datepicker-wrapper .td-dynamic-datepicker-field{flex:1;box-sizing:border-box}\n"] }]
205
+ }] });
206
+
207
+ var TdDynamicType;
208
+ (function (TdDynamicType) {
209
+ TdDynamicType["Text"] = "text";
210
+ TdDynamicType["Boolean"] = "boolean";
211
+ TdDynamicType["Number"] = "number";
212
+ TdDynamicType["Array"] = "array";
213
+ TdDynamicType["Date"] = "date";
214
+ })(TdDynamicType || (TdDynamicType = {}));
215
+ var TdDynamicElement;
216
+ (function (TdDynamicElement) {
217
+ TdDynamicElement["Input"] = "input";
218
+ TdDynamicElement["Datepicker"] = "datepicker";
219
+ TdDynamicElement["Password"] = "password";
220
+ TdDynamicElement["Textarea"] = "textarea";
221
+ TdDynamicElement["Slider"] = "slider";
222
+ TdDynamicElement["SlideToggle"] = "slide-toggle";
223
+ TdDynamicElement["Checkbox"] = "checkbox";
224
+ TdDynamicElement["Select"] = "select";
225
+ TdDynamicElement["FileInput"] = "file-input";
226
+ })(TdDynamicElement || (TdDynamicElement = {}));
227
+ const DYNAMIC_ELEMENT_NAME_REGEX = /^[^0-9][^@]*$/;
228
+ class TdDynamicFormsService {
229
+ /**
230
+ * Method to validate if the [name] is a proper element name.
231
+ * Throws error if name is not valid.
232
+ */
233
+ validateDynamicElementName(name) {
234
+ if (!DYNAMIC_ELEMENT_NAME_REGEX.test(name)) {
235
+ throw new Error('Dynamic element name: "${name}" is not valid.');
236
+ }
237
+ }
238
+ /**
239
+ * Gets component to be rendered depending on [TdDynamicElement | TdDynamicType]
240
+ * Throws error if it does not exists or not supported.
241
+ */
242
+ getDynamicElement(element) {
243
+ switch (element) {
244
+ case TdDynamicType.Text:
245
+ case TdDynamicType.Number:
246
+ case TdDynamicElement.Input:
247
+ case TdDynamicElement.Password:
248
+ return TdDynamicInputComponent;
249
+ case TdDynamicElement.Textarea:
250
+ return TdDynamicTextareaComponent;
251
+ case TdDynamicType.Boolean:
252
+ case TdDynamicElement.SlideToggle:
253
+ return TdDynamicSlideToggleComponent;
254
+ case TdDynamicElement.Checkbox:
255
+ return TdDynamicCheckboxComponent;
256
+ case TdDynamicElement.Slider:
257
+ return TdDynamicSliderComponent;
258
+ case TdDynamicType.Array:
259
+ case TdDynamicElement.Select:
260
+ return TdDynamicSelectComponent;
261
+ case TdDynamicElement.FileInput:
262
+ return TdDynamicFileInputComponent;
263
+ case TdDynamicElement.Datepicker:
264
+ case TdDynamicType.Date:
265
+ return TdDynamicDatepickerComponent;
266
+ default:
267
+ throw new Error(`Error: type ${element} does not exist or not supported.`);
268
+ }
269
+ }
270
+ /**
271
+ * Creates form control for element depending [ITdDynamicElementConfig] properties.
272
+ */
273
+ createFormControl(config) {
274
+ const validator = this.createValidators(config);
275
+ return new FormControl({ value: config.default, disabled: config.disabled }, validator);
276
+ }
277
+ /**
278
+ * Creates form validationdepending [ITdDynamicElementConfig] properties.
279
+ */
280
+ createValidators(config) {
281
+ let validator = null;
282
+ if (config.required) {
283
+ validator = Validators.required;
284
+ }
285
+ if (config.max || config.max === 0) {
286
+ validator = Validators.compose([
287
+ validator,
288
+ Validators.max(parseFloat(config.max)),
289
+ ]);
290
+ }
291
+ if (config.min || config.min === 0) {
292
+ validator = Validators.compose([
293
+ validator,
294
+ Validators.min(parseFloat(config.min)),
295
+ ]);
296
+ }
297
+ if (config.maxLength || config.maxLength === 0) {
298
+ validator = Validators.compose([
299
+ validator,
300
+ Validators.maxLength(parseFloat(config.maxLength)),
301
+ ]);
302
+ }
303
+ if (config.minLength || config.minLength === 0) {
304
+ validator = Validators.compose([
305
+ validator,
306
+ Validators.minLength(parseFloat(config.minLength)),
307
+ ]);
308
+ }
309
+ // Add provided custom validators to the validator function
310
+ if (config.validators) {
311
+ config.validators.forEach((validatorConfig) => {
312
+ validator = Validators.compose([
313
+ validator,
314
+ validatorConfig.validator,
315
+ ]);
316
+ });
317
+ }
318
+ return validator;
319
+ }
320
+ }
321
+ TdDynamicFormsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
322
+ TdDynamicFormsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsService });
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsService, decorators: [{
324
+ type: Injectable
325
+ }] });
326
+ function DYNAMIC_FORMS_PROVIDER_FACTORY(parent) {
327
+ return parent || new TdDynamicFormsService();
328
+ }
329
+ const DYNAMIC_FORMS_PROVIDER = {
330
+ // If there is already a service available, use that. Otherwise, provide a new one.
331
+ provide: TdDynamicFormsService,
332
+ deps: [[new Optional(), new SkipSelf(), TdDynamicFormsService]],
333
+ useFactory: DYNAMIC_FORMS_PROVIDER_FACTORY,
334
+ };
335
+
336
+ class TdDynamicElementBase {
337
+ constructor(_changeDetectorRef) {
338
+ this._changeDetectorRef = _changeDetectorRef;
339
+ }
340
+ }
341
+ /* tslint:disable-next-line */
342
+ const _TdDynamicElementMixinBase = mixinControlValueAccessor(TdDynamicElementBase);
343
+ class TdDynamicFormsErrorTemplateDirective extends CdkPortal {
344
+ constructor(templateRef, viewContainerRef) {
345
+ super(templateRef, viewContainerRef);
346
+ this.templateRef = templateRef;
347
+ }
348
+ }
349
+ TdDynamicFormsErrorTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsErrorTemplateDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
350
+ TdDynamicFormsErrorTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicFormsErrorTemplateDirective, selector: "[tdDynamicFormsError]ng-template", inputs: { tdDynamicFormsError: "tdDynamicFormsError" }, usesInheritance: true, ngImport: i0 });
351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsErrorTemplateDirective, decorators: [{
352
+ type: Directive,
353
+ args: [{ selector: '[tdDynamicFormsError]ng-template' }]
354
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { tdDynamicFormsError: [{
355
+ type: Input
356
+ }] } });
357
+ class TdDynamicElementDirective {
358
+ constructor(viewContainer) {
359
+ this.viewContainer = viewContainer;
360
+ }
361
+ }
362
+ TdDynamicElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicElementDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
363
+ TdDynamicElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicElementDirective, selector: "[tdDynamicContainer]", ngImport: i0 });
364
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicElementDirective, decorators: [{
365
+ type: Directive,
366
+ args: [{
367
+ selector: '[tdDynamicContainer]',
368
+ }]
369
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });
370
+ class TdDynamicElementComponent extends _TdDynamicElementMixinBase {
371
+ constructor(_componentFactoryResolver, _dynamicFormsService, _changeDetectorRef) {
372
+ super(_changeDetectorRef);
373
+ this._componentFactoryResolver = _componentFactoryResolver;
374
+ this._dynamicFormsService = _dynamicFormsService;
375
+ /**
376
+ * Sets label to be displayed.
377
+ */
378
+ this.label = '';
379
+ /**
380
+ * Sets hint to be displayed.
381
+ */
382
+ this.hint = '';
383
+ /**
384
+ * Sets name to be displayed as attribute.
385
+ */
386
+ this.name = '';
387
+ /**
388
+ * Sets the placeholder message
389
+ */
390
+ this.placeholder = '';
391
+ }
392
+ get maxAttr() {
393
+ return this.max;
394
+ }
395
+ get minAttr() {
396
+ return this.min;
397
+ }
398
+ ngOnInit() {
399
+ const component = this.type instanceof Type
400
+ ? this.type
401
+ : this._dynamicFormsService.getDynamicElement(this.type);
402
+ const ref = this._componentFactoryResolver
403
+ .resolveComponentFactory(component)
404
+ .create(this.childElement.viewContainer.injector);
405
+ this.childElement.viewContainer.insert(ref.hostView);
406
+ this._instance = ref.instance;
407
+ this._instance.control = this.dynamicControl;
408
+ this._instance.label = this.label;
409
+ this._instance.hint = this.hint;
410
+ this._instance.name = this.name;
411
+ this._instance.type = this.type;
412
+ this._instance.value = this.value;
413
+ this._instance.required = this.required;
414
+ this._instance.min = this.min;
415
+ this._instance.max = this.max;
416
+ this._instance.minLength = this.minLength;
417
+ this._instance.maxLength = this.maxLength;
418
+ this._instance.selections = this.selections;
419
+ this._instance.multiple = this.multiple;
420
+ this._instance.errorMessageTemplate = this.errorMessageTemplate;
421
+ this._instance.placeholder = this.placeholder;
422
+ if (this.customConfig) {
423
+ Object.getOwnPropertyNames(this.customConfig).forEach((name) => {
424
+ if (this.customConfig) {
425
+ this._instance[name] = this.customConfig[name];
426
+ }
427
+ });
428
+ }
429
+ }
430
+ /**
431
+ * Reassign any inputs that have changed
432
+ */
433
+ ngOnChanges(changes) {
434
+ if (this._instance) {
435
+ for (const prop of Object.keys(changes)) {
436
+ this._instance[prop] = changes[prop].currentValue;
437
+ }
438
+ }
439
+ }
440
+ }
441
+ TdDynamicElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicElementComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: TdDynamicFormsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
442
+ TdDynamicElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicElementComponent, selector: "td-dynamic-element", inputs: { dynamicControl: "dynamicControl", label: "label", hint: "hint", name: "name", type: "type", required: "required", min: "min", max: "max", minLength: "minLength", maxLength: "maxLength", selections: "selections", multiple: "multiple", customConfig: "customConfig", errorMessageTemplate: "errorMessageTemplate", placeholder: "placeholder" }, host: { properties: { "attr.max": "this.maxAttr", "attr.min": "this.minAttr" } }, providers: [
443
+ TdDynamicFormsService,
444
+ {
445
+ provide: NG_VALUE_ACCESSOR,
446
+ useExisting: forwardRef(() => TdDynamicElementComponent),
447
+ multi: true,
448
+ },
449
+ ], viewQueries: [{ propertyName: "childElement", first: true, predicate: TdDynamicElementDirective, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '<div tdDynamicContainer></div>', isInline: true, directives: [{ type: TdDynamicElementDirective, selector: "[tdDynamicContainer]" }] });
450
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicElementComponent, decorators: [{
451
+ type: Component,
452
+ args: [{
453
+ providers: [
454
+ TdDynamicFormsService,
455
+ {
456
+ provide: NG_VALUE_ACCESSOR,
457
+ useExisting: forwardRef(() => TdDynamicElementComponent),
458
+ multi: true,
459
+ },
460
+ ],
461
+ selector: 'td-dynamic-element',
462
+ template: '<div tdDynamicContainer></div>',
463
+ }]
464
+ }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: TdDynamicFormsService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { dynamicControl: [{
465
+ type: Input
466
+ }], label: [{
467
+ type: Input
468
+ }], hint: [{
469
+ type: Input
470
+ }], name: [{
471
+ type: Input
472
+ }], type: [{
473
+ type: Input
474
+ }], required: [{
475
+ type: Input
476
+ }], min: [{
477
+ type: Input
478
+ }], max: [{
479
+ type: Input
480
+ }], minLength: [{
481
+ type: Input
482
+ }], maxLength: [{
483
+ type: Input
484
+ }], selections: [{
485
+ type: Input
486
+ }], multiple: [{
487
+ type: Input
488
+ }], customConfig: [{
489
+ type: Input
490
+ }], errorMessageTemplate: [{
491
+ type: Input
492
+ }], placeholder: [{
493
+ type: Input
494
+ }], childElement: [{
495
+ type: ViewChild,
496
+ args: [TdDynamicElementDirective, { static: true }]
497
+ }], maxAttr: [{
498
+ type: HostBinding,
499
+ args: ['attr.max']
500
+ }], minAttr: [{
501
+ type: HostBinding,
502
+ args: ['attr.min']
503
+ }] } });
504
+
505
+ class TdDynamicFormsComponent {
506
+ constructor(_formBuilder, _dynamicFormsService, _changeDetectorRef) {
507
+ this._formBuilder = _formBuilder;
508
+ this._dynamicFormsService = _dynamicFormsService;
509
+ this._changeDetectorRef = _changeDetectorRef;
510
+ this._renderedElements = [];
511
+ this._templateMap = new Map();
512
+ this._destroy$ = new Subject();
513
+ this._destroyControl$ = new Subject();
514
+ this.dynamicForm = this._formBuilder.group({});
515
+ }
516
+ /**
517
+ * elements: ITdDynamicElementConfig[]
518
+ * JS Object that will render the elements depending on its config.
519
+ * [name] property is required.
520
+ */
521
+ set elements(elements) {
522
+ if (elements) {
523
+ this._elements = elements;
524
+ }
525
+ else {
526
+ this._elements = [];
527
+ }
528
+ this._rerenderElements();
529
+ }
530
+ get elements() {
531
+ return this._renderedElements;
532
+ }
533
+ /**
534
+ * Getter property for dynamic [FormGroup].
535
+ */
536
+ get form() {
537
+ return this.dynamicForm;
538
+ }
539
+ /**
540
+ * Getter property for [valid] of dynamic [FormGroup].
541
+ */
542
+ get valid() {
543
+ if (this.dynamicForm) {
544
+ return this.dynamicForm.valid;
545
+ }
546
+ return false;
547
+ }
548
+ /**
549
+ * Getter property for [value] of dynamic [FormGroup].
550
+ */
551
+ get value() {
552
+ if (this.dynamicForm) {
553
+ return this.dynamicForm.value;
554
+ }
555
+ return {};
556
+ }
557
+ /**
558
+ * Getter property for [errors] of dynamic [FormGroup].
559
+ */
560
+ get errors() {
561
+ if (this.dynamicForm) {
562
+ const errors = {};
563
+ for (const name of Object.keys(this.dynamicForm.controls)) {
564
+ errors[name] = this.dynamicForm.controls[name].errors;
565
+ }
566
+ return errors;
567
+ }
568
+ return {};
569
+ }
570
+ /**
571
+ * Getter property for [controls] of dynamic [FormGroup].
572
+ */
573
+ get controls() {
574
+ if (this.dynamicForm) {
575
+ return this.dynamicForm.controls;
576
+ }
577
+ return {};
578
+ }
579
+ ngAfterContentInit() {
580
+ this._updateErrorTemplates();
581
+ }
582
+ ngOnDestroy() {
583
+ this._destroy$.next(0);
584
+ this._destroy$.complete();
585
+ this._destroyControl$.complete();
586
+ }
587
+ /**
588
+ * Refreshes the form and rerenders all validator/element modifications.
589
+ */
590
+ refresh() {
591
+ this._rerenderElements();
592
+ this._updateErrorTemplates();
593
+ }
594
+ /**
595
+ * Getter method for error template references
596
+ */
597
+ getErrorTemplateRef(name) {
598
+ return this._templateMap.get(name);
599
+ }
600
+ /**
601
+ * Loads error templates and sets them in a map for faster access.
602
+ */
603
+ _updateErrorTemplates() {
604
+ var _a;
605
+ this._templateMap = new Map();
606
+ for (const errorTemplate of this._errorTemplates.toArray()) {
607
+ this._templateMap.set((_a = errorTemplate.tdDynamicFormsError) !== null && _a !== void 0 ? _a : '', errorTemplate.templateRef);
608
+ }
609
+ }
610
+ _rerenderElements() {
611
+ this._clearRemovedElements();
612
+ this._renderedElements = [];
613
+ const duplicates = [];
614
+ this._elements.forEach((elem) => {
615
+ this._dynamicFormsService.validateDynamicElementName(elem.name);
616
+ if (duplicates.indexOf(elem.name) > -1) {
617
+ throw new Error(`Dynamic element name: "${elem.name}" is duplicated`);
618
+ }
619
+ duplicates.push(elem.name);
620
+ const dynamicElement = this.dynamicForm.get(elem.name);
621
+ if (!dynamicElement) {
622
+ this.dynamicForm.addControl(elem.name, this._dynamicFormsService.createFormControl(elem));
623
+ this._subscribeToControlStatusChanges(elem.name);
624
+ }
625
+ else {
626
+ dynamicElement.setValue(elem.default);
627
+ dynamicElement.markAsPristine();
628
+ dynamicElement.markAsUntouched();
629
+ if (elem.disabled) {
630
+ dynamicElement.disable();
631
+ }
632
+ else {
633
+ dynamicElement.enable();
634
+ }
635
+ dynamicElement.setValidators(this._dynamicFormsService.createValidators(elem));
636
+ }
637
+ // copy objects so they are only changes when calling this method
638
+ this._renderedElements.push(Object.assign({}, elem));
639
+ });
640
+ // call a change detection since the whole form might change
641
+ this._changeDetectorRef.detectChanges();
642
+ timer(0)
643
+ .toPromise()
644
+ .then(() => {
645
+ // call a markForCheck so elements are rendered correctly in OnPush
646
+ this._changeDetectorRef.markForCheck();
647
+ });
648
+ }
649
+ _clearRemovedElements() {
650
+ this._renderedElements = this._renderedElements.filter((renderedElement) => !this._elements.some((element) => element.name === renderedElement.name));
651
+ // remove elements that were removed from the array
652
+ this._renderedElements.forEach((elem) => {
653
+ this._destroyControl$.next(elem.name);
654
+ this.dynamicForm.removeControl(elem.name);
655
+ });
656
+ }
657
+ // Updates component when manually adding errors to controls
658
+ _subscribeToControlStatusChanges(elementName) {
659
+ const control = this.controls[elementName];
660
+ const controlDestroyed$ = this._destroyControl$.pipe(filter((destroyedElementName) => destroyedElementName === elementName));
661
+ control.statusChanges
662
+ .pipe(takeUntil(this._destroy$), takeUntil(controlDestroyed$))
663
+ .subscribe(() => {
664
+ this._changeDetectorRef.markForCheck();
665
+ });
666
+ }
667
+ }
668
+ TdDynamicFormsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsComponent, deps: [{ token: i3.FormBuilder }, { token: TdDynamicFormsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
669
+ TdDynamicFormsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdDynamicFormsComponent, selector: "td-dynamic-forms", inputs: { elements: "elements" }, queries: [{ propertyName: "_errorTemplates", predicate: TdDynamicFormsErrorTemplateDirective, descendants: true }], ngImport: i0, template: "<form [formGroup]=\"dynamicForm\" novalidate>\n <div class=\"td-dynamic-form-wrapper\">\n <ng-template let-element ngFor [ngForOf]=\"elements\">\n <div\n class=\"td-dynamic-element-wrapper\"\n [style.max-width.%]=\"element.flex ? element.flex : 100\"\n [style.flex]=\"'1 1 ' + (element.flex ? element.flex : 100) + '%'\"\n [style.-ms-flex]=\"'1 1 ' + (element.flex ? element.flex : 100) + '%'\"\n [style.-webkit-box-flex]=\"1\"\n >\n <td-dynamic-element\n #dynamicElement\n *ngIf=\"dynamicForm.controls[element.name]\"\n [formControlName]=\"element.name\"\n [dynamicControl]=\"dynamicForm.controls[element.name]\"\n [id]=\"element.name\"\n [name]=\"element.name\"\n [label]=\"element.label || element.name\"\n [hint]=\"element.hint\"\n [type]=\"element.type\"\n [required]=\"element.required ?? false\"\n [min]=\"element.min\"\n [max]=\"element.max\"\n [minLength]=\"element.minLength\"\n [maxLength]=\"element.maxLength\"\n [selections]=\"element.selections\"\n [multiple]=\"element.multiple\"\n [customConfig]=\"element.customConfig\"\n [errorMessageTemplate]=\"getErrorTemplateRef(element.name)\"\n [placeholder]=\"element.placeholder\"\n ></td-dynamic-element>\n </div>\n </ng-template>\n </div>\n <ng-content></ng-content>\n</form>\n", styles: [".td-dynamic-form-wrapper{flex-flow:row wrap;box-sizing:border-box;display:flex;align-items:center;align-content:center;max-width:100%;justify-content:flex-start}.td-dynamic-form-wrapper ::ng-deep .mat-form-field-infix{width:auto}.td-dynamic-form-wrapper ::ng-deep .td-dynamic-element-hint{font-size:75%;display:block}.td-dynamic-form-wrapper .td-dynamic-element-wrapper{max-height:100%;box-sizing:border-box;position:relative;padding:4px 4px 8px}\n"], components: [{ type: TdDynamicElementComponent, selector: "td-dynamic-element", inputs: ["dynamicControl", "label", "hint", "name", "type", "required", "min", "max", "minLength", "maxLength", "selections", "multiple", "customConfig", "errorMessageTemplate", "placeholder"] }], directives: [{ type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsComponent, decorators: [{
671
+ type: Component,
672
+ args: [{ selector: 'td-dynamic-forms', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"dynamicForm\" novalidate>\n <div class=\"td-dynamic-form-wrapper\">\n <ng-template let-element ngFor [ngForOf]=\"elements\">\n <div\n class=\"td-dynamic-element-wrapper\"\n [style.max-width.%]=\"element.flex ? element.flex : 100\"\n [style.flex]=\"'1 1 ' + (element.flex ? element.flex : 100) + '%'\"\n [style.-ms-flex]=\"'1 1 ' + (element.flex ? element.flex : 100) + '%'\"\n [style.-webkit-box-flex]=\"1\"\n >\n <td-dynamic-element\n #dynamicElement\n *ngIf=\"dynamicForm.controls[element.name]\"\n [formControlName]=\"element.name\"\n [dynamicControl]=\"dynamicForm.controls[element.name]\"\n [id]=\"element.name\"\n [name]=\"element.name\"\n [label]=\"element.label || element.name\"\n [hint]=\"element.hint\"\n [type]=\"element.type\"\n [required]=\"element.required ?? false\"\n [min]=\"element.min\"\n [max]=\"element.max\"\n [minLength]=\"element.minLength\"\n [maxLength]=\"element.maxLength\"\n [selections]=\"element.selections\"\n [multiple]=\"element.multiple\"\n [customConfig]=\"element.customConfig\"\n [errorMessageTemplate]=\"getErrorTemplateRef(element.name)\"\n [placeholder]=\"element.placeholder\"\n ></td-dynamic-element>\n </div>\n </ng-template>\n </div>\n <ng-content></ng-content>\n</form>\n", styles: [".td-dynamic-form-wrapper{flex-flow:row wrap;box-sizing:border-box;display:flex;align-items:center;align-content:center;max-width:100%;justify-content:flex-start}.td-dynamic-form-wrapper ::ng-deep .mat-form-field-infix{width:auto}.td-dynamic-form-wrapper ::ng-deep .td-dynamic-element-hint{font-size:75%;display:block}.td-dynamic-form-wrapper .td-dynamic-element-wrapper{max-height:100%;box-sizing:border-box;position:relative;padding:4px 4px 8px}\n"] }]
673
+ }], ctorParameters: function () { return [{ type: i3.FormBuilder }, { type: TdDynamicFormsService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { _errorTemplates: [{
674
+ type: ContentChildren,
675
+ args: [TdDynamicFormsErrorTemplateDirective, { descendants: true }]
676
+ }], elements: [{
677
+ type: Input
678
+ }] } });
679
+
680
+ const TD_DYNAMIC_FORMS = [
681
+ TdDynamicFormsComponent,
682
+ TdDynamicElementComponent,
683
+ TdDynamicElementDirective,
684
+ TdDynamicFormsErrorTemplateDirective,
685
+ ];
686
+ const TD_DYNAMIC_FORMS_ENTRY_COMPONENTS = [
687
+ TdDynamicInputComponent,
688
+ TdDynamicFileInputComponent,
689
+ TdDynamicTextareaComponent,
690
+ TdDynamicSlideToggleComponent,
691
+ TdDynamicCheckboxComponent,
692
+ TdDynamicSliderComponent,
693
+ TdDynamicSelectComponent,
694
+ TdDynamicDatepickerComponent,
695
+ ];
696
+ class CovalentDynamicFormsModule {
697
+ }
698
+ CovalentDynamicFormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentDynamicFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
699
+ CovalentDynamicFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentDynamicFormsModule, declarations: [TdDynamicFormsComponent,
700
+ TdDynamicElementComponent,
701
+ TdDynamicElementDirective,
702
+ TdDynamicFormsErrorTemplateDirective,
703
+ TdDynamicInputComponent,
704
+ TdDynamicFileInputComponent,
705
+ TdDynamicTextareaComponent,
706
+ TdDynamicSlideToggleComponent,
707
+ TdDynamicCheckboxComponent,
708
+ TdDynamicSliderComponent,
709
+ TdDynamicSelectComponent,
710
+ TdDynamicDatepickerComponent], imports: [CommonModule,
711
+ ReactiveFormsModule,
712
+ MatFormFieldModule,
713
+ MatInputModule,
714
+ MatSelectModule,
715
+ MatCheckboxModule,
716
+ MatSliderModule,
717
+ MatSlideToggleModule,
718
+ MatIconModule,
719
+ MatButtonModule,
720
+ MatDatepickerModule,
721
+ CovalentFileModule], exports: [TdDynamicFormsComponent,
722
+ TdDynamicElementComponent,
723
+ TdDynamicElementDirective,
724
+ TdDynamicFormsErrorTemplateDirective, TdDynamicInputComponent,
725
+ TdDynamicFileInputComponent,
726
+ TdDynamicTextareaComponent,
727
+ TdDynamicSlideToggleComponent,
728
+ TdDynamicCheckboxComponent,
729
+ TdDynamicSliderComponent,
730
+ TdDynamicSelectComponent,
731
+ TdDynamicDatepickerComponent] });
732
+ CovalentDynamicFormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentDynamicFormsModule, providers: [DYNAMIC_FORMS_PROVIDER], imports: [[
733
+ CommonModule,
734
+ ReactiveFormsModule,
735
+ MatFormFieldModule,
736
+ MatInputModule,
737
+ MatSelectModule,
738
+ MatCheckboxModule,
739
+ MatSliderModule,
740
+ MatSlideToggleModule,
741
+ MatIconModule,
742
+ MatButtonModule,
743
+ MatDatepickerModule,
744
+ CovalentFileModule,
745
+ ]] });
746
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentDynamicFormsModule, decorators: [{
747
+ type: NgModule,
748
+ args: [{
749
+ declarations: [
750
+ TdDynamicFormsComponent,
751
+ TdDynamicElementComponent,
752
+ TdDynamicElementDirective,
753
+ TdDynamicFormsErrorTemplateDirective,
754
+ TdDynamicInputComponent,
755
+ TdDynamicFileInputComponent,
756
+ TdDynamicTextareaComponent,
757
+ TdDynamicSlideToggleComponent,
758
+ TdDynamicCheckboxComponent,
759
+ TdDynamicSliderComponent,
760
+ TdDynamicSelectComponent,
761
+ TdDynamicDatepickerComponent,
762
+ ],
763
+ imports: [
764
+ CommonModule,
765
+ ReactiveFormsModule,
766
+ MatFormFieldModule,
767
+ MatInputModule,
768
+ MatSelectModule,
769
+ MatCheckboxModule,
770
+ MatSliderModule,
771
+ MatSlideToggleModule,
772
+ MatIconModule,
773
+ MatButtonModule,
774
+ MatDatepickerModule,
775
+ CovalentFileModule,
776
+ ],
777
+ exports: [...TD_DYNAMIC_FORMS, ...TD_DYNAMIC_FORMS_ENTRY_COMPONENTS],
778
+ providers: [DYNAMIC_FORMS_PROVIDER],
779
+ }]
780
+ }] });
781
+
782
+ /**
783
+ * Generated bundle index. Do not edit.
784
+ */
785
+
786
+ export { CovalentDynamicFormsModule, DYNAMIC_ELEMENT_NAME_REGEX, DYNAMIC_FORMS_PROVIDER, DYNAMIC_FORMS_PROVIDER_FACTORY, TdDynamicCheckboxComponent, TdDynamicDatepickerComponent, TdDynamicElement, TdDynamicElementBase, TdDynamicElementComponent, TdDynamicElementDirective, TdDynamicFileInputComponent, TdDynamicFormsComponent, TdDynamicFormsErrorTemplateDirective, TdDynamicFormsService, TdDynamicInputComponent, TdDynamicSelectComponent, TdDynamicSlideToggleComponent, TdDynamicSliderComponent, TdDynamicTextareaComponent, TdDynamicType, _TdDynamicElementMixinBase };
787
+ //# sourceMappingURL=covalent-dynamic-forms.mjs.map