@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.
- package/README.md +183 -0
- package/covalent-dynamic-forms.d.ts +5 -0
- package/esm2020/covalent-dynamic-forms.mjs +5 -0
- package/esm2020/lib/behaviors/control-value-accesor.mixin.mjs +41 -0
- package/esm2020/lib/dynamic-element.component.mjs +178 -0
- package/esm2020/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.mjs +19 -0
- package/esm2020/lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.mjs +23 -0
- package/esm2020/lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component.mjs +28 -0
- package/esm2020/lib/dynamic-elements/dynamic-input/dynamic-input.component.mjs +22 -0
- package/esm2020/lib/dynamic-elements/dynamic-select/dynamic-select.component.mjs +23 -0
- package/esm2020/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.mjs +19 -0
- package/esm2020/lib/dynamic-elements/dynamic-slider/dynamic-slider.component.mjs +26 -0
- package/esm2020/lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component.mjs +22 -0
- package/esm2020/lib/dynamic-forms.component.mjs +185 -0
- package/esm2020/lib/dynamic-forms.module.mjs +127 -0
- package/esm2020/lib/services/dynamic-forms.service.mjs +140 -0
- package/esm2020/public_api.mjs +13 -0
- package/fesm2015/covalent-dynamic-forms.mjs +787 -0
- package/fesm2015/covalent-dynamic-forms.mjs.map +1 -0
- package/fesm2020/covalent-dynamic-forms.mjs +785 -0
- package/fesm2020/covalent-dynamic-forms.mjs.map +1 -0
- package/lib/behaviors/control-value-accesor.mixin.d.ts +16 -0
- package/lib/dynamic-element.component.d.ts +103 -0
- package/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.d.ts +11 -0
- package/lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.d.ts +17 -0
- package/lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component.d.ts +15 -0
- package/lib/dynamic-elements/dynamic-input/dynamic-input.component.d.ts +19 -0
- package/lib/dynamic-elements/dynamic-select/dynamic-select.component.d.ts +16 -0
- package/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.d.ts +11 -0
- package/lib/dynamic-elements/dynamic-slider/dynamic-slider.component.d.ts +17 -0
- package/lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component.d.ts +14 -0
- package/lib/dynamic-forms.component.d.ts +68 -0
- package/lib/dynamic-forms.module.d.ts +28 -0
- package/lib/services/dynamic-forms.service.d.ts +74 -0
- package/package.json +40 -0
- package/public_api.d.ts +12 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/form-field";
|
|
4
|
+
import * as i2 from "@angular/material/select";
|
|
5
|
+
import * as i3 from "@angular/material/core";
|
|
6
|
+
import * as i4 from "@angular/forms";
|
|
7
|
+
import * as i5 from "@angular/common";
|
|
8
|
+
export class TdDynamicSelectComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.label = '';
|
|
11
|
+
this.hint = '';
|
|
12
|
+
this.name = '';
|
|
13
|
+
this.required = false;
|
|
14
|
+
this.placeholder = '';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
TdDynamicSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18
|
+
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.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i1.MatLabel, selector: "mat-label" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i5.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: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSelectComponent, decorators: [{
|
|
20
|
+
type: Component,
|
|
21
|
+
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"] }]
|
|
22
|
+
}] });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWR5bmFtaWMtZm9ybXMvc3JjL2xpYi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBUXZELE1BQU0sT0FBTyx3QkFBd0I7SUFMckM7UUFRRSxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVWLFNBQUksR0FBRyxFQUFFLENBQUM7UUFFVixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBUWpCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO0tBQ2xCOztxSEFsQlksd0JBQXdCO3lHQUF4Qix3QkFBd0IseURDUnJDLDgwQkE2QkE7MkZEckJhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtZHluYW1pYy1zZWxlY3QnLFxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNTZWxlY3RDb21wb25lbnQge1xuICBjb250cm9sITogRm9ybUNvbnRyb2w7XG5cbiAgbGFiZWwgPSAnJztcblxuICBoaW50ID0gJyc7XG5cbiAgbmFtZSA9ICcnO1xuXG4gIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgc2VsZWN0aW9ucz86IGFueVtdO1xuXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcblxuICBlcnJvck1lc3NhZ2VUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcGxhY2Vob2xkZXIgPSAnJztcbn1cbiIsIjxkaXYgY2xhc3M9XCJ0ZC1keW5hbWljLXNlbGVjdC13cmFwcGVyXCI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInRkLWR5bmFtaWMtc2VsZWN0LWZpZWxkXCI+XG4gICAgPG1hdC1sYWJlbD57eyBsYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDxtYXQtc2VsZWN0XG4gICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3Rpb24gb2Ygc2VsZWN0aW9uc1wiXG4gICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rpb24udmFsdWUgfHwgc2VsZWN0aW9uXCJcbiAgICAgID5cbiAgICAgICAge3sgc2VsZWN0aW9uLmxhYmVsIHx8IHNlbGVjdGlvbiB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8bWF0LWhpbnQ+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG4gICAgPG1hdC1lcnJvcj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvck1lc3NhZ2VUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgY29udHJvbDogY29udHJvbCxcbiAgICAgICAgICBlcnJvcnM6IGNvbnRyb2w/LmVycm9yc1xuICAgICAgICB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/slide-toggle";
|
|
4
|
+
import * as i2 from "@angular/forms";
|
|
5
|
+
export class TdDynamicSlideToggleComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.label = '';
|
|
8
|
+
this.name = '';
|
|
9
|
+
this.hint = '';
|
|
10
|
+
this.required = false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
TdDynamicSlideToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSlideToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
14
|
+
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.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.MatSlideToggleRequiredValidator, selector: "mat-slide-toggle[required][formControlName], mat-slide-toggle[required][formControl], mat-slide-toggle[required][ngModel]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }] });
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSlideToggleComponent, decorators: [{
|
|
16
|
+
type: Component,
|
|
17
|
+
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: [""] }]
|
|
18
|
+
}] });
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zbGlkZS10b2dnbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWR5bmFtaWMtZm9ybXMvc3JjL2xpYi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2xpZGUtdG9nZ2xlL2R5bmFtaWMtc2xpZGUtdG9nZ2xlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlLXRvZ2dsZS9keW5hbWljLXNsaWRlLXRvZ2dsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUTFDLE1BQU0sT0FBTyw2QkFBNkI7SUFMMUM7UUFRRSxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVWLFNBQUksR0FBRyxFQUFFLENBQUM7UUFFVixhQUFRLEdBQUcsS0FBSyxDQUFDO0tBQ2xCOzswSEFWWSw2QkFBNkI7OEdBQTdCLDZCQUE2QiwrRENSMUMseVJBVUE7MkZERmEsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RkLWR5bmFtaWMtc2xpZGUtdG9nZ2xlJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHluYW1pYy1zbGlkZS10b2dnbGUuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtc2xpZGUtdG9nZ2xlLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgVGREeW5hbWljU2xpZGVUb2dnbGVDb21wb25lbnQge1xuICBjb250cm9sITogRm9ybUNvbnRyb2w7XG5cbiAgbGFiZWwgPSAnJztcblxuICBuYW1lID0gJyc7XG5cbiAgaGludCA9ICcnO1xuXG4gIHJlcXVpcmVkID0gZmFsc2U7XG59XG4iLCI8ZGl2IGNsYXNzPVwidGQtZHluYW1pYy1zbGlkZS10b2dnbGUtd3JhcHBlclwiPlxuICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gID5cbiAgICB7eyBsYWJlbCB9fVxuICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDxzcGFuIGNsYXNzPVwibWF0LWhpbnQgdGQtZHluYW1pYy1lbGVtZW50LWhpbnRcIj57eyBoaW50IH19PC9zcGFuPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Component, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/slider";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "@angular/forms";
|
|
6
|
+
export class TdDynamicSliderComponent {
|
|
7
|
+
constructor(_changeDetectorRef) {
|
|
8
|
+
this._changeDetectorRef = _changeDetectorRef;
|
|
9
|
+
this.label = '';
|
|
10
|
+
this.required = false;
|
|
11
|
+
this.name = '';
|
|
12
|
+
this.hint = '';
|
|
13
|
+
}
|
|
14
|
+
_handleBlur() {
|
|
15
|
+
setTimeout(() => {
|
|
16
|
+
this._changeDetectorRef.markForCheck();
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
TdDynamicSliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSliderComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
21
|
+
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.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: i2.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"] }] });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicSliderComponent, decorators: [{
|
|
23
|
+
type: Component,
|
|
24
|
+
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"] }]
|
|
25
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zbGlkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWR5bmFtaWMtZm9ybXMvc3JjL2xpYi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2xpZGVyL2R5bmFtaWMtc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlci9keW5hbWljLXNsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVE3RCxNQUFNLE9BQU8sd0JBQXdCO0lBZW5DLFlBQW9CLGtCQUFxQztRQUFyQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBWnpELFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFFVixTQUFJLEdBQUcsRUFBRSxDQUFDO0lBTWtELENBQUM7SUFFN0QsV0FBVztRQUNULFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztxSEFyQlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IseURDUnJDLGs0QkE4QkE7MkZEdEJhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtZHluYW1pYy1zbGlkZXInLFxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLXNsaWRlci5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNTbGlkZXJDb21wb25lbnQge1xuICBjb250cm9sITogRm9ybUNvbnRyb2w7XG5cbiAgbGFiZWwgPSAnJztcblxuICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIG5hbWUgPSAnJztcblxuICBoaW50ID0gJyc7XG5cbiAgbWluPzogbnVtYmVyO1xuXG4gIG1heD86IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgX2hhbmRsZUJsdXIoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInRkLWR5bmFtaWMtc2xpZGVyLXdyYXBwZXIgbWF0LWZvcm0tZmllbGQgbWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFwiXG4gIFtjbGFzcy5tYXQtZm9jdXNlZF09XCJzbGlkZXIuX2lzQWN0aXZlXCJcbj5cbiAgPHNwYW4gY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtbGFiZWwgbWF0LXByaW1hcnkgdGQtc2xpZGVyLWxhYmVsXCI+XG4gICAgICB7eyBsYWJlbCB9fVxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCJyZXF1aXJlZCAmJiAhY29udHJvbD8uZGlzYWJsZWRcIlxuICAgICAgICBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlclwiXG4gICAgICAgID4qPC9zcGFuXG4gICAgICA+XG4gICAgPC9sYWJlbD5cbiAgPC9zcGFuPlxuICA8ZGl2IGNsYXNzPVwidGQtZHluYW1pYy1zbGlkZXItZmllbGRcIj5cbiAgICA8bWF0LXNsaWRlclxuICAgICAgI3NsaWRlclxuICAgICAgY2xhc3M9XCJ0ZC1keW5hbWljLXNsaWRlclwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgW21heF09XCJtYXhcIlxuICAgICAgdGh1bWJMYWJlbFxuICAgICAgdGlja0ludGVydmFsPVwiYXV0b1wiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgKGJsdXIpPVwiX2hhbmRsZUJsdXIoKVwiXG4gICAgPjwvbWF0LXNsaWRlcj5cbiAgPC9kaXY+XG4gIDxzcGFuIGNsYXNzPVwibWF0LWhpbnQgdGQtZHluYW1pYy1lbGVtZW50LWhpbnRcIj57eyBoaW50IH19PC9zcGFuPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/form-field";
|
|
4
|
+
import * as i2 from "@angular/material/input";
|
|
5
|
+
import * as i3 from "@angular/forms";
|
|
6
|
+
import * as i4 from "@angular/common";
|
|
7
|
+
export class TdDynamicTextareaComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.label = '';
|
|
10
|
+
this.hint = '';
|
|
11
|
+
this.name = '';
|
|
12
|
+
this.required = false;
|
|
13
|
+
this.placeholder = '';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
TdDynamicTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicTextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
17
|
+
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"] }] });
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdDynamicTextareaComponent, decorators: [{
|
|
19
|
+
type: Component,
|
|
20
|
+
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"] }]
|
|
21
|
+
}] });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10ZXh0YXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItZHluYW1pYy1mb3Jtcy9zcmMvbGliL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy10ZXh0YXJlYS9keW5hbWljLXRleHRhcmVhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXRleHRhcmVhL2R5bmFtaWMtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBUXZELE1BQU0sT0FBTywwQkFBMEI7SUFMdkM7UUFRRSxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVWLFNBQUksR0FBRyxFQUFFLENBQUM7UUFFVixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSWpCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO0tBQ2xCOzt1SEFkWSwwQkFBMEI7MkdBQTFCLDBCQUEwQiwyRENSdkMsaXFCQXdCQTsyRkRoQmEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1keW5hbWljLXRleHRhcmVhJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHluYW1pYy10ZXh0YXJlYS5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFRkRHluYW1pY1RleHRhcmVhQ29tcG9uZW50IHtcbiAgY29udHJvbCE6IEZvcm1Db250cm9sO1xuXG4gIGxhYmVsID0gJyc7XG5cbiAgaGludCA9ICcnO1xuXG4gIG5hbWUgPSAnJztcblxuICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIGVycm9yTWVzc2FnZVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwbGFjZWhvbGRlciA9ICcnO1xufVxuIiwiPGRpdiBjbGFzcz1cInRkLWR5bmFtaWMtdGV4dGFyZWEtd3JhcHBlclwiPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0ZC1keW5hbWljLXRleHRhcmVhLWZpZWxkXCI+XG4gICAgPG1hdC1sYWJlbD57eyBsYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDx0ZXh0YXJlYVxuICAgICAgI2VsZW1lbnRJbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgIHJvd3M9XCI0XCJcbiAgICA+PC90ZXh0YXJlYT5cbiAgICA8bWF0LWhpbnQ+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG4gICAgPG1hdC1lcnJvcj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvck1lc3NhZ2VUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgY29udHJvbDogY29udHJvbCxcbiAgICAgICAgICBlcnJvcnM6IGNvbnRyb2w/LmVycm9yc1xuICAgICAgICB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG4iXX0=
|
|
@@ -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
|