@covalent/dynamic-forms 6.4.0 → 6.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/esm2020/lib/dynamic-element.component.mjs +176 -0
  2. package/esm2020/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.mjs +19 -0
  3. package/esm2020/lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.mjs +23 -0
  4. package/esm2020/lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component.mjs +28 -0
  5. package/esm2020/lib/dynamic-elements/dynamic-input/dynamic-input.component.mjs +22 -0
  6. package/esm2020/lib/dynamic-elements/dynamic-select/dynamic-select.component.mjs +23 -0
  7. package/esm2020/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.mjs +19 -0
  8. package/esm2020/lib/dynamic-elements/dynamic-slider/dynamic-slider.component.mjs +26 -0
  9. package/esm2020/lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component.mjs +22 -0
  10. package/esm2020/lib/dynamic-forms.component.mjs +185 -0
  11. package/{esm2022 → esm2020}/lib/dynamic-forms.module.mjs +48 -48
  12. package/{esm2022 → esm2020}/lib/services/dynamic-forms.service.mjs +4 -4
  13. package/fesm2015/covalent-dynamic-forms.mjs +745 -0
  14. package/{fesm2022 → fesm2015}/covalent-dynamic-forms.mjs.map +1 -1
  15. package/fesm2020/covalent-dynamic-forms.mjs +743 -0
  16. package/fesm2020/covalent-dynamic-forms.mjs.map +1 -0
  17. package/lib/dynamic-element.component.d.ts +2 -2
  18. package/lib/dynamic-forms.component.d.ts +1 -1
  19. package/package.json +14 -8
  20. package/esm2022/lib/dynamic-element.component.mjs +0 -229
  21. package/esm2022/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.mjs +0 -18
  22. package/esm2022/lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.mjs +0 -26
  23. package/esm2022/lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component.mjs +0 -28
  24. package/esm2022/lib/dynamic-elements/dynamic-input/dynamic-input.component.mjs +0 -27
  25. package/esm2022/lib/dynamic-elements/dynamic-select/dynamic-select.component.mjs +0 -25
  26. package/esm2022/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.mjs +0 -18
  27. package/esm2022/lib/dynamic-elements/dynamic-slider/dynamic-slider.component.mjs +0 -30
  28. package/esm2022/lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component.mjs +0 -22
  29. package/esm2022/lib/dynamic-forms.component.mjs +0 -191
  30. package/fesm2022/covalent-dynamic-forms.mjs +0 -814
  31. /package/{esm2022 → esm2020}/covalent-dynamic-forms.mjs +0 -0
  32. /package/{esm2022 → esm2020}/public_api.mjs +0 -0
@@ -1,28 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/forms";
5
- import * as i3 from "@angular/material/form-field";
6
- import * as i4 from "@angular/material/input";
7
- import * as i5 from "@angular/material/icon";
8
- import * as i6 from "@angular/material/button";
9
- import * as i7 from "@covalent/core/file";
10
- export class TdDynamicFileInputComponent {
11
- control;
12
- required = false;
13
- label = '';
14
- name = '';
15
- hint = '';
16
- errorMessageTemplate;
17
- placeholder = '';
18
- _handlefileDrop(value) {
19
- this.control?.setValue(value);
20
- }
21
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicFileInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TdDynamicFileInputComponent, selector: "td-dynamic-file-input", ngImport: i0, template: "<div class=\"td-dynamic-file-input-wrapper\">\n <mat-form-field\n tdFileDrop\n class=\"td-dynamic-file-input-field\"\n [disabled]=\"control.disabled\"\n (fileDrop)=\"_handlefileDrop($event)\"\n (click)=\"!control.disabled && fileInput.inputElement.click()\"\n (keyup.enter)=\"!control.disabled && fileInput.inputElement.click()\"\n (keyup.delete)=\"fileInput.clear()\"\n (keyup.backspace)=\"fileInput.clear()\"\n >\n <mat-label>{{ label }}</mat-label>\n <input\n matInput\n [value]=\"control.value?.name\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [disabled]=\"control.disabled\"\n readonly\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n <button\n mat-icon-button\n *ngIf=\"control.value\"\n (click)=\"fileInput.clear()\"\n (keyup.enter)=\"fileInput.clear()\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n <td-file-input class=\"td-file-input\" #fileInput [formControl]=\"control\">\n <mat-icon>folder</mat-icon>\n <span>{{ label }}</span>\n </td-file-input>\n</div>\n", styles: [".td-dynamic-file-input-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-file-input-wrapper .td-dynamic-file-input-field{flex:1;box-sizing:border-box}.td-file-input{margin-left:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.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"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.TdFileDropDirective, selector: "[tdFileDrop]", inputs: ["multiple", "disabled"], outputs: ["fileDrop"] }, { kind: "component", type: i7.TdFileInputComponent, selector: "td-file-input", inputs: ["disabled", "value", "color", "multiple", "accept"], outputs: ["selectFile"] }] });
23
- }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicFileInputComponent, decorators: [{
25
- type: Component,
26
- args: [{ selector: 'td-dynamic-file-input', template: "<div class=\"td-dynamic-file-input-wrapper\">\n <mat-form-field\n tdFileDrop\n class=\"td-dynamic-file-input-field\"\n [disabled]=\"control.disabled\"\n (fileDrop)=\"_handlefileDrop($event)\"\n (click)=\"!control.disabled && fileInput.inputElement.click()\"\n (keyup.enter)=\"!control.disabled && fileInput.inputElement.click()\"\n (keyup.delete)=\"fileInput.clear()\"\n (keyup.backspace)=\"fileInput.clear()\"\n >\n <mat-label>{{ label }}</mat-label>\n <input\n matInput\n [value]=\"control.value?.name\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [disabled]=\"control.disabled\"\n readonly\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n <button\n mat-icon-button\n *ngIf=\"control.value\"\n (click)=\"fileInput.clear()\"\n (keyup.enter)=\"fileInput.clear()\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n <td-file-input class=\"td-file-input\" #fileInput [formControl]=\"control\">\n <mat-icon>folder</mat-icon>\n <span>{{ label }}</span>\n </td-file-input>\n</div>\n", styles: [".td-dynamic-file-input-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-file-input-wrapper .td-dynamic-file-input-field{flex:1;box-sizing:border-box}.td-file-input{margin-left:10px}\n"] }]
27
- }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWxlLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLWZpbGUtaW5wdXQvZHluYW1pYy1maWxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLWZpbGUtaW5wdXQvZHluYW1pYy1maWxlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztBQVF2RCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLE9BQU8sQ0FBc0I7SUFFN0IsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUVqQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRVgsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVWLElBQUksR0FBRyxFQUFFLENBQUM7SUFFVixvQkFBb0IsQ0FBb0I7SUFFeEMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUVqQixlQUFlLENBQUMsS0FBVTtRQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO3VHQWpCVSwyQkFBMkI7MkZBQTNCLDJCQUEyQiw2RENSeEMseXpDQTRDQTs7MkZEcENhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RkLWR5bmFtaWMtZmlsZS1pbnB1dCcsXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtZmlsZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1maWxlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgVGREeW5hbWljRmlsZUlucHV0Q29tcG9uZW50IHtcbiAgY29udHJvbCE6IFVudHlwZWRGb3JtQ29udHJvbDtcblxuICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIGxhYmVsID0gJyc7XG5cbiAgbmFtZSA9ICcnO1xuXG4gIGhpbnQgPSAnJztcblxuICBlcnJvck1lc3NhZ2VUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcGxhY2Vob2xkZXIgPSAnJztcblxuICBfaGFuZGxlZmlsZURyb3AodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUodmFsdWUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGQtZHluYW1pYy1maWxlLWlucHV0LXdyYXBwZXJcIj5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgdGRGaWxlRHJvcFxuICAgIGNsYXNzPVwidGQtZHluYW1pYy1maWxlLWlucHV0LWZpZWxkXCJcbiAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZFwiXG4gICAgKGZpbGVEcm9wKT1cIl9oYW5kbGVmaWxlRHJvcCgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwiIWNvbnRyb2wuZGlzYWJsZWQgJiYgZmlsZUlucHV0LmlucHV0RWxlbWVudC5jbGljaygpXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwiIWNvbnRyb2wuZGlzYWJsZWQgJiYgZmlsZUlucHV0LmlucHV0RWxlbWVudC5jbGljaygpXCJcbiAgICAoa2V5dXAuZGVsZXRlKT1cImZpbGVJbnB1dC5jbGVhcigpXCJcbiAgICAoa2V5dXAuYmFja3NwYWNlKT1cImZpbGVJbnB1dC5jbGVhcigpXCJcbiAgPlxuICAgIDxtYXQtbGFiZWw+e3sgbGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXRcbiAgICAgIG1hdElucHV0XG4gICAgICBbdmFsdWVdPVwiY29udHJvbC52YWx1ZT8ubmFtZVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZFwiXG4gICAgICByZWFkb25seVxuICAgIC8+XG4gICAgPG1hdC1oaW50Pnt7IGhpbnQgfX08L21hdC1oaW50PlxuICAgIDxtYXQtZXJyb3I+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3JNZXNzYWdlVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgIGNvbnRyb2w6IGNvbnRyb2wsXG4gICAgICAgICAgZXJyb3JzOiBjb250cm9sLmVycm9yc1xuICAgICAgICB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8YnV0dG9uXG4gICAgbWF0LWljb24tYnV0dG9uXG4gICAgKm5nSWY9XCJjb250cm9sLnZhbHVlXCJcbiAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsZWFyKClcIlxuICAgIChrZXl1cC5lbnRlcik9XCJmaWxlSW5wdXQuY2xlYXIoKVwiXG4gID5cbiAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDx0ZC1maWxlLWlucHV0IGNsYXNzPVwidGQtZmlsZS1pbnB1dFwiICNmaWxlSW5wdXQgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIj5cbiAgICA8bWF0LWljb24+Zm9sZGVyPC9tYXQtaWNvbj5cbiAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgPC90ZC1maWxlLWlucHV0PlxuPC9kaXY+XG4iXX0=
@@ -1,27 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/forms";
5
- import * as i3 from "@angular/material/form-field";
6
- import * as i4 from "@angular/material/input";
7
- export class TdDynamicInputComponent {
8
- control;
9
- label = '';
10
- hint = '';
11
- type;
12
- required = false;
13
- name = '';
14
- min;
15
- max;
16
- minLength;
17
- maxLength;
18
- errorMessageTemplate;
19
- placeholder = '';
20
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TdDynamicInputComponent, selector: "td-dynamic-input", ngImport: i0, template: "<div class=\"td-dynamic-input-wrapper\">\n <mat-form-field class=\"td-dynamic-input-field\">\n <mat-label>{{ label }}</mat-label>\n <input\n #elementInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [type]=\"type\"\n [required]=\"required\"\n [name]=\"name\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.minLength]=\"minLength\"\n [attr.maxLength]=\"maxLength\"\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-input-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-input-wrapper .td-dynamic-input-field{flex:1;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.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"] }] });
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicInputComponent, decorators: [{
24
- type: Component,
25
- args: [{ selector: 'td-dynamic-input', template: "<div class=\"td-dynamic-input-wrapper\">\n <mat-form-field class=\"td-dynamic-input-field\">\n <mat-label>{{ label }}</mat-label>\n <input\n #elementInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [type]=\"type\"\n [required]=\"required\"\n [name]=\"name\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.minLength]=\"minLength\"\n [attr.maxLength]=\"maxLength\"\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]=\"errorMessageTemplate\"\n [ngTemplateOutletContext]=\"{\n control: control,\n errors: control.errors\n }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-input-wrapper{flex-direction:row;display:flex;box-sizing:border-box}.td-dynamic-input-wrapper .td-dynamic-input-field{flex:1;box-sizing:border-box}\n"] }]
26
- }] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItZHluYW1pYy1mb3Jtcy9zcmMvbGliL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy1pbnB1dC9keW5hbWljLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLWlucHV0L2R5bmFtaWMtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBUXZELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsT0FBTyxDQUFzQjtJQUU3QixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRVgsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVWLElBQUksQ0FBVTtJQUVkLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFakIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVWLEdBQUcsQ0FBVTtJQUViLEdBQUcsQ0FBVTtJQUViLFNBQVMsQ0FBVTtJQUVuQixTQUFTLENBQVU7SUFFbkIsb0JBQW9CLENBQW9CO0lBRXhDLFdBQVcsR0FBRyxFQUFFLENBQUM7dUdBdkJOLHVCQUF1QjsyRkFBdkIsdUJBQXVCLHdEQ1JwQyw2d0JBNEJBOzsyRkRwQmEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtZHluYW1pYy1pbnB1dCcsXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNJbnB1dENvbXBvbmVudCB7XG4gIGNvbnRyb2whOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG5cbiAgbGFiZWwgPSAnJztcblxuICBoaW50ID0gJyc7XG5cbiAgdHlwZSE6IHN0cmluZztcblxuICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIG5hbWUgPSAnJztcblxuICBtaW4/OiBudW1iZXI7XG5cbiAgbWF4PzogbnVtYmVyO1xuXG4gIG1pbkxlbmd0aD86IG51bWJlcjtcblxuICBtYXhMZW5ndGg/OiBudW1iZXI7XG5cbiAgZXJyb3JNZXNzYWdlVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHBsYWNlaG9sZGVyID0gJyc7XG59XG4iLCI8ZGl2IGNsYXNzPVwidGQtZHluYW1pYy1pbnB1dC13cmFwcGVyXCI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInRkLWR5bmFtaWMtaW5wdXQtZmllbGRcIj5cbiAgICA8bWF0LWxhYmVsPnt7IGxhYmVsIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICAjZWxlbWVudElucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgW2F0dHIubWluXT1cIm1pblwiXG4gICAgICBbYXR0ci5tYXhdPVwibWF4XCJcbiAgICAgIFthdHRyLm1pbkxlbmd0aF09XCJtaW5MZW5ndGhcIlxuICAgICAgW2F0dHIubWF4TGVuZ3RoXT1cIm1heExlbmd0aFwiXG4gICAgLz5cbiAgICA8bWF0LWhpbnQ+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG4gICAgPG1hdC1lcnJvcj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvck1lc3NhZ2VUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgY29udHJvbDogY29udHJvbCxcbiAgICAgICAgICBlcnJvcnM6IGNvbnRyb2wuZXJyb3JzXG4gICAgICAgIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==
@@ -1,25 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/forms";
5
- import * as i3 from "@angular/material/form-field";
6
- import * as i4 from "@angular/material/select";
7
- import * as i5 from "@angular/material/core";
8
- export class TdDynamicSelectComponent {
9
- control;
10
- label = '';
11
- hint = '';
12
- name = '';
13
- required = false;
14
- selections;
15
- multiple;
16
- errorMessageTemplate;
17
- placeholder = '';
18
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", 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"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }] });
20
- }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicSelectComponent, decorators: [{
22
- type: Component,
23
- 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"] }]
24
- }] });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWR5bmFtaWMtZm9ybXMvc3JjL2xpYi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBUXZELE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsT0FBTyxDQUFzQjtJQUU3QixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRVgsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVWLElBQUksR0FBRyxFQUFFLENBQUM7SUFFVixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWpCLFVBQVUsQ0FBUztJQUVuQixRQUFRLENBQVc7SUFFbkIsb0JBQW9CLENBQW9CO0lBRXhDLFdBQVcsR0FBRyxFQUFFLENBQUM7dUdBakJOLHdCQUF3QjsyRkFBeEIsd0JBQXdCLHlEQ1JyQyw2MEJBNkJBOzsyRkRyQmEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtZHluYW1pYy1zZWxlY3QnLFxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNTZWxlY3RDb21wb25lbnQge1xuICBjb250cm9sITogVW50eXBlZEZvcm1Db250cm9sO1xuXG4gIGxhYmVsID0gJyc7XG5cbiAgaGludCA9ICcnO1xuXG4gIG5hbWUgPSAnJztcblxuICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIHNlbGVjdGlvbnM/OiBhbnlbXTtcblxuICBtdWx0aXBsZT86IGJvb2xlYW47XG5cbiAgZXJyb3JNZXNzYWdlVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHBsYWNlaG9sZGVyID0gJyc7XG59XG4iLCI8ZGl2IGNsYXNzPVwidGQtZHluYW1pYy1zZWxlY3Qtd3JhcHBlclwiPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0ZC1keW5hbWljLXNlbGVjdC1maWVsZFwiPlxuICAgIDxtYXQtbGFiZWw+e3sgbGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICA8bWF0LXNlbGVjdFxuICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgc2VsZWN0aW9uIG9mIHNlbGVjdGlvbnNcIlxuICAgICAgICBbdmFsdWVdPVwic2VsZWN0aW9uLnZhbHVlID8/IHNlbGVjdGlvblwiXG4gICAgICA+XG4gICAgICAgIHt7IHNlbGVjdGlvbi5sYWJlbCB8fCBzZWxlY3Rpb24gfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gICAgPG1hdC1oaW50Pnt7IGhpbnQgfX08L21hdC1oaW50PlxuICAgIDxtYXQtZXJyb3I+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3JNZXNzYWdlVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgIGNvbnRyb2w6IGNvbnRyb2wsXG4gICAgICAgICAgZXJyb3JzOiBjb250cm9sLmVycm9yc1xuICAgICAgICB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG4iXX0=
@@ -1,18 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/forms";
4
- import * as i2 from "@angular/material/slide-toggle";
5
- export class TdDynamicSlideToggleComponent {
6
- control;
7
- label = '';
8
- name = '';
9
- hint = '';
10
- required = false;
11
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicSlideToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", 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: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.MatSlideToggleRequiredValidator, selector: "mat-slide-toggle[required][formControlName], mat-slide-toggle[required][formControl], mat-slide-toggle[required][ngModel]" }, { kind: "component", type: i2.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }] });
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicSlideToggleComponent, decorators: [{
15
- type: Component,
16
- 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" }]
17
- }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zbGlkZS10b2dnbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWR5bmFtaWMtZm9ybXMvc3JjL2xpYi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2xpZGUtdG9nZ2xlL2R5bmFtaWMtc2xpZGUtdG9nZ2xlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlLXRvZ2dsZS9keW5hbWljLXNsaWRlLXRvZ2dsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUTFDLE1BQU0sT0FBTyw2QkFBNkI7SUFDeEMsT0FBTyxDQUFzQjtJQUU3QixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRVgsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVWLElBQUksR0FBRyxFQUFFLENBQUM7SUFFVixRQUFRLEdBQUcsS0FBSyxDQUFDO3VHQVROLDZCQUE2QjsyRkFBN0IsNkJBQTZCLCtEQ1IxQyx5UkFVQTs7MkZERmEsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1keW5hbWljLXNsaWRlLXRvZ2dsZScsXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtc2xpZGUtdG9nZ2xlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLXNsaWRlLXRvZ2dsZS5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFRkRHluYW1pY1NsaWRlVG9nZ2xlQ29tcG9uZW50IHtcbiAgY29udHJvbCE6IFVudHlwZWRGb3JtQ29udHJvbDtcblxuICBsYWJlbCA9ICcnO1xuXG4gIG5hbWUgPSAnJztcblxuICBoaW50ID0gJyc7XG5cbiAgcmVxdWlyZWQgPSBmYWxzZTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJ0ZC1keW5hbWljLXNsaWRlLXRvZ2dsZS13cmFwcGVyXCI+XG4gIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgPlxuICAgIHt7IGxhYmVsIH19XG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPHNwYW4gY2xhc3M9XCJtYXQtaGludCB0ZC1keW5hbWljLWVsZW1lbnQtaGludFwiPnt7IGhpbnQgfX08L3NwYW4+XG48L2Rpdj5cbiJdfQ==
@@ -1,30 +0,0 @@
1
- import { Component, ChangeDetectorRef } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/forms";
5
- import * as i3 from "@angular/material/slider";
6
- export class TdDynamicSliderComponent {
7
- _changeDetectorRef;
8
- control;
9
- label = '';
10
- required = false;
11
- name = '';
12
- hint = '';
13
- min;
14
- max;
15
- constructor(_changeDetectorRef) {
16
- this._changeDetectorRef = _changeDetectorRef;
17
- }
18
- _handleBlur() {
19
- setTimeout(() => {
20
- this._changeDetectorRef.markForCheck();
21
- });
22
- }
23
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicSliderComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
24
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", 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>\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 thumbLabel\n tickInterval=\"auto\"\n (blur)=\"_handleBlur()\"\n >\n <input\n [attr.name]=\"name\"\n [min]=\"min\"\n [max]=\"max\"\n [formControl]=\"control\"\n [required]=\"required\"\n matSliderThumb\n />\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"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatSlider, selector: "mat-slider", inputs: ["color", "disableRipple", "disabled", "discrete", "showTickMarks", "min", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i3.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }] });
25
- }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicSliderComponent, decorators: [{
27
- type: Component,
28
- 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>\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 thumbLabel\n tickInterval=\"auto\"\n (blur)=\"_handleBlur()\"\n >\n <input\n [attr.name]=\"name\"\n [min]=\"min\"\n [max]=\"max\"\n [formControl]=\"control\"\n [required]=\"required\"\n matSliderThumb\n />\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"] }]
29
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zbGlkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWR5bmFtaWMtZm9ybXMvc3JjL2xpYi9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2xpZGVyL2R5bmFtaWMtc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlci9keW5hbWljLXNsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVE3RCxNQUFNLE9BQU8sd0JBQXdCO0lBZWY7SUFkcEIsT0FBTyxDQUFzQjtJQUU3QixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRVgsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUVqQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRVYsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVWLEdBQUcsQ0FBVTtJQUViLEdBQUcsQ0FBVTtJQUViLFlBQW9CLGtCQUFxQztRQUFyQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO0lBQUcsQ0FBQztJQUU3RCxXQUFXO1FBQ1QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7dUdBckJVLHdCQUF3QjsyRkFBeEIsd0JBQXdCLHlEQ1JyQyxzNUJBaUNBOzsyRkR6QmEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtZHluYW1pYy1zbGlkZXInLFxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLXNsaWRlci5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNTbGlkZXJDb21wb25lbnQge1xuICBjb250cm9sITogVW50eXBlZEZvcm1Db250cm9sO1xuXG4gIGxhYmVsID0gJyc7XG5cbiAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICBuYW1lID0gJyc7XG5cbiAgaGludCA9ICcnO1xuXG4gIG1pbj86IG51bWJlcjtcblxuICBtYXg/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIF9oYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJ0ZC1keW5hbWljLXNsaWRlci13cmFwcGVyIG1hdC1mb3JtLWZpZWxkIG1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRcIlxuPlxuICA8c3BhbiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1sYWJlbCBtYXQtcHJpbWFyeSB0ZC1zbGlkZXItbGFiZWxcIj5cbiAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8c3BhblxuICAgICAgICAqbmdJZj1cInJlcXVpcmVkICYmICFjb250cm9sPy5kaXNhYmxlZFwiXG4gICAgICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyXCJcbiAgICAgICAgPio8L3NwYW5cbiAgICAgID5cbiAgICA8L2xhYmVsPlxuICA8L3NwYW4+XG4gIDxkaXYgY2xhc3M9XCJ0ZC1keW5hbWljLXNsaWRlci1maWVsZFwiPlxuICAgIDxtYXQtc2xpZGVyXG4gICAgICAjc2xpZGVyXG4gICAgICBjbGFzcz1cInRkLWR5bmFtaWMtc2xpZGVyXCJcbiAgICAgIHRodW1iTGFiZWxcbiAgICAgIHRpY2tJbnRlcnZhbD1cImF1dG9cIlxuICAgICAgKGJsdXIpPVwiX2hhbmRsZUJsdXIoKVwiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIG1hdFNsaWRlclRodW1iXG4gICAgICAvPlxuICAgIDwvbWF0LXNsaWRlcj5cbiAgPC9kaXY+XG4gIDxzcGFuIGNsYXNzPVwibWF0LWhpbnQgdGQtZHluYW1pYy1lbGVtZW50LWhpbnRcIj57eyBoaW50IH19PC9zcGFuPlxuPC9kaXY+XG4iXX0=
@@ -1,22 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/forms";
5
- import * as i3 from "@angular/material/form-field";
6
- import * as i4 from "@angular/material/input";
7
- export class TdDynamicTextareaComponent {
8
- control;
9
- label = '';
10
- hint = '';
11
- name = '';
12
- required = false;
13
- errorMessageTemplate;
14
- placeholder = '';
15
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicTextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", 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 [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"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.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"] }] });
17
- }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", 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 [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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10ZXh0YXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItZHluYW1pYy1mb3Jtcy9zcmMvbGliL2R5bmFtaWMtZWxlbWVudHMvZHluYW1pYy10ZXh0YXJlYS9keW5hbWljLXRleHRhcmVhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1keW5hbWljLWZvcm1zL3NyYy9saWIvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXRleHRhcmVhL2R5bmFtaWMtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBUXZELE1BQU0sT0FBTywwQkFBMEI7SUFDckMsT0FBTyxDQUFzQjtJQUU3QixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRVgsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVWLElBQUksR0FBRyxFQUFFLENBQUM7SUFFVixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWpCLG9CQUFvQixDQUFvQjtJQUV4QyxXQUFXLEdBQUcsRUFBRSxDQUFDO3VHQWJOLDBCQUEwQjsyRkFBMUIsMEJBQTBCLDJEQ1J2QywycEJBd0JBOzsyRkRoQmEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtZHluYW1pYy10ZXh0YXJlYScsXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtdGV4dGFyZWEuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNUZXh0YXJlYUNvbXBvbmVudCB7XG4gIGNvbnRyb2whOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG5cbiAgbGFiZWwgPSAnJztcblxuICBoaW50ID0gJyc7XG5cbiAgbmFtZSA9ICcnO1xuXG4gIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgZXJyb3JNZXNzYWdlVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHBsYWNlaG9sZGVyID0gJyc7XG59XG4iLCI8ZGl2IGNsYXNzPVwidGQtZHluYW1pYy10ZXh0YXJlYS13cmFwcGVyXCI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInRkLWR5bmFtaWMtdGV4dGFyZWEtZmllbGRcIj5cbiAgICA8bWF0LWxhYmVsPnt7IGxhYmVsIH19PC9tYXQtbGFiZWw+XG4gICAgPHRleHRhcmVhXG4gICAgICAjZWxlbWVudElucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgIHJvd3M9XCI0XCJcbiAgICA+PC90ZXh0YXJlYT5cbiAgICA8bWF0LWhpbnQ+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG4gICAgPG1hdC1lcnJvcj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvck1lc3NhZ2VUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgY29udHJvbDogY29udHJvbCxcbiAgICAgICAgICBlcnJvcnM6IGNvbnRyb2wuZXJyb3JzXG4gICAgICAgIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==
@@ -1,191 +0,0 @@
1
- import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef, ContentChildren, QueryList, } from '@angular/core';
2
- import { UntypedFormBuilder, } 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 "@angular/common";
11
- import * as i4 from "./dynamic-element.component";
12
- export class TdDynamicFormsComponent {
13
- _formBuilder;
14
- _dynamicFormsService;
15
- _changeDetectorRef;
16
- _renderedElements = [];
17
- _elements;
18
- _templateMap = new Map();
19
- _destroy$ = new Subject();
20
- _destroyControl$ = new Subject();
21
- _errorTemplates;
22
- dynamicForm;
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
- constructor(_formBuilder, _dynamicFormsService, _changeDetectorRef) {
87
- this._formBuilder = _formBuilder;
88
- this._dynamicFormsService = _dynamicFormsService;
89
- this._changeDetectorRef = _changeDetectorRef;
90
- this.dynamicForm = this._formBuilder.group({});
91
- }
92
- ngAfterContentInit() {
93
- this._updateErrorTemplates();
94
- }
95
- ngOnDestroy() {
96
- this._destroy$.next(0);
97
- this._destroy$.complete();
98
- this._destroyControl$.complete();
99
- }
100
- /**
101
- * Refreshes the form and rerenders all validator/element modifications.
102
- */
103
- refresh() {
104
- this._rerenderElements();
105
- this._updateErrorTemplates();
106
- }
107
- /**
108
- * Getter method for error template references
109
- */
110
- getErrorTemplateRef(name) {
111
- return this._templateMap.get(name);
112
- }
113
- /**
114
- * Loads error templates and sets them in a map for faster access.
115
- */
116
- _updateErrorTemplates() {
117
- this._templateMap = new Map();
118
- for (const errorTemplate of this._errorTemplates.toArray()) {
119
- this._templateMap.set(errorTemplate.tdDynamicFormsError ?? '', errorTemplate.templateRef);
120
- }
121
- }
122
- _rerenderElements() {
123
- this._clearRemovedElements();
124
- this._renderedElements = [];
125
- const duplicates = [];
126
- this._elements.forEach((elem) => {
127
- this._dynamicFormsService.validateDynamicElementName(elem.name);
128
- if (duplicates.indexOf(elem.name) > -1) {
129
- throw new Error(`Dynamic element name: "${elem.name}" is duplicated`);
130
- }
131
- duplicates.push(elem.name);
132
- const dynamicElement = this.dynamicForm.get(elem.name);
133
- if (!dynamicElement) {
134
- this.dynamicForm.addControl(elem.name, this._dynamicFormsService.createFormControl(elem));
135
- this._subscribeToControlStatusChanges(elem.name);
136
- }
137
- else {
138
- dynamicElement.setValue(elem.default);
139
- dynamicElement.markAsPristine();
140
- dynamicElement.markAsUntouched();
141
- if (elem.disabled) {
142
- dynamicElement.disable();
143
- }
144
- else {
145
- dynamicElement.enable();
146
- }
147
- dynamicElement.setValidators(this._dynamicFormsService.createValidators(elem));
148
- }
149
- // copy objects so they are only changes when calling this method
150
- this._renderedElements.push(Object.assign({}, elem));
151
- });
152
- // call a change detection since the whole form might change
153
- this._changeDetectorRef.detectChanges();
154
- timer(0)
155
- .toPromise()
156
- .then(() => {
157
- // call a markForCheck so elements are rendered correctly in OnPush
158
- this._changeDetectorRef.markForCheck();
159
- });
160
- }
161
- _clearRemovedElements() {
162
- this._renderedElements = this._renderedElements.filter((renderedElement) => !this._elements.some((element) => element.name === renderedElement.name));
163
- // remove elements that were removed from the array
164
- this._renderedElements.forEach((elem) => {
165
- this._destroyControl$.next(elem.name);
166
- this.dynamicForm.removeControl(elem.name);
167
- });
168
- }
169
- // Updates component when manually adding errors to controls
170
- _subscribeToControlStatusChanges(elementName) {
171
- const control = this.controls[elementName];
172
- const controlDestroyed$ = this._destroyControl$.pipe(filter((destroyedElementName) => destroyedElementName === elementName));
173
- control.statusChanges
174
- .pipe(takeUntil(this._destroy$), takeUntil(controlDestroyed$))
175
- .subscribe(() => {
176
- this._changeDetectorRef.markForCheck();
177
- });
178
- }
179
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicFormsComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.TdDynamicFormsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
180
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", 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"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.TdDynamicElementComponent, selector: "td-dynamic-element", inputs: ["dynamicControl", "label", "hint", "name", "type", "required", "min", "max", "minLength", "maxLength", "selections", "multiple", "customConfig", "errorMessageTemplate", "placeholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
181
- }
182
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdDynamicFormsComponent, decorators: [{
183
- type: Component,
184
- 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"] }]
185
- }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.TdDynamicFormsService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { _errorTemplates: [{
186
- type: ContentChildren,
187
- args: [TdDynamicFormsErrorTemplateDirective, { descendants: true }]
188
- }], elements: [{
189
- type: Input
190
- }] } });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3Jtcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItZHluYW1pYy1mb3Jtcy9zcmMvbGliL2R5bmFtaWMtZm9ybXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWR5bmFtaWMtZm9ybXMvc3JjL2xpYi9keW5hbWljLWZvcm1zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsZUFBZSxFQUVmLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsa0JBQWtCLEdBRW5CLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRW5GLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQVFuRCxNQUFNLE9BQU8sdUJBQXVCO0lBb0Z4QjtJQUNBO0lBQ0E7SUFyRkYsaUJBQWlCLEdBQThCLEVBQUUsQ0FBQztJQUNsRCxTQUFTLENBQTZCO0lBQ3RDLFlBQVksR0FBa0MsSUFBSSxHQUFHLEVBRzFELENBQUM7SUFDSSxTQUFTLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7SUFDeEMsZ0JBQWdCLEdBQW9CLElBQUksT0FBTyxFQUFFLENBQUM7SUFHMUQsZUFBZSxDQUFtRDtJQUNsRSxXQUFXLENBQW9CO0lBRS9COzs7O09BSUc7SUFDSCxJQUNJLFFBQVEsQ0FBQyxRQUFtQztRQUM5QyxJQUFJLFFBQVEsRUFBRTtZQUNa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NUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsNERBQTREO0lBQ3BELGdDQUFnQyxDQUFDLFdBQW1CO1FBQzFELE1BQU0sT0FBTyxHQUFvQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTVELE1BQU0saUJBQWlCLEdBQW9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ25FLE1BQU0sQ0FDSixDQUFDLG9CQUE0QixFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsS0FBSyxXQUFXLENBQ3ZFLENBQ0YsQ0FBQztRQUVGLE9BQU8sQ0FBQyxhQUFhO2FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQzdELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3VHQTVNVSx1QkFBdUI7MkZBQXZCLHVCQUF1QiwwSEFVakIsb0NBQW9DLGdEQzFDdkQsNDhDQW9DQTs7MkZESmEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNOzZLQWEvQyxlQUFlO3NCQURkLGVBQWU7dUJBQUMsb0NBQW9DLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQVV4RSxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgVGVtcGxhdGVSZWYsXG4gIFF1ZXJ5TGlzdCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFVudHlwZWRGb3JtR3JvdXAsXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcbiAgQWJzdHJhY3RDb250cm9sLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7XG4gIFRkRHluYW1pY0Zvcm1zU2VydmljZSxcbiAgSVRkRHluYW1pY0VsZW1lbnRDb25maWcsXG59IGZyb20gJy4vc2VydmljZXMvZHluYW1pYy1mb3Jtcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRkRHluYW1pY0Zvcm1zRXJyb3JUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vZHluYW1pYy1lbGVtZW50LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IHRpbWVyLCBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtZHluYW1pYy1mb3JtcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZvcm1zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHluYW1pYy1mb3Jtcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGREeW5hbWljRm9ybXNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9yZW5kZXJlZEVsZW1lbnRzOiBJVGREeW5hbWljRWxlbWVudENvbmZpZ1tdID0gW107XG4gIHByaXZhdGUgX2VsZW1lbnRzITogSVRkRHluYW1pY0VsZW1lbnRDb25maWdbXTtcbiAgcHJpdmF0ZSBfdGVtcGxhdGVNYXA6IE1hcDxzdHJpbmcsIFRlbXBsYXRlUmVmPGFueT4+ID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgVGVtcGxhdGVSZWY8YW55PlxuICA+KCk7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIF9kZXN0cm95Q29udHJvbCQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUZER5bmFtaWNGb3Jtc0Vycm9yVGVtcGxhdGVEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgX2Vycm9yVGVtcGxhdGVzITogUXVlcnlMaXN0PFRkRHluYW1pY0Zvcm1zRXJyb3JUZW1wbGF0ZURpcmVjdGl2ZT47XG4gIGR5bmFtaWNGb3JtITogVW50eXBlZEZvcm1Hcm91cDtcblxuICAvKipcbiAgICogZWxlbWVudHM6IElUZER5bmFtaWNFbGVtZW50Q29uZmlnW11cbiAgICogSlMgT2JqZWN0IHRoYXQgd2lsbCByZW5kZXIgdGhlIGVsZW1lbnRzIGRlcGVuZGluZyBvbiBpdHMgY29uZmlnLlxuICAgKiBbbmFtZV0gcHJvcGVydHkgaXMgcmVxdWlyZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgZWxlbWVudHMoZWxlbWVudHM6IElUZER5bmFtaWNFbGVtZW50Q29uZmlnW10pIHtcbiAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRzID0gZWxlbWVudHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRzID0gW107XG4gICAgfVxuICAgIHRoaXMuX3JlcmVuZGVyRWxlbWVudHMoKTtcbiAgfVxuICBnZXQgZWxlbWVudHMoKTogSVRkRHluYW1pY0VsZW1lbnRDb25maWdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlcmVkRWxlbWVudHM7XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIHByb3BlcnR5IGZvciBkeW5hbWljIFtGb3JtR3JvdXBdLlxuICAgKi9cbiAgZ2V0IGZvcm0oKTogVW50eXBlZEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZHluYW1pY0Zvcm07XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIHByb3BlcnR5IGZvciBbdmFsaWRdIG9mIGR5bmFtaWMgW0Zvcm1Hcm91cF0uXG4gICAqL1xuICBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZHluYW1pY0Zvcm0pIHtcbiAgICAgIHJldHVybiB0aGlzLmR5bmFtaWNGb3JtLnZhbGlkO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIHByb3BlcnR5IGZvciBbdmFsdWVdIG9mIGR5bmFtaWMgW0Zvcm1Hcm91cF0uXG4gICAqL1xuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5keW5hbWljRm9ybSkge1xuICAgICAgcmV0dXJuIHRoaXMuZHluYW1pY0Zvcm0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgcHJvcGVydHkgZm9yIFtlcnJvcnNdIG9mIGR5bmFtaWMgW0Zvcm1Hcm91cF0uXG4gICAqL1xuICBnZXQgZXJyb3JzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAodGhpcy5keW5hbWljRm9ybSkge1xuICAgICAgY29uc3QgZXJyb3JzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuZHluYW1pY0Zvcm0uY29udHJvbHMpKSB7XG4gICAgICAgIGVycm9yc1tuYW1lXSA9IHRoaXMuZHluYW1pY0Zvcm0uY29udHJvbHNbbmFtZV0uZXJyb3JzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBwcm9wZXJ0eSBmb3IgW2NvbnRyb2xzXSBvZiBkeW5hbWljIFtGb3JtR3JvdXBdLlxuICAgKi9cbiAgZ2V0IGNvbnRyb2xzKCk6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0ge1xuICAgIGlmICh0aGlzLmR5bmFtaWNGb3JtKSB7XG4gICAgICByZXR1cm4gdGhpcy5keW5hbWljRm9ybS5jb250cm9scztcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIF9keW5hbWljRm9ybXNTZXJ2aWNlOiBUZER5bmFtaWNGb3Jtc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuZHluYW1pY0Zvcm0gPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7fSk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdXBkYXRlRXJyb3JUZW1wbGF0ZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoMCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9kZXN0cm95Q29udHJvbCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGhlIGZvcm0gYW5kIHJlcmVuZGVycyBhbGwgdmFsaWRhdG9yL2VsZW1lbnQgbW9kaWZpY2F0aW9ucy5cbiAgICovXG4gIHJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5fcmVyZW5kZXJFbGVtZW50cygpO1xuICAgIHRoaXMuX3VwZGF0ZUVycm9yVGVtcGxhdGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIG1ldGhvZCBmb3IgZXJyb3IgdGVtcGxhdGUgcmVmZXJlbmNlc1xuICAgKi9cbiAgZ2V0RXJyb3JUZW1wbGF0ZVJlZihuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVNYXAuZ2V0KG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGVycm9yIHRlbXBsYXRlcyBhbmQgc2V0cyB0aGVtIGluIGEgbWFwIGZvciBmYXN0ZXIgYWNjZXNzLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlRXJyb3JUZW1wbGF0ZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fdGVtcGxhdGVNYXAgPSBuZXcgTWFwPHN0cmluZywgVGVtcGxhdGVSZWY8YW55Pj4oKTtcbiAgICBmb3IgKGNvbnN0IGVycm9yVGVtcGxhdGUgb2YgdGhpcy5fZXJyb3JUZW1wbGF0ZXMudG9BcnJheSgpKSB7XG4gICAgICB0aGlzLl90ZW1wbGF0ZU1hcC5zZXQoXG4gICAgICAgIGVycm9yVGVtcGxhdGUudGREeW5hbWljRm9ybXNFcnJvciA/PyAnJyxcbiAgICAgICAgZXJyb3JUZW1wbGF0ZS50ZW1wbGF0ZVJlZlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXJlbmRlckVsZW1lbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX2NsZWFyUmVtb3ZlZEVsZW1lbnRzKCk7XG4gICAgdGhpcy5fcmVuZGVyZWRFbGVtZW50cyA9IFtdO1xuICAgIGNvbnN0IGR1cGxpY2F0ZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5fZWxlbWVudHMuZm9yRWFjaCgoZWxlbTogSVRkRHluYW1pY0VsZW1lbnRDb25maWcpID0+IHtcbiAgICAgIHRoaXMuX2R5bmFtaWNGb3Jtc1NlcnZpY2UudmFsaWRhdGVEeW5hbWljRWxlbWVudE5hbWUoZWxlbS5uYW1lKTtcbiAgICAgIGlmIChkdXBsaWNhdGVzLmluZGV4T2YoZWxlbS5uYW1lKSA+IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRHluYW1pYyBlbGVtZW50IG5hbWU6IFwiJHtlbGVtLm5hbWV9XCIgaXMgZHVwbGljYXRlZGApO1xuICAgICAgfVxuICAgICAgZHVwbGljYXRlcy5wdXNoKGVsZW0ubmFtZSk7XG4gICAgICBjb25zdCBkeW5hbWljRWxlbWVudDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCA9IHRoaXMuZHluYW1pY0Zvcm0uZ2V0KFxuICAgICAgICBlbGVtLm5hbWVcbiAgICAgICk7XG4gICAgICBpZiAoIWR5bmFtaWNFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZHluYW1pY0Zvcm0uYWRkQ29udHJvbChcbiAgICAgICAgICBlbGVtLm5hbWUsXG4gICAgICAgICAgdGhpcy5fZHluYW1pY0Zvcm1zU2VydmljZS5jcmVhdGVGb3JtQ29udHJvbChlbGVtKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb0NvbnRyb2xTdGF0dXNDaGFuZ2VzKGVsZW0ubmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkeW5hbWljRWxlbWVudC5zZXRWYWx1ZShlbGVtLmRlZmF1bHQpO1xuICAgICAgICBkeW5hbWljRWxlbWVudC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICBkeW5hbWljRWxlbWVudC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgaWYgKGVsZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgICBkeW5hbWljRWxlbWVudC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHluYW1pY0VsZW1lbnQuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZHluYW1pY0VsZW1lbnQuc2V0VmFsaWRhdG9ycyhcbiAgICAgICAgICB0aGlzLl9keW5hbWljRm9ybXNTZXJ2aWNlLmNyZWF0ZVZhbGlkYXRvcnMoZWxlbSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIGNvcHkgb2JqZWN0cyBzbyB0aGV5IGFyZSBvbmx5IGNoYW5nZXMgd2hlbiBjYWxsaW5nIHRoaXMgbWV0aG9kXG4gICAgICB0aGlzLl9yZW5kZXJlZEVsZW1lbnRzLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgZWxlbSkpO1xuICAgIH0pO1xuICAgIC8vIGNhbGwgYSBjaGFuZ2UgZGV0ZWN0aW9uIHNpbmNlIHRoZSB3aG9sZSBmb3JtIG1pZ2h0IGNoYW5nZVxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aW1lcigwKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIGNhbGwgYSBtYXJrRm9yQ2hlY2sgc28gZWxlbWVudHMgYXJlIHJlbmRlcmVkIGNvcnJlY3RseSBpbiBPblB1c2hcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFyUmVtb3ZlZEVsZW1lbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlbmRlcmVkRWxlbWVudHMgPSB0aGlzLl9yZW5kZXJlZEVsZW1lbnRzLmZpbHRlcihcbiAgICAgIChyZW5kZXJlZEVsZW1lbnQ6IElUZER5bmFtaWNFbGVtZW50Q29uZmlnKSA9PlxuICAgICAgICAhdGhpcy5fZWxlbWVudHMuc29tZShcbiAgICAgICAgICAoZWxlbWVudDogSVRkRHluYW1pY0VsZW1lbnRDb25maWcpID0+XG4gICAgICAgICAgICBlbGVtZW50Lm5hbWUgPT09IHJlbmRlcmVkRWxlbWVudC5uYW1lXG4gICAgICAgIClcbiAgICApO1xuICAgIC8vIHJlbW92ZSBlbGVtZW50cyB0aGF0IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBhcnJheVxuICAgIHRoaXMuX3JlbmRlcmVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbTogSVRkRHluYW1pY0VsZW1lbnRDb25maWcpID0+IHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lDb250cm9sJC5uZXh0KGVsZW0ubmFtZSk7XG4gICAgICB0aGlzLmR5bmFtaWNGb3JtLnJlbW92ZUNvbnRyb2woZWxlbS5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFVwZGF0ZXMgY29tcG9uZW50IHdoZW4gbWFudWFsbHkgYWRkaW5nIGVycm9ycyB0byBjb250cm9sc1xuICBwcml2YXRlIF9zdWJzY3JpYmVUb0NvbnRyb2xTdGF0dXNDaGFuZ2VzKGVsZW1lbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSB0aGlzLmNvbnRyb2xzW2VsZW1lbnROYW1lXTtcblxuICAgIGNvbnN0IGNvbnRyb2xEZXN0cm95ZWQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9kZXN0cm95Q29udHJvbCQucGlwZShcbiAgICAgIGZpbHRlcihcbiAgICAgICAgKGRlc3Ryb3llZEVsZW1lbnROYW1lOiBzdHJpbmcpID0+IGRlc3Ryb3llZEVsZW1lbnROYW1lID09PSBlbGVtZW50TmFtZVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksIHRha2VVbnRpbChjb250cm9sRGVzdHJveWVkJCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJkeW5hbWljRm9ybVwiIG5vdmFsaWRhdGU+XG4gIDxkaXYgY2xhc3M9XCJ0ZC1keW5hbWljLWZvcm0td3JhcHBlclwiPlxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtZWxlbWVudCBuZ0ZvciBbbmdGb3JPZl09XCJlbGVtZW50c1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRkLWR5bmFtaWMtZWxlbWVudC13cmFwcGVyXCJcbiAgICAgICAgW3N0eWxlLm1heC13aWR0aC4lXT1cImVsZW1lbnQuZmxleCA/IGVsZW1lbnQuZmxleCA6IDEwMFwiXG4gICAgICAgIFtzdHlsZS5mbGV4XT1cIicxIDEgJyArIChlbGVtZW50LmZsZXggPyBlbGVtZW50LmZsZXggOiAxMDApICsgJyUnXCJcbiAgICAgICAgW3N0eWxlLi1tcy1mbGV4XT1cIicxIDEgJyArIChlbGVtZW50LmZsZXggPyBlbGVtZW50LmZsZXggOiAxMDApICsgJyUnXCJcbiAgICAgICAgW3N0eWxlLi13ZWJraXQtYm94LWZsZXhdPVwiMVwiXG4gICAgICA+XG4gICAgICAgIDx0ZC1keW5hbWljLWVsZW1lbnRcbiAgICAgICAgICAjZHluYW1pY0VsZW1lbnRcbiAgICAgICAgICAqbmdJZj1cImR5bmFtaWNGb3JtLmNvbnRyb2xzW2VsZW1lbnQubmFtZV1cIlxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZWxlbWVudC5uYW1lXCJcbiAgICAgICAgICBbZHluYW1pY0NvbnRyb2xdPVwiZHluYW1pY0Zvcm0uY29udHJvbHNbZWxlbWVudC5uYW1lXVwiXG4gICAgICAgICAgW2lkXT1cImVsZW1lbnQubmFtZVwiXG4gICAgICAgICAgW25hbWVdPVwiZWxlbWVudC5uYW1lXCJcbiAgICAgICAgICBbbGFiZWxdPVwiZWxlbWVudC5sYWJlbCB8fCBlbGVtZW50Lm5hbWVcIlxuICAgICAgICAgIFtoaW50XT1cImVsZW1lbnQuaGludFwiXG4gICAgICAgICAgW3R5cGVdPVwiZWxlbWVudC50eXBlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiZWxlbWVudC5yZXF1aXJlZCA/PyBmYWxzZVwiXG4gICAgICAgICAgW21pbl09XCJlbGVtZW50Lm1pblwiXG4gICAgICAgICAgW21heF09XCJlbGVtZW50Lm1heFwiXG4gICAgICAgICAgW21pbkxlbmd0aF09XCJlbGVtZW50Lm1pbkxlbmd0aFwiXG4gICAgICAgICAgW21heExlbmd0aF09XCJlbGVtZW50Lm1heExlbmd0aFwiXG4gICAgICAgICAgW3NlbGVjdGlvbnNdPVwiZWxlbWVudC5zZWxlY3Rpb25zXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZWxlbWVudC5tdWx0aXBsZVwiXG4gICAgICAgICAgW2N1c3RvbUNvbmZpZ109XCJlbGVtZW50LmN1c3RvbUNvbmZpZ1wiXG4gICAgICAgICAgW2Vycm9yTWVzc2FnZVRlbXBsYXRlXT1cImdldEVycm9yVGVtcGxhdGVSZWYoZWxlbWVudC5uYW1lKVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVsZW1lbnQucGxhY2Vob2xkZXJcIlxuICAgICAgICA+PC90ZC1keW5hbWljLWVsZW1lbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9mb3JtPlxuIl19