@covalent/dynamic-forms 4.0.0-beta.2 → 4.1.0-develop.2

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 (57) hide show
  1. package/README.md +26 -18
  2. package/covalent-dynamic-forms.d.ts +1 -1
  3. package/esm2020/covalent-dynamic-forms.mjs +2 -2
  4. package/esm2020/lib/dynamic-element.component.mjs +178 -0
  5. package/esm2020/lib/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.mjs +19 -0
  6. package/esm2020/lib/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.mjs +23 -0
  7. package/esm2020/lib/dynamic-elements/dynamic-file-input/dynamic-file-input.component.mjs +28 -0
  8. package/esm2020/lib/dynamic-elements/dynamic-input/dynamic-input.component.mjs +22 -0
  9. package/esm2020/lib/dynamic-elements/dynamic-select/dynamic-select.component.mjs +23 -0
  10. package/esm2020/lib/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.mjs +19 -0
  11. package/esm2020/lib/dynamic-elements/dynamic-slider/dynamic-slider.component.mjs +26 -0
  12. package/esm2020/lib/dynamic-elements/dynamic-textarea/dynamic-textarea.component.mjs +22 -0
  13. package/esm2020/lib/dynamic-forms.component.mjs +185 -0
  14. package/esm2020/lib/dynamic-forms.module.mjs +127 -0
  15. package/esm2020/lib/services/dynamic-forms.service.mjs +140 -0
  16. package/esm2020/public_api.mjs +13 -13
  17. package/fesm2015/covalent-dynamic-forms.mjs +177 -572
  18. package/fesm2015/covalent-dynamic-forms.mjs.map +1 -1
  19. package/fesm2020/covalent-dynamic-forms.mjs +248 -565
  20. package/fesm2020/covalent-dynamic-forms.mjs.map +1 -1
  21. package/{dynamic-element.component.d.ts → lib/dynamic-element.component.d.ts} +17 -17
  22. package/{dynamic-elements → lib/dynamic-elements}/dynamic-checkbox/dynamic-checkbox.component.d.ts +0 -0
  23. package/{dynamic-elements → lib/dynamic-elements}/dynamic-datepicker/dynamic-datepicker.component.d.ts +3 -3
  24. package/{dynamic-elements → lib/dynamic-elements}/dynamic-file-input/dynamic-file-input.component.d.ts +1 -1
  25. package/{dynamic-elements → lib/dynamic-elements}/dynamic-input/dynamic-input.component.d.ts +4 -4
  26. package/{dynamic-elements → lib/dynamic-elements}/dynamic-select/dynamic-select.component.d.ts +2 -2
  27. package/{dynamic-elements → lib/dynamic-elements}/dynamic-slide-toggle/dynamic-slide-toggle.component.d.ts +0 -0
  28. package/{dynamic-elements → lib/dynamic-elements}/dynamic-slider/dynamic-slider.component.d.ts +2 -2
  29. package/{dynamic-elements → lib/dynamic-elements}/dynamic-textarea/dynamic-textarea.component.d.ts +0 -0
  30. package/{dynamic-forms.component.d.ts → lib/dynamic-forms.component.d.ts} +1 -1
  31. package/{dynamic-forms.module.d.ts → lib/dynamic-forms.module.d.ts} +2 -3
  32. package/{services → lib/services}/dynamic-forms.service.d.ts +2 -2
  33. package/package.json +17 -19
  34. package/public_api.d.ts +12 -12
  35. package/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.scss +0 -0
  36. package/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.scss +0 -13
  37. package/dynamic-elements/dynamic-file-input/dynamic-file-input.component.scss +0 -17
  38. package/dynamic-elements/dynamic-input/dynamic-input.component.scss +0 -13
  39. package/dynamic-elements/dynamic-select/dynamic-select.component.scss +0 -13
  40. package/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.scss +0 -0
  41. package/dynamic-elements/dynamic-slider/dynamic-slider.component.scss +0 -19
  42. package/dynamic-elements/dynamic-textarea/dynamic-textarea.component.scss +0 -13
  43. package/dynamic-forms.component.scss +0 -27
  44. package/esm2020/dynamic-element.component.mjs +0 -220
  45. package/esm2020/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.mjs +0 -35
  46. package/esm2020/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.mjs +0 -58
  47. package/esm2020/dynamic-elements/dynamic-file-input/dynamic-file-input.component.mjs +0 -84
  48. package/esm2020/dynamic-elements/dynamic-input/dynamic-input.component.mjs +0 -55
  49. package/esm2020/dynamic-elements/dynamic-select/dynamic-select.component.mjs +0 -67
  50. package/esm2020/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.mjs +0 -36
  51. package/esm2020/dynamic-elements/dynamic-slider/dynamic-slider.component.mjs +0 -62
  52. package/esm2020/dynamic-elements/dynamic-textarea/dynamic-textarea.component.mjs +0 -50
  53. package/esm2020/dynamic-forms.component.mjs +0 -220
  54. package/esm2020/dynamic-forms.module.mjs +0 -118
  55. package/esm2020/index.mjs +0 -2
  56. package/esm2020/services/dynamic-forms.service.mjs +0 -125
  57. package/index.d.ts +0 -1
@@ -1,67 +0,0 @@
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/forms";
6
- import * as i4 from "@angular/common";
7
- import * as i5 from "@angular/material/core";
8
- function TdDynamicSelectComponent_mat_option_5_Template(rf, ctx) { if (rf & 1) {
9
- i0.ɵɵelementStart(0, "mat-option", 5);
10
- i0.ɵɵtext(1);
11
- i0.ɵɵelementEnd();
12
- } if (rf & 2) {
13
- const selection_r2 = ctx.$implicit;
14
- i0.ɵɵproperty("value", selection_r2.value || selection_r2);
15
- i0.ɵɵadvance(1);
16
- i0.ɵɵtextInterpolate1(" ", selection_r2.label || selection_r2, " ");
17
- } }
18
- function TdDynamicSelectComponent_ng_template_9_Template(rf, ctx) { }
19
- const _c0 = function (a0, a1) { return { control: a0, errors: a1 }; };
20
- export class TdDynamicSelectComponent {
21
- constructor() {
22
- this.label = '';
23
- this.hint = '';
24
- this.name = '';
25
- this.required = undefined;
26
- this.selections = undefined;
27
- this.multiple = undefined;
28
- this.errorMessageTemplate = undefined;
29
- this.placeholder = '';
30
- }
31
- }
32
- /** @nocollapse */ /** @nocollapse */ TdDynamicSelectComponent.ɵfac = function TdDynamicSelectComponent_Factory(t) { return new (t || TdDynamicSelectComponent)(); };
33
- /** @nocollapse */ /** @nocollapse */ TdDynamicSelectComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: TdDynamicSelectComponent, selectors: [["td-dynamic-select"]], decls: 10, vars: 13, consts: [[1, "td-dynamic-select-wrapper"], [1, "td-dynamic-select-field"], [3, "formControl", "placeholder", "required", "multiple"], [3, "value", 4, "ngFor", "ngForOf"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "value"]], template: function TdDynamicSelectComponent_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelementStart(0, "div", 0);
35
- i0.ɵɵelementStart(1, "mat-form-field", 1);
36
- i0.ɵɵelementStart(2, "mat-label");
37
- i0.ɵɵtext(3);
38
- i0.ɵɵelementEnd();
39
- i0.ɵɵelementStart(4, "mat-select", 2);
40
- i0.ɵɵtemplate(5, TdDynamicSelectComponent_mat_option_5_Template, 2, 2, "mat-option", 3);
41
- i0.ɵɵelementEnd();
42
- i0.ɵɵelementStart(6, "mat-hint");
43
- i0.ɵɵtext(7);
44
- i0.ɵɵelementEnd();
45
- i0.ɵɵelementStart(8, "mat-error");
46
- i0.ɵɵtemplate(9, TdDynamicSelectComponent_ng_template_9_Template, 0, 0, "ng-template", 4);
47
- i0.ɵɵelementEnd();
48
- i0.ɵɵelementEnd();
49
- i0.ɵɵelementEnd();
50
- } if (rf & 2) {
51
- i0.ɵɵadvance(3);
52
- i0.ɵɵtextInterpolate(ctx.label);
53
- i0.ɵɵadvance(1);
54
- i0.ɵɵproperty("formControl", ctx.control)("placeholder", ctx.placeholder)("required", ctx.required)("multiple", ctx.multiple);
55
- i0.ɵɵattribute("name", ctx.name);
56
- i0.ɵɵadvance(1);
57
- i0.ɵɵproperty("ngForOf", ctx.selections);
58
- i0.ɵɵadvance(2);
59
- i0.ɵɵtextInterpolate(ctx.hint);
60
- i0.ɵɵadvance(2);
61
- i0.ɵɵproperty("ngTemplateOutlet", ctx.errorMessageTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(10, _c0, ctx.control, ctx.control == null ? null : ctx.control.errors));
62
- } }, directives: [i1.MatFormField, i1.MatLabel, i2.MatSelect, i3.NgControlStatus, i3.FormControlDirective, i3.RequiredValidator, i4.NgForOf, i5.MatOption, i1.MatHint, i1.MatError, i4.NgTemplateOutlet], styles: [".td-dynamic-select-wrapper[_ngcontent-%COMP%]{-ms-flex-direction:row;flex-direction:row;display:-ms-flexbox;display:flex;box-sizing:border-box}.td-dynamic-select-wrapper[_ngcontent-%COMP%] .td-dynamic-select-field[_ngcontent-%COMP%]{-ms-flex:1;flex:1;box-sizing:border-box}"] });
63
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdDynamicSelectComponent, [{
64
- type: Component,
65
- 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 *ngFor=\"let selection of selections\" [value]=\"selection.value || selection\">\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]=\"{ control: control, errors: control?.errors }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-select-wrapper{-ms-flex-direction:row;flex-direction:row;display:-ms-flexbox;display:flex;box-sizing:border-box}.td-dynamic-select-wrapper .td-dynamic-select-field{-ms-flex:1;flex:1;box-sizing:border-box}\n"] }]
66
- }], null, null); })();
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3BsYXRmb3JtL2R5bmFtaWMtZm9ybXMvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vZHluYW1pYy1mb3Jtcy9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0lDVWpELHFDQUF3RjtJQUN0RixZQUNGO0lBQUEsaUJBQWE7OztJQUZvQywwREFBc0M7SUFDckYsZUFDRjtJQURFLG1FQUNGOzs7O0FESk4sTUFBTSxPQUFPLHdCQUF3QjtJQUxyQztRQVFFLFVBQUssR0FBVyxFQUFFLENBQUM7UUFFbkIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUVsQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRWxCLGFBQVEsR0FBWSxTQUFTLENBQUM7UUFFOUIsZUFBVSxHQUFVLFNBQVMsQ0FBQztRQUU5QixhQUFRLEdBQVksU0FBUyxDQUFDO1FBRTlCLHlCQUFvQixHQUFxQixTQUFTLENBQUM7UUFFbkQsZ0JBQVcsR0FBVyxFQUFFLENBQUM7S0FDMUI7O3NJQWxCWSx3QkFBd0I7NkhBQXhCLHdCQUF3QjtRQ1JyQyw4QkFBdUM7UUFDckMseUNBQWdEO1FBQzlDLGlDQUFXO1FBQUEsWUFBVztRQUFBLGlCQUFZO1FBQ2xDLHFDQU1DO1FBQ0MsdUZBRWE7UUFDZixpQkFBYTtRQUNiLGdDQUFVO1FBQUEsWUFBVTtRQUFBLGlCQUFXO1FBQy9CLGlDQUFXO1FBQ1QseUZBR2U7UUFDakIsaUJBQVk7UUFDZCxpQkFBaUI7UUFDbkIsaUJBQU07O1FBcEJTLGVBQVc7UUFBWCwrQkFBVztRQUVwQixlQUF1QjtRQUF2Qix5Q0FBdUIsZ0NBQUEsMEJBQUEsMEJBQUE7UUFHdkIsZ0NBQWtCO1FBR2dCLGVBQWE7UUFBYix3Q0FBYTtRQUl2QyxlQUFVO1FBQVYsOEJBQVU7UUFHaEIsZUFBeUM7UUFBekMsMkRBQXlDLHNIQUFBOzt1RkRUcEMsd0JBQXdCO2NBTHBDLFNBQVM7MkJBQ0UsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RkLWR5bmFtaWMtc2VsZWN0JyxcbiAgc3R5bGVVcmxzOiBbJy4vZHluYW1pYy1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgVGREeW5hbWljU2VsZWN0Q29tcG9uZW50IHtcbiAgY29udHJvbDogRm9ybUNvbnRyb2w7XG5cbiAgbGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIGhpbnQ6IHN0cmluZyA9ICcnO1xuXG4gIG5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIHJlcXVpcmVkOiBib29sZWFuID0gdW5kZWZpbmVkO1xuXG4gIHNlbGVjdGlvbnM6IGFueVtdID0gdW5kZWZpbmVkO1xuXG4gIG11bHRpcGxlOiBib29sZWFuID0gdW5kZWZpbmVkO1xuXG4gIGVycm9yTWVzc2FnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gdW5kZWZpbmVkO1xuXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbn1cbiIsIjxkaXYgY2xhc3M9XCJ0ZC1keW5hbWljLXNlbGVjdC13cmFwcGVyXCI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInRkLWR5bmFtaWMtc2VsZWN0LWZpZWxkXCI+XG4gICAgPG1hdC1sYWJlbD57eyBsYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDxtYXQtc2VsZWN0XG4gICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZWxlY3Rpb24gb2Ygc2VsZWN0aW9uc1wiIFt2YWx1ZV09XCJzZWxlY3Rpb24udmFsdWUgfHwgc2VsZWN0aW9uXCI+XG4gICAgICAgIHt7IHNlbGVjdGlvbi5sYWJlbCB8fCBzZWxlY3Rpb24gfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gICAgPG1hdC1oaW50Pnt7IGhpbnQgfX08L21hdC1oaW50PlxuICAgIDxtYXQtZXJyb3I+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3JNZXNzYWdlVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjb250cm9sOiBjb250cm9sLCBlcnJvcnM6IGNvbnRyb2w/LmVycm9ycyB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG4iXX0=
@@ -1,36 +0,0 @@
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
- /** @nocollapse */ /** @nocollapse */ TdDynamicSlideToggleComponent.ɵfac = function TdDynamicSlideToggleComponent_Factory(t) { return new (t || TdDynamicSlideToggleComponent)(); };
14
- /** @nocollapse */ /** @nocollapse */ TdDynamicSlideToggleComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: TdDynamicSlideToggleComponent, selectors: [["td-dynamic-slide-toggle"]], decls: 5, vars: 5, consts: [[1, "td-dynamic-slide-toggle-wrapper"], [3, "formControl", "required"], [1, "mat-hint", "td-dynamic-element-hint"]], template: function TdDynamicSlideToggleComponent_Template(rf, ctx) { if (rf & 1) {
15
- i0.ɵɵelementStart(0, "div", 0);
16
- i0.ɵɵelementStart(1, "mat-slide-toggle", 1);
17
- i0.ɵɵtext(2);
18
- i0.ɵɵelementEnd();
19
- i0.ɵɵelementStart(3, "span", 2);
20
- i0.ɵɵtext(4);
21
- i0.ɵɵelementEnd();
22
- i0.ɵɵelementEnd();
23
- } if (rf & 2) {
24
- i0.ɵɵadvance(1);
25
- i0.ɵɵproperty("formControl", ctx.control)("required", ctx.required);
26
- i0.ɵɵattribute("name", ctx.name);
27
- i0.ɵɵadvance(1);
28
- i0.ɵɵtextInterpolate1(" ", ctx.label, " ");
29
- i0.ɵɵadvance(2);
30
- i0.ɵɵtextInterpolate(ctx.hint);
31
- } }, directives: [i1.MatSlideToggle, i1.MatSlideToggleRequiredValidator, i2.NgControlStatus, i2.FormControlDirective, i2.RequiredValidator], styles: [""] });
32
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdDynamicSlideToggleComponent, [{
33
- type: Component,
34
- args: [{ selector: 'td-dynamic-slide-toggle', template: "<div class=\"td-dynamic-slide-toggle-wrapper\">\n <mat-slide-toggle [formControl]=\"control\" [attr.name]=\"name\" [required]=\"required\">\n {{ label }}\n </mat-slide-toggle>\n <span class=\"mat-hint td-dynamic-element-hint\">{{ hint }}</span>\n</div>\n", styles: [""] }]
35
- }], null, null); })();
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zbGlkZS10b2dnbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3BsYXRmb3JtL2R5bmFtaWMtZm9ybXMvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlLXRvZ2dsZS9keW5hbWljLXNsaWRlLXRvZ2dsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vZHluYW1pYy1mb3Jtcy9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2xpZGUtdG9nZ2xlL2R5bmFtaWMtc2xpZGUtdG9nZ2xlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRMUMsTUFBTSxPQUFPLDZCQUE2QjtJQUwxQztRQVFFLFVBQUssR0FBVyxFQUFFLENBQUM7UUFFbkIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUVsQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRWxCLGFBQVEsR0FBWSxLQUFLLENBQUM7S0FDM0I7O2dKQVZZLDZCQUE2QjtrSUFBN0IsNkJBQTZCO1FDUjFDLDhCQUE2QztRQUMzQywyQ0FBbUY7UUFDakYsWUFDRjtRQUFBLGlCQUFtQjtRQUNuQiwrQkFBK0M7UUFBQSxZQUFVO1FBQUEsaUJBQU87UUFDbEUsaUJBQU07O1FBSmMsZUFBdUI7UUFBdkIseUNBQXVCLDBCQUFBO1FBQUMsZ0NBQWtCO1FBQzFELGVBQ0Y7UUFERSwwQ0FDRjtRQUMrQyxlQUFVO1FBQVYsOEJBQVU7O3VGREk5Qyw2QkFBNkI7Y0FMekMsU0FBUzsyQkFDRSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1keW5hbWljLXNsaWRlLXRvZ2dsZScsXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtc2xpZGUtdG9nZ2xlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLXNsaWRlLXRvZ2dsZS5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFRkRHluYW1pY1NsaWRlVG9nZ2xlQ29tcG9uZW50IHtcbiAgY29udHJvbDogRm9ybUNvbnRyb2w7XG5cbiAgbGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIG5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIGhpbnQ6IHN0cmluZyA9ICcnO1xuXG4gIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG59XG4iLCI8ZGl2IGNsYXNzPVwidGQtZHluYW1pYy1zbGlkZS10b2dnbGUtd3JhcHBlclwiPlxuICA8bWF0LXNsaWRlLXRvZ2dsZSBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFthdHRyLm5hbWVdPVwibmFtZVwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiPlxuICAgIHt7IGxhYmVsIH19XG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPHNwYW4gY2xhc3M9XCJtYXQtaGludCB0ZC1keW5hbWljLWVsZW1lbnQtaGludFwiPnt7IGhpbnQgfX08L3NwYW4+XG48L2Rpdj5cbiJdfQ==
@@ -1,62 +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/material/slider";
5
- import * as i3 from "@angular/forms";
6
- function TdDynamicSliderComponent_span_4_Template(rf, ctx) { if (rf & 1) {
7
- i0.ɵɵelementStart(0, "span", 8);
8
- i0.ɵɵtext(1, "*");
9
- i0.ɵɵelementEnd();
10
- } }
11
- export class TdDynamicSliderComponent {
12
- constructor(_changeDetectorRef) {
13
- this._changeDetectorRef = _changeDetectorRef;
14
- this.label = '';
15
- this.required = undefined;
16
- this.name = '';
17
- this.hint = '';
18
- this.min = undefined;
19
- this.max = undefined;
20
- }
21
- _handleBlur() {
22
- setTimeout(() => {
23
- this._changeDetectorRef.markForCheck();
24
- });
25
- }
26
- }
27
- /** @nocollapse */ /** @nocollapse */ TdDynamicSliderComponent.ɵfac = function TdDynamicSliderComponent_Factory(t) { return new (t || TdDynamicSliderComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
28
- /** @nocollapse */ /** @nocollapse */ TdDynamicSliderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: TdDynamicSliderComponent, selectors: [["td-dynamic-slider"]], decls: 10, vars: 10, consts: [[1, "td-dynamic-slider-wrapper", "mat-form-field", "mat-form-field-can-float", "mat-form-field-should-float"], [1, "mat-form-field-label-wrapper"], [1, "mat-form-field-label", "mat-primary", "td-slider-label"], ["class", "mat-form-field-required-marker", 4, "ngIf"], [1, "td-dynamic-slider-field"], ["thumbLabel", "", "tickInterval", "auto", 1, "td-dynamic-slider", 3, "formControl", "min", "max", "required", "blur"], ["slider", ""], [1, "mat-hint", "td-dynamic-element-hint"], [1, "mat-form-field-required-marker"]], template: function TdDynamicSliderComponent_Template(rf, ctx) { if (rf & 1) {
29
- i0.ɵɵelementStart(0, "div", 0);
30
- i0.ɵɵelementStart(1, "span", 1);
31
- i0.ɵɵelementStart(2, "label", 2);
32
- i0.ɵɵtext(3);
33
- i0.ɵɵtemplate(4, TdDynamicSliderComponent_span_4_Template, 2, 0, "span", 3);
34
- i0.ɵɵelementEnd();
35
- i0.ɵɵelementEnd();
36
- i0.ɵɵelementStart(5, "div", 4);
37
- i0.ɵɵelementStart(6, "mat-slider", 5, 6);
38
- i0.ɵɵlistener("blur", function TdDynamicSliderComponent_Template_mat_slider_blur_6_listener() { return ctx._handleBlur(); });
39
- i0.ɵɵelementEnd();
40
- i0.ɵɵelementEnd();
41
- i0.ɵɵelementStart(8, "span", 7);
42
- i0.ɵɵtext(9);
43
- i0.ɵɵelementEnd();
44
- i0.ɵɵelementEnd();
45
- } if (rf & 2) {
46
- const _r1 = i0.ɵɵreference(7);
47
- i0.ɵɵclassProp("mat-focused", _r1._isActive);
48
- i0.ɵɵadvance(3);
49
- i0.ɵɵtextInterpolate1(" ", ctx.label, " ");
50
- i0.ɵɵadvance(1);
51
- i0.ɵɵproperty("ngIf", ctx.required && !(ctx.control == null ? null : ctx.control.disabled));
52
- i0.ɵɵadvance(2);
53
- i0.ɵɵproperty("formControl", ctx.control)("min", ctx.min)("max", ctx.max)("required", ctx.required);
54
- i0.ɵɵattribute("name", ctx.name);
55
- i0.ɵɵadvance(3);
56
- i0.ɵɵtextInterpolate(ctx.hint);
57
- } }, directives: [i1.NgIf, i2.MatSlider, i3.NgControlStatus, i3.FormControlDirective, i3.RequiredValidator], styles: ["[_nghost-%COMP%] .td-dynamic-slider-wrapper[_ngcontent-%COMP%]{display:block}.td-dynamic-slider-field[_ngcontent-%COMP%]{position:relative;-ms-flex-direction:row;flex-direction:row;display:-ms-flexbox;display:flex;box-sizing:border-box}.td-dynamic-slider-field[_ngcontent-%COMP%] .td-dynamic-slider[_ngcontent-%COMP%]{-ms-flex:1;flex:1}"] });
58
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdDynamicSliderComponent, [{
59
- type: Component,
60
- 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 *ngIf=\"required && !control?.disabled\" class=\"mat-form-field-required-marker\">*</span>\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;-ms-flex-direction:row;flex-direction:row;display:-ms-flexbox;display:flex;box-sizing:border-box}.td-dynamic-slider-field .td-dynamic-slider{-ms-flex:1;flex:1}\n"] }]
61
- }], function () { return [{ type: i0.ChangeDetectorRef }]; }, null); })();
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zbGlkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3BsYXRmb3JtL2R5bmFtaWMtZm9ybXMvZHluYW1pYy1lbGVtZW50cy9keW5hbWljLXNsaWRlci9keW5hbWljLXNsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vZHluYW1pYy1mb3Jtcy9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2xpZGVyL2R5bmFtaWMtc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztJQ092RCwrQkFBb0Y7SUFBQSxpQkFBQztJQUFBLGlCQUFPOztBRENsRyxNQUFNLE9BQU8sd0JBQXdCO0lBZW5DLFlBQW9CLGtCQUFxQztRQUFyQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBWnpELFVBQUssR0FBVyxFQUFFLENBQUM7UUFFbkIsYUFBUSxHQUFZLFNBQVMsQ0FBQztRQUU5QixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRWxCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFFbEIsUUFBRyxHQUFXLFNBQVMsQ0FBQztRQUV4QixRQUFHLEdBQVcsU0FBUyxDQUFDO0lBRW9DLENBQUM7SUFFN0QsV0FBVztRQUNULFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztzSUFyQlUsd0JBQXdCOzZIQUF4Qix3QkFBd0I7UUNSckMsOEJBR0M7UUFDQywrQkFBMkM7UUFDekMsZ0NBQWdFO1FBQzlELFlBQ0E7UUFBQSwyRUFBNEY7UUFDOUYsaUJBQVE7UUFDVixpQkFBTztRQUNQLDhCQUFxQztRQUNuQyx3Q0FXQztRQURDLHVHQUFRLGlCQUFhLElBQUM7UUFDdkIsaUJBQWE7UUFDaEIsaUJBQU07UUFDTiwrQkFBK0M7UUFBQSxZQUFVO1FBQUEsaUJBQU87UUFDbEUsaUJBQU07OztRQXZCSiw0Q0FBc0M7UUFJbEMsZUFDQTtRQURBLDBDQUNBO1FBQU8sZUFBb0M7UUFBcEMsMkZBQW9DO1FBTzNDLGVBQXVCO1FBQXZCLHlDQUF1QixnQkFBQSxnQkFBQSwwQkFBQTtRQUN2QixnQ0FBa0I7UUFTeUIsZUFBVTtRQUFWLDhCQUFVOzt1RkRoQjlDLHdCQUF3QjtjQUxwQyxTQUFTOzJCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1keW5hbWljLXNsaWRlcicsXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtc2xpZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLXNsaWRlci5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFRkRHluYW1pY1NsaWRlckNvbXBvbmVudCB7XG4gIGNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gIGxhYmVsOiBzdHJpbmcgPSAnJztcblxuICByZXF1aXJlZDogYm9vbGVhbiA9IHVuZGVmaW5lZDtcblxuICBuYW1lOiBzdHJpbmcgPSAnJztcblxuICBoaW50OiBzdHJpbmcgPSAnJztcblxuICBtaW46IG51bWJlciA9IHVuZGVmaW5lZDtcblxuICBtYXg6IG51bWJlciA9IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgX2hhbmRsZUJsdXIoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInRkLWR5bmFtaWMtc2xpZGVyLXdyYXBwZXIgbWF0LWZvcm0tZmllbGQgbWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFwiXG4gIFtjbGFzcy5tYXQtZm9jdXNlZF09XCJzbGlkZXIuX2lzQWN0aXZlXCJcbj5cbiAgPHNwYW4gY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtbGFiZWwgbWF0LXByaW1hcnkgdGQtc2xpZGVyLWxhYmVsXCI+XG4gICAgICB7eyBsYWJlbCB9fVxuICAgICAgPHNwYW4gKm5nSWY9XCJyZXF1aXJlZCAmJiAhY29udHJvbD8uZGlzYWJsZWRcIiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlclwiPio8L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgPC9zcGFuPlxuICA8ZGl2IGNsYXNzPVwidGQtZHluYW1pYy1zbGlkZXItZmllbGRcIj5cbiAgICA8bWF0LXNsaWRlclxuICAgICAgI3NsaWRlclxuICAgICAgY2xhc3M9XCJ0ZC1keW5hbWljLXNsaWRlclwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgW21heF09XCJtYXhcIlxuICAgICAgdGh1bWJMYWJlbFxuICAgICAgdGlja0ludGVydmFsPVwiYXV0b1wiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgKGJsdXIpPVwiX2hhbmRsZUJsdXIoKVwiXG4gICAgPjwvbWF0LXNsaWRlcj5cbiAgPC9kaXY+XG4gIDxzcGFuIGNsYXNzPVwibWF0LWhpbnQgdGQtZHluYW1pYy1lbGVtZW50LWhpbnRcIj57eyBoaW50IH19PC9zcGFuPlxuPC9kaXY+XG4iXX0=
@@ -1,50 +0,0 @@
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
- function TdDynamicTextareaComponent_ng_template_9_Template(rf, ctx) { }
8
- const _c0 = function (a0, a1) { return { control: a0, errors: a1 }; };
9
- export class TdDynamicTextareaComponent {
10
- constructor() {
11
- this.label = '';
12
- this.hint = '';
13
- this.name = '';
14
- this.required = undefined;
15
- this.errorMessageTemplate = undefined;
16
- this.placeholder = '';
17
- }
18
- }
19
- /** @nocollapse */ /** @nocollapse */ TdDynamicTextareaComponent.ɵfac = function TdDynamicTextareaComponent_Factory(t) { return new (t || TdDynamicTextareaComponent)(); };
20
- /** @nocollapse */ /** @nocollapse */ TdDynamicTextareaComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: TdDynamicTextareaComponent, selectors: [["td-dynamic-textarea"]], decls: 10, vars: 11, consts: [[1, "td-dynamic-textarea-wrapper"], [1, "td-dynamic-textarea-field"], ["matInput", "", "rows", "4", 3, "formControl", "placeholder", "required"], ["elementInput", ""], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function TdDynamicTextareaComponent_Template(rf, ctx) { if (rf & 1) {
21
- i0.ɵɵelementStart(0, "div", 0);
22
- i0.ɵɵelementStart(1, "mat-form-field", 1);
23
- i0.ɵɵelementStart(2, "mat-label");
24
- i0.ɵɵtext(3);
25
- i0.ɵɵelementEnd();
26
- i0.ɵɵelement(4, "textarea", 2, 3);
27
- i0.ɵɵelementStart(6, "mat-hint");
28
- i0.ɵɵtext(7);
29
- i0.ɵɵelementEnd();
30
- i0.ɵɵelementStart(8, "mat-error");
31
- i0.ɵɵtemplate(9, TdDynamicTextareaComponent_ng_template_9_Template, 0, 0, "ng-template", 4);
32
- i0.ɵɵelementEnd();
33
- i0.ɵɵelementEnd();
34
- i0.ɵɵelementEnd();
35
- } if (rf & 2) {
36
- i0.ɵɵadvance(3);
37
- i0.ɵɵtextInterpolate(ctx.label);
38
- i0.ɵɵadvance(1);
39
- i0.ɵɵproperty("formControl", ctx.control)("placeholder", ctx.placeholder)("required", ctx.required);
40
- i0.ɵɵattribute("name", ctx.name);
41
- i0.ɵɵadvance(3);
42
- i0.ɵɵtextInterpolate(ctx.hint);
43
- i0.ɵɵadvance(2);
44
- i0.ɵɵproperty("ngTemplateOutlet", ctx.errorMessageTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(8, _c0, ctx.control, ctx.control == null ? null : ctx.control.errors));
45
- } }, directives: [i1.MatFormField, i1.MatLabel, i2.MatInput, i3.DefaultValueAccessor, i3.NgControlStatus, i3.FormControlDirective, i3.RequiredValidator, i1.MatHint, i1.MatError, i4.NgTemplateOutlet], styles: [".td-dynamic-textarea-wrapper[_ngcontent-%COMP%]{-ms-flex-direction:row;flex-direction:row;display:-ms-flexbox;display:flex;box-sizing:border-box}.td-dynamic-textarea-wrapper[_ngcontent-%COMP%] .td-dynamic-textarea-field[_ngcontent-%COMP%]{-ms-flex:1;flex:1;box-sizing:border-box}"] });
46
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdDynamicTextareaComponent, [{
47
- type: Component,
48
- 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]=\"{ control: control, errors: control?.errors }\"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".td-dynamic-textarea-wrapper{-ms-flex-direction:row;flex-direction:row;display:-ms-flexbox;display:flex;box-sizing:border-box}.td-dynamic-textarea-wrapper .td-dynamic-textarea-field{-ms-flex:1;flex:1;box-sizing:border-box}\n"] }]
49
- }], null, null); })();
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10ZXh0YXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vZHluYW1pYy1mb3Jtcy9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtdGV4dGFyZWEvZHluYW1pYy10ZXh0YXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vZHluYW1pYy1mb3Jtcy9keW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtdGV4dGFyZWEvZHluYW1pYy10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVF2RCxNQUFNLE9BQU8sMEJBQTBCO0lBTHZDO1FBUUUsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRWxCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFFbEIsYUFBUSxHQUFZLFNBQVMsQ0FBQztRQUU5Qix5QkFBb0IsR0FBcUIsU0FBUyxDQUFDO1FBRW5ELGdCQUFXLEdBQVcsRUFBRSxDQUFDO0tBQzFCOzswSUFkWSwwQkFBMEI7K0hBQTFCLDBCQUEwQjtRQ1J2Qyw4QkFBeUM7UUFDdkMseUNBQWtEO1FBQ2hELGlDQUFXO1FBQUEsWUFBVztRQUFBLGlCQUFZO1FBQ2xDLGlDQVFZO1FBQ1osZ0NBQVU7UUFBQSxZQUFVO1FBQUEsaUJBQVc7UUFDL0IsaUNBQVc7UUFDVCwyRkFHZTtRQUNqQixpQkFBWTtRQUNkLGlCQUFpQjtRQUNuQixpQkFBTTs7UUFsQlMsZUFBVztRQUFYLCtCQUFXO1FBSXBCLGVBQXVCO1FBQXZCLHlDQUF1QixnQ0FBQSwwQkFBQTtRQUd2QixnQ0FBa0I7UUFHVixlQUFVO1FBQVYsOEJBQVU7UUFHaEIsZUFBeUM7UUFBekMsMkRBQXlDLHFIQUFBOzt1RkRQcEMsMEJBQTBCO2NBTHRDLFNBQVM7MkJBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RkLWR5bmFtaWMtdGV4dGFyZWEnLFxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLXRleHRhcmVhLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLXRleHRhcmVhLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgVGREeW5hbWljVGV4dGFyZWFDb21wb25lbnQge1xuICBjb250cm9sOiBGb3JtQ29udHJvbDtcblxuICBsYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgaGludDogc3RyaW5nID0gJyc7XG5cbiAgbmFtZTogc3RyaW5nID0gJyc7XG5cbiAgcmVxdWlyZWQ6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG5cbiAgZXJyb3JNZXNzYWdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSB1bmRlZmluZWQ7XG5cbiAgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xufVxuIiwiPGRpdiBjbGFzcz1cInRkLWR5bmFtaWMtdGV4dGFyZWEtd3JhcHBlclwiPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0ZC1keW5hbWljLXRleHRhcmVhLWZpZWxkXCI+XG4gICAgPG1hdC1sYWJlbD57eyBsYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDx0ZXh0YXJlYVxuICAgICAgI2VsZW1lbnRJbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgIHJvd3M9XCI0XCJcbiAgICA+PC90ZXh0YXJlYT5cbiAgICA8bWF0LWhpbnQ+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG4gICAgPG1hdC1lcnJvcj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvck1lc3NhZ2VUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNvbnRyb2w6IGNvbnRyb2wsIGVycm9yczogY29udHJvbD8uZXJyb3JzIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==
@@ -1,220 +0,0 @@
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 "@angular/common";
11
- import * as i4 from "./dynamic-element.component";
12
- function TdDynamicFormsComponent_ng_template_2_td_dynamic_element_1_Template(rf, ctx) { if (rf & 1) {
13
- i0.ɵɵelement(0, "td-dynamic-element", 5, 6);
14
- } if (rf & 2) {
15
- const element_r1 = i0.ɵɵnextContext().$implicit;
16
- const ctx_r2 = i0.ɵɵnextContext();
17
- i0.ɵɵproperty("formControlName", element_r1.name)("dynamicControl", ctx_r2.dynamicForm.controls[element_r1.name])("id", element_r1.name)("name", element_r1.name)("label", element_r1.label || element_r1.name)("hint", element_r1.hint)("type", element_r1.type)("required", element_r1.required)("min", element_r1.min)("max", element_r1.max)("minLength", element_r1.minLength)("maxLength", element_r1.maxLength)("selections", element_r1.selections)("multiple", element_r1.multiple)("customConfig", element_r1.customConfig)("errorMessageTemplate", ctx_r2.getErrorTemplateRef(element_r1.name))("placeholder", element_r1.placeholder);
18
- } }
19
- function TdDynamicFormsComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelementStart(0, "div", 3);
21
- i0.ɵɵtemplate(1, TdDynamicFormsComponent_ng_template_2_td_dynamic_element_1_Template, 2, 17, "td-dynamic-element", 4);
22
- i0.ɵɵelementEnd();
23
- } if (rf & 2) {
24
- const element_r1 = ctx.$implicit;
25
- const ctx_r0 = i0.ɵɵnextContext();
26
- i0.ɵɵstyleProp("max-width", element_r1.flex ? element_r1.flex : 100, "%")("flex", "1 1 " + (element_r1.flex ? element_r1.flex : 100) + "%")("-ms-flex", "1 1 " + (element_r1.flex ? element_r1.flex : 100) + "%")("-webkit-box-flex", 1);
27
- i0.ɵɵadvance(1);
28
- i0.ɵɵproperty("ngIf", ctx_r0.dynamicForm.controls[element_r1.name]);
29
- } }
30
- const _c0 = ["*"];
31
- export class TdDynamicFormsComponent {
32
- constructor(_formBuilder, _dynamicFormsService, _changeDetectorRef) {
33
- this._formBuilder = _formBuilder;
34
- this._dynamicFormsService = _dynamicFormsService;
35
- this._changeDetectorRef = _changeDetectorRef;
36
- this._renderedElements = [];
37
- this._templateMap = new Map();
38
- this._destroy$ = new Subject();
39
- this._destroyControl$ = new Subject();
40
- this.dynamicForm = this._formBuilder.group({});
41
- }
42
- /**
43
- * elements: ITdDynamicElementConfig[]
44
- * JS Object that will render the elements depending on its config.
45
- * [name] property is required.
46
- */
47
- set elements(elements) {
48
- if (elements) {
49
- this._elements = elements;
50
- }
51
- else {
52
- this._elements = [];
53
- }
54
- this._rerenderElements();
55
- }
56
- get elements() {
57
- return this._renderedElements;
58
- }
59
- /**
60
- * Getter property for dynamic [FormGroup].
61
- */
62
- get form() {
63
- return this.dynamicForm;
64
- }
65
- /**
66
- * Getter property for [valid] of dynamic [FormGroup].
67
- */
68
- get valid() {
69
- if (this.dynamicForm) {
70
- return this.dynamicForm.valid;
71
- }
72
- return false;
73
- }
74
- /**
75
- * Getter property for [value] of dynamic [FormGroup].
76
- */
77
- get value() {
78
- if (this.dynamicForm) {
79
- return this.dynamicForm.value;
80
- }
81
- return {};
82
- }
83
- /**
84
- * Getter property for [errors] of dynamic [FormGroup].
85
- */
86
- get errors() {
87
- if (this.dynamicForm) {
88
- const errors = {};
89
- for (const name of Object.keys(this.dynamicForm.controls)) {
90
- errors[name] = this.dynamicForm.controls[name].errors;
91
- }
92
- return errors;
93
- }
94
- return {};
95
- }
96
- /**
97
- * Getter property for [controls] of dynamic [FormGroup].
98
- */
99
- get controls() {
100
- if (this.dynamicForm) {
101
- return this.dynamicForm.controls;
102
- }
103
- return {};
104
- }
105
- ngAfterContentInit() {
106
- this._updateErrorTemplates();
107
- }
108
- ngOnDestroy() {
109
- this._destroy$.next();
110
- this._destroy$.complete();
111
- this._destroyControl$.complete();
112
- }
113
- /**
114
- * Refreshes the form and rerenders all validator/element modifications.
115
- */
116
- refresh() {
117
- this._rerenderElements();
118
- this._updateErrorTemplates();
119
- }
120
- /**
121
- * Getter method for error template references
122
- */
123
- getErrorTemplateRef(name) {
124
- return this._templateMap.get(name);
125
- }
126
- /**
127
- * Loads error templates and sets them in a map for faster access.
128
- */
129
- _updateErrorTemplates() {
130
- this._templateMap = new Map();
131
- for (const errorTemplate of this._errorTemplates.toArray()) {
132
- this._templateMap.set(errorTemplate.tdDynamicFormsError, errorTemplate.templateRef);
133
- }
134
- }
135
- _rerenderElements() {
136
- this._clearRemovedElements();
137
- this._renderedElements = [];
138
- const duplicates = [];
139
- this._elements.forEach((elem) => {
140
- this._dynamicFormsService.validateDynamicElementName(elem.name);
141
- if (duplicates.indexOf(elem.name) > -1) {
142
- throw new Error(`Dynamic element name: "${elem.name}" is duplicated`);
143
- }
144
- duplicates.push(elem.name);
145
- const dynamicElement = this.dynamicForm.get(elem.name);
146
- if (!dynamicElement) {
147
- this.dynamicForm.addControl(elem.name, this._dynamicFormsService.createFormControl(elem));
148
- this._subscribeToControlStatusChanges(elem.name);
149
- }
150
- else {
151
- dynamicElement.setValue(elem.default);
152
- dynamicElement.markAsPristine();
153
- dynamicElement.markAsUntouched();
154
- if (elem.disabled) {
155
- dynamicElement.disable();
156
- }
157
- else {
158
- dynamicElement.enable();
159
- }
160
- dynamicElement.setValidators(this._dynamicFormsService.createValidators(elem));
161
- }
162
- // copy objects so they are only changes when calling this method
163
- this._renderedElements.push(Object.assign({}, elem));
164
- });
165
- // call a change detection since the whole form might change
166
- this._changeDetectorRef.detectChanges();
167
- timer()
168
- .toPromise()
169
- .then(() => {
170
- // call a markForCheck so elements are rendered correctly in OnPush
171
- this._changeDetectorRef.markForCheck();
172
- });
173
- }
174
- _clearRemovedElements() {
175
- this._renderedElements = this._renderedElements.filter((renderedElement) => !this._elements.some((element) => element.name === renderedElement.name));
176
- // remove elements that were removed from the array
177
- this._renderedElements.forEach((elem) => {
178
- this._destroyControl$.next(elem.name);
179
- this.dynamicForm.removeControl(elem.name);
180
- });
181
- }
182
- // Updates component when manually adding errors to controls
183
- _subscribeToControlStatusChanges(elementName) {
184
- const control = this.controls[elementName];
185
- const controlDestroyed$ = this._destroyControl$.pipe(filter((destroyedElementName) => destroyedElementName === elementName));
186
- control.statusChanges.pipe(takeUntil(this._destroy$), takeUntil(controlDestroyed$)).subscribe(() => {
187
- this._changeDetectorRef.markForCheck();
188
- });
189
- }
190
- }
191
- /** @nocollapse */ /** @nocollapse */ TdDynamicFormsComponent.ɵfac = function TdDynamicFormsComponent_Factory(t) { return new (t || TdDynamicFormsComponent)(i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.TdDynamicFormsService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
192
- /** @nocollapse */ /** @nocollapse */ TdDynamicFormsComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: TdDynamicFormsComponent, selectors: [["td-dynamic-forms"]], contentQueries: function TdDynamicFormsComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
193
- i0.ɵɵcontentQuery(dirIndex, TdDynamicFormsErrorTemplateDirective, 5);
194
- } if (rf & 2) {
195
- let _t;
196
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._errorTemplates = _t);
197
- } }, inputs: { elements: "elements" }, ngContentSelectors: _c0, decls: 4, vars: 2, consts: [["novalidate", "", 3, "formGroup"], [1, "td-dynamic-form-wrapper"], ["ngFor", "", 3, "ngForOf"], [1, "td-dynamic-element-wrapper"], [3, "formControlName", "dynamicControl", "id", "name", "label", "hint", "type", "required", "min", "max", "minLength", "maxLength", "selections", "multiple", "customConfig", "errorMessageTemplate", "placeholder", 4, "ngIf"], [3, "formControlName", "dynamicControl", "id", "name", "label", "hint", "type", "required", "min", "max", "minLength", "maxLength", "selections", "multiple", "customConfig", "errorMessageTemplate", "placeholder"], ["dynamicElement", ""]], template: function TdDynamicFormsComponent_Template(rf, ctx) { if (rf & 1) {
198
- i0.ɵɵprojectionDef();
199
- i0.ɵɵelementStart(0, "form", 0);
200
- i0.ɵɵelementStart(1, "div", 1);
201
- i0.ɵɵtemplate(2, TdDynamicFormsComponent_ng_template_2_Template, 2, 9, "ng-template", 2);
202
- i0.ɵɵelementEnd();
203
- i0.ɵɵprojection(3);
204
- i0.ɵɵelementEnd();
205
- } if (rf & 2) {
206
- i0.ɵɵproperty("formGroup", ctx.dynamicForm);
207
- i0.ɵɵadvance(2);
208
- i0.ɵɵproperty("ngForOf", ctx.elements);
209
- } }, directives: [i1.ɵNgNoValidate, i1.NgControlStatusGroup, i1.FormGroupDirective, i3.NgForOf, i3.NgIf, i4.TdDynamicElementComponent, i1.NgControlStatus, i1.FormControlName, i1.RequiredValidator], styles: [".td-dynamic-form-wrapper[_ngcontent-%COMP%]{-ms-flex-flow:row wrap;flex-flow:row wrap;box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;max-width:100%;-ms-flex-pack:start;justify-content:flex-start}.td-dynamic-form-wrapper[_ngcontent-%COMP%] .mat-form-field-infix{width:auto}.td-dynamic-form-wrapper[_ngcontent-%COMP%] .td-dynamic-element-hint{font-size:75%;display:block}.td-dynamic-form-wrapper[_ngcontent-%COMP%] .td-dynamic-element-wrapper[_ngcontent-%COMP%]{max-height:100%;box-sizing:border-box;position:relative;padding:4px 4px 8px}"], changeDetection: 0 });
210
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdDynamicFormsComponent, [{
211
- type: Component,
212
- 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\"\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{-ms-flex-flow:row wrap;flex-flow:row wrap;box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;max-width:100%;-ms-flex-pack:start;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"] }]
213
- }], function () { return [{ type: i1.FormBuilder }, { type: i2.TdDynamicFormsService }, { type: i0.ChangeDetectorRef }]; }, { _errorTemplates: [{
214
- type: ContentChildren,
215
- args: [TdDynamicFormsErrorTemplateDirective, { descendants: true }]
216
- }], elements: [{
217
- type: Input,
218
- args: ['elements']
219
- }] }); })();
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3Jtcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vZHluYW1pYy1mb3Jtcy9keW5hbWljLWZvcm1zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9wbGF0Zm9ybS9keW5hbWljLWZvcm1zL2R5bmFtaWMtZm9ybXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixlQUFlLEVBRWYsU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYSxXQUFXLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLHFCQUFxQixFQUEyQixNQUFNLGtDQUFrQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRW5GLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7SUNQM0MsMkNBb0JzQjs7OztJQWpCcEIsaURBQWdDLGdFQUFBLHVCQUFBLHlCQUFBLDhDQUFBLHlCQUFBLHlCQUFBLGlDQUFBLHVCQUFBLHVCQUFBLG1DQUFBLG1DQUFBLHFDQUFBLGlDQUFBLHlDQUFBLHFFQUFBLHVDQUFBOzs7SUFWcEMsOEJBTUM7SUFDQyxxSEFvQnNCO0lBQ3hCLGlCQUFNOzs7O0lBMUJKLHlFQUF1RCxrRUFBQSxzRUFBQSx1QkFBQTtJQU9wRCxlQUF3QztJQUF4QyxtRUFBd0M7OztBRGFuRCxNQUFNLE9BQU8sdUJBQXVCO0lBZ0ZsQyxZQUNVLFlBQXlCLEVBQ3pCLG9CQUEyQyxFQUMzQyxrQkFBcUM7UUFGckMsaUJBQVksR0FBWixZQUFZLENBQWE7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e1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgVGVtcGxhdGVSZWYsXG4gIFF1ZXJ5TGlzdCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgVGREeW5hbWljRm9ybXNTZXJ2aWNlLCBJVGREeW5hbWljRWxlbWVudENvbmZpZyB9IGZyb20gJy4vc2VydmljZXMvZHluYW1pYy1mb3Jtcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRkRHluYW1pY0Zvcm1zRXJyb3JUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vZHluYW1pYy1lbGVtZW50LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IHRpbWVyLCBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtZHluYW1pYy1mb3JtcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZvcm1zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHluYW1pYy1mb3Jtcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGREeW5hbWljRm9ybXNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9yZW5kZXJlZEVsZW1lbnRzOiBJVGREeW5hbWljRWxlbWVudENvbmZpZ1tdID0gW107XG4gIHByaXZhdGUgX2VsZW1lbnRzOiBJVGREeW5hbWljRWxlbWVudENvbmZpZ1tdO1xuICBwcml2YXRlIF90ZW1wbGF0ZU1hcDogTWFwPHN0cmluZywgVGVtcGxhdGVSZWY8YW55Pj4gPSBuZXcgTWFwPHN0cmluZywgVGVtcGxhdGVSZWY8YW55Pj4oKTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX2Rlc3Ryb3lDb250cm9sJDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcblxuICBAQ29udGVudENoaWxkcmVuKFRkRHluYW1pY0Zvcm1zRXJyb3JUZW1wbGF0ZURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBfZXJyb3JUZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZER5bmFtaWNGb3Jtc0Vycm9yVGVtcGxhdGVEaXJlY3RpdmU+O1xuICBkeW5hbWljRm9ybTogRm9ybUdyb3VwO1xuXG4gIC8qKlxuICAgKiBlbGVtZW50czogSVRkRHluYW1pY0VsZW1lbnRDb25maWdbXVxuICAgKiBKUyBPYmplY3QgdGhhdCB3aWxsIHJlbmRlciB0aGUgZWxlbWVudHMgZGVwZW5kaW5nIG9uIGl0cyBjb25maWcuXG4gICAqIFtuYW1lXSBwcm9wZXJ0eSBpcyByZXF1aXJlZC5cbiAgICovXG4gIEBJbnB1dCgnZWxlbWVudHMnKVxuICBzZXQgZWxlbWVudHMoZWxlbWVudHM6IElUZER5bmFtaWNFbGVtZW50Q29uZmlnW10pIHtcbiAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRzID0gZWxlbWVudHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRzID0gW107XG4gICAgfVxuICAgIHRoaXMuX3JlcmVuZGVyRWxlbWVudHMoKTtcbiAgfVxuICBnZXQgZWxlbWVudHMoKTogSVRkRHluYW1pY0VsZW1lbnRDb25maWdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlcmVkRWxlbWVudHM7XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIHByb3BlcnR5IGZvciBkeW5hbWljIFtGb3JtR3JvdXBdLlxuICAgKi9cbiAgZ2V0IGZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5keW5hbWljRm9ybTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgcHJvcGVydHkgZm9yIFt2YWxpZF0gb2YgZHluYW1pYyBbRm9ybUdyb3VwXS5cbiAgICovXG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5keW5hbWljRm9ybSkge1xuICAgICAgcmV0dXJuIHRoaXMuZHluYW1pY0Zvcm0udmFsaWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgcHJvcGVydHkgZm9yIFt2YWx1ZV0gb2YgZHluYW1pYyBbRm9ybUdyb3VwXS5cbiAgICovXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIGlmICh0aGlzLmR5bmFtaWNGb3JtKSB7XG4gICAgICByZXR1cm4gdGhpcy5keW5hbWljRm9ybS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBwcm9wZXJ0eSBmb3IgW2Vycm9yc10gb2YgZHluYW1pYyBbRm9ybUdyb3VwXS5cbiAgICovXG4gIGdldCBlcnJvcnMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmICh0aGlzLmR5bmFtaWNGb3JtKSB7XG4gICAgICBjb25zdCBlcnJvcnM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5keW5hbWljRm9ybS5jb250cm9scykpIHtcbiAgICAgICAgZXJyb3JzW25hbWVdID0gdGhpcy5keW5hbWljRm9ybS5jb250cm9sc1tuYW1lXS5lcnJvcnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIHByb3BlcnR5IGZvciBbY29udHJvbHNdIG9mIGR5bmFtaWMgW0Zvcm1Hcm91cF0uXG4gICAqL1xuICBnZXQgY29udHJvbHMoKTogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSB7XG4gICAgaWYgKHRoaXMuZHluYW1pY0Zvcm0pIHtcbiAgICAgIHJldHVybiB0aGlzLmR5bmFtaWNGb3JtLmNvbnRyb2xzO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9mb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBfZHluYW1pY0Zvcm1zU2VydmljZTogVGREeW5hbWljRm9ybXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgdGhpcy5keW5hbWljRm9ybSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHt9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVFcnJvclRlbXBsYXRlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZGVzdHJveUNvbnRyb2wkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSBmb3JtIGFuZCByZXJlbmRlcnMgYWxsIHZhbGlkYXRvci9lbGVtZW50IG1vZGlmaWNhdGlvbnMuXG4gICAqL1xuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlcmVuZGVyRWxlbWVudHMoKTtcbiAgICB0aGlzLl91cGRhdGVFcnJvclRlbXBsYXRlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBtZXRob2QgZm9yIGVycm9yIHRlbXBsYXRlIHJlZmVyZW5jZXNcbiAgICovXG4gIGdldEVycm9yVGVtcGxhdGVSZWYobmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlTWFwLmdldChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBlcnJvciB0ZW1wbGF0ZXMgYW5kIHNldHMgdGhlbSBpbiBhIG1hcCBmb3IgZmFzdGVyIGFjY2Vzcy5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUVycm9yVGVtcGxhdGVzKCk6IHZvaWQge1xuICAgIHRoaXMuX3RlbXBsYXRlTWFwID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlUmVmPGFueT4+KCk7XG4gICAgZm9yIChjb25zdCBlcnJvclRlbXBsYXRlIG9mIHRoaXMuX2Vycm9yVGVtcGxhdGVzLnRvQXJyYXkoKSkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVNYXAuc2V0KGVycm9yVGVtcGxhdGUudGREeW5hbWljRm9ybXNFcnJvciwgZXJyb3JUZW1wbGF0ZS50ZW1wbGF0ZVJlZik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVyZW5kZXJFbGVtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9jbGVhclJlbW92ZWRFbGVtZW50cygpO1xuICAgIHRoaXMuX3JlbmRlcmVkRWxlbWVudHMgPSBbXTtcbiAgICBjb25zdCBkdXBsaWNhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMuX2VsZW1lbnRzLmZvckVhY2goKGVsZW06IElUZER5bmFtaWNFbGVtZW50Q29uZmlnKSA9PiB7XG4gICAgICB0aGlzLl9keW5hbWljRm9ybXNTZXJ2aWNlLnZhbGlkYXRlRHluYW1pY0VsZW1lbnROYW1lKGVsZW0ubmFtZSk7XG4gICAgICBpZiAoZHVwbGljYXRlcy5pbmRleE9mKGVsZW0ubmFtZSkgPiAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER5bmFtaWMgZWxlbWVudCBuYW1lOiBcIiR7ZWxlbS5uYW1lfVwiIGlzIGR1cGxpY2F0ZWRgKTtcbiAgICAgIH1cbiAgICAgIGR1cGxpY2F0ZXMucHVzaChlbGVtLm5hbWUpO1xuICAgICAgY29uc3QgZHluYW1pY0VsZW1lbnQ6IEFic3RyYWN0Q29udHJvbCA9IHRoaXMuZHluYW1pY0Zvcm0uZ2V0KGVsZW0ubmFtZSk7XG4gICAgICBpZiAoIWR5bmFtaWNFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZHluYW1pY0Zvcm0uYWRkQ29udHJvbChlbGVtLm5hbWUsIHRoaXMuX2R5bmFtaWNGb3Jtc1NlcnZpY2UuY3JlYXRlRm9ybUNvbnRyb2woZWxlbSkpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb0NvbnRyb2xTdGF0dXNDaGFuZ2VzKGVsZW0ubmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkeW5hbWljRWxlbWVudC5zZXRWYWx1ZShlbGVtLmRlZmF1bHQpO1xuICAgICAgICBkeW5hbWljRWxlbWVudC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICBkeW5hbWljRWxlbWVudC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgaWYgKGVsZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgICBkeW5hbWljRWxlbWVudC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHluYW1pY0VsZW1lbnQuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZHluYW1pY0VsZW1lbnQuc2V0VmFsaWRhdG9ycyh0aGlzLl9keW5hbWljRm9ybXNTZXJ2aWNlLmNyZWF0ZVZhbGlkYXRvcnMoZWxlbSkpO1xuICAgICAgfVxuICAgICAgLy8gY29weSBvYmplY3RzIHNvIHRoZXkgYXJlIG9ubHkgY2hhbmdlcyB3aGVuIGNhbGxpbmcgdGhpcyBtZXRob2RcbiAgICAgIHRoaXMuX3JlbmRlcmVkRWxlbWVudHMucHVzaChPYmplY3QuYXNzaWduKHt9LCBlbGVtKSk7XG4gICAgfSk7XG4gICAgLy8gY2FsbCBhIGNoYW5nZSBkZXRlY3Rpb24gc2luY2UgdGhlIHdob2xlIGZvcm0gbWlnaHQgY2hhbmdlXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRpbWVyKClcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBjYWxsIGEgbWFya0ZvckNoZWNrIHNvIGVsZW1lbnRzIGFyZSByZW5kZXJlZCBjb3JyZWN0bHkgaW4gT25QdXNoXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhclJlbW92ZWRFbGVtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJlZEVsZW1lbnRzID0gdGhpcy5fcmVuZGVyZWRFbGVtZW50cy5maWx0ZXIoXG4gICAgICAocmVuZGVyZWRFbGVtZW50OiBJVGREeW5hbWljRWxlbWVudENvbmZpZykgPT5cbiAgICAgICAgIXRoaXMuX2VsZW1lbnRzLnNvbWUoKGVsZW1lbnQ6IElUZER5bmFtaWNFbGVtZW50Q29uZmlnKSA9PiBlbGVtZW50Lm5hbWUgPT09IHJlbmRlcmVkRWxlbWVudC5uYW1lKSxcbiAgICApO1xuICAgIC8vIHJlbW92ZSBlbGVtZW50cyB0aGF0IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBhcnJheVxuICAgIHRoaXMuX3JlbmRlcmVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbTogSVRkRHluYW1pY0VsZW1lbnRDb25maWcpID0+IHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lDb250cm9sJC5uZXh0KGVsZW0ubmFtZSk7XG4gICAgICB0aGlzLmR5bmFtaWNGb3JtLnJlbW92ZUNvbnRyb2woZWxlbS5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFVwZGF0ZXMgY29tcG9uZW50IHdoZW4gbWFudWFsbHkgYWRkaW5nIGVycm9ycyB0byBjb250cm9sc1xuICBwcml2YXRlIF9zdWJzY3JpYmVUb0NvbnRyb2xTdGF0dXNDaGFuZ2VzKGVsZW1lbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSB0aGlzLmNvbnRyb2xzW2VsZW1lbnROYW1lXTtcblxuICAgIGNvbnN0IGNvbnRyb2xEZXN0cm95ZWQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9kZXN0cm95Q29udHJvbCQucGlwZShcbiAgICAgIGZpbHRlcigoZGVzdHJveWVkRWxlbWVudE5hbWU6IHN0cmluZykgPT4gZGVzdHJveWVkRWxlbWVudE5hbWUgPT09IGVsZW1lbnROYW1lKSxcbiAgICApO1xuXG4gICAgY29udHJvbC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSwgdGFrZVVudGlsKGNvbnRyb2xEZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImR5bmFtaWNGb3JtXCIgbm92YWxpZGF0ZT5cbiAgPGRpdiBjbGFzcz1cInRkLWR5bmFtaWMtZm9ybS13cmFwcGVyXCI+XG4gICAgPG5nLXRlbXBsYXRlIGxldC1lbGVtZW50IG5nRm9yIFtuZ0Zvck9mXT1cImVsZW1lbnRzXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidGQtZHluYW1pYy1lbGVtZW50LXdyYXBwZXJcIlxuICAgICAgICBbc3R5bGUubWF4LXdpZHRoLiVdPVwiZWxlbWVudC5mbGV4ID8gZWxlbWVudC5mbGV4IDogMTAwXCJcbiAgICAgICAgW3N0eWxlLmZsZXhdPVwiJzEgMSAnICsgKGVsZW1lbnQuZmxleCA/IGVsZW1lbnQuZmxleCA6IDEwMCkgKyAnJSdcIlxuICAgICAgICBbc3R5bGUuLW1zLWZsZXhdPVwiJzEgMSAnICsgKGVsZW1lbnQuZmxleCA/IGVsZW1lbnQuZmxleCA6IDEwMCkgKyAnJSdcIlxuICAgICAgICBbc3R5bGUuLXdlYmtpdC1ib3gtZmxleF09XCIxXCJcbiAgICAgID5cbiAgICAgICAgPHRkLWR5bmFtaWMtZWxlbWVudFxuICAgICAgICAgICNkeW5hbWljRWxlbWVudFxuICAgICAgICAgICpuZ0lmPVwiZHluYW1pY0Zvcm0uY29udHJvbHNbZWxlbWVudC5uYW1lXVwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJlbGVtZW50Lm5hbWVcIlxuICAgICAgICAgIFtkeW5hbWljQ29udHJvbF09XCJkeW5hbWljRm9ybS5jb250cm9sc1tlbGVtZW50Lm5hbWVdXCJcbiAgICAgICAgICBbaWRdPVwiZWxlbWVudC5uYW1lXCJcbiAgICAgICAgICBbbmFtZV09XCJlbGVtZW50Lm5hbWVcIlxuICAgICAgICAgIFtsYWJlbF09XCJlbGVtZW50LmxhYmVsIHx8IGVsZW1lbnQubmFtZVwiXG4gICAgICAgICAgW2hpbnRdPVwiZWxlbWVudC5oaW50XCJcbiAgICAgICAgICBbdHlwZV09XCJlbGVtZW50LnR5cGVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJlbGVtZW50LnJlcXVpcmVkXCJcbiAgICAgICAgICBbbWluXT1cImVsZW1lbnQubWluXCJcbiAgICAgICAgICBbbWF4XT1cImVsZW1lbnQubWF4XCJcbiAgICAgICAgICBbbWluTGVuZ3RoXT1cImVsZW1lbnQubWluTGVuZ3RoXCJcbiAgICAgICAgICBbbWF4TGVuZ3RoXT1cImVsZW1lbnQubWF4TGVuZ3RoXCJcbiAgICAgICAgICBbc2VsZWN0aW9uc109XCJlbGVtZW50LnNlbGVjdGlvbnNcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJlbGVtZW50Lm11bHRpcGxlXCJcbiAgICAgICAgICBbY3VzdG9tQ29uZmlnXT1cImVsZW1lbnQuY3VzdG9tQ29uZmlnXCJcbiAgICAgICAgICBbZXJyb3JNZXNzYWdlVGVtcGxhdGVdPVwiZ2V0RXJyb3JUZW1wbGF0ZVJlZihlbGVtZW50Lm5hbWUpXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZWxlbWVudC5wbGFjZWhvbGRlclwiXG4gICAgICAgID48L3RkLWR5bmFtaWMtZWxlbWVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Zvcm0+XG4iXX0=