@3kles/kles-material-dynamicforms 1.1.0 → 1.1.4

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 (142) hide show
  1. package/3kles-kles-material-dynamicforms.d.ts +5 -5
  2. package/3kles-kles-material-dynamicforms.metadata.json +1 -1
  3. package/bundles/3kles-kles-material-dynamicforms.umd.js +1478 -1457
  4. package/bundles/3kles-kles-material-dynamicforms.umd.js.map +1 -1
  5. package/bundles/3kles-kles-material-dynamicforms.umd.min.js +2 -2
  6. package/bundles/3kles-kles-material-dynamicforms.umd.min.js.map +1 -1
  7. package/esm2015/3kles-kles-material-dynamicforms.js +5 -5
  8. package/esm2015/lib/directive/dynamic-component.directive.js +50 -46
  9. package/esm2015/lib/directive/dynamic-field.directive.js +94 -94
  10. package/esm2015/lib/dynamic-form.component.js +238 -234
  11. package/esm2015/lib/fields/badge.component.js +20 -20
  12. package/esm2015/lib/fields/button-form.component.js +28 -28
  13. package/esm2015/lib/fields/button-submit.component.js +20 -20
  14. package/esm2015/lib/fields/button-toogle-group.component.js +37 -37
  15. package/esm2015/lib/fields/buttonchecker-form.component.js +28 -28
  16. package/esm2015/lib/fields/buttonfile-form.component.js +27 -27
  17. package/esm2015/lib/fields/checkbox.component.js +24 -24
  18. package/esm2015/lib/fields/chip.component.js +23 -23
  19. package/esm2015/lib/fields/color.component.js +58 -58
  20. package/esm2015/lib/fields/date.component.js +28 -28
  21. package/esm2015/lib/fields/field.abstract.js +40 -40
  22. package/esm2015/lib/fields/group.component.js +27 -27
  23. package/esm2015/lib/fields/icon.component.js +18 -18
  24. package/esm2015/lib/fields/input.clearable.component.js +56 -56
  25. package/esm2015/lib/fields/input.component.js +101 -101
  26. package/esm2015/lib/fields/label.component.js +23 -23
  27. package/esm2015/lib/fields/line-break.component.js +19 -19
  28. package/esm2015/lib/fields/link.component.js +20 -20
  29. package/esm2015/lib/fields/list-field.component.js +83 -83
  30. package/esm2015/lib/fields/radio.component.js +27 -27
  31. package/esm2015/lib/fields/select.component.js +120 -114
  32. package/esm2015/lib/fields/select.search.component.js +205 -199
  33. package/esm2015/lib/fields/selection-list.component.js +40 -41
  34. package/esm2015/lib/fields/slide-toggle.component.js +24 -24
  35. package/esm2015/lib/fields/text.component.js +20 -20
  36. package/esm2015/lib/fields/textarea.component.js +32 -32
  37. package/esm2015/lib/forms/button-control.component.js +102 -102
  38. package/esm2015/lib/forms/buttonchecker-control.component.js +53 -53
  39. package/esm2015/lib/forms/buttonfile-control.component.js +107 -107
  40. package/esm2015/lib/interfaces/component.interface.js +1 -1
  41. package/esm2015/lib/interfaces/field.config.interface.js +1 -1
  42. package/esm2015/lib/interfaces/field.interface.js +1 -1
  43. package/esm2015/lib/interfaces/validator.interface.js +1 -1
  44. package/esm2015/lib/kles-material-dynamicforms.module.js +114 -114
  45. package/esm2015/lib/matcher/form-error.matcher.js +9 -9
  46. package/esm2015/lib/modules/material.module.js +129 -129
  47. package/esm2015/lib/pipe/array.pipe.js +20 -20
  48. package/esm2015/lib/pipe/transform.pipe.js +25 -25
  49. package/esm2015/lib/validators/autocomplete.validator.js +23 -23
  50. package/esm2015/public-api.js +48 -48
  51. package/esm5/3kles-kles-material-dynamicforms.js +5 -5
  52. package/esm5/lib/directive/dynamic-component.directive.js +51 -47
  53. package/esm5/lib/directive/dynamic-field.directive.js +95 -95
  54. package/esm5/lib/dynamic-form.component.js +240 -236
  55. package/esm5/lib/fields/badge.component.js +21 -21
  56. package/esm5/lib/fields/button-form.component.js +21 -21
  57. package/esm5/lib/fields/button-submit.component.js +21 -21
  58. package/esm5/lib/fields/button-toogle-group.component.js +33 -33
  59. package/esm5/lib/fields/buttonchecker-form.component.js +21 -21
  60. package/esm5/lib/fields/buttonfile-form.component.js +21 -21
  61. package/esm5/lib/fields/checkbox.component.js +19 -19
  62. package/esm5/lib/fields/chip.component.js +19 -19
  63. package/esm5/lib/fields/color.component.js +46 -46
  64. package/esm5/lib/fields/date.component.js +19 -19
  65. package/esm5/lib/fields/field.abstract.js +45 -45
  66. package/esm5/lib/fields/group.component.js +25 -25
  67. package/esm5/lib/fields/icon.component.js +19 -19
  68. package/esm5/lib/fields/input.clearable.component.js +19 -19
  69. package/esm5/lib/fields/input.component.js +70 -70
  70. package/esm5/lib/fields/label.component.js +22 -22
  71. package/esm5/lib/fields/line-break.component.js +20 -20
  72. package/esm5/lib/fields/link.component.js +21 -21
  73. package/esm5/lib/fields/list-field.component.js +63 -63
  74. package/esm5/lib/fields/radio.component.js +19 -19
  75. package/esm5/lib/fields/select.component.js +52 -45
  76. package/esm5/lib/fields/select.search.component.js +119 -113
  77. package/esm5/lib/fields/selection-list.component.js +29 -29
  78. package/esm5/lib/fields/slide-toggle.component.js +19 -19
  79. package/esm5/lib/fields/text.component.js +21 -21
  80. package/esm5/lib/fields/textarea.component.js +22 -22
  81. package/esm5/lib/forms/button-control.component.js +95 -95
  82. package/esm5/lib/forms/buttonchecker-control.component.js +37 -37
  83. package/esm5/lib/forms/buttonfile-control.component.js +123 -123
  84. package/esm5/lib/interfaces/component.interface.js +1 -1
  85. package/esm5/lib/interfaces/field.config.interface.js +1 -1
  86. package/esm5/lib/interfaces/field.interface.js +1 -1
  87. package/esm5/lib/interfaces/validator.interface.js +1 -1
  88. package/esm5/lib/kles-material-dynamicforms.module.js +117 -117
  89. package/esm5/lib/matcher/form-error.matcher.js +11 -11
  90. package/esm5/lib/modules/material.module.js +132 -132
  91. package/esm5/lib/pipe/array.pipe.js +23 -23
  92. package/esm5/lib/pipe/transform.pipe.js +28 -28
  93. package/esm5/lib/validators/autocomplete.validator.js +23 -23
  94. package/esm5/public-api.js +48 -48
  95. package/fesm2015/3kles-kles-material-dynamicforms.js +1795 -1776
  96. package/fesm2015/3kles-kles-material-dynamicforms.js.map +1 -1
  97. package/fesm5/3kles-kles-material-dynamicforms.js +1482 -1461
  98. package/fesm5/3kles-kles-material-dynamicforms.js.map +1 -1
  99. package/lib/directive/dynamic-component.directive.d.ts +14 -12
  100. package/lib/directive/dynamic-field.directive.d.ts +16 -16
  101. package/lib/dynamic-form.component.d.ts +28 -28
  102. package/lib/fields/badge.component.d.ts +5 -5
  103. package/lib/fields/button-form.component.d.ts +5 -5
  104. package/lib/fields/button-submit.component.d.ts +5 -5
  105. package/lib/fields/button-toogle-group.component.d.ts +7 -7
  106. package/lib/fields/buttonchecker-form.component.d.ts +5 -5
  107. package/lib/fields/buttonfile-form.component.d.ts +5 -5
  108. package/lib/fields/checkbox.component.d.ts +5 -5
  109. package/lib/fields/chip.component.d.ts +5 -5
  110. package/lib/fields/color.component.d.ts +6 -6
  111. package/lib/fields/date.component.d.ts +5 -5
  112. package/lib/fields/field.abstract.d.ts +12 -12
  113. package/lib/fields/group.component.d.ts +7 -7
  114. package/lib/fields/icon.component.d.ts +5 -5
  115. package/lib/fields/input.clearable.component.d.ts +4 -4
  116. package/lib/fields/input.component.d.ts +11 -11
  117. package/lib/fields/label.component.d.ts +5 -5
  118. package/lib/fields/line-break.component.d.ts +5 -5
  119. package/lib/fields/link.component.d.ts +5 -5
  120. package/lib/fields/list-field.component.d.ts +14 -14
  121. package/lib/fields/radio.component.d.ts +5 -5
  122. package/lib/fields/select.component.d.ts +14 -13
  123. package/lib/fields/select.search.component.d.ts +20 -19
  124. package/lib/fields/selection-list.component.d.ts +7 -7
  125. package/lib/fields/slide-toggle.component.d.ts +5 -5
  126. package/lib/fields/text.component.d.ts +5 -5
  127. package/lib/fields/textarea.component.d.ts +5 -5
  128. package/lib/forms/button-control.component.d.ts +33 -33
  129. package/lib/forms/buttonchecker-control.component.d.ts +11 -11
  130. package/lib/forms/buttonfile-control.component.d.ts +17 -17
  131. package/lib/interfaces/component.interface.d.ts +5 -5
  132. package/lib/interfaces/field.config.interface.d.ts +52 -51
  133. package/lib/interfaces/field.interface.d.ts +7 -7
  134. package/lib/interfaces/validator.interface.d.ts +5 -5
  135. package/lib/kles-material-dynamicforms.module.d.ts +2 -2
  136. package/lib/matcher/form-error.matcher.d.ts +6 -6
  137. package/lib/modules/material.module.d.ts +2 -2
  138. package/lib/pipe/array.pipe.d.ts +4 -4
  139. package/lib/pipe/transform.pipe.d.ts +7 -7
  140. package/lib/validators/autocomplete.validator.d.ts +3 -3
  141. package/package.json +1 -1
  142. package/public-api.d.ts +48 -48
@@ -1,236 +1,240 @@
1
- import { __decorate } from "tslib";
2
- import { Component, Input, Output, EventEmitter } from '@angular/core';
3
- import { FormGroup, FormBuilder, Validators, ValidatorFn, AsyncValidatorFn, ValidationErrors, AsyncValidator, AbstractControl } from '@angular/forms';
4
- var KlesDynamicFormComponent = /** @class */ (function () {
5
- function KlesDynamicFormComponent(fb) {
6
- this.fb = fb;
7
- this.fields = [];
8
- this.validators = [];
9
- this.asyncValidators = [];
10
- // tslint:disable-next-line: no-output-native
11
- this.submit = new EventEmitter();
12
- this._onLoaded = new EventEmitter();
13
- this.direction = 'column';
14
- this.orientationClass = 'dynamic-form-column';
15
- this.orientationItemClass = 'dynamic-form-column-item';
16
- }
17
- Object.defineProperty(KlesDynamicFormComponent.prototype, "value", {
18
- get: function () {
19
- return this.form.value;
20
- },
21
- enumerable: true,
22
- configurable: true
23
- });
24
- KlesDynamicFormComponent.prototype.ngOnInit = function () {
25
- this.form = this.createForm();
26
- this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';
27
- this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';
28
- this._onLoaded.emit();
29
- };
30
- KlesDynamicFormComponent.prototype.ngOnChanges = function (changes) {
31
- var _a, _b, _c, _d;
32
- if (!((_a = changes.fields) === null || _a === void 0 ? void 0 : _a.firstChange)) {
33
- this.updateForm();
34
- // this.form = this.createControl();
35
- // this.form.controls = {};
36
- this._onLoaded.emit();
37
- }
38
- if (!((_b = changes.validators) === null || _b === void 0 ? void 0 : _b.firstChange) && this.form) {
39
- this.form.setValidators(this.validators.map(function (v) { return v.validator; }));
40
- }
41
- if (!((_c = changes.asyncValidators) === null || _c === void 0 ? void 0 : _c.firstChange) && this.form) {
42
- this.form.setAsyncValidators(this.asyncValidators.map(function (v) { return v.validator; }));
43
- }
44
- if (!((_d = changes.direction) === null || _d === void 0 ? void 0 : _d.firstChange)) {
45
- this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';
46
- this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';
47
- }
48
- };
49
- KlesDynamicFormComponent.prototype.onSubmit = function (event) {
50
- event.preventDefault();
51
- event.stopPropagation();
52
- if (this.form.valid) {
53
- this.submit.emit(this.form.value);
54
- }
55
- else {
56
- this.validateAllFormFields(this.form);
57
- }
58
- };
59
- KlesDynamicFormComponent.prototype.reset = function () {
60
- this.form.reset();
61
- };
62
- KlesDynamicFormComponent.prototype.updateForm = function () {
63
- var _this = this;
64
- Object.keys(this.form.controls).filter(function (key) {
65
- return !_this.fields.map(function (field) { return field.name; }).includes(key);
66
- }).forEach(function (key) {
67
- _this.form.removeControl(key);
68
- });
69
- this.fields
70
- .filter(function (field) { return !_this.form.controls[field.name]; })
71
- .forEach(function (field) {
72
- if (field.type === 'lineBreak') {
73
- return;
74
- }
75
- var control = _this.createControl(field);
76
- _this.form.addControl(field.name, control);
77
- });
78
- };
79
- KlesDynamicFormComponent.prototype.createControl = function (field) {
80
- var _this = this;
81
- if (field.type === 'listField') {
82
- var array_1 = this.fb.array([]);
83
- field.value.forEach(function (data) {
84
- var subGroup = _this.fb.group({});
85
- field.collections.forEach(function (subfield) {
86
- var control = _this.createControl(subfield);
87
- subGroup.addControl(subfield.name, control);
88
- });
89
- array_1.push(subGroup);
90
- });
91
- return array_1;
92
- }
93
- else if (field.type === 'group') {
94
- var subGroup_1 = this.fb.group({});
95
- if (field.collections && Array.isArray(field.collections)) {
96
- field.collections.forEach(function (subfield) {
97
- var control = _this.createControl(subfield);
98
- subGroup_1.addControl(subfield.name, control);
99
- });
100
- }
101
- return subGroup_1;
102
- }
103
- else {
104
- var control = this.fb.control(field.value, this.bindValidations(field.validations || []), this.bindAsyncValidations(field.asyncValidations || []));
105
- if (field.disabled) {
106
- control.disable();
107
- }
108
- return control;
109
- }
110
- };
111
- // private createControl(field: IKlesFieldConfig): AbstractControl {
112
- // if (field.type === 'listField') {
113
- // const array = this.fb.array([]);
114
- // field.value.forEach((data: any) => {
115
- // const subGroup = this.fb.group({});
116
- // field.collections.forEach(subfield => {
117
- // const control = this.fb.control(
118
- // data[subfield.name] ? data[subfield.name] : null,
119
- // this.bindValidations(subfield.validations || []),
120
- // this.bindAsyncValidations(subfield.asyncValidations || [])
121
- // );
122
- // subGroup.addControl(subfield.name, control);
123
- // });
124
- // array.push(subGroup);
125
- // });
126
- // return array;
127
- // } else if (field.type === 'group') {
128
- // const subGroup = this.fb.group({});
129
- // if (field.collections && Array.isArray(field.collections)) {
130
- // field.collections.forEach(subfield => {
131
- // const control = this.fb.control(
132
- // subfield.value,
133
- // this.bindValidations(subfield.validations || []),
134
- // this.bindAsyncValidations(subfield.asyncValidations || [])
135
- // );
136
- // if (subfield.disabled) {
137
- // control.disable();
138
- // }
139
- // subGroup.addControl(subfield.name, control);
140
- // });
141
- // }
142
- // return subGroup;
143
- // } else {
144
- // const control = this.fb.control(
145
- // field.value,
146
- // this.bindValidations(field.validations || []),
147
- // this.bindAsyncValidations(field.asyncValidations || [])
148
- // );
149
- // if (field.disabled) {
150
- // control.disable();
151
- // }
152
- // return control;
153
- // }
154
- // }
155
- KlesDynamicFormComponent.prototype.createForm = function () {
156
- var _this = this;
157
- var group = this.fb.group({});
158
- this.fields.forEach(function (field) {
159
- if (field.type === 'lineBreak') {
160
- return;
161
- }
162
- var control = _this.createControl(field);
163
- group.addControl(field.name, control);
164
- });
165
- group.setValidators(this.validators.map(function (v) { return v.validator; }));
166
- group.setAsyncValidators(this.asyncValidators.map(function (v) { return v.validator; }));
167
- return group;
168
- };
169
- KlesDynamicFormComponent.prototype.bindValidations = function (validations) {
170
- if (validations.length > 0) {
171
- var validList_1 = [];
172
- validations.forEach(function (valid) {
173
- validList_1.push(valid.validator);
174
- });
175
- return Validators.compose(validList_1);
176
- }
177
- return null;
178
- };
179
- KlesDynamicFormComponent.prototype.bindAsyncValidations = function (validations) {
180
- if (validations.length > 0) {
181
- var validList_2 = [];
182
- validations.forEach(function (valid) {
183
- validList_2.push(valid.validator);
184
- });
185
- return Validators.composeAsync(validList_2);
186
- }
187
- return null;
188
- };
189
- KlesDynamicFormComponent.prototype.validateAllFormFields = function (formGroup) {
190
- Object.keys(formGroup.controls).forEach(function (field) {
191
- var control = formGroup.get(field);
192
- control.markAsTouched({ onlySelf: true });
193
- });
194
- };
195
- KlesDynamicFormComponent.ctorParameters = function () { return [
196
- { type: FormBuilder }
197
- ]; };
198
- __decorate([
199
- Input()
200
- ], KlesDynamicFormComponent.prototype, "fields", void 0);
201
- __decorate([
202
- Input()
203
- ], KlesDynamicFormComponent.prototype, "validators", void 0);
204
- __decorate([
205
- Input()
206
- ], KlesDynamicFormComponent.prototype, "asyncValidators", void 0);
207
- __decorate([
208
- Output()
209
- ], KlesDynamicFormComponent.prototype, "submit", void 0);
210
- __decorate([
211
- Output()
212
- ], KlesDynamicFormComponent.prototype, "_onLoaded", void 0);
213
- __decorate([
214
- Input()
215
- ], KlesDynamicFormComponent.prototype, "direction", void 0);
216
- KlesDynamicFormComponent = __decorate([
217
- Component({
218
- exportAs: 'klesDynamicForm',
219
- selector: 'app-kles-dynamic-form',
220
- template: "\n <form class=\"{{orientationClass}}\" [formGroup]=\"form\" (submit)=\"onSubmit($event)\">\n <ng-container *ngFor=\"let field of fields;\" class=\"{{orientationItemClass}}\" klesDynamicField [field]=\"field\" [group]=\"form\" [siblingFields]=\"fields\">\n </ng-container>\n <!--<button (click)=\"reset()\" mat-raised-button color=\"primary\">RESET</button>-->\n </form>\n ",
221
- styles: [
222
- // '.dynamic-form {display: flex; flex-direction: column;}',
223
- //'.dynamic-form {display: flex;}',
224
- //'.dynamic-form { width: 100%; }',
225
- '.dynamic-form-column { display: flex;flex-direction: column; }',
226
- '.dynamic-form-column > * { width: 100%; }',
227
- '.dynamic-form-row { display: inline-flex;flex-wrap:wrap;gap:10px }',
228
- '.dynamic-form-row > * { width: 100%; }',
229
- '.dynamic-form-row-item { margin-right: 10px; }',
230
- '.dynamic-form-column-item { margin-bottom: 10px; }']
231
- })
232
- ], KlesDynamicFormComponent);
233
- return KlesDynamicFormComponent;
234
- }());
235
- export { KlesDynamicFormComponent };
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Aza2xlcy9rbGVzLW1hdGVyaWFsLWR5bmFtaWNmb3Jtcy8iLCJzb3VyY2VzIjpbImxpYi9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE4QyxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQTZCdEo7SUFrQkksa0NBQW9CLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBakIxQixXQUFNLEdBQXVCLEVBQUUsQ0FBQztRQUNoQyxlQUFVLEdBQWtDLEVBQUUsQ0FBQztRQUMvQyxvQkFBZSxHQUF1QyxFQUFFLENBQUM7UUFDbEUsNkNBQTZDO1FBQ25DLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwRCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoQyxjQUFTLEdBQXFCLFFBQVEsQ0FBQztRQUdoRCxxQkFBZ0IsR0FBK0MscUJBQXFCLENBQUM7UUFDckYseUJBQW9CLEdBQXlELDBCQUEwQixDQUFDO0lBTWpFLENBQUM7SUFKeEMsc0JBQUksMkNBQUs7YUFBVDtZQUNJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDM0IsQ0FBQzs7O09BQUE7SUFLRCwyQ0FBUSxHQUFSO1FBQ0ksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7UUFDOUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUM7UUFDNUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsOENBQVcsR0FBWCxVQUFZLE9BQXNCOztRQUM5QixJQUFJLFFBQUMsT0FBTyxDQUFDLE1BQU0sMENBQUUsV0FBVyxDQUFBLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLG9DQUFvQztZQUNwQywyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN6QjtRQUVELElBQUksUUFBQyxPQUFPLENBQUMsVUFBVSwwQ0FBRSxXQUFXLENBQUEsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFNBQVMsRUFBWCxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsSUFBSSxRQUFDLE9BQU8sQ0FBQyxlQUFlLDBDQUFFLFdBQVcsQ0FBQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxTQUFTLEVBQVgsQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM1RTtRQUVELElBQUksUUFBQyxPQUFPLENBQUMsU0FBUywwQ0FBRSxXQUFXLENBQUEsRUFBRTtZQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztZQUM5RixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztTQUMvRztJQUVMLENBQUM7SUFFRCwyQ0FBUSxHQUFSLFVBQVMsS0FBWTtRQUNqQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQzthQUFNO1lBQ0gsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFRCx3Q0FBSyxHQUFMO1FBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBR08sNkNBQVUsR0FBbEI7UUFBQSxpQkFpQkM7UUFoQkcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFBLEdBQUc7WUFDdEMsT0FBTyxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxDQUFDLElBQUksRUFBVixDQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztZQUNWLEtBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBR0gsSUFBSSxDQUFDLE1BQU07YUFDTixNQUFNLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBL0IsQ0FBK0IsQ0FBQzthQUNoRCxPQUFPLENBQUMsVUFBQSxLQUFLO1lBQ1YsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtnQkFDNUIsT0FBTzthQUNWO1lBQ0QsSUFBTSxPQUFPLEdBQUcsS0FBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxLQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLGdEQUFhLEdBQXJCLFVBQXNCLEtBQXVCO1FBQTdDLGlCQW1DQztRQWpDRyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQzVCLElBQU0sT0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRWhDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBUztnQkFDMUIsSUFBTSxRQUFRLEdBQUcsS0FBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQUEsUUFBUTtvQkFDOUIsSUFBTSxPQUFPLEdBQUMsS0FBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDM0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNoRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxPQUFLLENBQUM7U0FDaEI7YUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQy9CLElBQU0sVUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDdkQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQSxRQUFRO29CQUM5QixJQUFNLE9BQU8sR0FBQyxLQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMzQyxVQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUFDO2FBQ047WUFDRCxPQUFPLFVBQVEsQ0FBQztTQUVuQjthQUFNO1lBQ0gsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQzNCLEtBQUssQ0FBQyxLQUFLLEVBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxFQUM3QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUMxRCxDQUFDO1lBQ0YsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUNoQixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDckI7WUFDRCxPQUFPLE9BQU8sQ0FBQztTQUNsQjtJQUNMLENBQUM7SUFJRCxvRUFBb0U7SUFFcEUsd0NBQXdDO0lBQ3hDLDJDQUEyQztJQUUzQywrQ0FBK0M7SUFDL0Msa0RBQWtEO0lBQ2xELHNEQUFzRDtJQUN0RCxtREFBbUQ7SUFDbkQsd0VBQXdFO0lBQ3hFLHdFQUF3RTtJQUN4RSxpRkFBaUY7SUFDakYscUJBQXFCO0lBQ3JCLCtEQUErRDtJQUMvRCxrQkFBa0I7SUFDbEIsb0NBQW9DO0lBQ3BDLGNBQWM7SUFDZCx3QkFBd0I7SUFDeEIsMkNBQTJDO0lBQzNDLDhDQUE4QztJQUM5Qyx1RUFBdUU7SUFDdkUsc0RBQXNEO0lBQ3RELG1EQUFtRDtJQUNuRCxzQ0FBc0M7SUFDdEMsd0VBQXdFO0lBQ3hFLGlGQUFpRjtJQUNqRixxQkFBcUI7SUFDckIsMkNBQTJDO0lBQzNDLHlDQUF5QztJQUN6QyxvQkFBb0I7SUFDcEIsK0RBQStEO0lBQy9ELGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osMkJBQTJCO0lBRTNCLGVBQWU7SUFDZiwyQ0FBMkM7SUFDM0MsMkJBQTJCO0lBQzNCLDZEQUE2RDtJQUM3RCxzRUFBc0U7SUFDdEUsYUFBYTtJQUNiLGdDQUFnQztJQUNoQyxpQ0FBaUM7SUFDakMsWUFBWTtJQUNaLDBCQUEwQjtJQUMxQixRQUFRO0lBQ1IsSUFBSTtJQUlJLDZDQUFVLEdBQWxCO1FBQUEsaUJBaUJDO1FBaEJHLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUEsS0FBSztZQUVyQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO2dCQUM1QixPQUFPO2FBQ1Y7WUFDRCxJQUFNLE9BQU8sR0FBRyxLQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsU0FBUyxFQUFYLENBQVcsQ0FBQyxDQUFDLENBQUM7UUFDM0QsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFNBQVMsRUFBWCxDQUFXLENBQUMsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFHTyxrREFBZSxHQUF2QixVQUF3QixXQUEwQztRQUM5RCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLElBQU0sV0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNyQixXQUFXLENBQUMsT0FBTyxDQUFDLFVBQUEsS0FBSztnQkFDckIsV0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBUyxDQUFDLENBQUM7U0FFeEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBR08sdURBQW9CLEdBQTVCLFVBQTZCLFdBQStDO1FBQ3hFLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEIsSUFBTSxXQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQSxLQUFLO2dCQUNyQixXQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxXQUFTLENBQUMsQ0FBQztTQUU3QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyx3REFBcUIsR0FBN0IsVUFBOEIsU0FBb0I7UUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsS0FBSztZQUN6QyxJQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O2dCQTlNdUIsV0FBVzs7SUFqQjFCO1FBQVIsS0FBSyxFQUFFOzREQUFpQztJQUNoQztRQUFSLEtBQUssRUFBRTtnRUFBZ0Q7SUFDL0M7UUFBUixLQUFLLEVBQUU7cUVBQTBEO0lBRXhEO1FBQVQsTUFBTSxFQUFFOzREQUFxRDtJQUNwRDtRQUFULE1BQU0sRUFBRTsrREFBZ0M7SUFFaEM7UUFBUixLQUFLLEVBQUU7K0RBQXdDO0lBUnZDLHdCQUF3QjtRQXZCcEMsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLFFBQVEsRUFBRSxxWkFNVDs7Z0JBRUcsNERBQTREO2dCQUM1RCxtQ0FBbUM7Z0JBQ25DLG1DQUFtQztnQkFDbkMsZ0VBQWdFO2dCQUNoRSwyQ0FBMkM7Z0JBQzNDLG9FQUFvRTtnQkFDcEUsd0NBQXdDO2dCQUN4QyxnREFBZ0Q7Z0JBQ2hELG9EQUFvRDtTQUczRCxDQUFDO09BQ1csd0JBQXdCLENBaU9wQztJQUFELCtCQUFDO0NBQUEsQUFqT0QsSUFpT0M7U0FqT1ksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25Jbml0LCBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzLCBBc3luY1ZhbGlkYXRvciwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLbGVzRm9ybUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZ3JvdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgS2xlc0Zvcm1MaXN0RmllbGRDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9saXN0LWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElLbGVzRmllbGRDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvZmllbGQuY29uZmlnLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IElLbGVzVmFsaWRhdG9yIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBleHBvcnRBczogJ2tsZXNEeW5hbWljRm9ybScsXHJcbiAgICBzZWxlY3RvcjogJ2FwcC1rbGVzLWR5bmFtaWMtZm9ybScsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGZvcm0gY2xhc3M9XCJ7e29yaWVudGF0aW9uQ2xhc3N9fVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkcztcIiBjbGFzcz1cInt7b3JpZW50YXRpb25JdGVtQ2xhc3N9fVwiIGtsZXNEeW5hbWljRmllbGQgW2ZpZWxkXT1cImZpZWxkXCIgW2dyb3VwXT1cImZvcm1cIiBbc2libGluZ0ZpZWxkc109XCJmaWVsZHNcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tPGJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPlJFU0VUPC9idXR0b24+LS0+XHJcbiAgICA8L2Zvcm0+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgICAgLy8gJy5keW5hbWljLWZvcm0ge2Rpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47fScsXHJcbiAgICAgICAgLy8nLmR5bmFtaWMtZm9ybSB7ZGlzcGxheTogZmxleDt9JyxcclxuICAgICAgICAvLycuZHluYW1pYy1mb3JtIHsgd2lkdGg6IDEwMCU7IH0nLFxyXG4gICAgICAgICcuZHluYW1pYy1mb3JtLWNvbHVtbiB7IGRpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfScsXHJcbiAgICAgICAgJy5keW5hbWljLWZvcm0tY29sdW1uID4gKiB7IHdpZHRoOiAxMDAlOyB9JyxcclxuICAgICAgICAnLmR5bmFtaWMtZm9ybS1yb3cgeyBkaXNwbGF5OiBpbmxpbmUtZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6MTBweCB9JyxcclxuICAgICAgICAnLmR5bmFtaWMtZm9ybS1yb3cgPiAqIHsgd2lkdGg6IDEwMCU7IH0nLFxyXG4gICAgICAgICcuZHluYW1pYy1mb3JtLXJvdy1pdGVtIHsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9JyxcclxuICAgICAgICAnLmR5bmFtaWMtZm9ybS1jb2x1bW4taXRlbSB7IG1hcmdpbi1ib3R0b206IDEwcHg7IH0nLFxyXG4gICAgXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIEtsZXNEeW5hbWljRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIGZpZWxkczogSUtsZXNGaWVsZENvbmZpZ1tdID0gW107XHJcbiAgICBASW5wdXQoKSB2YWxpZGF0b3JzOiBJS2xlc1ZhbGlkYXRvcjxWYWxpZGF0b3JGbj5bXSA9IFtdO1xyXG4gICAgQElucHV0KCkgYXN5bmNWYWxpZGF0b3JzOiBJS2xlc1ZhbGlkYXRvcjxBc3luY1ZhbGlkYXRvckZuPltdID0gW107XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW91dHB1dC1uYXRpdmVcclxuICAgIEBPdXRwdXQoKSBzdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgX29uTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIEBJbnB1dCgpIGRpcmVjdGlvbjogJ2NvbHVtbicgfCAncm93JyA9ICdjb2x1bW4nO1xyXG5cclxuICAgIGZvcm06IEZvcm1Hcm91cDtcclxuICAgIG9yaWVudGF0aW9uQ2xhc3M6ICdkeW5hbWljLWZvcm0tY29sdW1uJyB8ICdkeW5hbWljLWZvcm0tcm93JyA9ICdkeW5hbWljLWZvcm0tY29sdW1uJztcclxuICAgIG9yaWVudGF0aW9uSXRlbUNsYXNzOiAnZHluYW1pYy1mb3JtLWNvbHVtbi1pdGVtJyB8ICdkeW5hbWljLWZvcm0tcm93LWl0ZW0nID0gJ2R5bmFtaWMtZm9ybS1jb2x1bW4taXRlbSc7XHJcblxyXG4gICAgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHsgfVxyXG5cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgICB0aGlzLm9yaWVudGF0aW9uQ2xhc3MgPSB0aGlzLmRpcmVjdGlvbiA9PT0gJ3JvdycgPyAnZHluYW1pYy1mb3JtLXJvdycgOiAnZHluYW1pYy1mb3JtLWNvbHVtbic7XHJcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbkl0ZW1DbGFzcyA9IHRoaXMuZGlyZWN0aW9uID09PSAncm93JyA/ICdkeW5hbWljLWZvcm0tcm93LWl0ZW0nIDogJ2R5bmFtaWMtZm9ybS1jb2x1bW4taXRlbSc7XHJcbiAgICAgICAgdGhpcy5fb25Mb2FkZWQuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWNoYW5nZXMuZmllbGRzPy5maXJzdENoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm0oKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5mb3JtID0gdGhpcy5jcmVhdGVDb250cm9sKCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuZm9ybS5jb250cm9scyA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLl9vbkxvYWRlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNoYW5nZXMudmFsaWRhdG9ycz8uZmlyc3RDaGFuZ2UgJiYgdGhpcy5mb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjaGFuZ2VzLmFzeW5jVmFsaWRhdG9ycz8uZmlyc3RDaGFuZ2UgJiYgdGhpcy5mb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5hc3luY1ZhbGlkYXRvcnMubWFwKHYgPT4gdi52YWxpZGF0b3IpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY2hhbmdlcy5kaXJlY3Rpb24/LmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3JpZW50YXRpb25DbGFzcyA9IHRoaXMuZGlyZWN0aW9uID09PSAncm93JyA/ICdkeW5hbWljLWZvcm0tcm93JyA6ICdkeW5hbWljLWZvcm0tY29sdW1uJztcclxuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkl0ZW1DbGFzcyA9IHRoaXMuZGlyZWN0aW9uID09PSAncm93JyA/ICdkeW5hbWljLWZvcm0tcm93LWl0ZW0nIDogJ2R5bmFtaWMtZm9ybS1jb2x1bW4taXRlbSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvblN1Ym1pdChldmVudDogRXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUZvcm0oKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmZpZWxkcy5tYXAoZmllbGQgPT4gZmllbGQubmFtZSkuaW5jbHVkZXMoa2V5KTtcclxuICAgICAgICB9KS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5yZW1vdmVDb250cm9sKGtleSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkc1xyXG4gICAgICAgICAgICAuZmlsdGVyKGZpZWxkID0+ICF0aGlzLmZvcm0uY29udHJvbHNbZmllbGQubmFtZV0pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbGluZUJyZWFrJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNyZWF0ZUNvbnRyb2woZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woZmllbGQubmFtZSwgY29udHJvbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlQ29udHJvbChmaWVsZDogSUtsZXNGaWVsZENvbmZpZyk6IEFic3RyYWN0Q29udHJvbCB7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbGlzdEZpZWxkJykge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuZmIuYXJyYXkoW10pO1xyXG5cclxuICAgICAgICAgICAgZmllbGQudmFsdWUuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgICAgICAgICAgICAgZmllbGQuY29sbGVjdGlvbnMuZm9yRWFjaChzdWJmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbD10aGlzLmNyZWF0ZUNvbnRyb2woc3ViZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Ykdyb3VwLmFkZENvbnRyb2woc3ViZmllbGQubmFtZSwgY29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goc3ViR3JvdXApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2dyb3VwJykge1xyXG4gICAgICAgICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgICAgICAgICBpZiAoZmllbGQuY29sbGVjdGlvbnMgJiYgQXJyYXkuaXNBcnJheShmaWVsZC5jb2xsZWN0aW9ucykpIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLmNvbGxlY3Rpb25zLmZvckVhY2goc3ViZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2w9dGhpcy5jcmVhdGVDb250cm9sKHN1YmZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBzdWJHcm91cC5hZGRDb250cm9sKHN1YmZpZWxkLm5hbWUsIGNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHN1Ykdyb3VwO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKFxyXG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRWYWxpZGF0aW9ucyhmaWVsZC52YWxpZGF0aW9ucyB8fCBbXSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRBc3luY1ZhbGlkYXRpb25zKGZpZWxkLmFzeW5jVmFsaWRhdGlvbnMgfHwgW10pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8gcHJpdmF0ZSBjcmVhdGVDb250cm9sKGZpZWxkOiBJS2xlc0ZpZWxkQ29uZmlnKTogQWJzdHJhY3RDb250cm9sIHtcclxuXHJcbiAgICAvLyAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsaXN0RmllbGQnKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XHJcblxyXG4gICAgLy8gICAgICAgICBmaWVsZC52YWx1ZS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIGNvbnN0IHN1Ykdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcbiAgICAvLyAgICAgICAgICAgICBmaWVsZC5jb2xsZWN0aW9ucy5mb3JFYWNoKHN1YmZpZWxkID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBkYXRhW3N1YmZpZWxkLm5hbWVdID8gZGF0YVtzdWJmaWVsZC5uYW1lXSA6IG51bGwsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZFZhbGlkYXRpb25zKHN1YmZpZWxkLnZhbGlkYXRpb25zIHx8IFtdKSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kQXN5bmNWYWxpZGF0aW9ucyhzdWJmaWVsZC5hc3luY1ZhbGlkYXRpb25zIHx8IFtdKVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgc3ViR3JvdXAuYWRkQ29udHJvbChzdWJmaWVsZC5uYW1lLCBjb250cm9sKTtcclxuICAgIC8vICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgYXJyYXkucHVzaChzdWJHcm91cCk7XHJcbiAgICAvLyAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICAvLyAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnZ3JvdXAnKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IHN1Ykdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcbiAgICAvLyAgICAgICAgIGlmIChmaWVsZC5jb2xsZWN0aW9ucyAmJiBBcnJheS5pc0FycmF5KGZpZWxkLmNvbGxlY3Rpb25zKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgZmllbGQuY29sbGVjdGlvbnMuZm9yRWFjaChzdWJmaWVsZCA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZmIuY29udHJvbChcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3ViZmllbGQudmFsdWUsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZFZhbGlkYXRpb25zKHN1YmZpZWxkLnZhbGlkYXRpb25zIHx8IFtdKSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kQXN5bmNWYWxpZGF0aW9ucyhzdWJmaWVsZC5hc3luY1ZhbGlkYXRpb25zIHx8IFtdKVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHN1YmZpZWxkLmRpc2FibGVkKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBzdWJHcm91cC5hZGRDb250cm9sKHN1YmZpZWxkLm5hbWUsIGNvbnRyb2wpO1xyXG4gICAgLy8gICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgcmV0dXJuIHN1Ykdyb3VwO1xyXG5cclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKFxyXG4gICAgLy8gICAgICAgICAgICAgZmllbGQudmFsdWUsXHJcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmJpbmRWYWxpZGF0aW9ucyhmaWVsZC52YWxpZGF0aW9ucyB8fCBbXSksXHJcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmJpbmRBc3luY1ZhbGlkYXRpb25zKGZpZWxkLmFzeW5jVmFsaWRhdGlvbnMgfHwgW10pXHJcbiAgICAvLyAgICAgICAgICk7XHJcbiAgICAvLyAgICAgICAgIGlmIChmaWVsZC5kaXNhYmxlZCkge1xyXG4gICAgLy8gICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsaW5lQnJlYWsnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbChmaWVsZCk7XHJcblxyXG4gICAgICAgICAgICBncm91cC5hZGRDb250cm9sKGZpZWxkLm5hbWUsIGNvbnRyb2wpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBncm91cC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xyXG4gICAgICAgIGdyb3VwLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLmFzeW5jVmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xyXG5cclxuICAgICAgICByZXR1cm4gZ3JvdXA7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgYmluZFZhbGlkYXRpb25zKHZhbGlkYXRpb25zOiBJS2xlc1ZhbGlkYXRvcjxWYWxpZGF0b3JGbj5bXSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBpZiAodmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZExpc3QgPSBbXTtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMuZm9yRWFjaCh2YWxpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZExpc3QucHVzaCh2YWxpZC52YWxpZGF0b3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZExpc3QpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgYmluZEFzeW5jVmFsaWRhdGlvbnModmFsaWRhdGlvbnM6IElLbGVzVmFsaWRhdG9yPEFzeW5jVmFsaWRhdG9yRm4+W10pOiBBc3luY1ZhbGlkYXRvckZuIHtcclxuICAgICAgICBpZiAodmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZExpc3QgPSBbXTtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMuZm9yRWFjaCh2YWxpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZExpc3QucHVzaCh2YWxpZC52YWxpZGF0b3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMuY29tcG9zZUFzeW5jKHZhbGlkTGlzdCk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcclxuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
1
+ import { __decorate } from "tslib";
2
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
3
+ import { FormGroup, FormBuilder, Validators, ValidatorFn, AsyncValidatorFn, ValidationErrors, AsyncValidator, AbstractControl } from '@angular/forms';
4
+ var KlesDynamicFormComponent = /** @class */ (function () {
5
+ function KlesDynamicFormComponent(fb) {
6
+ this.fb = fb;
7
+ this.fields = [];
8
+ this.validators = [];
9
+ this.asyncValidators = [];
10
+ // tslint:disable-next-line: no-output-native
11
+ this.submit = new EventEmitter();
12
+ this._onLoaded = new EventEmitter();
13
+ this.direction = 'column';
14
+ this.orientationClass = 'dynamic-form-column';
15
+ this.orientationItemClass = 'dynamic-form-column-item';
16
+ }
17
+ Object.defineProperty(KlesDynamicFormComponent.prototype, "value", {
18
+ get: function () {
19
+ return this.form.value;
20
+ },
21
+ enumerable: true,
22
+ configurable: true
23
+ });
24
+ KlesDynamicFormComponent.prototype.ngOnInit = function () {
25
+ this.form = this.createForm();
26
+ this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';
27
+ this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';
28
+ this._onLoaded.emit();
29
+ };
30
+ KlesDynamicFormComponent.prototype.ngOnChanges = function (changes) {
31
+ var _a, _b, _c, _d;
32
+ if (!((_a = changes.fields) === null || _a === void 0 ? void 0 : _a.firstChange)) {
33
+ this.updateForm();
34
+ // this.form = this.createControl();
35
+ // this.form.controls = {};
36
+ this._onLoaded.emit();
37
+ }
38
+ if (!((_b = changes.validators) === null || _b === void 0 ? void 0 : _b.firstChange) && this.form) {
39
+ this.form.setValidators(this.validators.map(function (v) { return v.validator; }));
40
+ }
41
+ if (!((_c = changes.asyncValidators) === null || _c === void 0 ? void 0 : _c.firstChange) && this.form) {
42
+ this.form.setAsyncValidators(this.asyncValidators.map(function (v) { return v.validator; }));
43
+ }
44
+ if (!((_d = changes.direction) === null || _d === void 0 ? void 0 : _d.firstChange)) {
45
+ this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';
46
+ this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';
47
+ }
48
+ };
49
+ KlesDynamicFormComponent.prototype.onSubmit = function (event) {
50
+ event.preventDefault();
51
+ event.stopPropagation();
52
+ if (this.form.valid) {
53
+ this.submit.emit(this.form.value);
54
+ }
55
+ else {
56
+ this.validateAllFormFields(this.form);
57
+ }
58
+ };
59
+ KlesDynamicFormComponent.prototype.reset = function () {
60
+ this.form.reset();
61
+ };
62
+ KlesDynamicFormComponent.prototype.updateForm = function () {
63
+ var _this = this;
64
+ Object.keys(this.form.controls).filter(function (key) {
65
+ return !_this.fields.map(function (field) { return field.name; }).includes(key);
66
+ }).forEach(function (key) {
67
+ _this.form.removeControl(key);
68
+ });
69
+ this.fields
70
+ .filter(function (field) { return !_this.form.controls[field.name]; })
71
+ .forEach(function (field) {
72
+ if (field.type === 'lineBreak') {
73
+ return;
74
+ }
75
+ var control = _this.createControl(field);
76
+ _this.form.addControl(field.name, control);
77
+ });
78
+ };
79
+ KlesDynamicFormComponent.prototype.createControl = function (field) {
80
+ var _this = this;
81
+ if (field.type === 'listField') {
82
+ var array_1 = this.fb.array([]);
83
+ field.value.forEach(function (data) {
84
+ var subGroup = _this.fb.group({});
85
+ field.collections.forEach(function (subfield) {
86
+ var control = _this.createControl(subfield);
87
+ subGroup.addControl(subfield.name, control);
88
+ });
89
+ array_1.push(subGroup);
90
+ });
91
+ return array_1;
92
+ }
93
+ else if (field.type === 'group') {
94
+ var subGroup_1 = this.fb.group({});
95
+ if (field.collections && Array.isArray(field.collections)) {
96
+ field.collections.forEach(function (subfield) {
97
+ var control = _this.createControl(subfield);
98
+ subGroup_1.addControl(subfield.name, control);
99
+ });
100
+ }
101
+ return subGroup_1;
102
+ }
103
+ else {
104
+ var control = this.fb.control(field.value, {
105
+ validators: this.bindValidations(field.validations || []),
106
+ asyncValidators: this.bindAsyncValidations(field.asyncValidations || []),
107
+ updateOn: field.updateOn || 'change'
108
+ });
109
+ if (field.disabled) {
110
+ control.disable();
111
+ }
112
+ return control;
113
+ }
114
+ };
115
+ // private createControl(field: IKlesFieldConfig): AbstractControl {
116
+ // if (field.type === 'listField') {
117
+ // const array = this.fb.array([]);
118
+ // field.value.forEach((data: any) => {
119
+ // const subGroup = this.fb.group({});
120
+ // field.collections.forEach(subfield => {
121
+ // const control = this.fb.control(
122
+ // data[subfield.name] ? data[subfield.name] : null,
123
+ // this.bindValidations(subfield.validations || []),
124
+ // this.bindAsyncValidations(subfield.asyncValidations || [])
125
+ // );
126
+ // subGroup.addControl(subfield.name, control);
127
+ // });
128
+ // array.push(subGroup);
129
+ // });
130
+ // return array;
131
+ // } else if (field.type === 'group') {
132
+ // const subGroup = this.fb.group({});
133
+ // if (field.collections && Array.isArray(field.collections)) {
134
+ // field.collections.forEach(subfield => {
135
+ // const control = this.fb.control(
136
+ // subfield.value,
137
+ // this.bindValidations(subfield.validations || []),
138
+ // this.bindAsyncValidations(subfield.asyncValidations || [])
139
+ // );
140
+ // if (subfield.disabled) {
141
+ // control.disable();
142
+ // }
143
+ // subGroup.addControl(subfield.name, control);
144
+ // });
145
+ // }
146
+ // return subGroup;
147
+ // } else {
148
+ // const control = this.fb.control(
149
+ // field.value,
150
+ // this.bindValidations(field.validations || []),
151
+ // this.bindAsyncValidations(field.asyncValidations || [])
152
+ // );
153
+ // if (field.disabled) {
154
+ // control.disable();
155
+ // }
156
+ // return control;
157
+ // }
158
+ // }
159
+ KlesDynamicFormComponent.prototype.createForm = function () {
160
+ var _this = this;
161
+ var group = this.fb.group({});
162
+ this.fields.forEach(function (field) {
163
+ if (field.type === 'lineBreak') {
164
+ return;
165
+ }
166
+ var control = _this.createControl(field);
167
+ group.addControl(field.name, control);
168
+ });
169
+ group.setValidators(this.validators.map(function (v) { return v.validator; }));
170
+ group.setAsyncValidators(this.asyncValidators.map(function (v) { return v.validator; }));
171
+ return group;
172
+ };
173
+ KlesDynamicFormComponent.prototype.bindValidations = function (validations) {
174
+ if (validations.length > 0) {
175
+ var validList_1 = [];
176
+ validations.forEach(function (valid) {
177
+ validList_1.push(valid.validator);
178
+ });
179
+ return Validators.compose(validList_1);
180
+ }
181
+ return null;
182
+ };
183
+ KlesDynamicFormComponent.prototype.bindAsyncValidations = function (validations) {
184
+ if (validations.length > 0) {
185
+ var validList_2 = [];
186
+ validations.forEach(function (valid) {
187
+ validList_2.push(valid.validator);
188
+ });
189
+ return Validators.composeAsync(validList_2);
190
+ }
191
+ return null;
192
+ };
193
+ KlesDynamicFormComponent.prototype.validateAllFormFields = function (formGroup) {
194
+ Object.keys(formGroup.controls).forEach(function (field) {
195
+ var control = formGroup.get(field);
196
+ control.markAsTouched({ onlySelf: true });
197
+ });
198
+ };
199
+ KlesDynamicFormComponent.ctorParameters = function () { return [
200
+ { type: FormBuilder }
201
+ ]; };
202
+ __decorate([
203
+ Input()
204
+ ], KlesDynamicFormComponent.prototype, "fields", void 0);
205
+ __decorate([
206
+ Input()
207
+ ], KlesDynamicFormComponent.prototype, "validators", void 0);
208
+ __decorate([
209
+ Input()
210
+ ], KlesDynamicFormComponent.prototype, "asyncValidators", void 0);
211
+ __decorate([
212
+ Output()
213
+ ], KlesDynamicFormComponent.prototype, "submit", void 0);
214
+ __decorate([
215
+ Output()
216
+ ], KlesDynamicFormComponent.prototype, "_onLoaded", void 0);
217
+ __decorate([
218
+ Input()
219
+ ], KlesDynamicFormComponent.prototype, "direction", void 0);
220
+ KlesDynamicFormComponent = __decorate([
221
+ Component({
222
+ exportAs: 'klesDynamicForm',
223
+ selector: 'app-kles-dynamic-form',
224
+ template: "\n <form class=\"{{orientationClass}}\" [formGroup]=\"form\" (submit)=\"onSubmit($event)\">\n <ng-container *ngFor=\"let field of fields;\" class=\"{{orientationItemClass}}\" klesDynamicField [field]=\"field\" [group]=\"form\" [siblingFields]=\"fields\">\n </ng-container>\n <!--<button (click)=\"reset()\" mat-raised-button color=\"primary\">RESET</button>-->\n </form>\n ",
225
+ styles: [
226
+ // '.dynamic-form {display: flex; flex-direction: column;}',
227
+ //'.dynamic-form {display: flex;}',
228
+ //'.dynamic-form { width: 100%; }',
229
+ '.dynamic-form-column { display: flex;flex-direction: column; }',
230
+ '.dynamic-form-column > * { width: 100%; }',
231
+ '.dynamic-form-row { display: inline-flex;flex-wrap:wrap;gap:10px }',
232
+ '.dynamic-form-row > * { width: 100%; }',
233
+ '.dynamic-form-row-item { margin-right: 10px; }',
234
+ '.dynamic-form-column-item { margin-bottom: 10px; }']
235
+ })
236
+ ], KlesDynamicFormComponent);
237
+ return KlesDynamicFormComponent;
238
+ }());
239
+ export { KlesDynamicFormComponent };
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Aza2xlcy9rbGVzLW1hdGVyaWFsLWR5bmFtaWNmb3Jtcy8iLCJzb3VyY2VzIjpbImxpYi9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE4QyxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQTZCdEo7SUFrQkksa0NBQW9CLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBakIxQixXQUFNLEdBQXVCLEVBQUUsQ0FBQztRQUNoQyxlQUFVLEdBQWtDLEVBQUUsQ0FBQztRQUMvQyxvQkFBZSxHQUF1QyxFQUFFLENBQUM7UUFDbEUsNkNBQTZDO1FBQ25DLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwRCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoQyxjQUFTLEdBQXFCLFFBQVEsQ0FBQztRQUdoRCxxQkFBZ0IsR0FBK0MscUJBQXFCLENBQUM7UUFDckYseUJBQW9CLEdBQXlELDBCQUEwQixDQUFDO0lBTWpFLENBQUM7SUFKeEMsc0JBQUksMkNBQUs7YUFBVDtZQUNJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDM0IsQ0FBQzs7O09BQUE7SUFLRCwyQ0FBUSxHQUFSO1FBQ0ksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxrQkFBa0Is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Q0FBQzs7Z0JBak51QixXQUFXOztJQWpCMUI7UUFBUixLQUFLLEVBQUU7NERBQWlDO0lBQ2hDO1FBQVIsS0FBSyxFQUFFO2dFQUFnRDtJQUMvQztRQUFSLEtBQUssRUFBRTtxRUFBMEQ7SUFFeEQ7UUFBVCxNQUFNLEVBQUU7NERBQXFEO0lBQ3BEO1FBQVQsTUFBTSxFQUFFOytEQUFnQztJQUVoQztRQUFSLEtBQUssRUFBRTsrREFBd0M7SUFSdkMsd0JBQXdCO1FBdkJwQyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLFFBQVEsRUFBRSx1QkFBdUI7WUFDakMsUUFBUSxFQUFFLHFaQU1UOztnQkFFRyw0REFBNEQ7Z0JBQzVELG1DQUFtQztnQkFDbkMsbUNBQW1DO2dCQUNuQyxnRUFBZ0U7Z0JBQ2hFLDJDQUEyQztnQkFDM0Msb0VBQW9FO2dCQUNwRSx3Q0FBd0M7Z0JBQ3hDLGdEQUFnRDtnQkFDaEQsb0RBQW9EO1NBRzNELENBQUM7T0FDVyx3QkFBd0IsQ0FvT3BDO0lBQUQsK0JBQUM7Q0FBQSxBQXBPRCxJQW9PQztTQXBPWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzLCBBc3luY1ZhbGlkYXRvciwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgS2xlc0Zvcm1Hcm91cENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2dyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBLbGVzRm9ybUxpc3RGaWVsZENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2xpc3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IElLbGVzRmllbGRDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvZmllbGQuY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJS2xlc1ZhbGlkYXRvciB9IGZyb20gJy4vaW50ZXJmYWNlcy92YWxpZGF0b3IuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgZXhwb3J0QXM6ICdrbGVzRHluYW1pY0Zvcm0nLFxuICAgIHNlbGVjdG9yOiAnYXBwLWtsZXMtZHluYW1pYy1mb3JtJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgIDxmb3JtIGNsYXNzPVwie3tvcmllbnRhdGlvbkNsYXNzfX1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzO1wiIGNsYXNzPVwie3tvcmllbnRhdGlvbkl0ZW1DbGFzc319XCIga2xlc0R5bmFtaWNGaWVsZCBbZmllbGRdPVwiZmllbGRcIiBbZ3JvdXBdPVwiZm9ybVwiIFtzaWJsaW5nRmllbGRzXT1cImZpZWxkc1wiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLTxidXR0b24gKGNsaWNrKT1cInJlc2V0KClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5SRVNFVDwvYnV0dG9uPi0tPlxuICAgIDwvZm9ybT5cbiAgICBgLFxuICAgIHN0eWxlczogW1xuICAgICAgICAvLyAnLmR5bmFtaWMtZm9ybSB7ZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjt9JyxcbiAgICAgICAgLy8nLmR5bmFtaWMtZm9ybSB7ZGlzcGxheTogZmxleDt9JyxcbiAgICAgICAgLy8nLmR5bmFtaWMtZm9ybSB7IHdpZHRoOiAxMDAlOyB9JyxcbiAgICAgICAgJy5keW5hbWljLWZvcm0tY29sdW1uIHsgZGlzcGxheTogZmxleDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9JyxcbiAgICAgICAgJy5keW5hbWljLWZvcm0tY29sdW1uID4gKiB7IHdpZHRoOiAxMDAlOyB9JyxcbiAgICAgICAgJy5keW5hbWljLWZvcm0tcm93IHsgZGlzcGxheTogaW5saW5lLWZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHggfScsXG4gICAgICAgICcuZHluYW1pYy1mb3JtLXJvdyA+ICogeyB3aWR0aDogMTAwJTsgfScsXG4gICAgICAgICcuZHluYW1pYy1mb3JtLXJvdy1pdGVtIHsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9JyxcbiAgICAgICAgJy5keW5hbWljLWZvcm0tY29sdW1uLWl0ZW0geyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9JyxcbiAgICBdXG5cbn0pXG5leHBvcnQgY2xhc3MgS2xlc0R5bmFtaWNGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIGZpZWxkczogSUtsZXNGaWVsZENvbmZpZ1tdID0gW107XG4gICAgQElucHV0KCkgdmFsaWRhdG9yczogSUtsZXNWYWxpZGF0b3I8VmFsaWRhdG9yRm4+W10gPSBbXTtcbiAgICBASW5wdXQoKSBhc3luY1ZhbGlkYXRvcnM6IElLbGVzVmFsaWRhdG9yPEFzeW5jVmFsaWRhdG9yRm4+W10gPSBbXTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW91dHB1dC1uYXRpdmVcbiAgICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBfb25Mb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASW5wdXQoKSBkaXJlY3Rpb246ICdjb2x1bW4nIHwgJ3JvdycgPSAnY29sdW1uJztcblxuICAgIGZvcm06IEZvcm1Hcm91cDtcbiAgICBvcmllbnRhdGlvbkNsYXNzOiAnZHluYW1pYy1mb3JtLWNvbHVtbicgfCAnZHluYW1pYy1mb3JtLXJvdycgPSAnZHluYW1pYy1mb3JtLWNvbHVtbic7XG4gICAgb3JpZW50YXRpb25JdGVtQ2xhc3M6ICdkeW5hbWljLWZvcm0tY29sdW1uLWl0ZW0nIHwgJ2R5bmFtaWMtZm9ybS1yb3ctaXRlbScgPSAnZHluYW1pYy1mb3JtLWNvbHVtbi1pdGVtJztcblxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikgeyB9XG5cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNsYXNzID0gdGhpcy5kaXJlY3Rpb24gPT09ICdyb3cnID8gJ2R5bmFtaWMtZm9ybS1yb3cnIDogJ2R5bmFtaWMtZm9ybS1jb2x1bW4nO1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uSXRlbUNsYXNzID0gdGhpcy5kaXJlY3Rpb24gPT09ICdyb3cnID8gJ2R5bmFtaWMtZm9ybS1yb3ctaXRlbScgOiAnZHluYW1pYy1mb3JtLWNvbHVtbi1pdGVtJztcbiAgICAgICAgdGhpcy5fb25Mb2FkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjaGFuZ2VzLmZpZWxkcz8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybSgpO1xuICAgICAgICAgICAgLy8gdGhpcy5mb3JtID0gdGhpcy5jcmVhdGVDb250cm9sKCk7XG4gICAgICAgICAgICAvLyB0aGlzLmZvcm0uY29udHJvbHMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX29uTG9hZGVkLmVtaXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hhbmdlcy52YWxpZGF0b3JzPy5maXJzdENoYW5nZSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjaGFuZ2VzLmFzeW5jVmFsaWRhdG9ycz8uZmlyc3RDaGFuZ2UgJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuYXN5bmNWYWxpZGF0b3JzLm1hcCh2ID0+IHYudmFsaWRhdG9yKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoYW5nZXMuZGlyZWN0aW9uPy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNsYXNzID0gdGhpcy5kaXJlY3Rpb24gPT09ICdyb3cnID8gJ2R5bmFtaWMtZm9ybS1yb3cnIDogJ2R5bmFtaWMtZm9ybS1jb2x1bW4nO1xuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkl0ZW1DbGFzcyA9IHRoaXMuZGlyZWN0aW9uID09PSAncm93JyA/ICdkeW5hbWljLWZvcm0tcm93LWl0ZW0nIDogJ2R5bmFtaWMtZm9ybS1jb2x1bW4taXRlbSc7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIG9uU3VibWl0KGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgdXBkYXRlRm9ybSgpIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5maWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLm5hbWUpLmluY2x1ZGVzKGtleSk7XG4gICAgICAgIH0pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5yZW1vdmVDb250cm9sKGtleSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgdGhpcy5maWVsZHNcbiAgICAgICAgICAgIC5maWx0ZXIoZmllbGQgPT4gIXRoaXMuZm9ybS5jb250cm9sc1tmaWVsZC5uYW1lXSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xpbmVCcmVhaycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sKGZpZWxkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChmaWVsZC5uYW1lLCBjb250cm9sKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29udHJvbChmaWVsZDogSUtsZXNGaWVsZENvbmZpZyk6IEFic3RyYWN0Q29udHJvbCB7XG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsaXN0RmllbGQnKSB7XG4gICAgICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuZmIuYXJyYXkoW10pO1xuXG4gICAgICAgICAgICBmaWVsZC52YWx1ZS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgICAgICAgICAgICAgIGZpZWxkLmNvbGxlY3Rpb25zLmZvckVhY2goc3ViZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sKHN1YmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgc3ViR3JvdXAuYWRkQ29udHJvbChzdWJmaWVsZC5uYW1lLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHN1Ykdyb3VwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1Ykdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgICAgICAgICBpZiAoZmllbGQuY29sbGVjdGlvbnMgJiYgQXJyYXkuaXNBcnJheShmaWVsZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5jb2xsZWN0aW9ucy5mb3JFYWNoKHN1YmZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbChzdWJmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIHN1Ykdyb3VwLmFkZENvbnRyb2woc3ViZmllbGQubmFtZSwgY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3ViR3JvdXA7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzOiB0aGlzLmJpbmRWYWxpZGF0aW9ucyhmaWVsZC52YWxpZGF0aW9ucyB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9yczogdGhpcy5iaW5kQXN5bmNWYWxpZGF0aW9ucyhmaWVsZC5hc3luY1ZhbGlkYXRpb25zIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlT246IGZpZWxkLnVwZGF0ZU9uIHx8ICdjaGFuZ2UnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChmaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgLy8gcHJpdmF0ZSBjcmVhdGVDb250cm9sKGZpZWxkOiBJS2xlc0ZpZWxkQ29uZmlnKTogQWJzdHJhY3RDb250cm9sIHtcblxuICAgIC8vICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xpc3RGaWVsZCcpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IGFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XG5cbiAgICAvLyAgICAgICAgIGZpZWxkLnZhbHVlLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IHN1Ykdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgLy8gICAgICAgICAgICAgZmllbGQuY29sbGVjdGlvbnMuZm9yRWFjaChzdWJmaWVsZCA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBkYXRhW3N1YmZpZWxkLm5hbWVdID8gZGF0YVtzdWJmaWVsZC5uYW1lXSA6IG51bGwsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRWYWxpZGF0aW9ucyhzdWJmaWVsZC52YWxpZGF0aW9ucyB8fCBbXSksXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRBc3luY1ZhbGlkYXRpb25zKHN1YmZpZWxkLmFzeW5jVmFsaWRhdGlvbnMgfHwgW10pXG4gICAgLy8gICAgICAgICAgICAgICAgICk7XG4gICAgLy8gICAgICAgICAgICAgICAgIHN1Ykdyb3VwLmFkZENvbnRyb2woc3ViZmllbGQubmFtZSwgY29udHJvbCk7XG4gICAgLy8gICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgYXJyYXkucHVzaChzdWJHcm91cCk7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAvLyAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgIC8vICAgICAgICAgaWYgKGZpZWxkLmNvbGxlY3Rpb25zICYmIEFycmF5LmlzQXJyYXkoZmllbGQuY29sbGVjdGlvbnMpKSB7XG4gICAgLy8gICAgICAgICAgICAgZmllbGQuY29sbGVjdGlvbnMuZm9yRWFjaChzdWJmaWVsZCA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzdWJmaWVsZC52YWx1ZSxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZFZhbGlkYXRpb25zKHN1YmZpZWxkLnZhbGlkYXRpb25zIHx8IFtdKSxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZEFzeW5jVmFsaWRhdGlvbnMoc3ViZmllbGQuYXN5bmNWYWxpZGF0aW9ucyB8fCBbXSlcbiAgICAvLyAgICAgICAgICAgICAgICAgKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHN1YmZpZWxkLmRpc2FibGVkKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBzdWJHcm91cC5hZGRDb250cm9sKHN1YmZpZWxkLm5hbWUsIGNvbnRyb2wpO1xuICAgIC8vICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgcmV0dXJuIHN1Ykdyb3VwO1xuXG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKFxuICAgIC8vICAgICAgICAgICAgIGZpZWxkLnZhbHVlLFxuICAgIC8vICAgICAgICAgICAgIHRoaXMuYmluZFZhbGlkYXRpb25zKGZpZWxkLnZhbGlkYXRpb25zIHx8IFtdKSxcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmJpbmRBc3luY1ZhbGlkYXRpb25zKGZpZWxkLmFzeW5jVmFsaWRhdGlvbnMgfHwgW10pXG4gICAgLy8gICAgICAgICApO1xuICAgIC8vICAgICAgICAgaWYgKGZpZWxkLmRpc2FibGVkKSB7XG4gICAgLy8gICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICByZXR1cm4gY29udHJvbDtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuXG5cbiAgICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG5cbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbGluZUJyZWFrJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNyZWF0ZUNvbnRyb2woZmllbGQpO1xuXG4gICAgICAgICAgICBncm91cC5hZGRDb250cm9sKGZpZWxkLm5hbWUsIGNvbnRyb2wpO1xuICAgICAgICB9KTtcblxuICAgICAgICBncm91cC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xuICAgICAgICBncm91cC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5hc3luY1ZhbGlkYXRvcnMubWFwKHYgPT4gdi52YWxpZGF0b3IpKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGJpbmRWYWxpZGF0aW9ucyh2YWxpZGF0aW9uczogSUtsZXNWYWxpZGF0b3I8VmFsaWRhdG9yRm4+W10pOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIGlmICh2YWxpZGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZExpc3QgPSBbXTtcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLmZvckVhY2godmFsaWQgPT4ge1xuICAgICAgICAgICAgICAgIHZhbGlkTGlzdC5wdXNoKHZhbGlkLnZhbGlkYXRvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRMaXN0KTtcblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBiaW5kQXN5bmNWYWxpZGF0aW9ucyh2YWxpZGF0aW9uczogSUtsZXNWYWxpZGF0b3I8QXN5bmNWYWxpZGF0b3JGbj5bXSk6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgICAgICBpZiAodmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRMaXN0ID0gW107XG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5mb3JFYWNoKHZhbGlkID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZExpc3QucHVzaCh2YWxpZC52YWxpZGF0b3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5jb21wb3NlQXN5bmModmFsaWRMaXN0KTtcblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19