@covalent/dynamic-forms 4.0.0 → 4.1.0-develop.5

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 (69) hide show
  1. package/README.md +26 -18
  2. package/covalent-dynamic-forms.d.ts +2 -1
  3. package/esm2020/covalent-dynamic-forms.mjs +5 -0
  4. package/esm2020/lib/dynamic-element.component.mjs +178 -0
  5. package/esm2020/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.mjs +19 -0
  6. package/esm2020/lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.mjs +23 -0
  7. package/esm2020/lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component.mjs +28 -0
  8. package/esm2020/lib/dynamic-elements/dynamic-input/dynamic-input.component.mjs +22 -0
  9. package/esm2020/lib/dynamic-elements/dynamic-select/dynamic-select.component.mjs +23 -0
  10. package/esm2020/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.mjs +19 -0
  11. package/esm2020/lib/dynamic-elements/dynamic-slider/dynamic-slider.component.mjs +26 -0
  12. package/esm2020/lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component.mjs +22 -0
  13. package/esm2020/lib/dynamic-forms.component.mjs +185 -0
  14. package/esm2020/lib/dynamic-forms.module.mjs +127 -0
  15. package/esm2020/lib/services/dynamic-forms.service.mjs +140 -0
  16. package/esm2020/public_api.mjs +13 -0
  17. package/fesm2015/covalent-dynamic-forms.mjs +748 -0
  18. package/fesm2015/covalent-dynamic-forms.mjs.map +1 -0
  19. package/fesm2020/covalent-dynamic-forms.mjs +746 -0
  20. package/fesm2020/covalent-dynamic-forms.mjs.map +1 -0
  21. package/{dynamic-element.component.d.ts → lib/dynamic-element.component.d.ts} +24 -17
  22. package/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.d.ts +11 -0
  23. package/{dynamic-elements → lib/dynamic-elements}/dynamic-datepicker/dynamic-datepicker.component.d.ts +6 -3
  24. package/{dynamic-elements → lib/dynamic-elements}/dynamic-file-input/dynamic-file-input.component.d.ts +4 -1
  25. package/{dynamic-elements → lib/dynamic-elements}/dynamic-input/dynamic-input.component.d.ts +7 -4
  26. package/{dynamic-elements → lib/dynamic-elements}/dynamic-select/dynamic-select.component.d.ts +5 -2
  27. package/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.d.ts +11 -0
  28. package/{dynamic-elements → lib/dynamic-elements}/dynamic-slider/dynamic-slider.component.d.ts +5 -2
  29. package/{dynamic-elements → lib/dynamic-elements}/dynamic-textarea/dynamic-textarea.component.d.ts +3 -0
  30. package/{dynamic-forms.component.d.ts → lib/dynamic-forms.component.d.ts} +4 -1
  31. package/lib/dynamic-forms.module.d.ts +28 -0
  32. package/{services → lib/services}/dynamic-forms.service.d.ts +5 -2
  33. package/package.json +32 -17
  34. package/public_api.d.ts +12 -12
  35. package/bundles/covalent-dynamic-forms.umd.js +0 -1654
  36. package/bundles/covalent-dynamic-forms.umd.js.map +0 -1
  37. package/bundles/covalent-dynamic-forms.umd.min.js +0 -16
  38. package/bundles/covalent-dynamic-forms.umd.min.js.map +0 -1
  39. package/covalent-dynamic-forms.metadata.json +0 -1
  40. package/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.d.ts +0 -8
  41. package/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.scss +0 -0
  42. package/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.scss +0 -12
  43. package/dynamic-elements/dynamic-file-input/dynamic-file-input.component.scss +0 -15
  44. package/dynamic-elements/dynamic-input/dynamic-input.component.scss +0 -12
  45. package/dynamic-elements/dynamic-select/dynamic-select.component.scss +0 -12
  46. package/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.d.ts +0 -8
  47. package/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.scss +0 -0
  48. package/dynamic-elements/dynamic-slider/dynamic-slider.component.scss +0 -17
  49. package/dynamic-elements/dynamic-textarea/dynamic-textarea.component.scss +0 -12
  50. package/dynamic-forms.component.scss +0 -29
  51. package/dynamic-forms.module.d.ts +0 -2
  52. package/esm2015/covalent-dynamic-forms.js +0 -10
  53. package/esm2015/dynamic-element.component.js +0 -340
  54. package/esm2015/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.js +0 -34
  55. package/esm2015/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.js +0 -49
  56. package/esm2015/dynamic-elements/dynamic-file-input/dynamic-file-input.component.js +0 -47
  57. package/esm2015/dynamic-elements/dynamic-input/dynamic-input.component.js +0 -55
  58. package/esm2015/dynamic-elements/dynamic-select/dynamic-select.component.js +0 -46
  59. package/esm2015/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.js +0 -34
  60. package/esm2015/dynamic-elements/dynamic-slider/dynamic-slider.component.js +0 -64
  61. package/esm2015/dynamic-elements/dynamic-textarea/dynamic-textarea.component.js +0 -40
  62. package/esm2015/dynamic-forms.component.js +0 -306
  63. package/esm2015/dynamic-forms.module.js +0 -73
  64. package/esm2015/index.js +0 -7
  65. package/esm2015/public_api.js +0 -18
  66. package/esm2015/services/dynamic-forms.service.js +0 -201
  67. package/fesm2015/covalent-dynamic-forms.js +0 -1269
  68. package/fesm2015/covalent-dynamic-forms.js.map +0 -1
  69. package/index.d.ts +0 -1
@@ -0,0 +1,185 @@
1
+ import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef, ContentChildren, QueryList, } from '@angular/core';
2
+ import { FormBuilder } from '@angular/forms';
3
+ import { TdDynamicFormsService, } from './services/dynamic-forms.service';
4
+ import { TdDynamicFormsErrorTemplateDirective } from './dynamic-element.component';
5
+ import { timer, Subject } from 'rxjs';
6
+ import { takeUntil, filter } from 'rxjs/operators';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/forms";
9
+ import * as i2 from "./services/dynamic-forms.service";
10
+ import * as i3 from "./dynamic-element.component";
11
+ import * as i4 from "@angular/common";
12
+ export class TdDynamicFormsComponent {
13
+ constructor(_formBuilder, _dynamicFormsService, _changeDetectorRef) {
14
+ this._formBuilder = _formBuilder;
15
+ this._dynamicFormsService = _dynamicFormsService;
16
+ this._changeDetectorRef = _changeDetectorRef;
17
+ this._renderedElements = [];
18
+ this._templateMap = new Map();
19
+ this._destroy$ = new Subject();
20
+ this._destroyControl$ = new Subject();
21
+ this.dynamicForm = this._formBuilder.group({});
22
+ }
23
+ /**
24
+ * elements: ITdDynamicElementConfig[]
25
+ * JS Object that will render the elements depending on its config.
26
+ * [name] property is required.
27
+ */
28
+ set elements(elements) {
29
+ if (elements) {
30
+ this._elements = elements;
31
+ }
32
+ else {
33
+ this._elements = [];
34
+ }
35
+ this._rerenderElements();
36
+ }
37
+ get elements() {
38
+ return this._renderedElements;
39
+ }
40
+ /**
41
+ * Getter property for dynamic [FormGroup].
42
+ */
43
+ get form() {
44
+ return this.dynamicForm;
45
+ }
46
+ /**
47
+ * Getter property for [valid] of dynamic [FormGroup].
48
+ */
49
+ get valid() {
50
+ if (this.dynamicForm) {
51
+ return this.dynamicForm.valid;
52
+ }
53
+ return false;
54
+ }
55
+ /**
56
+ * Getter property for [value] of dynamic [FormGroup].
57
+ */
58
+ get value() {
59
+ if (this.dynamicForm) {
60
+ return this.dynamicForm.value;
61
+ }
62
+ return {};
63
+ }
64
+ /**
65
+ * Getter property for [errors] of dynamic [FormGroup].
66
+ */
67
+ get errors() {
68
+ if (this.dynamicForm) {
69
+ const errors = {};
70
+ for (const name of Object.keys(this.dynamicForm.controls)) {
71
+ errors[name] = this.dynamicForm.controls[name].errors;
72
+ }
73
+ return errors;
74
+ }
75
+ return {};
76
+ }
77
+ /**
78
+ * Getter property for [controls] of dynamic [FormGroup].
79
+ */
80
+ get controls() {
81
+ if (this.dynamicForm) {
82
+ return this.dynamicForm.controls;
83
+ }
84
+ return {};
85
+ }
86
+ ngAfterContentInit() {
87
+ this._updateErrorTemplates();
88
+ }
89
+ ngOnDestroy() {
90
+ this._destroy$.next(0);
91
+ this._destroy$.complete();
92
+ this._destroyControl$.complete();
93
+ }
94
+ /**
95
+ * Refreshes the form and rerenders all validator/element modifications.
96
+ */
97
+ refresh() {
98
+ this._rerenderElements();
99
+ this._updateErrorTemplates();
100
+ }
101
+ /**
102
+ * Getter method for error template references
103
+ */
104
+ getErrorTemplateRef(name) {
105
+ return this._templateMap.get(name);
106
+ }
107
+ /**
108
+ * Loads error templates and sets them in a map for faster access.
109
+ */
110
+ _updateErrorTemplates() {
111
+ this._templateMap = new Map();
112
+ for (const errorTemplate of this._errorTemplates.toArray()) {
113
+ this._templateMap.set(errorTemplate.tdDynamicFormsError ?? '', errorTemplate.templateRef);
114
+ }
115
+ }
116
+ _rerenderElements() {
117
+ this._clearRemovedElements();
118
+ this._renderedElements = [];
119
+ const duplicates = [];
120
+ this._elements.forEach((elem) => {
121
+ this._dynamicFormsService.validateDynamicElementName(elem.name);
122
+ if (duplicates.indexOf(elem.name) > -1) {
123
+ throw new Error(`Dynamic element name: "${elem.name}" is duplicated`);
124
+ }
125
+ duplicates.push(elem.name);
126
+ const dynamicElement = this.dynamicForm.get(elem.name);
127
+ if (!dynamicElement) {
128
+ this.dynamicForm.addControl(elem.name, this._dynamicFormsService.createFormControl(elem));
129
+ this._subscribeToControlStatusChanges(elem.name);
130
+ }
131
+ else {
132
+ dynamicElement.setValue(elem.default);
133
+ dynamicElement.markAsPristine();
134
+ dynamicElement.markAsUntouched();
135
+ if (elem.disabled) {
136
+ dynamicElement.disable();
137
+ }
138
+ else {
139
+ dynamicElement.enable();
140
+ }
141
+ dynamicElement.setValidators(this._dynamicFormsService.createValidators(elem));
142
+ }
143
+ // copy objects so they are only changes when calling this method
144
+ this._renderedElements.push(Object.assign({}, elem));
145
+ });
146
+ // call a change detection since the whole form might change
147
+ this._changeDetectorRef.detectChanges();
148
+ timer(0)
149
+ .toPromise()
150
+ .then(() => {
151
+ // call a markForCheck so elements are rendered correctly in OnPush
152
+ this._changeDetectorRef.markForCheck();
153
+ });
154
+ }
155
+ _clearRemovedElements() {
156
+ this._renderedElements = this._renderedElements.filter((renderedElement) => !this._elements.some((element) => element.name === renderedElement.name));
157
+ // remove elements that were removed from the array
158
+ this._renderedElements.forEach((elem) => {
159
+ this._destroyControl$.next(elem.name);
160
+ this.dynamicForm.removeControl(elem.name);
161
+ });
162
+ }
163
+ // Updates component when manually adding errors to controls
164
+ _subscribeToControlStatusChanges(elementName) {
165
+ const control = this.controls[elementName];
166
+ const controlDestroyed$ = this._destroyControl$.pipe(filter((destroyedElementName) => destroyedElementName === elementName));
167
+ control.statusChanges
168
+ .pipe(takeUntil(this._destroy$), takeUntil(controlDestroyed$))
169
+ .subscribe(() => {
170
+ this._changeDetectorRef.markForCheck();
171
+ });
172
+ }
173
+ }
174
+ TdDynamicFormsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.TdDynamicFormsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
175
+ 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: i3.TdDynamicElementComponent, selector: "td-dynamic-element", inputs: ["dynamicControl", "label", "hint", "name", "type", "required", "min", "max", "minLength", "maxLength", "selections", "multiple", "customConfig", "errorMessageTemplate", "placeholder"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsComponent, decorators: [{
177
+ type: Component,
178
+ 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"] }]
179
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.TdDynamicFormsService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { _errorTemplates: [{
180
+ type: ContentChildren,
181
+ args: [TdDynamicFormsErrorTemplateDirective, { descendants: true }]
182
+ }], elements: [{
183
+ type: Input
184
+ }] } });
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3Jtcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItZHluYW1pYy1mb3Jtcy9zcmMvbGliL2R5bmFtaWMtZm9ybXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWR5bmFtaWMtZm9ybXMvc3JjL2xpYi9keW5hbWljLWZvcm1zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsZUFBZSxFQUVmLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsV0FBVyxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFDTCxxQkFBcUIsR0FFdEIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRixPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFRbkQsTUFBTSxPQUFPLHVCQUF1QjtJQW1GbEMsWUFDVSxZQUF5QixFQUN6QixvQkFBMkMsRUFDM0Msa0JBQXFDO1FBRnJDLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBdUI7UUFDM0MsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQXJGdkMsc0JBQWlCLEdBQThCLEVBQUUsQ0FBQztRQUVsRCxpQkFBWSxHQUFrQyxJQUFJLEdBQUcsRUFHMUQsQ0FBQztRQUNJLGNBQVMsR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN4QyxxQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FB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QzFELE1BQU0sT0FBTyxHQUFvQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTVELE1BQU0saUJBQWlCLEdBQW9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ25FLE1BQU0sQ0FDSixDQUFDLG9CQUE0QixFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsS0FBSyxXQUFXLENBQ3ZFLENBQ0YsQ0FBQztRQUVGLE9BQU8sQ0FBQyxhQUFhO2FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQzdELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztvSEE1TVUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsMEhBVWpCLG9DQUFvQyxnREN0Q3ZELDQ4Q0FvQ0E7MkZEUmEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNO3NLQWEvQyxlQUFlO3NCQURkLGVBQWU7dUJBQUMsb0NBQW9DLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQVV4RSxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgVGVtcGxhdGVSZWYsXG4gIFF1ZXJ5TGlzdCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgVGREeW5hbWljRm9ybXNTZXJ2aWNlLFxuICBJVGREeW5hbWljRWxlbWVudENvbmZpZyxcbn0gZnJvbSAnLi9zZXJ2aWNlcy9keW5hbWljLWZvcm1zLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGREeW5hbWljRm9ybXNFcnJvclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9keW5hbWljLWVsZW1lbnQuY29tcG9uZW50JztcblxuaW1wb3J0IHsgdGltZXIsIFN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1keW5hbWljLWZvcm1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZm9ybXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLWZvcm1zLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNGb3Jtc0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3JlbmRlcmVkRWxlbWVudHM6IElUZER5bmFtaWNFbGVtZW50Q29uZmlnW10gPSBbXTtcbiAgcHJpdmF0ZSBfZWxlbWVudHMhOiBJVGREeW5hbWljRWxlbWVudENvbmZpZ1tdO1xuICBwcml2YXRlIF90ZW1wbGF0ZU1hcDogTWFwPHN0cmluZywgVGVtcGxhdGVSZWY8YW55Pj4gPSBuZXcgTWFwPFxuICAgIHN0cmluZyxcbiAgICBUZW1wbGF0ZVJlZjxhbnk+XG4gID4oKTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX2Rlc3Ryb3lDb250cm9sJDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcblxuICBAQ29udGVudENoaWxkcmVuKFRkRHluYW1pY0Zvcm1zRXJyb3JUZW1wbGF0ZURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBfZXJyb3JUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGREeW5hbWljRm9ybXNFcnJvclRlbXBsYXRlRGlyZWN0aXZlPjtcbiAgZHluYW1pY0Zvcm0hOiBGb3JtR3JvdXA7XG5cbiAgLyoqXG4gICAqIGVsZW1lbnRzOiBJVGREeW5hbWljRWxlbWVudENvbmZpZ1tdXG4gICAqIEpTIE9iamVjdCB0aGF0IHdpbGwgcmVuZGVyIHRoZSBlbGVtZW50cyBkZXBlbmRpbmcgb24gaXRzIGNvbmZpZy5cbiAgICogW25hbWVdIHByb3BlcnR5IGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGVsZW1lbnRzKGVsZW1lbnRzOiBJVGREeW5hbWljRWxlbWVudENvbmZpZ1tdKSB7XG4gICAgaWYgKGVsZW1lbnRzKSB7XG4gICAgICB0aGlzLl9lbGVtZW50cyA9IGVsZW1lbnRzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbGVtZW50cyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLl9yZXJlbmRlckVsZW1lbnRzKCk7XG4gIH1cbiAgZ2V0IGVsZW1lbnRzKCk6IElUZER5bmFtaWNFbGVtZW50Q29uZmlnW10ge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJlZEVsZW1lbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBwcm9wZXJ0eSBmb3IgZHluYW1pYyBbRm9ybUdyb3VwXS5cbiAgICovXG4gIGdldCBmb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZHluYW1pY0Zvcm07XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIHByb3BlcnR5IGZvciBbdmFsaWRdIG9mIGR5bmFtaWMgW0Zvcm1Hcm91cF0uXG4gICAqL1xuICBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZHluYW1pY0Zvcm0pIHtcbiAgICAgIHJldHVybiB0aGlzLmR5bmFtaWNGb3JtLnZhbGlkO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIHByb3BlcnR5IGZvciBbdmFsdWVdIG9mIGR5bmFtaWMgW0Zvcm1Hcm91cF0uXG4gICAqL1xuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5keW5hbWljRm9ybSkge1xuICAgICAgcmV0dXJuIHRoaXMuZHluYW1pY0Zvcm0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgcHJvcGVydHkgZm9yIFtlcnJvcnNdIG9mIGR5bmFtaWMgW0Zvcm1Hcm91cF0uXG4gICAqL1xuICBnZXQgZXJyb3JzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAodGhpcy5keW5hbWljRm9ybSkge1xuICAgICAgY29uc3QgZXJyb3JzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuZHluYW1pY0Zvcm0uY29udHJvbHMpKSB7XG4gICAgICAgIGVycm9yc1tuYW1lXSA9IHRoaXMuZHluYW1pY0Zvcm0uY29udHJvbHNbbmFtZV0uZXJyb3JzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBwcm9wZXJ0eSBmb3IgW2NvbnRyb2xzXSBvZiBkeW5hbWljIFtGb3JtR3JvdXBdLlxuICAgKi9cbiAgZ2V0IGNvbnRyb2xzKCk6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0ge1xuICAgIGlmICh0aGlzLmR5bmFtaWNGb3JtKSB7XG4gICAgICByZXR1cm4gdGhpcy5keW5hbWljRm9ybS5jb250cm9scztcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgX2R5bmFtaWNGb3Jtc1NlcnZpY2U6IFRkRHluYW1pY0Zvcm1zU2VydmljZSxcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5keW5hbWljRm9ybSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHt9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVFcnJvclRlbXBsYXRlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgwKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2Rlc3Ryb3lDb250cm9sJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgZm9ybSBhbmQgcmVyZW5kZXJzIGFsbCB2YWxpZGF0b3IvZWxlbWVudCBtb2RpZmljYXRpb25zLlxuICAgKi9cbiAgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXJlbmRlckVsZW1lbnRzKCk7XG4gICAgdGhpcy5fdXBkYXRlRXJyb3JUZW1wbGF0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgbWV0aG9kIGZvciBlcnJvciB0ZW1wbGF0ZSByZWZlcmVuY2VzXG4gICAqL1xuICBnZXRFcnJvclRlbXBsYXRlUmVmKG5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZU1hcC5nZXQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgZXJyb3IgdGVtcGxhdGVzIGFuZCBzZXRzIHRoZW0gaW4gYSBtYXAgZm9yIGZhc3RlciBhY2Nlc3MuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVFcnJvclRlbXBsYXRlcygpOiB2b2lkIHtcbiAgICB0aGlzLl90ZW1wbGF0ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICAgIGZvciAoY29uc3QgZXJyb3JUZW1wbGF0ZSBvZiB0aGlzLl9lcnJvclRlbXBsYXRlcy50b0FycmF5KCkpIHtcbiAgICAgIHRoaXMuX3RlbXBsYXRlTWFwLnNldChcbiAgICAgICAgZXJyb3JUZW1wbGF0ZS50ZER5bmFtaWNGb3Jtc0Vycm9yID8/ICcnLFxuICAgICAgICBlcnJvclRlbXBsYXRlLnRlbXBsYXRlUmVmXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlcmVuZGVyRWxlbWVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2xlYXJSZW1vdmVkRWxlbWVudHMoKTtcbiAgICB0aGlzLl9yZW5kZXJlZEVsZW1lbnRzID0gW107XG4gICAgY29uc3QgZHVwbGljYXRlczogc3RyaW5nW10gPSBbXTtcbiAgICB0aGlzLl9lbGVtZW50cy5mb3JFYWNoKChlbGVtOiBJVGREeW5hbWljRWxlbWVudENvbmZpZykgPT4ge1xuICAgICAgdGhpcy5fZHluYW1pY0Zvcm1zU2VydmljZS52YWxpZGF0ZUR5bmFtaWNFbGVtZW50TmFtZShlbGVtLm5hbWUpO1xuICAgICAgaWYgKGR1cGxpY2F0ZXMuaW5kZXhPZihlbGVtLm5hbWUpID4gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEeW5hbWljIGVsZW1lbnQgbmFtZTogXCIke2VsZW0ubmFtZX1cIiBpcyBkdXBsaWNhdGVkYCk7XG4gICAgICB9XG4gICAgICBkdXBsaWNhdGVzLnB1c2goZWxlbS5uYW1lKTtcbiAgICAgIGNvbnN0IGR5bmFtaWNFbGVtZW50OiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gdGhpcy5keW5hbWljRm9ybS5nZXQoXG4gICAgICAgIGVsZW0ubmFtZVxuICAgICAgKTtcbiAgICAgIGlmICghZHluYW1pY0VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5keW5hbWljRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAgIGVsZW0ubmFtZSxcbiAgICAgICAgICB0aGlzLl9keW5hbWljRm9ybXNTZXJ2aWNlLmNyZWF0ZUZvcm1Db250cm9sKGVsZW0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZVRvQ29udHJvbFN0YXR1c0NoYW5nZXMoZWxlbS5uYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGR5bmFtaWNFbGVtZW50LnNldFZhbHVlKGVsZW0uZGVmYXVsdCk7XG4gICAgICAgIGR5bmFtaWNFbGVtZW50Lm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIGR5bmFtaWNFbGVtZW50Lm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICBpZiAoZWxlbS5kaXNhYmxlZCkge1xuICAgICAgICAgIGR5bmFtaWNFbGVtZW50LmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkeW5hbWljRWxlbWVudC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICBkeW5hbWljRWxlbWVudC5zZXRWYWxpZGF0b3JzKFxuICAgICAgICAgIHRoaXMuX2R5bmFtaWNGb3Jtc1NlcnZpY2UuY3JlYXRlVmFsaWRhdG9ycyhlbGVtKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gY29weSBvYmplY3RzIHNvIHRoZXkgYXJlIG9ubHkgY2hhbmdlcyB3aGVuIGNhbGxpbmcgdGhpcyBtZXRob2RcbiAgICAgIHRoaXMuX3JlbmRlcmVkRWxlbWVudHMucHVzaChPYmplY3QuYXNzaWduKHt9LCBlbGVtKSk7XG4gICAgfSk7XG4gICAgLy8gY2FsbCBhIGNoYW5nZSBkZXRlY3Rpb24gc2luY2UgdGhlIHdob2xlIGZvcm0gbWlnaHQgY2hhbmdlXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRpbWVyKDApXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gY2FsbCBhIG1hcmtGb3JDaGVjayBzbyBlbGVtZW50cyBhcmUgcmVuZGVyZWQgY29ycmVjdGx5IGluIE9uUHVzaFxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYXJSZW1vdmVkRWxlbWVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVuZGVyZWRFbGVtZW50cyA9IHRoaXMuX3JlbmRlcmVkRWxlbWVudHMuZmlsdGVyKFxuICAgICAgKHJlbmRlcmVkRWxlbWVudDogSVRkRHluYW1pY0VsZW1lbnRDb25maWcpID0+XG4gICAgICAgICF0aGlzLl9lbGVtZW50cy5zb21lKFxuICAgICAgICAgIChlbGVtZW50OiBJVGREeW5hbWljRWxlbWVudENvbmZpZykgPT5cbiAgICAgICAgICAgIGVsZW1lbnQubmFtZSA9PT0gcmVuZGVyZWRFbGVtZW50Lm5hbWVcbiAgICAgICAgKVxuICAgICk7XG4gICAgLy8gcmVtb3ZlIGVsZW1lbnRzIHRoYXQgd2VyZSByZW1vdmVkIGZyb20gdGhlIGFycmF5XG4gICAgdGhpcy5fcmVuZGVyZWRFbGVtZW50cy5mb3JFYWNoKChlbGVtOiBJVGREeW5hbWljRWxlbWVudENvbmZpZykgPT4ge1xuICAgICAgdGhpcy5fZGVzdHJveUNvbnRyb2wkLm5leHQoZWxlbS5uYW1lKTtcbiAgICAgIHRoaXMuZHluYW1pY0Zvcm0ucmVtb3ZlQ29udHJvbChlbGVtLm5hbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVXBkYXRlcyBjb21wb25lbnQgd2hlbiBtYW51YWxseSBhZGRpbmcgZXJyb3JzIHRvIGNvbnRyb2xzXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvQ29udHJvbFN0YXR1c0NoYW5nZXMoZWxlbWVudE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCA9IHRoaXMuY29udHJvbHNbZWxlbWVudE5hbWVdO1xuXG4gICAgY29uc3QgY29udHJvbERlc3Ryb3llZCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2Rlc3Ryb3lDb250cm9sJC5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoZGVzdHJveWVkRWxlbWVudE5hbWU6IHN0cmluZykgPT4gZGVzdHJveWVkRWxlbWVudE5hbWUgPT09IGVsZW1lbnROYW1lXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSwgdGFrZVVudGlsKGNvbnRyb2xEZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImR5bmFtaWNGb3JtXCIgbm92YWxpZGF0ZT5cbiAgPGRpdiBjbGFzcz1cInRkLWR5bmFtaWMtZm9ybS13cmFwcGVyXCI+XG4gICAgPG5nLXRlbXBsYXRlIGxldC1lbGVtZW50IG5nRm9yIFtuZ0Zvck9mXT1cImVsZW1lbnRzXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidGQtZHluYW1pYy1lbGVtZW50LXdyYXBwZXJcIlxuICAgICAgICBbc3R5bGUubWF4LXdpZHRoLiVdPVwiZWxlbWVudC5mbGV4ID8gZWxlbWVudC5mbGV4IDogMTAwXCJcbiAgICAgICAgW3N0eWxlLmZsZXhdPVwiJzEgMSAnICsgKGVsZW1lbnQuZmxleCA/IGVsZW1lbnQuZmxleCA6IDEwMCkgKyAnJSdcIlxuICAgICAgICBbc3R5bGUuLW1zLWZsZXhdPVwiJzEgMSAnICsgKGVsZW1lbnQuZmxleCA/IGVsZW1lbnQuZmxleCA6IDEwMCkgKyAnJSdcIlxuICAgICAgICBbc3R5bGUuLXdlYmtpdC1ib3gtZmxleF09XCIxXCJcbiAgICAgID5cbiAgICAgICAgPHRkLWR5bmFtaWMtZWxlbWVudFxuICAgICAgICAgICNkeW5hbWljRWxlbWVudFxuICAgICAgICAgICpuZ0lmPVwiZHluYW1pY0Zvcm0uY29udHJvbHNbZWxlbWVudC5uYW1lXVwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJlbGVtZW50Lm5hbWVcIlxuICAgICAgICAgIFtkeW5hbWljQ29udHJvbF09XCJkeW5hbWljRm9ybS5jb250cm9sc1tlbGVtZW50Lm5hbWVdXCJcbiAgICAgICAgICBbaWRdPVwiZWxlbWVudC5uYW1lXCJcbiAgICAgICAgICBbbmFtZV09XCJlbGVtZW50Lm5hbWVcIlxuICAgICAgICAgIFtsYWJlbF09XCJlbGVtZW50LmxhYmVsIHx8IGVsZW1lbnQubmFtZVwiXG4gICAgICAgICAgW2hpbnRdPVwiZWxlbWVudC5oaW50XCJcbiAgICAgICAgICBbdHlwZV09XCJlbGVtZW50LnR5cGVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJlbGVtZW50LnJlcXVpcmVkID8/IGZhbHNlXCJcbiAgICAgICAgICBbbWluXT1cImVsZW1lbnQubWluXCJcbiAgICAgICAgICBbbWF4XT1cImVsZW1lbnQubWF4XCJcbiAgICAgICAgICBbbWluTGVuZ3RoXT1cImVsZW1lbnQubWluTGVuZ3RoXCJcbiAgICAgICAgICBbbWF4TGVuZ3RoXT1cImVsZW1lbnQubWF4TGVuZ3RoXCJcbiAgICAgICAgICBbc2VsZWN0aW9uc109XCJlbGVtZW50LnNlbGVjdGlvbnNcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJlbGVtZW50Lm11bHRpcGxlXCJcbiAgICAgICAgICBbY3VzdG9tQ29uZmlnXT1cImVsZW1lbnQuY3VzdG9tQ29uZmlnXCJcbiAgICAgICAgICBbZXJyb3JNZXNzYWdlVGVtcGxhdGVdPVwiZ2V0RXJyb3JUZW1wbGF0ZVJlZihlbGVtZW50Lm5hbWUpXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZWxlbWVudC5wbGFjZWhvbGRlclwiXG4gICAgICAgID48L3RkLWR5bmFtaWMtZWxlbWVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Zvcm0+XG4iXX0=
@@ -0,0 +1,127 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
+ import { MatFormFieldModule } from '@angular/material/form-field';
5
+ import { MatInputModule } from '@angular/material/input';
6
+ import { MatSelectModule } from '@angular/material/select';
7
+ import { MatCheckboxModule } from '@angular/material/checkbox';
8
+ import { MatSliderModule } from '@angular/material/slider';
9
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
10
+ import { MatIconModule } from '@angular/material/icon';
11
+ import { MatButtonModule } from '@angular/material/button';
12
+ import { MatDatepickerModule } from '@angular/material/datepicker';
13
+ import { CovalentFileModule } from '@covalent/core/file';
14
+ import { TdDynamicFormsComponent } from './dynamic-forms.component';
15
+ import { TdDynamicElementComponent, TdDynamicElementDirective, TdDynamicFormsErrorTemplateDirective, } from './dynamic-element.component';
16
+ import { DYNAMIC_FORMS_PROVIDER } from './services/dynamic-forms.service';
17
+ import { TdDynamicInputComponent } from './dynamic-elements/dynamic-input/dynamic-input.component';
18
+ import { TdDynamicFileInputComponent } from './dynamic-elements/dynamic-file-input/dynamic-file-input.component';
19
+ import { TdDynamicTextareaComponent } from './dynamic-elements/dynamic-textarea/dynamic-textarea.component';
20
+ import { TdDynamicSlideToggleComponent } from './dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component';
21
+ import { TdDynamicCheckboxComponent } from './dynamic-elements/dynamic-checkbox/dynamic-checkbox.component';
22
+ import { TdDynamicSliderComponent } from './dynamic-elements/dynamic-slider/dynamic-slider.component';
23
+ import { TdDynamicSelectComponent } from './dynamic-elements/dynamic-select/dynamic-select.component';
24
+ import { TdDynamicDatepickerComponent } from './dynamic-elements/dynamic-datepicker/dynamic-datepicker.component';
25
+ import * as i0 from "@angular/core";
26
+ const TD_DYNAMIC_FORMS = [
27
+ TdDynamicFormsComponent,
28
+ TdDynamicElementComponent,
29
+ TdDynamicElementDirective,
30
+ TdDynamicFormsErrorTemplateDirective,
31
+ ];
32
+ const TD_DYNAMIC_FORMS_ENTRY_COMPONENTS = [
33
+ TdDynamicInputComponent,
34
+ TdDynamicFileInputComponent,
35
+ TdDynamicTextareaComponent,
36
+ TdDynamicSlideToggleComponent,
37
+ TdDynamicCheckboxComponent,
38
+ TdDynamicSliderComponent,
39
+ TdDynamicSelectComponent,
40
+ TdDynamicDatepickerComponent,
41
+ ];
42
+ export class CovalentDynamicFormsModule {
43
+ }
44
+ CovalentDynamicFormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentDynamicFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
45
+ CovalentDynamicFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentDynamicFormsModule, declarations: [TdDynamicFormsComponent,
46
+ TdDynamicElementComponent,
47
+ TdDynamicElementDirective,
48
+ TdDynamicFormsErrorTemplateDirective,
49
+ TdDynamicInputComponent,
50
+ TdDynamicFileInputComponent,
51
+ TdDynamicTextareaComponent,
52
+ TdDynamicSlideToggleComponent,
53
+ TdDynamicCheckboxComponent,
54
+ TdDynamicSliderComponent,
55
+ TdDynamicSelectComponent,
56
+ TdDynamicDatepickerComponent], imports: [CommonModule,
57
+ ReactiveFormsModule,
58
+ MatFormFieldModule,
59
+ MatInputModule,
60
+ MatSelectModule,
61
+ MatCheckboxModule,
62
+ MatSliderModule,
63
+ MatSlideToggleModule,
64
+ MatIconModule,
65
+ MatButtonModule,
66
+ MatDatepickerModule,
67
+ CovalentFileModule], exports: [TdDynamicFormsComponent,
68
+ TdDynamicElementComponent,
69
+ TdDynamicElementDirective,
70
+ TdDynamicFormsErrorTemplateDirective, TdDynamicInputComponent,
71
+ TdDynamicFileInputComponent,
72
+ TdDynamicTextareaComponent,
73
+ TdDynamicSlideToggleComponent,
74
+ TdDynamicCheckboxComponent,
75
+ TdDynamicSliderComponent,
76
+ TdDynamicSelectComponent,
77
+ TdDynamicDatepickerComponent] });
78
+ CovalentDynamicFormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentDynamicFormsModule, providers: [DYNAMIC_FORMS_PROVIDER], imports: [[
79
+ CommonModule,
80
+ ReactiveFormsModule,
81
+ MatFormFieldModule,
82
+ MatInputModule,
83
+ MatSelectModule,
84
+ MatCheckboxModule,
85
+ MatSliderModule,
86
+ MatSlideToggleModule,
87
+ MatIconModule,
88
+ MatButtonModule,
89
+ MatDatepickerModule,
90
+ CovalentFileModule,
91
+ ]] });
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentDynamicFormsModule, decorators: [{
93
+ type: NgModule,
94
+ args: [{
95
+ declarations: [
96
+ TdDynamicFormsComponent,
97
+ TdDynamicElementComponent,
98
+ TdDynamicElementDirective,
99
+ TdDynamicFormsErrorTemplateDirective,
100
+ TdDynamicInputComponent,
101
+ TdDynamicFileInputComponent,
102
+ TdDynamicTextareaComponent,
103
+ TdDynamicSlideToggleComponent,
104
+ TdDynamicCheckboxComponent,
105
+ TdDynamicSliderComponent,
106
+ TdDynamicSelectComponent,
107
+ TdDynamicDatepickerComponent,
108
+ ],
109
+ imports: [
110
+ CommonModule,
111
+ ReactiveFormsModule,
112
+ MatFormFieldModule,
113
+ MatInputModule,
114
+ MatSelectModule,
115
+ MatCheckboxModule,
116
+ MatSliderModule,
117
+ MatSlideToggleModule,
118
+ MatIconModule,
119
+ MatButtonModule,
120
+ MatDatepickerModule,
121
+ CovalentFileModule,
122
+ ],
123
+ exports: [...TD_DYNAMIC_FORMS, ...TD_DYNAMIC_FORMS_ENTRY_COMPONENTS],
124
+ providers: [DYNAMIC_FORMS_PROVIDER],
125
+ }]
126
+ }] });
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3Jtcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItZHluYW1pYy1mb3Jtcy9zcmMvbGliL2R5bmFtaWMtZm9ybXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUNMLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsb0NBQW9DLEdBQ3JDLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENB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TmdNb2R1bGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0U2xpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5cbmltcG9ydCB7IENvdmFsZW50RmlsZU1vZHVsZSB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2ZpbGUnO1xuXG5pbXBvcnQgeyBUZER5bmFtaWNGb3Jtc0NvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pYy1mb3Jtcy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgVGREeW5hbWljRWxlbWVudENvbXBvbmVudCxcbiAgVGREeW5hbWljRWxlbWVudERpcmVjdGl2ZSxcbiAgVGREeW5hbWljRm9ybXNFcnJvclRlbXBsYXRlRGlyZWN0aXZlLFxufSBmcm9tICcuL2R5bmFtaWMtZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRFlOQU1JQ19GT1JNU19QUk9WSURFUiB9IGZyb20gJy4vc2VydmljZXMvZHluYW1pYy1mb3Jtcy5zZXJ2aWNlJztcblxuaW1wb3J0IHsgVGREeW5hbWljSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1pbnB1dC9keW5hbWljLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZER5bmFtaWNGaWxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1maWxlLWlucHV0L2R5bmFtaWMtZmlsZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljVGV4dGFyZWFDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy10ZXh0YXJlYS9keW5hbWljLXRleHRhcmVhLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZER5bmFtaWNTbGlkZVRvZ2dsZUNvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlLXRvZ2dsZS9keW5hbWljLXNsaWRlLXRvZ2dsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1jaGVja2JveC9keW5hbWljLWNoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZER5bmFtaWNTbGlkZXJDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1zbGlkZXIvZHluYW1pYy1zbGlkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRkRHluYW1pY1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLWRhdGVwaWNrZXIvZHluYW1pYy1kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5cbmNvbnN0IFREX0RZTkFNSUNfRk9STVM6IFR5cGU8YW55PltdID0gW1xuICBUZER5bmFtaWNGb3Jtc0NvbXBvbmVudCxcbiAgVGREeW5hbWljRWxlbWVudENvbXBvbmVudCxcbiAgVGREeW5hbWljRWxlbWVudERpcmVjdGl2ZSxcbiAgVGREeW5hbWljRm9ybXNFcnJvclRlbXBsYXRlRGlyZWN0aXZlLFxuXTtcblxuY29uc3QgVERfRFlOQU1JQ19GT1JNU19FTlRSWV9DT01QT05FTlRTOiBUeXBlPGFueT5bXSA9IFtcbiAgVGREeW5hbWljSW5wdXRDb21wb25lbnQsXG4gIFRkRHluYW1pY0ZpbGVJbnB1dENvbXBvbmVudCxcbiAgVGREeW5hbWljVGV4dGFyZWFDb21wb25lbnQsXG4gIFRkRHluYW1pY1NsaWRlVG9nZ2xlQ29tcG9uZW50LFxuICBUZER5bmFtaWNDaGVja2JveENvbXBvbmVudCxcbiAgVGREeW5hbWljU2xpZGVyQ29tcG9uZW50LFxuICBUZER5bmFtaWNTZWxlY3RDb21wb25lbnQsXG4gIFRkRHluYW1pY0RhdGVwaWNrZXJDb21wb25lbnQsXG5dO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBUZER5bmFtaWNGb3Jtc0NvbXBvbmVudCxcbiAgICBUZER5bmFtaWNFbGVtZW50Q29tcG9uZW50LFxuICAgIFRkRHluYW1pY0VsZW1lbnREaXJlY3RpdmUsXG4gICAgVGREeW5hbWljRm9ybXNFcnJvclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFRkRHluYW1pY0lucHV0Q29tcG9uZW50LFxuICAgIFRkRHluYW1pY0ZpbGVJbnB1dENvbXBvbmVudCxcbiAgICBUZER5bmFtaWNUZXh0YXJlYUNvbXBvbmVudCxcbiAgICBUZER5bmFtaWNTbGlkZVRvZ2dsZUNvbXBvbmVudCxcbiAgICBUZER5bmFtaWNDaGVja2JveENvbXBvbmVudCxcbiAgICBUZER5bmFtaWNTbGlkZXJDb21wb25lbnQsXG4gICAgVGREeW5hbWljU2VsZWN0Q29tcG9uZW50LFxuICAgIFRkRHluYW1pY0RhdGVwaWNrZXJDb21wb25lbnQsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgIE1hdFNsaWRlck1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgIENvdmFsZW50RmlsZU1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogWy4uLlREX0RZTkFNSUNfRk9STVMsIC4uLlREX0RZTkFNSUNfRk9STVNfRU5UUllfQ09NUE9ORU5UU10sXG4gIHByb3ZpZGVyczogW0RZTkFNSUNfRk9STVNfUFJPVklERVJdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3ZhbGVudER5bmFtaWNGb3Jtc01vZHVsZSB7fVxuIl19
@@ -0,0 +1,140 @@
1
+ import { Injectable, SkipSelf, Optional } from '@angular/core';
2
+ import { Validators, FormControl } from '@angular/forms';
3
+ import { TdDynamicInputComponent } from '../dynamic-elements/dynamic-input/dynamic-input.component';
4
+ import { TdDynamicFileInputComponent } from '../dynamic-elements/dynamic-file-input/dynamic-file-input.component';
5
+ import { TdDynamicTextareaComponent } from '../dynamic-elements/dynamic-textarea/dynamic-textarea.component';
6
+ import { TdDynamicSlideToggleComponent } from '../dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component';
7
+ import { TdDynamicCheckboxComponent } from '../dynamic-elements/dynamic-checkbox/dynamic-checkbox.component';
8
+ import { TdDynamicSliderComponent } from '../dynamic-elements/dynamic-slider/dynamic-slider.component';
9
+ import { TdDynamicSelectComponent } from '../dynamic-elements/dynamic-select/dynamic-select.component';
10
+ import { TdDynamicDatepickerComponent } from '../dynamic-elements/dynamic-datepicker/dynamic-datepicker.component';
11
+ import * as i0 from "@angular/core";
12
+ export var TdDynamicType;
13
+ (function (TdDynamicType) {
14
+ TdDynamicType["Text"] = "text";
15
+ TdDynamicType["Boolean"] = "boolean";
16
+ TdDynamicType["Number"] = "number";
17
+ TdDynamicType["Array"] = "array";
18
+ TdDynamicType["Date"] = "date";
19
+ })(TdDynamicType || (TdDynamicType = {}));
20
+ export var TdDynamicElement;
21
+ (function (TdDynamicElement) {
22
+ TdDynamicElement["Input"] = "input";
23
+ TdDynamicElement["Datepicker"] = "datepicker";
24
+ TdDynamicElement["Password"] = "password";
25
+ TdDynamicElement["Textarea"] = "textarea";
26
+ TdDynamicElement["Slider"] = "slider";
27
+ TdDynamicElement["SlideToggle"] = "slide-toggle";
28
+ TdDynamicElement["Checkbox"] = "checkbox";
29
+ TdDynamicElement["Select"] = "select";
30
+ TdDynamicElement["FileInput"] = "file-input";
31
+ })(TdDynamicElement || (TdDynamicElement = {}));
32
+ export const DYNAMIC_ELEMENT_NAME_REGEX = /^[^0-9][^@]*$/;
33
+ export class TdDynamicFormsService {
34
+ /**
35
+ * Method to validate if the [name] is a proper element name.
36
+ * Throws error if name is not valid.
37
+ */
38
+ validateDynamicElementName(name) {
39
+ if (!DYNAMIC_ELEMENT_NAME_REGEX.test(name)) {
40
+ throw new Error('Dynamic element name: "${name}" is not valid.');
41
+ }
42
+ }
43
+ /**
44
+ * Gets component to be rendered depending on [TdDynamicElement | TdDynamicType]
45
+ * Throws error if it does not exists or not supported.
46
+ */
47
+ getDynamicElement(element) {
48
+ switch (element) {
49
+ case TdDynamicType.Text:
50
+ case TdDynamicType.Number:
51
+ case TdDynamicElement.Input:
52
+ case TdDynamicElement.Password:
53
+ return TdDynamicInputComponent;
54
+ case TdDynamicElement.Textarea:
55
+ return TdDynamicTextareaComponent;
56
+ case TdDynamicType.Boolean:
57
+ case TdDynamicElement.SlideToggle:
58
+ return TdDynamicSlideToggleComponent;
59
+ case TdDynamicElement.Checkbox:
60
+ return TdDynamicCheckboxComponent;
61
+ case TdDynamicElement.Slider:
62
+ return TdDynamicSliderComponent;
63
+ case TdDynamicType.Array:
64
+ case TdDynamicElement.Select:
65
+ return TdDynamicSelectComponent;
66
+ case TdDynamicElement.FileInput:
67
+ return TdDynamicFileInputComponent;
68
+ case TdDynamicElement.Datepicker:
69
+ case TdDynamicType.Date:
70
+ return TdDynamicDatepickerComponent;
71
+ default:
72
+ throw new Error(`Error: type ${element} does not exist or not supported.`);
73
+ }
74
+ }
75
+ /**
76
+ * Creates form control for element depending [ITdDynamicElementConfig] properties.
77
+ */
78
+ createFormControl(config) {
79
+ const validator = this.createValidators(config);
80
+ return new FormControl({ value: config.default, disabled: config.disabled }, validator);
81
+ }
82
+ /**
83
+ * Creates form validationdepending [ITdDynamicElementConfig] properties.
84
+ */
85
+ createValidators(config) {
86
+ let validator = null;
87
+ if (config.required) {
88
+ validator = Validators.required;
89
+ }
90
+ if (config.max || config.max === 0) {
91
+ validator = Validators.compose([
92
+ validator,
93
+ Validators.max(parseFloat(config.max)),
94
+ ]);
95
+ }
96
+ if (config.min || config.min === 0) {
97
+ validator = Validators.compose([
98
+ validator,
99
+ Validators.min(parseFloat(config.min)),
100
+ ]);
101
+ }
102
+ if (config.maxLength || config.maxLength === 0) {
103
+ validator = Validators.compose([
104
+ validator,
105
+ Validators.maxLength(parseFloat(config.maxLength)),
106
+ ]);
107
+ }
108
+ if (config.minLength || config.minLength === 0) {
109
+ validator = Validators.compose([
110
+ validator,
111
+ Validators.minLength(parseFloat(config.minLength)),
112
+ ]);
113
+ }
114
+ // Add provided custom validators to the validator function
115
+ if (config.validators) {
116
+ config.validators.forEach((validatorConfig) => {
117
+ validator = Validators.compose([
118
+ validator,
119
+ validatorConfig.validator,
120
+ ]);
121
+ });
122
+ }
123
+ return validator;
124
+ }
125
+ }
126
+ TdDynamicFormsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
127
+ TdDynamicFormsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsService });
128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicFormsService, decorators: [{
129
+ type: Injectable
130
+ }] });
131
+ export function DYNAMIC_FORMS_PROVIDER_FACTORY(parent) {
132
+ return parent || new TdDynamicFormsService();
133
+ }
134
+ export const DYNAMIC_FORMS_PROVIDER = {
135
+ // If there is already a service available, use that. Otherwise, provide a new one.
136
+ provide: TdDynamicFormsService,
137
+ deps: [[new Optional(), new SkipSelf(), TdDynamicFormsService]],
138
+ useFactory: DYNAMIC_FORMS_PROVIDER_FACTORY,
139
+ };
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3Jtcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWR5bmFtaWMtZm9ybXMvc3JjL2xpYi9zZXJ2aWNlcy9keW5hbWljLWZvcm1zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxRQUFRLEVBQUUsUUFBUSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQWUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDcEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDbEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDN0csT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDeEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDN0csT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDdkcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDdkcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUVBQXFFLENBQUM7O0FBRW5ILE1BQU0sQ0FBTixJQUFZLGFBTVg7QUFORCxXQUFZLGFBQWE7SUFDdkIsOEJBQWEsQ0FBQTtJQUNiLG9DQUFtQixDQUFBO0lBQ25CLGtDQUFpQixDQUFBO0lBQ2pCLGdDQUFlLENBQUE7SUFDZiw4QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQU5XLGFBQWEsS0FBYixhQUFhLFFBTXhCO0FBRUQsTUFBTSxDQUFOLElBQVksZ0JBVVg7QUFWRCxXQUFZLGdCQUFnQjtJQUMxQixtQ0FBZSxDQUFBO0lBQ2YsNkNBQXlCLENBQUE7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RSxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDL0QsVUFBVSxFQUFFLDhCQUE4QjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgUHJvdmlkZXIsIFNraXBTZWxmLCBPcHRpb25hbCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdG9ycywgVmFsaWRhdG9yRm4sIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBUZER5bmFtaWNJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1pbnB1dC9keW5hbWljLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZER5bmFtaWNGaWxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtZmlsZS1pbnB1dC9keW5hbWljLWZpbGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRkRHluYW1pY1RleHRhcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXRleHRhcmVhL2R5bmFtaWMtdGV4dGFyZWEuY29tcG9uZW50JztcbmltcG9ydCB7IFRkRHluYW1pY1NsaWRlVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlLXRvZ2dsZS9keW5hbWljLXNsaWRlLXRvZ2dsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtY2hlY2tib3gvZHluYW1pYy1jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljU2xpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlci9keW5hbWljLXNsaWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGREeW5hbWljRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1kYXRlcGlja2VyL2R5bmFtaWMtZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuXG5leHBvcnQgZW51bSBUZER5bmFtaWNUeXBlIHtcbiAgVGV4dCA9ICd0ZXh0JyxcbiAgQm9vbGVhbiA9ICdib29sZWFuJyxcbiAgTnVtYmVyID0gJ251bWJlcicsXG4gIEFycmF5ID0gJ2FycmF5JyxcbiAgRGF0ZSA9ICdkYXRlJyxcbn1cblxuZXhwb3J0IGVudW0gVGREeW5hbWljRWxlbWVudCB7XG4gIElucHV0ID0gJ2lucHV0JyxcbiAgRGF0ZXBpY2tlciA9ICdkYXRlcGlja2VyJyxcbiAgUGFzc3dvcmQgPSAncGFzc3dvcmQnLFxuICBUZXh0YXJlYSA9ICd0ZXh0YXJlYScsXG4gIFNsaWRlciA9ICdzbGlkZXInLFxuICBTbGlkZVRvZ2dsZSA9ICdzbGlkZS10b2dnbGUnLFxuICBDaGVja2JveCA9ICdjaGVja2JveCcsXG4gIFNlbGVjdCA9ICdzZWxlY3QnLFxuICBGaWxlSW5wdXQgPSAnZmlsZS1pbnB1dCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRkRHluYW1pY0VsZW1lbnRWYWxpZGF0b3Ige1xuICB2YWxpZGF0b3I6IFZhbGlkYXRvckZuO1xufVxuXG4vLyBQcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgc2V0IGluIGN1c3RvbSBjb21wb25lbnRcbmV4cG9ydCBpbnRlcmZhY2UgSVRkRHluYW1pY0VsZW1lbnRDdXN0b21Db25maWcge1xuICBbbmFtZTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUZER5bmFtaWNFbGVtZW50Q29uZmlnIHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgaGludD86IHN0cmluZztcbiAgdHlwZTogVGREeW5hbWljVHlwZSB8IFRkRHluYW1pY0VsZW1lbnQgfCBUeXBlPGFueT47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBtaW4/OiBhbnk7XG4gIG1heD86IGFueTtcbiAgbWluTGVuZ3RoPzogYW55O1xuICBtYXhMZW5ndGg/OiBhbnk7XG4gIHNlbGVjdGlvbnM/OiBzdHJpbmdbXSB8IHsgdmFsdWU6IGFueTsgbGFiZWw6IHN0cmluZyB9W107XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGVmYXVsdD86IGFueTtcbiAgZmxleD86IG51bWJlcjtcbiAgdmFsaWRhdG9ycz86IElUZER5bmFtaWNFbGVtZW50VmFsaWRhdG9yW107XG4gIGN1c3RvbUNvbmZpZz86IElUZER5bmFtaWNFbGVtZW50Q3VzdG9tQ29uZmlnO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERZTkFNSUNfRUxFTUVOVF9OQU1FX1JFR0VYID0gL15bXjAtOV1bXkBdKiQvO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGREeW5hbWljRm9ybXNTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIE1ldGhvZCB0byB2YWxpZGF0ZSBpZiB0aGUgW25hbWVdIGlzIGEgcHJvcGVyIGVsZW1lbnQgbmFtZS5cbiAgICogVGhyb3dzIGVycm9yIGlmIG5hbWUgaXMgbm90IHZhbGlkLlxuICAgKi9cbiAgdmFsaWRhdGVEeW5hbWljRWxlbWVudE5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFEWU5BTUlDX0VMRU1FTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtaWMgZWxlbWVudCBuYW1lOiBcIiR7bmFtZX1cIiBpcyBub3QgdmFsaWQuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkIGRlcGVuZGluZyBvbiBbVGREeW5hbWljRWxlbWVudCB8IFRkRHluYW1pY1R5cGVdXG4gICAqIFRocm93cyBlcnJvciBpZiBpdCBkb2VzIG5vdCBleGlzdHMgb3Igbm90IHN1cHBvcnRlZC5cbiAgICovXG4gIGdldER5bmFtaWNFbGVtZW50KFxuICAgIGVsZW1lbnQ6IFRkRHluYW1pY0VsZW1lbnQgfCBUZER5bmFtaWNUeXBlIHwgVHlwZTxhbnk+IHwgdW5kZWZpbmVkXG4gICk6IGFueSB7XG4gICAgc3dpdGNoIChlbGVtZW50KSB7XG4gICAgICBjYXNlIFRkRHluYW1pY1R5cGUuVGV4dDpcbiAgICAgIGNhc2UgVGREeW5hbWljVHlwZS5OdW1iZXI6XG4gICAgICBjYXNlIFRkRHluYW1pY0VsZW1lbnQuSW5wdXQ6XG4gICAgICBjYXNlIFRkRHluYW1pY0VsZW1lbnQuUGFzc3dvcmQ6XG4gICAgICAgIHJldHVybiBUZER5bmFtaWNJbnB1dENvbXBvbmVudDtcbiAgICAgIGNhc2UgVGREeW5hbWljRWxlbWVudC5UZXh0YXJlYTpcbiAgICAgICAgcmV0dXJuIFRkRHluYW1pY1RleHRhcmVhQ29tcG9uZW50O1xuICAgICAgY2FzZSBUZER5bmFtaWNUeXBlLkJvb2xlYW46XG4gICAgICBjYXNlIFRkRHluYW1pY0VsZW1lbnQuU2xpZGVUb2dnbGU6XG4gICAgICAgIHJldHVybiBUZER5bmFtaWNTbGlkZVRvZ2dsZUNvbXBvbmVudDtcbiAgICAgIGNhc2UgVGREeW5hbWljRWxlbWVudC5DaGVja2JveDpcbiAgICAgICAgcmV0dXJuIFRkRHluYW1pY0NoZWNrYm94Q29tcG9uZW50O1xuICAgICAgY2FzZSBUZER5bmFtaWNFbGVtZW50LlNsaWRlcjpcbiAgICAgICAgcmV0dXJuIFRkRHluYW1pY1NsaWRlckNvbXBvbmVudDtcbiAgICAgIGNhc2UgVGREeW5hbWljVHlwZS5BcnJheTpcbiAgICAgIGNhc2UgVGREeW5hbWljRWxlbWVudC5TZWxlY3Q6XG4gICAgICAgIHJldHVybiBUZER5bmFtaWNTZWxlY3RDb21wb25lbnQ7XG4gICAgICBjYXNlIFRkRHluYW1pY0VsZW1lbnQuRmlsZUlucHV0OlxuICAgICAgICByZXR1cm4gVGREeW5hbWljRmlsZUlucHV0Q29tcG9uZW50O1xuICAgICAgY2FzZSBUZER5bmFtaWNFbGVtZW50LkRhdGVwaWNrZXI6XG4gICAgICBjYXNlIFRkRHluYW1pY1R5cGUuRGF0ZTpcbiAgICAgICAgcmV0dXJuIFRkRHluYW1pY0RhdGVwaWNrZXJDb21wb25lbnQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEVycm9yOiB0eXBlICR7ZWxlbWVudH0gZG9lcyBub3QgZXhpc3Qgb3Igbm90IHN1cHBvcnRlZC5gXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZm9ybSBjb250cm9sIGZvciBlbGVtZW50IGRlcGVuZGluZyBbSVRkRHluYW1pY0VsZW1lbnRDb25maWddIHByb3BlcnRpZXMuXG4gICAqL1xuICBjcmVhdGVGb3JtQ29udHJvbChjb25maWc6IElUZER5bmFtaWNFbGVtZW50Q29uZmlnKTogRm9ybUNvbnRyb2wge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuY3JlYXRlVmFsaWRhdG9ycyhjb25maWcpO1xuICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2woXG4gICAgICB7IHZhbHVlOiBjb25maWcuZGVmYXVsdCwgZGlzYWJsZWQ6IGNvbmZpZy5kaXNhYmxlZCB9LFxuICAgICAgdmFsaWRhdG9yXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGZvcm0gdmFsaWRhdGlvbmRlcGVuZGluZyBbSVRkRHluYW1pY0VsZW1lbnRDb25maWddIHByb3BlcnRpZXMuXG4gICAqL1xuICBjcmVhdGVWYWxpZGF0b3JzKGNvbmZpZzogSVRkRHluYW1pY0VsZW1lbnRDb25maWcpOiBWYWxpZGF0b3JGbiB8IG51bGwge1xuICAgIGxldCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGNvbmZpZy5yZXF1aXJlZCkge1xuICAgICAgdmFsaWRhdG9yID0gVmFsaWRhdG9ycy5yZXF1aXJlZDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5tYXggfHwgY29uZmlnLm1heCA9PT0gMCkge1xuICAgICAgdmFsaWRhdG9yID0gVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgdmFsaWRhdG9yLFxuICAgICAgICBWYWxpZGF0b3JzLm1heChwYXJzZUZsb2F0KGNvbmZpZy5tYXgpKSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLm1pbiB8fCBjb25maWcubWluID09PSAwKSB7XG4gICAgICB2YWxpZGF0b3IgPSBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICB2YWxpZGF0b3IsXG4gICAgICAgIFZhbGlkYXRvcnMubWluKHBhcnNlRmxvYXQoY29uZmlnLm1pbikpLFxuICAgICAgXSk7XG4gICAgfVxuICAgIGlmIChjb25maWcubWF4TGVuZ3RoIHx8IGNvbmZpZy5tYXhMZW5ndGggPT09IDApIHtcbiAgICAgIHZhbGlkYXRvciA9IFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIHZhbGlkYXRvcixcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgocGFyc2VGbG9hdChjb25maWcubWF4TGVuZ3RoKSksXG4gICAgICBdKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5taW5MZW5ndGggfHwgY29uZmlnLm1pbkxlbmd0aCA9PT0gMCkge1xuICAgICAgdmFsaWRhdG9yID0gVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgdmFsaWRhdG9yLFxuICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aChwYXJzZUZsb2F0KGNvbmZpZy5taW5MZW5ndGgpKSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICAvLyBBZGQgcHJvdmlkZWQgY3VzdG9tIHZhbGlkYXRvcnMgdG8gdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuICAgIGlmIChjb25maWcudmFsaWRhdG9ycykge1xuICAgICAgY29uZmlnLnZhbGlkYXRvcnMuZm9yRWFjaChcbiAgICAgICAgKHZhbGlkYXRvckNvbmZpZzogSVRkRHluYW1pY0VsZW1lbnRWYWxpZGF0b3IpID0+IHtcbiAgICAgICAgICB2YWxpZGF0b3IgPSBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgdmFsaWRhdG9yLFxuICAgICAgICAgICAgdmFsaWRhdG9yQ29uZmlnLnZhbGlkYXRvcixcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRFlOQU1JQ19GT1JNU19QUk9WSURFUl9GQUNUT1JZKFxuICBwYXJlbnQ6IFRkRHluYW1pY0Zvcm1zU2VydmljZVxuKTogVGREeW5hbWljRm9ybXNTZXJ2aWNlIHtcbiAgcmV0dXJuIHBhcmVudCB8fCBuZXcgVGREeW5hbWljRm9ybXNTZXJ2aWNlKCk7XG59XG5cbmV4cG9ydCBjb25zdCBEWU5BTUlDX0ZPUk1TX1BST1ZJREVSOiBQcm92aWRlciA9IHtcbiAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNlcnZpY2UgYXZhaWxhYmxlLCB1c2UgdGhhdC4gT3RoZXJ3aXNlLCBwcm92aWRlIGEgbmV3IG9uZS5cbiAgcHJvdmlkZTogVGREeW5hbWljRm9ybXNTZXJ2aWNlLFxuICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgVGREeW5hbWljRm9ybXNTZXJ2aWNlXV0sXG4gIHVzZUZhY3Rvcnk6IERZTkFNSUNfRk9STVNfUFJPVklERVJfRkFDVE9SWSxcbn07XG4iXX0=
@@ -0,0 +1,13 @@
1
+ export * from './lib/dynamic-forms.module';
2
+ export * from './lib/dynamic-forms.component';
3
+ export * from './lib/dynamic-element.component';
4
+ export * from './lib/services/dynamic-forms.service';
5
+ export * from './lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component';
6
+ export * from './lib/dynamic-elements/dynamic-slider/dynamic-slider.component';
7
+ export * from './lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component';
8
+ export * from './lib/dynamic-elements/dynamic-select/dynamic-select.component';
9
+ export * from './lib/dynamic-elements/dynamic-input/dynamic-input.component';
10
+ export * from './lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component';
11
+ export * from './lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component';
12
+ export * from './lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component';
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxvRUFBb0UsQ0FBQztBQUNuRixjQUFjLGdFQUFnRSxDQUFDO0FBQy9FLGNBQWMsNEVBQTRFLENBQUM7QUFDM0YsY0FBYyxnRUFBZ0UsQ0FBQztBQUMvRSxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsd0VBQXdFLENBQUM7QUFDdkYsY0FBYyx3RUFBd0UsQ0FBQztBQUN2RixjQUFjLG9FQUFvRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3Jtcy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3Jtcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1lbGVtZW50LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9keW5hbWljLWZvcm1zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXRleHRhcmVhL2R5bmFtaWMtdGV4dGFyZWEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1zbGlkZXIvZHluYW1pYy1zbGlkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1zbGlkZS10b2dnbGUvZHluYW1pYy1zbGlkZS10b2dnbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1pbnB1dC9keW5hbWljLWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtZmlsZS1pbnB1dC9keW5hbWljLWZpbGUtaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1kYXRlcGlja2VyL2R5bmFtaWMtZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLWNoZWNrYm94L2R5bmFtaWMtY2hlY2tib3guY29tcG9uZW50JztcbiJdfQ==