@klippa/ngx-enhancy-forms 18.33.24 → 20.0.0

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 (91) hide show
  1. package/fesm2022/klippa-ngx-enhancy-forms.mjs +167 -148
  2. package/fesm2022/klippa-ngx-enhancy-forms.mjs.map +1 -1
  3. package/index.d.ts +707 -3
  4. package/package.json +5 -7
  5. package/esm2022/klippa-ngx-enhancy-forms.mjs +0 -5
  6. package/esm2022/lib/elementIsTruncatedCb.component.mjs +0 -58
  7. package/esm2022/lib/elements/button/button.component.mjs +0 -57
  8. package/esm2022/lib/elements/checkbox/checkbox.component.mjs +0 -23
  9. package/esm2022/lib/elements/date-picker/date-picker.component.mjs +0 -108
  10. package/esm2022/lib/elements/date-time-picker/date-time-picker.component.mjs +0 -436
  11. package/esm2022/lib/elements/email/email-input.component.mjs +0 -21
  12. package/esm2022/lib/elements/file-input/file-input.component.mjs +0 -76
  13. package/esm2022/lib/elements/hour-minute-input/hour-minute-input.component.mjs +0 -90
  14. package/esm2022/lib/elements/loading-indicator/loading-indicator.component.mjs +0 -20
  15. package/esm2022/lib/elements/number-input/number-input.component.mjs +0 -31
  16. package/esm2022/lib/elements/password-field/password-field.component.mjs +0 -21
  17. package/esm2022/lib/elements/radio/radio.component.mjs +0 -34
  18. package/esm2022/lib/elements/select/select-footer/select-footer.component.mjs +0 -15
  19. package/esm2022/lib/elements/select/select.component.mjs +0 -385
  20. package/esm2022/lib/elements/sortable-grouped-items/sortable-grouped-items.component.mjs +0 -54
  21. package/esm2022/lib/elements/sortable-items/sortable-items.component.mjs +0 -189
  22. package/esm2022/lib/elements/text-area/text-area.component.mjs +0 -23
  23. package/esm2022/lib/elements/text-input/text-input.component.mjs +0 -52
  24. package/esm2022/lib/elements/toggle/toggle.component.mjs +0 -21
  25. package/esm2022/lib/elements/value-accessor-base/multiple-value-accessor-base.component.mjs +0 -61
  26. package/esm2022/lib/elements/value-accessor-base/value-accessor-base.component.mjs +0 -167
  27. package/esm2022/lib/form/form-caption/form-caption.component.mjs +0 -31
  28. package/esm2022/lib/form/form-caption-end/form-caption-end.component.mjs +0 -34
  29. package/esm2022/lib/form/form-element/form-element.component.mjs +0 -317
  30. package/esm2022/lib/form/form-error/form-error.component.mjs +0 -40
  31. package/esm2022/lib/form/form-submit-button/form-submit-button.component.mjs +0 -71
  32. package/esm2022/lib/form/form-validation-error/form-validation-error.mjs +0 -22
  33. package/esm2022/lib/form/form.component.mjs +0 -442
  34. package/esm2022/lib/material.module.mjs +0 -22
  35. package/esm2022/lib/ngx-enhancy-forms.module.mjs +0 -191
  36. package/esm2022/lib/onRender.component.mjs +0 -19
  37. package/esm2022/lib/types.mjs +0 -2
  38. package/esm2022/lib/util/angular.mjs +0 -9
  39. package/esm2022/lib/util/arrays.mjs +0 -48
  40. package/esm2022/lib/util/classes.mjs +0 -2
  41. package/esm2022/lib/util/dom.mjs +0 -15
  42. package/esm2022/lib/util/objects.mjs +0 -38
  43. package/esm2022/lib/util/values.mjs +0 -23
  44. package/esm2022/lib/validators/dateValidator.mjs +0 -6
  45. package/esm2022/lib/validators/timeValidator.mjs +0 -6
  46. package/esm2022/lib/warning-icon/warning-icon.component.mjs +0 -17
  47. package/esm2022/lib/withTooltip.component.mjs +0 -185
  48. package/esm2022/public-api.mjs +0 -38
  49. package/lib/elementIsTruncatedCb.component.d.ts +0 -14
  50. package/lib/elements/button/button.component.d.ts +0 -16
  51. package/lib/elements/checkbox/checkbox.component.d.ts +0 -8
  52. package/lib/elements/date-picker/date-picker.component.d.ts +0 -26
  53. package/lib/elements/date-time-picker/date-time-picker.component.d.ts +0 -83
  54. package/lib/elements/email/email-input.component.d.ts +0 -7
  55. package/lib/elements/file-input/file-input.component.d.ts +0 -18
  56. package/lib/elements/hour-minute-input/hour-minute-input.component.d.ts +0 -20
  57. package/lib/elements/loading-indicator/loading-indicator.component.d.ts +0 -7
  58. package/lib/elements/number-input/number-input.component.d.ts +0 -9
  59. package/lib/elements/password-field/password-field.component.d.ts +0 -7
  60. package/lib/elements/radio/radio.component.d.ts +0 -21
  61. package/lib/elements/select/select-footer/select-footer.component.d.ts +0 -7
  62. package/lib/elements/select/select.component.d.ts +0 -91
  63. package/lib/elements/sortable-grouped-items/sortable-grouped-items.component.d.ts +0 -12
  64. package/lib/elements/sortable-items/sortable-items.component.d.ts +0 -29
  65. package/lib/elements/text-area/text-area.component.d.ts +0 -9
  66. package/lib/elements/text-input/text-input.component.d.ts +0 -19
  67. package/lib/elements/toggle/toggle.component.d.ts +0 -7
  68. package/lib/elements/value-accessor-base/multiple-value-accessor-base.component.d.ts +0 -14
  69. package/lib/elements/value-accessor-base/value-accessor-base.component.d.ts +0 -50
  70. package/lib/form/form-caption/form-caption.component.d.ts +0 -11
  71. package/lib/form/form-caption-end/form-caption-end.component.d.ts +0 -12
  72. package/lib/form/form-element/form-element.component.d.ts +0 -81
  73. package/lib/form/form-error/form-error.component.d.ts +0 -15
  74. package/lib/form/form-submit-button/form-submit-button.component.d.ts +0 -21
  75. package/lib/form/form-validation-error/form-validation-error.d.ts +0 -10
  76. package/lib/form/form.component.d.ts +0 -58
  77. package/lib/material.module.d.ts +0 -11
  78. package/lib/ngx-enhancy-forms.module.d.ts +0 -41
  79. package/lib/onRender.component.d.ts +0 -8
  80. package/lib/types.d.ts +0 -16
  81. package/lib/util/angular.d.ts +0 -2
  82. package/lib/util/arrays.d.ts +0 -8
  83. package/lib/util/classes.d.ts +0 -1
  84. package/lib/util/dom.d.ts +0 -2
  85. package/lib/util/objects.d.ts +0 -1
  86. package/lib/util/values.d.ts +0 -6
  87. package/lib/validators/dateValidator.d.ts +0 -3
  88. package/lib/validators/timeValidator.d.ts +0 -3
  89. package/lib/warning-icon/warning-icon.component.d.ts +0 -6
  90. package/lib/withTooltip.component.d.ts +0 -23
  91. package/public-api.d.ts +0 -34
@@ -1,442 +0,0 @@
1
- import { Component, Directive, EventEmitter, Input, Optional, Output, SkipSelf } from '@angular/core';
2
- import { FormArray, FormControl, FormGroup, UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular/forms';
3
- import { isValueSet } from '../util/values';
4
- import { deepMerge } from '../util/objects';
5
- import { cloneDeep } from 'lodash';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/forms";
8
- export const invalidFieldsSymbol = Symbol('Not all fields are valid');
9
- export class SubFormDirective {
10
- constructor() {
11
- this.manuallyTriggerInjection = false;
12
- this.allowInjectionToOverwrite = false;
13
- }
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SubFormDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
15
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: SubFormDirective, selector: "klp-sub-form", inputs: { injectInto: "injectInto", at: "at", manuallyTriggerInjection: "manuallyTriggerInjection", allowInjectionToOverwrite: "allowInjectionToOverwrite" }, ngImport: i0 }); }
16
- }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SubFormDirective, decorators: [{
18
- type: Directive,
19
- args: [{
20
- // tslint:disable-next-line:directive-selector
21
- selector: 'klp-sub-form',
22
- }]
23
- }], propDecorators: { injectInto: [{
24
- type: Input
25
- }], at: [{
26
- type: Input
27
- }], manuallyTriggerInjection: [{
28
- type: Input
29
- }], allowInjectionToOverwrite: [{
30
- type: Input
31
- }] } });
32
- export class FormComponent {
33
- constructor(parent, subFormDirective) {
34
- this.parent = parent;
35
- this.subFormDirective = subFormDirective;
36
- this.readOnly = false;
37
- this.showErrorMessages = true;
38
- this.errorMessageLocation = 'belowCaption';
39
- this.warnings = new Map();
40
- this.immutableValues = {};
41
- this.errors = new Map();
42
- this.allowSubmitOn = 'buttonAndEnter';
43
- this.onInjected = new EventEmitter();
44
- // we keep track of what form controls are actually rendered. Only those count when looking at form validation
45
- this.activeControls = [];
46
- }
47
- ngOnInit() {
48
- this.topLevelFormControl = this.formGroup ?? this.formArray;
49
- if (isValueSet(this.patchValueInterceptor)) {
50
- this.addSupportForPatchValueInterceptor();
51
- }
52
- if (isValueSet(this.parent) && isValueSet(this.subFormDirective)) {
53
- if (this.subFormDirective.manuallyTriggerInjection) {
54
- return;
55
- }
56
- // if the `formComponentToInject` is not set, just attach the first that requests an injection
57
- this.attachAsSubForm();
58
- }
59
- }
60
- _ext_attachAsSubForm() {
61
- if (!isValueSet(this.parent)) {
62
- throw new Error('No parent to inject this form into was found.');
63
- }
64
- if (!isValueSet(this.subFormDirective)) {
65
- throw new Error('Subform directive not found.');
66
- }
67
- this.attachAsSubForm();
68
- }
69
- attachAsSubForm() {
70
- const injectInto = this.subFormDirective.injectInto;
71
- const injectAt = this.subFormDirective.at;
72
- const allowInjectionToOverwrite = this.subFormDirective.allowInjectionToOverwrite;
73
- if (injectInto instanceof UntypedFormArray) {
74
- if (!allowInjectionToOverwrite) {
75
- if (injectInto.at(injectAt) instanceof FormGroup || injectInto.at(injectAt) instanceof FormArray) {
76
- throw new Error(`There already is a subform injected at ${injectAt}. Make sure this property does not have a formGroup or formArray already attached when linking it to a subForm.`);
77
- }
78
- }
79
- if (typeof injectAt !== 'number') {
80
- throw new Error(`cannot index FormArray with ${typeof injectAt}`);
81
- }
82
- if (injectInto.at(injectAt)?.disabled) {
83
- this.topLevelFormControl.disable();
84
- }
85
- const source = injectInto.at(injectAt);
86
- const valueBeforeInject = source?.value;
87
- if (isValueSet(valueBeforeInject)) {
88
- this.topLevelFormControl.patchValue(valueBeforeInject);
89
- }
90
- injectInto.setControl(injectAt, this.topLevelFormControl);
91
- this.onInjected.emit(valueBeforeInject);
92
- }
93
- else if (injectInto instanceof UntypedFormGroup) {
94
- if (!allowInjectionToOverwrite) {
95
- if (injectInto.get(injectAt) instanceof FormGroup || injectInto.get(injectAt) instanceof FormArray) {
96
- throw new Error(`There already is a subform injected at ${injectAt}. Make sure this property does not have a formGroup or formArray already attached when linking it to a subForm.`);
97
- }
98
- }
99
- if (typeof injectAt !== 'string') {
100
- throw new Error(`cannot index FormGroup with ${typeof injectAt}`);
101
- }
102
- if (injectInto.get(injectAt)?.disabled) {
103
- this.topLevelFormControl.disable();
104
- }
105
- const source = injectInto.get(injectAt);
106
- const valueBeforeInject = source?.value;
107
- if (isValueSet(valueBeforeInject)) {
108
- this.topLevelFormControl.patchValue(valueBeforeInject);
109
- }
110
- injectInto.setControl(injectAt, this.topLevelFormControl);
111
- this.onInjected.emit(valueBeforeInject);
112
- }
113
- }
114
- ngOnChanges(simpleChanges) {
115
- if (simpleChanges.readOnly?.currentValue === true) {
116
- this.activeControls.forEach(e => e.formControl.disable());
117
- }
118
- if (isValueSet(simpleChanges.warnings?.currentValue)) {
119
- this.patchFormWarningsMap();
120
- }
121
- if (isValueSet(simpleChanges.errors?.currentValue)) {
122
- this.patchFormErrorsMap();
123
- }
124
- }
125
- ngOnDestroy() {
126
- if (isValueSet(this.parent) && isValueSet(this.subFormDirective)) {
127
- const injectInto = this.subFormDirective.injectInto;
128
- const injectAt = this.subFormDirective.at;
129
- if (injectInto instanceof UntypedFormArray) {
130
- const idx = injectInto.controls.findIndex(e => e === this.topLevelFormControl);
131
- injectInto.removeAt(idx);
132
- }
133
- else if (injectInto instanceof UntypedFormGroup) {
134
- if (typeof injectAt !== 'string') {
135
- throw new Error(`cannot index FormGroup with ${typeof injectAt}`);
136
- }
137
- injectInto.setControl(injectAt, new FormControl());
138
- }
139
- }
140
- }
141
- patchFormWarningsMap() {
142
- const setFn = this.warnings.set;
143
- this.warnings.set = (key, value) => {
144
- const prevVal = this.warnings.get(key);
145
- const result = setFn.call(this.warnings, key, value);
146
- if (prevVal !== value) {
147
- this.getFormElementByFormControl(key)?.determinePopupState();
148
- }
149
- return result;
150
- };
151
- const deleteFn = this.warnings.delete;
152
- this.warnings.delete = (key) => {
153
- const result = deleteFn.call(this.warnings, key);
154
- this.getFormElementByFormControl(key)?.determinePopupState();
155
- return result;
156
- };
157
- }
158
- patchFormErrorsMap() {
159
- const setFn = this.errors.set;
160
- this.errors.set = (key, value) => {
161
- const prevVal = this.errors.get(key);
162
- const result = setFn.call(this.errors, key, value);
163
- key.setErrors({ ...key.errors, formLevel: value });
164
- if (prevVal !== value) {
165
- this.getFormElementByFormControl(key)?.determinePopupState();
166
- }
167
- return result;
168
- };
169
- const deleteFn = this.errors.delete;
170
- this.errors.delete = (key) => {
171
- const newErrorsObject = key.errors;
172
- delete newErrorsObject.formLevel;
173
- key.setErrors(newErrorsObject);
174
- const result = deleteFn.call(this.errors, key);
175
- this.getFormElementByFormControl(key)?.determinePopupState();
176
- return result;
177
- };
178
- }
179
- addSupportForPatchValueInterceptor() {
180
- const fn = this.topLevelFormControl.patchValue;
181
- const newFn = (value, options) => {
182
- this.patchValueInterceptor(value).then((val) => {
183
- setTimeout(() => {
184
- fn.call(this.topLevelFormControl, val, options);
185
- });
186
- });
187
- };
188
- this.topLevelFormControl.patchValue = newFn;
189
- }
190
- registerControl(formControl, formElement) {
191
- this.activeControls.push({ formControl, formElement });
192
- let parentImmutableValueFn;
193
- if (this.parent) {
194
- parentImmutableValueFn = this.parent.registerControl(formControl, formElement);
195
- }
196
- if (this.readOnly) {
197
- formControl.disable();
198
- }
199
- const enableFn = formControl.enable;
200
- formControl.enable = (opts) => {
201
- if (!this.readOnly) {
202
- enableFn.call(formControl, opts);
203
- }
204
- };
205
- const getImmutableValueFn = () => {
206
- const path = this.getPathFromParentToControl(formControl);
207
- const immutableValue = this.getImmutableValueFromPath(path);
208
- const immutableValueFromParent = parentImmutableValueFn?.();
209
- return cloneDeep(immutableValue !== undefined ? immutableValue : immutableValueFromParent);
210
- };
211
- const setValueFn = formControl.setValue;
212
- formControl.setValue = (value, options) => {
213
- const immutableValue = getImmutableValueFn();
214
- if (immutableValue !== undefined && options?.emitModelToViewChange !== true) {
215
- if (!isValueSet(options)) {
216
- options = {};
217
- }
218
- options.emitModelToViewChange = true;
219
- }
220
- setValueFn.call(formControl, immutableValue !== undefined ? immutableValue : value, options);
221
- };
222
- const immutableValue = getImmutableValueFn();
223
- if (immutableValue !== undefined) {
224
- formControl.setValue(immutableValue);
225
- }
226
- return getImmutableValueFn;
227
- }
228
- getPathFromParentToControl(control) {
229
- const path = [];
230
- let currentControl = control;
231
- while (currentControl.parent) {
232
- const parent = currentControl.parent;
233
- if (parent instanceof FormGroup) {
234
- const key = Object.entries(parent.controls).find(([key, value]) => value === currentControl)[0];
235
- path.push(key);
236
- }
237
- else if (parent instanceof FormArray) {
238
- const idx = parent.controls.findIndex(e => e === currentControl);
239
- path.push(idx);
240
- }
241
- currentControl = parent;
242
- }
243
- return path.reverse();
244
- }
245
- getImmutableValueFromPath(path) {
246
- let current = this.immutableValues;
247
- for (const key of path) {
248
- if (!isValueSet(current?.[key])) {
249
- return undefined;
250
- }
251
- current = current[key];
252
- }
253
- return current;
254
- }
255
- unregisterControl(formControl) {
256
- this.activeControls = this.activeControls.filter((e) => e.formControl !== formControl);
257
- if (this.parent) {
258
- this.parent.unregisterControl(formControl);
259
- }
260
- }
261
- addFormGroupControls(formGroup, result) {
262
- Object.values(formGroup.controls).forEach((value) => {
263
- if (value instanceof UntypedFormGroup) {
264
- this.addFormGroupControls(value, result);
265
- }
266
- else if (value instanceof UntypedFormArray) {
267
- this.addFormArrayControls(value, result);
268
- }
269
- else if (value instanceof UntypedFormControl) {
270
- this.addFormControl(value, result);
271
- }
272
- });
273
- }
274
- addFormArrayControls(formArray, result) {
275
- formArray.controls.forEach((value) => {
276
- if (value instanceof UntypedFormGroup) {
277
- this.addFormGroupControls(value, result);
278
- }
279
- else if (value instanceof UntypedFormArray) {
280
- this.addFormArrayControls(value, result);
281
- }
282
- else if (value instanceof UntypedFormControl) {
283
- this.addFormControl(value, result);
284
- }
285
- });
286
- }
287
- getAllFormControls() {
288
- const result = [];
289
- if (this.topLevelFormControl instanceof FormGroup) {
290
- this.addFormGroupControls(this.topLevelFormControl, result);
291
- }
292
- else if (this.topLevelFormControl instanceof FormArray) {
293
- this.addFormArrayControls(this.topLevelFormControl, result);
294
- }
295
- return result;
296
- }
297
- addFormControl(control, result) {
298
- result.push(control);
299
- }
300
- disableInactiveFormControl(control) {
301
- if (!this.activeControls.some((e) => e.formControl === control)) {
302
- control.disable();
303
- }
304
- }
305
- getFormElementByFormControl(control) {
306
- return this.activeControls.find((e) => e.formControl === control)?.formElement;
307
- }
308
- getWarningToShow(control) {
309
- return this.warnings.get(control);
310
- }
311
- trySubmit() {
312
- this.topLevelFormControl.markAllAsTouched();
313
- const allControls = this.getAllFormControls();
314
- const originalDisabledStates = allControls.map(e => {
315
- return { control: e, disabled: e.disabled };
316
- });
317
- allControls.forEach(e => this.disableInactiveFormControl(e));
318
- allControls.forEach(e => e.updateValueAndValidity());
319
- const formGroupValue = this.topLevelFormControl.value;
320
- if (this.topLevelFormControl instanceof FormGroup) {
321
- const renderedAndEnabledValues = this.getRenderedFieldValuesFormGroup(this.topLevelFormControl, true);
322
- const renderedButDisabledValues = this.getRenderedFieldValuesFormGroup(this.topLevelFormControl, false);
323
- return new Promise((resolve, reject) => {
324
- if (this.topLevelFormControl.pending) {
325
- const sub = this.topLevelFormControl.statusChanges.subscribe((res) => {
326
- if (res !== 'PENDING') {
327
- sub.unsubscribe();
328
- this.handleSubmission(originalDisabledStates, renderedAndEnabledValues, renderedButDisabledValues, formGroupValue)
329
- .then(resolve)
330
- .catch(reject);
331
- }
332
- });
333
- }
334
- else {
335
- this.handleSubmission(originalDisabledStates, renderedAndEnabledValues, renderedButDisabledValues, formGroupValue)
336
- .then(resolve)
337
- .catch(reject);
338
- }
339
- });
340
- }
341
- throw new Error('Submitting a FormArray as topLevel not supported (yet). Wrap it in a FormGroup.');
342
- }
343
- handleSubmission(originalDisabledStates, renderedAndEnabledValues, renderedButDisabledValues, formGroupValue) {
344
- if (this.topLevelFormControl.invalid) {
345
- this.activeControls.find((e) => e.formControl.invalid)?.formElement?.scrollTo();
346
- this.setDisabledStatesForAllControls(originalDisabledStates);
347
- return Promise.reject(invalidFieldsSymbol);
348
- }
349
- else {
350
- this.setDisabledStatesForAllControls(originalDisabledStates);
351
- const renderedValues = deepMerge(renderedAndEnabledValues, renderedButDisabledValues);
352
- return Promise.resolve([formGroupValue, renderedValues]);
353
- }
354
- }
355
- getRenderedFieldValuesFormGroup(formGroup, enabled, valueObject = {}) {
356
- Object.entries(formGroup.controls).forEach(([name, control]) => {
357
- if (control instanceof FormControl && control.enabled === enabled && this.activeControls.some(e => e.formControl === control)) {
358
- valueObject[name] = control.value;
359
- }
360
- else if (control instanceof FormArray) {
361
- valueObject[name] = [];
362
- this.getRenderedFieldValuesFormArray(control, enabled, valueObject[name]);
363
- }
364
- else if (control instanceof FormGroup) {
365
- valueObject[name] = {};
366
- this.getRenderedFieldValuesFormGroup(control, enabled, valueObject[name]);
367
- }
368
- });
369
- return valueObject;
370
- }
371
- getRenderedFieldValuesFormArray(formArray, enabled, valueArray) {
372
- formArray.controls.forEach((control) => {
373
- if (control instanceof FormControl && control.enabled === enabled && this.activeControls.some(e => e.formControl === control)) {
374
- valueArray.push(control.value);
375
- }
376
- else if (control instanceof FormArray) {
377
- const newArray = [];
378
- valueArray.push(newArray);
379
- this.getRenderedFieldValuesFormArray(control, enabled, newArray);
380
- }
381
- else if (control instanceof FormGroup) {
382
- const newObject = {};
383
- valueArray.push(newObject);
384
- this.getRenderedFieldValuesFormGroup(control, enabled, newObject);
385
- }
386
- });
387
- }
388
- _ext_getRenderedFieldValues() {
389
- if (this.topLevelFormControl instanceof FormGroup) {
390
- const renderedAndEnabledValues = this.getRenderedFieldValuesFormGroup(this.topLevelFormControl, true);
391
- const renderedButDisabledValues = this.getRenderedFieldValuesFormGroup(this.topLevelFormControl, false);
392
- const allRenderedValues = deepMerge(renderedAndEnabledValues, renderedButDisabledValues);
393
- return allRenderedValues;
394
- }
395
- throw new Error('Getting values from a FormArray as topLevel is not supported (yet).');
396
- }
397
- setDisabledStatesForAllControls(originalDisabledStates) {
398
- originalDisabledStates.forEach((e) => {
399
- if (e.disabled) {
400
- e.control.disable();
401
- }
402
- else {
403
- e.control.enable();
404
- }
405
- });
406
- }
407
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormComponent, deps: [{ token: FormComponent, optional: true, skipSelf: true }, { token: SubFormDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
408
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: FormComponent, selector: "klp-form", inputs: { readOnly: "readOnly", showErrorMessages: "showErrorMessages", errorMessageLocation: "errorMessageLocation", formGroup: "formGroup", formArray: "formArray", warnings: "warnings", immutableValues: "immutableValues", errors: "errors", patchValueInterceptor: "patchValueInterceptor", allowSubmitOn: "allowSubmitOn" }, outputs: { onInjected: "onInjected" }, usesOnChanges: true, ngImport: i0, template: "<form>\n\t<ng-content></ng-content>\n</form>\n\n\n", styles: [":host{display:block}:host.row{display:flex}:host form{height:inherit}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
409
- }
410
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormComponent, decorators: [{
411
- type: Component,
412
- args: [{ selector: 'klp-form', template: "<form>\n\t<ng-content></ng-content>\n</form>\n\n\n", styles: [":host{display:block}:host.row{display:flex}:host form{height:inherit}\n"] }]
413
- }], ctorParameters: () => [{ type: FormComponent, decorators: [{
414
- type: SkipSelf
415
- }, {
416
- type: Optional
417
- }] }, { type: SubFormDirective, decorators: [{
418
- type: Optional
419
- }] }], propDecorators: { readOnly: [{
420
- type: Input
421
- }], showErrorMessages: [{
422
- type: Input
423
- }], errorMessageLocation: [{
424
- type: Input
425
- }], formGroup: [{
426
- type: Input
427
- }], formArray: [{
428
- type: Input
429
- }], warnings: [{
430
- type: Input
431
- }], immutableValues: [{
432
- type: Input
433
- }], errors: [{
434
- type: Input
435
- }], patchValueInterceptor: [{
436
- type: Input
437
- }], allowSubmitOn: [{
438
- type: Input
439
- }], onInjected: [{
440
- type: Output
441
- }] } });
442
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBRVIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sUUFBUSxDQUFDOzs7QUFFakMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFNdEUsTUFBTSxPQUFPLGdCQUFnQjtJQUo3QjtRQU9VLDZCQUF3QixHQUFZLEtBQUssQ0FBQztRQUMxQyw4QkFBeUIsR0FBWSxLQUFLLENBQUM7S0FDcEQ7OEdBTFksZ0JBQWdCO2tHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSjVCLFNBQVM7bUJBQUM7b0JBQ1YsOENBQThDO29CQUM5QyxRQUFRLEVBQUUsY0FBYztpQkFDeEI7OEJBRVMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csd0JB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YUFBYSxnYkM5QzFCLG9EQUtBOzsyRkR5Q2EsYUFBYTtrQkFMekIsU0FBUzsrQkFDQyxVQUFVOzswQkF5QlAsUUFBUTs7MEJBQUksUUFBUTs7MEJBQW1DLFFBQVE7eUNBcEI1RCxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGlCQUFpQjtzQkFBaEMsS0FBSztnQkFDVSxvQkFBb0I7c0JBQW5DLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLHFCQUFxQjtzQkFBcEMsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNXLFVBQVU7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdERpcmVjdGl2ZSxcblx0RXZlbnRFbWl0dGVyLFxuXHRJbnB1dCxcblx0T25DaGFuZ2VzLFxuXHRPbkRlc3Ryb3ksXG5cdE9uSW5pdCxcblx0T3B0aW9uYWwsXG5cdE91dHB1dCxcblx0U2ltcGxlQ2hhbmdlcyxcblx0U2tpcFNlbGYsXG5cdFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0QWJzdHJhY3RDb250cm9sLFxuXHRGb3JtQXJyYXksXG5cdEZvcm1Db250cm9sLFxuXHRGb3JtR3JvdXAsXG5cdFVudHlwZWRGb3JtQXJyYXksXG5cdFVudHlwZWRGb3JtQ29udHJvbCxcblx0VW50eXBlZEZvcm1Hcm91cFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Zvcm1FbGVtZW50Q29tcG9uZW50fSBmcm9tICcuL2Zvcm0tZWxlbWVudC9mb3JtLWVsZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7aXNWYWx1ZVNldH0gZnJvbSAnLi4vdXRpbC92YWx1ZXMnO1xuaW1wb3J0IHtkZWVwTWVyZ2V9IGZyb20gJy4uL3V0aWwvb2JqZWN0cyc7XG5pbXBvcnQge2Nsb25lRGVlcH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IGludmFsaWRGaWVsZHNTeW1ib2wgPSBTeW1ib2woJ05vdCBhbGwgZmllbGRzIGFyZSB2YWxpZCcpO1xuXG5ARGlyZWN0aXZlKHtcblx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxuXHRzZWxlY3RvcjogJ2tscC1zdWItZm9ybScsXG59KVxuZXhwb3J0IGNsYXNzIFN1YkZvcm1EaXJlY3RpdmUge1xuXHRASW5wdXQoKSBpbmplY3RJbnRvOiBVbnR5cGVkRm9ybUFycmF5IHwgVW50eXBlZEZvcm1Hcm91cDtcblx0QElucHV0KCkgYXQ6IG51bWJlciB8IHN0cmluZztcblx0QElucHV0KCkgbWFudWFsbHlUcmlnZ2VySW5qZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cdEBJbnB1dCgpIGFsbG93SW5qZWN0aW9uVG9PdmVyd3JpdGU6IGJvb2xlYW4gPSBmYWxzZTtcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0nLFxuXHR0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXHRASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHkgPSBmYWxzZTtcblx0QElucHV0KCkgcHVibGljIHNob3dFcnJvck1lc3NhZ2VzID0gdHJ1ZTtcblx0QElucHV0KCkgcHVibGljIGVycm9yTWVzc2FnZUxvY2F0aW9uOiAnYmVsb3dDYXB0aW9uJyB8ICdyaWdodE9mQ2FwdGlvbicgPSAnYmVsb3dDYXB0aW9uJztcblx0QElucHV0KCkgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXHRASW5wdXQoKSBwdWJsaWMgZm9ybUFycmF5OiBGb3JtQXJyYXk7XG5cdEBJbnB1dCgpIHB1YmxpYyB3YXJuaW5nczogTWFwPEFic3RyYWN0Q29udHJvbCwgc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pj4gPSBuZXcgTWFwPEFic3RyYWN0Q29udHJvbCwgc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pj4oKTtcblx0QElucHV0KCkgcHVibGljIGltbXV0YWJsZVZhbHVlczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRASW5wdXQoKSBwdWJsaWMgZXJyb3JzOiBNYXA8QWJzdHJhY3RDb250cm9sLCBzdHJpbmc+ID0gbmV3IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZz4oKTtcblx0QElucHV0KCkgcHVibGljIHBhdGNoVmFsdWVJbnRlcmNlcHRvcjogKHZhbHVlczogYW55KSA9PiBQcm9taXNlPGFueT47XG5cdEBJbnB1dCgpIHB1YmxpYyBhbGxvd1N1Ym1pdE9uOiAnYnV0dG9uQW5kRW50ZXInIHwgJ2J1dHRvbk9ubHknID0gJ2J1dHRvbkFuZEVudGVyJztcblx0QE91dHB1dCgpIHB1YmxpYyBvbkluamVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xuXG5cdHByaXZhdGUgdG9wTGV2ZWxGb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG5cdC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hhdCBmb3JtIGNvbnRyb2xzIGFyZSBhY3R1YWxseSByZW5kZXJlZC4gT25seSB0aG9zZSBjb3VudCB3aGVuIGxvb2tpbmcgYXQgZm9ybSB2YWxpZGF0aW9uXG5cdHByaXZhdGUgYWN0aXZlQ29udHJvbHM6IEFycmF5PHtcblx0XHRmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuXHRcdGZvcm1FbGVtZW50OiBGb3JtRWxlbWVudENvbXBvbmVudDtcblx0fT4gPSBbXTtcblxuXHRjb25zdHJ1Y3RvcihAU2tpcFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIHBhcmVudDogRm9ybUNvbXBvbmVudCwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzdWJGb3JtRGlyZWN0aXZlOiBTdWJGb3JtRGlyZWN0aXZlKSB7XG5cdH1cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cCA/PyB0aGlzLmZvcm1BcnJheTtcblx0XHRpZiAoaXNWYWx1ZVNldCh0aGlzLnBhdGNoVmFsdWVJbnRlcmNlcHRvcikpIHtcblx0XHRcdHRoaXMuYWRkU3VwcG9ydEZvclBhdGNoVmFsdWVJbnRlcmNlcHRvcigpO1xuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZVNldCh0aGlzLnBhcmVudCkgJiYgaXNWYWx1ZVNldCh0aGlzLnN1YkZvcm1EaXJlY3RpdmUpKSB7XG5cdFx0XHRpZiAodGhpcy5zdWJGb3JtRGlyZWN0aXZlLm1hbnVhbGx5VHJpZ2dlckluamVjdGlvbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBpZiB0aGUgYGZvcm1Db21wb25lbnRUb0luamVjdGAgaXMgbm90IHNldCwganVzdCBhdHRhY2ggdGhlIGZpcnN0IHRoYXQgcmVxdWVzdHMgYW4gaW5qZWN0aW9uXG5cdFx0XHR0aGlzLmF0dGFjaEFzU3ViRm9ybSgpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBfZXh0X2F0dGFjaEFzU3ViRm9ybSgpOiB2b2lkIHtcblx0XHRpZiAoIWlzVmFsdWVTZXQodGhpcy5wYXJlbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIHBhcmVudCB0byBpbmplY3QgdGhpcyBmb3JtIGludG8gd2FzIGZvdW5kLicpO1xuXHRcdH1cblx0XHRpZiAoIWlzVmFsdWVTZXQodGhpcy5zdWJGb3JtRGlyZWN0aXZlKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdTdWJmb3JtIGRpcmVjdGl2ZSBub3QgZm91bmQuJyk7XG5cdFx0fVxuXHRcdHRoaXMuYXR0YWNoQXNTdWJGb3JtKCk7XG5cdH1cblxuXHRwcml2YXRlIGF0dGFjaEFzU3ViRm9ybSgpOiB2b2lkIHtcblx0XHRjb25zdCBpbmplY3RJbnRvID0gdGhpcy5zdWJGb3JtRGlyZWN0aXZlLmluamVjdEludG87XG5cdFx0Y29uc3QgaW5qZWN0QXQgPSB0aGlzLnN1YkZvcm1EaXJlY3RpdmUuYXQ7XG5cdFx0Y29uc3QgYWxsb3dJbmplY3Rpb25Ub092ZXJ3cml0ZSA9IHRoaXMuc3ViRm9ybURpcmVjdGl2ZS5hbGxvd0luamVjdGlvblRvT3ZlcndyaXRlO1xuXHRcdGlmIChpbmplY3RJbnRvIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuXHRcdFx0aWYgKCFhbGxvd0luamVjdGlvblRvT3ZlcndyaXRlKSB7XG5cdFx0XHRcdGlmIChpbmplY3RJbnRvLmF0KGluamVjdEF0IGFzIG51bWJlcikgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgaW5qZWN0SW50by5hdChpbmplY3RBdCBhcyBudW1iZXIpIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhbHJlYWR5IGlzIGEgc3ViZm9ybSBpbmplY3RlZCBhdCAke2luamVjdEF0fS4gTWFrZSBzdXJlIHRoaXMgcHJvcGVydHkgZG9lcyBub3QgaGF2ZSBhIGZvcm1Hcm91cCBvciBmb3JtQXJyYXkgYWxyZWFkeSBhdHRhY2hlZCB3aGVuIGxpbmtpbmcgaXQgdG8gYSBzdWJGb3JtLmApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGluamVjdEF0ICE9PSAnbnVtYmVyJykge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBpbmRleCBGb3JtQXJyYXkgd2l0aCAke3R5cGVvZiBpbmplY3RBdH1gKTtcblx0XHRcdH1cblx0XHRcdGlmIChpbmplY3RJbnRvLmF0KGluamVjdEF0KT8uZGlzYWJsZWQpIHtcblx0XHRcdFx0dGhpcy50b3BMZXZlbEZvcm1Db250cm9sLmRpc2FibGUoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNvdXJjZSA9IGluamVjdEludG8uYXQoaW5qZWN0QXQpO1xuXHRcdFx0Y29uc3QgdmFsdWVCZWZvcmVJbmplY3QgPSBzb3VyY2U/LnZhbHVlO1xuXHRcdFx0aWYgKGlzVmFsdWVTZXQodmFsdWVCZWZvcmVJbmplY3QpKSB7XG5cdFx0XHRcdHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHRcdH1cblx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpbmplY3RBdCwgdGhpcy50b3BMZXZlbEZvcm1Db250cm9sKTtcblx0XHRcdHRoaXMub25JbmplY3RlZC5lbWl0KHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHR9IGVsc2UgaWYgKGluamVjdEludG8gaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG5cdFx0XHRpZiAoIWFsbG93SW5qZWN0aW9uVG9PdmVyd3JpdGUpIHtcblx0XHRcdFx0aWYgKGluamVjdEludG8uZ2V0KGluamVjdEF0IGFzIHN0cmluZykgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgaW5qZWN0SW50by5nZXQoaW5qZWN0QXQgYXMgc3RyaW5nKSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgVGhlcmUgYWxyZWFkeSBpcyBhIHN1YmZvcm0gaW5qZWN0ZWQgYXQgJHtpbmplY3RBdH0uIE1ha2Ugc3VyZSB0aGlzIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSBmb3JtR3JvdXAgb3IgZm9ybUFycmF5IGFscmVhZHkgYXR0YWNoZWQgd2hlbiBsaW5raW5nIGl0IHRvIGEgc3ViRm9ybS5gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBpbmplY3RBdCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgaW5kZXggRm9ybUdyb3VwIHdpdGggJHt0eXBlb2YgaW5qZWN0QXR9YCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5qZWN0SW50by5nZXQoaW5qZWN0QXQpPy5kaXNhYmxlZCkge1xuXHRcdFx0XHR0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc291cmNlID0gaW5qZWN0SW50by5nZXQoaW5qZWN0QXQpO1xuXHRcdFx0Y29uc3QgdmFsdWVCZWZvcmVJbmplY3QgPSBzb3VyY2U/LnZhbHVlO1xuXHRcdFx0aWYgKGlzVmFsdWVTZXQodmFsdWVCZWZvcmVJbmplY3QpKSB7XG5cdFx0XHRcdHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHRcdH1cblx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpbmplY3RBdCwgdGhpcy50b3BMZXZlbEZvcm1Db250cm9sKTtcblx0XHRcdHRoaXMub25JbmplY3RlZC5lbWl0KHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHR9XG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cdFx0aWYgKHNpbXBsZUNoYW5nZXMucmVhZE9ubHk/LmN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5mb3JFYWNoKGUgPT4gZS5mb3JtQ29udHJvbC5kaXNhYmxlKCkpO1xuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZVNldChzaW1wbGVDaGFuZ2VzLndhcm5pbmdzPy5jdXJyZW50VmFsdWUpKSB7XG5cdFx0XHR0aGlzLnBhdGNoRm9ybVdhcm5pbmdzTWFwKCk7XG5cdFx0fVxuXHRcdGlmIChpc1ZhbHVlU2V0KHNpbXBsZUNoYW5nZXMuZXJyb3JzPy5jdXJyZW50VmFsdWUpKSB7XG5cdFx0XHR0aGlzLnBhdGNoRm9ybUVycm9yc01hcCgpO1xuXHRcdH1cblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMucGFyZW50KSAmJiBpc1ZhbHVlU2V0KHRoaXMuc3ViRm9ybURpcmVjdGl2ZSkpIHtcblx0XHRcdGNvbnN0IGluamVjdEludG8gPSB0aGlzLnN1YkZvcm1EaXJlY3RpdmUuaW5qZWN0SW50bztcblx0XHRcdGNvbnN0IGluamVjdEF0ID0gdGhpcy5zdWJGb3JtRGlyZWN0aXZlLmF0O1xuXHRcdFx0aWYgKGluamVjdEludG8gaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG5cdFx0XHRcdGNvbnN0IGlkeCA9IGluamVjdEludG8uY29udHJvbHMuZmluZEluZGV4KGUgPT4gZSA9PT0gdGhpcy50b3BMZXZlbEZvcm1Db250cm9sKTtcblx0XHRcdFx0aW5qZWN0SW50by5yZW1vdmVBdChpZHgpO1xuXHRcdFx0fSBlbHNlIGlmIChpbmplY3RJbnRvIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGluamVjdEF0ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2Fubm90IGluZGV4IEZvcm1Hcm91cCB3aXRoICR7dHlwZW9mIGluamVjdEF0fWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpbmplY3RBdCwgbmV3IEZvcm1Db250cm9sKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcGF0Y2hGb3JtV2FybmluZ3NNYXAoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2V0Rm4gPSB0aGlzLndhcm5pbmdzLnNldDtcblx0XHR0aGlzLndhcm5pbmdzLnNldCA9IChrZXk6IEFic3RyYWN0Q29udHJvbCwgdmFsdWU6IHN0cmluZyk6IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZz4gPT4ge1xuXHRcdFx0Y29uc3QgcHJldlZhbCA9IHRoaXMud2FybmluZ3MuZ2V0KGtleSk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBzZXRGbi5jYWxsKHRoaXMud2FybmluZ3MsIGtleSwgdmFsdWUpO1xuXHRcdFx0aWYgKHByZXZWYWwgIT09IHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGRlbGV0ZUZuID0gdGhpcy53YXJuaW5ncy5kZWxldGU7XG5cdFx0dGhpcy53YXJuaW5ncy5kZWxldGUgPSAoa2V5OiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuID0+IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGRlbGV0ZUZuLmNhbGwodGhpcy53YXJuaW5ncywga2V5KTtcblx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgcGF0Y2hGb3JtRXJyb3JzTWFwKCk6IHZvaWQge1xuXHRcdGNvbnN0IHNldEZuID0gdGhpcy5lcnJvcnMuc2V0O1xuXHRcdHRoaXMuZXJyb3JzLnNldCA9IChrZXk6IEFic3RyYWN0Q29udHJvbCwgdmFsdWU6IHN0cmluZyk6IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZz4gPT4ge1xuXHRcdFx0Y29uc3QgcHJldlZhbCA9IHRoaXMuZXJyb3JzLmdldChrZXkpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gc2V0Rm4uY2FsbCh0aGlzLmVycm9ycywga2V5LCB2YWx1ZSk7XG5cdFx0XHRrZXkuc2V0RXJyb3JzKHsgLi4ua2V5LmVycm9ycywgZm9ybUxldmVsOiB2YWx1ZX0pO1xuXHRcdFx0aWYgKHByZXZWYWwgIT09IHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGRlbGV0ZUZuID0gdGhpcy5lcnJvcnMuZGVsZXRlO1xuXHRcdHRoaXMuZXJyb3JzLmRlbGV0ZSA9IChrZXk6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0Y29uc3QgbmV3RXJyb3JzT2JqZWN0ID0ga2V5LmVycm9ycztcblx0XHRcdGRlbGV0ZSBuZXdFcnJvcnNPYmplY3QuZm9ybUxldmVsO1xuXHRcdFx0a2V5LnNldEVycm9ycyhuZXdFcnJvcnNPYmplY3QpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gZGVsZXRlRm4uY2FsbCh0aGlzLmVycm9ycywga2V5KTtcblx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgYWRkU3VwcG9ydEZvclBhdGNoVmFsdWVJbnRlcmNlcHRvcigpOiB2b2lkIHtcblx0XHRjb25zdCBmbiA9IHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbC5wYXRjaFZhbHVlO1xuXHRcdGNvbnN0IG5ld0ZuID0gKFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0W2tleTogc3RyaW5nXTogYW55O1xuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRcdG9ubHlTZWxmPzogYm9vbGVhbjtcblx0XHRcdFx0ZW1pdEV2ZW50PzogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMucGF0Y2hWYWx1ZUludGVyY2VwdG9yKHZhbHVlKS50aGVuKCh2YWwpID0+IHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0Zm4uY2FsbCh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wsIHZhbCwgb3B0aW9ucyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHR0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSA9IG5ld0ZuO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sLCBmb3JtRWxlbWVudDogRm9ybUVsZW1lbnRDb21wb25lbnQpOiAoKSA9PiBhbnkge1xuXHRcdHRoaXMuYWN0aXZlQ29udHJvbHMucHVzaCh7Zm9ybUNvbnRyb2wsIGZvcm1FbGVtZW50fSk7XG5cdFx0bGV0IHBhcmVudEltbXV0YWJsZVZhbHVlRm46ICgpID0+IGFueTtcblx0XHRpZiAodGhpcy5wYXJlbnQpIHtcblx0XHRcdHBhcmVudEltbXV0YWJsZVZhbHVlRm4gPSB0aGlzLnBhcmVudC5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2wsIGZvcm1FbGVtZW50KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHRcdGZvcm1Db250cm9sLmRpc2FibGUoKTtcblx0XHR9XG5cblx0XHRjb25zdCBlbmFibGVGbjogKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSA9PiB2b2lkID0gZm9ybUNvbnRyb2wuZW5hYmxlO1xuXHRcdGZvcm1Db250cm9sLmVuYWJsZSA9IChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHRcdGVuYWJsZUZuLmNhbGwoZm9ybUNvbnRyb2wsIG9wdHMpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBnZXRJbW11dGFibGVWYWx1ZUZuID0gKCk6IGFueSA9PiB7XG5cdFx0XHRjb25zdCBwYXRoID0gdGhpcy5nZXRQYXRoRnJvbVBhcmVudFRvQ29udHJvbChmb3JtQ29udHJvbCk7XG5cdFx0XHRjb25zdCBpbW11dGFibGVWYWx1ZSA9IHRoaXMuZ2V0SW1tdXRhYmxlVmFsdWVGcm9tUGF0aChwYXRoKTtcblx0XHRcdGNvbnN0IGltbXV0YWJsZVZhbHVlRnJvbVBhcmVudCA9IHBhcmVudEltbXV0YWJsZVZhbHVlRm4/LigpO1xuXHRcdFx0cmV0dXJuIGNsb25lRGVlcChpbW11dGFibGVWYWx1ZSAhPT0gdW5kZWZpbmVkICA/ICBpbW11dGFibGVWYWx1ZSA6IGltbXV0YWJsZVZhbHVlRnJvbVBhcmVudCk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IHNldFZhbHVlRm46ICh2YWx1ZTogdW5rbm93biwgb3B0aW9ucz86IHtcblx0XHRcdG9ubHlTZWxmPzogYm9vbGVhbjtcblx0XHRcdGVtaXRFdmVudD86IGJvb2xlYW47XG5cdFx0XHRlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U/OiBib29sZWFuO1xuXHRcdFx0ZW1pdFZpZXdUb01vZGVsQ2hhbmdlPzogYm9vbGVhbjtcblx0XHR9KSA9PiB2b2lkID0gZm9ybUNvbnRyb2wuc2V0VmFsdWU7XG5cdFx0Zm9ybUNvbnRyb2wuc2V0VmFsdWUgPSAodmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiB7XG5cdFx0XHRvbmx5U2VsZj86IGJvb2xlYW47XG5cdFx0XHRlbWl0RXZlbnQ/OiBib29sZWFuO1xuXHRcdFx0ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlPzogYm9vbGVhbjtcblx0XHRcdGVtaXRWaWV3VG9Nb2RlbENoYW5nZT86IGJvb2xlYW47XG5cdFx0fSkgPT4ge1xuXHRcdFx0Y29uc3QgaW1tdXRhYmxlVmFsdWUgPSBnZXRJbW11dGFibGVWYWx1ZUZuKCk7XG5cdFx0XHRpZiAoaW1tdXRhYmxlVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zPy5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UgIT09IHRydWUpIHtcblx0XHRcdFx0aWYgKCFpc1ZhbHVlU2V0KG9wdGlvbnMpKSB7XG5cdFx0XHRcdFx0b3B0aW9ucyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9wdGlvbnMuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHNldFZhbHVlRm4uY2FsbChmb3JtQ29udHJvbCwgaW1tdXRhYmxlVmFsdWUgIT09IHVuZGVmaW5lZCA/IGltbXV0YWJsZVZhbHVlIDogdmFsdWUsIG9wdGlvbnMpO1xuXHRcdH07XG5cblx0XHRjb25zdCBpbW11dGFibGVWYWx1ZSA9IGdldEltbXV0YWJsZVZhbHVlRm4oKTtcblx0XHRpZiAoaW1tdXRhYmxlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9ybUNvbnRyb2wuc2V0VmFsdWUoaW1tdXRhYmxlVmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBnZXRJbW11dGFibGVWYWx1ZUZuO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRQYXRoRnJvbVBhcmVudFRvQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBBcnJheTxzdHJpbmc+IHtcblx0XHRjb25zdCBwYXRoID0gW107XG5cdFx0bGV0IGN1cnJlbnRDb250cm9sID0gY29udHJvbDtcblx0XHR3aGlsZSAoY3VycmVudENvbnRyb2wucGFyZW50KSB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBjdXJyZW50Q29udHJvbC5wYXJlbnQ7XG5cdFx0XHRpZiAocGFyZW50IGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IE9iamVjdC5lbnRyaWVzKHBhcmVudC5jb250cm9scykuZmluZCgoW2tleSwgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gY3VycmVudENvbnRyb2wpWzBdO1xuXHRcdFx0XHRwYXRoLnB1c2goa2V5KTtcblx0XHRcdH0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG5cdFx0XHRcdGNvbnN0IGlkeCA9IHBhcmVudC5jb250cm9scy5maW5kSW5kZXgoZSA9PiBlID09PSBjdXJyZW50Q29udHJvbCk7XG5cdFx0XHRcdHBhdGgucHVzaChpZHgpO1xuXHRcdFx0fVxuXHRcdFx0Y3VycmVudENvbnRyb2wgPSBwYXJlbnQ7XG5cdFx0fVxuXHRcdHJldHVybiBwYXRoLnJldmVyc2UoKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0SW1tdXRhYmxlVmFsdWVGcm9tUGF0aChwYXRoOiBBcnJheTxzdHJpbmc+KTogYW55IHtcblx0XHRsZXQgY3VycmVudCA9IHRoaXMuaW1tdXRhYmxlVmFsdWVzO1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIHBhdGgpIHtcblx0XHRcdGlmICghaXNWYWx1ZVNldChjdXJyZW50Py5ba2V5XSkpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBjdXJyZW50O1xuXHR9XG5cblx0cHVibGljIHVucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiB2b2lkIHtcblx0XHR0aGlzLmFjdGl2ZUNvbnRyb2xzID0gdGhpcy5hY3RpdmVDb250cm9scy5maWx0ZXIoKGUpID0+IGUuZm9ybUNvbnRyb2wgIT09IGZvcm1Db250cm9sKTtcblx0XHRpZiAodGhpcy5wYXJlbnQpIHtcblx0XHRcdHRoaXMucGFyZW50LnVucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFkZEZvcm1Hcm91cENvbnRyb2xzKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCwgcmVzdWx0OiBBcnJheTxVbnR5cGVkRm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0T2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUdyb3VwQ29udHJvbHModmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1BcnJheUNvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQ29udHJvbCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Db250cm9sKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRGb3JtQXJyYXlDb250cm9scyhmb3JtQXJyYXk6IFVudHlwZWRGb3JtQXJyYXksIHJlc3VsdDogQXJyYXk8VW50eXBlZEZvcm1Db250cm9sPik6IHZvaWQge1xuXHRcdGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Hcm91cENvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQXJyYXlDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQ29udHJvbCh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0QWxsRm9ybUNvbnRyb2xzKCk6IEFycmF5PFVudHlwZWRGb3JtQ29udHJvbD4ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRcdGlmICh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdHRoaXMuYWRkRm9ybUdyb3VwQ29udHJvbHModGhpcy50b3BMZXZlbEZvcm1Db250cm9sLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy50b3BMZXZlbEZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG5cdFx0XHR0aGlzLmFkZEZvcm1BcnJheUNvbnRyb2xzKHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbCwgcmVzdWx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUNvbnRyb2woY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sLCByZXN1bHQ6IEFycmF5PFVudHlwZWRGb3JtQ29udHJvbD4pOiB2b2lkIHtcblx0XHRyZXN1bHQucHVzaChjb250cm9sKTtcblx0fVxuXG5cdHByaXZhdGUgZGlzYWJsZUluYWN0aXZlRm9ybUNvbnRyb2woY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmFjdGl2ZUNvbnRyb2xzLnNvbWUoKGUpID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpKSB7XG5cdFx0XHRjb250cm9sLmRpc2FibGUoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IEZvcm1FbGVtZW50Q29tcG9uZW50IHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmVDb250cm9scy5maW5kKChlKSA9PiBlLmZvcm1Db250cm9sID09PSBjb250cm9sKT8uZm9ybUVsZW1lbnQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0V2FybmluZ1RvU2hvdyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy53YXJuaW5ncy5nZXQoY29udHJvbCk7XG5cdH1cblxuXHRwdWJsaWMgdHJ5U3VibWl0KCk6IFByb21pc2U8YW55PiB7XG5cdFx0dGhpcy50b3BMZXZlbEZvcm1Db250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKTtcblx0XHRjb25zdCBhbGxDb250cm9sczogQXJyYXk8VW50eXBlZEZvcm1Db250cm9sPiA9IHRoaXMuZ2V0QWxsRm9ybUNvbnRyb2xzKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxEaXNhYmxlZFN0YXRlcyA9IGFsbENvbnRyb2xzLm1hcChlID0+IHtcblx0XHRcdHJldHVybiB7Y29udHJvbDogZSwgZGlzYWJsZWQ6IGUuZGlzYWJsZWR9O1xuXHRcdH0pO1xuXHRcdGFsbENvbnRyb2xzLmZvckVhY2goZSA9PiB0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGUpKTtcblx0XHRhbGxDb250cm9scy5mb3JFYWNoKGUgPT4gZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCkpO1xuXHRcdGNvbnN0IGZvcm1Hcm91cFZhbHVlID0gdGhpcy50b3BMZXZlbEZvcm1Db250cm9sLnZhbHVlO1xuXHRcdGlmICh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdGNvbnN0IHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlcyA9IHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cCh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wsIHRydWUpO1xuXHRcdFx0Y29uc3QgcmVuZGVyZWRCdXREaXNhYmxlZFZhbHVlcyA9IHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cCh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wsIGZhbHNlKTtcblxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbC5wZW5kaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3ViID0gdGhpcy50b3BMZXZlbEZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0XHRcdGlmIChyZXMgIT09ICdQRU5ESU5HJykge1xuXHRcdFx0XHRcdFx0XHRzdWIudW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVTdWJtaXNzaW9uKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMsIHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlcywgcmVuZGVyZWRCdXREaXNhYmxlZFZhbHVlcywgZm9ybUdyb3VwVmFsdWUpXG5cdFx0XHRcdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuaGFuZGxlU3VibWlzc2lvbihvcmlnaW5hbERpc2FibGVkU3RhdGVzLCByZW5kZXJlZEFuZEVuYWJsZWRWYWx1ZXMsIHJlbmRlcmVkQnV0RGlzYWJsZWRWYWx1ZXMsIGZvcm1Hcm91cFZhbHVlKVxuXHRcdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1N1Ym1pdHRpbmcgYSBGb3JtQXJyYXkgYXMgdG9wTGV2ZWwgbm90IHN1cHBvcnRlZCAoeWV0KS4gV3JhcCBpdCBpbiBhIEZvcm1Hcm91cC4nKTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlU3VibWlzc2lvbihcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEZvcm1Db250cm9sPGFueT47IGRpc2FibGVkOiBib29sZWFuIH0+LFxuXHRcdHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlczogUmVjb3JkPGFueSwgYW55Pixcblx0XHRyZW5kZXJlZEJ1dERpc2FibGVkVmFsdWVzOiBSZWNvcmQ8YW55LCBhbnk+LFxuXHRcdGZvcm1Hcm91cFZhbHVlKTogUHJvbWlzZTxhbnk+XG5cdHtcblx0XHRpZiAodGhpcy50b3BMZXZlbEZvcm1Db250cm9sLmludmFsaWQpIHtcblx0XHRcdHRoaXMuYWN0aXZlQ29udHJvbHMuZmluZCgoZSkgPT4gZS5mb3JtQ29udHJvbC5pbnZhbGlkKT8uZm9ybUVsZW1lbnQ/LnNjcm9sbFRvKCk7XG5cdFx0XHR0aGlzLnNldERpc2FibGVkU3RhdGVzRm9yQWxsQ29udHJvbHMob3JpZ2luYWxEaXNhYmxlZFN0YXRlcyk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoaW52YWxpZEZpZWxkc1N5bWJvbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzKTtcblx0XHRcdGNvbnN0IHJlbmRlcmVkVmFsdWVzID0gZGVlcE1lcmdlKHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlcywgcmVuZGVyZWRCdXREaXNhYmxlZFZhbHVlcyk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtmb3JtR3JvdXBWYWx1ZSwgcmVuZGVyZWRWYWx1ZXNdKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtR3JvdXAoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGVuYWJsZWQ6IGJvb2xlYW4sIHZhbHVlT2JqZWN0ID0ge30pOiBvYmplY3Qge1xuXHRcdE9iamVjdC5lbnRyaWVzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgoW25hbWUsIGNvbnRyb2xdKSA9PiB7XG5cdFx0XHRpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sICYmIGNvbnRyb2wuZW5hYmxlZCA9PT0gZW5hYmxlZCAmJiB0aGlzLmFjdGl2ZUNvbnRyb2xzLnNvbWUoZSA9PiBlLmZvcm1Db250cm9sID09PSBjb250cm9sKSkge1xuXHRcdFx0XHR2YWx1ZU9iamVjdFtuYW1lXSA9IGNvbnRyb2wudmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcblx0XHRcdFx0dmFsdWVPYmplY3RbbmFtZV0gPSBbXTtcblx0XHRcdFx0dGhpcy5nZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUFycmF5KGNvbnRyb2wsIGVuYWJsZWQsIHZhbHVlT2JqZWN0W25hbWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuXHRcdFx0XHR2YWx1ZU9iamVjdFtuYW1lXSA9IHt9O1xuXHRcdFx0XHR0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtR3JvdXAoY29udHJvbCwgZW5hYmxlZCwgdmFsdWVPYmplY3RbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB2YWx1ZU9iamVjdDtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSwgZW5hYmxlZDogYm9vbGVhbiwgdmFsdWVBcnJheTogQXJyYXk8YW55Pik6IHZvaWQge1xuXHRcdGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcblx0XHRcdGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgJiYgY29udHJvbC5lbmFibGVkID09PSBlbmFibGVkICYmIHRoaXMuYWN0aXZlQ29udHJvbHMuc29tZShlID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpKSB7XG5cdFx0XHRcdHZhbHVlQXJyYXkucHVzaChjb250cm9sLnZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHRjb25zdCBuZXdBcnJheSA9IFtdO1xuXHRcdFx0XHR2YWx1ZUFycmF5LnB1c2gobmV3QXJyYXkpO1xuXHRcdFx0XHR0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtQXJyYXkoY29udHJvbCwgZW5hYmxlZCwgbmV3QXJyYXkpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHRcdGNvbnN0IG5ld09iamVjdCA9IHt9O1xuXHRcdFx0XHR2YWx1ZUFycmF5LnB1c2gobmV3T2JqZWN0KTtcblx0XHRcdFx0dGhpcy5nZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUdyb3VwKGNvbnRyb2wsIGVuYWJsZWQsIG5ld09iamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgX2V4dF9nZXRSZW5kZXJlZEZpZWxkVmFsdWVzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuXHRcdGlmICh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdGNvbnN0IHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlcyA9IHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cCh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wsIHRydWUpO1xuXHRcdFx0Y29uc3QgcmVuZGVyZWRCdXREaXNhYmxlZFZhbHVlcyA9IHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cCh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wsIGZhbHNlKTtcblx0XHRcdGNvbnN0IGFsbFJlbmRlcmVkVmFsdWVzID0gZGVlcE1lcmdlKHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlcywgcmVuZGVyZWRCdXREaXNhYmxlZFZhbHVlcyk7XG5cdFx0XHRyZXR1cm4gYWxsUmVuZGVyZWRWYWx1ZXM7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBFcnJvcignR2V0dGluZyB2YWx1ZXMgZnJvbSBhIEZvcm1BcnJheSBhcyB0b3BMZXZlbCBpcyBub3Qgc3VwcG9ydGVkICh5ZXQpLicpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXM6IEFycmF5PHsgY29udHJvbDogQWJzdHJhY3RDb250cm9sOyBkaXNhYmxlZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMuZm9yRWFjaCgoZSkgPT4ge1xuXHRcdFx0aWYgKGUuZGlzYWJsZWQpIHtcblx0XHRcdFx0ZS5jb250cm9sLmRpc2FibGUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGUuY29udHJvbC5lbmFibGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiPGZvcm0+XG5cdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZm9ybT5cblxuXG4iXX0=
@@ -1,22 +0,0 @@
1
- // material.module.ts
2
- import { NgModule } from '@angular/core';
3
- import { MatDatepickerModule } from '@angular/material/datepicker';
4
- import { MatFormFieldModule } from '@angular/material/form-field';
5
- import { MatNativeDateModule } from '@angular/material/core';
6
- import { MatInputModule } from '@angular/material/input';
7
- import { MatButtonModule } from '@angular/material/button';
8
- import * as i0 from "@angular/core";
9
- export class MaterialModule {
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: MaterialModule, imports: [MatDatepickerModule, MatFormFieldModule, MatNativeDateModule, MatInputModule, MatButtonModule], exports: [MatDatepickerModule, MatFormFieldModule, MatNativeDateModule, MatInputModule, MatButtonModule] }); }
12
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: MaterialModule, providers: [MatDatepickerModule], imports: [MatDatepickerModule, MatFormFieldModule, MatNativeDateModule, MatInputModule, MatButtonModule, MatDatepickerModule, MatFormFieldModule, MatNativeDateModule, MatInputModule, MatButtonModule] }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: MaterialModule, decorators: [{
15
- type: NgModule,
16
- args: [{
17
- imports: [MatDatepickerModule, MatFormFieldModule, MatNativeDateModule, MatInputModule, MatButtonModule],
18
- exports: [MatDatepickerModule, MatFormFieldModule, MatNativeDateModule, MatInputModule, MatButtonModule],
19
- providers: [MatDatepickerModule],
20
- }]
21
- }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvbWF0ZXJpYWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFxQjtBQUVyQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBTzNELE1BQU0sT0FBTyxjQUFjOzhHQUFkLGNBQWM7K0dBQWQsY0FBYyxZQUpoQixtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsZUFBZSxhQUM3RixtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsZUFBZTsrR0FHM0YsY0FBYyxhQUZmLENBQUMsbUJBQW1CLENBQUMsWUFGdEIsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFDN0YsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGVBQWU7OzJGQUczRixjQUFjO2tCQUwxQixRQUFRO21CQUFDO29CQUNULE9BQU8sRUFBRSxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUM7b0JBQ3hHLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUM7b0JBQ3hHLFNBQVMsRUFBRSxDQUFDLG1CQUFtQixDQUFDO2lCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG1hdGVyaWFsLm1vZHVsZS50c1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cbkBOZ01vZHVsZSh7XG5cdGltcG9ydHM6IFtNYXREYXRlcGlja2VyTW9kdWxlLCBNYXRGb3JtRmllbGRNb2R1bGUsIE1hdE5hdGl2ZURhdGVNb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRCdXR0b25Nb2R1bGVdLFxuXHRleHBvcnRzOiBbTWF0RGF0ZXBpY2tlck1vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXROYXRpdmVEYXRlTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlXSxcblx0cHJvdmlkZXJzOiBbTWF0RGF0ZXBpY2tlck1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsTW9kdWxlIHt9XG4iXX0=