@metadev/lux 0.9.0 → 0.12.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.
- package/README.md +1 -1
- package/bundles/metadev-lux.umd.js +87 -23
- package/bundles/metadev-lux.umd.js.map +1 -1
- package/esm2015/lib/autocomplete/autocomplete.component.js +42 -13
- package/esm2015/lib/autocomplete-list/autocomplete-list.component.js +1 -1
- package/esm2015/lib/breadcrumb/breadcrumb.component.js +1 -1
- package/esm2015/lib/checkbox/checkbox.component.js +1 -1
- package/esm2015/lib/filter/filter.component.js +1 -1
- package/esm2015/lib/geolocation/geolocation.component.js +1 -1
- package/esm2015/lib/input/input.component.js +34 -3
- package/esm2015/lib/map/map.component.js +1 -1
- package/esm2015/lib/pagination/pagination.component.js +1 -1
- package/esm2015/lib/radiogroup/radiogroup.component.js +1 -1
- package/esm2015/lib/select/select.component.js +1 -1
- package/fesm2015/metadev-lux.js +83 -23
- package/fesm2015/metadev-lux.js.map +1 -1
- package/lib/autocomplete/autocomplete.component.d.ts +8 -0
- package/lib/input/input.component.d.ts +5 -0
- package/metadev-lux.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -286,7 +286,7 @@ GeolocationComponent.decorators = [
|
|
|
286
286
|
useExisting: forwardRef(() => GeolocationComponent)
|
|
287
287
|
}
|
|
288
288
|
],
|
|
289
|
-
styles: [".lux-geolocation{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:30rem}.alert{padding:.2rem 2rem;background:#fe2e2e;color:#fff;font-family:Consolas,monospace;width:45%;margin-right:1rem}.
|
|
289
|
+
styles: [".lux-geolocation{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:30rem}.alert{padding:.2rem 2rem;background:#fe2e2e;color:#fff;font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef}.rounded,.postfix,.infix,.prefix{border:1px solid #ced4da;border-radius:.25rem}.prefix{border-top-right-radius:0;border-bottom-right-radius:0}.infix{border-radius:0}.postfix{border-top-left-radius:0;border-bottom-left-radius:0}.btn,.btn-cancel,.btn-select{margin:.2em}.btn-select{background-color:#b4b8f0}.btn-cancel{background-color:#ffced7}.lux-modal-body{padding:0}.map-container{width:90vw;height:45vh}.readonly:focus{outline:none}\n"]
|
|
290
290
|
},] }
|
|
291
291
|
];
|
|
292
292
|
GeolocationComponent.ctorParameters = () => [
|
|
@@ -8,6 +8,8 @@ export class InputComponent {
|
|
|
8
8
|
this.dirty = false;
|
|
9
9
|
this.lastErrors = null;
|
|
10
10
|
this._value = '';
|
|
11
|
+
this._pattern = undefined;
|
|
12
|
+
this._regexp = undefined;
|
|
11
13
|
this.userErrors = {
|
|
12
14
|
en: {
|
|
13
15
|
required: 'Required field.',
|
|
@@ -40,6 +42,24 @@ export class InputComponent {
|
|
|
40
42
|
get disabled() {
|
|
41
43
|
return this._disabled;
|
|
42
44
|
}
|
|
45
|
+
set pattern(p) {
|
|
46
|
+
this._pattern = p;
|
|
47
|
+
if (p === undefined) {
|
|
48
|
+
this._regexp = undefined;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
try {
|
|
52
|
+
this._regexp = new RegExp(p);
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
this._pattern = undefined;
|
|
56
|
+
this._regexp = undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
get pattern() {
|
|
61
|
+
return this._pattern;
|
|
62
|
+
}
|
|
43
63
|
set currency(v) {
|
|
44
64
|
this._currency = v.toUpperCase();
|
|
45
65
|
}
|
|
@@ -131,6 +151,13 @@ export class InputComponent {
|
|
|
131
151
|
result = result || {};
|
|
132
152
|
result.required = { value, reason: 'Required field.' };
|
|
133
153
|
}
|
|
154
|
+
if (this._regexp && hasValue(value) && !this._regexp.test(value)) {
|
|
155
|
+
result = result || {};
|
|
156
|
+
result.pattern = {
|
|
157
|
+
value,
|
|
158
|
+
reason: `Value must follow the pattern: ${this._pattern}`
|
|
159
|
+
};
|
|
160
|
+
}
|
|
134
161
|
if (this.type === 'email' && hasValue(value) && !isValidEmail(value)) {
|
|
135
162
|
result = result || {};
|
|
136
163
|
result.email = { value, reason: 'Invalid email.' };
|
|
@@ -193,6 +220,9 @@ export class InputComponent {
|
|
|
193
220
|
? this.inputId
|
|
194
221
|
: `${this.type}$${InputComponent.idCounter++}`;
|
|
195
222
|
}
|
|
223
|
+
onLostFocus() {
|
|
224
|
+
this.markAsTouched();
|
|
225
|
+
}
|
|
196
226
|
onKeyUp(newValue) {
|
|
197
227
|
this.value = newValue;
|
|
198
228
|
}
|
|
@@ -285,7 +315,7 @@ InputComponent.idCounter = 0;
|
|
|
285
315
|
InputComponent.decorators = [
|
|
286
316
|
{ type: Component, args: [{
|
|
287
317
|
selector: 'lux-input',
|
|
288
|
-
template: "<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min
|
|
318
|
+
template: "<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min?.toString() || undefined\"\n [attr.max]=\"max?.toString() || undefined\"\n [attr.step]=\"step?.toString() || undefined\"\n [attr.pattern]=\"pattern || undefined\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"className\"\n (keyup)=\"onKeyUp(input.value)\"\n (change)=\"onChangeValue(input.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<textarea\n #textarea\n *ngIf=\"type === 'textarea'\"\n placement=\"top\"\n [id]=\"inputId\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.cols]=\"cols?.toString() || undefined\"\n [attr.rows]=\"rows?.toString() || undefined\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"className\"\n (keyup)=\"onKeyUp(textarea.value)\"\n (change)=\"onChangeValue(textarea.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n></textarea>\n<div *ngIf=\"currency && currency === 'EUR'\" class=\"postfix\">\n <span>\u20AC</span>\n</div>\n<div *ngIf=\"isPercentage()\" class=\"postfix\">\n <span>%</span>\n</div>\n<div *ngIf=\"isPermillage()\" class=\"postfix\">\n <span>\u2030</span>\n</div>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.email\">{{ userErrors[this.lang].email }}</div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\n",
|
|
289
319
|
providers: [
|
|
290
320
|
{
|
|
291
321
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -298,7 +328,7 @@ InputComponent.decorators = [
|
|
|
298
328
|
useExisting: forwardRef(() => InputComponent)
|
|
299
329
|
}
|
|
300
330
|
],
|
|
301
|
-
styles: [":host{position:relative;display:flex;
|
|
331
|
+
styles: [":host{position:relative;display:flex;align-items:stretch;width:20rem}input,textarea{margin:inherit;margin:var(--lux-input-margin, inherit);padding:inherit;padding:var(--lux-input-padding, inherit)}.alert{padding:.2rem 2rem;background:#fe2e2e;color:#fff;font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol,.postfix,.prefix{display:inline-block;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-weight:400;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem;line-height:1.5px;line-height:var(--lux-input-postfix-line-height, 1.5px);font-size:1rem;font-size:var(--lux-input-postfix-font-size, 1rem);height:inherit;height:var(--lux-input-postfix-height, inherit)}.prefix{border-top-right-radius:0;border-bottom-right-radius:0}.postfix{border-top-left-radius:0;border-bottom-left-radius:0}.readonly{border:none}.readonly:focus{border:none;outline:none}\n"]
|
|
302
332
|
},] }
|
|
303
333
|
];
|
|
304
334
|
InputComponent.ctorParameters = () => [];
|
|
@@ -316,6 +346,7 @@ InputComponent.propDecorators = {
|
|
|
316
346
|
ariaLabel: [{ type: Input, args: ['aria-label',] }],
|
|
317
347
|
readonly: [{ type: Input }],
|
|
318
348
|
disabled: [{ type: Input }],
|
|
349
|
+
pattern: [{ type: Input }],
|
|
319
350
|
currency: [{ type: Input }],
|
|
320
351
|
placeholder: [{ type: Input }],
|
|
321
352
|
required: [{ type: Input }],
|
|
@@ -324,4 +355,4 @@ InputComponent.propDecorators = {
|
|
|
324
355
|
valueChange: [{ type: Output }],
|
|
325
356
|
keyPress: [{ type: Output }]
|
|
326
357
|
};
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUtqQixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osYUFBYSxFQUNiLGFBQWEsRUFDZCxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFrQjNDLE1BQU0sT0FBTyxjQUFjO0lBaUl6QjtRQTNIQSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxlQUFVLEdBQTRCLElBQUksQ0FBQztRQUduQyxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBTWxCLGVBQVUsR0FBRztZQUNsQixFQUFFLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsR0FBRyxFQUFFLHdCQUF3QjtnQkFDN0IsR0FBRyxFQUFFLHdCQUF3QjtnQkFDN0IsS0FBSyxFQUFFLDBDQUEwQzthQUNsRDtZQUNELEVBQUUsRUFBRTtnQkFDRixRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyxHQUFHLEVBQUUsMEJBQTBCO2dCQUMvQixHQUFHLEVBQUUsMEJBQTBCO2dCQUMvQixLQUFLLEVBQUUsMERBQTBEO2FBQ2xFO1NBQ0YsQ0FBQztRQWtCTyxTQUFJLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUNuQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUdyQixhQUFR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QUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQzVCLENBQUM7O0FBN1ZNLHdCQUFTLEdBQUcsQ0FBQyxDQUFDOztZQWxCdEIsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxXQUFXO2dCQUNyQix5ckVBQXFDO2dCQUVyQyxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsS0FBSyxFQUFFLElBQUk7d0JBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7cUJBQzlDO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixLQUFLLEVBQUUsSUFBSTt3QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztxQkFDOUM7aUJBQ0Y7O2FBQ0Y7Ozs7b0JBSUUsU0FBUyxTQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7dUJBQ3BDLFNBQVMsU0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO21CQTZCdkMsS0FBSzttQkFFTCxLQUFLO21CQUVMLEtBQUs7a0JBRUwsS0FBSztrQkFFTCxLQUFLO21CQU9MLEtBQUs7MkJBQ0wsS0FBSztzQkFDTCxLQUFLO3dCQUNMLEtBQUssU0FBQyxZQUFZO3VCQUNsQixLQUFLO3VCQUVMLEtBQUs7dUJBU0wsS0FBSzswQkFRTCxLQUFLO3VCQVFMLEtBQUs7bUJBUUwsS0FBSztvQkFVTCxLQUFLOzBCQTBCTCxNQUFNO3VCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEFic3RyYWN0Q29udHJvbCxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxuICBOR19WQUxJREFUT1JTXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIGhhc1ZhbHVlLFxuICBpc0luaXRpYWxBbmRFbXB0eSxcbiAgaXNWYWxpZEVtYWlsLFxuICBpc1ZhbGlkTnVtYmVyLFxuICBub3JtYWxpemVEYXRlXG59IGZyb20gJy4uL2hlbHBlckZucyc7XG5pbXBvcnQgeyBsYW5ndWFnZURldGVjdG9yIH0gZnJvbSAnLi4vbGFuZyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsdXgtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXRDb21wb25lbnQpXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dENvbXBvbmVudClcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuICBzdGF0aWMgaWRDb3VudGVyID0gMDtcblxuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBpbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGV4dGFyZWEnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGV4dGFyZWE6IEVsZW1lbnRSZWY7XG5cbiAgdG91Y2hlZCA9IGZhbHNlO1xuICBkaXJ0eSA9IGZhbHNlO1xuICBsYXN0RXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW47XG4gIHByaXZhdGUgX3ZhbHVlOiBhbnkgPSAnJztcbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xuICBwcml2YXRlIF9jdXJyZW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9yZXF1aXJlZDogYm9vbGVhbjtcblxuICBwdWJsaWMgdXNlckVycm9ycyA9IHtcbiAgICBlbjoge1xuICAgICAgcmVxdWlyZWQ6ICdSZXF1aXJlZCBmaWVsZC4nLFxuICAgICAgbWluOiAnTWluaW11bSB2YWx1ZSBpcyAkbWluLicsXG4gICAgICBtYXg6ICdNYXhpbXVtIHZhbHVlIGlzICRtYXguJyxcbiAgICAgIGVtYWlsOiAnRm9ybWF0IHNob3VsZCBtYXRjaCBleGFtcGxlQGV4YW1wbGUuY29tLidcbiAgICB9LFxuICAgIGVzOiB7XG4gICAgICByZXF1aXJlZDogJ0VsIGNhbXBvIGVzIG9ibGlnYXRvcmlvLicsXG4gICAgICBtaW46ICdFbCB2YWxvciBtw61uaW1vIGVzICRtaW4uJyxcbiAgICAgIG1heDogJ0VsIHZhbG9yIG3DoXhpbW8gZXMgJG1heC4nLFxuICAgICAgZW1haWw6ICdFbCBjYW1wbyBkZWJlIHRlbmVyIHVuIGZvcm1hdG8gY29tbyBlamVtcGxvQGVqZW1wbG8uY29tLidcbiAgICB9XG4gIH07XG5cbiAgcHVibGljIGRvbWFpbjogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgcm93cz86IG51bWJlciB8IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIGNvbHM/OiBudW1iZXIgfCBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGVwPzogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluPzogbnVtYmVyIHwgc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4PzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIGdldCBjbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0NsYXNzTmFtZSgpO1xuICB9XG5cbiAgQElucHV0KCkgbGFuZyA9IGxhbmd1YWdlRGV0ZWN0b3IoKTtcbiAgQElucHV0KCkgcHVibGljIGlubGluZUVycm9ycyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaW5wdXRJZDogc3RyaW5nO1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seTogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2OiBzdHJpbmcgfCBib29sZWFuKSB7XG4gICAgdiA9IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHRydWUgOiB2O1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdjtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogc3RyaW5nIHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGN1cnJlbmN5KHY6IHN0cmluZykge1xuICAgIHRoaXMuX2N1cnJlbmN5ID0gdi50b1VwcGVyQ2FzZSgpO1xuICB9XG4gIGdldCBjdXJyZW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwbGFjZWhvbGRlcih2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHY7XG4gIH1cbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyID8gdGhpcy5fcGxhY2Vob2xkZXIgOiAnJztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCByZXF1aXJlZCh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSB2O1xuICB9XG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdHlwZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdi50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuZG9tYWluID0gdi50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuY2hlY2tUeXBlKHYpO1xuICB9XG4gIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGUgPyB0aGlzLl90eXBlIDogJ3RleHQnO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIHYgPSB2ID09PSB1bmRlZmluZWQgPyBudWxsIDogdjtcbiAgICBpZiAodiA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybjsgLy8gcHJldmVudCBldmVudHMgd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2VzXG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxBbmRFbXB0eSA9IGlzSW5pdGlhbEFuZEVtcHR5KHRoaXMuX3ZhbHVlLCB2KTtcbiAgICBpZiAodGhpcy50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgIHYgPSBub3JtYWxpemVEYXRlKHYpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLm9uQ2hhbmdlKHYpO1xuICAgIGlmICghaW5pdGlhbEFuZEVtcHR5KSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodik7XG4gICAgfVxuICB9XG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzUGVyY2VudGFnZSgpIHx8IHRoaXMuaXNQZXJtaWxsYWdlKCkgfHwgdGhpcy5pc051bWJlcigpKSB7XG4gICAgICBjb25zdCBudW1WYWwgPSBwYXJzZUZsb2F0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIGlmICghTnVtYmVyLmlzTmFOKG51bVZhbCkpIHtcbiAgICAgICAgcmV0dXJuIG51bVZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkga2V5UHJlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgb25DaGFuZ2UgPSAodmFsdWUpOiB2b2lkID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNldFZhbHVlSW5Db250cm9sKHZhbHVlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50b3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG4gIC8vIEVuZCBvZiBDb250cm9sVmFsdWVBY2Nlc3NvciBJbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cblxuICBwcml2YXRlIHNldFZhbHVlSW5Db250cm9sKHY6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRvbWFpbiA9PT0gJ2RhdGUnKSB7XG4gICAgICB2ID0gbm9ybWFsaXplRGF0ZSh2KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHY7XG4gICAgfVxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2O1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSgpOiB2b2lkIHt9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBsZXQgcmVzdWx0OiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhaGFzVmFsdWUoaGFzVmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQucmVxdWlyZWQgPSB7IHZhbHVlLCByZWFzb246ICdSZXF1aXJlZCBmaWVsZC4nIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdlbWFpbCcgJiYgaGFzVmFsdWUodmFsdWUpICYmICFpc1ZhbGlkRW1haWwodmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQuZW1haWwgPSB7IHZhbHVlLCByZWFzb246ICdJbnZhbGlkIGVtYWlsLicgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ251bWJlcicgJiYgaGFzVmFsdWUodmFsdWUpICYmICFpc1ZhbGlkTnVtYmVyKHZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0Lm51bWVyaWMgPSB7IHZhbHVlLCByZWFzb246ICdJbnZhbGlkIG51bWJlci4nIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudHlwZSA9PT0gJ2RhdGUnIHx8XG4gICAgICB0aGlzLnR5cGUgPT09ICd0aW1lJyB8fFxuICAgICAgdGhpcy50eXBlID09PSAndGltZXN0YW1wJ1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdGhpcy5taW4gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIGhhc1ZhbHVlKHZhbHVlKSAmJlxuICAgICAgICBTdHJpbmcodmFsdWUpLmxvY2FsZUNvbXBhcmUodGhpcy5taW4pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgICAgcmVzdWx0Lm1pbiA9IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgIHJlYXNvbjogYFZhbHVlIGlzIGxvd2VyIHRoYW4gbWluaW11bSB2YWx1ZTogJHt0aGlzLm1pbn0uYFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdGhpcy5tYXggPT09ICdzdHJpbmcnICYmXG4gICAgICAgIGhhc1ZhbHVlKHZhbHVlKSAmJlxuICAgICAgICBTdHJpbmcodmFsdWUpLmxvY2FsZUNvbXBhcmUodGhpcy5tYXgpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgICAgcmVzdWx0Lm1heCA9IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBtYXg6IHRoaXMubWF4LFxuICAgICAgICAgIHJlYXNvbjogYFZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGFuIG1heGltdW0gdmFsdWU6ICR7dGhpcy5tYXh9LmBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnR5cGUgPT09ICdwZXJjZW50YWdlJyB8fFxuICAgICAgdGhpcy50eXBlID09PSAncGVybWlsbGFnZScgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ251bWJlcicgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICkge1xuICAgICAgaWYgKGhhc1ZhbHVlKHRoaXMubWluKSAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgdmFsdWUgPCArdGhpcy5taW4pIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgICByZXN1bHQubWluID0ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG1pbjogdGhpcy5taW4sXG4gICAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgbG93ZXIgdGhhbiBtaW5pbXVtIHZhbHVlOiAke3RoaXMubWlufS5gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoaGFzVmFsdWUodGhpcy5tYXgpICYmIGhhc1ZhbHVlKHZhbHVlKSAmJiB2YWx1ZSA+ICt0aGlzLm1heCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICAgIHJlc3VsdC5tYXggPSB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbWF4OiB0aGlzLm1heCxcbiAgICAgICAgICByZWFzb246IGBWYWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhhbiBtYXhpbXVtIHZhbHVlOiAke3RoaXMubWF4fS5gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubGFzdEVycm9ycyA9IHJlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIEVuZCBvZiBWYWxpZGF0b3IgaW50ZXJmYWNlXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dElkID0gdGhpcy5pbnB1dElkXG4gICAgICA/IHRoaXMuaW5wdXRJZFxuICAgICAgOiBgJHt0aGlzLnR5cGV9JCR7SW5wdXRDb21wb25lbnQuaWRDb3VudGVyKyt9YDtcbiAgfVxuXG4gIG9uS2V5VXAobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBvbkNoYW5nZVZhbHVlKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMua2V5UHJlc3MuZW1pdChldmVudCk7XG4gIH1cblxuICBpc051bWJlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnbnVtYmVyJztcbiAgfVxuICBpc1BlcmNlbnRhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ3BlcmNlbnRhZ2UnO1xuICB9XG4gIGlzUGVybWlsbGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAncGVybWlsbGFnZSc7XG4gIH1cblxuICBjaGVja0NsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gJ3JlYWRvbmx5JztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY2hlY2tUeXBlKHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICB0aGlzLnNldEVtYWlsUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgdGhpcy5zZXREYXRlUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aW1lJzpcbiAgICAgICAgdGhpcy5zZXRUaW1lUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICAgIHRoaXMuc2V0UGFzc3dvcmRQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHRoaXMuc2V0TnVtYmVyUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIHRoaXMuc2V0Q3VycmVuY3lQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxuICAgICAgICB0aGlzLnNldFBlcmNlbnRhZ2VQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Blcm1pbGxhZ2UnOlxuICAgICAgICB0aGlzLnNldFBlcm1pbGxhZ2VQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldEVtYWlsUGF0dGVybnMoKTogdm9pZCB7fVxuXG4gIHNldERhdGVQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8ICcxOTAwLTAxLTAxJztcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8ICcyMTAwLTAxLTAxJztcbiAgfVxuXG4gIHNldFRpbWVQYXR0ZXJucygpOiB2b2lkIHt9XG5cbiAgc2V0UGFzc3dvcmRQYXR0ZXJucygpOiB2b2lkIHt9XG5cbiAgc2V0TnVtYmVyUGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb21haW4gPSAnbnVtYmVyJztcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gJzAnO1xuICB9XG5cbiAgc2V0Q3VycmVuY3lQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICdudW1iZXInO1xuICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCB8fCAwLjE7XG4gICAgdGhpcy5taW4gPSB0aGlzLm1pbiB8fCAwLjA7XG4gICAgdGhpcy5tYXggPSB0aGlzLm1heCB8fCAxMDAwMC4wO1xuICAgIHRoaXMudmFsdWUgPSAwLjA7XG4gIH1cblxuICBzZXRQZXJjZW50YWdlUGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb21haW4gPSAnbnVtYmVyJztcbiAgICB0aGlzLnN0ZXAgPSB0aGlzLnN0ZXAgfHwgMC4wMTtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8IDAuMDtcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8IDEwMC4wO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSAnMC4wMCc7XG4gIH1cblxuICBzZXRQZXJtaWxsYWdlUGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb21haW4gPSAnbnVtYmVyJztcbiAgICB0aGlzLnN0ZXAgPSB0aGlzLnN0ZXAgfHwgMC4wMTtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8IDAuMDtcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8IDEwMDAuMDtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gJzAuMDAnO1xuICB9XG59XG4iXX0=
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUtqQixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osYUFBYSxFQUNiLGFBQWEsRUFDZCxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFrQjNDLE1BQU0sT0FBTyxjQUFjO0lBcUp6QjtRQS9JQSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxlQUFVLEdBQTRCLElBQUksQ0FBQztRQUduQyxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBR2pCLGFBQVEsR0FBWSxTQUFTLENBQUM7UUFDOUIsWUFBTyxHQUFZLFNBQVMsQ0FBQztRQUk5QixlQUFVLEdBQUc7WUFDbEIsRUFBRSxFQUFFO2dCQUNGLFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLEdBQUcsRUFBRSx3QkFBd0I7Z0JBQzdCLEdBQUcsRUFBRSx3QkFBd0I7Z0JBQzdCLEtBQUssRUFBRSwwQ0FBMEM7YUFDbEQ7WUFDRCxFQUFFLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsR0FBRyxFQUFFLDBCQUEwQjtnQkFDL0IsR0FBRyxFQUFFLDBCQUEwQjtnQkFDL0IsS0FBSyxFQUFFLDBEQUEwRDthQUNsRTtTQUNGLENBQUM7UUFrQk8sU0FBSSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFHckIsYUFBUSxHQUFtQixJQUFJLENBQUM7UUF5RnRDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFFdkQsYUFBUSxHQUFHLENBQUMsS0FBSyxFQUFRLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDL0IsY0FBUyxHQUFHLEdBQVMsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUVaLENBQUM7SUF2R2hCLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFRRCxJQUNJLFFBQVEsQ0FBQyxDQUFtQjtRQUM5QixDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLE9BQU8sQ0FBQyxDQUFxQjtRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7U0FDMUI7YUFBTTtZQUNMLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM5QjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO2dCQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQzthQUMxQjtTQUNGO0lBQ0gsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDSSxRQUFRLENBQUMsQ0FBUztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLFdBQVcsQ0FBQyxDQUFTO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFDSSxRQUFRLENBQUMsQ0FBVTtRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLElBQUksQ0FBQyxDQUFTO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUNJLEtBQUssQ0FBQyxDQUFNO1FBQ2QsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckIsT0FBTyxDQUFDLDBDQUEwQztTQUNuRDtRQUNELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUN4QixDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDakUsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDekIsT0FBTyxNQUFNLENBQUM7YUFDZjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFTRCxnREFBZ0Q7SUFDaEQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFhO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWlCO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFDRCx1REFBdUQ7SUFFL0MsaUJBQWlCLENBQUMsQ0FBTTtRQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFO1lBQzFCLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEI7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLHlCQUF5QixLQUFVLENBQUM7SUFFcEMsUUFBUSxDQUFDLE9BQXdCO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDNUIsSUFBSSxNQUFNLEdBQTRCLElBQUksQ0FBQztRQUUzQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDeEMsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztTQUN4RDtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoRSxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsT0FBTyxHQUFHO2dCQUNmLEtBQUs7Z0JBQ0wsTUFBTSxFQUFFLGtDQUFrQyxJQUFJLENBQUMsUUFBUSxFQUFFO2FBQzFELENBQUM7U0FDSDtRQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLENBQUM7U0FDcEQ7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0RSxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1NBQ3ZEO1FBQ0QsSUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU07WUFDcEIsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUN6QjtZQUNBLElBQ0UsT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFFBQVE7Z0JBQzVCLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzVDO2dCQUNBLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO2dCQUN0QixNQUFNLENBQUMsR0FBRyxHQUFHO29CQUNYLEtBQUs7b0JBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29CQUNiLE1BQU0sRUFBRSxzQ0FBc0MsSUFBSSxDQUFDLEdBQUcsR0FBRztpQkFDMUQsQ0FBQzthQUNIO1lBQ0QsSUFDRSxPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssUUFBUTtnQkFDNUIsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDZixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDNUM7Z0JBQ0EsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxHQUFHLEdBQUc7b0JBQ1gsS0FBSztvQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7b0JBQ2IsTUFBTSxFQUFFLDZDQUE2QyxJQUFJLENBQUMsR0FBRyxHQUFHO2lCQUNqRSxDQUFDO2FBQ0g7U0FDRjtRQUVELElBQ0UsSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZO1lBQzFCLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWTtZQUMxQixJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFDdEIsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQ3hCO1lBQ0EsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM5RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxDQUFDLEdBQUcsR0FBRztvQkFDWCxLQUFLO29CQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDYixNQUFNLEVBQUUsc0NBQXNDLElBQUksQ0FBQyxHQUFHLEdBQUc7aUJBQzFELENBQUM7YUFDSDtZQUNELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDOUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxHQUFHLEdBQUc7b0JBQ1gsS0FBSztvQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7b0JBQ2IsTUFBTSxFQUFFLDZDQUE2QyxJQUFJLENBQUMsR0FBRyxHQUFHO2lCQUNqRSxDQUFDO2FBQ0g7U0FDRjtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCw2QkFBNkI7SUFFN0IsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU87WUFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ2QsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0QsT0FBTyxDQUFDLFFBQWdCO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxhQUFhLENBQUMsUUFBZ0I7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxVQUFVLENBQUMsS0FBb0I7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQztJQUNwQyxDQUFDO0lBQ0QsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUM7SUFDcEMsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVk7UUFDcEIsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3hCLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0IsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0IsTUFBTTtZQUNSLEtBQUssWUFBWTtnQkFDZixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDN0IsTUFBTTtZQUNSLEtBQUssWUFBWTtnQkFDZixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDN0IsTUFBTTtZQUNSO2dCQUNFLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxnQkFBZ0IsS0FBVSxDQUFDO0lBRTNCLGVBQWU7UUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUVELGVBQWUsS0FBVSxDQUFDO0lBRTFCLG1CQUFtQixLQUFVLENBQUM7SUFFOUIsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7SUFDekIsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNuQixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDNUIsQ0FBQzs7QUExWE0sd0JBQVMsR0FBRyxDQUFDLENBQUM7O1lBbEJ0QixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLGttRUFBcUM7Z0JBRXJDLFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixLQUFLLEVBQUUsSUFBSTt3QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztxQkFDOUM7b0JBQ0Q7d0JBQ0UsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLEtBQUssRUFBRSxJQUFJO3dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO3FCQUM5QztpQkFDRjs7YUFDRjs7OztvQkFJRSxTQUFTLFNBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTt1QkFDcEMsU0FBUyxTQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7bUJBK0J2QyxLQUFLO21CQUVMLEtBQUs7bUJBRUwsS0FBSztrQkFFTCxLQUFLO2tCQUVMLEtBQUs7bUJBT0wsS0FBSzsyQkFDTCxLQUFLO3NCQUNMLEtBQUs7d0JBQ0wsS0FBSyxTQUFDLFlBQVk7dUJBQ2xCLEtBQUs7dUJBRUwsS0FBSztzQkFTTCxLQUFLO3VCQWtCTCxLQUFLOzBCQVFMLEtBQUs7dUJBUUwsS0FBSzttQkFRTCxLQUFLO29CQVVMLEtBQUs7MEJBMEJMLE1BQU07dUJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXQsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgQWJzdHJhY3RDb250cm9sLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIE5HX1ZBTElEQVRPUlNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgaGFzVmFsdWUsXG4gIGlzSW5pdGlhbEFuZEVtcHR5LFxuICBpc1ZhbGlkRW1haWwsXG4gIGlzVmFsaWROdW1iZXIsXG4gIG5vcm1hbGl6ZURhdGVcbn0gZnJvbSAnLi4vaGVscGVyRm5zJztcbmltcG9ydCB7IGxhbmd1YWdlRGV0ZWN0b3IgfSBmcm9tICcuLi9sYW5nJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x1eC1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dENvbXBvbmVudClcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0Q29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG4gIHN0YXRpYyBpZENvdW50ZXIgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0ZXh0YXJlYScsIHsgc3RhdGljOiBmYWxzZSB9KSB0ZXh0YXJlYTogRWxlbWVudFJlZjtcblxuICB0b3VjaGVkID0gZmFsc2U7XG4gIGRpcnR5ID0gZmFsc2U7XG4gIGxhc3RFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9kaXNhYmxlZDogc3RyaW5nIHwgYm9vbGVhbjtcbiAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9ICcnO1xuICBwcml2YXRlIF90eXBlOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhdHRlcm4/OiBzdHJpbmcgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3JlZ2V4cD86IFJlZ0V4cCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfY3VycmVuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgcHVibGljIHVzZXJFcnJvcnMgPSB7XG4gICAgZW46IHtcbiAgICAgIHJlcXVpcmVkOiAnUmVxdWlyZWQgZmllbGQuJyxcbiAgICAgIG1pbjogJ01pbmltdW0gdmFsdWUgaXMgJG1pbi4nLFxuICAgICAgbWF4OiAnTWF4aW11bSB2YWx1ZSBpcyAkbWF4LicsXG4gICAgICBlbWFpbDogJ0Zvcm1hdCBzaG91bGQgbWF0Y2ggZXhhbXBsZUBleGFtcGxlLmNvbS4nXG4gICAgfSxcbiAgICBlczoge1xuICAgICAgcmVxdWlyZWQ6ICdFbCBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4nLFxuICAgICAgbWluOiAnRWwgdmFsb3IgbcOtbmltbyBlcyAkbWluLicsXG4gICAgICBtYXg6ICdFbCB2YWxvciBtw6F4aW1vIGVzICRtYXguJyxcbiAgICAgIGVtYWlsOiAnRWwgY2FtcG8gZGViZSB0ZW5lciB1biBmb3JtYXRvIGNvbW8gZWplbXBsb0BlamVtcGxvLmNvbS4nXG4gICAgfVxuICB9O1xuXG4gIHB1YmxpYyBkb21haW46IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIHJvd3M/OiBudW1iZXIgfCBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb2xzPzogbnVtYmVyIHwgc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3RlcD86IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIG1pbj86IG51bWJlciB8IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIG1heD86IG51bWJlciB8IHN0cmluZztcblxuICBnZXQgY2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tDbGFzc05hbWUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGxhbmcgPSBsYW5ndWFnZURldGVjdG9yKCk7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbmxpbmVFcnJvcnMgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGlucHV0SWQ6IHN0cmluZztcbiAgQElucHV0KCdhcmlhLWxhYmVsJykgcHVibGljIGFyaWFMYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgcmVhZG9ubHk6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodjogc3RyaW5nIHwgYm9vbGVhbikge1xuICAgIHYgPSB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB0cnVlIDogdjtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHY7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCk6IHN0cmluZyB8IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwYXR0ZXJuKHA6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BhdHRlcm4gPSBwO1xuICAgIGlmIChwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3JlZ2V4cCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fcmVnZXhwID0gbmV3IFJlZ0V4cChwKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5fcGF0dGVybiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fcmVnZXhwID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgcGF0dGVybigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGN1cnJlbmN5KHY6IHN0cmluZykge1xuICAgIHRoaXMuX2N1cnJlbmN5ID0gdi50b1VwcGVyQ2FzZSgpO1xuICB9XG4gIGdldCBjdXJyZW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwbGFjZWhvbGRlcih2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHY7XG4gIH1cbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyID8gdGhpcy5fcGxhY2Vob2xkZXIgOiAnJztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCByZXF1aXJlZCh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSB2O1xuICB9XG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdHlwZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdi50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuZG9tYWluID0gdi50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuY2hlY2tUeXBlKHYpO1xuICB9XG4gIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGUgPyB0aGlzLl90eXBlIDogJ3RleHQnO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIHYgPSB2ID09PSB1bmRlZmluZWQgPyBudWxsIDogdjtcbiAgICBpZiAodiA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybjsgLy8gcHJldmVudCBldmVudHMgd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2VzXG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxBbmRFbXB0eSA9IGlzSW5pdGlhbEFuZEVtcHR5KHRoaXMuX3ZhbHVlLCB2KTtcbiAgICBpZiAodGhpcy50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgIHYgPSBub3JtYWxpemVEYXRlKHYpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLm9uQ2hhbmdlKHYpO1xuICAgIGlmICghaW5pdGlhbEFuZEVtcHR5KSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodik7XG4gICAgfVxuICB9XG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzUGVyY2VudGFnZSgpIHx8IHRoaXMuaXNQZXJtaWxsYWdlKCkgfHwgdGhpcy5pc051bWJlcigpKSB7XG4gICAgICBjb25zdCBudW1WYWwgPSBwYXJzZUZsb2F0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIGlmICghTnVtYmVyLmlzTmFOKG51bVZhbCkpIHtcbiAgICAgICAgcmV0dXJuIG51bVZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkga2V5UHJlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgb25DaGFuZ2UgPSAodmFsdWUpOiB2b2lkID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNldFZhbHVlSW5Db250cm9sKHZhbHVlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50b3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG4gIC8vIEVuZCBvZiBDb250cm9sVmFsdWVBY2Nlc3NvciBJbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cblxuICBwcml2YXRlIHNldFZhbHVlSW5Db250cm9sKHY6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRvbWFpbiA9PT0gJ2RhdGUnKSB7XG4gICAgICB2ID0gbm9ybWFsaXplRGF0ZSh2KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHY7XG4gICAgfVxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2O1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSgpOiB2b2lkIHt9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBsZXQgcmVzdWx0OiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhaGFzVmFsdWUoaGFzVmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQucmVxdWlyZWQgPSB7IHZhbHVlLCByZWFzb246ICdSZXF1aXJlZCBmaWVsZC4nIH07XG4gICAgfVxuICAgIGlmICh0aGlzLl9yZWdleHAgJiYgaGFzVmFsdWUodmFsdWUpICYmICF0aGlzLl9yZWdleHAudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5wYXR0ZXJuID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgcmVhc29uOiBgVmFsdWUgbXVzdCBmb2xsb3cgdGhlIHBhdHRlcm46ICR7dGhpcy5fcGF0dGVybn1gXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy50eXBlID09PSAnZW1haWwnICYmIGhhc1ZhbHVlKHZhbHVlKSAmJiAhaXNWYWxpZEVtYWlsKHZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0LmVtYWlsID0geyB2YWx1ZSwgcmVhc29uOiAnSW52YWxpZCBlbWFpbC4nIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdudW1iZXInICYmIGhhc1ZhbHVlKHZhbHVlKSAmJiAhaXNWYWxpZE51bWJlcih2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5udW1lcmljID0geyB2YWx1ZSwgcmVhc29uOiAnSW52YWxpZCBudW1iZXIuJyB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnR5cGUgPT09ICdkYXRlJyB8fFxuICAgICAgdGhpcy50eXBlID09PSAndGltZScgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ3RpbWVzdGFtcCdcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHRoaXMubWluID09PSAnc3RyaW5nJyAmJlxuICAgICAgICBoYXNWYWx1ZSh2YWx1ZSkgJiZcbiAgICAgICAgU3RyaW5nKHZhbHVlKS5sb2NhbGVDb21wYXJlKHRoaXMubWluKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICAgIHJlc3VsdC5taW4gPSB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbWluOiB0aGlzLm1pbixcbiAgICAgICAgICByZWFzb246IGBWYWx1ZSBpcyBsb3dlciB0aGFuIG1pbmltdW0gdmFsdWU6ICR7dGhpcy5taW59LmBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHRoaXMubWF4ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICBoYXNWYWx1ZSh2YWx1ZSkgJiZcbiAgICAgICAgU3RyaW5nKHZhbHVlKS5sb2NhbGVDb21wYXJlKHRoaXMubWF4KSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICAgIHJlc3VsdC5tYXggPSB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbWF4OiB0aGlzLm1heCxcbiAgICAgICAgICByZWFzb246IGBWYWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhhbiBtYXhpbXVtIHZhbHVlOiAke3RoaXMubWF4fS5gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy50eXBlID09PSAncGVyY2VudGFnZScgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ3Blcm1pbGxhZ2UnIHx8XG4gICAgICB0aGlzLnR5cGUgPT09ICdudW1iZXInIHx8XG4gICAgICB0aGlzLnR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICApIHtcbiAgICAgIGlmIChoYXNWYWx1ZSh0aGlzLm1pbikgJiYgaGFzVmFsdWUodmFsdWUpICYmIHZhbHVlIDwgK3RoaXMubWluKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgICAgcmVzdWx0Lm1pbiA9IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgIHJlYXNvbjogYFZhbHVlIGlzIGxvd2VyIHRoYW4gbWluaW11bSB2YWx1ZTogJHt0aGlzLm1pbn0uYFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGhhc1ZhbHVlKHRoaXMubWF4KSAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgdmFsdWUgPiArdGhpcy5tYXgpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgICByZXN1bHQubWF4ID0ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG1heDogdGhpcy5tYXgsXG4gICAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoYW4gbWF4aW11bSB2YWx1ZTogJHt0aGlzLm1heH0uYFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxhc3RFcnJvcnMgPSByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvLyBFbmQgb2YgVmFsaWRhdG9yIGludGVyZmFjZVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRJZCA9IHRoaXMuaW5wdXRJZFxuICAgICAgPyB0aGlzLmlucHV0SWRcbiAgICAgIDogYCR7dGhpcy50eXBlfSQke0lucHV0Q29tcG9uZW50LmlkQ291bnRlcisrfWA7XG4gIH1cbiAgb25Mb3N0Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgb25LZXlVcChuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIG9uQ2hhbmdlVmFsdWUobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuICBvbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5rZXlQcmVzcy5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGlzTnVtYmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdudW1iZXInO1xuICB9XG4gIGlzUGVyY2VudGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAncGVyY2VudGFnZSc7XG4gIH1cbiAgaXNQZXJtaWxsYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdwZXJtaWxsYWdlJztcbiAgfVxuXG4gIGNoZWNrQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiAncmVhZG9ubHknO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjaGVja1R5cGUodHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgIHRoaXMuc2V0RW1haWxQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICB0aGlzLnNldERhdGVQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICB0aGlzLnNldFRpbWVQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Bhc3N3b3JkJzpcbiAgICAgICAgdGhpcy5zZXRQYXNzd29yZFBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgdGhpcy5zZXROdW1iZXJQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgICAgdGhpcy5zZXRDdXJyZW5jeVBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGVyY2VudGFnZSc6XG4gICAgICAgIHRoaXMuc2V0UGVyY2VudGFnZVBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGVybWlsbGFnZSc6XG4gICAgICAgIHRoaXMuc2V0UGVybWlsbGFnZVBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2V0RW1haWxQYXR0ZXJucygpOiB2b2lkIHt9XG5cbiAgc2V0RGF0ZVBhdHRlcm5zKCk6IHZvaWQge1xuICAgIHRoaXMubWluID0gdGhpcy5taW4gfHwgJzE5MDAtMDEtMDEnO1xuICAgIHRoaXMubWF4ID0gdGhpcy5tYXggfHwgJzIxMDAtMDEtMDEnO1xuICB9XG5cbiAgc2V0VGltZVBhdHRlcm5zKCk6IHZvaWQge31cblxuICBzZXRQYXNzd29yZFBhdHRlcm5zKCk6IHZvaWQge31cblxuICBzZXROdW1iZXJQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICdudW1iZXInO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSAnMCc7XG4gIH1cblxuICBzZXRDdXJyZW5jeVBhdHRlcm5zKCk6IHZvaWQge1xuICAgIHRoaXMuZG9tYWluID0gJ251bWJlcic7XG4gICAgdGhpcy5zdGVwID0gdGhpcy5zdGVwIHx8IDAuMTtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8IDAuMDtcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8IDEwMDAwLjA7XG4gICAgdGhpcy52YWx1ZSA9IDAuMDtcbiAgfVxuXG4gIHNldFBlcmNlbnRhZ2VQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICdudW1iZXInO1xuICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCB8fCAwLjAxO1xuICAgIHRoaXMubWluID0gdGhpcy5taW4gfHwgMC4wO1xuICAgIHRoaXMubWF4ID0gdGhpcy5tYXggfHwgMTAwLjA7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9ICcwLjAwJztcbiAgfVxuXG4gIHNldFBlcm1pbGxhZ2VQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICdudW1iZXInO1xuICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCB8fCAwLjAxO1xuICAgIHRoaXMubWluID0gdGhpcy5taW4gfHwgMC4wO1xuICAgIHRoaXMubWF4ID0gdGhpcy5tYXggfHwgMTAwMC4wO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSAnMC4wMCc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -245,7 +245,7 @@ MapComponent.decorators = [
|
|
|
245
245
|
{ type: Component, args: [{
|
|
246
246
|
selector: 'lux-map',
|
|
247
247
|
template: "<div [id]=\"mapId\" class=\"map\" (resized)=\"onResize()\"></div>\n",
|
|
248
|
-
styles: [".map{min-height:100px;height:100%;min-width:160px;width:100%}"]
|
|
248
|
+
styles: [".map{min-height:100px;height:100%;min-width:160px;width:100%}\n"]
|
|
249
249
|
},] }
|
|
250
250
|
];
|
|
251
251
|
MapComponent.ctorParameters = () => [
|
|
@@ -121,7 +121,7 @@ PaginationComponent.decorators = [
|
|
|
121
121
|
{ type: Component, args: [{
|
|
122
122
|
selector: 'lux-pagination',
|
|
123
123
|
template: "<div class=\"lux-pagination\" *ngIf=\"showPagination\">\n <ng-container *ngIf=\"!hidePrevious\">\n <a\n luxTooltip\n [content]=\"first\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onFirst()\"\n [ngClass]=\"{\n enabledFirstLast: !hidePrevious\n }\"\n class=\"button-pagination icon arrow-left-end\"\n ></a>\n <a\n luxTooltip\n [content]=\"previous\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onPrevious()\"\n [ngClass]=\"{\n enabledFirstLast: !hidePrevious\n }\"\n class=\"button-pagination icon arrow-left\"\n ></a>\n </ng-container>\n\n <span class=\"ellipsis\" *ngIf=\"displayPreviousEllipsis\">...</span>\n\n <ng-container *ngFor=\"let pageNum of pages\">\n <a\n luxTooltip\n content=\"{{ pageNum + 1 }}\"\n placement=\"top\"\n delay=\"500\"\n [ngClass]=\"{\n disabled: pageNum === paginationInfo.page,\n enabled: pageNum !== paginationInfo.page\n }\"\n class=\"button-pagination\"\n (click)=\"onPage(pageNum)\"\n >{{ pageNum + 1 }}</a\n >\n </ng-container>\n\n <span class=\"ellipsis\" *ngIf=\"displayNextEllipsis\">...</span>\n\n <ng-container *ngIf=\"!lastPage\">\n <a\n luxTooltip\n [content]=\"next\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onNext()\"\n [ngClass]=\"{\n enabledFirstLast: !lastPage\n }\"\n class=\"button-pagination icon arrow-right\"\n ></a>\n <a\n luxTooltip\n [content]=\"last\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onLast()\"\n [ngClass]=\"{\n enabledFirstLast: !lastPage\n }\"\n class=\"button-pagination icon arrow-right-end\"\n ></a>\n </ng-container>\n</div>\n",
|
|
124
|
-
styles: [".lux-pagination{display:flex;flex-direction:row;margin:2% 0;width:100%;background
|
|
124
|
+
styles: [".lux-pagination{display:flex;flex-direction:row;margin:2% 0;width:100%;background:white;align-items:center}.disabled{cursor:not-allowed;border:1px solid #325c81;border:var(--lux-pagination-disabled-border, 1px solid #325c81);border-radius:10%;border-radius:var(--lux-pagination-disabled-border-radius, 10%);padding:1%;margin:0 .7%;color:#fff;color:var(--lux-pagination-disabled-color, white);background-color:#325c81;background-color:var(--lux-pagination-disabled-background-color, #325c81);text-decoration:none;pointer-events:none}.enabled{border:1px solid #cfcfcf;border:var(--lux-pagination-enabled-border, 1px solid #cfcfcf);border-radius:10%;border-radius:var(--lux-pagination-enabled-border-radius, 10%);padding:1%;margin:0 .7%;color:#325c81;color:var(--lux-pagination-enabled-color, #325c81);width:-webkit-min-content;width:-moz-min-content;width:min-content;cursor:pointer}.enabledFirstLast{border:1px solid #cfcfcf;border-radius:10%;padding:1%;color:#325c81;margin:0 .7%;width:-webkit-min-content;width:-moz-min-content;width:min-content;cursor:pointer}.ellipsis{margin:0 .5rem;padding:0;color:#325c81;width:-webkit-min-content;width:-moz-min-content;width:min-content}.button-pagination{width:1em;width:var(--lux-pagination-button-width, 1em);height:1.2em;height:var(--lux-pagination-button-height, 1.2em);font-size:80%;font-size:var(--lux-pagination-font-size, 80%);text-align:center}.icon{background-size:1.3em 1.4em;background-position:center;background-repeat:no-repeat}.arrow-right{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.4em}.arrow-left{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");transform:rotate(180deg);background-position:.4em}.arrow-right-end{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_3%22 points%3D%2241.8%2C45.7 30.4%2C44.3 50.8%2C24 30.4%2C3.7 41.8%2C2.3 63.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.1em}.arrow-left-end{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_3%22 points%3D%2241.8%2C45.7 30.4%2C44.3 50.8%2C24 30.4%2C3.7 41.8%2C2.3 63.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.1em;transform:rotate(180deg)}@media only screen and (min-width: 300px) and (max-width: 500px){.arrow-right{background-position:.2em}.arrow-left{background-position:.2em}.arrow-right-end{background-position:0em}.arrow-left-end{background-position:0em}}@media only screen and (min-width: 500px) and (max-width: 850px){.arrow-right{background-position:.3em}.arrow-left{background-position:.3em}.arrow-right-end{background-position:0em}.arrow-left-end{background-position:0em}}@media only screen and (min-width: 900px){.arrow-right{background-position:.2em}.arrow-left{background-position:.2em}.arrow-right-end{background-position:0em}.arrow-left-end{background-position:0em}}\n"]
|
|
125
125
|
},] }
|
|
126
126
|
];
|
|
127
127
|
PaginationComponent.ctorParameters = () => [];
|
|
@@ -97,7 +97,7 @@ RadiogroupComponent.decorators = [
|
|
|
97
97
|
useExisting: forwardRef(() => RadiogroupComponent)
|
|
98
98
|
}
|
|
99
99
|
],
|
|
100
|
-
styles: [".radiogroup{display:flex}.radio-item{border-radius:0;border:1px solid #ccc;padding:0 .5rem}.radio-item input{display:none}.radio-item label{margin-top:.3rem;margin-bottom:.3rem}.radio-start{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.radio-end{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.
|
|
100
|
+
styles: [".radiogroup{display:flex}.radio-item{border-radius:0;border:1px solid #ccc;padding:0 .5rem;padding:var(--lux-radiogroup-padding, 0rem .5rem)}.radio-item input{display:none}.radio-item label{color:initial;color:var(--lux-radiogroup-color, initial);font-size:initial;font-size:var(--lux-radiogroup-font-size, initial);margin-top:.3rem;margin-bottom:.3rem}.radio-item.selected{background-color:#2e2eac;background-color:var(--lux-radiogroup-selected-background-color, #2e2eac)}.radio-item.selected label{font-size:initial;font-size:var(--lux-radiogroup-font-size, initial);color:#fff;color:var(--lux-radiogroup-selected-color, white)}.radio-start{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.radio-end{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.disabled .radio-item{background-color:#f0f0f0;color:#444}.disabled .selected{font-size:initial;font-size:var(--lux-radiogroup-selected-disabled-font-size, initial);color:#fff;color:var(--lux-radiogroup-selected-disabled-color, white);background-color:#9898ec;background-color:var(--lux-radiogroup-selected-disabled-background-color, #9898ec)}.unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}\n"]
|
|
101
101
|
},] }
|
|
102
102
|
];
|
|
103
103
|
RadiogroupComponent.ctorParameters = () => [];
|
|
@@ -113,7 +113,7 @@ SelectComponent.decorators = [
|
|
|
113
113
|
useExisting: forwardRef(() => SelectComponent)
|
|
114
114
|
}
|
|
115
115
|
],
|
|
116
|
-
styles: [".lux-select{margin-bottom:.5em}.lux-select .list{margin:1em;padding-bottom:.2em;list-style-type:square}.lux-select .list span{margin-bottom:.3em}.remove{margin-left:2em;font-size:.65em;color:#b22222;background:transparent;border:2px solid #
|
|
116
|
+
styles: [".lux-select{margin-bottom:.5em}.lux-select .list{margin:1em;padding-bottom:.2em;list-style-type:square}.lux-select .list span{margin-bottom:.3em}.remove{margin-left:2em;font-size:.65em;color:#b22222;background:transparent;border:2px solid #BBB}.add-new-item{display:inline-flex;margin-left:2.2em;height:1.6em}.error{margin:.5em 0;color:#b22222}\n"]
|
|
117
117
|
},] }
|
|
118
118
|
];
|
|
119
119
|
SelectComponent.ctorParameters = () => [];
|
package/fesm2015/metadev-lux.js
CHANGED
|
@@ -6,7 +6,7 @@ import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule, ReactiveFormsModule } fr
|
|
|
6
6
|
import { NavigationEnd, Router, ActivatedRoute, RouterModule } from '@angular/router';
|
|
7
7
|
import { AngularResizedEventModule } from 'angular-resize-event';
|
|
8
8
|
import { of, Subject, fromEvent, from, BehaviorSubject } from 'rxjs';
|
|
9
|
-
import { first, map,
|
|
9
|
+
import { debounceTime, first, map, takeUntil, filter, withLatestFrom, distinctUntilChanged, switchMap } from 'rxjs/operators';
|
|
10
10
|
import * as i1$1 from '@angular/common/http';
|
|
11
11
|
import { HttpClient, HttpClientModule } from '@angular/common/http';
|
|
12
12
|
|
|
@@ -97,6 +97,7 @@ const isInitialAndEmpty = (previousValue, newValue) => {
|
|
|
97
97
|
class AutocompleteComponent {
|
|
98
98
|
constructor(cd) {
|
|
99
99
|
this.cd = cd;
|
|
100
|
+
this.showSpinner = false;
|
|
100
101
|
this.touched = false;
|
|
101
102
|
this.completionList = [];
|
|
102
103
|
this.showCompletion = false;
|
|
@@ -107,6 +108,11 @@ class AutocompleteComponent {
|
|
|
107
108
|
this.label = '';
|
|
108
109
|
/** If canAddNewValues, user can type items not present in the data-source. */
|
|
109
110
|
this.canAddNewValues = false;
|
|
111
|
+
/** After cleaning the selection should the completion list remain open or closed:
|
|
112
|
+
* false: (default) close on filters, to clean a filter and select all.
|
|
113
|
+
* true: keep open (when the action most likely is to pick another one).
|
|
114
|
+
*/
|
|
115
|
+
this.keepOpenAfterDelete = false;
|
|
110
116
|
this.required = false;
|
|
111
117
|
this.resolveLabelsFunction = undefined;
|
|
112
118
|
this.populateFunction = undefined;
|
|
@@ -171,7 +177,7 @@ class AutocompleteComponent {
|
|
|
171
177
|
// End of Validator interface
|
|
172
178
|
clear() {
|
|
173
179
|
this.value = null;
|
|
174
|
-
this.toggleCompletion(
|
|
180
|
+
this.toggleCompletion(this.keepOpenAfterDelete, '');
|
|
175
181
|
}
|
|
176
182
|
completeLabel() {
|
|
177
183
|
if (this.value) {
|
|
@@ -180,7 +186,7 @@ class AutocompleteComponent {
|
|
|
180
186
|
}
|
|
181
187
|
else if (this.instance && this.resolveLabelsFunction) {
|
|
182
188
|
this.resolveLabelsFunction(this.instance, [this.value])
|
|
183
|
-
.pipe(first())
|
|
189
|
+
.pipe(debounceTime(1), first())
|
|
184
190
|
.subscribe((data) => {
|
|
185
191
|
this.label = findLabelForId(data, this.value) || '';
|
|
186
192
|
});
|
|
@@ -343,12 +349,34 @@ class AutocompleteComponent {
|
|
|
343
349
|
}
|
|
344
350
|
showCompletionList(text) {
|
|
345
351
|
this.setSameWidth();
|
|
346
|
-
this.
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
this.
|
|
351
|
-
|
|
352
|
+
const useSpinner = this.hasExternalDataSource();
|
|
353
|
+
this.spinnerVisibility(useSpinner, true);
|
|
354
|
+
setTimeout(() => {
|
|
355
|
+
// for spinner to be shown
|
|
356
|
+
this.computeCompletionList(text).subscribe({
|
|
357
|
+
next: (cl) => {
|
|
358
|
+
this.completionList = cl;
|
|
359
|
+
this.focusItem =
|
|
360
|
+
this.completionList.length > 0 ? this.completionList[0] : null;
|
|
361
|
+
this.showCompletion = true;
|
|
362
|
+
this.spinnerVisibility(useSpinner, false);
|
|
363
|
+
},
|
|
364
|
+
error: () => {
|
|
365
|
+
this.spinnerVisibility(useSpinner, false);
|
|
366
|
+
},
|
|
367
|
+
complete: () => {
|
|
368
|
+
this.spinnerVisibility(useSpinner, false);
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
}, 1);
|
|
372
|
+
}
|
|
373
|
+
spinnerVisibility(useSpinner, value) {
|
|
374
|
+
if (useSpinner) {
|
|
375
|
+
this.showSpinner = value;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
hasExternalDataSource() {
|
|
379
|
+
return !this.dataSource && !!this.instance && !!this.populateFunction;
|
|
352
380
|
}
|
|
353
381
|
computeCompletionList(text) {
|
|
354
382
|
const searchText = (text || '').toLowerCase();
|
|
@@ -359,7 +387,7 @@ class AutocompleteComponent {
|
|
|
359
387
|
return of(decorateDataSource(ds, searchText));
|
|
360
388
|
}
|
|
361
389
|
else if (this.instance && this.populateFunction) {
|
|
362
|
-
return this.populateFunction(this.instance, searchText).pipe(first(), map((ds) => {
|
|
390
|
+
return this.populateFunction(this.instance, searchText).pipe(debounceTime(1), first(), map((ds) => {
|
|
363
391
|
ds.filter((it) => ignoreAccentsInclude(it.label, searchText)).sort((a, b) => a.label.localeCompare(b.label));
|
|
364
392
|
return decorateDataSource(ds, searchText);
|
|
365
393
|
}));
|
|
@@ -373,7 +401,7 @@ AutocompleteComponent.idCounter = 0;
|
|
|
373
401
|
AutocompleteComponent.decorators = [
|
|
374
402
|
{ type: Component, args: [{
|
|
375
403
|
selector: 'lux-autocomplete',
|
|
376
|
-
template: "<div class=\"lux-autocomplete\" (blur)=\"toggleCompletion(false, i0.value)\">\n <div class=\"lux-autocomplete-box\">\n <input\n #i0\n [id]=\"inputId\"\n [(ngModel)]=\"label\"\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled || null\"\n [attr.readonly]=\"readonly || null\"\n (keydown)=\"onKeydown($event, i0.value)\"\n (keypress)=\"onKeypress($event, i0.value)\"\n (keyup)=\"onKeyup($event, i0.value)\"\n (blur)=\"onLostFocus()\"\n (focus)=\"toggleCompletion(true, i0.value)\"\n (click)=\"toggleCompletion(true, i0.value)\"\n (resized)=\"onInputResized()\"\n (window:resize)=\"onInputResized()\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n [attr.aria-expanded]=\"showCompletion\"\n aria-haspopup=\"true\"\n attr.aria-owns=\"{{ inputId + '_list' }}\"\n [attr.aria-activedescendant]=\"selectedOption\"\n />\n <button\n
|
|
404
|
+
template: "<div class=\"lux-autocomplete\" (blur)=\"toggleCompletion(false, i0.value)\">\n <div class=\"lux-autocomplete-box\">\n <input\n #i0\n [id]=\"inputId\"\n [(ngModel)]=\"label\"\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled || null\"\n [attr.readonly]=\"readonly || null\"\n (keydown)=\"onKeydown($event, i0.value)\"\n (keypress)=\"onKeypress($event, i0.value)\"\n (keyup)=\"onKeyup($event, i0.value)\"\n (blur)=\"onLostFocus()\"\n (focus)=\"toggleCompletion(true, i0.value)\"\n (click)=\"toggleCompletion(true, i0.value)\"\n (resized)=\"onInputResized()\"\n (window:resize)=\"onInputResized()\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n [attr.aria-expanded]=\"showCompletion\"\n aria-haspopup=\"true\"\n attr.aria-owns=\"{{ inputId + '_list' }}\"\n [attr.aria-activedescendant]=\"selectedOption\"\n />\n <div *ngIf=\"canAddNewValues\" class=\"icon-suggestions\"></div>\n <div *ngIf=\"showSpinner; else noLoading\" class=\"icon-spinner\"></div>\n <ng-template #noLoading>\n <button\n *ngIf=\"!disabled && i0.value; else dropdown\"\n class=\"icon-clear\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n ></button>\n <ng-template #dropdown>\n <div\n class=\"icon-dropdown\"\n (click)=\"toggleCompletion(!showCompletion, i0.value)\"\n ></div>\n </ng-template>\n </ng-template>\n </div>\n <div\n #completeDiv\n [class.showCompletion]=\"showCompletion\"\n class=\"lux-completion-list\"\n id=\"{{ inputId + '_list' }}\"\n >\n <ul>\n <li\n *ngFor=\"let item of completionList; let index = index\"\n id=\"{{ inputId + '_' + index }}\"\n class=\"lux-completion-item\"\n [class.selected]=\"focusItem && item.key === focusItem.key\"\n (click)=\"complete(item)\"\n [attr.aria-label]=\"item.label\"\n >\n <span>{{ item.labelPrefix }}</span>\n <span class=\"bold\">{{ item.labelMatch }}</span>\n <span>{{ item.labelPostfix }}</span>\n </li>\n </ul>\n </div>\n</div>\n",
|
|
377
405
|
providers: [
|
|
378
406
|
{
|
|
379
407
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -386,7 +414,7 @@ AutocompleteComponent.decorators = [
|
|
|
386
414
|
useExisting: forwardRef(() => AutocompleteComponent)
|
|
387
415
|
}
|
|
388
416
|
],
|
|
389
|
-
styles: [".lux-autocomplete .lux-autocomplete-box{display:grid;grid-template-columns:
|
|
417
|
+
styles: [".lux-autocomplete .lux-autocomplete-box{display:grid;grid-template-columns:1fr -webkit-max-content;grid-template-columns:1fr max-content}.lux-autocomplete input{padding:.1rem 1.5rem .1rem .5rem;padding:var(--lux-autocomplete-input-padding, .1rem 1.5rem .1rem .5rem);text-overflow:ellipsis;grid-row:1;grid-column-start:1;grid-column-end:3}.lux-autocomplete .icon-suggestions{grid-row:1;grid-column:2;width:1.5rem;border:none;background-color:transparent;background:url(/assets/img/suggestions.svg) no-repeat center;background-size:.5rem .5rem;z-index:1;position:relative;left:-1rem}.lux-autocomplete .icon-clear{grid-row:1;grid-column:2;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);border:none;background-color:transparent;background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-autocomplete .icon-dropdown{grid-row:1;grid-column:2;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);height:1.3rem;height:var(--lux-autocomplete-icon-height, 1.3rem);border:none;background-color:transparent;background:url(/assets/img/drop-down-arrow.svg) no-repeat center;background:var(--lux-autocomplete-icon-dropdown, url(/assets/img/drop-down-arrow.svg) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-autocomplete .icon-spinner{grid-row:1;grid-column:2;width:1.5rem;border:none;background-color:transparent;background:url(/assets/img/spinner.svg) no-repeat center;background-size:1.2rem 1.2rem;z-index:1}.lux-completion-list{visibility:collapse;position:absolute;border:1px solid #ccc;margin:0;padding:0;max-height:10rem;overflow:auto;z-index:2}.lux-completion-list ul{list-style:none;margin:0;padding:0}.showCompletion{visibility:visible}.lux-completion-item{background-color:#fff;color:#000;padding:.1rem .5rem;cursor:pointer}.selected{background-color:#2e2eac;color:#fff}.disabled{background-color:#f0f0f0;color:#444}.disabled .selected{background-color:#9898ec;color:#fff}.bold{font-weight:bold}\n"]
|
|
390
418
|
},] }
|
|
391
419
|
];
|
|
392
420
|
AutocompleteComponent.ctorParameters = () => [
|
|
@@ -402,6 +430,7 @@ AutocompleteComponent.propDecorators = {
|
|
|
402
430
|
readonly: [{ type: Input }],
|
|
403
431
|
label: [{ type: Input }],
|
|
404
432
|
canAddNewValues: [{ type: Input }],
|
|
433
|
+
keepOpenAfterDelete: [{ type: Input }],
|
|
405
434
|
value: [{ type: Input }],
|
|
406
435
|
dataSource: [{ type: Input }],
|
|
407
436
|
required: [{ type: Input }],
|
|
@@ -655,7 +684,7 @@ AutocompleteListComponent.decorators = [
|
|
|
655
684
|
useExisting: forwardRef(() => AutocompleteListComponent)
|
|
656
685
|
}
|
|
657
686
|
],
|
|
658
|
-
styles: [".new-entry{margin-left:1.5rem;display:grid;grid-template-columns:
|
|
687
|
+
styles: [".new-entry{margin-left:1.5rem;display:grid;grid-template-columns:-webkit-max-content -webkit-max-content;grid-template-columns:max-content max-content}.new-entry lux-autocomplete{grid-column:1;grid-row:1}.new-entry .add-item{grid-column:2;grid-row:1;border:none;background:url(/assets/img/create.png) no-repeat .2rem .2rem;background:var(--lux-autocomplete-list-add-icon, url(/assets/img/create.png) no-repeat .2rem .2rem);background-size:1.1rem;background-size:var(--lux-autocomplete-list-add-icon-size, 1.1rem);height:1.4rem;height:var(--lux-autocomplete-list-add-icon-height, 1.4rem);width:1.4rem;width:var(--lux-autocomplete-list-add-icon-width, 1.4rem)}.remove-item{margin-left:.5rem;border:none;background:url(/assets/img/delete.svg) no-repeat .2rem .1rem;background:var(--lux-autocomplete-list-remove-icon, url(/assets/img/delete.svg) no-repeat .2rem .1rem);height:1.2rem;height:var(--lux-autocomplete-list-remove-icon-height, 1.2rem);width:1.3rem;width:var(--lux-autocomplete-list-remove-icon-width, 1.3rem);position:relative;top:.2rem;top:var(--lux-autocomplete-list-remove-icon-top, .2rem);background-size:1rem 1rem;background-size:var(--lux-autocomplete-list-remove-icon-size, 1rem 1rem)}\n"]
|
|
659
688
|
},] }
|
|
660
689
|
];
|
|
661
690
|
AutocompleteListComponent.propDecorators = {
|
|
@@ -798,7 +827,7 @@ CheckboxComponent.decorators = [
|
|
|
798
827
|
useExisting: forwardRef(() => CheckboxComponent)
|
|
799
828
|
}
|
|
800
829
|
],
|
|
801
|
-
styles: [".switch{display:flex;flex-flow:row wrap;align-items:center}label{padding-right:1.1rem}.switch-item{padding-right:.5em}.slider.round{border-radius:.7rem;width:3.1rem;height:1.4rem}.slider.round:before{border-radius:50%}.switch input{opacity:0;width:0;height:0}.slider{cursor:pointer;position:relative;top:-.7rem;background-color:#ccc;transition:.4s}.slider.on{background-color:#2196f3}.slider:before{position:absolute;content:\"\";height:1rem;width:1rem;left:.2rem;bottom:.2rem;background-color:#fff;transition:.4s}input:focus+.slider{box-shadow:0 0 1px #2196f3}
|
|
830
|
+
styles: [".switch{display:flex;flex-flow:row wrap;align-items:center}label{padding-right:1.1rem}.switch-item{padding-right:.5em}.slider.round{border-radius:.7rem;width:3.1rem;height:1.4rem}.slider.round:before{border-radius:50%}.switch input{opacity:0;width:0;height:0}.slider{cursor:pointer;position:relative;top:-.7rem;background-color:#ccc;transition:.4s}.slider.on{background-color:#2196f3}.slider:before{position:absolute;content:\"\";height:1rem;width:1rem;left:.2rem;bottom:.2rem;background-color:#fff;transition:.4s}.slider.on:before{transform:translate(26px)}input:focus+.slider{box-shadow:0 0 1px #2196f3}\n"]
|
|
802
831
|
},] }
|
|
803
832
|
];
|
|
804
833
|
CheckboxComponent.ctorParameters = () => [];
|
|
@@ -819,6 +848,8 @@ class InputComponent {
|
|
|
819
848
|
this.dirty = false;
|
|
820
849
|
this.lastErrors = null;
|
|
821
850
|
this._value = '';
|
|
851
|
+
this._pattern = undefined;
|
|
852
|
+
this._regexp = undefined;
|
|
822
853
|
this.userErrors = {
|
|
823
854
|
en: {
|
|
824
855
|
required: 'Required field.',
|
|
@@ -851,6 +882,24 @@ class InputComponent {
|
|
|
851
882
|
get disabled() {
|
|
852
883
|
return this._disabled;
|
|
853
884
|
}
|
|
885
|
+
set pattern(p) {
|
|
886
|
+
this._pattern = p;
|
|
887
|
+
if (p === undefined) {
|
|
888
|
+
this._regexp = undefined;
|
|
889
|
+
}
|
|
890
|
+
else {
|
|
891
|
+
try {
|
|
892
|
+
this._regexp = new RegExp(p);
|
|
893
|
+
}
|
|
894
|
+
catch (e) {
|
|
895
|
+
this._pattern = undefined;
|
|
896
|
+
this._regexp = undefined;
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
get pattern() {
|
|
901
|
+
return this._pattern;
|
|
902
|
+
}
|
|
854
903
|
set currency(v) {
|
|
855
904
|
this._currency = v.toUpperCase();
|
|
856
905
|
}
|
|
@@ -942,6 +991,13 @@ class InputComponent {
|
|
|
942
991
|
result = result || {};
|
|
943
992
|
result.required = { value, reason: 'Required field.' };
|
|
944
993
|
}
|
|
994
|
+
if (this._regexp && hasValue(value) && !this._regexp.test(value)) {
|
|
995
|
+
result = result || {};
|
|
996
|
+
result.pattern = {
|
|
997
|
+
value,
|
|
998
|
+
reason: `Value must follow the pattern: ${this._pattern}`
|
|
999
|
+
};
|
|
1000
|
+
}
|
|
945
1001
|
if (this.type === 'email' && hasValue(value) && !isValidEmail(value)) {
|
|
946
1002
|
result = result || {};
|
|
947
1003
|
result.email = { value, reason: 'Invalid email.' };
|
|
@@ -1004,6 +1060,9 @@ class InputComponent {
|
|
|
1004
1060
|
? this.inputId
|
|
1005
1061
|
: `${this.type}$${InputComponent.idCounter++}`;
|
|
1006
1062
|
}
|
|
1063
|
+
onLostFocus() {
|
|
1064
|
+
this.markAsTouched();
|
|
1065
|
+
}
|
|
1007
1066
|
onKeyUp(newValue) {
|
|
1008
1067
|
this.value = newValue;
|
|
1009
1068
|
}
|
|
@@ -1096,7 +1155,7 @@ InputComponent.idCounter = 0;
|
|
|
1096
1155
|
InputComponent.decorators = [
|
|
1097
1156
|
{ type: Component, args: [{
|
|
1098
1157
|
selector: 'lux-input',
|
|
1099
|
-
template: "<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min
|
|
1158
|
+
template: "<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min?.toString() || undefined\"\n [attr.max]=\"max?.toString() || undefined\"\n [attr.step]=\"step?.toString() || undefined\"\n [attr.pattern]=\"pattern || undefined\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"className\"\n (keyup)=\"onKeyUp(input.value)\"\n (change)=\"onChangeValue(input.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<textarea\n #textarea\n *ngIf=\"type === 'textarea'\"\n placement=\"top\"\n [id]=\"inputId\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.cols]=\"cols?.toString() || undefined\"\n [attr.rows]=\"rows?.toString() || undefined\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"className\"\n (keyup)=\"onKeyUp(textarea.value)\"\n (change)=\"onChangeValue(textarea.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n></textarea>\n<div *ngIf=\"currency && currency === 'EUR'\" class=\"postfix\">\n <span>\u20AC</span>\n</div>\n<div *ngIf=\"isPercentage()\" class=\"postfix\">\n <span>%</span>\n</div>\n<div *ngIf=\"isPermillage()\" class=\"postfix\">\n <span>\u2030</span>\n</div>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.email\">{{ userErrors[this.lang].email }}</div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\n",
|
|
1100
1159
|
providers: [
|
|
1101
1160
|
{
|
|
1102
1161
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -1109,7 +1168,7 @@ InputComponent.decorators = [
|
|
|
1109
1168
|
useExisting: forwardRef(() => InputComponent)
|
|
1110
1169
|
}
|
|
1111
1170
|
],
|
|
1112
|
-
styles: [":host{position:relative;display:flex;
|
|
1171
|
+
styles: [":host{position:relative;display:flex;align-items:stretch;width:20rem}input,textarea{margin:inherit;margin:var(--lux-input-margin, inherit);padding:inherit;padding:var(--lux-input-padding, inherit)}.alert{padding:.2rem 2rem;background:#fe2e2e;color:#fff;font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol,.postfix,.prefix{display:inline-block;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-weight:400;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem;line-height:1.5px;line-height:var(--lux-input-postfix-line-height, 1.5px);font-size:1rem;font-size:var(--lux-input-postfix-font-size, 1rem);height:inherit;height:var(--lux-input-postfix-height, inherit)}.prefix{border-top-right-radius:0;border-bottom-right-radius:0}.postfix{border-top-left-radius:0;border-bottom-left-radius:0}.readonly{border:none}.readonly:focus{border:none;outline:none}\n"]
|
|
1113
1172
|
},] }
|
|
1114
1173
|
];
|
|
1115
1174
|
InputComponent.ctorParameters = () => [];
|
|
@@ -1127,6 +1186,7 @@ InputComponent.propDecorators = {
|
|
|
1127
1186
|
ariaLabel: [{ type: Input, args: ['aria-label',] }],
|
|
1128
1187
|
readonly: [{ type: Input }],
|
|
1129
1188
|
disabled: [{ type: Input }],
|
|
1189
|
+
pattern: [{ type: Input }],
|
|
1130
1190
|
currency: [{ type: Input }],
|
|
1131
1191
|
placeholder: [{ type: Input }],
|
|
1132
1192
|
required: [{ type: Input }],
|
|
@@ -1257,7 +1317,7 @@ FilterComponent.decorators = [
|
|
|
1257
1317
|
useExisting: forwardRef(() => FilterComponent)
|
|
1258
1318
|
}
|
|
1259
1319
|
],
|
|
1260
|
-
styles: [".filter{display:grid;grid-template-columns:auto 1.5rem 1.5rem .5rem auto}.filter input{grid-row:1;grid-column-start:1;grid-column-end:4}.filter .hide{visibility:collapse}.filter .clear-indicator{grid-row:1;grid-column:2;border:none}.filter .search-indicator{grid-row:1;grid-column:3}.filter .btn-search{grid-row:1;grid-column:5}.filter .icon-search{background:url(/assets/img/filter-search.png) no-repeat;background-size:1rem;background-position:
|
|
1320
|
+
styles: [".filter{display:grid;grid-template-columns:auto 1.5rem 1.5rem .5rem auto}.filter input{grid-row:1;grid-column-start:1;grid-column-end:4}.filter .hide{visibility:collapse}.filter .clear-indicator{grid-row:1;grid-column:2;border:none}.filter .search-indicator{grid-row:1;grid-column:3}.filter .btn-search{grid-row:1;grid-column:5}.filter .icon-search{background:url(/assets/img/filter-search.png) no-repeat center;background:var(--lux-filter-icon-search, url(/assets/img/filter-search.png) no-repeat center);background-size:1rem;background-size:var(--lux-filter-icon-bg-size, 1rem);background-position:center;width:1rem;width:var(--lux-filter-icon-width, 1rem)}.filter .icon-clear{background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-filter-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:1rem;background-size:var(--lux-filter-icon-bg-size, 1rem);background-position:center}\n"]
|
|
1261
1321
|
},] }
|
|
1262
1322
|
];
|
|
1263
1323
|
FilterComponent.ctorParameters = () => [];
|
|
@@ -2160,7 +2220,7 @@ GeolocationComponent.decorators = [
|
|
|
2160
2220
|
useExisting: forwardRef(() => GeolocationComponent)
|
|
2161
2221
|
}
|
|
2162
2222
|
],
|
|
2163
|
-
styles: [".lux-geolocation{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:30rem}.alert{padding:.2rem 2rem;background:#fe2e2e;color:#fff;font-family:Consolas,monospace;width:45%;margin-right:1rem}.
|
|
2223
|
+
styles: [".lux-geolocation{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:30rem}.alert{padding:.2rem 2rem;background:#fe2e2e;color:#fff;font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef}.rounded,.postfix,.infix,.prefix{border:1px solid #ced4da;border-radius:.25rem}.prefix{border-top-right-radius:0;border-bottom-right-radius:0}.infix{border-radius:0}.postfix{border-top-left-radius:0;border-bottom-left-radius:0}.btn,.btn-cancel,.btn-select{margin:.2em}.btn-select{background-color:#b4b8f0}.btn-cancel{background-color:#ffced7}.lux-modal-body{padding:0}.map-container{width:90vw;height:45vh}.readonly:focus{outline:none}\n"]
|
|
2164
2224
|
},] }
|
|
2165
2225
|
];
|
|
2166
2226
|
GeolocationComponent.ctorParameters = () => [
|
|
@@ -2469,7 +2529,7 @@ LuxBreadcrumbComponent.decorators = [
|
|
|
2469
2529
|
{ type: Component, args: [{
|
|
2470
2530
|
selector: 'lux-breadcrumb',
|
|
2471
2531
|
template: "<ul class=\"lux-breadcrumb\">\n <li *ngFor=\"let breadcrumb of breadcrumbs; last as isLast; first as isFirst\"\n class=\"lux-breadcrumb-item\">\n <a [class.first]=\"isFirst\" routerLink=\"{{ breadcrumb.url }}\">{{ breadcrumb.label }}</a>\n <div *ngIf=\"!isLast\" class=\"lux-breadcrumb-separator\"></div>\n </li>\n</ul>\n",
|
|
2472
|
-
styles: [".lux-breadcrumb{padding:10px 12px;list-style:none;list-style-type:none}.lux-breadcrumb li{display:inline;font-size:.8em}.lux-breadcrumb li a.first{font-weight:
|
|
2532
|
+
styles: [".lux-breadcrumb{padding:10px 12px;list-style:none;list-style-type:none}.lux-breadcrumb li{display:inline;font-size:.8em}.lux-breadcrumb li a.first{font-weight:bold}.lux-breadcrumb li+li:before{padding:8px;color:#000}.lux-breadcrumb li a{text-decoration:underline}ol.lux-breadcrumb li a:hover{text-decoration:underline}.lux-breadcrumb a{cursor:hand}.lux-breadcrumb-separator{color:red;position:relative;top:5px;height:16px;padding:0 8px;background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 512 512%22%3E %3Cpath d%3D%22M294.1 256L167 129c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.3 34 0L345 239c9.1 9.1 9.3 23.7.7 33.1L201.1 417c-4.7 4.7-10.9 7-17 7s-12.3-2.3-17-7c-9.4-9.4-9.4-24.6 0-33.9l127-127.1z%22%2F%3E%3C%2Fsvg%3E\");background-repeat:no-repeat;display:inline-block}\n"]
|
|
2473
2533
|
},] }
|
|
2474
2534
|
];
|
|
2475
2535
|
LuxBreadcrumbComponent.ctorParameters = () => [
|
|
@@ -2780,7 +2840,7 @@ MapComponent.decorators = [
|
|
|
2780
2840
|
{ type: Component, args: [{
|
|
2781
2841
|
selector: 'lux-map',
|
|
2782
2842
|
template: "<div [id]=\"mapId\" class=\"map\" (resized)=\"onResize()\"></div>\n",
|
|
2783
|
-
styles: [".map{min-height:100px;height:100%;min-width:160px;width:100%}"]
|
|
2843
|
+
styles: [".map{min-height:100px;height:100%;min-width:160px;width:100%}\n"]
|
|
2784
2844
|
},] }
|
|
2785
2845
|
];
|
|
2786
2846
|
MapComponent.ctorParameters = () => [
|
|
@@ -2917,7 +2977,7 @@ PaginationComponent.decorators = [
|
|
|
2917
2977
|
{ type: Component, args: [{
|
|
2918
2978
|
selector: 'lux-pagination',
|
|
2919
2979
|
template: "<div class=\"lux-pagination\" *ngIf=\"showPagination\">\n <ng-container *ngIf=\"!hidePrevious\">\n <a\n luxTooltip\n [content]=\"first\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onFirst()\"\n [ngClass]=\"{\n enabledFirstLast: !hidePrevious\n }\"\n class=\"button-pagination icon arrow-left-end\"\n ></a>\n <a\n luxTooltip\n [content]=\"previous\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onPrevious()\"\n [ngClass]=\"{\n enabledFirstLast: !hidePrevious\n }\"\n class=\"button-pagination icon arrow-left\"\n ></a>\n </ng-container>\n\n <span class=\"ellipsis\" *ngIf=\"displayPreviousEllipsis\">...</span>\n\n <ng-container *ngFor=\"let pageNum of pages\">\n <a\n luxTooltip\n content=\"{{ pageNum + 1 }}\"\n placement=\"top\"\n delay=\"500\"\n [ngClass]=\"{\n disabled: pageNum === paginationInfo.page,\n enabled: pageNum !== paginationInfo.page\n }\"\n class=\"button-pagination\"\n (click)=\"onPage(pageNum)\"\n >{{ pageNum + 1 }}</a\n >\n </ng-container>\n\n <span class=\"ellipsis\" *ngIf=\"displayNextEllipsis\">...</span>\n\n <ng-container *ngIf=\"!lastPage\">\n <a\n luxTooltip\n [content]=\"next\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onNext()\"\n [ngClass]=\"{\n enabledFirstLast: !lastPage\n }\"\n class=\"button-pagination icon arrow-right\"\n ></a>\n <a\n luxTooltip\n [content]=\"last\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onLast()\"\n [ngClass]=\"{\n enabledFirstLast: !lastPage\n }\"\n class=\"button-pagination icon arrow-right-end\"\n ></a>\n </ng-container>\n</div>\n",
|
|
2920
|
-
styles: [".lux-pagination{display:flex;flex-direction:row;margin:2% 0;width:100%;background
|
|
2980
|
+
styles: [".lux-pagination{display:flex;flex-direction:row;margin:2% 0;width:100%;background:white;align-items:center}.disabled{cursor:not-allowed;border:1px solid #325c81;border:var(--lux-pagination-disabled-border, 1px solid #325c81);border-radius:10%;border-radius:var(--lux-pagination-disabled-border-radius, 10%);padding:1%;margin:0 .7%;color:#fff;color:var(--lux-pagination-disabled-color, white);background-color:#325c81;background-color:var(--lux-pagination-disabled-background-color, #325c81);text-decoration:none;pointer-events:none}.enabled{border:1px solid #cfcfcf;border:var(--lux-pagination-enabled-border, 1px solid #cfcfcf);border-radius:10%;border-radius:var(--lux-pagination-enabled-border-radius, 10%);padding:1%;margin:0 .7%;color:#325c81;color:var(--lux-pagination-enabled-color, #325c81);width:-webkit-min-content;width:-moz-min-content;width:min-content;cursor:pointer}.enabledFirstLast{border:1px solid #cfcfcf;border-radius:10%;padding:1%;color:#325c81;margin:0 .7%;width:-webkit-min-content;width:-moz-min-content;width:min-content;cursor:pointer}.ellipsis{margin:0 .5rem;padding:0;color:#325c81;width:-webkit-min-content;width:-moz-min-content;width:min-content}.button-pagination{width:1em;width:var(--lux-pagination-button-width, 1em);height:1.2em;height:var(--lux-pagination-button-height, 1.2em);font-size:80%;font-size:var(--lux-pagination-font-size, 80%);text-align:center}.icon{background-size:1.3em 1.4em;background-position:center;background-repeat:no-repeat}.arrow-right{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.4em}.arrow-left{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");transform:rotate(180deg);background-position:.4em}.arrow-right-end{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_3%22 points%3D%2241.8%2C45.7 30.4%2C44.3 50.8%2C24 30.4%2C3.7 41.8%2C2.3 63.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.1em}.arrow-left-end{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_3%22 points%3D%2241.8%2C45.7 30.4%2C44.3 50.8%2C24 30.4%2C3.7 41.8%2C2.3 63.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.1em;transform:rotate(180deg)}@media only screen and (min-width: 300px) and (max-width: 500px){.arrow-right{background-position:.2em}.arrow-left{background-position:.2em}.arrow-right-end{background-position:0em}.arrow-left-end{background-position:0em}}@media only screen and (min-width: 500px) and (max-width: 850px){.arrow-right{background-position:.3em}.arrow-left{background-position:.3em}.arrow-right-end{background-position:0em}.arrow-left-end{background-position:0em}}@media only screen and (min-width: 900px){.arrow-right{background-position:.2em}.arrow-left{background-position:.2em}.arrow-right-end{background-position:0em}.arrow-left-end{background-position:0em}}\n"]
|
|
2921
2981
|
},] }
|
|
2922
2982
|
];
|
|
2923
2983
|
PaginationComponent.ctorParameters = () => [];
|
|
@@ -3024,7 +3084,7 @@ RadiogroupComponent.decorators = [
|
|
|
3024
3084
|
useExisting: forwardRef(() => RadiogroupComponent)
|
|
3025
3085
|
}
|
|
3026
3086
|
],
|
|
3027
|
-
styles: [".radiogroup{display:flex}.radio-item{border-radius:0;border:1px solid #ccc;padding:0 .5rem}.radio-item input{display:none}.radio-item label{margin-top:.3rem;margin-bottom:.3rem}.radio-start{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.radio-end{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.
|
|
3087
|
+
styles: [".radiogroup{display:flex}.radio-item{border-radius:0;border:1px solid #ccc;padding:0 .5rem;padding:var(--lux-radiogroup-padding, 0rem .5rem)}.radio-item input{display:none}.radio-item label{color:initial;color:var(--lux-radiogroup-color, initial);font-size:initial;font-size:var(--lux-radiogroup-font-size, initial);margin-top:.3rem;margin-bottom:.3rem}.radio-item.selected{background-color:#2e2eac;background-color:var(--lux-radiogroup-selected-background-color, #2e2eac)}.radio-item.selected label{font-size:initial;font-size:var(--lux-radiogroup-font-size, initial);color:#fff;color:var(--lux-radiogroup-selected-color, white)}.radio-start{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.radio-end{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.disabled .radio-item{background-color:#f0f0f0;color:#444}.disabled .selected{font-size:initial;font-size:var(--lux-radiogroup-selected-disabled-font-size, initial);color:#fff;color:var(--lux-radiogroup-selected-disabled-color, white);background-color:#9898ec;background-color:var(--lux-radiogroup-selected-disabled-background-color, #9898ec)}.unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}\n"]
|
|
3028
3088
|
},] }
|
|
3029
3089
|
];
|
|
3030
3090
|
RadiogroupComponent.ctorParameters = () => [];
|
|
@@ -3152,7 +3212,7 @@ SelectComponent.decorators = [
|
|
|
3152
3212
|
useExisting: forwardRef(() => SelectComponent)
|
|
3153
3213
|
}
|
|
3154
3214
|
],
|
|
3155
|
-
styles: [".lux-select{margin-bottom:.5em}.lux-select .list{margin:1em;padding-bottom:.2em;list-style-type:square}.lux-select .list span{margin-bottom:.3em}.remove{margin-left:2em;font-size:.65em;color:#b22222;background:transparent;border:2px solid #
|
|
3215
|
+
styles: [".lux-select{margin-bottom:.5em}.lux-select .list{margin:1em;padding-bottom:.2em;list-style-type:square}.lux-select .list span{margin-bottom:.3em}.remove{margin-left:2em;font-size:.65em;color:#b22222;background:transparent;border:2px solid #BBB}.add-new-item{display:inline-flex;margin-left:2.2em;height:1.6em}.error{margin:.5em 0;color:#b22222}\n"]
|
|
3156
3216
|
},] }
|
|
3157
3217
|
];
|
|
3158
3218
|
SelectComponent.ctorParameters = () => [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadev-lux.js","sources":["../../../projects/lux/src/lib/helperFns.ts","../../../projects/lux/src/lib/autocomplete/autocomplete.component.ts","../../../projects/lux/src/lib/lang.ts","../../../projects/lux/src/lib/autocomplete-list/autocomplete-list.component.ts","../../../projects/lux/src/lib/checkbox/checkbox.component.ts","../../../projects/lux/src/lib/input/input.component.ts","../../../projects/lux/src/lib/filter/filter.component.ts","../../../projects/lux/src/lib/modal/modal-ref.ts","../../../projects/lux/src/lib/modal/util.ts","../../../projects/lux/src/lib/modal/modal-dismiss-reasons.ts","../../../projects/lux/src/lib/modal/modal-window.ts","../../../projects/lux/src/lib/modal/modal-backdrop.ts","../../../projects/lux/src/lib/modal/modal-config.ts","../../../projects/lux/src/lib/modal/modal-stack.ts","../../../projects/lux/src/lib/modal/modal.service.ts","../../../projects/lux/src/lib/geolocation/geolocation.service.ts","../../../projects/lux/src/lib/geolocation/geolocation.component.ts","../../../projects/lux/src/lib/tooltip/placement.ts","../../../projects/lux/src/lib/tooltip/tooltip.component.ts","../../../projects/lux/src/lib/tooltip/tooltop-content.ts","../../../projects/lux/src/lib/tooltip/tooltip.service.ts","../../../projects/lux/src/lib/tooltip/tooltip.directive.ts","../../../projects/lux/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/lux/src/lib/geolocation/openlayer-loader.service.ts","../../../projects/lux/src/lib/map/map.component.ts","../../../projects/lux/src/lib/pagination/pagination.component.ts","../../../projects/lux/src/lib/radiogroup/radiogroup.component.ts","../../../projects/lux/src/lib/select/select.component.ts","../../../projects/lux/src/lib/voice-recognition/voice-recognition.directive.ts","../../../projects/lux/src/lib/window/window.service.ts","../../../projects/lux/src/lib/lux.module.ts","../../../projects/lux/src/public-api.ts","../../../projects/lux/src/metadev-lux.ts"],"sourcesContent":["// undefined and null functions\r\n\r\nexport const exists = (value: any): boolean =>\r\n value !== null && value !== undefined;\r\n\r\nexport const hasValue = (value: any): boolean =>\r\n exists(value) && (typeof value === 'string' ? !isEmptyString(value) : true);\r\n\r\n// string functions\r\n\r\nexport const isEmptyString = (value: string): boolean => value.trim() === '';\r\n\r\nexport const isValidEmail = (value: string): boolean => {\r\n const re =\r\n /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;\r\n return re.test(String(value).toLowerCase().trim());\r\n};\r\n\r\n// date functions\r\n\r\nexport const normalizeDate = (value: any): string => {\r\n if (typeof value === 'string' && value.length > 10) {\r\n return value.substr(0, 10);\r\n }\r\n return value ? value.toString() : null;\r\n};\r\n\r\n// number functions\r\n\r\nexport const isValidNumber = (\r\n value: string | number | undefined | null\r\n): boolean => (hasValue(value) ? !Number.isNaN(Number(value)) : false);\r\n\r\nexport const numberOfDecimalDigits = (\r\n x: number | string\r\n): number | undefined => {\r\n if (isValidNumber(x)) {\r\n const xString = String(Number(x));\r\n if (xString === 'Infinity') {\r\n return 0;\r\n }\r\n const indexOfE = xString.indexOf('e');\r\n if (indexOfE >= 0) {\r\n return 0;\r\n }\r\n const indexOfDecimalPoint = xString.indexOf('.');\r\n if (indexOfDecimalPoint < 0) {\r\n return 0;\r\n } else {\r\n return xString.length - indexOfDecimalPoint - 1;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const numberOfWholeDigits = (x: number | string): number | undefined => {\r\n if (isValidNumber(x)) {\r\n let xString = String(Number(x));\r\n if (xString.indexOf('-') === 0) {\r\n xString = xString.slice(1, xString.length);\r\n }\r\n if (xString === 'Infinity') {\r\n return Infinity;\r\n }\r\n if (xString.indexOf('0') === 0) {\r\n xString = xString.slice(1, xString.length);\r\n }\r\n const indexOfE = xString.indexOf('e');\r\n if (indexOfE >= 0) {\r\n return Number(xString.slice(indexOfE + 1, xString.length)) + 1;\r\n }\r\n const indexOfDecimalPoint = xString.indexOf('.');\r\n if (indexOfDecimalPoint < 0) {\r\n return xString.length;\r\n } else {\r\n return indexOfDecimalPoint;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const roundToMultipleOf = (x: number, modulo: number): number => {\r\n const moduloString = String(modulo);\r\n // approximates the result\r\n // prone to inexactitude because of floating point arithmetic\r\n const approximation = Math.round(x / modulo) * modulo;\r\n const approximationString = String(approximation);\r\n // remove useless decimals\r\n const uselessDecimalsInApproximation =\r\n numberOfDecimalDigits(approximationString) -\r\n numberOfDecimalDigits(moduloString);\r\n const resultString = approximationString.slice(\r\n 0,\r\n approximationString.length - uselessDecimalsInApproximation\r\n );\r\n return Number(resultString);\r\n};\r\n\r\n// other functions\r\n\r\nexport const isInitialAndEmpty = (\r\n previousValue: any,\r\n newValue: any\r\n): boolean => {\r\n const isPrevArray = Array.isArray(previousValue);\r\n const isNewArray = Array.isArray(newValue);\r\n return !(\r\n (isPrevArray ? previousValue.length !== 0 : Boolean(previousValue)) ||\r\n (isNewArray ? newValue.length !== 0 : Boolean(newValue))\r\n );\r\n};\r\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { first, map } from 'rxjs/operators';\n// Do not remove this import: needed in the template\nimport { ResizedEvent } from 'angular-resize-event';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport {\n DataSource,\n DataSourceItem,\n DecoratedDataSource,\n DecoratedDataSourceItem\n} from '../datasource';\nimport { isInitialAndEmpty } from '../helperFns';\n\n@Component({\n selector: 'lux-autocomplete',\n templateUrl: './autocomplete.component.html',\n styleUrls: ['./autocomplete.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AutocompleteComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => AutocompleteComponent)\n }\n ]\n})\nexport class AutocompleteComponent\n implements ControlValueAccessor, Validator, OnInit, AfterViewInit\n{\n static idCounter = 0;\n\n @ViewChild('i0', { static: true }) i0: ElementRef;\n @ViewChild('completeDiv', { static: true }) completeDiv: ElementRef;\n\n private _dataSource: DataSource<any, string>;\n private _placeholder: string;\n private _value: any;\n\n touched = false;\n completionList: DecoratedDataSource = [];\n showCompletion = false;\n focusItem: DataSourceItem<any, string>;\n\n @Output() valueChange = new EventEmitter<any>();\n @Output() dataSourceChange = new EventEmitter<DataSource<any, string>>();\n\n @Input() public inputId: string;\n @Input() public disabled: boolean | null = null;\n @Input() public readonly: boolean | null = null;\n @Input() label = '';\n /** If canAddNewValues, user can type items not present in the data-source. */\n @Input() canAddNewValues = false;\n\n @Input()\n get value(): any {\n return this._value;\n }\n set value(v: any) {\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n this._value = v;\n this.onChange(v);\n this.completeLabel();\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n @Input()\n get dataSource(): DataSource<any, string> {\n return this._dataSource;\n }\n set dataSource(v: DataSource<any, string>) {\n this._dataSource = v;\n this.dataSourceChange.emit(v);\n }\n @Input() required = false;\n\n @Input()\n set placeholder(v: string) {\n this._placeholder = v;\n }\n get placeholder(): string {\n return this._placeholder ? this._placeholder : '';\n }\n\n @Input() resolveLabelsFunction?: (\n instance: any,\n keys: any[]\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() populateFunction?: (\n instance: any,\n search: string\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() instance: any;\n\n constructor(private cd: ChangeDetectorRef) {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched && !this.disabled) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n clear(): void {\n this.value = null;\n this.toggleCompletion(true, '');\n }\n\n private completeLabel(): void {\n if (this.value) {\n if (this.dataSource) {\n this.label = findLabelForId(this.dataSource, this.value) || '';\n } else if (this.instance && this.resolveLabelsFunction) {\n this.resolveLabelsFunction(this.instance, [this.value])\n .pipe(first())\n .subscribe((data) => {\n this.label = findLabelForId(data, this.value) || '';\n });\n }\n } else {\n this.label = '';\n }\n }\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `autocompletelist${AutocompleteComponent.idCounter++}`;\n this.completeLabel();\n }\n ngAfterViewInit(): void {\n this.setSameWidth();\n }\n onInputResized(): void {\n this.setSameWidth();\n }\n private setSameWidth(): void {\n const width = this.i0.nativeElement.getBoundingClientRect().width;\n this.completeDiv.nativeElement.style.width = `${width}px`;\n }\n\n onKeydown(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'Tab':\n if (label) {\n this.pickSelectionOrFirstMatch(label);\n }\n this.showCompletion = false;\n break;\n }\n this.markAsTouched();\n }\n onKeypress(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'Intro':\n case 'Enter':\n this.pickSelectionOrFirstMatch(label);\n event.preventDefault();\n break;\n }\n this.markAsTouched();\n }\n onKeyup(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'PageDown':\n this.focusOnNext(5);\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.focusOnNext(1);\n event.preventDefault();\n break;\n case 'PageUp':\n this.focusOnPrevious(5);\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.focusOnPrevious(1);\n event.preventDefault();\n break;\n case 'Escape':\n this.complete(null);\n event.preventDefault();\n break;\n case 'Intro':\n case 'Enter':\n event.preventDefault();\n break;\n default:\n this.showCompletionList(label);\n // event.preventDefault();\n }\n this.markAsTouched();\n }\n private focusOnNext(offset: number): void {\n const list = this.completionList || [];\n const index = list.findIndex(\n (it) => this.focusItem && it.key === this.focusItem.key\n );\n const next =\n index !== -1 && list.length > index + offset\n ? list[index + offset]\n : list[list.length - 1];\n this.focusItem = next;\n this.ensureItemVisible(index);\n }\n private focusOnPrevious(offset: number): void {\n const list = this.completionList || [];\n const index = list.findIndex(\n (it) => this.focusItem && it.key === this.focusItem.key\n );\n const next =\n index !== -1 && index > offset ? list[index - offset] : list[0];\n this.focusItem = next;\n this.ensureItemVisible(index);\n }\n onLostFocus(): void {\n setTimeout(() => {\n this.toggleCompletion(false, null);\n }, 200);\n }\n complete(item: DataSourceItem<Record<string, unknown>, string>): void {\n if (item !== null) {\n this.value = item.key;\n this.label = item.label;\n } else {\n this.value = null;\n this.label = '';\n }\n this.toggleCompletion(false, null);\n this.markAsTouched();\n }\n toggleCompletion(show: boolean, label: string): void {\n if (show && !this.disabled) {\n this.showCompletionList(label);\n } else {\n this.showCompletion = false;\n if (this.canAddNewValues) {\n this.syncCustomValue(this.label);\n return;\n }\n }\n this.cd.markForCheck();\n }\n\n get selectedOption(): string {\n const index = this.completionList.findIndex(\n (i) => i.key === this.focusItem.key\n );\n if (index === -1 || !this.focusItem) {\n return null;\n }\n return `${this.inputId}_${index}`;\n }\n\n private ensureItemVisible(index: number): void {\n const target = this.completeDiv.nativeElement.querySelectorAll('li')[index];\n if (target) {\n target.scrollIntoView({ block: 'center' });\n }\n }\n private syncCustomValue(text: string): void {\n this.value = text;\n this.label = text;\n }\n private pickSelectionOrFirstMatch(text: string): void {\n if (this.canAddNewValues) {\n this.syncCustomValue(text);\n return;\n }\n if (this.focusItem && this.focusItem.label) {\n this.complete(this.focusItem);\n return;\n }\n const source = (text || '').trim();\n if (source === '') {\n this.showCompletion = false;\n return;\n }\n this.completionList = [];\n this.computeCompletionList(source).subscribe((suggestions) => {\n this.complete(\n suggestions && suggestions.length > 0 ? suggestions[0] : null\n );\n });\n }\n private showCompletionList(text: string): void {\n this.setSameWidth();\n this.computeCompletionList(text).subscribe((cl) => {\n this.completionList = cl;\n this.focusItem =\n this.completionList.length > 0 ? this.completionList[0] : null;\n this.showCompletion = true;\n });\n }\n private computeCompletionList(text: string): Observable<DecoratedDataSource> {\n const searchText = (text || '').toLowerCase();\n if (this.dataSource) {\n const ds = (this.dataSource || [])\n .filter((it) => ignoreAccentsInclude(it.label, searchText))\n .sort((a, b) => a.label.localeCompare(b.label));\n return of(decorateDataSource(ds, searchText));\n } else if (this.instance && this.populateFunction) {\n return this.populateFunction(this.instance, searchText).pipe(\n first(),\n map((ds) => {\n ds.filter((it) => ignoreAccentsInclude(it.label, searchText)).sort(\n (a, b) => a.label.localeCompare(b.label)\n );\n return decorateDataSource(ds, searchText);\n })\n );\n } else {\n return of([]);\n }\n }\n}\n\n/** Returns true if text includes substring. No accents considered. Ignorecase */\nconst ignoreAccentsInclude = (text: string, substring: string): boolean => {\n text = normalizedString(text).toLowerCase();\n substring = normalizedString(substring).toLowerCase();\n return text.includes(substring);\n};\n\n/** Returns a normalized string with no accents: used for comparison */\nconst normalizedString = (a: string): string =>\n (a || '').normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n\nconst decorateDataSource = (\n dataSource: DataSource<any, string>,\n subString: string\n): DecoratedDataSource => dataSource.map((it) => decorateItem(it, subString));\n\nconst decorateItem = (\n item: DataSourceItem<any, string>,\n tx: string\n): DecoratedDataSourceItem => {\n const index = normalizedString(item.label)\n .toLowerCase()\n .indexOf(normalizedString(tx).toLowerCase());\n const labelPrefix = index === -1 ? item.label : item.label.substr(0, index);\n const labelMatch = index === -1 ? '' : item.label.substr(index, tx.length);\n const labelPostfix = index === -1 ? '' : item.label.substr(index + tx.length);\n const newItem: DecoratedDataSourceItem = {\n ...item,\n labelPrefix,\n labelMatch,\n labelPostfix\n };\n return newItem;\n};\n\nconst findLabelForId = (data: DataSource<any, string>, id: any): string => {\n const found = data.find((it) => it.key === id);\n return found ? found.label : null;\n};\n","/** Language detector based on Navigator preferences */\nexport const languageDetector = (): string => {\n const lang = navigator.language.split('-')[0];\n if (lang === 'es' || lang === 'en') {\n return lang;\n }\n return 'en'; // default\n};\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\nimport { DataSource } from '../datasource';\nimport { isInitialAndEmpty } from '../helperFns';\nimport { languageDetector } from '../lang';\n\n@Component({\n selector: 'lux-autocomplete-list',\n templateUrl: './autocomplete-list.component.html',\n styleUrls: ['./autocomplete-list.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AutocompleteListComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => AutocompleteListComponent)\n }\n ]\n})\nexport class AutocompleteListComponent\n implements ControlValueAccessor, Validator, OnInit\n{\n static idCounter = 0;\n\n @ViewChild('auto') auto!: AutocompleteListComponent;\n\n literals = {\n en: {\n placeholder: 'new item',\n deleteLabelTemplate: 'Delete <<label>>',\n addMessage: 'Add'\n },\n es: {\n placeholder: 'nuevo elemento',\n deleteLabelTemplate: 'Eliminar <<label>>',\n addMessage: 'Añadir'\n }\n };\n\n public internalDataSource: DataSource<any, string> = [];\n private autoPopulate = false;\n\n private _value: any[] = [];\n @Input()\n set value(val: any[]) {\n if (val === this._value) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, val);\n this._value = val;\n this.ensureLabelsForIds();\n this.populateWith('');\n this.onChange(this._value);\n if (!initialAndEmpty) {\n this.valueChange.emit(this._value);\n }\n }\n get value(): any[] {\n return this._value;\n }\n labels: string[] = [];\n newEntry: any;\n canAdd = false;\n touched = false;\n\n private _lang = languageDetector();\n @Input()\n get lang(): string {\n return this._lang;\n }\n set lang(l: string) {\n if (l === this._lang) {\n return;\n }\n if (Object.keys(this.literals).includes(l)) {\n this._lang = l;\n } else {\n this._lang = 'en';\n }\n }\n\n @Input() inputId: string;\n @Input() dataSource: DataSource<any, any> = [];\n @Input() placeholder?: string;\n @Input() disabled = false;\n @Input() deleteLabelTemplate?: string;\n @Input() addMessage?: string;\n @Input() required = false;\n\n @Input() resolveLabelsFunction?: (\n instance: any,\n ids: any[]\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() populateFunction?: (\n instance: any,\n search: string\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() instance: any;\n\n @Output() valueChange = new EventEmitter<any[]>();\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched && !this.disabled) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `autocompletelist${AutocompleteListComponent.idCounter++}`;\n this.autoPopulate =\n !!this.resolveLabelsFunction && !!this.populateFunction && this.instance;\n this.ensureLabelsForIds();\n }\n ensureLabelsForIds(): void {\n if (this.autoPopulate && this.resolveLabelsFunction) {\n this.resolveLabelsFunction(this.instance, this._value)\n .pipe(first())\n .subscribe((data) => {\n const res: string[] = [];\n (this._value || []).map((id) => {\n const found = data.find((it) => it.key === id);\n if (found) {\n res.push(found.label);\n } else {\n res.push('(unset)');\n }\n });\n this.labels = res;\n });\n } else if (this.dataSource) {\n const res: string[] = [];\n (this._value || []).map((id) => {\n const found = this.dataSource.find((it) => it.key === id);\n if (found) {\n res.push(found.label);\n } else {\n res.push('(unset)');\n }\n });\n this.labels = res;\n } else {\n this.labels = this._value.map((it) => (it ? it.toString() : '(unset)'));\n }\n }\n removeAt(index: number): void {\n if (this._value.length > index) {\n const key = this._value.splice(index, 1)[0];\n const label = this.labels.splice(index, 1)[0];\n this.internalDataSource.push({ key, label });\n }\n this.markAsTouched();\n }\n onValueChange(): void {\n this.updateCanAdd();\n }\n onNewEntryChange(event: KeyboardEvent, auto: AutocompleteComponent): void {\n if (event.key === 'Enter' && !!auto.value) {\n this.addNew(auto);\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n // todo\n } else {\n this.populateWith(auto.label + event.key);\n }\n this.updateCanAdd();\n }\n populateWith(searchText: string): void {\n if (this.autoPopulate && this.populateFunction && this.instance) {\n this.populateFunction(this.instance, searchText)\n .pipe(first())\n .subscribe((data) => {\n this.internalDataSource = data.filter(\n (it) => !(this._value || []).includes(it.key)\n );\n });\n } else if (this.dataSource) {\n this.internalDataSource = this.dataSource.filter(\n (it) => !(this._value || []).includes(it.key)\n );\n }\n }\n updateCanAdd(): void {\n this.canAdd =\n !this.disabled &&\n this.auto &&\n !!this.auto.value && // has value\n !this.value.find((it) => it === this.auto.value); // not already in\n }\n\n addNew(auto: AutocompleteComponent): void {\n this.value.push(auto.value);\n this.ensureLabelsForIds();\n this.newEntry = '';\n this.internalDataSource = this.internalDataSource.filter(\n (it) => !this._value.includes(it.key)\n );\n this.markAsTouched();\n }\n\n getDeleteMessage(label: string): string {\n return (\n this.deleteLabelTemplate ?? this.literals[this.lang].deleteLabelTemplate\n ).replace('<<label>>', label);\n }\n}\n","import {\n Component,\n Input,\n EventEmitter,\n Output,\n OnInit,\n forwardRef,\n ViewChild,\n ElementRef,\n AfterViewInit\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { isInitialAndEmpty } from '../helperFns';\nimport { languageDetector } from '../lang';\n\nconst KEY_SPACE = ' ';\n\n@Component({\n selector: 'lux-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => CheckboxComponent)\n }\n ]\n})\nexport class CheckboxComponent\n implements ControlValueAccessor, OnInit, AfterViewInit\n{\n static idCounter = 0;\n\n @ViewChild('ck', { static: false }) ck: ElementRef;\n\n private _lang = languageDetector();\n @Input()\n set lang(l: string) {\n if (l === this._lang) {\n return;\n }\n if (Object.keys(this.literals).includes(l)) {\n this._lang = l;\n } else {\n this._lang = 'en';\n }\n }\n get lang(): string {\n return this._lang;\n }\n private internalValue: boolean;\n @Input()\n get value(): boolean {\n return this.internalValue;\n }\n set value(v: boolean) {\n if (this.internalValue === v) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this.internalValue, v);\n this.internalValue = v;\n this.syncModel();\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n\n get tabindexValue(): string {\n return this.disabled ? null : '0';\n }\n\n @Input() label: string = null;\n @Input() name: string = null;\n private _disabled = false;\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(v: boolean) {\n if (v === this._disabled) {\n return;\n }\n this._disabled = v;\n this.syncModel();\n }\n @Input() inputId: string;\n\n literals = {\n en: {\n yesLabel: 'Yes',\n noLabel: 'No'\n },\n es: {\n yesLabel: 'Sí',\n noLabel: 'No'\n }\n };\n touched = false;\n\n @Output() valueChange = new EventEmitter<boolean>();\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = !!value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `${this.name || 'checkbox'}$${CheckboxComponent.idCounter++}`;\n }\n ngAfterViewInit(): void {\n this.syncModel();\n }\n\n clicked(): void {\n if (!this.disabled) {\n this.value = !this.internalValue;\n this.markAsTouched();\n }\n }\n onKey(event: KeyboardEvent): void {\n if (event.key === KEY_SPACE && !this.disabled) {\n this.value = !this.internalValue;\n this.markAsTouched();\n event.preventDefault();\n }\n }\n\n private syncModel(): void {\n if (this.ck) {\n this.ck.nativeElement.checked = this.internalValue;\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ElementRef,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n AbstractControl,\n ValidationErrors,\n Validator,\n NG_VALIDATORS\n} from '@angular/forms';\nimport {\n hasValue,\n isInitialAndEmpty,\n isValidEmail,\n isValidNumber,\n normalizeDate\n} from '../helperFns';\nimport { languageDetector } from '../lang';\n@Component({\n selector: 'lux-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => InputComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => InputComponent)\n }\n ]\n})\nexport class InputComponent implements OnInit, ControlValueAccessor, Validator {\n static idCounter = 0;\n\n @ViewChild('input', { static: false }) input: ElementRef;\n @ViewChild('textarea', { static: false }) textarea: ElementRef;\n\n touched = false;\n dirty = false;\n lastErrors: ValidationErrors | null = null;\n\n private _disabled: string | boolean;\n private _value: any = '';\n private _type: string;\n private _placeholder: string;\n private _currency: string;\n private _required: boolean;\n\n public userErrors = {\n en: {\n required: 'Required field.',\n min: 'Minimum value is $min.',\n max: 'Maximum value is $max.',\n email: 'Format should match example@example.com.'\n },\n es: {\n required: 'El campo es obligatorio.',\n min: 'El valor mínimo es $min.',\n max: 'El valor máximo es $max.',\n email: 'El campo debe tener un formato como ejemplo@ejemplo.com.'\n }\n };\n\n public domain: string;\n @Input()\n public rows?: number | string;\n @Input()\n public cols?: number | string;\n @Input()\n public step?: number;\n @Input()\n public min?: number | string;\n @Input()\n public max?: number | string;\n\n get className(): string {\n return this.checkClassName();\n }\n\n @Input() lang = languageDetector();\n @Input() public inlineErrors = false;\n @Input() public inputId: string;\n @Input('aria-label') public ariaLabel: string;\n @Input() public readonly: boolean | null = null;\n\n @Input()\n set disabled(v: string | boolean) {\n v = typeof v === 'string' ? true : v;\n this._disabled = v;\n }\n get disabled(): string | boolean {\n return this._disabled;\n }\n\n @Input()\n set currency(v: string) {\n this._currency = v.toUpperCase();\n }\n get currency(): string {\n return this._currency;\n }\n\n @Input()\n set placeholder(v: string) {\n this._placeholder = v;\n }\n get placeholder(): string {\n return this._placeholder ? this._placeholder : '';\n }\n\n @Input()\n set required(v: boolean) {\n this._required = v;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set type(v: string) {\n this._type = v.toLowerCase();\n this.domain = v.toLowerCase();\n this.checkType(v);\n }\n get type(): string {\n return this._type ? this._type : 'text';\n }\n\n @Input()\n set value(v: any) {\n v = v === undefined ? null : v;\n if (v === this._value) {\n return; // prevent events when there is no changes\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n if (this.type === 'date') {\n v = normalizeDate(v);\n }\n\n this._value = v;\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): any {\n if (this.isPercentage() || this.isPermillage() || this.isNumber()) {\n const numVal = parseFloat(this._value);\n if (!Number.isNaN(numVal)) {\n return numVal;\n }\n }\n return this._value;\n }\n @Output() valueChange = new EventEmitter<any>();\n @Output() keyPress = new EventEmitter<KeyboardEvent>();\n\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n constructor() {}\n\n // ControlValueAccessor Interface implementation\n writeValue(value: any): void {\n this.value = value;\n this.setValueInControl(value);\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End of ControlValueAccessor Interface implementation\n\n private setValueInControl(v: any): void {\n if (this.domain === 'date') {\n v = normalizeDate(v);\n }\n if (this.input) {\n this.input.nativeElement.value = v;\n }\n if (this.textarea) {\n this.textarea.nativeElement.value = v;\n }\n }\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n let result: ValidationErrors | null = null;\n\n if (this.required && !hasValue(hasValue)) {\n result = result || {};\n result.required = { value, reason: 'Required field.' };\n }\n if (this.type === 'email' && hasValue(value) && !isValidEmail(value)) {\n result = result || {};\n result.email = { value, reason: 'Invalid email.' };\n }\n if (this.type === 'number' && hasValue(value) && !isValidNumber(value)) {\n result = result || {};\n result.numeric = { value, reason: 'Invalid number.' };\n }\n if (\n this.type === 'date' ||\n this.type === 'time' ||\n this.type === 'timestamp'\n ) {\n if (\n typeof this.min === 'string' &&\n hasValue(value) &&\n String(value).localeCompare(this.min) === -1\n ) {\n result = result || {};\n result.min = {\n value,\n min: this.min,\n reason: `Value is lower than minimum value: ${this.min}.`\n };\n }\n if (\n typeof this.max === 'string' &&\n hasValue(value) &&\n String(value).localeCompare(this.max) !== -1\n ) {\n result = result || {};\n result.max = {\n value,\n max: this.max,\n reason: `Value is greater than than maximum value: ${this.max}.`\n };\n }\n }\n\n if (\n this.type === 'percentage' ||\n this.type === 'permillage' ||\n this.type === 'number' ||\n this.type === 'currency'\n ) {\n if (hasValue(this.min) && hasValue(value) && value < +this.min) {\n result = result || {};\n result.min = {\n value,\n min: this.min,\n reason: `Value is lower than minimum value: ${this.min}.`\n };\n }\n if (hasValue(this.max) && hasValue(value) && value > +this.max) {\n result = result || {};\n result.max = {\n value,\n max: this.max,\n reason: `Value is greater than than maximum value: ${this.max}.`\n };\n }\n }\n this.lastErrors = result;\n return result;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `${this.type}$${InputComponent.idCounter++}`;\n }\n\n onKeyUp(newValue: string): void {\n this.value = newValue;\n }\n onChangeValue(newValue: string): void {\n this.value = newValue;\n this.markAsTouched();\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n\n isNumber(): boolean {\n return this.type === 'number';\n }\n isPercentage(): boolean {\n return this.type === 'percentage';\n }\n isPermillage(): boolean {\n return this.type === 'permillage';\n }\n\n checkClassName(): string {\n if (this.readonly === true) {\n return 'readonly';\n }\n return '';\n }\n\n checkType(type: string): void {\n switch (type) {\n case 'email':\n this.setEmailPatterns();\n break;\n case 'date':\n this.setDatePatterns();\n break;\n case 'time':\n this.setTimePatterns();\n break;\n case 'password':\n this.setPasswordPatterns();\n break;\n case 'number':\n this.setNumberPatterns();\n break;\n case 'currency':\n this.setCurrencyPatterns();\n break;\n case 'percentage':\n this.setPercentagePatterns();\n break;\n case 'permillage':\n this.setPermillagePatterns();\n break;\n default:\n break;\n }\n }\n\n setEmailPatterns(): void {}\n\n setDatePatterns(): void {\n this.min = this.min || '1900-01-01';\n this.max = this.max || '2100-01-01';\n }\n\n setTimePatterns(): void {}\n\n setPasswordPatterns(): void {}\n\n setNumberPatterns(): void {\n this.domain = 'number';\n this.placeholder = '0';\n }\n\n setCurrencyPatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.1;\n this.min = this.min || 0.0;\n this.max = this.max || 10000.0;\n this.value = 0.0;\n }\n\n setPercentagePatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.01;\n this.min = this.min || 0.0;\n this.max = this.max || 100.0;\n this.placeholder = '0.00';\n }\n\n setPermillagePatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.01;\n this.min = this.min || 0.0;\n this.max = this.max || 1000.0;\n this.placeholder = '0.00';\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnDestroy,\n OnInit,\n forwardRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject, Observable, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n/** Filter component to query for objects. */\n@Component({\n selector: 'lux-filter',\n templateUrl: './filter.component.html',\n styleUrls: ['./filter.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => FilterComponent)\n }\n ]\n})\nexport class FilterComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n static idCounter = 0;\n\n private touched = false;\n private _searchValue = '';\n\n @Input() disabled = false;\n /** id for the input. If left blank, it is autogenerated */\n @Input() inputId: string;\n /** Placeholder default text. */\n @Input() placeholder = '';\n /** Search value introduced by the user. */\n @Input()\n get searchValue(): string {\n return this._searchValue;\n }\n set searchValue(v: string) {\n v = (v || '').toString();\n if (v === this._searchValue) {\n return;\n }\n this.onChange(v);\n this._searchValue = v;\n }\n /** Search on type: (default true) Auto-search when user types in. */\n @Input() searchOnType = true;\n /** Custom aria label in case of not using a label */\n @Input('aria-label') ariaLabel: string;\n\n private debounceValue = 300; // 300 ms\n /** Debounce time in milliseconds. (defaults to 300 ms) */\n @Input()\n set debounce(val: number) {\n this.debounceValue = val;\n this.recreateObservable();\n }\n get debounce(): number {\n return this.debounceValue;\n }\n\n /** Search value changed by user. */\n @Output() searchValueChange = new EventEmitter<string>();\n\n searchValue$: Observable<string>;\n\n private subject = new Subject<string>();\n private sub: Subscription;\n\n constructor() {\n this.recreateObservable();\n }\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.searchValue = (value || '').toString();\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `filter$${FilterComponent.idCounter++}`;\n }\n ngOnDestroy(): void {\n this.freeSubscriptions();\n }\n clear(): void {\n this.searchValue = '';\n this.search();\n }\n search(): void {\n this.searchValueChange.emit(this.searchValue);\n }\n keyup(event: KeyboardEvent, newValue: string): void {\n this.markAsTouched();\n this.searchValue = newValue;\n if (event.key === 'Enter') {\n this.searchNow(this.searchValue);\n }\n if (this.searchOnType) {\n this.addEvent();\n }\n }\n onInputValueChange(newValue: string): void {\n this.markAsTouched();\n this.searchValue = newValue;\n }\n\n private recreateObservable(): void {\n this.searchValue$ = this.subject\n .asObservable()\n .pipe(debounceTime(this.debounce));\n\n this.freeSubscriptions();\n this.sub = this.searchValue$.subscribe((value) => {\n this.searchValueChange.emit(value);\n });\n }\n private freeSubscriptions(): void {\n if (this.sub) {\n this.sub.unsubscribe();\n this.sub = null;\n }\n }\n private searchNow(value: string): void {\n this.searchValueChange.emit(value);\n }\n private addEvent(): void {\n this.subject.next(this.searchValue);\n }\n}\n","import { ComponentRef } from '@angular/core';\nimport { LuxModalWindowComponent } from './modal-window';\nimport { ContentRef } from './util';\nimport { LuxModalBackdropComponent } from './modal-backdrop';\n\nexport class ActiveModal {\n close(result?: any): void {}\n dismiss(reason?: any): void {}\n}\n\nexport class ModalRef {\n private _resolve: (result?: any) => void;\n private _reject: (reason?: any) => void;\n\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content, will return `undefined`.\n */\n get componentInstance(): any {\n if (this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n\n /**\n * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.\n */\n result: Promise<any>;\n\n constructor(\n private _windowCmptRef: ComponentRef<LuxModalWindowComponent>,\n private _contentRef: ContentRef,\n private _backdropCmptRef?: ComponentRef<LuxModalBackdropComponent>,\n private _beforeDismiss?: () => any\n ) {\n _windowCmptRef.instance.dismissEvent.subscribe((reason: any) => {\n this.dismiss(reason);\n });\n\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {\n if (this._windowCmptRef) {\n if (this._resolve) {\n this._resolve(result);\n }\n this._removeModalElements();\n }\n }\n\n private _dismiss(reason?: any): void {\n if (this._reject) {\n this._reject(reason);\n }\n this._removeModalElements();\n }\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n if (dismiss && dismiss.then) {\n dismiss.then(\n (result) => {\n if (result !== false) {\n this._dismiss(reason);\n }\n },\n () => {}\n );\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n\n private _removeModalElements(): void {\n const windowNativeEl = this._windowCmptRef.location.nativeElement;\n windowNativeEl.parentNode.removeChild(windowNativeEl);\n this._windowCmptRef.destroy();\n\n if (this._backdropCmptRef) {\n const backdropNativeEl = this._backdropCmptRef.location.nativeElement;\n backdropNativeEl.parentNode.removeChild(backdropNativeEl);\n this._backdropCmptRef.destroy();\n }\n\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n\n this._windowCmptRef = null;\n this._backdropCmptRef = null;\n this._contentRef = null;\n }\n}\n","import { ViewRef, ComponentRef } from '@angular/core';\nimport { fromEvent, Observable } from 'rxjs';\nimport { filter, map, takeUntil, withLatestFrom } from 'rxjs/operators';\n\nexport const FOCUS = 'focus';\n\nexport enum Key {\n Tab = 9,\n Enter = 13,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n ArrowLeft = 37,\n ArrowUp = 38,\n ArrowRight = 39,\n ArrowDown = 40\n}\n\nexport const isDefined = (value: any): boolean =>\n value !== undefined && value !== null;\n\nexport class ContentRef {\n constructor(\n public nodes: any[],\n public viewRef?: ViewRef,\n public componentRef?: ComponentRef<any>\n ) {}\n}\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[contenteditable]',\n '[tabindex]:not([tabindex=\"-1\"])'\n].join(', ');\n\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nexport const getFocusableBoundaryElements = (\n element: HTMLElement\n): HTMLElement[] => {\n const list: HTMLElement[] = Array.from(\n element.querySelectorAll(\n FOCUSABLE_ELEMENTS_SELECTOR\n ) as NodeListOf<HTMLElement>\n ).filter((el) => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n};\n\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nexport const focusTrap = (\n element: HTMLElement,\n stopFocusTrap$: Observable<any>,\n refocusOnClick = false\n): void => {\n // last focused element\n const lastFocusedElement$ = fromEvent<FocusEvent>(element, 'focusin').pipe(\n takeUntil(stopFocusTrap$),\n map((e) => e.target)\n );\n\n // 'tab' / 'shift+tab' stream\n fromEvent<KeyboardEvent>(element, 'keydown')\n .pipe(\n takeUntil(stopFocusTrap$),\n /* eslint-disable import/no-deprecated */\n filter((e) => e.which === Key.Tab),\n /* eslint-enable import/no-deprecated */\n withLatestFrom(lastFocusedElement$)\n )\n .subscribe(([tabEvent, focusedElement]) => {\n const [first, last] = getFocusableBoundaryElements(element);\n\n if (\n (focusedElement === first || focusedElement === element) &&\n tabEvent.shiftKey\n ) {\n last.focus();\n tabEvent.preventDefault();\n }\n\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n });\n\n // inside click\n if (refocusOnClick) {\n fromEvent(element, 'click')\n .pipe(\n takeUntil(stopFocusTrap$),\n withLatestFrom(lastFocusedElement$),\n map((arr) => arr[1] as HTMLElement)\n )\n .subscribe((lastFocusedElement) => lastFocusedElement.focus());\n }\n};\n","export enum ModalDismissReasons {\n BackdropClick,\n Esc\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n HostBinding,\n HostListener\n} from '@angular/core';\n\nimport { getFocusableBoundaryElements, FOCUS } from './util';\nimport { ModalDismissReasons } from './modal-dismiss-reasons';\n\n@Component({\n selector: 'lux-modal-window',\n template: `\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\"><ng-content></ng-content></div>\n </div>\n `\n})\nexport class LuxModalWindowComponent\n implements OnInit, AfterViewInit, OnDestroy\n{\n private _elWithFocus: Element; // element that is focused prior to modal opening\n\n @Input() ariaDescribedBy: string;\n @Input() ariaLabelledBy: string;\n @Input() backdrop: boolean | string = false;\n @Input() keyboard = true;\n @Input() windowClass: string;\n\n @Output() dismissEvent = new EventEmitter();\n\n @HostBinding('class') get class(): string {\n return `modal ${this.windowClass || ''}`;\n }\n @HostBinding('attr.role') role = 'dialog';\n @HostBinding('tabindex') tabindex = '-1';\n @HostBinding('attr.aria-modal') ariamodal = true;\n @HostBinding('attr.aria-labelledby') get hostAriaLabelledBy(): string {\n return this.ariaLabelledBy;\n }\n @HostBinding('attr.aria-describedby') get hostAriaDescribedBy(): string {\n return this.ariaDescribedBy;\n }\n @HostListener('click', ['$event.target']) backdropClick(\n btn: HTMLElement\n ): void {\n if (this.backdrop === true && this._elRef.nativeElement === btn) {\n this.dismiss(ModalDismissReasons.BackdropClick);\n }\n }\n @HostListener('keyup.esc', ['$event']) escKey(event): void {\n if (this.keyboard && !event.defaultPrevented) {\n this.dismiss(ModalDismissReasons.Esc);\n }\n }\n\n constructor(\n @Inject(DOCUMENT) private _document: any,\n private _elRef: ElementRef<HTMLElement>\n ) {}\n\n dismiss(reason): void {\n this.dismissEvent.emit(reason);\n }\n\n ngOnInit(): void {\n this._elWithFocus = this._document.activeElement;\n }\n\n ngAfterViewInit(): void {\n if (!this._elRef.nativeElement.contains(document.activeElement)) {\n const firstFocusable = getFocusableBoundaryElements(\n this._elRef.nativeElement\n )[0];\n\n const elementToFocus = firstFocusable || this._elRef.nativeElement;\n elementToFocus.focus();\n }\n }\n\n ngOnDestroy(): void {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n\n let elementToFocus;\n if (elWithFocus && elWithFocus[FOCUS] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n elementToFocus.focus();\n this._elWithFocus = null;\n }\n}\n","import {Component, Input, HostBinding} from '@angular/core';\n\n@Component({\n selector: 'lux-modal-backdrop',\n template: ''\n})\nexport class LuxModalBackdropComponent {\n @Input() backdropClass: string;\n\n @HostBinding('class') class = 'modal-backdrop fade show';\n @HostBinding('style') style = 'z-index: 1050';\n}\n","import { Injectable } from '@angular/core';\n\nexport interface LuxModalOptions {\n ariaDescribedBy?: string;\n ariaLabelledBy?: string;\n backdrop?: boolean;\n keyboard?: boolean;\n windowClass?: string;\n backdropClass?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LuxModalConfig implements LuxModalOptions {\n backdrop = true;\n}\n","import {\n Injectable,\n ApplicationRef,\n ComponentFactoryResolver,\n TemplateRef,\n ComponentRef,\n Inject,\n Injector,\n RendererFactory2\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { ActiveModal, ModalRef } from './modal-ref';\nimport { ContentRef, focusTrap, isDefined } from './util';\nimport { LuxModalWindowComponent } from './modal-window';\nimport { Subject } from 'rxjs';\nimport { LuxModalBackdropComponent } from './modal-backdrop';\nimport { LuxModalOptions, LuxModalConfig } from './modal-config';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalStack {\n private _activeWindowCmptHasChanged = new Subject();\n private _modalRefs: ModalRef[] = [];\n private _windowCmpts: ComponentRef<LuxModalWindowComponent>[] = [];\n private _ariaHiddenValues: Map<Element, string> = new Map();\n private _backdropAttributes = ['backdropClass'];\n private _windowAttributes = [\n 'ariaLabelledBy',\n 'backdrop',\n 'centered',\n 'keyboard',\n 'scrollable',\n 'size',\n 'windowClass'\n ];\n\n constructor(\n private _applicationRef: ApplicationRef,\n @Inject(DOCUMENT) private _document: any,\n private _injector: Injector,\n private _rendererFactory: RendererFactory2,\n private modalConfig: LuxModalConfig\n ) {\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt =\n this._windowCmpts[this._windowCmpts.length - 1];\n focusTrap(\n activeWindowCmpt.location.nativeElement,\n this._activeWindowCmptHasChanged\n );\n this._revertAriaHidden();\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n\n open(\n moduleCFR: ComponentFactoryResolver,\n content: any,\n options: LuxModalOptions\n ): ModalRef {\n const config = Object.assign({}, this.modalConfig, options);\n const containerEl = this._document.body;\n const renderer = this._rendererFactory.createRenderer(null, null);\n const removeBodyClass = (): void => {\n if (!this._modalRefs.length) {\n renderer.removeClass(this._document.body, 'modal-open');\n this._revertAriaHidden();\n }\n };\n const activeModal = new ActiveModal();\n const contentRef = this.getContentRef(moduleCFR, content, activeModal);\n const backdropCmptRef: ComponentRef<LuxModalBackdropComponent> =\n config.backdrop ? this._attachBackdrop(moduleCFR, containerEl) : null;\n const windowCmptRef: ComponentRef<LuxModalWindowComponent> =\n this._attachWindowComponent(moduleCFR, containerEl, contentRef);\n const modalRef: ModalRef = new ModalRef(\n windowCmptRef,\n contentRef,\n backdropCmptRef\n );\n this._registerModalRef(modalRef);\n this._registerWindowCmpt(windowCmptRef);\n modalRef.result.then(removeBodyClass, removeBodyClass);\n activeModal.close = (result: any): void => {\n modalRef.close(result);\n };\n activeModal.dismiss = (reason: any): void => {\n modalRef.dismiss(reason);\n };\n\n this._applyWindowOptions(windowCmptRef.instance, config);\n if (this._modalRefs.length === 1) {\n renderer.addClass(this._document.body, 'modal-open');\n }\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackgroundOptions(backdropCmptRef.instance, config);\n backdropCmptRef.changeDetectorRef.detectChanges();\n }\n windowCmptRef.changeDetectorRef.detectChanges();\n\n return modalRef;\n }\n\n private _applyWindowOptions(\n windowInstance: LuxModalWindowComponent,\n config: LuxModalOptions\n ): void {\n this._windowAttributes.forEach((optionName: string) => {\n if (isDefined(config[optionName])) {\n windowInstance[optionName] = config[optionName];\n }\n });\n }\n\n private _applyBackgroundOptions(\n backgroudInstance: LuxModalBackdropComponent,\n config: LuxModalOptions\n ): void {\n this._backdropAttributes.forEach((optionName: string) => {\n if (isDefined(config[optionName])) {\n backgroudInstance[optionName] = config[optionName];\n }\n });\n }\n\n private _revertAriaHidden(): void {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenValues.clear();\n }\n\n private getContentRef(\n moduleCFR: ComponentFactoryResolver,\n content: any,\n activeModal: ActiveModal\n ): ContentRef {\n if (content instanceof TemplateRef) {\n return this.createFromTemplateRef(content, activeModal);\n }\n }\n\n private createFromTemplateRef(\n content: TemplateRef<any>,\n activeModal: ActiveModal\n ): ContentRef {\n const context = {\n $implicit: activeModal,\n // eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n close(result): void {\n activeModal.close(result);\n },\n // eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n dismiss(reason): void {\n activeModal.dismiss(reason);\n }\n };\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n\n private _attachBackdrop(\n moduleCFR: ComponentFactoryResolver,\n containerEl: any\n ): ComponentRef<LuxModalBackdropComponent> {\n const backdropFactory = moduleCFR.resolveComponentFactory(\n LuxModalBackdropComponent\n );\n const backdropCmptRef = backdropFactory.create(this._injector);\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n\n private _attachWindowComponent(\n moduleCFR: ComponentFactoryResolver,\n containerEl: any,\n contentRef: any\n ): ComponentRef<LuxModalWindowComponent> {\n const windowFactory = moduleCFR.resolveComponentFactory(\n LuxModalWindowComponent\n );\n const windowCmptRef = windowFactory.create(\n this._injector,\n contentRef.nodes\n );\n this._applicationRef.attachView(windowCmptRef.hostView);\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n\n private _registerModalRef(modalRef: ModalRef): void {\n const unregisterModalRef = (): void => {\n const index = this._modalRefs.indexOf(modalRef);\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n }\n };\n this._modalRefs.push(modalRef);\n modalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n\n private _registerWindowCmpt(\n windowCmpt: ComponentRef<LuxModalWindowComponent>\n ): void {\n this._windowCmpts.push(windowCmpt);\n this._activeWindowCmptHasChanged.next();\n\n windowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(windowCmpt);\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n\n private _setAriaHidden(element: Element): void {\n const parent = element.parentElement;\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach((sibling) => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(\n sibling,\n sibling.getAttribute('aria-hidden')\n );\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n this._setAriaHidden(parent);\n }\n }\n}\n","import {\n Injectable,\n ComponentFactoryResolver,\n TemplateRef,\n} from '@angular/core';\nimport { ModalStack } from './modal-stack';\nimport { ModalRef } from './modal-ref';\nimport { LuxModalOptions } from './modal-config';\n\n/**\n * A service that it allow open an close modal components\n */\n@Injectable({ providedIn: 'root' })\nexport class ModalService {\n constructor(\n private modalStack: ModalStack,\n private moduleCFR: ComponentFactoryResolver\n ) {}\n\n /**Open a modal component\n * @param content TemplateRef\n */\n open(content: TemplateRef<any>, options: LuxModalOptions = {}): ModalRef {\n return this.modalStack.open(this.moduleCFR, content, options);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { DataSource } from '../datasource';\nimport { Observable, of, Subject } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n map,\n switchMap\n} from 'rxjs/operators';\nimport { GeoPoint } from '../map/geopoint';\n\ninterface SearchResult {\n place_id: number;\n lat: number;\n lon: number;\n display_name: string;\n icon: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class GeolocationService {\n private debouncePeriodMs = 300; // ms\n private cacheSize = 20;\n private lastQueriesWithResults = new Map<string, SearchResult[]>();\n private lastQueriesLru: string[] = [];\n private currentSearch$: Subject<string>;\n private currentQuery$: Observable<SearchResult[]>;\n\n constructor(private http: HttpClient) {\n this.currentSearch$ = new Subject<string>();\n\n const typed$ = this.currentSearch$\n .asObservable()\n .pipe(distinctUntilChanged());\n\n this.currentQuery$ = typed$.pipe(\n debounceTime(this.debouncePeriodMs),\n\n switchMap((currentQuery) => {\n const data = this.getFromCache(currentQuery);\n if (data !== undefined) {\n return of(data);\n }\n // Nominatim search documentation:\n // https://nominatim.org/release-docs/develop/api/Search/\n const url =\n 'https://nominatim.openstreetmap.org/search?format=json&limit=20&q=' +\n encodeURIComponent(currentQuery);\n const headers = {\n 'Content-Type': 'application/json'\n };\n this.addToCache(currentQuery, []);\n\n return this.http.get(url, { headers }).pipe(\n map((response) => {\n const searchResults = response as unknown as SearchResult[];\n const uniqueResults = distinct(searchResults);\n return this.addToCache(currentQuery, uniqueResults);\n })\n );\n })\n );\n }\n\n searchGeolocation(query: string): Observable<SearchResult[]> {\n this.currentSearch$.next(query);\n return this.currentQuery$;\n }\n\n getLabels(\n instance: GeolocationService,\n keys: GeoPoint[]\n ): Observable<DataSource<GeoPoint, string>> {\n const searchResults = instance.lastQueriesWithResults\n .get(instance.getLatestQuery())\n .filter((searchResult) => samePosition(searchResult, keys));\n return of(\n searchResults.map((searchResult) => {\n const key: GeoPoint = {\n type: 'Point',\n coordinates: [searchResult.lon, searchResult.lat]\n };\n return {\n key,\n label: searchResult.display_name\n };\n })\n );\n }\n\n getData(\n instance: GeolocationService,\n search: string\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.searchGeolocation(search).pipe(\n map((searchResults) =>\n searchResults.map((searchResult) => {\n const key: GeoPoint = {\n type: 'Point',\n coordinates: [searchResult.lon, searchResult.lat]\n };\n const label = searchResult.display_name;\n return { key, label };\n })\n )\n );\n }\n\n // Cache implemementation ---\n private getFromCache(query: string): SearchResult[] {\n if (this.lastQueriesWithResults.has(query)) {\n return this.lastQueriesWithResults.get(query);\n }\n return undefined;\n }\n private addToCache(query: string, data: SearchResult[]): SearchResult[] {\n if (this.lastQueriesWithResults.keys.length >= this.cacheSize) {\n const deletedQuery = this.lastQueriesLru[0];\n this.revomeFromCache(deletedQuery);\n }\n this.lastQueriesWithResults.set(query, data);\n this.lastQueriesLru.push(query);\n return data;\n }\n private revomeFromCache(query: string): void {\n this.lastQueriesWithResults.delete(query);\n const index = this.lastQueriesLru.findIndex((it) => it === query);\n this.lastQueriesLru.splice(index, 1);\n }\n private getLatestQuery(): string | null {\n return this.lastQueriesLru.length\n ? this.lastQueriesLru[this.lastQueriesLru.length - 1]\n : null;\n }\n // End cache implemementation ---\n}\n\nconst samePosition = (\n searchResult: SearchResult,\n keys: GeoPoint[]\n): boolean => {\n let found = false;\n keys.forEach((item) => {\n if (\n searchResult.lon === item.coordinates[0] &&\n searchResult.lat === item.coordinates[1]\n ) {\n found = true;\n }\n });\n return found;\n};\n\nconst distinct = (data: SearchResult[]): SearchResult[] => {\n const unique: { [key: string]: number } = {};\n return data.filter((r) => {\n if (unique[r.display_name]) {\n return false;\n }\n unique[r.display_name] = 1;\n return true;\n });\n};\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ElementRef,\n ViewChild,\n forwardRef,\n TemplateRef\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n AbstractControl,\n ValidationErrors,\n NG_VALIDATORS\n} from '@angular/forms';\nimport { DataSource } from '../datasource';\nimport {\n isInitialAndEmpty,\n isValidNumber,\n roundToMultipleOf\n} from '../helperFns';\nimport { languageDetector } from '../lang';\nimport { ModalService } from '../modal/modal.service';\nimport { GeoPoint } from '../map/geopoint';\nimport { Observable } from 'rxjs';\nimport { GeolocationService } from './geolocation.service';\n\n@Component({\n selector: 'lux-geolocation',\n templateUrl: './geolocation.component.html',\n styleUrls: ['./geolocation.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => GeolocationComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => GeolocationComponent)\n }\n ]\n})\nexport class GeolocationComponent implements OnInit {\n static idCounter = 0;\n\n @ViewChild('latitude', { static: true }) latitude: ElementRef;\n @ViewChild('longitude', { static: true }) longitude: ElementRef;\n\n touched = false;\n dirty = false;\n lastErrors: ValidationErrors | null = null;\n\n private _disabled: string | boolean;\n private _required: boolean;\n private _value: any;\n\n public latitudeValue?: number = null;\n public longitudeValue?: number = null;\n\n isValidNumber = isValidNumber;\n\n public userErrors = {\n en: {\n required: 'Required field.',\n minLatitude: 'Minimum latitude is $minLatitude.',\n maxLatitude: 'Maximum latitude is $maxLatitude.',\n minLongitude: 'Minimum longitude is $minLongitude.',\n maxLongitude: 'Maximum longitude is $maxLongitude.'\n },\n es: {\n required: 'El campo es obligatorio.',\n minLatitude: 'La latitud mínima es $minLatitude.',\n maxLatitude: 'La latitud máxima es $maxLatitude.',\n minLongitude: 'La longitud mínima es $minLongitude.',\n maxLongitude: 'La longitud máxima es $maxLongitude.'\n }\n };\n\n public cardinalPoints = {\n en: {\n north: 'N',\n south: 'S',\n east: 'E',\n west: 'W',\n unknown: '?'\n },\n es: {\n north: 'N',\n south: 'S',\n east: 'E',\n west: 'O',\n unknown: '?'\n }\n };\n\n @Input()\n public minLatitude: number;\n @Input()\n public maxLatitude: number;\n @Input()\n public minLongitude: number;\n @Input()\n public maxLongitude: number;\n @Input()\n public step: number;\n @Input()\n public zoom: number;\n\n get className(): string {\n return this.checkClassName();\n }\n\n @Input() lang = languageDetector();\n @Input() public inlineErrors = false;\n @Input() public inputId: string;\n @Input('aria-label') public ariaLabel: string;\n @Input() public readonly: boolean | null = null;\n\n @Input()\n set disabled(v: string | boolean) {\n v = typeof v === 'string' ? true : v;\n this._disabled = v;\n }\n get disabled(): string | boolean {\n return this._disabled;\n }\n\n @Input()\n set required(v: boolean) {\n this._required = v;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set value(v: GeoPoint) {\n if (v === this._value) {\n return; // prevent events when there is no changes\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n if (v.coordinates && v.coordinates.length === 2) {\n this._value = v;\n this.latitudeValue = v.coordinates[1];\n this.longitudeValue = v.coordinates[0];\n this.setLatitudeInControl(this.latitudeValue);\n this.setLongitudeInControl(this.longitudeValue);\n } else {\n this._value = undefined;\n this.latitudeValue = undefined;\n this.longitudeValue = undefined;\n this.setLatitudeInControl(this.latitudeValue);\n this.setLongitudeInControl(this.longitudeValue);\n }\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): GeoPoint {\n return this._value;\n }\n\n @Output() valueChange = new EventEmitter<GeoPoint>();\n @Output() keyPress = new EventEmitter<KeyboardEvent>();\n\n onChange = (value: any): void => {};\n onTouched = (): void => {};\n\n constructor(\n private modalService: ModalService,\n public locationService: GeolocationService\n ) {}\n\n // ControlValueAccessor Interface implementation\n writeValue(value: any): void {\n this.value = value;\n this.setLatitudeInControl(this.latitudeValue);\n this.setLongitudeInControl(this.longitudeValue);\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End of ControlValueAccessor Interface implementation\n\n private setLatitudeInControl(latitude: number): void {\n this.latitude.nativeElement.value = latitude;\n }\n private setLongitudeInControl(longitude: number): void {\n this.longitude.nativeElement.value = longitude;\n }\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n let result: ValidationErrors | null = null;\n\n if (this.required && (value === null || value === undefined)) {\n result = result || {};\n result.required = { value, reason: 'Required field.' };\n }\n if (\n this.minLatitude !== undefined &&\n this.minLatitude !== null &&\n this.latitudeValue < this.minLatitude\n ) {\n result = result || {};\n result.minLatitude = {\n value,\n min: this.minLatitude,\n reason: `Value is lower than minimum value: ${this.minLatitude}.`\n };\n }\n if (\n this.maxLatitude !== undefined &&\n this.maxLatitude !== null &&\n this.latitudeValue < this.maxLatitude\n ) {\n result = result || {};\n result.maxLatitude = {\n value,\n max: this.maxLatitude,\n reason: `Value is lower than maximum value: ${this.maxLatitude}.`\n };\n }\n if (\n this.minLongitude !== undefined &&\n this.minLongitude !== null &&\n this.longitudeValue < this.minLongitude\n ) {\n result = result || {};\n result.minLongitude = {\n value,\n min: this.minLongitude,\n reason: `Value is lower than minimum value: ${this.minLongitude}.`\n };\n }\n if (\n this.maxLongitude !== undefined &&\n this.maxLongitude !== null &&\n this.longitudeValue < this.maxLongitude\n ) {\n result = result || {};\n result.maxLongitude = {\n value,\n max: this.maxLongitude,\n reason: `Value is lower than maximum value: ${this.maxLongitude}.`\n };\n }\n this.lastErrors = result;\n return result;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `geolocation$${GeolocationComponent.idCounter++}`;\n this.setPatterns();\n }\n\n updateLatitude(newLatitude: number | null): void {\n if (this.disabled || this.readonly) {\n return;\n }\n this.value = {\n type: 'Point',\n coordinates: [this.longitudeValue, newLatitude]\n };\n }\n updateLongitude(newLongitude: number | null): void {\n if (this.disabled || this.readonly) {\n return;\n }\n this.value = {\n type: 'Point',\n coordinates: [newLongitude, this.latitudeValue]\n };\n }\n updateLatitudeAndLongitude(newLatitudeAndLongitude: number[]): void {\n if (this.disabled || this.readonly) {\n return;\n }\n this.value = {\n type: 'Point',\n coordinates: newLatitudeAndLongitude\n };\n }\n\n roundToStepAndUpdateLatitudeAndLongitude(\n newLatitudeAndLongitude: number[]\n ): void {\n const newLatitude = roundToMultipleOf(\n newLatitudeAndLongitude[1],\n this.step\n );\n const newLongitude = roundToMultipleOf(\n newLatitudeAndLongitude[0],\n this.step\n );\n if (this.disabled || this.readonly) {\n return;\n }\n this.value = {\n type: 'Point',\n coordinates: [newLongitude, newLatitude]\n };\n }\n\n onEventLatitude(newLatitude: string): void {\n if (isValidNumber(newLatitude)) {\n this.updateLatitude(+newLatitude);\n }\n }\n onEventLongitude(newLongitude: string): void {\n if (isValidNumber(newLongitude)) {\n this.updateLongitude(+newLongitude);\n }\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n\n checkClassName(): string {\n if (this.readonly === true) {\n return 'readonly';\n }\n return '';\n }\n\n openModalMap(modal: TemplateRef<any>): void {\n this.modalService.open(modal).result.then(\n (result) => {\n if (result !== 'cancel') {\n this.roundToStepAndUpdateLatitudeAndLongitude(result);\n }\n },\n (_) => {}\n );\n }\n\n get mapTitle(): string {\n return this._disabled || !!this.readonly ? 'Location:' : 'Select location:';\n }\n\n get self(): GeolocationComponent {\n return this;\n }\n\n getLabels(\n instance: GeolocationComponent,\n keys: GeoPoint[]\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.locationService.getLabels(instance.locationService, keys);\n }\n\n getData(\n instance: GeolocationComponent,\n search: string\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.locationService.getData(instance.locationService, search);\n }\n\n setPatterns(): void {\n this.step = this.step || 0.00001; // 0.00001 degrees = 1.11 meters\n this.zoom = this.zoom || 18; // (360/2^18) degrees ~ 0.00137 degrees ~ 153 meters\n this.minLatitude = this.minLatitude || -90;\n this.maxLatitude = this.maxLatitude || +90;\n this.minLongitude = this.minLongitude || -180;\n this.maxLongitude = this.maxLongitude || +180;\n }\n}\n","export enum Placement {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right'\n}\nexport type PlacementValue = 'left' | 'right' | 'top' | 'bottom';\n","import { Component, Input } from '@angular/core';\nimport { LuxTooltipContext } from './tooltip-context';\n\n/**\n * Default Tooltip Component\n */\n@Component({\n template: `\n <span class=\"lux-tooltip\" style=\"transition: opacity 200ms\">{{context.message}}</span>\n `\n})\nexport class TooltipComponent {\n\n @Input() context: LuxTooltipContext;\n\n constructor() { }\n\n}\n","import { ViewRef, ComponentRef } from '@angular/core';\n\nexport class TooltipContentRef {\n constructor(public viewRef?: ViewRef, public componentRef?: ComponentRef<any>) {}\n}\n","import {\n Injectable,\n Injector,\n ComponentRef,\n ComponentFactoryResolver,\n ApplicationRef,\n EmbeddedViewRef,\n ElementRef,\n TemplateRef\n} from '@angular/core';\n\nimport { PlacementValue, Placement } from './placement';\nimport { LuxTooltipContext } from './tooltip-context';\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipContentRef } from './tooltop-content';\n\n@Injectable()\nexport class TooltipService {\n constructor(\n private _injector: Injector,\n private _crf: ComponentFactoryResolver,\n private _applicationRef: ApplicationRef\n ) {}\n\n appendComponentToBody(\n content: any,\n elHost: ElementRef,\n placement: PlacementValue\n ): TooltipContentRef {\n const tooltipContentRef = this.getTooltipContentRef(content);\n if (tooltipContentRef) {\n let domElem = (tooltipContentRef.viewRef as EmbeddedViewRef<any>)\n .rootNodes[0];\n document.body.appendChild(domElem);\n if (tooltipContentRef.componentRef) {\n tooltipContentRef.componentRef.changeDetectorRef.detectChanges();\n }\n domElem = this.setStyle(domElem, placement);\n domElem = this.setPosition(domElem, elHost, placement);\n return tooltipContentRef;\n }\n return null;\n }\n\n removeComponentFromBody(tooltipContentRef: TooltipContentRef): void {\n this._applicationRef.detachView(tooltipContentRef.viewRef);\n if (tooltipContentRef.componentRef) {\n tooltipContentRef.componentRef.destroy();\n }\n }\n\n private getTooltipContentRef(content: any): TooltipContentRef {\n if (!content) {\n // nothing to show\n } else if (content instanceof TemplateRef) {\n return this.createFromTemplateRef(content);\n } else if (typeof content === 'string') {\n return this.createFromComponent(TooltipComponent, { message: content });\n } else {\n return this.createFromComponent(content);\n }\n }\n\n private createFromTemplateRef(content: TemplateRef<any>): TooltipContentRef {\n const viewRef = content.createEmbeddedView({});\n this._applicationRef.attachView(viewRef);\n return new TooltipContentRef(viewRef);\n }\n\n private createFromComponent(\n component: any,\n context?: LuxTooltipContext\n ): TooltipContentRef {\n const componentRef: ComponentRef<any> = this._crf\n .resolveComponentFactory(component)\n .create(this._injector);\n if (context) {\n componentRef.instance.context = context;\n }\n this._applicationRef.attachView(componentRef.hostView);\n return new TooltipContentRef(componentRef.hostView, componentRef);\n }\n\n private setStyle(\n domElem: HTMLElement,\n placement: PlacementValue\n ): HTMLElement {\n domElem.style.position = 'absolute';\n domElem.style.minWidth = 'min-content';\n domElem.style.minHeight = 'min-content';\n const tooltipElement = this.getTooltipElementFromHTMLElemnt(domElem);\n placement =\n placement !== undefined\n ? (placement.toLocaleLowerCase() as PlacementValue)\n : 'top'; // 'Top' is the default value of placement\n tooltipElement.classList.add(`lux-tooltip-${placement}`);\n tooltipElement.classList.add('lux-tooltip-show');\n return domElem;\n }\n\n private getTooltipElementFromHTMLElemnt(domElem: HTMLElement): any {\n const elementsArray = Array.from(domElem.classList).filter(\n (className) => className === 'lux-tooltip'\n );\n if (elementsArray.length !== 0) {\n return domElem;\n } else if (domElem.hasChildNodes()) {\n const childrenArray = Array.from(domElem.children).filter(\n (child) =>\n this.getTooltipElementFromHTMLElemnt(child as HTMLElement) !== null\n );\n if (childrenArray.length !== 0) {\n return this.getTooltipElementFromHTMLElemnt(\n childrenArray[0] as HTMLElement\n );\n } else {\n return null;\n }\n } else {\n return null;\n }\n }\n\n private setPosition(\n domElem: HTMLElement,\n elHost: ElementRef,\n placement: PlacementValue\n ): HTMLElement {\n const hostPos = elHost.nativeElement.getBoundingClientRect();\n const tooltipPos = domElem.getBoundingClientRect();\n const scrollPos =\n window.pageYOffset ||\n document.documentElement.scrollTop ||\n document.body.scrollTop ||\n 0;\n let top = 0;\n let left = 0;\n const offset = 10;\n\n switch (placement) {\n case Placement.Bottom:\n top = hostPos.bottom + offset;\n left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;\n break;\n case Placement.Left:\n top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;\n left = hostPos.left - tooltipPos.width - offset;\n break;\n case Placement.Right:\n top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;\n left = hostPos.right + offset;\n break;\n case Placement.Top:\n default:\n top = hostPos.top - tooltipPos.height - offset;\n left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;\n break;\n }\n top = Math.max(0, top);\n left = Math.max(0, left);\n domElem.style.top = `${top + scrollPos}px`;\n domElem.style.left = `${left}px`;\n return domElem;\n }\n}\n","import { HostListener, Input, Directive, ElementRef } from '@angular/core';\n\nimport { TooltipService } from './tooltip.service';\nimport { PlacementValue } from './placement';\nimport { TooltipContentRef } from './tooltop-content';\n\n/**\n * Tooltip directive\n */\n@Directive({\n selector: '[luxTooltip]'\n})\nexport class LuxTooltipDirective {\n /** Tooltip title */\n @Input() luxTooltip: any;\n\n /** Component, TemplateRef or String */\n @Input() content: any;\n\n /** Placement */\n @Input() placement: PlacementValue;\n\n tooltipRef: TooltipContentRef;\n\n constructor(\n private elHost: ElementRef,\n private tooltipService: TooltipService\n ) {}\n\n @HostListener('mouseenter') onMouseEnter(): void {\n if (!this.tooltipRef) {\n this.tooltipRef = this.show(this.content, this.elHost, this.placement);\n }\n }\n\n @HostListener('mouseleave') onMouseLeave(): void {\n if (this.tooltipRef) {\n this.remove(this.tooltipRef);\n this.tooltipRef = null;\n }\n }\n\n @HostListener('click') onClick(): void {\n if (this.tooltipRef) {\n this.remove(this.tooltipRef);\n this.tooltipRef = null;\n }\n }\n\n show(\n component: any,\n elHost: ElementRef,\n placement: PlacementValue\n ): TooltipContentRef {\n return this.tooltipService.appendComponentToBody(\n component,\n elHost,\n placement\n );\n }\n\n remove(tooltipRef: TooltipContentRef): void {\n this.tooltipService.removeComponentFromBody(tooltipRef);\n }\n}\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\nimport {\n Router,\n NavigationEnd,\n ActivatedRoute,\n ActivatedRouteSnapshot\n} from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\n\nexport interface BreadcrumbItem {\n label: string;\n url: string;\n}\n@Component({\n selector: 'lux-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss']\n})\nexport class LuxBreadcrumbComponent implements OnInit, OnDestroy {\n public breadcrumbs: BreadcrumbItem[];\n private subs: Subscription[] = [];\n public imagePath = '../assets/img/arrow-forward.svg';\n\n constructor(private route: Router, private activedRoute: ActivatedRoute) {}\n\n ngOnInit(): void {\n this.subs.push(\n this.route.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((_) => {\n this.breadcrumbs = [];\n this.addBreadcrumbs(this.activedRoute.snapshot.root, true, null);\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subs.forEach((s) => s.unsubscribe());\n this.subs = [];\n }\n\n private addBreadcrumbs(\n activedRouteSnapshot: ActivatedRouteSnapshot,\n isRoot: boolean,\n urlPrefix: string\n ): void {\n const routeConfig = activedRouteSnapshot.routeConfig;\n let url = urlPrefix || '';\n url += routeConfig ? '/' + this.getUrl(activedRouteSnapshot) : '';\n const label = routeConfig\n ? this.getLabel(activedRouteSnapshot)\n : isRoot\n ? 'Home'\n : '';\n if (label && url !== '/') {\n const breadcrumb = { label, url };\n this.breadcrumbs.push(breadcrumb);\n }\n if (activedRouteSnapshot.children.length) {\n this.addBreadcrumbs(activedRouteSnapshot.children[0], false, url);\n }\n }\n\n private getUrl(activedRouteSnapshot: ActivatedRouteSnapshot): string {\n if (!activedRouteSnapshot.url[0]) {\n return '';\n }\n const id = activedRouteSnapshot.params.id;\n return id\n ? `${activedRouteSnapshot.url[0]}/${id}`\n : activedRouteSnapshot.routeConfig.path || '';\n }\n\n private getLabel(activedRouteSnapshot: ActivatedRouteSnapshot): string {\n const routeConfig = activedRouteSnapshot.routeConfig;\n if (!routeConfig) {\n return null;\n }\n if (activedRouteSnapshot.data && activedRouteSnapshot.data.title) {\n const data = activedRouteSnapshot.data;\n if (data.objectTitle) {\n return `${data.title} ${data.objectTitle}`;\n } else {\n return data.title;\n }\n }\n return activedRouteSnapshot.params.id || routeConfig.path;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { from, Observable, of } from 'rxjs';\n\nlet openLayersIsInstalled = false;\n\n@Injectable({ providedIn: 'root' })\nexport class OpenLayerLoaderService {\n load(): Observable<boolean> {\n if ((window as any).ol) {\n return of(true);\n }\n\n const openLayerJsUrl = 'https://openlayers.org/en/v5.3.0/build/ol.js';\n const openLayerCssUrl = 'https://openlayers.org/en/v5.3.0/css/ol.css';\n\n if (!openLayersIsInstalled) {\n openLayersIsInstalled = true; // only try to install it once\n loadCss(openLayerCssUrl, () => {});\n return from(\n new Promise<boolean>((resolve, _) => {\n loadScript(openLayerJsUrl, () => resolve(true));\n })\n );\n }\n return of(true);\n }\n}\n\n/** Dynamically load a script from url and return a callback */\nconst loadScript = (url: string, callback: () => void): void => {\n const script: any = document.createElement('script');\n script.type = 'text/javascript';\n\n if (script.readyState) {\n // for old IE\n script.onreadystatechange = (): void => {\n if (script.readyState === 'loaded' || script.readyState === 'complete') {\n script.onreadystatechange = null;\n callback();\n }\n };\n } else {\n // Others browsers\n script.onload = (): void => {\n callback();\n };\n }\n script.src = url;\n document.getElementsByTagName('head')[0].appendChild(script);\n};\n\n/** Dynamically load css from url and return a callback */\nconst loadCss = (url: string, callback: () => void): void => {\n const link: any = document.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.type = 'text/javascript';\n link.href = url;\n link.onload = (): void => {\n callback();\n };\n document.getElementsByTagName('head')[0].appendChild(link);\n};\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n AfterViewInit\n} from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { OpenLayerLoaderService } from '../geolocation/openlayer-loader.service';\n\nimport { GeoPoint } from './geopoint';\n\n// @dynamic\ndeclare const ol: any;\n\n@Component({\n selector: 'lux-map',\n templateUrl: './map.component.html',\n styleUrls: ['./map.component.scss']\n})\nexport class MapComponent implements OnInit, AfterViewInit {\n static idCounter = 0;\n\n private loaded$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n private _map: any;\n\n @Input() mapId;\n\n _zoom: number;\n @Input()\n set zoom(zoom: number) {\n if (!isNaN(zoom)) {\n this._zoom = zoom;\n if (this._map) {\n this._map.getView().setZoom(zoom);\n }\n }\n }\n get zoom(): number {\n return this._zoom;\n }\n\n _center: GeoPoint;\n @Input()\n set center(center: GeoPoint) {\n if (center) {\n if (center.coordinates && center.coordinates.length === 2) {\n this._center = center;\n if (this._map) {\n this._map.getView().setCenter(ol.proj.fromLonLat(center.coordinates));\n }\n }\n }\n }\n get center(): GeoPoint {\n return this._center;\n }\n\n _readonly: boolean;\n @Input()\n set readonly(readonly: boolean) {\n if (!readonly) {\n if (this._map) {\n this._map.on('click', (args: any) => {\n // args.coordinate is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)\n const coordinates = ol.proj.toLonLat(args.coordinate);\n // alternatively: const lonLat = ol.proj.transform(args.coordinate,'EPSG:3857','EPSG:4326');\n this.addMarkerAtCoordinates(coordinates);\n });\n this._map.on('pointermove', (event: any) => {\n const pixel = this._map.getEventPixel(event.originalEvent);\n const hit = this._map.hasFeatureAtPixel(pixel);\n this._map.getViewport().style.cursor = hit ? 'move' : 'grab';\n });\n }\n } else {\n if (this._map) {\n this._map.on('click', (args: any) => {});\n this._map.on('pointermove', (event: any) => {});\n this._map.getViewport().style.cursor = 'grab';\n }\n }\n this._readonly = readonly;\n // reset marker coordinates so marker interactions can be created or recreated accordingly\n // to the changes to readonly\n this.markerCoordinates = this.markerCoordinates;\n }\n get readonly(): boolean {\n return this._readonly;\n }\n\n private _marker: any;\n private _markerInteraction: any;\n private _markerCoordinates: number[];\n @Input()\n private set markerCoordinates(markerCoordinates: number[]) {\n if (markerCoordinates && markerCoordinates.length === 2) {\n this._markerCoordinates = markerCoordinates;\n if (this._map) {\n this.addMarkerAtCoordinates(markerCoordinates);\n }\n } else {\n this._markerCoordinates = undefined;\n if (this._map) {\n this.removeMarker();\n }\n }\n }\n private get markerCoordinates(): number[] {\n return this._markerCoordinates;\n }\n @Input()\n set markerPoint(markerPoint: GeoPoint) {\n if (\n !markerPoint ||\n !(markerPoint.coordinates && markerPoint.coordinates.length === 2)\n ) {\n this.markerCoordinates = undefined;\n } else {\n this.markerCoordinates = [\n +markerPoint.coordinates[0],\n +markerPoint.coordinates[1]\n ];\n }\n this.valueChange.emit(markerPoint);\n }\n get markerPoint(): GeoPoint {\n return {\n type: 'Point',\n coordinates: this.markerCoordinates\n };\n }\n @Output() valueChange = new EventEmitter<GeoPoint>();\n\n private _markerSource: any;\n private _markerStyle: any;\n\n constructor(olLoader: OpenLayerLoaderService) {\n olLoader.load().subscribe((_) => {\n // Initialize\n this._markerSource = new ol.source.Vector();\n this._markerStyle = new ol.style.Style({\n image: new ol.style.Icon({\n anchor: [0.5, 1],\n scale: 0.25,\n src: '/assets/img/marker.png'\n })\n });\n this.loaded$.next(true);\n });\n }\n\n ngOnInit(): void {\n this.mapId = this.mapId ? this.mapId : 'map' + MapComponent.idCounter++;\n }\n\n ngAfterViewInit(): void {\n this.loaded$.subscribe((loaded) => {\n if (loaded) {\n this.initMap();\n }\n });\n }\n private initMap(): void {\n this._map = new ol.Map({\n target: this.mapId,\n controls: ol.control.defaults({ attribution: false }),\n layers: [\n new ol.layer.Tile({\n source: new ol.source.OSM()\n }),\n new ol.layer.Vector({\n source: this._markerSource,\n style: this._markerStyle\n })\n ],\n view: new ol.View({\n center: ol.proj.fromLonLat(\n this.center !== undefined ? this.center.coordinates : [0, 0]\n ),\n zoom: this.zoom\n })\n });\n\n if (this.center === undefined || this.center === null) {\n // if the center is not set, we set its default value\n if ('geolocation' in navigator) {\n navigator.geolocation.getCurrentPosition(\n (position) => {\n this.center = {\n type: 'Point',\n coordinates: [position.coords.longitude, position.coords.latitude]\n };\n },\n (error) => {\n this.center = {\n type: 'Point',\n coordinates: [0, 0]\n };\n }\n );\n } else {\n this.center = {\n type: 'Point',\n coordinates: [0, 0]\n };\n }\n } else {\n // the center needs the map to be properly set, so if it was set before the map was initialized,\n // we set the center again to perform necessary adjustements\n this.center = this.center;\n }\n\n if (this.zoom === undefined || this.zoom === null) {\n // if the zoom is not set, we set its default value\n this.zoom = 18;\n } else {\n // the zoom needs the map to be properly set, so if it was set before the map was initialized,\n // we set the zoom again to perform necessary adjustements\n this.zoom = this.zoom;\n }\n\n if (this.readonly === undefined || this.readonly === null) {\n // if readonly is not set, we set its default value\n this.readonly = false;\n } else {\n // readonly needs the map to be properly set, so if it was set before the map was initialized,\n // we set readonly again to perform necessary adjustements\n this.readonly = this.readonly;\n }\n\n if (\n this.markerCoordinates !== undefined &&\n this.markerCoordinates !== null\n ) {\n // the marker coordinates need the map to be properly set, so if they were set before the map was initialized,\n // we set the marker coordinates again to perform necessary adjustements\n this.markerCoordinates = this.markerCoordinates;\n }\n }\n\n private addMarkerAtCoordinates(coordinates: number[]): void {\n if (coordinates && coordinates.length === 2) {\n if (this._marker !== undefined) {\n this.removeMarker();\n }\n this._marker = new ol.Feature({\n geometry: new ol.geom.Point(\n // [lon, lat] is in EPSG:4326 (degrees), we transform it into EPSG:3857 (meters)\n ol.proj.transform(coordinates, 'EPSG:4326', 'EPSG:3857')\n )\n });\n this._markerSource.addFeature(this._marker);\n this._markerCoordinates = this.getMarkerCoordinates();\n\n if (!this.readonly) {\n const dragInteraction = new ol.interaction.Modify({\n features: new ol.Collection([this._marker]),\n style: this._markerStyle,\n pixelTolerance: 50,\n hitDetection: true\n });\n this._markerInteraction = dragInteraction;\n this._map.addInteraction(dragInteraction);\n }\n\n this._marker.on(\n 'change',\n () => {\n this._markerCoordinates = this.getMarkerCoordinates();\n },\n this._marker\n );\n }\n }\n\n private removeMarker(): void {\n if (this._marker !== undefined) {\n this._markerSource.removeFeature(this._marker);\n this._marker = undefined;\n }\n if (this._markerInteraction !== undefined) {\n this._map.getInteractions().pop();\n this._markerInteraction = undefined;\n }\n }\n\n private getMarkerCoordinates(): number[] | null {\n if (this._marker === undefined || this._marker == null) {\n return this._marker;\n }\n const coordinates = this._marker.getGeometry().getCoordinates();\n // coordinates is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)\n return ol.proj.transform(coordinates, 'EPSG:3857', 'EPSG:4326');\n }\n\n onResize(): void {\n if (this._map) {\n this._map.updateSize();\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { languageDetector } from '../lang';\r\nimport { PaginationInfo } from './pagination';\r\n\r\n@Component({\r\n selector: 'lux-pagination',\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.scss']\r\n})\r\nexport class PaginationComponent implements OnInit {\r\n literals = {\r\n en: {\r\n first: 'First',\r\n previous: 'Previous',\r\n next: 'Next',\r\n last: 'Last'\r\n },\r\n es: {\r\n first: 'Primero',\r\n previous: 'Anterior',\r\n next: 'Siguiente',\r\n last: 'Último'\r\n }\r\n };\r\n\r\n public first: string;\r\n public previous: string;\r\n public next: string;\r\n public last: string;\r\n\r\n public showPagination = false;\r\n public hidePrevious = false;\r\n public lastPage = false;\r\n public totalPages = 0;\r\n public displayNextEllipsis = false;\r\n public displayPreviousEllipsis = false;\r\n\r\n public pages: number[] = [];\r\n\r\n @Output() goToPage = new EventEmitter<number>();\r\n @Output() pageSizeChange = new EventEmitter<number>();\r\n\r\n /** Current page, total items and items to show per page */\r\n private paginationInfoValue: PaginationInfo;\r\n\r\n private _lang: string;\r\n @Input()\r\n set lang(l: string) {\r\n if (l === this._lang) {\r\n return;\r\n }\r\n if (Object.keys(this.literals).includes(l)) {\r\n this._lang = l;\r\n } else {\r\n this._lang = 'en';\r\n }\r\n this.loadLanguage();\r\n }\r\n get lang(): string {\r\n return this._lang;\r\n }\r\n\r\n @Input()\r\n set paginationInfo(value: PaginationInfo) {\r\n this.paginationInfoValue = value;\r\n this.syncState();\r\n }\r\n get paginationInfo(): PaginationInfo {\r\n return this.paginationInfoValue;\r\n }\r\n\r\n constructor() {\r\n this.lang = languageDetector();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.calculatePages();\r\n }\r\n\r\n pageSizeChanged(pageSize: number): void {\r\n this.paginationInfo.pageSize = pageSize;\r\n this.syncState();\r\n this.pageSizeChange.emit(pageSize);\r\n }\r\n\r\n onPage(n: number): void {\r\n this.goToPage.emit(n);\r\n }\r\n\r\n onFirst(): void {\r\n this.goToPage.emit(0);\r\n }\r\n\r\n onLast(): void {\r\n this.goToPage.emit(this.totalPages - 1);\r\n }\r\n onNext(): void {\r\n const page = (this.paginationInfo.page || 0) + 1;\r\n this.goToPage.emit(page);\r\n }\r\n onPrevious(): void {\r\n const page = (this.paginationInfo.page || 0) - 1;\r\n this.goToPage.emit(page);\r\n }\r\n\r\n private syncState(): void {\r\n this.pages = this.calculatePages();\r\n\r\n this.showPagination =\r\n this.paginationInfo.total > this.paginationInfo.pageSize;\r\n this.hidePrevious = this.paginationInfo.page === 0;\r\n this.lastPage =\r\n this.paginationInfo.pageSize * (this.paginationInfo.page + 1) >=\r\n this.paginationInfo.total;\r\n this.totalPages =\r\n Math.ceil(this.paginationInfo.total / this.paginationInfo.pageSize) || 0;\r\n this.displayNextEllipsis = !this.pages.includes(this.totalPages - 1);\r\n this.displayPreviousEllipsis = !this.pages.includes(0);\r\n }\r\n\r\n private calculatePages(): number[] {\r\n const totalPages =\r\n Math.ceil(this.paginationInfo.total / this.paginationInfo.pageSize) - 1; // 0-index\r\n const p = this.paginationInfo.page || 0;\r\n const pagesToShow = this.paginationInfo.pagesToShow;\r\n const pages: number[] = [];\r\n pages.push(p);\r\n const times = pagesToShow - 1;\r\n for (let i = 0; i < times; i++) {\r\n if (pages.length < pagesToShow) {\r\n if (Math.min(...pages) > 0) {\r\n pages.unshift(Math.min(...pages) - 1);\r\n }\r\n }\r\n if (pages.length < pagesToShow) {\r\n if (Math.max(...pages) < totalPages) {\r\n pages.push(Math.max(...pages) + 1);\r\n }\r\n }\r\n }\r\n pages.sort((a, b) => a - b);\r\n return pages;\r\n }\r\n\r\n private loadLanguage(): void {\r\n const l = this.literals[this.lang];\r\n this.first = l.first;\r\n this.previous = l.previous;\r\n this.next = l.next;\r\n this.last = l.last;\r\n }\r\n}\r\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { isInitialAndEmpty } from '../helperFns';\n\nexport interface RadioItem {\n name?: string;\n label: string;\n value: any;\n}\n\n@Component({\n selector: 'lux-radiogroup',\n templateUrl: './radiogroup.component.html',\n styleUrls: ['./radiogroup.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => RadiogroupComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => RadiogroupComponent)\n }\n ]\n})\nexport class RadiogroupComponent implements ControlValueAccessor, Validator {\n private touched = false;\n\n @Input() name = 'radiogroup1';\n @Input() public disabled: boolean | null = false;\n @Input() public readonly: boolean | null = false;\n @Input() public required: boolean | null = false;\n\n @Input()\n set items(col: RadioItem[]) {\n this._items = (col || []).map((it, index) =>\n this.ensureHasUniqueName(it, index)\n );\n this.itemsChange.emit(col);\n }\n get items(): RadioItem[] {\n return this._items;\n }\n @Output() itemsChange = new EventEmitter<RadioItem[]>();\n\n @Input()\n set value(v: any) {\n if (v === this._value) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n this._value = v;\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): any {\n return this._value;\n }\n @Output() valueChange = new EventEmitter<any>();\n\n private _value: any = undefined;\n private _items: RadioItem[] = [];\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n setValue(event: MouseEvent, item: RadioItem): void {\n if (!this.disabled && !this.readonly) {\n this.value = item.value;\n this.markAsTouched();\n }\n event.preventDefault();\n }\n ensureHasUniqueName(item: RadioItem, index: number): RadioItem {\n if (!item.name) {\n item.name = `${this.name}_${index}`;\n }\n return item;\n }\n}\n","import {\n Component,\n Input,\n EventEmitter,\n Output,\n forwardRef\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\n\nlet sequencer = 0;\n\n@Component({\n selector: 'lux-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => SelectComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => SelectComponent)\n }\n ]\n})\nexport class SelectComponent implements ControlValueAccessor, Validator {\n @Input() id = 'stringList' + sequencer++;\n @Input() disabled = false;\n @Input() required = false;\n /** Allow multiple elements */\n @Input() multiple = true;\n @Input() value: string[] = [];\n @Output() valueChange = new EventEmitter<string[]>();\n @Input() placeholder = 'Add new';\n /** If set, check there is no duplicates in the data. */\n @Input() unique = true;\n /** Validation function for new items. Returns error or null if valid */\n @Input() validateItem: (item: string) => string = (_) => null;\n\n newEntry = '';\n error = null;\n isValidNewEntry = false;\n\n private touched = false;\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n get canAdd(): boolean {\n return this.multiple || this.value.length === 0;\n }\n add(val: string): void {\n this.value.push(val);\n this.newEntry = '';\n this.markAsTouched();\n this.valueChange.emit(this.value);\n }\n remove(index: number): void {\n if (this.value.length > index) {\n this.value.splice(index, 1);\n this.markAsTouched();\n this.valueChange.emit(this.value);\n }\n }\n onKeyPress(event: KeyboardEvent): void {\n if (event.key === 'Enter' && !this.error && this.newEntry !== '') {\n // Add on pressing Enter/Return\n this.markAsTouched();\n this.add(this.newEntry);\n }\n }\n onChangeNewEntry(newValue: string): void {\n this.markAsTouched();\n if (!newValue) {\n this.isValidNewEntry = false;\n this.error = null;\n return;\n }\n if (this.unique) {\n const found = (this.value || []).find((it) => it === newValue);\n this.isValidNewEntry = !found;\n this.error = found\n ? `Value '${newValue}' is already in. Cannot add duplicates.`\n : null;\n if (!this.isValidNewEntry) {\n return;\n }\n }\n this.error = this.validateItem(newValue);\n this.isValidNewEntry = !this.error;\n }\n}\n","import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[luxVoiceRecognition]'\n})\nexport class VoiceRecognitionDirective implements OnInit {\n @Input() language: string;\n // See API at: https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition\n private recognition: any;\n private isRecognizing = false;\n private mic: any;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {\n const speechRecognition = (window as any).webkitSpeechRecognition;\n if (speechRecognition) {\n this.recognition = new speechRecognition();\n }\n }\n\n ngOnInit(): void {\n if (this.recognition) {\n // API is available\n this.recognition.lang = this.language || window.navigator.language;\n this.recognition.interimResults = false;\n this.recognition.maxAlternatives = 1;\n\n // Add mic icon\n this.mic = document.createElement('div');\n this.mic.setAttribute('class', 'lux-microphone');\n\n const parent = this.el.nativeElement.parentElement;\n parent.appendChild(this.mic);\n\n // Add event handlers\n this.mic.onclick = (): void => this.microphoneClick();\n this.recognition.onresult = (event): void => this.onRecognized(event);\n }\n }\n\n microphoneClick(): void {\n if (this.isRecognizing) {\n // stop\n this.isRecognizing = false;\n this.renderer.removeClass(this.mic, 'lux-recording');\n this.recognition.abort();\n } else {\n // start\n this.el.nativeElement.value = getRecordingMessage(this.language);\n this.isRecognizing = true;\n this.renderer.addClass(this.mic, 'lux-recording');\n this.recognition.start();\n }\n }\n onRecognized(event: any): void {\n const recognizedText = event.results[0][0].transcript;\n this.isRecognizing = false;\n this.el.nativeElement.value = recognizedText;\n this.renderer.removeClass(this.mic, 'lux-recording');\n }\n}\n\nconst getRecordingMessage = (lang: string): string => {\n switch (lang.toLowerCase()) {\n case 'es':\n case 'es-es':\n return 'Grabando...';\n case 'en':\n case 'en-uk':\n case 'en-us':\n default:\n return 'Recording...';\n }\n};\n","\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { ClassProvider, FactoryProvider, InjectionToken, PLATFORM_ID } from '@angular/core';\n\n/* Create a new injection token for injecting the window into a component. */\nexport const WINDOW = new InjectionToken('WindowToken');\n\n/* Define abstract class for obtaining reference to the global window object. */\nexport abstract class WindowRef {\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n get nativeWindow(): Window | Object {\n throw new Error('Not implemented.');\n }\n\n}\n\n/* Define class that implements the abstract class and returns the native window object. */\nexport class BrowserWindowRef extends WindowRef {\n\n constructor() {\n super();\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n get nativeWindow(): Window | Object {\n return window;\n }\n\n}\n\n/* Create an factory function that returns the native window object. */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const windowFactory = (browserWindowRef: BrowserWindowRef, platformId: Object): Window | Object => {\n if (isPlatformBrowser(platformId)) {\n return browserWindowRef.nativeWindow;\n }\n return new Object();\n};\n\n/* Create a injectable provider for the WindowRef token that uses the BrowserWindowRef class. */\nconst browserWindowProvider: ClassProvider = {\n provide: WindowRef,\n useClass: BrowserWindowRef\n};\n\n/* Create an injectable provider that uses the windowFactory function for returning the native window object. */\nconst windowProvider: FactoryProvider = {\n provide: WINDOW,\n useFactory: windowFactory,\n deps: [ WindowRef, PLATFORM_ID ]\n};\n\n/* Create an array of providers. */\nexport const WINDOW_PROVIDERS = [\n browserWindowProvider,\n windowProvider\n];\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { AngularResizedEventModule } from 'angular-resize-event';\nimport { AutocompleteComponent } from './autocomplete/autocomplete.component';\nimport { AutocompleteListComponent } from './autocomplete-list/autocomplete-list.component';\nimport { CheckboxComponent } from './checkbox/checkbox.component';\nimport { InputComponent } from './input/input.component';\nimport { FilterComponent } from './filter/filter.component';\nimport { GeolocationComponent } from './geolocation/geolocation.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { LuxTooltipDirective } from './tooltip/tooltip.directive';\nimport { LuxBreadcrumbComponent } from './breadcrumb/breadcrumb.component';\nimport { LuxModalWindowComponent } from './modal/modal-window';\nimport { LuxModalBackdropComponent } from './modal/modal-backdrop';\nimport { MapComponent } from './map/map.component';\nimport { ModalService } from './modal/modal.service';\nimport { PaginationComponent } from './pagination/pagination.component';\nimport { RadiogroupComponent } from './radiogroup/radiogroup.component';\nimport { SelectComponent } from './select/select.component';\nimport { TooltipComponent } from './tooltip/tooltip.component';\nimport { TooltipService } from './tooltip/tooltip.service';\nimport { VoiceRecognitionDirective } from './voice-recognition/voice-recognition.directive';\nimport { WINDOW_PROVIDERS } from './window/window.service';\n\n@NgModule({\n declarations: [\n AutocompleteComponent,\n AutocompleteListComponent,\n FilterComponent,\n CheckboxComponent,\n InputComponent,\n GeolocationComponent,\n LuxTooltipDirective,\n LuxModalWindowComponent,\n LuxModalBackdropComponent,\n LuxBreadcrumbComponent,\n MapComponent,\n SelectComponent,\n TooltipComponent,\n PaginationComponent,\n RadiogroupComponent,\n VoiceRecognitionDirective\n ],\n entryComponents: [\n LuxModalWindowComponent,\n LuxModalBackdropComponent,\n TooltipComponent\n ],\n providers: [ModalService, TooltipService, WINDOW_PROVIDERS],\n imports: [\n AngularResizedEventModule,\n FormsModule,\n HttpClientModule,\n ReactiveFormsModule,\n RouterModule,\n CommonModule\n ],\n exports: [\n AutocompleteComponent,\n AutocompleteListComponent,\n FilterComponent,\n CheckboxComponent,\n InputComponent,\n GeolocationComponent,\n LuxTooltipDirective,\n LuxBreadcrumbComponent,\n LuxBreadcrumbComponent,\n MapComponent,\n SelectComponent,\n PaginationComponent,\n RadiogroupComponent,\n VoiceRecognitionDirective\n ]\n})\nexport class LuxModule {}\n","/*\n * Public API Surface of lux\n */\n\nexport { LuxModule } from './lib/lux.module';\nexport {\n DataSource,\n DataSourceItem,\n DecoratedDataSource,\n DecoratedDataSourceItem\n} from './lib/datasource';\nexport { AutocompleteComponent } from './lib/autocomplete/autocomplete.component';\nexport { AutocompleteListComponent } from './lib/autocomplete-list/autocomplete-list.component';\nexport {\n LuxBreadcrumbComponent,\n BreadcrumbItem\n} from './lib/breadcrumb/breadcrumb.component';\nexport { CheckboxComponent } from './lib/checkbox/checkbox.component';\nexport { FilterComponent } from './lib/filter/filter.component';\nexport { InputComponent } from './lib/input/input.component';\nexport { PaginationComponent } from './lib/pagination/pagination.component';\nexport { LuxTooltipDirective } from './lib/tooltip/tooltip.directive';\nexport { ModalService } from './lib/modal/modal.service';\nexport {\n RadioItem,\n RadiogroupComponent\n} from './lib/radiogroup/radiogroup.component';\nexport { ModalRef } from './lib/modal/modal-ref';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {GeolocationComponent as ɵa} from './lib/geolocation/geolocation.component';\nexport {GeolocationService as ɵd} from './lib/geolocation/geolocation.service';\nexport {OpenLayerLoaderService as ɵi} from './lib/geolocation/openlayer-loader.service';\nexport {MapComponent as ɵh} from './lib/map/map.component';\nexport {LuxModalBackdropComponent as ɵg} from './lib/modal/modal-backdrop';\nexport {LuxModalConfig as ɵc} from './lib/modal/modal-config';\nexport {ModalStack as ɵb} from './lib/modal/modal-stack';\nexport {LuxModalWindowComponent as ɵf} from './lib/modal/modal-window';\nexport {ContentRef as ɵr} from './lib/modal/util';\nexport {SelectComponent as ɵj} from './lib/select/select.component';\nexport {TooltipComponent as ɵk} from './lib/tooltip/tooltip.component';\nexport {TooltipService as ɵe} from './lib/tooltip/tooltip.service';\nexport {VoiceRecognitionDirective as ɵl} from './lib/voice-recognition/voice-recognition.directive';\nexport {BrowserWindowRef as ɵo,WINDOW as ɵm,WINDOW_PROVIDERS as ɵq,WindowRef as ɵn,windowFactory as ɵp} from './lib/window/window.service';"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metadev-lux.js","sources":["../../../projects/lux/src/lib/helperFns.ts","../../../projects/lux/src/lib/autocomplete/autocomplete.component.ts","../../../projects/lux/src/lib/lang.ts","../../../projects/lux/src/lib/autocomplete-list/autocomplete-list.component.ts","../../../projects/lux/src/lib/checkbox/checkbox.component.ts","../../../projects/lux/src/lib/input/input.component.ts","../../../projects/lux/src/lib/filter/filter.component.ts","../../../projects/lux/src/lib/modal/modal-ref.ts","../../../projects/lux/src/lib/modal/util.ts","../../../projects/lux/src/lib/modal/modal-dismiss-reasons.ts","../../../projects/lux/src/lib/modal/modal-window.ts","../../../projects/lux/src/lib/modal/modal-backdrop.ts","../../../projects/lux/src/lib/modal/modal-config.ts","../../../projects/lux/src/lib/modal/modal-stack.ts","../../../projects/lux/src/lib/modal/modal.service.ts","../../../projects/lux/src/lib/geolocation/geolocation.service.ts","../../../projects/lux/src/lib/geolocation/geolocation.component.ts","../../../projects/lux/src/lib/tooltip/placement.ts","../../../projects/lux/src/lib/tooltip/tooltip.component.ts","../../../projects/lux/src/lib/tooltip/tooltop-content.ts","../../../projects/lux/src/lib/tooltip/tooltip.service.ts","../../../projects/lux/src/lib/tooltip/tooltip.directive.ts","../../../projects/lux/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/lux/src/lib/geolocation/openlayer-loader.service.ts","../../../projects/lux/src/lib/map/map.component.ts","../../../projects/lux/src/lib/pagination/pagination.component.ts","../../../projects/lux/src/lib/radiogroup/radiogroup.component.ts","../../../projects/lux/src/lib/select/select.component.ts","../../../projects/lux/src/lib/voice-recognition/voice-recognition.directive.ts","../../../projects/lux/src/lib/window/window.service.ts","../../../projects/lux/src/lib/lux.module.ts","../../../projects/lux/src/public-api.ts","../../../projects/lux/src/metadev-lux.ts"],"sourcesContent":["// undefined and null functions\r\n\r\nexport const exists = (value: any): boolean =>\r\n value !== null && value !== undefined;\r\n\r\nexport const hasValue = (value: any): boolean =>\r\n exists(value) && (typeof value === 'string' ? !isEmptyString(value) : true);\r\n\r\n// string functions\r\n\r\nexport const isEmptyString = (value: string): boolean => value.trim() === '';\r\n\r\nexport const isValidEmail = (value: string): boolean => {\r\n const re =\r\n /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;\r\n return re.test(String(value).toLowerCase().trim());\r\n};\r\n\r\n// date functions\r\n\r\nexport const normalizeDate = (value: any): string => {\r\n if (typeof value === 'string' && value.length > 10) {\r\n return value.substr(0, 10);\r\n }\r\n return value ? value.toString() : null;\r\n};\r\n\r\n// number functions\r\n\r\nexport const isValidNumber = (\r\n value: string | number | undefined | null\r\n): boolean => (hasValue(value) ? !Number.isNaN(Number(value)) : false);\r\n\r\nexport const numberOfDecimalDigits = (\r\n x: number | string\r\n): number | undefined => {\r\n if (isValidNumber(x)) {\r\n const xString = String(Number(x));\r\n if (xString === 'Infinity') {\r\n return 0;\r\n }\r\n const indexOfE = xString.indexOf('e');\r\n if (indexOfE >= 0) {\r\n return 0;\r\n }\r\n const indexOfDecimalPoint = xString.indexOf('.');\r\n if (indexOfDecimalPoint < 0) {\r\n return 0;\r\n } else {\r\n return xString.length - indexOfDecimalPoint - 1;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const numberOfWholeDigits = (x: number | string): number | undefined => {\r\n if (isValidNumber(x)) {\r\n let xString = String(Number(x));\r\n if (xString.indexOf('-') === 0) {\r\n xString = xString.slice(1, xString.length);\r\n }\r\n if (xString === 'Infinity') {\r\n return Infinity;\r\n }\r\n if (xString.indexOf('0') === 0) {\r\n xString = xString.slice(1, xString.length);\r\n }\r\n const indexOfE = xString.indexOf('e');\r\n if (indexOfE >= 0) {\r\n return Number(xString.slice(indexOfE + 1, xString.length)) + 1;\r\n }\r\n const indexOfDecimalPoint = xString.indexOf('.');\r\n if (indexOfDecimalPoint < 0) {\r\n return xString.length;\r\n } else {\r\n return indexOfDecimalPoint;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const roundToMultipleOf = (x: number, modulo: number): number => {\r\n const moduloString = String(modulo);\r\n // approximates the result\r\n // prone to inexactitude because of floating point arithmetic\r\n const approximation = Math.round(x / modulo) * modulo;\r\n const approximationString = String(approximation);\r\n // remove useless decimals\r\n const uselessDecimalsInApproximation =\r\n numberOfDecimalDigits(approximationString) -\r\n numberOfDecimalDigits(moduloString);\r\n const resultString = approximationString.slice(\r\n 0,\r\n approximationString.length - uselessDecimalsInApproximation\r\n );\r\n return Number(resultString);\r\n};\r\n\r\n// other functions\r\n\r\nexport const isInitialAndEmpty = (\r\n previousValue: any,\r\n newValue: any\r\n): boolean => {\r\n const isPrevArray = Array.isArray(previousValue);\r\n const isNewArray = Array.isArray(newValue);\r\n return !(\r\n (isPrevArray ? previousValue.length !== 0 : Boolean(previousValue)) ||\r\n (isNewArray ? newValue.length !== 0 : Boolean(newValue))\r\n );\r\n};\r\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { debounceTime, first, map } from 'rxjs/operators';\n// Do not remove this import: needed in the template\nimport { ResizedEvent } from 'angular-resize-event';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport {\n DataSource,\n DataSourceItem,\n DecoratedDataSource,\n DecoratedDataSourceItem\n} from '../datasource';\nimport { isInitialAndEmpty } from '../helperFns';\n\n@Component({\n selector: 'lux-autocomplete',\n templateUrl: './autocomplete.component.html',\n styleUrls: ['./autocomplete.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AutocompleteComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => AutocompleteComponent)\n }\n ]\n})\nexport class AutocompleteComponent\n implements ControlValueAccessor, Validator, OnInit, AfterViewInit\n{\n static idCounter = 0;\n\n @ViewChild('i0', { static: true }) i0: ElementRef;\n @ViewChild('completeDiv', { static: true }) completeDiv: ElementRef;\n\n private _dataSource: DataSource<any, string>;\n private _placeholder: string;\n private _value: any;\n\n showSpinner = false;\n touched = false;\n completionList: DecoratedDataSource = [];\n showCompletion = false;\n focusItem: DataSourceItem<any, string>;\n\n @Output() valueChange = new EventEmitter<any>();\n @Output() dataSourceChange = new EventEmitter<DataSource<any, string>>();\n\n @Input() public inputId: string;\n @Input() public disabled: boolean | null = null;\n @Input() public readonly: boolean | null = null;\n @Input() label = '';\n /** If canAddNewValues, user can type items not present in the data-source. */\n @Input() canAddNewValues = false;\n /** After cleaning the selection should the completion list remain open or closed:\n * false: (default) close on filters, to clean a filter and select all.\n * true: keep open (when the action most likely is to pick another one).\n */\n @Input() keepOpenAfterDelete = false;\n\n @Input()\n get value(): any {\n return this._value;\n }\n set value(v: any) {\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n this._value = v;\n this.onChange(v);\n this.completeLabel();\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n @Input()\n get dataSource(): DataSource<any, string> {\n return this._dataSource;\n }\n set dataSource(v: DataSource<any, string>) {\n this._dataSource = v;\n this.dataSourceChange.emit(v);\n }\n @Input() required = false;\n\n @Input()\n set placeholder(v: string) {\n this._placeholder = v;\n }\n get placeholder(): string {\n return this._placeholder ? this._placeholder : '';\n }\n\n @Input() resolveLabelsFunction?: (\n instance: any,\n keys: any[]\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() populateFunction?: (\n instance: any,\n search: string\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() instance: any;\n\n constructor(private cd: ChangeDetectorRef) {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched && !this.disabled) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n clear(): void {\n this.value = null;\n this.toggleCompletion(this.keepOpenAfterDelete, '');\n }\n\n private completeLabel(): void {\n if (this.value) {\n if (this.dataSource) {\n this.label = findLabelForId(this.dataSource, this.value) || '';\n } else if (this.instance && this.resolveLabelsFunction) {\n this.resolveLabelsFunction(this.instance, [this.value])\n .pipe(debounceTime(1), first())\n .subscribe((data) => {\n this.label = findLabelForId(data, this.value) || '';\n });\n }\n } else {\n this.label = '';\n }\n }\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `autocompletelist${AutocompleteComponent.idCounter++}`;\n this.completeLabel();\n }\n ngAfterViewInit(): void {\n this.setSameWidth();\n }\n onInputResized(): void {\n this.setSameWidth();\n }\n private setSameWidth(): void {\n const width = this.i0.nativeElement.getBoundingClientRect().width;\n this.completeDiv.nativeElement.style.width = `${width}px`;\n }\n\n onKeydown(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'Tab':\n if (label) {\n this.pickSelectionOrFirstMatch(label);\n }\n this.showCompletion = false;\n break;\n }\n this.markAsTouched();\n }\n onKeypress(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'Intro':\n case 'Enter':\n this.pickSelectionOrFirstMatch(label);\n event.preventDefault();\n break;\n }\n this.markAsTouched();\n }\n onKeyup(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'PageDown':\n this.focusOnNext(5);\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.focusOnNext(1);\n event.preventDefault();\n break;\n case 'PageUp':\n this.focusOnPrevious(5);\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.focusOnPrevious(1);\n event.preventDefault();\n break;\n case 'Escape':\n this.complete(null);\n event.preventDefault();\n break;\n case 'Intro':\n case 'Enter':\n event.preventDefault();\n break;\n default:\n this.showCompletionList(label);\n // event.preventDefault();\n }\n this.markAsTouched();\n }\n private focusOnNext(offset: number): void {\n const list = this.completionList || [];\n const index = list.findIndex(\n (it) => this.focusItem && it.key === this.focusItem.key\n );\n const next =\n index !== -1 && list.length > index + offset\n ? list[index + offset]\n : list[list.length - 1];\n this.focusItem = next;\n this.ensureItemVisible(index);\n }\n private focusOnPrevious(offset: number): void {\n const list = this.completionList || [];\n const index = list.findIndex(\n (it) => this.focusItem && it.key === this.focusItem.key\n );\n const next =\n index !== -1 && index > offset ? list[index - offset] : list[0];\n this.focusItem = next;\n this.ensureItemVisible(index);\n }\n onLostFocus(): void {\n setTimeout(() => {\n this.toggleCompletion(false, null);\n }, 200);\n }\n complete(item: DataSourceItem<Record<string, unknown>, string>): void {\n if (item !== null) {\n this.value = item.key;\n this.label = item.label;\n } else {\n this.value = null;\n this.label = '';\n }\n this.toggleCompletion(false, null);\n this.markAsTouched();\n }\n toggleCompletion(show: boolean, label: string): void {\n if (show && !this.disabled) {\n this.showCompletionList(label);\n } else {\n this.showCompletion = false;\n if (this.canAddNewValues) {\n this.syncCustomValue(this.label);\n return;\n }\n }\n this.cd.markForCheck();\n }\n\n get selectedOption(): string {\n const index = this.completionList.findIndex(\n (i) => i.key === this.focusItem.key\n );\n if (index === -1 || !this.focusItem) {\n return null;\n }\n return `${this.inputId}_${index}`;\n }\n\n private ensureItemVisible(index: number): void {\n const target = this.completeDiv.nativeElement.querySelectorAll('li')[index];\n if (target) {\n target.scrollIntoView({ block: 'center' });\n }\n }\n private syncCustomValue(text: string): void {\n this.value = text;\n this.label = text;\n }\n private pickSelectionOrFirstMatch(text: string): void {\n if (this.canAddNewValues) {\n this.syncCustomValue(text);\n return;\n }\n if (this.focusItem && this.focusItem.label) {\n this.complete(this.focusItem);\n return;\n }\n const source = (text || '').trim();\n if (source === '') {\n this.showCompletion = false;\n return;\n }\n this.completionList = [];\n this.computeCompletionList(source).subscribe((suggestions) => {\n this.complete(\n suggestions && suggestions.length > 0 ? suggestions[0] : null\n );\n });\n }\n private showCompletionList(text: string): void {\n this.setSameWidth();\n const useSpinner = this.hasExternalDataSource();\n this.spinnerVisibility(useSpinner, true);\n setTimeout(() => {\n // for spinner to be shown\n this.computeCompletionList(text).subscribe({\n next: (cl) => {\n this.completionList = cl;\n this.focusItem =\n this.completionList.length > 0 ? this.completionList[0] : null;\n this.showCompletion = true;\n this.spinnerVisibility(useSpinner, false);\n },\n error: () => {\n this.spinnerVisibility(useSpinner, false);\n },\n complete: () => {\n this.spinnerVisibility(useSpinner, false);\n }\n });\n }, 1);\n }\n private spinnerVisibility(useSpinner: boolean, value: boolean): void {\n if (useSpinner) {\n this.showSpinner = value;\n }\n }\n private hasExternalDataSource(): boolean {\n return !this.dataSource && !!this.instance && !!this.populateFunction;\n }\n private computeCompletionList(text: string): Observable<DecoratedDataSource> {\n const searchText = (text || '').toLowerCase();\n if (this.dataSource) {\n const ds = (this.dataSource || [])\n .filter((it) => ignoreAccentsInclude(it.label, searchText))\n .sort((a, b) => a.label.localeCompare(b.label));\n return of(decorateDataSource(ds, searchText));\n } else if (this.instance && this.populateFunction) {\n return this.populateFunction(this.instance, searchText).pipe(\n debounceTime(1),\n first(),\n map((ds) => {\n ds.filter((it) => ignoreAccentsInclude(it.label, searchText)).sort(\n (a, b) => a.label.localeCompare(b.label)\n );\n return decorateDataSource(ds, searchText);\n })\n );\n } else {\n return of([]);\n }\n }\n}\n\n/** Returns true if text includes substring. No accents considered. Ignorecase */\nconst ignoreAccentsInclude = (text: string, substring: string): boolean => {\n text = normalizedString(text).toLowerCase();\n substring = normalizedString(substring).toLowerCase();\n return text.includes(substring);\n};\n\n/** Returns a normalized string with no accents: used for comparison */\nconst normalizedString = (a: string): string =>\n (a || '').normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n\nconst decorateDataSource = (\n dataSource: DataSource<any, string>,\n subString: string\n): DecoratedDataSource => dataSource.map((it) => decorateItem(it, subString));\n\nconst decorateItem = (\n item: DataSourceItem<any, string>,\n tx: string\n): DecoratedDataSourceItem => {\n const index = normalizedString(item.label)\n .toLowerCase()\n .indexOf(normalizedString(tx).toLowerCase());\n const labelPrefix = index === -1 ? item.label : item.label.substr(0, index);\n const labelMatch = index === -1 ? '' : item.label.substr(index, tx.length);\n const labelPostfix = index === -1 ? '' : item.label.substr(index + tx.length);\n const newItem: DecoratedDataSourceItem = {\n ...item,\n labelPrefix,\n labelMatch,\n labelPostfix\n };\n return newItem;\n};\n\nconst findLabelForId = (data: DataSource<any, string>, id: any): string => {\n const found = data.find((it) => it.key === id);\n return found ? found.label : null;\n};\n","/** Language detector based on Navigator preferences */\nexport const languageDetector = (): string => {\n const lang = navigator.language.split('-')[0];\n if (lang === 'es' || lang === 'en') {\n return lang;\n }\n return 'en'; // default\n};\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\nimport { DataSource } from '../datasource';\nimport { isInitialAndEmpty } from '../helperFns';\nimport { languageDetector } from '../lang';\n\n@Component({\n selector: 'lux-autocomplete-list',\n templateUrl: './autocomplete-list.component.html',\n styleUrls: ['./autocomplete-list.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AutocompleteListComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => AutocompleteListComponent)\n }\n ]\n})\nexport class AutocompleteListComponent\n implements ControlValueAccessor, Validator, OnInit\n{\n static idCounter = 0;\n\n @ViewChild('auto') auto!: AutocompleteListComponent;\n\n literals = {\n en: {\n placeholder: 'new item',\n deleteLabelTemplate: 'Delete <<label>>',\n addMessage: 'Add'\n },\n es: {\n placeholder: 'nuevo elemento',\n deleteLabelTemplate: 'Eliminar <<label>>',\n addMessage: 'Añadir'\n }\n };\n\n public internalDataSource: DataSource<any, string> = [];\n private autoPopulate = false;\n\n private _value: any[] = [];\n @Input()\n set value(val: any[]) {\n if (val === this._value) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, val);\n this._value = val;\n this.ensureLabelsForIds();\n this.populateWith('');\n this.onChange(this._value);\n if (!initialAndEmpty) {\n this.valueChange.emit(this._value);\n }\n }\n get value(): any[] {\n return this._value;\n }\n labels: string[] = [];\n newEntry: any;\n canAdd = false;\n touched = false;\n\n private _lang = languageDetector();\n @Input()\n get lang(): string {\n return this._lang;\n }\n set lang(l: string) {\n if (l === this._lang) {\n return;\n }\n if (Object.keys(this.literals).includes(l)) {\n this._lang = l;\n } else {\n this._lang = 'en';\n }\n }\n\n @Input() inputId: string;\n @Input() dataSource: DataSource<any, any> = [];\n @Input() placeholder?: string;\n @Input() disabled = false;\n @Input() deleteLabelTemplate?: string;\n @Input() addMessage?: string;\n @Input() required = false;\n\n @Input() resolveLabelsFunction?: (\n instance: any,\n ids: any[]\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() populateFunction?: (\n instance: any,\n search: string\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() instance: any;\n\n @Output() valueChange = new EventEmitter<any[]>();\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched && !this.disabled) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `autocompletelist${AutocompleteListComponent.idCounter++}`;\n this.autoPopulate =\n !!this.resolveLabelsFunction && !!this.populateFunction && this.instance;\n this.ensureLabelsForIds();\n }\n ensureLabelsForIds(): void {\n if (this.autoPopulate && this.resolveLabelsFunction) {\n this.resolveLabelsFunction(this.instance, this._value)\n .pipe(first())\n .subscribe((data) => {\n const res: string[] = [];\n (this._value || []).map((id) => {\n const found = data.find((it) => it.key === id);\n if (found) {\n res.push(found.label);\n } else {\n res.push('(unset)');\n }\n });\n this.labels = res;\n });\n } else if (this.dataSource) {\n const res: string[] = [];\n (this._value || []).map((id) => {\n const found = this.dataSource.find((it) => it.key === id);\n if (found) {\n res.push(found.label);\n } else {\n res.push('(unset)');\n }\n });\n this.labels = res;\n } else {\n this.labels = this._value.map((it) => (it ? it.toString() : '(unset)'));\n }\n }\n removeAt(index: number): void {\n if (this._value.length > index) {\n const key = this._value.splice(index, 1)[0];\n const label = this.labels.splice(index, 1)[0];\n this.internalDataSource.push({ key, label });\n }\n this.markAsTouched();\n }\n onValueChange(): void {\n this.updateCanAdd();\n }\n onNewEntryChange(event: KeyboardEvent, auto: AutocompleteComponent): void {\n if (event.key === 'Enter' && !!auto.value) {\n this.addNew(auto);\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n // todo\n } else {\n this.populateWith(auto.label + event.key);\n }\n this.updateCanAdd();\n }\n populateWith(searchText: string): void {\n if (this.autoPopulate && this.populateFunction && this.instance) {\n this.populateFunction(this.instance, searchText)\n .pipe(first())\n .subscribe((data) => {\n this.internalDataSource = data.filter(\n (it) => !(this._value || []).includes(it.key)\n );\n });\n } else if (this.dataSource) {\n this.internalDataSource = this.dataSource.filter(\n (it) => !(this._value || []).includes(it.key)\n );\n }\n }\n updateCanAdd(): void {\n this.canAdd =\n !this.disabled &&\n this.auto &&\n !!this.auto.value && // has value\n !this.value.find((it) => it === this.auto.value); // not already in\n }\n\n addNew(auto: AutocompleteComponent): void {\n this.value.push(auto.value);\n this.ensureLabelsForIds();\n this.newEntry = '';\n this.internalDataSource = this.internalDataSource.filter(\n (it) => !this._value.includes(it.key)\n );\n this.markAsTouched();\n }\n\n getDeleteMessage(label: string): string {\n return (\n this.deleteLabelTemplate ?? this.literals[this.lang].deleteLabelTemplate\n ).replace('<<label>>', label);\n }\n}\n","import {\n Component,\n Input,\n EventEmitter,\n Output,\n OnInit,\n forwardRef,\n ViewChild,\n ElementRef,\n AfterViewInit\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { isInitialAndEmpty } from '../helperFns';\nimport { languageDetector } from '../lang';\n\nconst KEY_SPACE = ' ';\n\n@Component({\n selector: 'lux-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => CheckboxComponent)\n }\n ]\n})\nexport class CheckboxComponent\n implements ControlValueAccessor, OnInit, AfterViewInit\n{\n static idCounter = 0;\n\n @ViewChild('ck', { static: false }) ck: ElementRef;\n\n private _lang = languageDetector();\n @Input()\n set lang(l: string) {\n if (l === this._lang) {\n return;\n }\n if (Object.keys(this.literals).includes(l)) {\n this._lang = l;\n } else {\n this._lang = 'en';\n }\n }\n get lang(): string {\n return this._lang;\n }\n private internalValue: boolean;\n @Input()\n get value(): boolean {\n return this.internalValue;\n }\n set value(v: boolean) {\n if (this.internalValue === v) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this.internalValue, v);\n this.internalValue = v;\n this.syncModel();\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n\n get tabindexValue(): string {\n return this.disabled ? null : '0';\n }\n\n @Input() label: string = null;\n @Input() name: string = null;\n private _disabled = false;\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(v: boolean) {\n if (v === this._disabled) {\n return;\n }\n this._disabled = v;\n this.syncModel();\n }\n @Input() inputId: string;\n\n literals = {\n en: {\n yesLabel: 'Yes',\n noLabel: 'No'\n },\n es: {\n yesLabel: 'Sí',\n noLabel: 'No'\n }\n };\n touched = false;\n\n @Output() valueChange = new EventEmitter<boolean>();\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = !!value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `${this.name || 'checkbox'}$${CheckboxComponent.idCounter++}`;\n }\n ngAfterViewInit(): void {\n this.syncModel();\n }\n\n clicked(): void {\n if (!this.disabled) {\n this.value = !this.internalValue;\n this.markAsTouched();\n }\n }\n onKey(event: KeyboardEvent): void {\n if (event.key === KEY_SPACE && !this.disabled) {\n this.value = !this.internalValue;\n this.markAsTouched();\n event.preventDefault();\n }\n }\n\n private syncModel(): void {\n if (this.ck) {\n this.ck.nativeElement.checked = this.internalValue;\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ElementRef,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n AbstractControl,\n ValidationErrors,\n Validator,\n NG_VALIDATORS\n} from '@angular/forms';\nimport {\n hasValue,\n isInitialAndEmpty,\n isValidEmail,\n isValidNumber,\n normalizeDate\n} from '../helperFns';\nimport { languageDetector } from '../lang';\n@Component({\n selector: 'lux-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => InputComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => InputComponent)\n }\n ]\n})\nexport class InputComponent implements OnInit, ControlValueAccessor, Validator {\n static idCounter = 0;\n\n @ViewChild('input', { static: false }) input: ElementRef;\n @ViewChild('textarea', { static: false }) textarea: ElementRef;\n\n touched = false;\n dirty = false;\n lastErrors: ValidationErrors | null = null;\n\n private _disabled: string | boolean;\n private _value: any = '';\n private _type: string;\n private _placeholder: string;\n private _pattern?: string = undefined;\n private _regexp?: RegExp = undefined;\n private _currency: string;\n private _required: boolean;\n\n public userErrors = {\n en: {\n required: 'Required field.',\n min: 'Minimum value is $min.',\n max: 'Maximum value is $max.',\n email: 'Format should match example@example.com.'\n },\n es: {\n required: 'El campo es obligatorio.',\n min: 'El valor mínimo es $min.',\n max: 'El valor máximo es $max.',\n email: 'El campo debe tener un formato como ejemplo@ejemplo.com.'\n }\n };\n\n public domain: string;\n @Input()\n public rows?: number | string;\n @Input()\n public cols?: number | string;\n @Input()\n public step?: number;\n @Input()\n public min?: number | string;\n @Input()\n public max?: number | string;\n\n get className(): string {\n return this.checkClassName();\n }\n\n @Input() lang = languageDetector();\n @Input() public inlineErrors = false;\n @Input() public inputId: string;\n @Input('aria-label') public ariaLabel: string;\n @Input() public readonly: boolean | null = null;\n\n @Input()\n set disabled(v: string | boolean) {\n v = typeof v === 'string' ? true : v;\n this._disabled = v;\n }\n get disabled(): string | boolean {\n return this._disabled;\n }\n\n @Input()\n set pattern(p: string | undefined) {\n this._pattern = p;\n if (p === undefined) {\n this._regexp = undefined;\n } else {\n try {\n this._regexp = new RegExp(p);\n } catch (e) {\n this._pattern = undefined;\n this._regexp = undefined;\n }\n }\n }\n get pattern(): string | undefined {\n return this._pattern;\n }\n\n @Input()\n set currency(v: string) {\n this._currency = v.toUpperCase();\n }\n get currency(): string {\n return this._currency;\n }\n\n @Input()\n set placeholder(v: string) {\n this._placeholder = v;\n }\n get placeholder(): string {\n return this._placeholder ? this._placeholder : '';\n }\n\n @Input()\n set required(v: boolean) {\n this._required = v;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set type(v: string) {\n this._type = v.toLowerCase();\n this.domain = v.toLowerCase();\n this.checkType(v);\n }\n get type(): string {\n return this._type ? this._type : 'text';\n }\n\n @Input()\n set value(v: any) {\n v = v === undefined ? null : v;\n if (v === this._value) {\n return; // prevent events when there is no changes\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n if (this.type === 'date') {\n v = normalizeDate(v);\n }\n\n this._value = v;\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): any {\n if (this.isPercentage() || this.isPermillage() || this.isNumber()) {\n const numVal = parseFloat(this._value);\n if (!Number.isNaN(numVal)) {\n return numVal;\n }\n }\n return this._value;\n }\n @Output() valueChange = new EventEmitter<any>();\n @Output() keyPress = new EventEmitter<KeyboardEvent>();\n\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n constructor() {}\n\n // ControlValueAccessor Interface implementation\n writeValue(value: any): void {\n this.value = value;\n this.setValueInControl(value);\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End of ControlValueAccessor Interface implementation\n\n private setValueInControl(v: any): void {\n if (this.domain === 'date') {\n v = normalizeDate(v);\n }\n if (this.input) {\n this.input.nativeElement.value = v;\n }\n if (this.textarea) {\n this.textarea.nativeElement.value = v;\n }\n }\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n let result: ValidationErrors | null = null;\n\n if (this.required && !hasValue(hasValue)) {\n result = result || {};\n result.required = { value, reason: 'Required field.' };\n }\n if (this._regexp && hasValue(value) && !this._regexp.test(value)) {\n result = result || {};\n result.pattern = {\n value,\n reason: `Value must follow the pattern: ${this._pattern}`\n };\n }\n if (this.type === 'email' && hasValue(value) && !isValidEmail(value)) {\n result = result || {};\n result.email = { value, reason: 'Invalid email.' };\n }\n if (this.type === 'number' && hasValue(value) && !isValidNumber(value)) {\n result = result || {};\n result.numeric = { value, reason: 'Invalid number.' };\n }\n if (\n this.type === 'date' ||\n this.type === 'time' ||\n this.type === 'timestamp'\n ) {\n if (\n typeof this.min === 'string' &&\n hasValue(value) &&\n String(value).localeCompare(this.min) === -1\n ) {\n result = result || {};\n result.min = {\n value,\n min: this.min,\n reason: `Value is lower than minimum value: ${this.min}.`\n };\n }\n if (\n typeof this.max === 'string' &&\n hasValue(value) &&\n String(value).localeCompare(this.max) !== -1\n ) {\n result = result || {};\n result.max = {\n value,\n max: this.max,\n reason: `Value is greater than than maximum value: ${this.max}.`\n };\n }\n }\n\n if (\n this.type === 'percentage' ||\n this.type === 'permillage' ||\n this.type === 'number' ||\n this.type === 'currency'\n ) {\n if (hasValue(this.min) && hasValue(value) && value < +this.min) {\n result = result || {};\n result.min = {\n value,\n min: this.min,\n reason: `Value is lower than minimum value: ${this.min}.`\n };\n }\n if (hasValue(this.max) && hasValue(value) && value > +this.max) {\n result = result || {};\n result.max = {\n value,\n max: this.max,\n reason: `Value is greater than than maximum value: ${this.max}.`\n };\n }\n }\n this.lastErrors = result;\n return result;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `${this.type}$${InputComponent.idCounter++}`;\n }\n onLostFocus(): void {\n this.markAsTouched();\n }\n onKeyUp(newValue: string): void {\n this.value = newValue;\n }\n onChangeValue(newValue: string): void {\n this.value = newValue;\n this.markAsTouched();\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n\n isNumber(): boolean {\n return this.type === 'number';\n }\n isPercentage(): boolean {\n return this.type === 'percentage';\n }\n isPermillage(): boolean {\n return this.type === 'permillage';\n }\n\n checkClassName(): string {\n if (this.readonly === true) {\n return 'readonly';\n }\n return '';\n }\n\n checkType(type: string): void {\n switch (type) {\n case 'email':\n this.setEmailPatterns();\n break;\n case 'date':\n this.setDatePatterns();\n break;\n case 'time':\n this.setTimePatterns();\n break;\n case 'password':\n this.setPasswordPatterns();\n break;\n case 'number':\n this.setNumberPatterns();\n break;\n case 'currency':\n this.setCurrencyPatterns();\n break;\n case 'percentage':\n this.setPercentagePatterns();\n break;\n case 'permillage':\n this.setPermillagePatterns();\n break;\n default:\n break;\n }\n }\n\n setEmailPatterns(): void {}\n\n setDatePatterns(): void {\n this.min = this.min || '1900-01-01';\n this.max = this.max || '2100-01-01';\n }\n\n setTimePatterns(): void {}\n\n setPasswordPatterns(): void {}\n\n setNumberPatterns(): void {\n this.domain = 'number';\n this.placeholder = '0';\n }\n\n setCurrencyPatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.1;\n this.min = this.min || 0.0;\n this.max = this.max || 10000.0;\n this.value = 0.0;\n }\n\n setPercentagePatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.01;\n this.min = this.min || 0.0;\n this.max = this.max || 100.0;\n this.placeholder = '0.00';\n }\n\n setPermillagePatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.01;\n this.min = this.min || 0.0;\n this.max = this.max || 1000.0;\n this.placeholder = '0.00';\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnDestroy,\n OnInit,\n forwardRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject, Observable, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n/** Filter component to query for objects. */\n@Component({\n selector: 'lux-filter',\n templateUrl: './filter.component.html',\n styleUrls: ['./filter.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => FilterComponent)\n }\n ]\n})\nexport class FilterComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n static idCounter = 0;\n\n private touched = false;\n private _searchValue = '';\n\n @Input() disabled = false;\n /** id for the input. If left blank, it is autogenerated */\n @Input() inputId: string;\n /** Placeholder default text. */\n @Input() placeholder = '';\n /** Search value introduced by the user. */\n @Input()\n get searchValue(): string {\n return this._searchValue;\n }\n set searchValue(v: string) {\n v = (v || '').toString();\n if (v === this._searchValue) {\n return;\n }\n this.onChange(v);\n this._searchValue = v;\n }\n /** Search on type: (default true) Auto-search when user types in. */\n @Input() searchOnType = true;\n /** Custom aria label in case of not using a label */\n @Input('aria-label') ariaLabel: string;\n\n private debounceValue = 300; // 300 ms\n /** Debounce time in milliseconds. (defaults to 300 ms) */\n @Input()\n set debounce(val: number) {\n this.debounceValue = val;\n this.recreateObservable();\n }\n get debounce(): number {\n return this.debounceValue;\n }\n\n /** Search value changed by user. */\n @Output() searchValueChange = new EventEmitter<string>();\n\n searchValue$: Observable<string>;\n\n private subject = new Subject<string>();\n private sub: Subscription;\n\n constructor() {\n this.recreateObservable();\n }\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.searchValue = (value || '').toString();\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `filter$${FilterComponent.idCounter++}`;\n }\n ngOnDestroy(): void {\n this.freeSubscriptions();\n }\n clear(): void {\n this.searchValue = '';\n this.search();\n }\n search(): void {\n this.searchValueChange.emit(this.searchValue);\n }\n keyup(event: KeyboardEvent, newValue: string): void {\n this.markAsTouched();\n this.searchValue = newValue;\n if (event.key === 'Enter') {\n this.searchNow(this.searchValue);\n }\n if (this.searchOnType) {\n this.addEvent();\n }\n }\n onInputValueChange(newValue: string): void {\n this.markAsTouched();\n this.searchValue = newValue;\n }\n\n private recreateObservable(): void {\n this.searchValue$ = this.subject\n .asObservable()\n .pipe(debounceTime(this.debounce));\n\n this.freeSubscriptions();\n this.sub = this.searchValue$.subscribe((value) => {\n this.searchValueChange.emit(value);\n });\n }\n private freeSubscriptions(): void {\n if (this.sub) {\n this.sub.unsubscribe();\n this.sub = null;\n }\n }\n private searchNow(value: string): void {\n this.searchValueChange.emit(value);\n }\n private addEvent(): void {\n this.subject.next(this.searchValue);\n }\n}\n","import { ComponentRef } from '@angular/core';\nimport { LuxModalWindowComponent } from './modal-window';\nimport { ContentRef } from './util';\nimport { LuxModalBackdropComponent } from './modal-backdrop';\n\nexport class ActiveModal {\n close(result?: any): void {}\n dismiss(reason?: any): void {}\n}\n\nexport class ModalRef {\n private _resolve: (result?: any) => void;\n private _reject: (reason?: any) => void;\n\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content, will return `undefined`.\n */\n get componentInstance(): any {\n if (this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n\n /**\n * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.\n */\n result: Promise<any>;\n\n constructor(\n private _windowCmptRef: ComponentRef<LuxModalWindowComponent>,\n private _contentRef: ContentRef,\n private _backdropCmptRef?: ComponentRef<LuxModalBackdropComponent>,\n private _beforeDismiss?: () => any\n ) {\n _windowCmptRef.instance.dismissEvent.subscribe((reason: any) => {\n this.dismiss(reason);\n });\n\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {\n if (this._windowCmptRef) {\n if (this._resolve) {\n this._resolve(result);\n }\n this._removeModalElements();\n }\n }\n\n private _dismiss(reason?: any): void {\n if (this._reject) {\n this._reject(reason);\n }\n this._removeModalElements();\n }\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n if (dismiss && dismiss.then) {\n dismiss.then(\n (result) => {\n if (result !== false) {\n this._dismiss(reason);\n }\n },\n () => {}\n );\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n\n private _removeModalElements(): void {\n const windowNativeEl = this._windowCmptRef.location.nativeElement;\n windowNativeEl.parentNode.removeChild(windowNativeEl);\n this._windowCmptRef.destroy();\n\n if (this._backdropCmptRef) {\n const backdropNativeEl = this._backdropCmptRef.location.nativeElement;\n backdropNativeEl.parentNode.removeChild(backdropNativeEl);\n this._backdropCmptRef.destroy();\n }\n\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n\n this._windowCmptRef = null;\n this._backdropCmptRef = null;\n this._contentRef = null;\n }\n}\n","import { ViewRef, ComponentRef } from '@angular/core';\nimport { fromEvent, Observable } from 'rxjs';\nimport { filter, map, takeUntil, withLatestFrom } from 'rxjs/operators';\n\nexport const FOCUS = 'focus';\n\nexport enum Key {\n Tab = 9,\n Enter = 13,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n ArrowLeft = 37,\n ArrowUp = 38,\n ArrowRight = 39,\n ArrowDown = 40\n}\n\nexport const isDefined = (value: any): boolean =>\n value !== undefined && value !== null;\n\nexport class ContentRef {\n constructor(\n public nodes: any[],\n public viewRef?: ViewRef,\n public componentRef?: ComponentRef<any>\n ) {}\n}\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[contenteditable]',\n '[tabindex]:not([tabindex=\"-1\"])'\n].join(', ');\n\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nexport const getFocusableBoundaryElements = (\n element: HTMLElement\n): HTMLElement[] => {\n const list: HTMLElement[] = Array.from(\n element.querySelectorAll(\n FOCUSABLE_ELEMENTS_SELECTOR\n ) as NodeListOf<HTMLElement>\n ).filter((el) => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n};\n\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nexport const focusTrap = (\n element: HTMLElement,\n stopFocusTrap$: Observable<any>,\n refocusOnClick = false\n): void => {\n // last focused element\n const lastFocusedElement$ = fromEvent<FocusEvent>(element, 'focusin').pipe(\n takeUntil(stopFocusTrap$),\n map((e) => e.target)\n );\n\n // 'tab' / 'shift+tab' stream\n fromEvent<KeyboardEvent>(element, 'keydown')\n .pipe(\n takeUntil(stopFocusTrap$),\n /* eslint-disable import/no-deprecated */\n filter((e) => e.which === Key.Tab),\n /* eslint-enable import/no-deprecated */\n withLatestFrom(lastFocusedElement$)\n )\n .subscribe(([tabEvent, focusedElement]) => {\n const [first, last] = getFocusableBoundaryElements(element);\n\n if (\n (focusedElement === first || focusedElement === element) &&\n tabEvent.shiftKey\n ) {\n last.focus();\n tabEvent.preventDefault();\n }\n\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n });\n\n // inside click\n if (refocusOnClick) {\n fromEvent(element, 'click')\n .pipe(\n takeUntil(stopFocusTrap$),\n withLatestFrom(lastFocusedElement$),\n map((arr) => arr[1] as HTMLElement)\n )\n .subscribe((lastFocusedElement) => lastFocusedElement.focus());\n }\n};\n","export enum ModalDismissReasons {\n BackdropClick,\n Esc\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n HostBinding,\n HostListener\n} from '@angular/core';\n\nimport { getFocusableBoundaryElements, FOCUS } from './util';\nimport { ModalDismissReasons } from './modal-dismiss-reasons';\n\n@Component({\n selector: 'lux-modal-window',\n template: `\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\"><ng-content></ng-content></div>\n </div>\n `\n})\nexport class LuxModalWindowComponent\n implements OnInit, AfterViewInit, OnDestroy\n{\n private _elWithFocus: Element; // element that is focused prior to modal opening\n\n @Input() ariaDescribedBy: string;\n @Input() ariaLabelledBy: string;\n @Input() backdrop: boolean | string = false;\n @Input() keyboard = true;\n @Input() windowClass: string;\n\n @Output() dismissEvent = new EventEmitter();\n\n @HostBinding('class') get class(): string {\n return `modal ${this.windowClass || ''}`;\n }\n @HostBinding('attr.role') role = 'dialog';\n @HostBinding('tabindex') tabindex = '-1';\n @HostBinding('attr.aria-modal') ariamodal = true;\n @HostBinding('attr.aria-labelledby') get hostAriaLabelledBy(): string {\n return this.ariaLabelledBy;\n }\n @HostBinding('attr.aria-describedby') get hostAriaDescribedBy(): string {\n return this.ariaDescribedBy;\n }\n @HostListener('click', ['$event.target']) backdropClick(\n btn: HTMLElement\n ): void {\n if (this.backdrop === true && this._elRef.nativeElement === btn) {\n this.dismiss(ModalDismissReasons.BackdropClick);\n }\n }\n @HostListener('keyup.esc', ['$event']) escKey(event): void {\n if (this.keyboard && !event.defaultPrevented) {\n this.dismiss(ModalDismissReasons.Esc);\n }\n }\n\n constructor(\n @Inject(DOCUMENT) private _document: any,\n private _elRef: ElementRef<HTMLElement>\n ) {}\n\n dismiss(reason): void {\n this.dismissEvent.emit(reason);\n }\n\n ngOnInit(): void {\n this._elWithFocus = this._document.activeElement;\n }\n\n ngAfterViewInit(): void {\n if (!this._elRef.nativeElement.contains(document.activeElement)) {\n const firstFocusable = getFocusableBoundaryElements(\n this._elRef.nativeElement\n )[0];\n\n const elementToFocus = firstFocusable || this._elRef.nativeElement;\n elementToFocus.focus();\n }\n }\n\n ngOnDestroy(): void {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n\n let elementToFocus;\n if (elWithFocus && elWithFocus[FOCUS] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n elementToFocus.focus();\n this._elWithFocus = null;\n }\n}\n","import {Component, Input, HostBinding} from '@angular/core';\n\n@Component({\n selector: 'lux-modal-backdrop',\n template: ''\n})\nexport class LuxModalBackdropComponent {\n @Input() backdropClass: string;\n\n @HostBinding('class') class = 'modal-backdrop fade show';\n @HostBinding('style') style = 'z-index: 1050';\n}\n","import { Injectable } from '@angular/core';\n\nexport interface LuxModalOptions {\n ariaDescribedBy?: string;\n ariaLabelledBy?: string;\n backdrop?: boolean;\n keyboard?: boolean;\n windowClass?: string;\n backdropClass?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LuxModalConfig implements LuxModalOptions {\n backdrop = true;\n}\n","import {\n Injectable,\n ApplicationRef,\n ComponentFactoryResolver,\n TemplateRef,\n ComponentRef,\n Inject,\n Injector,\n RendererFactory2\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { ActiveModal, ModalRef } from './modal-ref';\nimport { ContentRef, focusTrap, isDefined } from './util';\nimport { LuxModalWindowComponent } from './modal-window';\nimport { Subject } from 'rxjs';\nimport { LuxModalBackdropComponent } from './modal-backdrop';\nimport { LuxModalOptions, LuxModalConfig } from './modal-config';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalStack {\n private _activeWindowCmptHasChanged = new Subject();\n private _modalRefs: ModalRef[] = [];\n private _windowCmpts: ComponentRef<LuxModalWindowComponent>[] = [];\n private _ariaHiddenValues: Map<Element, string> = new Map();\n private _backdropAttributes = ['backdropClass'];\n private _windowAttributes = [\n 'ariaLabelledBy',\n 'backdrop',\n 'centered',\n 'keyboard',\n 'scrollable',\n 'size',\n 'windowClass'\n ];\n\n constructor(\n private _applicationRef: ApplicationRef,\n @Inject(DOCUMENT) private _document: any,\n private _injector: Injector,\n private _rendererFactory: RendererFactory2,\n private modalConfig: LuxModalConfig\n ) {\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt =\n this._windowCmpts[this._windowCmpts.length - 1];\n focusTrap(\n activeWindowCmpt.location.nativeElement,\n this._activeWindowCmptHasChanged\n );\n this._revertAriaHidden();\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n\n open(\n moduleCFR: ComponentFactoryResolver,\n content: any,\n options: LuxModalOptions\n ): ModalRef {\n const config = Object.assign({}, this.modalConfig, options);\n const containerEl = this._document.body;\n const renderer = this._rendererFactory.createRenderer(null, null);\n const removeBodyClass = (): void => {\n if (!this._modalRefs.length) {\n renderer.removeClass(this._document.body, 'modal-open');\n this._revertAriaHidden();\n }\n };\n const activeModal = new ActiveModal();\n const contentRef = this.getContentRef(moduleCFR, content, activeModal);\n const backdropCmptRef: ComponentRef<LuxModalBackdropComponent> =\n config.backdrop ? this._attachBackdrop(moduleCFR, containerEl) : null;\n const windowCmptRef: ComponentRef<LuxModalWindowComponent> =\n this._attachWindowComponent(moduleCFR, containerEl, contentRef);\n const modalRef: ModalRef = new ModalRef(\n windowCmptRef,\n contentRef,\n backdropCmptRef\n );\n this._registerModalRef(modalRef);\n this._registerWindowCmpt(windowCmptRef);\n modalRef.result.then(removeBodyClass, removeBodyClass);\n activeModal.close = (result: any): void => {\n modalRef.close(result);\n };\n activeModal.dismiss = (reason: any): void => {\n modalRef.dismiss(reason);\n };\n\n this._applyWindowOptions(windowCmptRef.instance, config);\n if (this._modalRefs.length === 1) {\n renderer.addClass(this._document.body, 'modal-open');\n }\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackgroundOptions(backdropCmptRef.instance, config);\n backdropCmptRef.changeDetectorRef.detectChanges();\n }\n windowCmptRef.changeDetectorRef.detectChanges();\n\n return modalRef;\n }\n\n private _applyWindowOptions(\n windowInstance: LuxModalWindowComponent,\n config: LuxModalOptions\n ): void {\n this._windowAttributes.forEach((optionName: string) => {\n if (isDefined(config[optionName])) {\n windowInstance[optionName] = config[optionName];\n }\n });\n }\n\n private _applyBackgroundOptions(\n backgroudInstance: LuxModalBackdropComponent,\n config: LuxModalOptions\n ): void {\n this._backdropAttributes.forEach((optionName: string) => {\n if (isDefined(config[optionName])) {\n backgroudInstance[optionName] = config[optionName];\n }\n });\n }\n\n private _revertAriaHidden(): void {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenValues.clear();\n }\n\n private getContentRef(\n moduleCFR: ComponentFactoryResolver,\n content: any,\n activeModal: ActiveModal\n ): ContentRef {\n if (content instanceof TemplateRef) {\n return this.createFromTemplateRef(content, activeModal);\n }\n }\n\n private createFromTemplateRef(\n content: TemplateRef<any>,\n activeModal: ActiveModal\n ): ContentRef {\n const context = {\n $implicit: activeModal,\n // eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n close(result): void {\n activeModal.close(result);\n },\n // eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n dismiss(reason): void {\n activeModal.dismiss(reason);\n }\n };\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n\n private _attachBackdrop(\n moduleCFR: ComponentFactoryResolver,\n containerEl: any\n ): ComponentRef<LuxModalBackdropComponent> {\n const backdropFactory = moduleCFR.resolveComponentFactory(\n LuxModalBackdropComponent\n );\n const backdropCmptRef = backdropFactory.create(this._injector);\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n\n private _attachWindowComponent(\n moduleCFR: ComponentFactoryResolver,\n containerEl: any,\n contentRef: any\n ): ComponentRef<LuxModalWindowComponent> {\n const windowFactory = moduleCFR.resolveComponentFactory(\n LuxModalWindowComponent\n );\n const windowCmptRef = windowFactory.create(\n this._injector,\n contentRef.nodes\n );\n this._applicationRef.attachView(windowCmptRef.hostView);\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n\n private _registerModalRef(modalRef: ModalRef): void {\n const unregisterModalRef = (): void => {\n const index = this._modalRefs.indexOf(modalRef);\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n }\n };\n this._modalRefs.push(modalRef);\n modalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n\n private _registerWindowCmpt(\n windowCmpt: ComponentRef<LuxModalWindowComponent>\n ): void {\n this._windowCmpts.push(windowCmpt);\n this._activeWindowCmptHasChanged.next();\n\n windowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(windowCmpt);\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n\n private _setAriaHidden(element: Element): void {\n const parent = element.parentElement;\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach((sibling) => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(\n sibling,\n sibling.getAttribute('aria-hidden')\n );\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n this._setAriaHidden(parent);\n }\n }\n}\n","import {\n Injectable,\n ComponentFactoryResolver,\n TemplateRef,\n} from '@angular/core';\nimport { ModalStack } from './modal-stack';\nimport { ModalRef } from './modal-ref';\nimport { LuxModalOptions } from './modal-config';\n\n/**\n * A service that it allow open an close modal components\n */\n@Injectable({ providedIn: 'root' })\nexport class ModalService {\n constructor(\n private modalStack: ModalStack,\n private moduleCFR: ComponentFactoryResolver\n ) {}\n\n /**Open a modal component\n * @param content TemplateRef\n */\n open(content: TemplateRef<any>, options: LuxModalOptions = {}): ModalRef {\n return this.modalStack.open(this.moduleCFR, content, options);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { DataSource } from '../datasource';\nimport { Observable, of, Subject } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n map,\n switchMap\n} from 'rxjs/operators';\nimport { GeoPoint } from '../map/geopoint';\n\ninterface SearchResult {\n place_id: number;\n lat: number;\n lon: number;\n display_name: string;\n icon: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class GeolocationService {\n private debouncePeriodMs = 300; // ms\n private cacheSize = 20;\n private lastQueriesWithResults = new Map<string, SearchResult[]>();\n private lastQueriesLru: string[] = [];\n private currentSearch$: Subject<string>;\n private currentQuery$: Observable<SearchResult[]>;\n\n constructor(private http: HttpClient) {\n this.currentSearch$ = new Subject<string>();\n\n const typed$ = this.currentSearch$\n .asObservable()\n .pipe(distinctUntilChanged());\n\n this.currentQuery$ = typed$.pipe(\n debounceTime(this.debouncePeriodMs),\n\n switchMap((currentQuery) => {\n const data = this.getFromCache(currentQuery);\n if (data !== undefined) {\n return of(data);\n }\n // Nominatim search documentation:\n // https://nominatim.org/release-docs/develop/api/Search/\n const url =\n 'https://nominatim.openstreetmap.org/search?format=json&limit=20&q=' +\n encodeURIComponent(currentQuery);\n const headers = {\n 'Content-Type': 'application/json'\n };\n this.addToCache(currentQuery, []);\n\n return this.http.get(url, { headers }).pipe(\n map((response) => {\n const searchResults = response as unknown as SearchResult[];\n const uniqueResults = distinct(searchResults);\n return this.addToCache(currentQuery, uniqueResults);\n })\n );\n })\n );\n }\n\n searchGeolocation(query: string): Observable<SearchResult[]> {\n this.currentSearch$.next(query);\n return this.currentQuery$;\n }\n\n getLabels(\n instance: GeolocationService,\n keys: GeoPoint[]\n ): Observable<DataSource<GeoPoint, string>> {\n const searchResults = instance.lastQueriesWithResults\n .get(instance.getLatestQuery())\n .filter((searchResult) => samePosition(searchResult, keys));\n return of(\n searchResults.map((searchResult) => {\n const key: GeoPoint = {\n type: 'Point',\n coordinates: [searchResult.lon, searchResult.lat]\n };\n return {\n key,\n label: searchResult.display_name\n };\n })\n );\n }\n\n getData(\n instance: GeolocationService,\n search: string\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.searchGeolocation(search).pipe(\n map((searchResults) =>\n searchResults.map((searchResult) => {\n const key: GeoPoint = {\n type: 'Point',\n coordinates: [searchResult.lon, searchResult.lat]\n };\n const label = searchResult.display_name;\n return { key, label };\n })\n )\n );\n }\n\n // Cache implemementation ---\n private getFromCache(query: string): SearchResult[] {\n if (this.lastQueriesWithResults.has(query)) {\n return this.lastQueriesWithResults.get(query);\n }\n return undefined;\n }\n private addToCache(query: string, data: SearchResult[]): SearchResult[] {\n if (this.lastQueriesWithResults.keys.length >= this.cacheSize) {\n const deletedQuery = this.lastQueriesLru[0];\n this.revomeFromCache(deletedQuery);\n }\n this.lastQueriesWithResults.set(query, data);\n this.lastQueriesLru.push(query);\n return data;\n }\n private revomeFromCache(query: string): void {\n this.lastQueriesWithResults.delete(query);\n const index = this.lastQueriesLru.findIndex((it) => it === query);\n this.lastQueriesLru.splice(index, 1);\n }\n private getLatestQuery(): string | null {\n return this.lastQueriesLru.length\n ? this.lastQueriesLru[this.lastQueriesLru.length - 1]\n : null;\n }\n // End cache implemementation ---\n}\n\nconst samePosition = (\n searchResult: SearchResult,\n keys: GeoPoint[]\n): boolean => {\n let found = false;\n keys.forEach((item) => {\n if (\n searchResult.lon === item.coordinates[0] &&\n searchResult.lat === item.coordinates[1]\n ) {\n found = true;\n }\n });\n return found;\n};\n\nconst distinct = (data: SearchResult[]): SearchResult[] => {\n const unique: { [key: string]: number } = {};\n return data.filter((r) => {\n if (unique[r.display_name]) {\n return false;\n }\n unique[r.display_name] = 1;\n return true;\n });\n};\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ElementRef,\n ViewChild,\n forwardRef,\n TemplateRef\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n AbstractControl,\n ValidationErrors,\n NG_VALIDATORS\n} from '@angular/forms';\nimport { DataSource } from '../datasource';\nimport {\n isInitialAndEmpty,\n isValidNumber,\n roundToMultipleOf\n} from '../helperFns';\nimport { languageDetector } from '../lang';\nimport { ModalService } from '../modal/modal.service';\nimport { GeoPoint } from '../map/geopoint';\nimport { Observable } from 'rxjs';\nimport { GeolocationService } from './geolocation.service';\n\n@Component({\n selector: 'lux-geolocation',\n templateUrl: './geolocation.component.html',\n styleUrls: ['./geolocation.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => GeolocationComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => GeolocationComponent)\n }\n ]\n})\nexport class GeolocationComponent implements OnInit {\n static idCounter = 0;\n\n @ViewChild('latitude', { static: true }) latitude: ElementRef;\n @ViewChild('longitude', { static: true }) longitude: ElementRef;\n\n touched = false;\n dirty = false;\n lastErrors: ValidationErrors | null = null;\n\n private _disabled: string | boolean;\n private _required: boolean;\n private _value: any;\n\n public latitudeValue?: number = null;\n public longitudeValue?: number = null;\n\n isValidNumber = isValidNumber;\n\n public userErrors = {\n en: {\n required: 'Required field.',\n minLatitude: 'Minimum latitude is $minLatitude.',\n maxLatitude: 'Maximum latitude is $maxLatitude.',\n minLongitude: 'Minimum longitude is $minLongitude.',\n maxLongitude: 'Maximum longitude is $maxLongitude.'\n },\n es: {\n required: 'El campo es obligatorio.',\n minLatitude: 'La latitud mínima es $minLatitude.',\n maxLatitude: 'La latitud máxima es $maxLatitude.',\n minLongitude: 'La longitud mínima es $minLongitude.',\n maxLongitude: 'La longitud máxima es $maxLongitude.'\n }\n };\n\n public cardinalPoints = {\n en: {\n north: 'N',\n south: 'S',\n east: 'E',\n west: 'W',\n unknown: '?'\n },\n es: {\n north: 'N',\n south: 'S',\n east: 'E',\n west: 'O',\n unknown: '?'\n }\n };\n\n @Input()\n public minLatitude: number;\n @Input()\n public maxLatitude: number;\n @Input()\n public minLongitude: number;\n @Input()\n public maxLongitude: number;\n @Input()\n public step: number;\n @Input()\n public zoom: number;\n\n get className(): string {\n return this.checkClassName();\n }\n\n @Input() lang = languageDetector();\n @Input() public inlineErrors = false;\n @Input() public inputId: string;\n @Input('aria-label') public ariaLabel: string;\n @Input() public readonly: boolean | null = null;\n\n @Input()\n set disabled(v: string | boolean) {\n v = typeof v === 'string' ? true : v;\n this._disabled = v;\n }\n get disabled(): string | boolean {\n return this._disabled;\n }\n\n @Input()\n set required(v: boolean) {\n this._required = v;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set value(v: GeoPoint) {\n if (v === this._value) {\n return; // prevent events when there is no changes\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n if (v.coordinates && v.coordinates.length === 2) {\n this._value = v;\n this.latitudeValue = v.coordinates[1];\n this.longitudeValue = v.coordinates[0];\n this.setLatitudeInControl(this.latitudeValue);\n this.setLongitudeInControl(this.longitudeValue);\n } else {\n this._value = undefined;\n this.latitudeValue = undefined;\n this.longitudeValue = undefined;\n this.setLatitudeInControl(this.latitudeValue);\n this.setLongitudeInControl(this.longitudeValue);\n }\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): GeoPoint {\n return this._value;\n }\n\n @Output() valueChange = new EventEmitter<GeoPoint>();\n @Output() keyPress = new EventEmitter<KeyboardEvent>();\n\n onChange = (value: any): void => {};\n onTouched = (): void => {};\n\n constructor(\n private modalService: ModalService,\n public locationService: GeolocationService\n ) {}\n\n // ControlValueAccessor Interface implementation\n writeValue(value: any): void {\n this.value = value;\n this.setLatitudeInControl(this.latitudeValue);\n this.setLongitudeInControl(this.longitudeValue);\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End of ControlValueAccessor Interface implementation\n\n private setLatitudeInControl(latitude: number): void {\n this.latitude.nativeElement.value = latitude;\n }\n private setLongitudeInControl(longitude: number): void {\n this.longitude.nativeElement.value = longitude;\n }\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n let result: ValidationErrors | null = null;\n\n if (this.required && (value === null || value === undefined)) {\n result = result || {};\n result.required = { value, reason: 'Required field.' };\n }\n if (\n this.minLatitude !== undefined &&\n this.minLatitude !== null &&\n this.latitudeValue < this.minLatitude\n ) {\n result = result || {};\n result.minLatitude = {\n value,\n min: this.minLatitude,\n reason: `Value is lower than minimum value: ${this.minLatitude}.`\n };\n }\n if (\n this.maxLatitude !== undefined &&\n this.maxLatitude !== null &&\n this.latitudeValue < this.maxLatitude\n ) {\n result = result || {};\n result.maxLatitude = {\n value,\n max: this.maxLatitude,\n reason: `Value is lower than maximum value: ${this.maxLatitude}.`\n };\n }\n if (\n this.minLongitude !== undefined &&\n this.minLongitude !== null &&\n this.longitudeValue < this.minLongitude\n ) {\n result = result || {};\n result.minLongitude = {\n value,\n min: this.minLongitude,\n reason: `Value is lower than minimum value: ${this.minLongitude}.`\n };\n }\n if (\n this.maxLongitude !== undefined &&\n this.maxLongitude !== null &&\n this.longitudeValue < this.maxLongitude\n ) {\n result = result || {};\n result.maxLongitude = {\n value,\n max: this.maxLongitude,\n reason: `Value is lower than maximum value: ${this.maxLongitude}.`\n };\n }\n this.lastErrors = result;\n return result;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `geolocation$${GeolocationComponent.idCounter++}`;\n this.setPatterns();\n }\n\n updateLatitude(newLatitude: number | null): void {\n if (this.disabled || this.readonly) {\n return;\n }\n this.value = {\n type: 'Point',\n coordinates: [this.longitudeValue, newLatitude]\n };\n }\n updateLongitude(newLongitude: number | null): void {\n if (this.disabled || this.readonly) {\n return;\n }\n this.value = {\n type: 'Point',\n coordinates: [newLongitude, this.latitudeValue]\n };\n }\n updateLatitudeAndLongitude(newLatitudeAndLongitude: number[]): void {\n if (this.disabled || this.readonly) {\n return;\n }\n this.value = {\n type: 'Point',\n coordinates: newLatitudeAndLongitude\n };\n }\n\n roundToStepAndUpdateLatitudeAndLongitude(\n newLatitudeAndLongitude: number[]\n ): void {\n const newLatitude = roundToMultipleOf(\n newLatitudeAndLongitude[1],\n this.step\n );\n const newLongitude = roundToMultipleOf(\n newLatitudeAndLongitude[0],\n this.step\n );\n if (this.disabled || this.readonly) {\n return;\n }\n this.value = {\n type: 'Point',\n coordinates: [newLongitude, newLatitude]\n };\n }\n\n onEventLatitude(newLatitude: string): void {\n if (isValidNumber(newLatitude)) {\n this.updateLatitude(+newLatitude);\n }\n }\n onEventLongitude(newLongitude: string): void {\n if (isValidNumber(newLongitude)) {\n this.updateLongitude(+newLongitude);\n }\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n\n checkClassName(): string {\n if (this.readonly === true) {\n return 'readonly';\n }\n return '';\n }\n\n openModalMap(modal: TemplateRef<any>): void {\n this.modalService.open(modal).result.then(\n (result) => {\n if (result !== 'cancel') {\n this.roundToStepAndUpdateLatitudeAndLongitude(result);\n }\n },\n (_) => {}\n );\n }\n\n get mapTitle(): string {\n return this._disabled || !!this.readonly ? 'Location:' : 'Select location:';\n }\n\n get self(): GeolocationComponent {\n return this;\n }\n\n getLabels(\n instance: GeolocationComponent,\n keys: GeoPoint[]\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.locationService.getLabels(instance.locationService, keys);\n }\n\n getData(\n instance: GeolocationComponent,\n search: string\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.locationService.getData(instance.locationService, search);\n }\n\n setPatterns(): void {\n this.step = this.step || 0.00001; // 0.00001 degrees = 1.11 meters\n this.zoom = this.zoom || 18; // (360/2^18) degrees ~ 0.00137 degrees ~ 153 meters\n this.minLatitude = this.minLatitude || -90;\n this.maxLatitude = this.maxLatitude || +90;\n this.minLongitude = this.minLongitude || -180;\n this.maxLongitude = this.maxLongitude || +180;\n }\n}\n","export enum Placement {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right'\n}\nexport type PlacementValue = 'left' | 'right' | 'top' | 'bottom';\n","import { Component, Input } from '@angular/core';\nimport { LuxTooltipContext } from './tooltip-context';\n\n/**\n * Default Tooltip Component\n */\n@Component({\n template: `\n <span class=\"lux-tooltip\" style=\"transition: opacity 200ms\">{{context.message}}</span>\n `\n})\nexport class TooltipComponent {\n\n @Input() context: LuxTooltipContext;\n\n constructor() { }\n\n}\n","import { ViewRef, ComponentRef } from '@angular/core';\n\nexport class TooltipContentRef {\n constructor(public viewRef?: ViewRef, public componentRef?: ComponentRef<any>) {}\n}\n","import {\n Injectable,\n Injector,\n ComponentRef,\n ComponentFactoryResolver,\n ApplicationRef,\n EmbeddedViewRef,\n ElementRef,\n TemplateRef\n} from '@angular/core';\n\nimport { PlacementValue, Placement } from './placement';\nimport { LuxTooltipContext } from './tooltip-context';\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipContentRef } from './tooltop-content';\n\n@Injectable()\nexport class TooltipService {\n constructor(\n private _injector: Injector,\n private _crf: ComponentFactoryResolver,\n private _applicationRef: ApplicationRef\n ) {}\n\n appendComponentToBody(\n content: any,\n elHost: ElementRef,\n placement: PlacementValue\n ): TooltipContentRef {\n const tooltipContentRef = this.getTooltipContentRef(content);\n if (tooltipContentRef) {\n let domElem = (tooltipContentRef.viewRef as EmbeddedViewRef<any>)\n .rootNodes[0];\n document.body.appendChild(domElem);\n if (tooltipContentRef.componentRef) {\n tooltipContentRef.componentRef.changeDetectorRef.detectChanges();\n }\n domElem = this.setStyle(domElem, placement);\n domElem = this.setPosition(domElem, elHost, placement);\n return tooltipContentRef;\n }\n return null;\n }\n\n removeComponentFromBody(tooltipContentRef: TooltipContentRef): void {\n this._applicationRef.detachView(tooltipContentRef.viewRef);\n if (tooltipContentRef.componentRef) {\n tooltipContentRef.componentRef.destroy();\n }\n }\n\n private getTooltipContentRef(content: any): TooltipContentRef {\n if (!content) {\n // nothing to show\n } else if (content instanceof TemplateRef) {\n return this.createFromTemplateRef(content);\n } else if (typeof content === 'string') {\n return this.createFromComponent(TooltipComponent, { message: content });\n } else {\n return this.createFromComponent(content);\n }\n }\n\n private createFromTemplateRef(content: TemplateRef<any>): TooltipContentRef {\n const viewRef = content.createEmbeddedView({});\n this._applicationRef.attachView(viewRef);\n return new TooltipContentRef(viewRef);\n }\n\n private createFromComponent(\n component: any,\n context?: LuxTooltipContext\n ): TooltipContentRef {\n const componentRef: ComponentRef<any> = this._crf\n .resolveComponentFactory(component)\n .create(this._injector);\n if (context) {\n componentRef.instance.context = context;\n }\n this._applicationRef.attachView(componentRef.hostView);\n return new TooltipContentRef(componentRef.hostView, componentRef);\n }\n\n private setStyle(\n domElem: HTMLElement,\n placement: PlacementValue\n ): HTMLElement {\n domElem.style.position = 'absolute';\n domElem.style.minWidth = 'min-content';\n domElem.style.minHeight = 'min-content';\n const tooltipElement = this.getTooltipElementFromHTMLElemnt(domElem);\n placement =\n placement !== undefined\n ? (placement.toLocaleLowerCase() as PlacementValue)\n : 'top'; // 'Top' is the default value of placement\n tooltipElement.classList.add(`lux-tooltip-${placement}`);\n tooltipElement.classList.add('lux-tooltip-show');\n return domElem;\n }\n\n private getTooltipElementFromHTMLElemnt(domElem: HTMLElement): any {\n const elementsArray = Array.from(domElem.classList).filter(\n (className) => className === 'lux-tooltip'\n );\n if (elementsArray.length !== 0) {\n return domElem;\n } else if (domElem.hasChildNodes()) {\n const childrenArray = Array.from(domElem.children).filter(\n (child) =>\n this.getTooltipElementFromHTMLElemnt(child as HTMLElement) !== null\n );\n if (childrenArray.length !== 0) {\n return this.getTooltipElementFromHTMLElemnt(\n childrenArray[0] as HTMLElement\n );\n } else {\n return null;\n }\n } else {\n return null;\n }\n }\n\n private setPosition(\n domElem: HTMLElement,\n elHost: ElementRef,\n placement: PlacementValue\n ): HTMLElement {\n const hostPos = elHost.nativeElement.getBoundingClientRect();\n const tooltipPos = domElem.getBoundingClientRect();\n const scrollPos =\n window.pageYOffset ||\n document.documentElement.scrollTop ||\n document.body.scrollTop ||\n 0;\n let top = 0;\n let left = 0;\n const offset = 10;\n\n switch (placement) {\n case Placement.Bottom:\n top = hostPos.bottom + offset;\n left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;\n break;\n case Placement.Left:\n top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;\n left = hostPos.left - tooltipPos.width - offset;\n break;\n case Placement.Right:\n top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;\n left = hostPos.right + offset;\n break;\n case Placement.Top:\n default:\n top = hostPos.top - tooltipPos.height - offset;\n left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;\n break;\n }\n top = Math.max(0, top);\n left = Math.max(0, left);\n domElem.style.top = `${top + scrollPos}px`;\n domElem.style.left = `${left}px`;\n return domElem;\n }\n}\n","import { HostListener, Input, Directive, ElementRef } from '@angular/core';\n\nimport { TooltipService } from './tooltip.service';\nimport { PlacementValue } from './placement';\nimport { TooltipContentRef } from './tooltop-content';\n\n/**\n * Tooltip directive\n */\n@Directive({\n selector: '[luxTooltip]'\n})\nexport class LuxTooltipDirective {\n /** Tooltip title */\n @Input() luxTooltip: any;\n\n /** Component, TemplateRef or String */\n @Input() content: any;\n\n /** Placement */\n @Input() placement: PlacementValue;\n\n tooltipRef: TooltipContentRef;\n\n constructor(\n private elHost: ElementRef,\n private tooltipService: TooltipService\n ) {}\n\n @HostListener('mouseenter') onMouseEnter(): void {\n if (!this.tooltipRef) {\n this.tooltipRef = this.show(this.content, this.elHost, this.placement);\n }\n }\n\n @HostListener('mouseleave') onMouseLeave(): void {\n if (this.tooltipRef) {\n this.remove(this.tooltipRef);\n this.tooltipRef = null;\n }\n }\n\n @HostListener('click') onClick(): void {\n if (this.tooltipRef) {\n this.remove(this.tooltipRef);\n this.tooltipRef = null;\n }\n }\n\n show(\n component: any,\n elHost: ElementRef,\n placement: PlacementValue\n ): TooltipContentRef {\n return this.tooltipService.appendComponentToBody(\n component,\n elHost,\n placement\n );\n }\n\n remove(tooltipRef: TooltipContentRef): void {\n this.tooltipService.removeComponentFromBody(tooltipRef);\n }\n}\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\nimport {\n Router,\n NavigationEnd,\n ActivatedRoute,\n ActivatedRouteSnapshot\n} from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\n\nexport interface BreadcrumbItem {\n label: string;\n url: string;\n}\n@Component({\n selector: 'lux-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss']\n})\nexport class LuxBreadcrumbComponent implements OnInit, OnDestroy {\n public breadcrumbs: BreadcrumbItem[];\n private subs: Subscription[] = [];\n public imagePath = '../assets/img/arrow-forward.svg';\n\n constructor(private route: Router, private activedRoute: ActivatedRoute) {}\n\n ngOnInit(): void {\n this.subs.push(\n this.route.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((_) => {\n this.breadcrumbs = [];\n this.addBreadcrumbs(this.activedRoute.snapshot.root, true, null);\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subs.forEach((s) => s.unsubscribe());\n this.subs = [];\n }\n\n private addBreadcrumbs(\n activedRouteSnapshot: ActivatedRouteSnapshot,\n isRoot: boolean,\n urlPrefix: string\n ): void {\n const routeConfig = activedRouteSnapshot.routeConfig;\n let url = urlPrefix || '';\n url += routeConfig ? '/' + this.getUrl(activedRouteSnapshot) : '';\n const label = routeConfig\n ? this.getLabel(activedRouteSnapshot)\n : isRoot\n ? 'Home'\n : '';\n if (label && url !== '/') {\n const breadcrumb = { label, url };\n this.breadcrumbs.push(breadcrumb);\n }\n if (activedRouteSnapshot.children.length) {\n this.addBreadcrumbs(activedRouteSnapshot.children[0], false, url);\n }\n }\n\n private getUrl(activedRouteSnapshot: ActivatedRouteSnapshot): string {\n if (!activedRouteSnapshot.url[0]) {\n return '';\n }\n const id = activedRouteSnapshot.params.id;\n return id\n ? `${activedRouteSnapshot.url[0]}/${id}`\n : activedRouteSnapshot.routeConfig.path || '';\n }\n\n private getLabel(activedRouteSnapshot: ActivatedRouteSnapshot): string {\n const routeConfig = activedRouteSnapshot.routeConfig;\n if (!routeConfig) {\n return null;\n }\n if (activedRouteSnapshot.data && activedRouteSnapshot.data.title) {\n const data = activedRouteSnapshot.data;\n if (data.objectTitle) {\n return `${data.title} ${data.objectTitle}`;\n } else {\n return data.title;\n }\n }\n return activedRouteSnapshot.params.id || routeConfig.path;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { from, Observable, of } from 'rxjs';\n\nlet openLayersIsInstalled = false;\n\n@Injectable({ providedIn: 'root' })\nexport class OpenLayerLoaderService {\n load(): Observable<boolean> {\n if ((window as any).ol) {\n return of(true);\n }\n\n const openLayerJsUrl = 'https://openlayers.org/en/v5.3.0/build/ol.js';\n const openLayerCssUrl = 'https://openlayers.org/en/v5.3.0/css/ol.css';\n\n if (!openLayersIsInstalled) {\n openLayersIsInstalled = true; // only try to install it once\n loadCss(openLayerCssUrl, () => {});\n return from(\n new Promise<boolean>((resolve, _) => {\n loadScript(openLayerJsUrl, () => resolve(true));\n })\n );\n }\n return of(true);\n }\n}\n\n/** Dynamically load a script from url and return a callback */\nconst loadScript = (url: string, callback: () => void): void => {\n const script: any = document.createElement('script');\n script.type = 'text/javascript';\n\n if (script.readyState) {\n // for old IE\n script.onreadystatechange = (): void => {\n if (script.readyState === 'loaded' || script.readyState === 'complete') {\n script.onreadystatechange = null;\n callback();\n }\n };\n } else {\n // Others browsers\n script.onload = (): void => {\n callback();\n };\n }\n script.src = url;\n document.getElementsByTagName('head')[0].appendChild(script);\n};\n\n/** Dynamically load css from url and return a callback */\nconst loadCss = (url: string, callback: () => void): void => {\n const link: any = document.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.type = 'text/javascript';\n link.href = url;\n link.onload = (): void => {\n callback();\n };\n document.getElementsByTagName('head')[0].appendChild(link);\n};\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n AfterViewInit\n} from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { OpenLayerLoaderService } from '../geolocation/openlayer-loader.service';\n\nimport { GeoPoint } from './geopoint';\n\n// @dynamic\ndeclare const ol: any;\n\n@Component({\n selector: 'lux-map',\n templateUrl: './map.component.html',\n styleUrls: ['./map.component.scss']\n})\nexport class MapComponent implements OnInit, AfterViewInit {\n static idCounter = 0;\n\n private loaded$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n private _map: any;\n\n @Input() mapId;\n\n _zoom: number;\n @Input()\n set zoom(zoom: number) {\n if (!isNaN(zoom)) {\n this._zoom = zoom;\n if (this._map) {\n this._map.getView().setZoom(zoom);\n }\n }\n }\n get zoom(): number {\n return this._zoom;\n }\n\n _center: GeoPoint;\n @Input()\n set center(center: GeoPoint) {\n if (center) {\n if (center.coordinates && center.coordinates.length === 2) {\n this._center = center;\n if (this._map) {\n this._map.getView().setCenter(ol.proj.fromLonLat(center.coordinates));\n }\n }\n }\n }\n get center(): GeoPoint {\n return this._center;\n }\n\n _readonly: boolean;\n @Input()\n set readonly(readonly: boolean) {\n if (!readonly) {\n if (this._map) {\n this._map.on('click', (args: any) => {\n // args.coordinate is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)\n const coordinates = ol.proj.toLonLat(args.coordinate);\n // alternatively: const lonLat = ol.proj.transform(args.coordinate,'EPSG:3857','EPSG:4326');\n this.addMarkerAtCoordinates(coordinates);\n });\n this._map.on('pointermove', (event: any) => {\n const pixel = this._map.getEventPixel(event.originalEvent);\n const hit = this._map.hasFeatureAtPixel(pixel);\n this._map.getViewport().style.cursor = hit ? 'move' : 'grab';\n });\n }\n } else {\n if (this._map) {\n this._map.on('click', (args: any) => {});\n this._map.on('pointermove', (event: any) => {});\n this._map.getViewport().style.cursor = 'grab';\n }\n }\n this._readonly = readonly;\n // reset marker coordinates so marker interactions can be created or recreated accordingly\n // to the changes to readonly\n this.markerCoordinates = this.markerCoordinates;\n }\n get readonly(): boolean {\n return this._readonly;\n }\n\n private _marker: any;\n private _markerInteraction: any;\n private _markerCoordinates: number[];\n @Input()\n private set markerCoordinates(markerCoordinates: number[]) {\n if (markerCoordinates && markerCoordinates.length === 2) {\n this._markerCoordinates = markerCoordinates;\n if (this._map) {\n this.addMarkerAtCoordinates(markerCoordinates);\n }\n } else {\n this._markerCoordinates = undefined;\n if (this._map) {\n this.removeMarker();\n }\n }\n }\n private get markerCoordinates(): number[] {\n return this._markerCoordinates;\n }\n @Input()\n set markerPoint(markerPoint: GeoPoint) {\n if (\n !markerPoint ||\n !(markerPoint.coordinates && markerPoint.coordinates.length === 2)\n ) {\n this.markerCoordinates = undefined;\n } else {\n this.markerCoordinates = [\n +markerPoint.coordinates[0],\n +markerPoint.coordinates[1]\n ];\n }\n this.valueChange.emit(markerPoint);\n }\n get markerPoint(): GeoPoint {\n return {\n type: 'Point',\n coordinates: this.markerCoordinates\n };\n }\n @Output() valueChange = new EventEmitter<GeoPoint>();\n\n private _markerSource: any;\n private _markerStyle: any;\n\n constructor(olLoader: OpenLayerLoaderService) {\n olLoader.load().subscribe((_) => {\n // Initialize\n this._markerSource = new ol.source.Vector();\n this._markerStyle = new ol.style.Style({\n image: new ol.style.Icon({\n anchor: [0.5, 1],\n scale: 0.25,\n src: '/assets/img/marker.png'\n })\n });\n this.loaded$.next(true);\n });\n }\n\n ngOnInit(): void {\n this.mapId = this.mapId ? this.mapId : 'map' + MapComponent.idCounter++;\n }\n\n ngAfterViewInit(): void {\n this.loaded$.subscribe((loaded) => {\n if (loaded) {\n this.initMap();\n }\n });\n }\n private initMap(): void {\n this._map = new ol.Map({\n target: this.mapId,\n controls: ol.control.defaults({ attribution: false }),\n layers: [\n new ol.layer.Tile({\n source: new ol.source.OSM()\n }),\n new ol.layer.Vector({\n source: this._markerSource,\n style: this._markerStyle\n })\n ],\n view: new ol.View({\n center: ol.proj.fromLonLat(\n this.center !== undefined ? this.center.coordinates : [0, 0]\n ),\n zoom: this.zoom\n })\n });\n\n if (this.center === undefined || this.center === null) {\n // if the center is not set, we set its default value\n if ('geolocation' in navigator) {\n navigator.geolocation.getCurrentPosition(\n (position) => {\n this.center = {\n type: 'Point',\n coordinates: [position.coords.longitude, position.coords.latitude]\n };\n },\n (error) => {\n this.center = {\n type: 'Point',\n coordinates: [0, 0]\n };\n }\n );\n } else {\n this.center = {\n type: 'Point',\n coordinates: [0, 0]\n };\n }\n } else {\n // the center needs the map to be properly set, so if it was set before the map was initialized,\n // we set the center again to perform necessary adjustements\n this.center = this.center;\n }\n\n if (this.zoom === undefined || this.zoom === null) {\n // if the zoom is not set, we set its default value\n this.zoom = 18;\n } else {\n // the zoom needs the map to be properly set, so if it was set before the map was initialized,\n // we set the zoom again to perform necessary adjustements\n this.zoom = this.zoom;\n }\n\n if (this.readonly === undefined || this.readonly === null) {\n // if readonly is not set, we set its default value\n this.readonly = false;\n } else {\n // readonly needs the map to be properly set, so if it was set before the map was initialized,\n // we set readonly again to perform necessary adjustements\n this.readonly = this.readonly;\n }\n\n if (\n this.markerCoordinates !== undefined &&\n this.markerCoordinates !== null\n ) {\n // the marker coordinates need the map to be properly set, so if they were set before the map was initialized,\n // we set the marker coordinates again to perform necessary adjustements\n this.markerCoordinates = this.markerCoordinates;\n }\n }\n\n private addMarkerAtCoordinates(coordinates: number[]): void {\n if (coordinates && coordinates.length === 2) {\n if (this._marker !== undefined) {\n this.removeMarker();\n }\n this._marker = new ol.Feature({\n geometry: new ol.geom.Point(\n // [lon, lat] is in EPSG:4326 (degrees), we transform it into EPSG:3857 (meters)\n ol.proj.transform(coordinates, 'EPSG:4326', 'EPSG:3857')\n )\n });\n this._markerSource.addFeature(this._marker);\n this._markerCoordinates = this.getMarkerCoordinates();\n\n if (!this.readonly) {\n const dragInteraction = new ol.interaction.Modify({\n features: new ol.Collection([this._marker]),\n style: this._markerStyle,\n pixelTolerance: 50,\n hitDetection: true\n });\n this._markerInteraction = dragInteraction;\n this._map.addInteraction(dragInteraction);\n }\n\n this._marker.on(\n 'change',\n () => {\n this._markerCoordinates = this.getMarkerCoordinates();\n },\n this._marker\n );\n }\n }\n\n private removeMarker(): void {\n if (this._marker !== undefined) {\n this._markerSource.removeFeature(this._marker);\n this._marker = undefined;\n }\n if (this._markerInteraction !== undefined) {\n this._map.getInteractions().pop();\n this._markerInteraction = undefined;\n }\n }\n\n private getMarkerCoordinates(): number[] | null {\n if (this._marker === undefined || this._marker == null) {\n return this._marker;\n }\n const coordinates = this._marker.getGeometry().getCoordinates();\n // coordinates is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)\n return ol.proj.transform(coordinates, 'EPSG:3857', 'EPSG:4326');\n }\n\n onResize(): void {\n if (this._map) {\n this._map.updateSize();\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { languageDetector } from '../lang';\r\nimport { PaginationInfo } from './pagination';\r\n\r\n@Component({\r\n selector: 'lux-pagination',\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.scss']\r\n})\r\nexport class PaginationComponent implements OnInit {\r\n literals = {\r\n en: {\r\n first: 'First',\r\n previous: 'Previous',\r\n next: 'Next',\r\n last: 'Last'\r\n },\r\n es: {\r\n first: 'Primero',\r\n previous: 'Anterior',\r\n next: 'Siguiente',\r\n last: 'Último'\r\n }\r\n };\r\n\r\n public first: string;\r\n public previous: string;\r\n public next: string;\r\n public last: string;\r\n\r\n public showPagination = false;\r\n public hidePrevious = false;\r\n public lastPage = false;\r\n public totalPages = 0;\r\n public displayNextEllipsis = false;\r\n public displayPreviousEllipsis = false;\r\n\r\n public pages: number[] = [];\r\n\r\n @Output() goToPage = new EventEmitter<number>();\r\n @Output() pageSizeChange = new EventEmitter<number>();\r\n\r\n /** Current page, total items and items to show per page */\r\n private paginationInfoValue: PaginationInfo;\r\n\r\n private _lang: string;\r\n @Input()\r\n set lang(l: string) {\r\n if (l === this._lang) {\r\n return;\r\n }\r\n if (Object.keys(this.literals).includes(l)) {\r\n this._lang = l;\r\n } else {\r\n this._lang = 'en';\r\n }\r\n this.loadLanguage();\r\n }\r\n get lang(): string {\r\n return this._lang;\r\n }\r\n\r\n @Input()\r\n set paginationInfo(value: PaginationInfo) {\r\n this.paginationInfoValue = value;\r\n this.syncState();\r\n }\r\n get paginationInfo(): PaginationInfo {\r\n return this.paginationInfoValue;\r\n }\r\n\r\n constructor() {\r\n this.lang = languageDetector();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.calculatePages();\r\n }\r\n\r\n pageSizeChanged(pageSize: number): void {\r\n this.paginationInfo.pageSize = pageSize;\r\n this.syncState();\r\n this.pageSizeChange.emit(pageSize);\r\n }\r\n\r\n onPage(n: number): void {\r\n this.goToPage.emit(n);\r\n }\r\n\r\n onFirst(): void {\r\n this.goToPage.emit(0);\r\n }\r\n\r\n onLast(): void {\r\n this.goToPage.emit(this.totalPages - 1);\r\n }\r\n onNext(): void {\r\n const page = (this.paginationInfo.page || 0) + 1;\r\n this.goToPage.emit(page);\r\n }\r\n onPrevious(): void {\r\n const page = (this.paginationInfo.page || 0) - 1;\r\n this.goToPage.emit(page);\r\n }\r\n\r\n private syncState(): void {\r\n this.pages = this.calculatePages();\r\n\r\n this.showPagination =\r\n this.paginationInfo.total > this.paginationInfo.pageSize;\r\n this.hidePrevious = this.paginationInfo.page === 0;\r\n this.lastPage =\r\n this.paginationInfo.pageSize * (this.paginationInfo.page + 1) >=\r\n this.paginationInfo.total;\r\n this.totalPages =\r\n Math.ceil(this.paginationInfo.total / this.paginationInfo.pageSize) || 0;\r\n this.displayNextEllipsis = !this.pages.includes(this.totalPages - 1);\r\n this.displayPreviousEllipsis = !this.pages.includes(0);\r\n }\r\n\r\n private calculatePages(): number[] {\r\n const totalPages =\r\n Math.ceil(this.paginationInfo.total / this.paginationInfo.pageSize) - 1; // 0-index\r\n const p = this.paginationInfo.page || 0;\r\n const pagesToShow = this.paginationInfo.pagesToShow;\r\n const pages: number[] = [];\r\n pages.push(p);\r\n const times = pagesToShow - 1;\r\n for (let i = 0; i < times; i++) {\r\n if (pages.length < pagesToShow) {\r\n if (Math.min(...pages) > 0) {\r\n pages.unshift(Math.min(...pages) - 1);\r\n }\r\n }\r\n if (pages.length < pagesToShow) {\r\n if (Math.max(...pages) < totalPages) {\r\n pages.push(Math.max(...pages) + 1);\r\n }\r\n }\r\n }\r\n pages.sort((a, b) => a - b);\r\n return pages;\r\n }\r\n\r\n private loadLanguage(): void {\r\n const l = this.literals[this.lang];\r\n this.first = l.first;\r\n this.previous = l.previous;\r\n this.next = l.next;\r\n this.last = l.last;\r\n }\r\n}\r\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { isInitialAndEmpty } from '../helperFns';\n\nexport interface RadioItem {\n name?: string;\n label: string;\n value: any;\n}\n\n@Component({\n selector: 'lux-radiogroup',\n templateUrl: './radiogroup.component.html',\n styleUrls: ['./radiogroup.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => RadiogroupComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => RadiogroupComponent)\n }\n ]\n})\nexport class RadiogroupComponent implements ControlValueAccessor, Validator {\n private touched = false;\n\n @Input() name = 'radiogroup1';\n @Input() public disabled: boolean | null = false;\n @Input() public readonly: boolean | null = false;\n @Input() public required: boolean | null = false;\n\n @Input()\n set items(col: RadioItem[]) {\n this._items = (col || []).map((it, index) =>\n this.ensureHasUniqueName(it, index)\n );\n this.itemsChange.emit(col);\n }\n get items(): RadioItem[] {\n return this._items;\n }\n @Output() itemsChange = new EventEmitter<RadioItem[]>();\n\n @Input()\n set value(v: any) {\n if (v === this._value) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n this._value = v;\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): any {\n return this._value;\n }\n @Output() valueChange = new EventEmitter<any>();\n\n private _value: any = undefined;\n private _items: RadioItem[] = [];\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n setValue(event: MouseEvent, item: RadioItem): void {\n if (!this.disabled && !this.readonly) {\n this.value = item.value;\n this.markAsTouched();\n }\n event.preventDefault();\n }\n ensureHasUniqueName(item: RadioItem, index: number): RadioItem {\n if (!item.name) {\n item.name = `${this.name}_${index}`;\n }\n return item;\n }\n}\n","import {\n Component,\n Input,\n EventEmitter,\n Output,\n forwardRef\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\n\nlet sequencer = 0;\n\n@Component({\n selector: 'lux-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => SelectComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => SelectComponent)\n }\n ]\n})\nexport class SelectComponent implements ControlValueAccessor, Validator {\n @Input() id = 'stringList' + sequencer++;\n @Input() disabled = false;\n @Input() required = false;\n /** Allow multiple elements */\n @Input() multiple = true;\n @Input() value: string[] = [];\n @Output() valueChange = new EventEmitter<string[]>();\n @Input() placeholder = 'Add new';\n /** If set, check there is no duplicates in the data. */\n @Input() unique = true;\n /** Validation function for new items. Returns error or null if valid */\n @Input() validateItem: (item: string) => string = (_) => null;\n\n newEntry = '';\n error = null;\n isValidNewEntry = false;\n\n private touched = false;\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n get canAdd(): boolean {\n return this.multiple || this.value.length === 0;\n }\n add(val: string): void {\n this.value.push(val);\n this.newEntry = '';\n this.markAsTouched();\n this.valueChange.emit(this.value);\n }\n remove(index: number): void {\n if (this.value.length > index) {\n this.value.splice(index, 1);\n this.markAsTouched();\n this.valueChange.emit(this.value);\n }\n }\n onKeyPress(event: KeyboardEvent): void {\n if (event.key === 'Enter' && !this.error && this.newEntry !== '') {\n // Add on pressing Enter/Return\n this.markAsTouched();\n this.add(this.newEntry);\n }\n }\n onChangeNewEntry(newValue: string): void {\n this.markAsTouched();\n if (!newValue) {\n this.isValidNewEntry = false;\n this.error = null;\n return;\n }\n if (this.unique) {\n const found = (this.value || []).find((it) => it === newValue);\n this.isValidNewEntry = !found;\n this.error = found\n ? `Value '${newValue}' is already in. Cannot add duplicates.`\n : null;\n if (!this.isValidNewEntry) {\n return;\n }\n }\n this.error = this.validateItem(newValue);\n this.isValidNewEntry = !this.error;\n }\n}\n","import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[luxVoiceRecognition]'\n})\nexport class VoiceRecognitionDirective implements OnInit {\n @Input() language: string;\n // See API at: https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition\n private recognition: any;\n private isRecognizing = false;\n private mic: any;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {\n const speechRecognition = (window as any).webkitSpeechRecognition;\n if (speechRecognition) {\n this.recognition = new speechRecognition();\n }\n }\n\n ngOnInit(): void {\n if (this.recognition) {\n // API is available\n this.recognition.lang = this.language || window.navigator.language;\n this.recognition.interimResults = false;\n this.recognition.maxAlternatives = 1;\n\n // Add mic icon\n this.mic = document.createElement('div');\n this.mic.setAttribute('class', 'lux-microphone');\n\n const parent = this.el.nativeElement.parentElement;\n parent.appendChild(this.mic);\n\n // Add event handlers\n this.mic.onclick = (): void => this.microphoneClick();\n this.recognition.onresult = (event): void => this.onRecognized(event);\n }\n }\n\n microphoneClick(): void {\n if (this.isRecognizing) {\n // stop\n this.isRecognizing = false;\n this.renderer.removeClass(this.mic, 'lux-recording');\n this.recognition.abort();\n } else {\n // start\n this.el.nativeElement.value = getRecordingMessage(this.language);\n this.isRecognizing = true;\n this.renderer.addClass(this.mic, 'lux-recording');\n this.recognition.start();\n }\n }\n onRecognized(event: any): void {\n const recognizedText = event.results[0][0].transcript;\n this.isRecognizing = false;\n this.el.nativeElement.value = recognizedText;\n this.renderer.removeClass(this.mic, 'lux-recording');\n }\n}\n\nconst getRecordingMessage = (lang: string): string => {\n switch (lang.toLowerCase()) {\n case 'es':\n case 'es-es':\n return 'Grabando...';\n case 'en':\n case 'en-uk':\n case 'en-us':\n default:\n return 'Recording...';\n }\n};\n","\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { ClassProvider, FactoryProvider, InjectionToken, PLATFORM_ID } from '@angular/core';\n\n/* Create a new injection token for injecting the window into a component. */\nexport const WINDOW = new InjectionToken('WindowToken');\n\n/* Define abstract class for obtaining reference to the global window object. */\nexport abstract class WindowRef {\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n get nativeWindow(): Window | Object {\n throw new Error('Not implemented.');\n }\n\n}\n\n/* Define class that implements the abstract class and returns the native window object. */\nexport class BrowserWindowRef extends WindowRef {\n\n constructor() {\n super();\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n get nativeWindow(): Window | Object {\n return window;\n }\n\n}\n\n/* Create an factory function that returns the native window object. */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const windowFactory = (browserWindowRef: BrowserWindowRef, platformId: Object): Window | Object => {\n if (isPlatformBrowser(platformId)) {\n return browserWindowRef.nativeWindow;\n }\n return new Object();\n};\n\n/* Create a injectable provider for the WindowRef token that uses the BrowserWindowRef class. */\nconst browserWindowProvider: ClassProvider = {\n provide: WindowRef,\n useClass: BrowserWindowRef\n};\n\n/* Create an injectable provider that uses the windowFactory function for returning the native window object. */\nconst windowProvider: FactoryProvider = {\n provide: WINDOW,\n useFactory: windowFactory,\n deps: [ WindowRef, PLATFORM_ID ]\n};\n\n/* Create an array of providers. */\nexport const WINDOW_PROVIDERS = [\n browserWindowProvider,\n windowProvider\n];\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { AngularResizedEventModule } from 'angular-resize-event';\nimport { AutocompleteComponent } from './autocomplete/autocomplete.component';\nimport { AutocompleteListComponent } from './autocomplete-list/autocomplete-list.component';\nimport { CheckboxComponent } from './checkbox/checkbox.component';\nimport { InputComponent } from './input/input.component';\nimport { FilterComponent } from './filter/filter.component';\nimport { GeolocationComponent } from './geolocation/geolocation.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { LuxTooltipDirective } from './tooltip/tooltip.directive';\nimport { LuxBreadcrumbComponent } from './breadcrumb/breadcrumb.component';\nimport { LuxModalWindowComponent } from './modal/modal-window';\nimport { LuxModalBackdropComponent } from './modal/modal-backdrop';\nimport { MapComponent } from './map/map.component';\nimport { ModalService } from './modal/modal.service';\nimport { PaginationComponent } from './pagination/pagination.component';\nimport { RadiogroupComponent } from './radiogroup/radiogroup.component';\nimport { SelectComponent } from './select/select.component';\nimport { TooltipComponent } from './tooltip/tooltip.component';\nimport { TooltipService } from './tooltip/tooltip.service';\nimport { VoiceRecognitionDirective } from './voice-recognition/voice-recognition.directive';\nimport { WINDOW_PROVIDERS } from './window/window.service';\n\n@NgModule({\n declarations: [\n AutocompleteComponent,\n AutocompleteListComponent,\n FilterComponent,\n CheckboxComponent,\n InputComponent,\n GeolocationComponent,\n LuxTooltipDirective,\n LuxModalWindowComponent,\n LuxModalBackdropComponent,\n LuxBreadcrumbComponent,\n MapComponent,\n SelectComponent,\n TooltipComponent,\n PaginationComponent,\n RadiogroupComponent,\n VoiceRecognitionDirective\n ],\n entryComponents: [\n LuxModalWindowComponent,\n LuxModalBackdropComponent,\n TooltipComponent\n ],\n providers: [ModalService, TooltipService, WINDOW_PROVIDERS],\n imports: [\n AngularResizedEventModule,\n FormsModule,\n HttpClientModule,\n ReactiveFormsModule,\n RouterModule,\n CommonModule\n ],\n exports: [\n AutocompleteComponent,\n AutocompleteListComponent,\n FilterComponent,\n CheckboxComponent,\n InputComponent,\n GeolocationComponent,\n LuxTooltipDirective,\n LuxBreadcrumbComponent,\n LuxBreadcrumbComponent,\n MapComponent,\n SelectComponent,\n PaginationComponent,\n RadiogroupComponent,\n VoiceRecognitionDirective\n ]\n})\nexport class LuxModule {}\n","/*\n * Public API Surface of lux\n */\n\nexport { LuxModule } from './lib/lux.module';\nexport {\n DataSource,\n DataSourceItem,\n DecoratedDataSource,\n DecoratedDataSourceItem\n} from './lib/datasource';\nexport { AutocompleteComponent } from './lib/autocomplete/autocomplete.component';\nexport { AutocompleteListComponent } from './lib/autocomplete-list/autocomplete-list.component';\nexport {\n LuxBreadcrumbComponent,\n BreadcrumbItem\n} from './lib/breadcrumb/breadcrumb.component';\nexport { CheckboxComponent } from './lib/checkbox/checkbox.component';\nexport { FilterComponent } from './lib/filter/filter.component';\nexport { InputComponent } from './lib/input/input.component';\nexport { PaginationComponent } from './lib/pagination/pagination.component';\nexport { LuxTooltipDirective } from './lib/tooltip/tooltip.directive';\nexport { ModalService } from './lib/modal/modal.service';\nexport {\n RadioItem,\n RadiogroupComponent\n} from './lib/radiogroup/radiogroup.component';\nexport { ModalRef } from './lib/modal/modal-ref';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {GeolocationComponent as ɵa} from './lib/geolocation/geolocation.component';\nexport {GeolocationService as ɵd} from './lib/geolocation/geolocation.service';\nexport {OpenLayerLoaderService as ɵi} from './lib/geolocation/openlayer-loader.service';\nexport {MapComponent as ɵh} from './lib/map/map.component';\nexport {LuxModalBackdropComponent as ɵg} from './lib/modal/modal-backdrop';\nexport {LuxModalConfig as ɵc} from './lib/modal/modal-config';\nexport {ModalStack as ɵb} from './lib/modal/modal-stack';\nexport {LuxModalWindowComponent as ɵf} from './lib/modal/modal-window';\nexport {ContentRef as ɵr} from './lib/modal/util';\nexport {SelectComponent as ɵj} from './lib/select/select.component';\nexport {TooltipComponent as ɵk} from './lib/tooltip/tooltip.component';\nexport {TooltipService as ɵe} from './lib/tooltip/tooltip.service';\nexport {VoiceRecognitionDirective as ɵl} from './lib/voice-recognition/voice-recognition.directive';\nexport {BrowserWindowRef as ɵo,WINDOW as ɵm,WINDOW_PROVIDERS as ɵq,WindowRef as ɵn,windowFactory as ɵp} from './lib/window/window.service';"],"names":[],"mappings":";;;;;;;;;;;;AAAA;AAEO,MAAM,MAAM,GAAG,CAAC,KAAU,KAC/B,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAEjC,MAAM,QAAQ,GAAG,CAAC,KAAU,KACjC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,KAAK,KAAK,QAAQ,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AAE9E;AAEO,MAAM,aAAa,GAAG,CAAC,KAAa,KAAc,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAEtE,MAAM,YAAY,GAAG,CAAC,KAAa;IACxC,MAAM,EAAE,GACN,yIAAyI,CAAC;IAC5I,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF;AAEO,MAAM,aAAa,GAAG,CAAC,KAAU;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE;QAClD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KAC5B;IACD,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;AACzC,CAAC,CAAC;AAEF;AAEO,MAAM,aAAa,GAAG,CAC3B,KAAyC,MAC5B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAEhE,MAAM,qBAAqB,GAAG,CACnC,CAAkB;IAElB,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,OAAO,KAAK,UAAU,EAAE;YAC1B,OAAO,CAAC,CAAC;SACV;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,IAAI,CAAC,EAAE;YACjB,OAAO,CAAC,CAAC;SACV;QACD,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,mBAAmB,GAAG,CAAC,EAAE;YAC3B,OAAO,CAAC,CAAC;SACV;aAAM;YACL,OAAO,OAAO,CAAC,MAAM,GAAG,mBAAmB,GAAG,CAAC,CAAC;SACjD;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEK,MAAM,mBAAmB,GAAG,CAAC,CAAkB;IACpD,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;QACpB,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC9B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;SAC5C;QACD,IAAI,OAAO,KAAK,UAAU,EAAE;YAC1B,OAAO,QAAQ,CAAC;SACjB;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC9B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;SAC5C;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,IAAI,CAAC,EAAE;YACjB,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;SAChE;QACD,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,mBAAmB,GAAG,CAAC,EAAE;YAC3B,OAAO,OAAO,CAAC,MAAM,CAAC;SACvB;aAAM;YACL,OAAO,mBAAmB,CAAC;SAC5B;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAE,MAAc;IACzD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;;;IAGpC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IACtD,MAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;;IAElD,MAAM,8BAA8B,GAClC,qBAAqB,CAAC,mBAAmB,CAAC;QAC1C,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAC5C,CAAC,EACD,mBAAmB,CAAC,MAAM,GAAG,8BAA8B,CAC5D,CAAC;IACF,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF;AAEO,MAAM,iBAAiB,GAAG,CAC/B,aAAkB,EAClB,QAAa;IAEb,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,EACL,CAAC,WAAW,GAAG,aAAa,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;SACjE,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CACzD,CAAC;AACJ,CAAC;;MC7DY,qBAAqB;IA0EhC,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QA9DzC,gBAAW,GAAG,KAAK,CAAC;QACpB,YAAO,GAAG,KAAK,CAAC;QAChB,mBAAc,GAAwB,EAAE,CAAC;QACzC,mBAAc,GAAG,KAAK,CAAC;QAGb,gBAAW,GAAG,IAAI,YAAY,EAAO,CAAC;QACtC,qBAAgB,GAAG,IAAI,YAAY,EAA2B,CAAC;QAGzD,aAAQ,GAAmB,IAAI,CAAC;QAChC,aAAQ,GAAmB,IAAI,CAAC;QACvC,UAAK,GAAG,EAAE,CAAC;;QAEX,oBAAe,GAAG,KAAK,CAAC;;;;;QAKxB,wBAAmB,GAAG,KAAK,CAAC;QAuB5B,aAAQ,GAAG,KAAK,CAAC;QAUjB,0BAAqB,GAGa,SAAS,CAAC;QAC5C,qBAAgB,GAGkB,SAAS,CAAC;;QAMrD,aAAQ,GAAG,CAAC,KAAK,QAAa,CAAC;QAC/B,cAAS,GAAG,SAAc,CAAC;KAJkB;IAzC7C,IACI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,IAAI,KAAK,CAAC,CAAM;QACd,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;IACD,IACI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IACD,IAAI,UAAU,CAAC,CAA0B;QACvC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC/B;IAGD,IACI,WAAW,CAAC,CAAS;QACvB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;KACvB;IACD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;KACnD;IAkBD,UAAU,CAAC,KAAU;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAED,gBAAgB,CAAC,QAAa;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IACD,iBAAiB,CAAC,SAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IACD,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnC,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;KACF;IAED,gBAAgB,CAAC,QAAiB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;;;IAID,yBAAyB,MAAW;IAEpC,QAAQ,CAAC,OAAwB;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IACE,IAAI,CAAC,QAAQ;aACZ,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,EACvD;YACA,OAAO,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,CAAC;SAC3D;QACD,OAAO,IAAI,CAAC;KACb;;IAGD,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;KACrD;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAChE;iBAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBACtD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACpD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;qBAC9B,SAAS,CAAC,CAAC,IAAI;oBACd,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;iBACrD,CAAC,CAAC;aACN;SACF;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACjB;KACF;IAED,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;cACvB,IAAI,CAAC,OAAO;cACZ,mBAAmB,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC;QAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IACD,eAAe;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IACD,cAAc;QACZ,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IACO,YAAY;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QAClE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK,IAAI,CAAC;KAC3D;IAED,SAAS,CAAC,KAAoB,EAAE,KAAa;QAC3C,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,KAAK;gBACR,IAAI,KAAK,EAAE;oBACT,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;iBACvC;gBACD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,MAAM;SACT;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IACD,UAAU,CAAC,KAAoB,EAAE,KAAa;QAC5C,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,OAAO,CAAC;YACb,KAAK,OAAO;gBACV,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;SACT;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IACD,OAAO,CAAC,KAAoB,EAAE,KAAa;QACzC,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,UAAU;gBACb,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACpB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACpB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACR,KAAK,OAAO,CAAC;YACb,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACR;gBACE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;;SAElC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IACO,WAAW,CAAC,MAAc;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAC1B,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CACxD,CAAC;QACF,MAAM,IAAI,GACR,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM;cACxC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;cACpB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KAC/B;IACO,eAAe,CAAC,MAAc;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAC1B,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CACxD,CAAC;QACF,MAAM,IAAI,GACR,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KAC/B;IACD,WAAW;QACT,UAAU,CAAC;YACT,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SACpC,EAAE,GAAG,CAAC,CAAC;KACT;IACD,QAAQ,CAAC,IAAqD;QAC5D,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SACzB;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACjB;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IACD,gBAAgB,CAAC,IAAa,EAAE,KAAa;QAC3C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC1B,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,OAAO;aACR;SACF;QACD,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,cAAc;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CACzC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CACpC,CAAC;QACF,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;KACnC;IAEO,iBAAiB,CAAC,KAAa;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;SAC5C;KACF;IACO,eAAe,CAAC,IAAY;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACnB;IACO,yBAAyB,CAAC,IAAY;QAC5C,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;SACR;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,OAAO;SACR;QACD,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;QACnC,IAAI,MAAM,KAAK,EAAE,EAAE;YACjB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,OAAO;SACR;QACD,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW;YACvD,IAAI,CAAC,QAAQ,CACX,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAC9D,CAAC;SACH,CAAC,CAAC;KACJ;IACO,kBAAkB,CAAC,IAAY;QACrC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAChD,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzC,UAAU,CAAC;;YAET,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;gBACzC,IAAI,EAAE,CAAC,EAAE;oBACP,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;oBACzB,IAAI,CAAC,SAAS;wBACZ,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;oBACjE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;oBAC3B,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;iBAC3C;gBACD,KAAK,EAAE;oBACL,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;iBAC3C;gBACD,QAAQ,EAAE;oBACR,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;iBAC3C;aACF,CAAC,CAAC;SACJ,EAAE,CAAC,CAAC,CAAC;KACP;IACO,iBAAiB,CAAC,UAAmB,EAAE,KAAc;QAC3D,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC1B;KACF;IACO,qBAAqB;QAC3B,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;KACvE;IACO,qBAAqB,CAAC,IAAY;QACxC,MAAM,UAAU,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;iBAC9B,MAAM,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;iBAC1D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;SAC/C;aAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,IAAI,CAC1D,YAAY,CAAC,CAAC,CAAC,EACf,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,EAAE;gBACL,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAChE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CACzC,CAAC;gBACF,OAAO,kBAAkB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;aAC3C,CAAC,CACH,CAAC;SACH;aAAM;YACL,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;SACf;KACF;;AA7VM,+BAAS,GAAG,CAAC,CAAC;;YApBtB,SAAS,SAAC;gBACT,QAAQ,EAAE,kBAAkB;gBAC5B,woEAA4C;gBAE5C,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;qBACrD;oBACD;wBACE,OAAO,EAAE,aAAa;wBACtB,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;qBACrD;iBACF;;aACF;;;YA9CC,iBAAiB;;;iBAoDhB,SAAS,SAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;0BAChC,SAAS,SAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;0BAYzC,MAAM;+BACN,MAAM;sBAEN,KAAK;uBACL,KAAK;uBACL,KAAK;oBACL,KAAK;8BAEL,KAAK;kCAKL,KAAK;oBAEL,KAAK;yBAaL,KAAK;uBAQL,KAAK;0BAEL,KAAK;oCAQL,KAAK;+BAIL,KAAK;uBAIL,KAAK;;AA2RR;AACA,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAE,SAAiB;IAC3D,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC,CAAC;;AAEF;AACA,MAAM,gBAAgB,GAAG,CAAC,CAAS,KACjC,CAAC,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;;AAE7D,MAAM,kBAAkB,GAAG,CACzB,UAAmC,EACnC,SAAiB,KACO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;;AAE9E,MAAM,YAAY,GAAG,CACnB,IAAiC,EACjC,EAAU;IAEV,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;SACvC,WAAW,EAAE;SACb,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9E,MAAM,OAAO,mCACR,IAAI,KACP,WAAW;QACX,UAAU;QACV,YAAY,GACb,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;;AAEF,MAAM,cAAc,GAAG,CAAC,IAA6B,EAAE,EAAO;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;IAC/C,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;AACpC,CAAC,CAAC;;;AC1bF;AACO,MAAM,gBAAgB,GAAG;IAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;QAClC,OAAO,IAAI,CAAC;KACb;IACD,OAAO,IAAI,CAAC;AACd,CAAC;;MCkCY,yBAAyB;IAjBtC;QAwBE,aAAQ,GAAG;YACT,EAAE,EAAE;gBACF,WAAW,EAAE,UAAU;gBACvB,mBAAmB,EAAE,kBAAkB;gBACvC,UAAU,EAAE,KAAK;aAClB;YACD,EAAE,EAAE;gBACF,WAAW,EAAE,gBAAgB;gBAC7B,mBAAmB,EAAE,oBAAoB;gBACzC,UAAU,EAAE,QAAQ;aACrB;SACF,CAAC;QAEK,uBAAkB,GAA4B,EAAE,CAAC;QAChD,iBAAY,GAAG,KAAK,CAAC;QAErB,WAAM,GAAU,EAAE,CAAC;QAkB3B,WAAM,GAAa,EAAE,CAAC;QAEtB,WAAM,GAAG,KAAK,CAAC;QACf,YAAO,GAAG,KAAK,CAAC;QAER,UAAK,GAAG,gBAAgB,EAAE,CAAC;QAiB1B,eAAU,GAAyB,EAAE,CAAC;QAEtC,aAAQ,GAAG,KAAK,CAAC;QAGjB,aAAQ,GAAG,KAAK,CAAC;QAEjB,0BAAqB,GAGa,SAAS,CAAC;QAC5C,qBAAgB,GAGkB,SAAS,CAAC;QAG3C,gBAAW,GAAG,IAAI,YAAY,EAAS,CAAC;;QAGlD,aAAQ,GAAG,CAAC,KAAK,QAAa,CAAC;QAC/B,cAAS,GAAG,SAAc,CAAC;KAwI5B;IApMC,IACI,KAAK,CAAC,GAAU;QAClB,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE;YACvB,OAAO;SACR;QACD,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACpC;KACF;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAOD,IACI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IACD,IAAI,IAAI,CAAC,CAAS;QAChB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;YACpB,OAAO;SACR;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC1C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;SAChB;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;KACF;IA0BD,UAAU,CAAC,KAAU;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAED,gBAAgB,CAAC,QAAa;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IACD,iBAAiB,CAAC,SAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IACD,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnC,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;KACF;IACD,gBAAgB,CAAC,QAAiB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;;;IAID,yBAAyB,MAAW;IAEpC,QAAQ,CAAC,OAAwB;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IACE,IAAI,CAAC,QAAQ;aACZ,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,EACvD;YACA,OAAO,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,CAAC;SAC3D;QACD,OAAO,IAAI,CAAC;KACb;;IAGD,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;cACvB,IAAI,CAAC,OAAO;cACZ,mBAAmB,yBAAyB,CAAC,SAAS,EAAE,EAAE,CAAC;QAC/D,IAAI,CAAC,YAAY;YACf,CAAC,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC3E,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IACD,kBAAkB;QAChB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,qBAAqB,EAAE;YACnD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;iBACnD,IAAI,CAAC,KAAK,EAAE,CAAC;iBACb,SAAS,CAAC,CAAC,IAAI;gBACd,MAAM,GAAG,GAAa,EAAE,CAAC;gBACzB,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;oBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;oBAC/C,IAAI,KAAK,EAAE;wBACT,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;qBACvB;yBAAM;wBACL,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;qBACrB;iBACF,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;aACnB,CAAC,CAAC;SACN;aAAM,IAAI,IAAI,CAAC,UAAU,EAAE;YAC1B,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;gBAC1D,IAAI,KAAK,EAAE;oBACT,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBACvB;qBAAM;oBACL,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACrB;aACF,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;SACnB;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;SACzE;KACF;IACD,QAAQ,CAAC,KAAa;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;SAC9C;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IACD,aAAa;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IACD,gBAAgB,CAAC,KAAoB,EAAE,IAA2B;QAChE,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;YACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;;SAE/D;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;SAC3C;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IACD,YAAY,CAAC,UAAkB;QAC7B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;iBAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;iBACb,SAAS,CAAC,CAAC,IAAI;gBACd,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CACnC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAC9C,CAAC;aACH,CAAC,CAAC;SACN;aAAM,IAAI,IAAI,CAAC,UAAU,EAAE;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAC9C,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAC9C,CAAC;SACH;KACF;IACD,YAAY;QACV,IAAI,CAAC,MAAM;YACT,CAAC,IAAI,CAAC,QAAQ;gBACd,IAAI,CAAC,IAAI;gBACT,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;gBACjB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpD;IAED,MAAM,CAAC,IAA2B;QAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CACtD,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CACtC,CAAC;QACF,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,gBAAgB,CAAC,KAAa;;QAC5B,OAAO,CACL,MAAA,IAAI,CAAC,mBAAmB,mCAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,mBAAmB,EACxE,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KAC/B;;AAxNM,mCAAS,GAAG,CAAC,CAAC;;YApBtB,SAAS,SAAC;gBACT,QAAQ,EAAE,uBAAuB;gBACjC,43BAAiD;gBAEjD,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;qBACzD;oBACD;wBACE,OAAO,EAAE,aAAa;wBACtB,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;qBACzD;iBACF;;aACF;;;mBAME,SAAS,SAAC,MAAM;oBAmBhB,KAAK;mBAuBL,KAAK;sBAeL,KAAK;yBACL,KAAK;0BACL,KAAK;uBACL,KAAK;kCACL,KAAK;yBACL,KAAK;uBACL,KAAK;oCAEL,KAAK;+BAIL,KAAK;uBAIL,KAAK;0BAEL,MAAM;;;AC1GT,MAAM,SAAS,GAAG,GAAG,CAAC;MAcT,iBAAiB;IA0E5B;QAnEQ,UAAK,GAAG,gBAAgB,EAAE,CAAC;QAqC1B,UAAK,GAAW,IAAI,CAAC;QACrB,SAAI,GAAW,IAAI,CAAC;QACrB,cAAS,GAAG,KAAK,CAAC;QAc1B,aAAQ,GAAG;YACT,EAAE,EAAE;gBACF,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,IAAI;aACd;YACD,EAAE,EAAE;gBACF,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI;aACd;SACF,CAAC;QACF,YAAO,GAAG,KAAK,CAAC;QAEN,gBAAW,GAAG,IAAI,YAAY,EAAW,CAAC;;QAKpD,aAAQ,GAAG,CAAC,KAAK,QAAa,CAAC;QAC/B,cAAS,GAAG,SAAc,CAAC;KAJX;IAlEhB,IACI,IAAI,CAAC,CAAS;QAChB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;YACpB,OAAO;SACR;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC1C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;SAChB;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;KACF;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,IACI,KAAK;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IACD,IAAI,KAAK,CAAC,CAAU;QAClB,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE;YAC5B,OAAO;SACR;QACD,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,eAAe,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC;KACnC;IAKD,IACI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,CAAU;QACrB,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE;YACxB,OAAO;SACR;QACD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAsBD,UAAU,CAAC,KAAU;QACnB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;KACtB;IACD,gBAAgB,CAAC,QAAa;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IACD,iBAAiB,CAAC,SAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IACD,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;KACF;IACD,gBAAgB,CAAC,QAAiB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;;IAGD,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;cACvB,IAAI,CAAC,OAAO;cACZ,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC;KACnE;IACD,eAAe;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;YACjC,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;KACF;IACD,KAAK,CAAC,KAAoB;QACxB,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC7C,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;YACjC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;KACF;IAEO,SAAS;QACf,IAAI,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;SACpD;KACF;;AA3HM,2BAAS,GAAG,CAAC,CAAC;;YAftB,SAAS,SAAC;gBACT,QAAQ,EAAE,cAAc;gBACxB,krBAAwC;gBAExC,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;qBACjD;iBACF;;aACF;;;;iBAME,SAAS,SAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;mBAGjC,KAAK;oBAeL,KAAK;oBAqBL,KAAK;mBACL,KAAK;uBAEL,KAAK;sBAWL,KAAK;0BAcL,MAAM;;;MC1DI,cAAc;IAqJzB;QA/IA,YAAO,GAAG,KAAK,CAAC;QAChB,UAAK,GAAG,KAAK,CAAC;QACd,eAAU,GAA4B,IAAI,CAAC;QAGnC,WAAM,GAAQ,EAAE,CAAC;QAGjB,aAAQ,GAAY,SAAS,CAAC;QAC9B,YAAO,GAAY,SAAS,CAAC;QAI9B,eAAU,GAAG;YAClB,EAAE,EAAE;gBACF,QAAQ,EAAE,iBAAiB;gBAC3B,GAAG,EAAE,wBAAwB;gBAC7B,GAAG,EAAE,wBAAwB;gBAC7B,KAAK,EAAE,0CAA0C;aAClD;YACD,EAAE,EAAE;gBACF,QAAQ,EAAE,0BAA0B;gBACpC,GAAG,EAAE,0BAA0B;gBAC/B,GAAG,EAAE,0BAA0B;gBAC/B,KAAK,EAAE,0DAA0D;aAClE;SACF,CAAC;QAkBO,SAAI,GAAG,gBAAgB,EAAE,CAAC;QACnB,iBAAY,GAAG,KAAK,CAAC;QAGrB,aAAQ,GAAmB,IAAI,CAAC;QAyFtC,gBAAW,GAAG,IAAI,YAAY,EAAO,CAAC;QACtC,aAAQ,GAAG,IAAI,YAAY,EAAiB,CAAC;QAEvD,aAAQ,GAAG,CAAC,KAAK,QAAa,CAAC;QAC/B,cAAS,GAAG,SAAc,CAAC;KAEX;IAvGhB,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;KAC9B;IAQD,IACI,QAAQ,CAAC,CAAmB;QAC9B,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACpB;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IACI,OAAO,CAAC,CAAqB;QAC/B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;SAC1B;aAAM;YACL,IAAI;gBACF,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;aAC9B;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;gBAC1B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;aAC1B;SACF;KACF;IACD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IACI,QAAQ,CAAC,CAAS;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;KAClC;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IACI,WAAW,CAAC,CAAS;QACvB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;KACvB;IACD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;KACnD;IAED,IACI,QAAQ,CAAC,CAAU;QACrB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACpB;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IACI,IAAI,CAAC,CAAS;QAChB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KACnB;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;KACzC;IAED,IACI,KAAK,CAAC,CAAM;QACd,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO;SACR;QACD,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACxB,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;SACtB;QAED,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,eAAe,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;IACD,IAAI,KAAK;QACP,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBACzB,OAAO,MAAM,CAAC;aACf;SACF;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;;IAUD,UAAU,CAAC,KAAU;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,gBAAgB,CAAC,QAAa;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IAED,iBAAiB,CAAC,SAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;KACF;IAED,gBAAgB,CAAC,QAAiB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;;IAGO,iBAAiB,CAAC,CAAM;QAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YAC1B,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;SACtB;QACD,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;SACpC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;SACvC;KACF;;IAGD,yBAAyB,MAAW;IAEpC,QAAQ,CAAC,OAAwB;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,MAAM,GAA4B,IAAI,CAAC;QAE3C,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACxC,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;SACxD;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAChE,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,GAAG;gBACf,KAAK;gBACL,MAAM,EAAE,kCAAkC,IAAI,CAAC,QAAQ,EAAE;aAC1D,CAAC;SACH;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YACpE,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;SACpD;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;YACtE,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;SACvD;QACD,IACE,IAAI,CAAC,IAAI,KAAK,MAAM;YACpB,IAAI,CAAC,IAAI,KAAK,MAAM;YACpB,IAAI,CAAC,IAAI,KAAK,WAAW,EACzB;YACA,IACE,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;gBAC5B,QAAQ,CAAC,KAAK,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAC5C;gBACA,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,GAAG;oBACX,KAAK;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,MAAM,EAAE,sCAAsC,IAAI,CAAC,GAAG,GAAG;iBAC1D,CAAC;aACH;YACD,IACE,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;gBAC5B,QAAQ,CAAC,KAAK,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAC5C;gBACA,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,GAAG;oBACX,KAAK;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,MAAM,EAAE,6CAA6C,IAAI,CAAC,GAAG,GAAG;iBACjE,CAAC;aACH;SACF;QAED,IACE,IAAI,CAAC,IAAI,KAAK,YAAY;YAC1B,IAAI,CAAC,IAAI,KAAK,YAAY;YAC1B,IAAI,CAAC,IAAI,KAAK,QAAQ;YACtB,IAAI,CAAC,IAAI,KAAK,UAAU,EACxB;YACA,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9D,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,GAAG;oBACX,KAAK;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,MAAM,EAAE,sCAAsC,IAAI,CAAC,GAAG,GAAG;iBAC1D,CAAC;aACH;YACD,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9D,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,GAAG;oBACX,KAAK;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,MAAM,EAAE,6CAA6C,IAAI,CAAC,GAAG,GAAG;iBACjE,CAAC;aACH;SACF;QACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,OAAO,MAAM,CAAC;KACf;;IAGD,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;cACvB,IAAI,CAAC,OAAO;cACZ,GAAG,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC;KAClD;IACD,WAAW;QACT,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IACD,OAAO,CAAC,QAAgB;QACtB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;KACvB;IACD,aAAa,CAAC,QAAgB;QAC5B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IACD,UAAU,CAAC,KAAoB;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;KAC/B;IACD,YAAY;QACV,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;KACnC;IACD,YAAY;QACV,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;KACnC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;YAC1B,OAAO,UAAU,CAAC;SACnB;QACD,OAAO,EAAE,CAAC;KACX;IAED,SAAS,CAAC,IAAY;QACpB,QAAQ,IAAI;YACV,KAAK,OAAO;gBACV,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,MAAM;YACR;gBACE,MAAM;SACT;KACF;IAED,gBAAgB,MAAW;IAE3B,eAAe;QACb,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC;QACpC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC;KACrC;IAED,eAAe,MAAW;IAE1B,mBAAmB,MAAW;IAE9B,iBAAiB;QACf,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;KACxB;IAED,mBAAmB;QACjB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;KAClB;IAED,qBAAqB;QACnB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAC9B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;KAC3B;IAED,qBAAqB;QACnB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAC9B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;KAC3B;;AA1XM,wBAAS,GAAG,CAAC,CAAC;;YAlBtB,SAAS,SAAC;gBACT,QAAQ,EAAE,WAAW;gBACrB,kmEAAqC;gBAErC,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;qBAC9C;oBACD;wBACE,OAAO,EAAE,aAAa;wBACtB,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;qBAC9C;iBACF;;aACF;;;;oBAIE,SAAS,SAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;uBACpC,SAAS,SAAC,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;mBA+BvC,KAAK;mBAEL,KAAK;mBAEL,KAAK;kBAEL,KAAK;kBAEL,KAAK;mBAOL,KAAK;2BACL,KAAK;sBACL,KAAK;wBACL,KAAK,SAAC,YAAY;uBAClB,KAAK;uBAEL,KAAK;sBASL,KAAK;uBAkBL,KAAK;0BAQL,KAAK;uBAQL,KAAK;mBAQL,KAAK;oBAUL,KAAK;0BA0BL,MAAM;uBACN,MAAM;;;AC9KT;MAaa,eAAe;IAkD1B;QA7CQ,YAAO,GAAG,KAAK,CAAC;QAChB,iBAAY,GAAG,EAAE,CAAC;QAEjB,aAAQ,GAAG,KAAK,CAAC;;QAIjB,gBAAW,GAAG,EAAE,CAAC;;QAejB,iBAAY,GAAG,IAAI,CAAC;QAIrB,kBAAa,GAAG,GAAG,CAAC;;QAYlB,sBAAiB,GAAG,IAAI,YAAY,EAAU,CAAC;QAIjD,YAAO,GAAG,IAAI,OAAO,EAAU,CAAC;;QAQxC,aAAQ,GAAG,CAAC,KAAK,QAAa,CAAC;QAC/B,cAAS,GAAG,SAAc,CAAC;QALzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;;IAtCD,IACI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IACD,IAAI,WAAW,CAAC,CAAS;QACvB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE;YAC3B,OAAO;SACR;QACD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;KACvB;;IAQD,IACI,QAAQ,CAAC,GAAW;QACtB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAiBD,UAAU,CAAC,KAAU;QACnB,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;KAC7C;IACD,gBAAgB,CAAC,QAAa;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IACD,iBAAiB,CAAC,SAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IACD,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;KACF;IACD,gBAAgB,CAAC,QAAiB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;;IAGD,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;cACvB,IAAI,CAAC,OAAO;cACZ,UAAU,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC;KAC7C;IACD,WAAW;QACT,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IACD,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IACD,MAAM;QACJ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC/C;IACD,KAAK,CAAC,KAAoB,EAAE,QAAgB;QAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC5B,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;IACD,kBAAkB,CAAC,QAAgB;QACjC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;KAC7B;IAEO,kBAAkB;QACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO;aAC7B,YAAY,EAAE;aACd,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAErC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK;YAC3C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpC,CAAC,CAAC;KACJ;IACO,iBAAiB;QACvB,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;SACjB;KACF;IACO,SAAS,CAAC,KAAa;QAC7B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpC;IACO,QAAQ;QACd,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACrC;;AA7HM,yBAAS,GAAG,CAAC,CAAC;;YAftB,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,utBAAsC;gBAEtC,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;qBAC/C;iBACF;;aACF;;;;uBASE,KAAK;sBAEL,KAAK;0BAEL,KAAK;0BAEL,KAAK;2BAaL,KAAK;wBAEL,KAAK,SAAC,YAAY;uBAIlB,KAAK;gCAUL,MAAM;;;MChEI,WAAW;IACtB,KAAK,CAAC,MAAY,KAAU;IAC5B,OAAO,CAAC,MAAY,KAAU;CAC/B;MAEY,QAAQ;IAoBnB,YACU,cAAqD,EACrD,WAAuB,EACvB,gBAA0D,EAC1D,cAA0B;QAH1B,mBAAc,GAAd,cAAc,CAAuC;QACrD,gBAAW,GAAX,WAAW,CAAY;QACvB,qBAAgB,GAAhB,gBAAgB,CAA0C;QAC1D,mBAAc,GAAd,cAAc,CAAY;QAElC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAW;YACzD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;YACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAQ,CAAC,CAAC;KAClC;;;;;;IA1BD,IAAI,iBAAiB;QACnB,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;YACjC,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC;SAC/C;KACF;;;;;;IA6BD,KAAK,CAAC,MAAY;QAChB,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACvB;YACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;KACF;IAEO,QAAQ,CAAC,MAAY;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACtB;QACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;;;;;;IAOD,OAAO,CAAC,MAAY;QAClB,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACvB;iBAAM;gBACL,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC3B,OAAO,CAAC,IAAI,CACV,CAAC,MAAM;wBACL,IAAI,MAAM,KAAK,KAAK,EAAE;4BACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;yBACvB;qBACF,EACD,SAAQ,CACT,CAAC;iBACH;qBAAM,IAAI,OAAO,KAAK,KAAK,EAAE;oBAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;iBACvB;aACF;SACF;KACF;IAEO,oBAAoB;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC;QAClE,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC;YACtE,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;YAC1D,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YAChD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;SACpC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;;;AC7GI,MAAM,KAAK,GAAG,OAAO,CAAC;AAE7B,IAAY,GAaX;AAbD,WAAY,GAAG;IACb,2BAAO,CAAA;IACP,gCAAU,CAAA;IACV,kCAAW,CAAA;IACX,gCAAU,CAAA;IACV,kCAAW,CAAA;IACX,sCAAa,CAAA;IACb,4BAAQ,CAAA;IACR,8BAAS,CAAA;IACT,wCAAc,CAAA;IACd,oCAAY,CAAA;IACZ,0CAAe,CAAA;IACf,wCAAc,CAAA;AAChB,CAAC,EAbW,GAAG,KAAH,GAAG,QAad;AAEM,MAAM,SAAS,GAAG,CAAC,KAAU,KAClC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;MAE3B,UAAU;IACrB,YACS,KAAY,EACZ,OAAiB,EACjB,YAAgC;QAFhC,UAAK,GAAL,KAAK,CAAO;QACZ,YAAO,GAAP,OAAO,CAAU;QACjB,iBAAY,GAAZ,YAAY,CAAoB;KACrC;CACL;AAED,MAAM,2BAA2B,GAAG;IAClC,SAAS;IACT,wBAAwB;IACxB,4CAA4C;IAC5C,wBAAwB;IACxB,0BAA0B;IAC1B,mBAAmB;IACnB,iCAAiC;CAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;AAGO,MAAM,4BAA4B,GAAG,CAC1C,OAAoB;IAEpB,MAAM,IAAI,GAAkB,KAAK,CAAC,IAAI,CACpC,OAAO,CAAC,gBAAgB,CACtB,2BAA2B,CACD,CAC7B,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF;;;;;;;;;;;AAWO,MAAM,SAAS,GAAG,CACvB,OAAoB,EACpB,cAA+B,EAC/B,cAAc,GAAG,KAAK;;IAGtB,MAAM,mBAAmB,GAAG,SAAS,CAAa,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CACxE,SAAS,CAAC,cAAc,CAAC,EACzB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CACrB,CAAC;;IAGF,SAAS,CAAgB,OAAO,EAAE,SAAS,CAAC;SACzC,IAAI,CACH,SAAS,CAAC,cAAc,CAAC;;IAEzB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC;;IAElC,cAAc,CAAC,mBAAmB,CAAC,CACpC;SACA,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC;QACpC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAE5D,IACE,CAAC,cAAc,KAAK,KAAK,IAAI,cAAc,KAAK,OAAO;YACvD,QAAQ,CAAC,QAAQ,EACjB;YACA,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,QAAQ,CAAC,cAAc,EAAE,CAAC;SAC3B;QAED,IAAI,cAAc,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACjD,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,QAAQ,CAAC,cAAc,EAAE,CAAC;SAC3B;KACF,CAAC,CAAC;;IAGL,IAAI,cAAc,EAAE;QAClB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;aACxB,IAAI,CACH,SAAS,CAAC,cAAc,CAAC,EACzB,cAAc,CAAC,mBAAmB,CAAC,EACnC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAgB,CAAC,CACpC;aACA,SAAS,CAAC,CAAC,kBAAkB,KAAK,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC;KAClE;AACH,CAAC;;AClHD,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC3B,+EAAa,CAAA;IACb,2DAAG,CAAA;AACP,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB;;MC0BlB,uBAAuB;IAsClC,YAC4B,SAAc,EAChC,MAA+B;QADb,cAAS,GAAT,SAAS,CAAK;QAChC,WAAM,GAAN,MAAM,CAAyB;QAjChC,aAAQ,GAAqB,KAAK,CAAC;QACnC,aAAQ,GAAG,IAAI,CAAC;QAGf,iBAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAKlB,SAAI,GAAG,QAAQ,CAAC;QACjB,aAAQ,GAAG,IAAI,CAAC;QACT,cAAS,GAAG,IAAI,CAAC;KAuB7C;IA5BJ,IAA0B,KAAK;QAC7B,OAAO,SAAS,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;KAC1C;IAID,IAAyC,kBAAkB;QACzD,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IACD,IAA0C,mBAAmB;QAC3D,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IACyC,aAAa,CACrD,GAAgB;QAEhB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,GAAG,EAAE;YAC/D,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;SACjD;KACF;IACsC,MAAM,CAAC,KAAK;QACjD,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;YAC5C,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;SACvC;KACF;IAOD,OAAO,CAAC,MAAM;QACZ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAChC;IAED,QAAQ;QACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;KAClD;IAED,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YAC/D,MAAM,cAAc,GAAG,4BAA4B,CACjD,IAAI,CAAC,MAAM,CAAC,aAAa,CAC1B,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YACnE,cAAc,CAAC,KAAK,EAAE,CAAC;SACxB;KACF;IAED,WAAW;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QAEtC,IAAI,cAAc,CAAC;QACnB,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YACnE,cAAc,GAAG,WAAW,CAAC;SAC9B;aAAM;YACL,cAAc,GAAG,IAAI,CAAC;SACvB;QACD,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;;;YAlFF,SAAS,SAAC;gBACT,QAAQ,EAAE,kBAAkB;gBAC5B,QAAQ,EAAE;;;;GAIT;aACF;;;4CAwCI,MAAM,SAAC,QAAQ;YA7DlB,UAAU;;;8BA2BT,KAAK;6BACL,KAAK;uBACL,KAAK;uBACL,KAAK;0BACL,KAAK;2BAEL,MAAM;oBAEN,WAAW,SAAC,OAAO;mBAGnB,WAAW,SAAC,WAAW;uBACvB,WAAW,SAAC,UAAU;wBACtB,WAAW,SAAC,iBAAiB;iCAC7B,WAAW,SAAC,sBAAsB;kCAGlC,WAAW,SAAC,uBAAuB;4BAGnC,YAAY,SAAC,OAAO,EAAE,CAAC,eAAe,CAAC;qBAOvC,YAAY,SAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;;MCpD1B,yBAAyB;IAJtC;QAOwB,UAAK,GAAG,0BAA0B,CAAC;QACnC,UAAK,GAAG,eAAe,CAAC;KAC/C;;;YATA,SAAS,SAAC;gBACT,QAAQ,EAAE,oBAAoB;gBAC9B,QAAQ,EAAE,EAAE;aACb;;;4BAEE,KAAK;oBAEL,WAAW,SAAC,OAAO;oBACnB,WAAW,SAAC,OAAO;;;MCET,cAAc;IAD3B;QAEE,aAAQ,GAAG,IAAI,CAAC;KACjB;;;;YAHA,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCSrB,UAAU;IAgBrB,YACU,eAA+B,EACb,SAAc,EAChC,SAAmB,EACnB,gBAAkC,EAClC,WAA2B;QAJ3B,oBAAe,GAAf,eAAe,CAAgB;QACb,cAAS,GAAT,SAAS,CAAK;QAChC,cAAS,GAAT,SAAS,CAAU;QACnB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,gBAAW,GAAX,WAAW,CAAgB;QApB7B,gCAA2B,GAAG,IAAI,OAAO,EAAE,CAAC;QAC5C,eAAU,GAAe,EAAE,CAAC;QAC5B,iBAAY,GAA4C,EAAE,CAAC;QAC3D,sBAAiB,GAAyB,IAAI,GAAG,EAAE,CAAC;QACpD,wBAAmB,GAAG,CAAC,eAAe,CAAC,CAAC;QACxC,sBAAiB,GAAG;YAC1B,gBAAgB;YAChB,UAAU;YACV,UAAU;YACV,UAAU;YACV,YAAY;YACZ,MAAM;YACN,aAAa;SACd,CAAC;QASA,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC;YACzC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;gBAC5B,MAAM,gBAAgB,GACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAClD,SAAS,CACP,gBAAgB,CAAC,QAAQ,CAAC,aAAa,EACvC,IAAI,CAAC,2BAA2B,CACjC,CAAC;gBACF,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC9D;SACF,CAAC,CAAC;KACJ;IAED,IAAI,CACF,SAAmC,EACnC,OAAY,EACZ,OAAwB;QAExB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClE,MAAM,eAAe,GAAG;YACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC3B,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBACxD,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1B;SACF,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACvE,MAAM,eAAe,GACnB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;QACxE,MAAM,aAAa,GACjB,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAa,IAAI,QAAQ,CACrC,aAAa,EACb,UAAU,EACV,eAAe,CAChB,CAAC;QACF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACxC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;QACvD,WAAW,CAAC,KAAK,GAAG,CAAC,MAAW;YAC9B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACxB,CAAC;QACF,WAAW,CAAC,OAAO,GAAG,CAAC,MAAW;YAChC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC1B,CAAC;QAEF,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;SACtD;QACD,IAAI,eAAe,IAAI,eAAe,CAAC,QAAQ,EAAE;YAC/C,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/D,eAAe,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SACnD;QACD,aAAa,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;QAEhD,OAAO,QAAQ,CAAC;KACjB;IAEO,mBAAmB,CACzB,cAAuC,EACvC,MAAuB;QAEvB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAkB;YAChD,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE;gBACjC,cAAc,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;aACjD;SACF,CAAC,CAAC;KACJ;IAEO,uBAAuB,CAC7B,iBAA4C,EAC5C,MAAuB;QAEvB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,UAAkB;YAClD,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE;gBACjC,iBAAiB,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;aACpD;SACF,CAAC,CAAC;KACJ;IAEO,iBAAiB;QACvB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO;YAC5C,IAAI,KAAK,EAAE;gBACT,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;aAC5C;iBAAM;gBACL,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;aACxC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;KAChC;IAEO,aAAa,CACnB,SAAmC,EACnC,OAAY,EACZ,WAAwB;QAExB,IAAI,OAAO,YAAY,WAAW,EAAE;YAClC,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;SACzD;KACF;IAEO,qBAAqB,CAC3B,OAAyB,EACzB,WAAwB;QAExB,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,WAAW;;YAEtB,KAAK,CAAC,MAAM;gBACV,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aAC3B;;YAED,OAAO,CAAC,MAAM;gBACZ,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aAC7B;SACF,CAAC;QACF,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,IAAI,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;KACrD;IAEO,eAAe,CACrB,SAAmC,EACnC,WAAgB;QAEhB,MAAM,eAAe,GAAG,SAAS,CAAC,uBAAuB,CACvD,yBAAyB,CAC1B,CAAC;QACF,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1D,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAChE,OAAO,eAAe,CAAC;KACxB;IAEO,sBAAsB,CAC5B,SAAmC,EACnC,WAAgB,EAChB,UAAe;QAEf,MAAM,aAAa,GAAG,SAAS,CAAC,uBAAuB,CACrD,uBAAuB,CACxB,CAAC;QACF,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CACxC,IAAI,CAAC,SAAS,EACd,UAAU,CAAC,KAAK,CACjB,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxD,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC9D,OAAO,aAAa,CAAC;KACtB;IAEO,iBAAiB,CAAC,QAAkB;QAC1C,MAAM,kBAAkB,GAAG;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAClC;SACF,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;KAC9D;IAEO,mBAAmB,CACzB,UAAiD;QAEjD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC;QAExC,UAAU,CAAC,SAAS,CAAC;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC;aACzC;SACF,CAAC,CAAC;KACJ;IAEO,cAAc,CAAC,OAAgB;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;QACrC,IAAI,MAAM,IAAI,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YAC7C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO;gBAC1C,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;oBACxD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CACxB,OAAO,EACP,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CACpC,CAAC;oBACF,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;iBAC7C;aACF,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;SAC7B;KACF;;;;YA3NF,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;YAjBhC,cAAc;4CAoCX,MAAM,SAAC,QAAQ;YA/BlB,QAAQ;YACR,gBAAgB;YASQ,cAAc;;;ACRxC;;;MAIa,YAAY;IACvB,YACU,UAAsB,EACtB,SAAmC;QADnC,eAAU,GAAV,UAAU,CAAY;QACtB,cAAS,GAAT,SAAS,CAA0B;KACzC;;;;IAKJ,IAAI,CAAC,OAAyB,EAAE,UAA2B,EAAE;QAC3D,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KAC/D;;;;YAZF,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;YAPzB,UAAU;YAHjB,wBAAwB;;;MCmBb,kBAAkB;IAQ7B,YAAoB,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;QAP5B,qBAAgB,GAAG,GAAG,CAAC;QACvB,cAAS,GAAG,EAAE,CAAC;QACf,2BAAsB,GAAG,IAAI,GAAG,EAA0B,CAAC;QAC3D,mBAAc,GAAa,EAAE,CAAC;QAKpC,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,EAAU,CAAC;QAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc;aAC/B,YAAY,EAAE;aACd,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAEhC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAC9B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAEnC,SAAS,CAAC,CAAC,YAAY;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;aACjB;;;YAGD,MAAM,GAAG,GACP,oEAAoE;gBACpE,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG;gBACd,cAAc,EAAE,kBAAkB;aACnC,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAElC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACzC,GAAG,CAAC,CAAC,QAAQ;gBACX,MAAM,aAAa,GAAG,QAAqC,CAAC;gBAC5D,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;aACrD,CAAC,CACH,CAAC;SACH,CAAC,CACH,CAAC;KACH;IAED,iBAAiB,CAAC,KAAa;QAC7B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAED,SAAS,CACP,QAA4B,EAC5B,IAAgB;QAEhB,MAAM,aAAa,GAAG,QAAQ,CAAC,sBAAsB;aAClD,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;aAC9B,MAAM,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9D,OAAO,EAAE,CACP,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY;YAC7B,MAAM,GAAG,GAAa;gBACpB,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC;aAClD,CAAC;YACF,OAAO;gBACL,GAAG;gBACH,KAAK,EAAE,YAAY,CAAC,YAAY;aACjC,CAAC;SACH,CAAC,CACH,CAAC;KACH;IAED,OAAO,CACL,QAA4B,EAC5B,MAAc;QAEd,OAAO,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,CAC5C,GAAG,CAAC,CAAC,aAAa,KAChB,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY;YAC7B,MAAM,GAAG,GAAa;gBACpB,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC;aAClD,CAAC;YACF,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC;YACxC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;SACvB,CAAC,CACH,CACF,CAAC;KACH;;IAGO,YAAY,CAAC,KAAa;QAChC,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC1C,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC/C;QACD,OAAO,SAAS,CAAC;KAClB;IACO,UAAU,CAAC,KAAa,EAAE,IAAoB;QACpD,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE;YAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;KACb;IACO,eAAe,CAAC,KAAa;QACnC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KACtC;IACO,cAAc;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM;cAC7B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;cACnD,IAAI,CAAC;KACV;;;;YAlHF,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;YApBzB,UAAU;;AA0InB,MAAM,YAAY,GAAG,CACnB,YAA0B,EAC1B,IAAgB;IAEhB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI;QAChB,IACE,YAAY,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACxC,YAAY,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EACxC;YACA,KAAK,GAAG,IAAI,CAAC;SACd;KACF,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAoB;IACpC,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACnB,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE;YAC1B,OAAO,KAAK,CAAC;SACd;QACD,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;KACb,CAAC,CAAC;AACL,CAAC,CAAC;;;MCrHW,oBAAoB;IA+H/B,YACU,YAA0B,EAC3B,eAAmC;QADlC,iBAAY,GAAZ,YAAY,CAAc;QAC3B,oBAAe,GAAf,eAAe,CAAoB;QA3H5C,YAAO,GAAG,KAAK,CAAC;QAChB,UAAK,GAAG,KAAK,CAAC;QACd,eAAU,GAA4B,IAAI,CAAC;QAMpC,kBAAa,GAAY,IAAI,CAAC;QAC9B,mBAAc,GAAY,IAAI,CAAC;QAEtC,kBAAa,GAAG,aAAa,CAAC;QAEvB,eAAU,GAAG;YAClB,EAAE,EAAE;gBACF,QAAQ,EAAE,iBAAiB;gBAC3B,WAAW,EAAE,mCAAmC;gBAChD,WAAW,EAAE,mCAAmC;gBAChD,YAAY,EAAE,qCAAqC;gBACnD,YAAY,EAAE,qCAAqC;aACpD;YACD,EAAE,EAAE;gBACF,QAAQ,EAAE,0BAA0B;gBACpC,WAAW,EAAE,oCAAoC;gBACjD,WAAW,EAAE,oCAAoC;gBACjD,YAAY,EAAE,sCAAsC;gBACpD,YAAY,EAAE,sCAAsC;aACrD;SACF,CAAC;QAEK,mBAAc,GAAG;YACtB,EAAE,EAAE;gBACF,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,GAAG;gBACT,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,GAAG;aACb;YACD,EAAE,EAAE;gBACF,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,GAAG;gBACT,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,GAAG;aACb;SACF,CAAC;QAmBO,SAAI,GAAG,gBAAgB,EAAE,CAAC;QACnB,iBAAY,GAAG,KAAK,CAAC;QAGrB,aAAQ,GAAmB,IAAI,CAAC;QA+CtC,gBAAW,GAAG,IAAI,YAAY,EAAY,CAAC;QAC3C,aAAQ,GAAG,IAAI,YAAY,EAAiB,CAAC;QAEvD,aAAQ,GAAG,CAAC,KAAU,QAAa,CAAC;QACpC,cAAS,GAAG,SAAc,CAAC;KAKvB;IAhEJ,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;KAC9B;IAQD,IACI,QAAQ,CAAC,CAAmB;QAC9B,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACpB;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IACI,QAAQ,CAAC,CAAU;QACrB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACpB;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IACI,KAAK,CAAC,CAAW;QACnB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO;SACR;QACD,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/C,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC9C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACjD;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAC/B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC9C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,eAAe,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;;IAcD,UAAU,CAAC,KAAU;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACjD;IAED,gBAAgB,CAAC,QAAa;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IAED,iBAAiB,CAAC,SAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;KACF;IAED,gBAAgB,CAAC,QAAiB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;;IAGO,oBAAoB,CAAC,QAAgB;QAC3C,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,GAAG,QAAQ,CAAC;KAC9C;IACO,qBAAqB,CAAC,SAAiB;QAC7C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC;KAChD;;IAGD,yBAAyB,MAAW;IAEpC,QAAQ,CAAC,OAAwB;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,MAAM,GAA4B,IAAI,CAAC;QAE3C,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE;YAC5D,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;SACxD;QACD,IACE,IAAI,CAAC,WAAW,KAAK,SAAS;YAC9B,IAAI,CAAC,WAAW,KAAK,IAAI;YACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,EACrC;YACA,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,WAAW,GAAG;gBACnB,KAAK;gBACL,GAAG,EAAE,IAAI,CAAC,WAAW;gBACrB,MAAM,EAAE,sCAAsC,IAAI,CAAC,WAAW,GAAG;aAClE,CAAC;SACH;QACD,IACE,IAAI,CAAC,WAAW,KAAK,SAAS;YAC9B,IAAI,CAAC,WAAW,KAAK,IAAI;YACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,EACrC;YACA,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,WAAW,GAAG;gBACnB,KAAK;gBACL,GAAG,EAAE,IAAI,CAAC,WAAW;gBACrB,MAAM,EAAE,sCAAsC,IAAI,CAAC,WAAW,GAAG;aAClE,CAAC;SACH;QACD,IACE,IAAI,CAAC,YAAY,KAAK,SAAS;YAC/B,IAAI,CAAC,YAAY,KAAK,IAAI;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EACvC;YACA,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,YAAY,GAAG;gBACpB,KAAK;gBACL,GAAG,EAAE,IAAI,CAAC,YAAY;gBACtB,MAAM,EAAE,sCAAsC,IAAI,CAAC,YAAY,GAAG;aACnE,CAAC;SACH;QACD,IACE,IAAI,CAAC,YAAY,KAAK,SAAS;YAC/B,IAAI,CAAC,YAAY,KAAK,IAAI;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EACvC;YACA,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,YAAY,GAAG;gBACpB,KAAK;gBACL,GAAG,EAAE,IAAI,CAAC,YAAY;gBACtB,MAAM,EAAE,sCAAsC,IAAI,CAAC,YAAY,GAAG;aACnE,CAAC;SACH;QACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,OAAO,MAAM,CAAC;KACf;;IAGD,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;cACvB,IAAI,CAAC,OAAO;cACZ,eAAe,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAED,cAAc,CAAC,WAA0B;QACvC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClC,OAAO;SACR;QACD,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;SAChD,CAAC;KACH;IACD,eAAe,CAAC,YAA2B;QACzC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClC,OAAO;SACR;QACD,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC;SAChD,CAAC;KACH;IACD,0BAA0B,CAAC,uBAAiC;QAC1D,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClC,OAAO;SACR;QACD,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,uBAAuB;SACrC,CAAC;KACH;IAED,wCAAwC,CACtC,uBAAiC;QAEjC,MAAM,WAAW,GAAG,iBAAiB,CACnC,uBAAuB,CAAC,CAAC,CAAC,EAC1B,IAAI,CAAC,IAAI,CACV,CAAC;QACF,MAAM,YAAY,GAAG,iBAAiB,CACpC,uBAAuB,CAAC,CAAC,CAAC,EAC1B,IAAI,CAAC,IAAI,CACV,CAAC;QACF,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClC,OAAO;SACR;QACD,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;SACzC,CAAC;KACH;IAED,eAAe,CAAC,WAAmB;QACjC,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE;YAC9B,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC;SACnC;KACF;IACD,gBAAgB,CAAC,YAAoB;QACnC,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE;YAC/B,IAAI,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC;SACrC;KACF;IACD,UAAU,CAAC,KAAoB;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;YAC1B,OAAO,UAAU,CAAC;SACnB;QACD,OAAO,EAAE,CAAC;KACX;IAED,YAAY,CAAC,KAAuB;QAClC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvC,CAAC,MAAM;YACL,IAAI,MAAM,KAAK,QAAQ,EAAE;gBACvB,IAAI,CAAC,wCAAwC,CAAC,MAAM,CAAC,CAAC;aACvD;SACF,EACD,CAAC,CAAC,QAAO,CACV,CAAC;KACH;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,GAAG,kBAAkB,CAAC;KAC7E;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC;KACb;IAED,SAAS,CACP,QAA8B,EAC9B,IAAgB;QAEhB,OAAO,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;KAC3E;IAED,OAAO,CACL,QAA8B,EAC9B,MAAc;QAEd,OAAO,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;KAC3E;IAED,WAAW;QACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC;KAC/C;;AAzVM,8BAAS,GAAG,CAAC,CAAC;;YAlBtB,SAAS,SAAC;gBACT,QAAQ,EAAE,iBAAiB;gBAC3B,2nKAA2C;gBAE3C,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;qBACpD;oBACD;wBACE,OAAO,EAAE,aAAa;wBACtB,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;qBACpD;iBACF;;aACF;;;YArBQ,YAAY;YAGZ,kBAAkB;;;uBAsBxB,SAAS,SAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;wBACtC,SAAS,SAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;0BAiDvC,KAAK;0BAEL,KAAK;2BAEL,KAAK;2BAEL,KAAK;mBAEL,KAAK;mBAEL,KAAK;mBAOL,KAAK;2BACL,KAAK;sBACL,KAAK;wBACL,KAAK,SAAC,YAAY;uBAClB,KAAK;uBAEL,KAAK;uBASL,KAAK;oBAQL,KAAK;0BA4BL,MAAM;uBACN,MAAM;;;ACxKT,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,8BAAiB,CAAA;IACjB,0BAAa,CAAA;IACb,4BAAe,CAAA;AACjB,CAAC,EALW,SAAS,KAAT,SAAS;;ACGrB;;;MAQa,gBAAgB;IAIzB,iBAAkB;;;YATrB,SAAS,SAAC;gBACP,QAAQ,EAAE;;KAET;aACJ;;;;sBAGI,KAAK;;;MCXG,iBAAiB;IAC1B,YAAmB,OAAiB,EAAS,YAAgC;QAA1D,YAAO,GAAP,OAAO,CAAU;QAAS,iBAAY,GAAZ,YAAY,CAAoB;KAAI;;;MCcxE,cAAc;IACzB,YACU,SAAmB,EACnB,IAA8B,EAC9B,eAA+B;QAF/B,cAAS,GAAT,SAAS,CAAU;QACnB,SAAI,GAAJ,IAAI,CAA0B;QAC9B,oBAAe,GAAf,eAAe,CAAgB;KACrC;IAEJ,qBAAqB,CACnB,OAAY,EACZ,MAAkB,EAClB,SAAyB;QAEzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,iBAAiB,EAAE;YACrB,IAAI,OAAO,GAAI,iBAAiB,CAAC,OAAgC;iBAC9D,SAAS,CAAC,CAAC,CAAC,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,iBAAiB,CAAC,YAAY,EAAE;gBAClC,iBAAiB,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;aAClE;YACD,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC5C,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YACvD,OAAO,iBAAiB,CAAC;SAC1B;QACD,OAAO,IAAI,CAAC;KACb;IAED,uBAAuB,CAAC,iBAAoC;QAC1D,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,iBAAiB,CAAC,YAAY,EAAE;YAClC,iBAAiB,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;SAC1C;KACF;IAEO,oBAAoB,CAAC,OAAY;QACvC,IAAI,CAAC,OAAO,EAAE;;SAEb;aAAM,IAAI,OAAO,YAAY,WAAW,EAAE;YACzC,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;SAC5C;aAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YACtC,OAAO,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;SACzE;aAAM;YACL,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;SAC1C;KACF;IAEO,qBAAqB,CAAC,OAAyB;QACrD,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;KACvC;IAEO,mBAAmB,CACzB,SAAc,EACd,OAA2B;QAE3B,MAAM,YAAY,GAAsB,IAAI,CAAC,IAAI;aAC9C,uBAAuB,CAAC,SAAS,CAAC;aAClC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1B,IAAI,OAAO,EAAE;YACX,YAAY,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;SACzC;QACD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvD,OAAO,IAAI,iBAAiB,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;KACnE;IAEO,QAAQ,CACd,OAAoB,EACpB,SAAyB;QAEzB,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC;QACxC,MAAM,cAAc,GAAG,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;QACrE,SAAS;YACP,SAAS,KAAK,SAAS;kBAClB,SAAS,CAAC,iBAAiB,EAAqB;kBACjD,KAAK,CAAC;QACZ,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;QACzD,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC;KAChB;IAEO,+BAA+B,CAAC,OAAoB;QAC1D,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CACxD,CAAC,SAAS,KAAK,SAAS,KAAK,aAAa,CAC3C,CAAC;QACF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO,OAAO,CAAC;SAChB;aAAM,IAAI,OAAO,CAAC,aAAa,EAAE,EAAE;YAClC,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CACvD,CAAC,KAAK,KACJ,IAAI,CAAC,+BAA+B,CAAC,KAAoB,CAAC,KAAK,IAAI,CACtE,CAAC;YACF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9B,OAAO,IAAI,CAAC,+BAA+B,CACzC,aAAa,CAAC,CAAC,CAAgB,CAChC,CAAC;aACH;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;SACF;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;IAEO,WAAW,CACjB,OAAoB,EACpB,MAAkB,EAClB,SAAyB;QAEzB,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACnD,MAAM,SAAS,GACb,MAAM,CAAC,WAAW;YAClB,QAAQ,CAAC,eAAe,CAAC,SAAS;YAClC,QAAQ,CAAC,IAAI,CAAC,SAAS;YACvB,CAAC,CAAC;QACJ,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,QAAQ,SAAS;YACf,KAAK,SAAS,CAAC,MAAM;gBACnB,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;gBAC9B,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;gBAC7D,MAAM;YACR,KAAK,SAAS,CAAC,IAAI;gBACjB,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC7D,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC;gBAChD,MAAM;YACR,KAAK,SAAS,CAAC,KAAK;gBAClB,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC7D,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;gBAC9B,MAAM;YACR,KAAK,SAAS,CAAC,GAAG,CAAC;YACnB;gBACE,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;gBAC/C,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;gBAC7D,MAAM;SACT;QACD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,IAAI,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC;QACjC,OAAO,OAAO,CAAC;KAChB;;;YAnJF,UAAU;;;YAdT,QAAQ;YAER,wBAAwB;YACxB,cAAc;;;ACChB;;;MAMa,mBAAmB;IAY9B,YACU,MAAkB,EAClB,cAA8B;QAD9B,WAAM,GAAN,MAAM,CAAY;QAClB,mBAAc,GAAd,cAAc,CAAgB;KACpC;IAEwB,YAAY;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SACxE;KACF;IAE2B,YAAY;QACtC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACxB;KACF;IAEsB,OAAO;QAC5B,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACxB;KACF;IAED,IAAI,CACF,SAAc,EACd,MAAkB,EAClB,SAAyB;QAEzB,OAAO,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAC9C,SAAS,EACT,MAAM,EACN,SAAS,CACV,CAAC;KACH;IAED,MAAM,CAAC,UAA6B;QAClC,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;KACzD;;;YAtDF,SAAS,SAAC;gBACT,QAAQ,EAAE,cAAc;aACzB;;;YAXwC,UAAU;YAE1C,cAAc;;;yBAYpB,KAAK;sBAGL,KAAK;wBAGL,KAAK;2BASL,YAAY,SAAC,YAAY;2BAMzB,YAAY,SAAC,YAAY;sBAOzB,YAAY,SAAC,OAAO;;;MCvBV,sBAAsB;IAKjC,YAAoB,KAAa,EAAU,YAA4B;QAAnD,UAAK,GAAL,KAAK,CAAQ;QAAU,iBAAY,GAAZ,YAAY,CAAgB;QAH/D,SAAI,GAAmB,EAAE,CAAC;QAC3B,cAAS,GAAG,iCAAiC,CAAC;KAEsB;IAE3E,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,IAAI,CACZ,IAAI,CAAC,KAAK,CAAC,MAAM;aACd,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC,CAAC;aACvD,SAAS,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAClE,CAAC,CACL,CAAC;KACH;IAED,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;KAChB;IAEO,cAAc,CACpB,oBAA4C,EAC5C,MAAe,EACf,SAAiB;QAEjB,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;QACrD,IAAI,GAAG,GAAG,SAAS,IAAI,EAAE,CAAC;QAC1B,GAAG,IAAI,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,WAAW;cACrB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;cACnC,MAAM;kBACN,MAAM;kBACN,EAAE,CAAC;QACP,IAAI,KAAK,IAAI,GAAG,KAAK,GAAG,EAAE;YACxB,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACnC;QACD,IAAI,oBAAoB,CAAC,QAAQ,CAAC,MAAM,EAAE;YACxC,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;SACnE;KACF;IAEO,MAAM,CAAC,oBAA4C;QACzD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChC,OAAO,EAAE,CAAC;SACX;QACD,MAAM,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE;cACL,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;cACtC,oBAAoB,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;KACjD;IAEO,QAAQ,CAAC,oBAA4C;QAC3D,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;QACrD,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QACD,IAAI,oBAAoB,CAAC,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE;YAChE,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC;YACvC,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;aAC5C;iBAAM;gBACL,OAAO,IAAI,CAAC,KAAK,CAAC;aACnB;SACF;QACD,OAAO,oBAAoB,CAAC,MAAM,CAAC,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC;KAC3D;;;YA1EF,SAAS,SAAC;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,0VAA0C;;aAE3C;;;YAhBC,MAAM;YAEN,cAAc;;;ACDhB,IAAI,qBAAqB,GAAG,KAAK,CAAC;MAGrB,sBAAsB;IACjC,IAAI;QACF,IAAK,MAAc,CAAC,EAAE,EAAE;YACtB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,MAAM,cAAc,GAAG,8CAA8C,CAAC;QACtE,MAAM,eAAe,GAAG,6CAA6C,CAAC;QAEtE,IAAI,CAAC,qBAAqB,EAAE;YAC1B,qBAAqB,GAAG,IAAI,CAAC;YAC7B,OAAO,CAAC,eAAe,EAAE,SAAQ,CAAC,CAAC;YACnC,OAAO,IAAI,CACT,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,CAAC;gBAC9B,UAAU,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;aACjD,CAAC,CACH,CAAC;SACH;QACD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;KACjB;;;;YApBF,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAuBlC;AACA,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,QAAoB;IACnD,MAAM,MAAM,GAAQ,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAEhC,IAAI,MAAM,CAAC,UAAU,EAAE;;QAErB,MAAM,CAAC,kBAAkB,GAAG;YAC1B,IAAI,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;gBACtE,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBACjC,QAAQ,EAAE,CAAC;aACZ;SACF,CAAC;KACH;SAAM;;QAEL,MAAM,CAAC,MAAM,GAAG;YACd,QAAQ,EAAE,CAAC;SACZ,CAAC;KACH;IACD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC,CAAC;;AAEF;AACA,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,QAAoB;IAChD,MAAM,IAAI,GAAQ,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACvB,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;IACxB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAC9B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAChB,IAAI,CAAC,MAAM,GAAG;QACZ,QAAQ,EAAE,CAAC;KACZ,CAAC;IACF,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC,CAAC;;;MCzCW,YAAY;IAsHvB,YAAY,QAAgC;QAnHpC,YAAO,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QA8G7D,gBAAW,GAAG,IAAI,YAAY,EAAY,CAAC;QAMnD,QAAQ,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;;YAE1B,IAAI,CAAC,aAAa,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;gBACrC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;oBACvB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;oBAChB,KAAK,EAAE,IAAI;oBACX,GAAG,EAAE,wBAAwB;iBAC9B,CAAC;aACH,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB,CAAC,CAAC;KACJ;IAzHD,IACI,IAAI,CAAC,IAAY;QACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACnC;SACF;KACF;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAGD,IACI,MAAM,CAAC,MAAgB;QACzB,IAAI,MAAM,EAAE;YACV,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;gBACtB,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;iBACvE;aACF;SACF;KACF;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAGD,IACI,QAAQ,CAAC,QAAiB;QAC5B,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAS;;oBAE9B,MAAM,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;oBAEtD,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;iBAC1C,CAAC,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAU;oBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;iBAC9D,CAAC,CAAC;aACJ;SACF;aAAM;YACL,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAS,QAAO,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAU,QAAO,CAAC,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;aAC/C;SACF;QACD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;;;QAG1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;KACjD;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAKD,IACY,iBAAiB,CAAC,iBAA2B;QACvD,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YACvD,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;YAC5C,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;aAChD;SACF;aAAM;YACL,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;YACpC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;SACF;KACF;IACD,IAAY,iBAAiB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;IACD,IACI,WAAW,CAAC,WAAqB;QACnC,IACE,CAAC,WAAW;YACZ,EAAE,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,EAClE;YACA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;SACpC;aAAM;YACL,IAAI,CAAC,iBAAiB,GAAG;gBACvB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC3B,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;aAC5B,CAAC;SACH;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACpC;IACD,IAAI,WAAW;QACb,OAAO;YACL,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,IAAI,CAAC,iBAAiB;SACpC,CAAC;KACH;IAqBD,QAAQ;QACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC;KACzE;IAED,eAAe;QACb,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM;YAC5B,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;SACF,CAAC,CAAC;KACJ;IACO,OAAO;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC;YACrB,MAAM,EAAE,IAAI,CAAC,KAAK;YAClB,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YACrD,MAAM,EAAE;gBACN,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;oBAChB,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE;iBAC5B,CAAC;gBACF,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;oBAClB,MAAM,EAAE,IAAI,CAAC,aAAa;oBAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;iBACzB,CAAC;aACH;YACD,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC;gBAChB,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CACxB,IAAI,CAAC,MAAM,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAC7D;gBACD,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;;YAErD,IAAI,aAAa,IAAI,SAAS,EAAE;gBAC9B,SAAS,CAAC,WAAW,CAAC,kBAAkB,CACtC,CAAC,QAAQ;oBACP,IAAI,CAAC,MAAM,GAAG;wBACZ,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;qBACnE,CAAC;iBACH,EACD,CAAC,KAAK;oBACJ,IAAI,CAAC,MAAM,GAAG;wBACZ,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;qBACpB,CAAC;iBACH,CACF,CAAC;aACH;iBAAM;gBACL,IAAI,CAAC,MAAM,GAAG;oBACZ,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;iBACpB,CAAC;aACH;SACF;aAAM;;;YAGL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SAC3B;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;;YAEjD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;SAChB;aAAM;;;YAGL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SACvB;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;;YAEzD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;SACvB;aAAM;;;YAGL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC/B;QAED,IACE,IAAI,CAAC,iBAAiB,KAAK,SAAS;YACpC,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAC/B;;;YAGA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;SACjD;KACF;IAEO,sBAAsB,CAAC,WAAqB;QAClD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3C,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;gBAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;YACD,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC;gBAC5B,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK;;gBAEzB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CACzD;aACF,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAEtD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,MAAM,eAAe,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;oBAChD,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC3C,KAAK,EAAE,IAAI,CAAC,YAAY;oBACxB,cAAc,EAAE,EAAE;oBAClB,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;gBACH,IAAI,CAAC,kBAAkB,GAAG,eAAe,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;aAC3C;YAED,IAAI,CAAC,OAAO,CAAC,EAAE,CACb,QAAQ,EACR;gBACE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;aACvD,EACD,IAAI,CAAC,OAAO,CACb,CAAC;SACH;KACF;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;SAC1B;QACD,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;SACrC;KACF;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACtD,OAAO,IAAI,CAAC,OAAO,CAAC;SACrB;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE,CAAC;;QAEhE,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;KACjE;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;SACxB;KACF;;AAxRM,sBAAS,GAAG,CAAC,CAAC;;YANtB,SAAS,SAAC;gBACT,QAAQ,EAAE,SAAS;gBACnB,+EAAmC;;aAEpC;;;YAXQ,sBAAsB;;;oBAmB5B,KAAK;mBAGL,KAAK;qBAcL,KAAK;uBAgBL,KAAK;gCAmCL,KAAK;0BAiBL,KAAK;0BAqBL,MAAM;;;MC7HI,mBAAmB;IA8D9B;QA7DA,aAAQ,GAAG;YACT,EAAE,EAAE;gBACF,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;aACb;YACD,EAAE,EAAE;gBACF,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;aACf;SACF,CAAC;QAOK,mBAAc,GAAG,KAAK,CAAC;QACvB,iBAAY,GAAG,KAAK,CAAC;QACrB,aAAQ,GAAG,KAAK,CAAC;QACjB,eAAU,GAAG,CAAC,CAAC;QACf,wBAAmB,GAAG,KAAK,CAAC;QAC5B,4BAAuB,GAAG,KAAK,CAAC;QAEhC,UAAK,GAAa,EAAE,CAAC;QAElB,aAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;QACtC,mBAAc,GAAG,IAAI,YAAY,EAAU,CAAC;QAgCpD,IAAI,CAAC,IAAI,GAAG,gBAAgB,EAAE,CAAC;KAChC;IA3BD,IACI,IAAI,CAAC,CAAS;QAChB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;YACpB,OAAO;SACR;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC1C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;SAChB;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,IACI,cAAc,CAAC,KAAqB;QACtC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IACD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACjC;IAMD,QAAQ;QACN,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,eAAe,CAAC,QAAgB;QAC9B,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACpC;IAED,MAAM,CAAC,CAAS;QACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACvB;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACvB;IAED,MAAM;QACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;KACzC;IACD,MAAM;QACJ,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC1B;IACD,UAAU;QACR,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC1B;IAEO,SAAS;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEnC,IAAI,CAAC,cAAc;YACjB,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ;YACX,IAAI,CAAC,cAAc,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC;gBAC7D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,UAAU;YACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,uBAAuB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KACxD;IAEO,cAAc;QACpB,MAAM,UAAU,GACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1E,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;QACpD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,MAAM,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,WAAW,EAAE;gBAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC1B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;iBACvC;aACF;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,WAAW,EAAE;gBAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,EAAE;oBACnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;iBACpC;aACF;SACF;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC;KACd;IAEO,YAAY;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;KACpB;;;YAlJF,SAAS,SAAC;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,2xDAA0C;;aAE3C;;;;uBA+BE,MAAM;6BACN,MAAM;mBAMN,KAAK;6BAgBL,KAAK;;;MCtBK,mBAAmB;IAwC9B;QAvCQ,YAAO,GAAG,KAAK,CAAC;QAEf,SAAI,GAAG,aAAa,CAAC;QACd,aAAQ,GAAmB,KAAK,CAAC;QACjC,aAAQ,GAAmB,KAAK,CAAC;QACjC,aAAQ,GAAmB,KAAK,CAAC;QAYvC,gBAAW,GAAG,IAAI,YAAY,EAAe,CAAC;QAiB9C,gBAAW,GAAG,IAAI,YAAY,EAAO,CAAC;QAExC,WAAM,GAAQ,SAAS,CAAC;QACxB,WAAM,GAAgB,EAAE,CAAC;;QAKjC,aAAQ,GAAG,CAAC,KAAK,QAAa,CAAC;QAC/B,cAAS,GAAG,SAAc,CAAC;KAJX;IAhChB,IACI,KAAK,CAAC,GAAgB;QACxB,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,KACtC,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,KAAK,CAAC,CACpC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC5B;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAGD,IACI,KAAK,CAAC,CAAM;QACd,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO;SACR;QACD,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,eAAe,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAWD,UAAU,CAAC,KAAU;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IACD,gBAAgB,CAAC,QAAa;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IACD,iBAAiB,CAAC,SAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IACD,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;KACF;IACD,gBAAgB,CAAC,QAAiB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;;;IAID,yBAAyB,MAAW;IAEpC,QAAQ,CAAC,OAAwB;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IACE,IAAI,CAAC,QAAQ;aACZ,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,EACvD;YACA,OAAO,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,CAAC;SAC3D;QACD,OAAO,IAAI,CAAC;KACb;;IAGD,QAAQ,CAAC,KAAiB,EAAE,IAAe;QACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;QACD,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;IACD,mBAAmB,CAAC,IAAe,EAAE,KAAa;QAChD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;SACrC;QACD,OAAO,IAAI,CAAC;KACb;;;YA7GF,SAAS,SAAC;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,4vBAA0C;gBAE1C,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;qBACnD;oBACD;wBACE,OAAO,EAAE,aAAa;wBACtB,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;qBACnD;iBACF;;aACF;;;;mBAIE,KAAK;uBACL,KAAK;uBACL,KAAK;uBACL,KAAK;oBAEL,KAAK;0BAUL,MAAM;oBAEN,KAAK;0BAeL,MAAM;;;AC3DT,IAAI,SAAS,GAAG,CAAC,CAAC;MAmBL,eAAe;IAoB1B;QAnBS,OAAE,GAAG,YAAY,GAAG,SAAS,EAAE,CAAC;QAChC,aAAQ,GAAG,KAAK,CAAC;QACjB,aAAQ,GAAG,KAAK,CAAC;;QAEjB,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAa,EAAE,CAAC;QACpB,gBAAW,GAAG,IAAI,YAAY,EAAY,CAAC;QAC5C,gBAAW,GAAG,SAAS,CAAC;;QAExB,WAAM,GAAG,IAAI,CAAC;;QAEd,iBAAY,GAA6B,CAAC,CAAC,KAAK,IAAI,CAAC;QAE9D,aAAQ,GAAG,EAAE,CAAC;QACd,UAAK,GAAG,IAAI,CAAC;QACb,oBAAe,GAAG,KAAK,CAAC;QAEhB,YAAO,GAAG,KAAK,CAAC;;QAKxB,aAAQ,GAAG,CAAC,KAAK,QAAa,CAAC;QAC/B,cAAS,GAAG,SAAc,CAAC;KAJX;IAKhB,UAAU,CAAC,KAAU;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IACD,gBAAgB,CAAC,QAAa;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IACD,iBAAiB,CAAC,SAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IACD,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;KACF;IACD,gBAAgB,CAAC,QAAiB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;;;IAID,yBAAyB,MAAW;IAEpC,QAAQ,CAAC,OAAwB;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IACE,IAAI,CAAC,QAAQ;aACZ,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,EACvD;YACA,OAAO,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,CAAC;SAC3D;QACD,OAAO,IAAI,CAAC;KACb;;IAGD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;KACjD;IACD,GAAG,CAAC,GAAW;QACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;IACD,MAAM,CAAC,KAAa;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACnC;KACF;IACD,UAAU,CAAC,KAAoB;QAC7B,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE;;YAEhE,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACzB;KACF;IACD,gBAAgB,CAAC,QAAgB;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO;SACR;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,KAAK,GAAG,KAAK;kBACd,UAAU,QAAQ,yCAAyC;kBAC3D,IAAI,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACzB,OAAO;aACR;SACF;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;KACpC;;;YAvHF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,85BAAsC;gBAEtC,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;qBAC/C;oBACD;wBACE,OAAO,EAAE,aAAa;wBACtB,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;qBAC/C;iBACF;;aACF;;;;iBAEE,KAAK;uBACL,KAAK;uBACL,KAAK;uBAEL,KAAK;oBACL,KAAK;0BACL,MAAM;0BACN,KAAK;qBAEL,KAAK;2BAEL,KAAK;;;MC1CK,yBAAyB;IAOpC,YAAoB,EAAc,EAAU,QAAmB;QAA3C,OAAE,GAAF,EAAE,CAAY;QAAU,aAAQ,GAAR,QAAQ,CAAW;QAHvD,kBAAa,GAAG,KAAK,CAAC;QAI5B,MAAM,iBAAiB,GAAI,MAAc,CAAC,uBAAuB,CAAC;QAClE,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;SAC5C;KACF;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,WAAW,EAAE;;YAEpB,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;YACnE,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,KAAK,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,CAAC,CAAC;;YAGrC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC;YACnD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YAG7B,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,MAAY,IAAI,CAAC,eAAe,EAAE,CAAC;YACtD,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,KAAK,KAAW,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SACvE;KACF;IAED,eAAe;QACb,IAAI,IAAI,CAAC,aAAa,EAAE;;YAEtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;YACrD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;SAC1B;aAAM;;YAEL,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;SAC1B;KACF;IACD,YAAY,CAAC,KAAU;QACrB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QACtD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,cAAc,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;KACtD;;;YAxDF,SAAS,SAAC;gBACT,QAAQ,EAAE,uBAAuB;aAClC;;;YAJmB,UAAU;YAAiB,SAAS;;;uBAMrD,KAAK;;AAuDR,MAAM,mBAAmB,GAAG,CAAC,IAAY;IACvC,QAAQ,IAAI,CAAC,WAAW,EAAE;QACxB,KAAK,IAAI,CAAC;QACV,KAAK,OAAO;YACV,OAAO,aAAa,CAAC;QACvB,KAAK,IAAI,CAAC;QACV,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb;YACE,OAAO,cAAc,CAAC;KACzB;AACH,CAAC,CAAC;;;ACnEF;MACa,MAAM,GAAG,IAAI,cAAc,CAAC,aAAa,EAAE;AAExD;MACsB,SAAS;;IAG7B,IAAI,YAAY;QACd,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;KACrC;CAEF;AAED;MACa,gBAAiB,SAAQ,SAAS;IAE7C;QACE,KAAK,EAAE,CAAC;KACT;;IAGD,IAAI,YAAY;QACd,OAAO,MAAM,CAAC;KACf;CAEF;AAED;AACA;MACa,aAAa,GAAG,CAAC,gBAAkC,EAAE,UAAkB;IAClF,IAAI,iBAAiB,CAAC,UAAU,CAAC,EAAE;QACjC,OAAO,gBAAgB,CAAC,YAAY,CAAC;KACtC;IACD,OAAO,IAAI,MAAM,EAAE,CAAC;AACtB,EAAE;AAEF;AACA,MAAM,qBAAqB,GAAkB;IAC3C,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,gBAAgB;CAC3B,CAAC;AAEF;AACA,MAAM,cAAc,GAAoB;IACtC,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,aAAa;IACzB,IAAI,EAAE,CAAE,SAAS,EAAE,WAAW,CAAE;CACjC,CAAC;AAEF;MACa,gBAAgB,GAAG;IAC9B,qBAAqB;IACrB,cAAc;;;MCoBH,SAAS;;;YAlDrB,QAAQ,SAAC;gBACR,YAAY,EAAE;oBACZ,qBAAqB;oBACrB,yBAAyB;oBACzB,eAAe;oBACf,iBAAiB;oBACjB,cAAc;oBACd,oBAAoB;oBACpB,mBAAmB;oBACnB,uBAAuB;oBACvB,yBAAyB;oBACzB,sBAAsB;oBACtB,YAAY;oBACZ,eAAe;oBACf,gBAAgB;oBAChB,mBAAmB;oBACnB,mBAAmB;oBACnB,yBAAyB;iBAC1B;gBACD,eAAe,EAAE;oBACf,uBAAuB;oBACvB,yBAAyB;oBACzB,gBAAgB;iBACjB;gBACD,SAAS,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,gBAAgB,CAAC;gBAC3D,OAAO,EAAE;oBACP,yBAAyB;oBACzB,WAAW;oBACX,gBAAgB;oBAChB,mBAAmB;oBACnB,YAAY;oBACZ,YAAY;iBACb;gBACD,OAAO,EAAE;oBACP,qBAAqB;oBACrB,yBAAyB;oBACzB,eAAe;oBACf,iBAAiB;oBACjB,cAAc;oBACd,oBAAoB;oBACpB,mBAAmB;oBACnB,sBAAsB;oBACtB,sBAAsB;oBACtB,YAAY;oBACZ,eAAe;oBACf,mBAAmB;oBACnB,mBAAmB;oBACnB,yBAAyB;iBAC1B;aACF;;;AC5ED;;;;ACAA;;;;;;"}
|
|
@@ -10,6 +10,7 @@ export declare class AutocompleteComponent implements ControlValueAccessor, Vali
|
|
|
10
10
|
private _dataSource;
|
|
11
11
|
private _placeholder;
|
|
12
12
|
private _value;
|
|
13
|
+
showSpinner: boolean;
|
|
13
14
|
touched: boolean;
|
|
14
15
|
completionList: DecoratedDataSource;
|
|
15
16
|
showCompletion: boolean;
|
|
@@ -22,6 +23,11 @@ export declare class AutocompleteComponent implements ControlValueAccessor, Vali
|
|
|
22
23
|
label: string;
|
|
23
24
|
/** If canAddNewValues, user can type items not present in the data-source. */
|
|
24
25
|
canAddNewValues: boolean;
|
|
26
|
+
/** After cleaning the selection should the completion list remain open or closed:
|
|
27
|
+
* false: (default) close on filters, to clean a filter and select all.
|
|
28
|
+
* true: keep open (when the action most likely is to pick another one).
|
|
29
|
+
*/
|
|
30
|
+
keepOpenAfterDelete: boolean;
|
|
25
31
|
get value(): any;
|
|
26
32
|
set value(v: any);
|
|
27
33
|
get dataSource(): DataSource<any, string>;
|
|
@@ -61,5 +67,7 @@ export declare class AutocompleteComponent implements ControlValueAccessor, Vali
|
|
|
61
67
|
private syncCustomValue;
|
|
62
68
|
private pickSelectionOrFirstMatch;
|
|
63
69
|
private showCompletionList;
|
|
70
|
+
private spinnerVisibility;
|
|
71
|
+
private hasExternalDataSource;
|
|
64
72
|
private computeCompletionList;
|
|
65
73
|
}
|
|
@@ -11,6 +11,8 @@ export declare class InputComponent implements OnInit, ControlValueAccessor, Val
|
|
|
11
11
|
private _value;
|
|
12
12
|
private _type;
|
|
13
13
|
private _placeholder;
|
|
14
|
+
private _pattern?;
|
|
15
|
+
private _regexp?;
|
|
14
16
|
private _currency;
|
|
15
17
|
private _required;
|
|
16
18
|
userErrors: {
|
|
@@ -41,6 +43,8 @@ export declare class InputComponent implements OnInit, ControlValueAccessor, Val
|
|
|
41
43
|
readonly: boolean | null;
|
|
42
44
|
set disabled(v: string | boolean);
|
|
43
45
|
get disabled(): string | boolean;
|
|
46
|
+
set pattern(p: string | undefined);
|
|
47
|
+
get pattern(): string | undefined;
|
|
44
48
|
set currency(v: string);
|
|
45
49
|
get currency(): string;
|
|
46
50
|
set placeholder(v: string);
|
|
@@ -65,6 +69,7 @@ export declare class InputComponent implements OnInit, ControlValueAccessor, Val
|
|
|
65
69
|
registerOnValidatorChange(): void;
|
|
66
70
|
validate(control: AbstractControl): ValidationErrors | null;
|
|
67
71
|
ngOnInit(): void;
|
|
72
|
+
onLostFocus(): void;
|
|
68
73
|
onKeyUp(newValue: string): void;
|
|
69
74
|
onChangeValue(newValue: string): void;
|
|
70
75
|
onKeyPress(event: KeyboardEvent): void;
|