@dynamic-field-kit/angular 1.2.10 → 1.3.3

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 (47) hide show
  1. package/README.md +63 -1
  2. package/angular.json +27 -0
  3. package/dist/README.md +63 -1
  4. package/dist/components/BaseInput.d.ts +23 -5
  5. package/dist/components/DynamicInput.d.ts +13 -6
  6. package/dist/components/FieldInput.d.ts +10 -6
  7. package/dist/components/MultiFieldInput.d.ts +20 -3
  8. package/dist/esm2022/components/BaseInput.mjs +11 -3
  9. package/dist/esm2022/components/DynamicInput.mjs +112 -83
  10. package/dist/esm2022/components/FieldInput.mjs +25 -16
  11. package/dist/esm2022/components/MultiFieldInput.mjs +207 -28
  12. package/dist/esm2022/layout/defaultLayouts.mjs +70 -23
  13. package/dist/esm2022/layout/index.mjs +2 -1
  14. package/dist/esm2022/layout/layoutRegistry.mjs +14 -0
  15. package/dist/esm2022/public-api.mjs +1 -1
  16. package/dist/esm2022/types/layout.mjs +1 -1
  17. package/dist/fesm2022/dynamic-field-kit-angular.mjs +430 -146
  18. package/dist/fesm2022/dynamic-field-kit-angular.mjs.map +1 -1
  19. package/dist/layout/defaultLayouts.d.ts +21 -3
  20. package/dist/layout/index.d.ts +1 -0
  21. package/dist/layout/layoutRegistry.d.ts +12 -0
  22. package/dist/public-api.d.ts +1 -1
  23. package/dist/types/layout.d.ts +25 -1
  24. package/karma.conf.js +37 -0
  25. package/package.json +18 -5
  26. package/src/components/BaseInput.ts +34 -5
  27. package/src/components/DynamicInput.ts +142 -106
  28. package/src/components/FieldInput.ts +30 -12
  29. package/src/components/MultiFieldInput.ts +181 -18
  30. package/src/layout/defaultLayouts.ts +42 -10
  31. package/src/layout/index.ts +1 -0
  32. package/src/layout/layoutRegistry.ts +25 -0
  33. package/src/public-api.ts +1 -1
  34. package/src/types/layout.ts +36 -1
  35. package/test/DynamicInput.spec.ts +30 -0
  36. package/test/FieldInput.spec.ts +44 -0
  37. package/test/angular.spec.ts +102 -0
  38. package/test/integration.spec.ts +57 -0
  39. package/test/layouts.spec.ts +26 -0
  40. package/test.ts +12 -0
  41. package/tsconfig.spec.json +21 -0
  42. package/src/adapters/tailwind.ts +0 -13
  43. package/src/components/imports.ts +0 -3
  44. package/src/examples/index.ts +0 -4
  45. package/src/examples/registerExample.ts +0 -7
  46. package/src/examples/text-field.component.ts +0 -18
  47. package/src/types.ts +0 -1
@@ -1,31 +1,40 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { Component, Input, Output, EventEmitter, ViewChild, ViewContainerRef, SimpleChange, } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef, } from '@angular/core';
3
3
  import { fieldRegistry } from '@dynamic-field-kit/core';
4
4
  import { BaseInputComponent } from './BaseInput';
5
5
  import * as i0 from "@angular/core";
6
+ const KNOWN_PROPS = [
7
+ 'value',
8
+ 'label',
9
+ 'placeholder',
10
+ 'required',
11
+ 'disabled',
12
+ 'options',
13
+ 'className',
14
+ 'description',
15
+ 'errorMessage',
16
+ 'acceptFile',
17
+ 'maxLength',
18
+ 'minNumber',
19
+ 'maxNumber',
20
+ ];
6
21
  export class DynamicInput extends BaseInputComponent {
7
22
  type;
8
23
  valueChange = new EventEmitter();
9
- onChange = new EventEmitter(); // backward compat
24
+ onChange = new EventEmitter();
10
25
  host;
11
26
  compRef;
12
27
  inputInstance;
13
28
  subscriptions = [];
14
29
  ngOnChanges(changes) {
30
+ super.ngOnChanges(changes);
31
+ if (this.inputInstance) {
32
+ this.syncPropsToInstance(changes);
33
+ }
15
34
  if (changes['type'] && !changes['type'].firstChange && this.host) {
16
35
  this.render();
17
- return;
18
- }
19
- if (this.inputInstance) {
20
- this.applyKnownProps(this.inputInstance);
21
- const childChanges = {};
22
- for (const prop in changes) {
23
- childChanges[prop] = new SimpleChange(changes[prop].previousValue, changes[prop].currentValue, changes[prop].firstChange);
24
- }
25
- this.inputInstance.ngOnChanges?.(childChanges);
26
- this.compRef?.changeDetectorRef.detectChanges();
27
36
  }
28
- else if (this.host) {
37
+ else if (!this.inputInstance && this.host) {
29
38
  this.render();
30
39
  }
31
40
  }
@@ -33,6 +42,20 @@ export class DynamicInput extends BaseInputComponent {
33
42
  this.render();
34
43
  }
35
44
  ngOnDestroy() {
45
+ this.cleanup();
46
+ }
47
+ syncPropsToInstance(changes) {
48
+ if (!this.inputInstance) {
49
+ return;
50
+ }
51
+ for (const prop of KNOWN_PROPS) {
52
+ if (changes[prop] && this.inputInstance) {
53
+ this.inputInstance[prop] = this[prop];
54
+ }
55
+ }
56
+ this.compRef?.changeDetectorRef?.detectChanges();
57
+ }
58
+ cleanup() {
36
59
  this.cleanupSubscriptions();
37
60
  this.cleanupRenderedComponent();
38
61
  }
@@ -40,106 +63,111 @@ export class DynamicInput extends BaseInputComponent {
40
63
  this.subscriptions.forEach((s) => s.unsubscribe());
41
64
  this.subscriptions = [];
42
65
  }
66
+ cleanupRenderedComponent() {
67
+ this.compRef?.destroy();
68
+ this.compRef = undefined;
69
+ this.inputInstance = undefined;
70
+ }
43
71
  render() {
44
72
  const Renderer = fieldRegistry.get(this.type);
45
- this.cleanupRenderedComponent();
46
- this.cleanupSubscriptions();
73
+ this.cleanup();
47
74
  this.host.clear();
48
75
  if (!Renderer) {
49
- const el = document.createElement('div');
50
- el.textContent = `Unknown field type: ${this.type}`;
51
- this.host.element.nativeElement.appendChild(el);
76
+ this.renderError(`Unknown field type: ${this.type}`);
52
77
  return;
53
78
  }
79
+ if (this.isComponentType(Renderer)) {
80
+ this.renderComponent(Renderer);
81
+ }
82
+ else if (typeof Renderer === 'function') {
83
+ this.renderFallback(Renderer);
84
+ }
85
+ else {
86
+ this.renderError(`Invalid renderer for type: ${this.type}`);
87
+ }
88
+ }
89
+ isComponentType(renderer) {
90
+ return (typeof renderer === 'object' && renderer !== null && 'cmp' in renderer);
91
+ }
92
+ renderComponent(compType) {
54
93
  try {
55
- const compType = Renderer;
56
94
  const compRef = this.host.createComponent(compType);
57
95
  const instance = compRef.instance;
58
96
  if (!instance) {
59
- throw new Error(`Failed to create instance for ${this.type}`);
60
- }
61
- this.applyKnownProps(instance);
62
- const subA = this.bindOutput(instance, 'valueChange');
63
- if (subA) {
64
- this.subscriptions.push(subA);
97
+ this.renderError(`Failed to create instance for ${this.type}`);
98
+ return;
65
99
  }
66
- const subB = this.bindOutput(instance, 'onValueChange');
67
- if (subB) {
68
- this.subscriptions.push(subB);
69
- }
70
- instance.changeDetectorRef?.detectChanges();
100
+ this.applyProps(instance);
101
+ this.bindOutputs(instance);
71
102
  this.compRef = compRef;
72
103
  this.inputInstance = instance;
73
104
  compRef.changeDetectorRef.detectChanges();
74
105
  }
75
- catch (err) {
76
- // Fallback to function renderer
77
- try {
78
- const props = {
79
- value: this.value,
80
- onValueChange: (v) => this.emitValue(v),
81
- label: this.label,
82
- placeholder: this.placeholder,
83
- required: this.required,
84
- options: this.options,
85
- className: this.className,
86
- description: this.description,
87
- disabled: this.disabled,
88
- errorMessage: this.errorMessage,
89
- };
90
- const out = Renderer(props);
91
- if (typeof out === 'string') {
92
- const el = document.createElement('div');
93
- el.innerHTML = out;
94
- this.host.element.nativeElement.appendChild(el);
95
- }
96
- }
97
- catch (e) {
106
+ catch {
107
+ this.renderError(`Failed to render field: ${this.type}`);
108
+ }
109
+ }
110
+ renderFallback(renderer) {
111
+ try {
112
+ const props = this.getFallbackProps();
113
+ const result = renderer(props);
114
+ if (typeof result === 'string') {
98
115
  const el = document.createElement('div');
99
- el.textContent = `Failed to render field: ${this.type}`;
116
+ el.innerHTML = result;
100
117
  this.host.element.nativeElement.appendChild(el);
101
118
  }
102
119
  }
120
+ catch {
121
+ this.renderError(`Failed to render field: ${this.type}`);
122
+ }
103
123
  }
104
- applyKnownProps(instance) {
105
- const knownProps = [
106
- 'value',
107
- 'label',
108
- 'placeholder',
109
- 'required',
110
- 'disabled',
111
- 'options',
112
- 'className',
113
- 'description',
114
- 'errorMessage',
115
- ];
116
- for (const prop of knownProps) {
117
- if (prop in this && prop in instance) {
118
- instance[prop] = this[prop];
124
+ getFallbackProps() {
125
+ return {
126
+ value: this.value,
127
+ onValueChange: (v) => this.emitValue(v),
128
+ label: this.label ?? '',
129
+ placeholder: this.placeholder ?? '',
130
+ required: this.required ?? false,
131
+ options: this.options ?? [],
132
+ className: this.className ?? '',
133
+ description: this.description ?? '',
134
+ disabled: this.disabled ?? false,
135
+ errorMessage: this.errorMessage ?? '',
136
+ };
137
+ }
138
+ applyProps(instance) {
139
+ const instanceObj = instance;
140
+ for (const prop of KNOWN_PROPS) {
141
+ if (prop in this && prop in instanceObj) {
142
+ instanceObj[prop] = this[prop];
119
143
  }
120
144
  }
121
145
  }
122
- bindOutput(instance, outputName) {
123
- const output = instance?.[outputName];
124
- if (!output || typeof output.subscribe !== 'function') {
125
- return;
146
+ bindOutputs(instance) {
147
+ const outputNames = [
148
+ 'valueChange',
149
+ 'onValueChange',
150
+ ];
151
+ for (const outputName of outputNames) {
152
+ const output = instance[outputName];
153
+ if (output && typeof output === 'object' && 'subscribe' in output) {
154
+ const sub = output.subscribe((value) => this.emitValue(value));
155
+ this.subscriptions.push(sub);
156
+ }
126
157
  }
127
- const sub = output.subscribe((value) => {
128
- this.emitValue(value);
129
- });
130
- return sub;
131
158
  }
132
159
  emitValue(value) {
133
160
  this.valueChange.emit(value);
134
161
  this.onChange.emit(value);
135
162
  }
136
- cleanupRenderedComponent() {
137
- this.compRef?.destroy();
138
- this.compRef = undefined;
139
- this.inputInstance = undefined;
163
+ renderError(message) {
164
+ const el = document.createElement('div');
165
+ el.textContent = message;
166
+ el.style.color = 'red';
167
+ this.host.element.nativeElement.appendChild(el);
140
168
  }
141
169
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: DynamicInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
142
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: DynamicInput, isStandalone: true, selector: "dfk-dynamic-input", inputs: { type: "type" }, outputs: { valueChange: "valueChange", onChange: "onChange" }, viewQueries: [{ propertyName: "host", first: true, predicate: ["host"], descendants: true, read: ViewContainerRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `<div #host style="display: contents;"></div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
170
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: DynamicInput, isStandalone: true, selector: "dfk-dynamic-input", inputs: { type: "type" }, outputs: { valueChange: "valueChange", onChange: "onChange" }, viewQueries: [{ propertyName: "host", first: true, predicate: ["host"], descendants: true, read: ViewContainerRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `<div #host style="display: contents;"></div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
143
171
  }
144
172
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: DynamicInput, decorators: [{
145
173
  type: Component,
@@ -147,6 +175,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
147
175
  selector: 'dfk-dynamic-input',
148
176
  standalone: true,
149
177
  imports: [CommonModule],
178
+ changeDetection: ChangeDetectionStrategy.OnPush,
150
179
  template: `<div #host style="display: contents;"></div>`,
151
180
  }]
152
181
  }], propDecorators: { type: [{
@@ -159,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
159
188
  type: ViewChild,
160
189
  args: ['host', { read: ViewContainerRef, static: false }]
161
190
  }] } });
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY0lucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvRHluYW1pY0lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxnQkFBZ0IsRUFNaEIsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0seUJBQXlCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQVFqRCxNQUFNLE9BQU8sWUFDWCxTQUFRLGtCQUFrQjtJQUdqQixJQUFJLENBQWdCO0lBQ1YsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDL0MsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUMsQ0FBQyxrQkFBa0I7SUFHaEUsSUFBSSxDQUFvQjtJQUNoQixPQUFPLENBQXFCO0lBQzVCLGFBQWEsQ0FBTztJQUNwQixhQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUUzQyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXpDLE1BQU0sWUFBWSxHQUFrQixFQUFFLENBQUM7WUFDdkMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksWUFBWSxDQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxFQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUMxQixDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNsRCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxNQUFNO1FBQ1osTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBb0IsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxFQUFFLENBQUMsV0FBVyxHQUFHLHVCQUF1QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLFFBQWdDLENBQUM7WUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEUsQ0FBQztZQUVELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDdEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDeEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBRUQsUUFBUSxDQUFDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLGdDQUFnQztZQUNoQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLEdBQVE7b0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsYUFBYSxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDNUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO29CQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7aUJBQ2hDLENBQUM7Z0JBQ0YsTUFBTSxHQUFHLEdBQUksUUFBd0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDNUIsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDekMsRUFBRSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7b0JBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xELENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxFQUFFLENBQUMsV0FBVyxHQUFHLDJCQUEyQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQWE7UUFDbkMsTUFBTSxVQUFVLEdBQUc7WUFDakIsT0FBTztZQUNQLE9BQU87WUFDUCxhQUFhO1lBQ2IsVUFBVTtZQUNWLFVBQVU7WUFDVixTQUFTO1lBQ1QsV0FBVztZQUNYLGFBQWE7WUFDYixjQUFjO1NBQ2YsQ0FBQztRQUNGLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7WUFDOUIsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDckMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFJLElBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVLENBQ2hCLFFBQWEsRUFDYixVQUEyQztRQUUzQyxNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN0RCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFJLE1BQTRCLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUNqQyxDQUFDO3dHQWhLVSxZQUFZOzRGQUFaLFlBQVksK09BUUksZ0JBQWdCLHlFQVZqQyw4Q0FBOEMsMkRBRDlDLFlBQVk7OzRGQUdYLFlBQVk7a0JBTnhCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFLDhDQUE4QztpQkFDekQ7OEJBS1UsSUFBSTtzQkFBWixLQUFLO2dCQUNhLFdBQVc7c0JBQTdCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFHUCxJQUFJO3NCQURILFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBPbkNoYW5nZXMsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVHlwZSxcbiAgU2ltcGxlQ2hhbmdlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpZWxkUmVnaXN0cnksIEZpZWxkVHlwZUtleSB9IGZyb20gJ0BkeW5hbWljLWZpZWxkLWtpdC9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9CYXNlSW5wdXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZmstZHluYW1pYy1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYDxkaXYgI2hvc3Qgc3R5bGU9XCJkaXNwbGF5OiBjb250ZW50cztcIj48L2Rpdj5gLFxufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljSW5wdXRcbiAgZXh0ZW5kcyBCYXNlSW5wdXRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKSB0eXBlITogRmllbGRUeXBlS2V5O1xuICBAT3V0cHV0KCkgb3ZlcnJpZGUgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IC8vIGJhY2t3YXJkIGNvbXBhdFxuXG4gIEBWaWV3Q2hpbGQoJ2hvc3QnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgaG9zdCE6IFZpZXdDb250YWluZXJSZWY7XG4gIHByaXZhdGUgY29tcFJlZj86IENvbXBvbmVudFJlZjxhbnk+O1xuICBwcml2YXRlIGlucHV0SW5zdGFuY2U/OiBhbnk7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ3R5cGUnXSAmJiAhY2hhbmdlc1sndHlwZSddLmZpcnN0Q2hhbmdlICYmIHRoaXMuaG9zdCkge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbnB1dEluc3RhbmNlKSB7XG4gICAgICB0aGlzLmFwcGx5S25vd25Qcm9wcyh0aGlzLmlucHV0SW5zdGFuY2UpO1xuXG4gICAgICBjb25zdCBjaGlsZENoYW5nZXM6IFNpbXBsZUNoYW5nZXMgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBjaGFuZ2VzKSB7XG4gICAgICAgIGNoaWxkQ2hhbmdlc1twcm9wXSA9IG5ldyBTaW1wbGVDaGFuZ2UoXG4gICAgICAgICAgY2hhbmdlc1twcm9wXS5wcmV2aW91c1ZhbHVlLFxuICAgICAgICAgIGNoYW5nZXNbcHJvcF0uY3VycmVudFZhbHVlLFxuICAgICAgICAgIGNoYW5nZXNbcHJvcF0uZmlyc3RDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbnB1dEluc3RhbmNlLm5nT25DaGFuZ2VzPy4oY2hpbGRDaGFuZ2VzKTtcbiAgICAgIHRoaXMuY29tcFJlZj8uY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ob3N0KSB7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhbnVwU3Vic2NyaXB0aW9ucygpO1xuICAgIHRoaXMuY2xlYW51cFJlbmRlcmVkQ29tcG9uZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBTdWJzY3JpcHRpb25zKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXIoKSB7XG4gICAgY29uc3QgUmVuZGVyZXIgPSBmaWVsZFJlZ2lzdHJ5LmdldCh0aGlzLnR5cGUgYXMgRmllbGRUeXBlS2V5KTtcbiAgICB0aGlzLmNsZWFudXBSZW5kZXJlZENvbXBvbmVudCgpO1xuICAgIHRoaXMuY2xlYW51cFN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmhvc3QuY2xlYXIoKTtcbiAgICBpZiAoIVJlbmRlcmVyKSB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZWwudGV4dENvbnRlbnQgPSBgVW5rbm93biBmaWVsZCB0eXBlOiAke3RoaXMudHlwZX1gO1xuICAgICAgdGhpcy5ob3N0LmVsZW1lbnQubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbXBUeXBlID0gUmVuZGVyZXIgYXMgdW5rbm93biBhcyBUeXBlPGFueT47XG4gICAgICBjb25zdCBjb21wUmVmID0gdGhpcy5ob3N0LmNyZWF0ZUNvbXBvbmVudChjb21wVHlwZSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBSZWYuaW5zdGFuY2U7XG4gICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBpbnN0YW5jZSBmb3IgJHt0aGlzLnR5cGV9YCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXBwbHlLbm93blByb3BzKGluc3RhbmNlKTtcblxuICAgICAgY29uc3Qgc3ViQSA9IHRoaXMuYmluZE91dHB1dChpbnN0YW5jZSwgJ3ZhbHVlQ2hhbmdlJyk7XG4gICAgICBpZiAoc3ViQSkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJBKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YkIgPSB0aGlzLmJpbmRPdXRwdXQoaW5zdGFuY2UsICdvblZhbHVlQ2hhbmdlJyk7XG4gICAgICBpZiAoc3ViQikge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJCKTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UuY2hhbmdlRGV0ZWN0b3JSZWY/LmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuY29tcFJlZiA9IGNvbXBSZWY7XG4gICAgICB0aGlzLmlucHV0SW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgIGNvbXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gZnVuY3Rpb24gcmVuZGVyZXJcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBhbnkgPSB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgb25WYWx1ZUNoYW5nZTogKHY6IGFueSkgPT4gdGhpcy5lbWl0VmFsdWUodiksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubGFiZWwsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRoaXMucmVxdWlyZWQsXG4gICAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5jbGFzc05hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlOiB0aGlzLmVycm9yTWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3V0ID0gKFJlbmRlcmVyIGFzIChwcm9wczogdW5rbm93bikgPT4gdW5rbm93bikocHJvcHMpO1xuICAgICAgICBpZiAodHlwZW9mIG91dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIGVsLmlubmVySFRNTCA9IG91dDtcbiAgICAgICAgICB0aGlzLmhvc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBlbC50ZXh0Q29udGVudCA9IGBGYWlsZWQgdG8gcmVuZGVyIGZpZWxkOiAke3RoaXMudHlwZX1gO1xuICAgICAgICB0aGlzLmhvc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5S25vd25Qcm9wcyhpbnN0YW5jZTogYW55KSB7XG4gICAgY29uc3Qga25vd25Qcm9wcyA9IFtcbiAgICAgICd2YWx1ZScsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ3BsYWNlaG9sZGVyJyxcbiAgICAgICdyZXF1aXJlZCcsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgJ29wdGlvbnMnLFxuICAgICAgJ2NsYXNzTmFtZScsXG4gICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgJ2Vycm9yTWVzc2FnZScsXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2Yga25vd25Qcm9wcykge1xuICAgICAgaWYgKHByb3AgaW4gdGhpcyAmJiBwcm9wIGluIGluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlW3Byb3BdID0gKHRoaXMgYXMgYW55KVtwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJpbmRPdXRwdXQoXG4gICAgaW5zdGFuY2U6IGFueSxcbiAgICBvdXRwdXROYW1lOiAndmFsdWVDaGFuZ2UnIHwgJ29uVmFsdWVDaGFuZ2UnXG4gICk6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgb3V0cHV0ID0gaW5zdGFuY2U/LltvdXRwdXROYW1lXTtcbiAgICBpZiAoIW91dHB1dCB8fCB0eXBlb2Ygb3V0cHV0LnN1YnNjcmliZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YiA9IChvdXRwdXQgYXMgRXZlbnRFbWl0dGVyPGFueT4pLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuZW1pdFZhbHVlKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3ViO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cFJlbmRlcmVkQ29tcG9uZW50KCkge1xuICAgIHRoaXMuY29tcFJlZj8uZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcFJlZiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlucHV0SW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY0lucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvRHluYW1pY0lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0seUJBQXlCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUVqRCxNQUFNLFdBQVcsR0FBRztJQUNsQixPQUFPO0lBQ1AsT0FBTztJQUNQLGFBQWE7SUFDYixVQUFVO0lBQ1YsVUFBVTtJQUNWLFNBQVM7SUFDVCxXQUFXO0lBQ1gsYUFBYTtJQUNiLGNBQWM7SUFDZCxZQUFZO0lBQ1osV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0NBQ0gsQ0FBQztBQVNYLE1BQU0sT0FBTyxZQUNYLFNBQVEsa0JBQWtCO0lBR2pCLElBQUksQ0FBZ0I7SUFDVixXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUNuRCxRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUdqRCxJQUFJLENBQW9CO0lBQ2hCLE9BQU8sQ0FBeUI7SUFDaEMsYUFBYSxDQUFXO0lBQ3hCLGFBQWEsR0FBbUIsRUFBRSxDQUFDO0lBRTNDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMs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Q2EsV0FBVztzQkFBN0IsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUdQLElBQUk7c0JBREgsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWVsZFJlZ2lzdHJ5LCBGaWVsZFR5cGVLZXkgfSBmcm9tICdAZHluYW1pYy1maWVsZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vQmFzZUlucHV0JztcblxuY29uc3QgS05PV05fUFJPUFMgPSBbXG4gICd2YWx1ZScsXG4gICdsYWJlbCcsXG4gICdwbGFjZWhvbGRlcicsXG4gICdyZXF1aXJlZCcsXG4gICdkaXNhYmxlZCcsXG4gICdvcHRpb25zJyxcbiAgJ2NsYXNzTmFtZScsXG4gICdkZXNjcmlwdGlvbicsXG4gICdlcnJvck1lc3NhZ2UnLFxuICAnYWNjZXB0RmlsZScsXG4gICdtYXhMZW5ndGgnLFxuICAnbWluTnVtYmVyJyxcbiAgJ21heE51bWJlcicsXG5dIGFzIGNvbnN0O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZmstZHluYW1pYy1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGA8ZGl2ICNob3N0IHN0eWxlPVwiZGlzcGxheTogY29udGVudHM7XCI+PC9kaXY+YCxcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0lucHV0XG4gIGV4dGVuZHMgQmFzZUlucHV0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KCkgdHlwZSE6IEZpZWxkVHlwZUtleTtcbiAgQE91dHB1dCgpIG92ZXJyaWRlIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd24+KCk7XG5cbiAgQFZpZXdDaGlsZCgnaG9zdCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICBob3N0ITogVmlld0NvbnRhaW5lclJlZjtcbiAgcHJpdmF0ZSBjb21wUmVmPzogQ29tcG9uZW50UmVmPHVua25vd24+O1xuICBwcml2YXRlIGlucHV0SW5zdGFuY2U/OiB1bmtub3duO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuXG4gICAgaWYgKHRoaXMuaW5wdXRJbnN0YW5jZSkge1xuICAgICAgdGhpcy5zeW5jUHJvcHNUb0luc3RhbmNlKGNoYW5nZXMpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWyd0eXBlJ10gJiYgIWNoYW5nZXNbJ3R5cGUnXS5maXJzdENoYW5nZSAmJiB0aGlzLmhvc3QpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pbnB1dEluc3RhbmNlICYmIHRoaXMuaG9zdCkge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jUHJvcHNUb0luc3RhbmNlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBLTk9XTl9QUk9QUykge1xuICAgICAgaWYgKGNoYW5nZXNbcHJvcF0gJiYgdGhpcy5pbnB1dEluc3RhbmNlKSB7XG4gICAgICAgICh0aGlzLmlucHV0SW5zdGFuY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3Byb3BdID0gKFxuICAgICAgICAgIHRoaXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgKVtwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jb21wUmVmPy5jaGFuZ2VEZXRlY3RvclJlZj8uZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cFN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmNsZWFudXBSZW5kZXJlZENvbXBvbmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cFJlbmRlcmVkQ29tcG9uZW50KCk6IHZvaWQge1xuICAgIHRoaXMuY29tcFJlZj8uZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcFJlZiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlucHV0SW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBSZW5kZXJlciA9IGZpZWxkUmVnaXN0cnkuZ2V0KHRoaXMudHlwZSk7XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgdGhpcy5ob3N0LmNsZWFyKCk7XG5cbiAgICBpZiAoIVJlbmRlcmVyKSB7XG4gICAgICB0aGlzLnJlbmRlckVycm9yKGBVbmtub3duIGZpZWxkIHR5cGU6ICR7dGhpcy50eXBlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ29tcG9uZW50VHlwZShSZW5kZXJlcikpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50KFJlbmRlcmVyIGFzIHVua25vd24gYXMgVHlwZTx1bmtub3duPik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgUmVuZGVyZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMucmVuZGVyRmFsbGJhY2soUmVuZGVyZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlckVycm9yKGBJbnZhbGlkIHJlbmRlcmVyIGZvciB0eXBlOiAke3RoaXMudHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzQ29tcG9uZW50VHlwZShyZW5kZXJlcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgcmVuZGVyZXIgPT09ICdvYmplY3QnICYmIHJlbmRlcmVyICE9PSBudWxsICYmICdjbXAnIGluIHJlbmRlcmVyXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29tcG9uZW50KGNvbXBUeXBlOiBUeXBlPHVua25vd24+KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmhvc3QuY3JlYXRlQ29tcG9uZW50KGNvbXBUeXBlKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gY29tcFJlZi5pbnN0YW5jZTtcblxuICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICB0aGlzLnJlbmRlckVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGluc3RhbmNlIGZvciAke3RoaXMudHlwZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFwcGx5UHJvcHMoaW5zdGFuY2UpO1xuICAgICAgdGhpcy5iaW5kT3V0cHV0cyhpbnN0YW5jZSk7XG5cbiAgICAgIHRoaXMuY29tcFJlZiA9IGNvbXBSZWY7XG4gICAgICB0aGlzLmlucHV0SW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgIGNvbXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5yZW5kZXJFcnJvcihgRmFpbGVkIHRvIHJlbmRlciBmaWVsZDogJHt0aGlzLnR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJGYWxsYmFjayhyZW5kZXJlcjogdW5rbm93bik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0RmFsbGJhY2tQcm9wcygpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gKHJlbmRlcmVyIGFzIChwcm9wczogdW5rbm93bikgPT4gc3RyaW5nKShwcm9wcyk7XG5cbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBlbC5pbm5lckhUTUwgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuaG9zdC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5yZW5kZXJFcnJvcihgRmFpbGVkIHRvIHJlbmRlciBmaWVsZDogJHt0aGlzLnR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGYWxsYmFja1Byb3BzKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBvblZhbHVlQ2hhbmdlOiAodjogdW5rbm93bikgPT4gdGhpcy5lbWl0VmFsdWUodiksXG4gICAgICBsYWJlbDogdGhpcy5sYWJlbCA/PyAnJyxcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnBsYWNlaG9sZGVyID8/ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRoaXMucmVxdWlyZWQgPz8gZmFsc2UsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMgPz8gW10sXG4gICAgICBjbGFzc05hbWU6IHRoaXMuY2xhc3NOYW1lID8/ICcnLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24gPz8gJycsXG4gICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCA/PyBmYWxzZSxcbiAgICAgIGVycm9yTWVzc2FnZTogdGhpcy5lcnJvck1lc3NhZ2UgPz8gJycsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQcm9wcyhpbnN0YW5jZTogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGluc3RhbmNlT2JqID0gaW5zdGFuY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIEtOT1dOX1BST1BTKSB7XG4gICAgICBpZiAocHJvcCBpbiB0aGlzICYmIHByb3AgaW4gaW5zdGFuY2VPYmopIHtcbiAgICAgICAgaW5zdGFuY2VPYmpbcHJvcF0gPSAodGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbcHJvcF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBiaW5kT3V0cHV0cyhpbnN0YW5jZTogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dE5hbWVzOiBBcnJheTwndmFsdWVDaGFuZ2UnIHwgJ29uVmFsdWVDaGFuZ2UnPiA9IFtcbiAgICAgICd2YWx1ZUNoYW5nZScsXG4gICAgICAnb25WYWx1ZUNoYW5nZScsXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qgb3V0cHV0TmFtZSBvZiBvdXRwdXROYW1lcykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gKGluc3RhbmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtvdXRwdXROYW1lXTtcbiAgICAgIGlmIChvdXRwdXQgJiYgdHlwZW9mIG91dHB1dCA9PT0gJ29iamVjdCcgJiYgJ3N1YnNjcmliZScgaW4gb3V0cHV0KSB7XG4gICAgICAgIGNvbnN0IHN1YiA9IChcbiAgICAgICAgICBvdXRwdXQgYXMgeyBzdWJzY3JpYmU6IChjYjogKHY6IHVua25vd24pID0+IHZvaWQpID0+IFN1YnNjcmlwdGlvbiB9XG4gICAgICAgICkuc3Vic2NyaWJlKCh2YWx1ZTogdW5rbm93bikgPT4gdGhpcy5lbWl0VmFsdWUodmFsdWUpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3ViKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRXJyb3IobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbC50ZXh0Q29udGVudCA9IG1lc3NhZ2U7XG4gICAgZWwuc3R5bGUuY29sb3IgPSAncmVkJztcbiAgICB0aGlzLmhvc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgfVxufVxuIl19
@@ -1,31 +1,39 @@
1
1
  import { NgIf } from '@angular/common';
2
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
3
3
  import { DynamicInput } from './DynamicInput';
4
4
  import * as i0 from "@angular/core";
5
5
  export class FieldInput {
6
+ cdr;
6
7
  fieldDescription;
7
- renderInfos;
8
+ value;
8
9
  onValueChangeField = new EventEmitter();
10
+ shouldRender = false;
11
+ constructor(cdr) {
12
+ this.cdr = cdr;
13
+ }
14
+ ngOnChanges(_changes) {
15
+ this.shouldRender = !!this.fieldDescription;
16
+ this.cdr.markForCheck();
17
+ }
9
18
  getFieldValue() {
10
- if (!this.fieldDescription || !this.renderInfos) {
19
+ if (!this.fieldDescription) {
11
20
  return undefined;
12
21
  }
13
- const value = this.renderInfos[this.fieldDescription.name];
14
- if (value === undefined && this.fieldDescription.type === 'text') {
22
+ if (this.value === undefined && this.fieldDescription.type === 'text') {
15
23
  return '';
16
24
  }
17
- return value;
25
+ return this.value;
18
26
  }
19
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: FieldInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: FieldInput, isStandalone: true, selector: "dfk-field-input", inputs: { fieldDescription: "fieldDescription", renderInfos: "renderInfos" }, outputs: { onValueChangeField: "onValueChangeField" }, ngImport: i0, template: `
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: FieldInput, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
28
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: FieldInput, isStandalone: true, selector: "dfk-field-input", inputs: { fieldDescription: "fieldDescription", value: "value" }, outputs: { onValueChangeField: "onValueChangeField" }, usesOnChanges: true, ngImport: i0, template: `
21
29
  <dfk-dynamic-input
22
- *ngIf="fieldDescription && renderInfos"
30
+ *ngIf="shouldRender"
23
31
  [type]="fieldDescription!.type"
24
32
  [value]="getFieldValue()"
25
33
  [label]="fieldDescription!.label"
26
34
  [placeholder]="fieldDescription!.placeholder"
27
35
  [required]="fieldDescription!.required"
28
- [description]="fieldDescription!.description"
36
+ [description]="$any(fieldDescription!.description)"
29
37
  [options]="fieldDescription!.options"
30
38
  [className]="fieldDescription!.className"
31
39
  (valueChange)="
@@ -34,7 +42,7 @@ export class FieldInput {
34
42
  [disabled]="false"
35
43
  [errorMessage]="''"
36
44
  ></dfk-dynamic-input>
37
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DynamicInput, selector: "dfk-dynamic-input", inputs: ["type"], outputs: ["valueChange", "onChange"] }] });
45
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DynamicInput, selector: "dfk-dynamic-input", inputs: ["type"], outputs: ["valueChange", "onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
38
46
  }
39
47
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: FieldInput, decorators: [{
40
48
  type: Component,
@@ -42,15 +50,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
42
50
  selector: 'dfk-field-input',
43
51
  standalone: true,
44
52
  imports: [NgIf, DynamicInput],
53
+ changeDetection: ChangeDetectionStrategy.OnPush,
45
54
  template: `
46
55
  <dfk-dynamic-input
47
- *ngIf="fieldDescription && renderInfos"
56
+ *ngIf="shouldRender"
48
57
  [type]="fieldDescription!.type"
49
58
  [value]="getFieldValue()"
50
59
  [label]="fieldDescription!.label"
51
60
  [placeholder]="fieldDescription!.placeholder"
52
61
  [required]="fieldDescription!.required"
53
- [description]="fieldDescription!.description"
62
+ [description]="$any(fieldDescription!.description)"
54
63
  [options]="fieldDescription!.options"
55
64
  [className]="fieldDescription!.className"
56
65
  (valueChange)="
@@ -61,11 +70,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
61
70
  ></dfk-dynamic-input>
62
71
  `,
63
72
  }]
64
- }], propDecorators: { fieldDescription: [{
73
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { fieldDescription: [{
65
74
  type: Input
66
- }], renderInfos: [{
75
+ }], value: [{
67
76
  type: Input
68
77
  }], onValueChangeField: [{
69
78
  type: Output
70
79
  }] } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGRJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0ZpZWxkSW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQXlCOUMsTUFBTSxPQUFPLFVBQVU7SUFDWixnQkFBZ0IsQ0FBb0I7SUFDcEMsV0FBVyxDQUFjO0lBQ3hCLGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUczQyxDQUFDO0lBRUwsYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEQsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2pFLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzt3R0FuQlUsVUFBVTs0RkFBVixVQUFVLGdOQW5CWDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQsNERBbEJTLElBQUksNkZBQUUsWUFBWTs7NEZBb0JqQixVQUFVO2tCQXZCdEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztvQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCVDtpQkFDRjs4QkFFVSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uLCBQcm9wZXJ0aWVzIH0gZnJvbSAnQGR5bmFtaWMtZmllbGQta2l0L2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY0lucHV0IH0gZnJvbSAnLi9EeW5hbWljSW5wdXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZmstZmllbGQtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdJZiwgRHluYW1pY0lucHV0XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGZrLWR5bmFtaWMtaW5wdXRcbiAgICAgICpuZ0lmPVwiZmllbGREZXNjcmlwdGlvbiAmJiByZW5kZXJJbmZvc1wiXG4gICAgICBbdHlwZV09XCJmaWVsZERlc2NyaXB0aW9uIS50eXBlXCJcbiAgICAgIFt2YWx1ZV09XCJnZXRGaWVsZFZhbHVlKClcIlxuICAgICAgW2xhYmVsXT1cImZpZWxkRGVzY3JpcHRpb24hLmxhYmVsXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZERlc2NyaXB0aW9uIS5wbGFjZWhvbGRlclwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmllbGREZXNjcmlwdGlvbiEucmVxdWlyZWRcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImZpZWxkRGVzY3JpcHRpb24hLmRlc2NyaXB0aW9uXCJcbiAgICAgIFtvcHRpb25zXT1cImZpZWxkRGVzY3JpcHRpb24hLm9wdGlvbnNcIlxuICAgICAgW2NsYXNzTmFtZV09XCJmaWVsZERlc2NyaXB0aW9uIS5jbGFzc05hbWVcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIlxuICAgICAgICBvblZhbHVlQ2hhbmdlRmllbGQuZW1pdCh7IHZhbHVlOiAkZXZlbnQsIGtleTogZmllbGREZXNjcmlwdGlvbiEubmFtZSB9KVxuICAgICAgXCJcbiAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICBbZXJyb3JNZXNzYWdlXT1cIicnXCJcbiAgICA+PC9kZmstZHluYW1pYy1pbnB1dD5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRJbnB1dCB7XG4gIEBJbnB1dCgpIGZpZWxkRGVzY3JpcHRpb24/OiBGaWVsZERlc2NyaXB0aW9uO1xuICBASW5wdXQoKSByZW5kZXJJbmZvcz86IFByb3BlcnRpZXM7XG4gIEBPdXRwdXQoKSBvblZhbHVlQ2hhbmdlRmllbGQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICB2YWx1ZTogYW55O1xuICAgIGtleTogc3RyaW5nO1xuICB9PigpO1xuXG4gIGdldEZpZWxkVmFsdWUoKSB7XG4gICAgaWYgKCF0aGlzLmZpZWxkRGVzY3JpcHRpb24gfHwgIXRoaXMucmVuZGVySW5mb3MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlbmRlckluZm9zW3RoaXMuZmllbGREZXNjcmlwdGlvbi5uYW1lXTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmZpZWxkRGVzY3JpcHRpb24udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGRJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0ZpZWxkSW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUEwQjlDLE1BQU0sT0FBTyxVQUFVO0lBVUQ7SUFUWCxnQkFBZ0IsQ0FBb0I7SUFDcEMsS0FBSyxDQUFXO0lBQ2Ysa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBRzNDLENBQUM7SUFFTCxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRXJCLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO0lBQUcsQ0FBQztJQUU5QyxXQUFXLENBQUMsUUFBdUI7UUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN0RSxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQzt3R0EzQlUsVUFBVTs0RkFBVixVQUFVLHlOQW5CWDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQsNERBbkJTLElBQUksNkZBQUUsWUFBWTs7NEZBcUJqQixVQUFVO2tCQXhCdEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztvQkFDN0IsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQ7aUJBQ0Y7c0ZBRVUsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnQGR5bmFtaWMtZmllbGQta2l0L2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY0lucHV0IH0gZnJvbSAnLi9EeW5hbWljSW5wdXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZmstZmllbGQtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdJZiwgRHluYW1pY0lucHV0XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRmay1keW5hbWljLWlucHV0XG4gICAgICAqbmdJZj1cInNob3VsZFJlbmRlclwiXG4gICAgICBbdHlwZV09XCJmaWVsZERlc2NyaXB0aW9uIS50eXBlXCJcbiAgICAgIFt2YWx1ZV09XCJnZXRGaWVsZFZhbHVlKClcIlxuICAgICAgW2xhYmVsXT1cImZpZWxkRGVzY3JpcHRpb24hLmxhYmVsXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZERlc2NyaXB0aW9uIS5wbGFjZWhvbGRlclwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmllbGREZXNjcmlwdGlvbiEucmVxdWlyZWRcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIiRhbnkoZmllbGREZXNjcmlwdGlvbiEuZGVzY3JpcHRpb24pXCJcbiAgICAgIFtvcHRpb25zXT1cImZpZWxkRGVzY3JpcHRpb24hLm9wdGlvbnNcIlxuICAgICAgW2NsYXNzTmFtZV09XCJmaWVsZERlc2NyaXB0aW9uIS5jbGFzc05hbWVcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIlxuICAgICAgICBvblZhbHVlQ2hhbmdlRmllbGQuZW1pdCh7IHZhbHVlOiAkZXZlbnQsIGtleTogZmllbGREZXNjcmlwdGlvbiEubmFtZSB9KVxuICAgICAgXCJcbiAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICBbZXJyb3JNZXNzYWdlXT1cIicnXCJcbiAgICA+PC9kZmstZHluYW1pYy1pbnB1dD5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRJbnB1dCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGZpZWxkRGVzY3JpcHRpb24/OiBGaWVsZERlc2NyaXB0aW9uO1xuICBASW5wdXQoKSB2YWx1ZT86IHVua25vd247XG4gIEBPdXRwdXQoKSBvblZhbHVlQ2hhbmdlRmllbGQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICB2YWx1ZTogdW5rbm93bjtcbiAgICBrZXk6IHN0cmluZztcbiAgfT4oKTtcblxuICBzaG91bGRSZW5kZXIgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkNoYW5nZXMoX2NoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLnNob3VsZFJlbmRlciA9ICEhdGhpcy5maWVsZERlc2NyaXB0aW9uO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0RmllbGRWYWx1ZSgpOiB1bmtub3duIHtcbiAgICBpZiAoIXRoaXMuZmllbGREZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuZmllbGREZXNjcmlwdGlvbi50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxufVxuIl19