@rlucan/ui 16.2.2 → 17.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/action-button/action-button.component.mjs +99 -99
- package/esm2022/lib/action-icon/action-icon.component.mjs +37 -37
- package/esm2022/lib/autocomplete/autocomplete.component.mjs +391 -391
- package/esm2022/lib/avatar/avatar.component.mjs +34 -34
- package/esm2022/lib/button/button.component.mjs +57 -57
- package/esm2022/lib/checkbox/checkbox.component.mjs +39 -39
- package/esm2022/lib/checkbox-group/checkbox-group.component.mjs +91 -91
- package/esm2022/lib/currency/currency.component.mjs +151 -151
- package/esm2022/lib/date/date.component.mjs +68 -68
- package/esm2022/lib/dialog/dialog.component.mjs +37 -37
- package/esm2022/lib/directives/force-visibility/force-visibility.directive.mjs +104 -104
- package/esm2022/lib/editor/editor.component.mjs +119 -119
- package/esm2022/lib/elements/burger/burger.component.mjs +21 -21
- package/esm2022/lib/elements/expander/expander.component.mjs +28 -28
- package/esm2022/lib/elements/validation-message/validation-message.component.mjs +47 -47
- package/esm2022/lib/file/file.component.mjs +166 -145
- package/esm2022/lib/file-uploader/ui-file-uploader.component.mjs +423 -405
- package/esm2022/lib/input/input.component.mjs +265 -265
- package/esm2022/lib/input-autocomplete/input-autocomplete.component.mjs +277 -277
- package/esm2022/lib/layouts/base/ui-base-layout.component.mjs +22 -22
- package/esm2022/lib/layouts/base/ui-base.component.mjs +74 -74
- package/esm2022/lib/layouts/simple/ui-simple-layout.component.mjs +18 -18
- package/esm2022/lib/layouts/simple/ui-simple.component.mjs +166 -166
- package/esm2022/lib/radio/radio.component.mjs +21 -21
- package/esm2022/lib/radio-group/radio-group.component.mjs +53 -53
- package/esm2022/lib/select/select.component.mjs +126 -126
- package/esm2022/lib/services/message-box.service.mjs +112 -112
- package/esm2022/lib/services/toast.service.mjs +23 -23
- package/esm2022/lib/services/ui-file.service.mjs +72 -71
- package/esm2022/lib/services/ui-translate.service.mjs +32 -32
- package/esm2022/lib/submit-button/submit-button.component.mjs +72 -72
- package/esm2022/lib/table/table.component.mjs +97 -97
- package/esm2022/lib/text-area/text-area.component.mjs +46 -46
- package/esm2022/lib/ui.model.mjs +1 -1
- package/esm2022/lib/ui.module.mjs +269 -269
- package/esm2022/public-api.mjs +34 -34
- package/esm2022/rlucan-ui.mjs +4 -4
- package/fesm2022/rlucan-ui.mjs +3329 -3289
- package/fesm2022/rlucan-ui.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/action-button/action-button.component.d.ts +28 -28
- package/lib/action-icon/action-icon.component.d.ts +15 -15
- package/lib/autocomplete/autocomplete.component.d.ts +57 -57
- package/lib/avatar/avatar.component.d.ts +14 -14
- package/lib/button/button.component.d.ts +18 -18
- package/lib/checkbox/checkbox.component.d.ts +15 -15
- package/lib/checkbox-group/checkbox-group.component.d.ts +18 -18
- package/lib/currency/currency.component.d.ts +31 -31
- package/lib/date/date.component.d.ts +24 -24
- package/lib/dialog/dialog.component.d.ts +13 -13
- package/lib/directives/force-visibility/force-visibility.directive.d.ts +22 -22
- package/lib/editor/editor.component.d.ts +24 -24
- package/lib/elements/burger/burger.component.d.ts +9 -9
- package/lib/elements/expander/expander.component.d.ts +10 -10
- package/lib/elements/validation-message/validation-message.component.d.ts +12 -12
- package/lib/file/file.component.d.ts +36 -35
- package/lib/file-uploader/ui-file-uploader.component.d.ts +106 -102
- package/lib/input/input.component.d.ts +42 -42
- package/lib/input-autocomplete/input-autocomplete.component.d.ts +44 -44
- package/lib/layouts/base/ui-base-layout.component.d.ts +8 -8
- package/lib/layouts/base/ui-base.component.d.ts +23 -23
- package/lib/layouts/simple/ui-simple-layout.component.d.ts +8 -8
- package/lib/layouts/simple/ui-simple.component.d.ts +40 -40
- package/lib/radio/radio.component.d.ts +8 -8
- package/lib/radio-group/radio-group.component.d.ts +18 -18
- package/lib/select/select.component.d.ts +37 -37
- package/lib/services/message-box.service.d.ts +58 -58
- package/lib/services/toast.service.d.ts +13 -13
- package/lib/services/ui-file.service.d.ts +37 -33
- package/lib/services/ui-translate.service.d.ts +11 -11
- package/lib/submit-button/submit-button.component.d.ts +21 -21
- package/lib/table/table.component.d.ts +36 -36
- package/lib/text-area/text-area.component.d.ts +18 -18
- package/lib/ui.model.d.ts +2 -2
- package/lib/ui.module.d.ts +59 -59
- package/package.json +14 -14
- package/public-api.d.ts +29 -29
|
@@ -1,277 +1,277 @@
|
|
|
1
|
-
import { Component, EventEmitter, Host, HostBinding, Input, Optional, Output, SkipSelf, ViewChild } from '@angular/core';
|
|
2
|
-
import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { UiSimpleComponent } from '../layouts/simple/ui-simple.component';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/forms";
|
|
6
|
-
import * as i2 from "@angular/common";
|
|
7
|
-
import * as i3 from "@angular/material/icon";
|
|
8
|
-
import * as i4 from "@angular/material/tooltip";
|
|
9
|
-
import * as i5 from "@angular/material/core";
|
|
10
|
-
import * as i6 from "@angular/material/input";
|
|
11
|
-
import * as i7 from "@angular/material/autocomplete";
|
|
12
|
-
import * as i8 from "../layouts/simple/ui-simple-layout.component";
|
|
13
|
-
import * as i9 from "../action-icon/action-icon.component";
|
|
14
|
-
export class InputAutocompleteComponent extends UiSimpleComponent {
|
|
15
|
-
get textAlignClass() {
|
|
16
|
-
return `text-align-${this.textAlign}`;
|
|
17
|
-
}
|
|
18
|
-
get hasPrefix() {
|
|
19
|
-
return (this.prefixIcon && this.prefixIcon.icon !== '') || this.prefix?.nativeElement?.innerText !== '' || this.forceHasPrefix;
|
|
20
|
-
}
|
|
21
|
-
get hasSuffix() {
|
|
22
|
-
return (this.suffixIcon && this.suffixIcon.icon !== '') || this.suffix?.nativeElement?.innerText !== '' || this.forceHasSuffix;
|
|
23
|
-
}
|
|
24
|
-
// control;
|
|
25
|
-
// onTouched = () => {};
|
|
26
|
-
// onChange = (value) => {};
|
|
27
|
-
// get showInvalid(): boolean {
|
|
28
|
-
// return true;
|
|
29
|
-
// // return this.control.touched && !!this.control.errors;
|
|
30
|
-
// }
|
|
31
|
-
// get validationMessage(): string {
|
|
32
|
-
// // console.log(this.control?.errors);
|
|
33
|
-
// let e: any = {code: 'Neznámá chyba'};
|
|
34
|
-
// const errors = this.control?.errors || {};
|
|
35
|
-
// Object.keys(errors).find(a => {
|
|
36
|
-
// e = {code: a, data: errors[a]};
|
|
37
|
-
// return true;
|
|
38
|
-
// });
|
|
39
|
-
// switch (e.code) {
|
|
40
|
-
// case 'required':
|
|
41
|
-
// return this.translateService.instant('ui.controls.validation.required');
|
|
42
|
-
// case 'email':
|
|
43
|
-
// return this.translateService.instant('ui.controls.validation.email');
|
|
44
|
-
// case 'matDatepickerParse':
|
|
45
|
-
// return this.translateService.instant('ui.controls.validation.matDatepickerParse');
|
|
46
|
-
// case 'maxlength':
|
|
47
|
-
// return this.translateService.instant('ui.controls.validation.maxlength', e.data);
|
|
48
|
-
// case 'minlength':
|
|
49
|
-
// return this.translateService.instant('ui.controls.validation.minlength', e.data);
|
|
50
|
-
// case 'positive':
|
|
51
|
-
// return this.translateService.instant(isNaN(Number(e.data)) ? 'ui.controls.validation.invalidNumber' : 'ui.controls.validation.positive');
|
|
52
|
-
// case 'custom':
|
|
53
|
-
// return this.translateService.instant(e.data);
|
|
54
|
-
// default:
|
|
55
|
-
// return this.translateService.instant(e.code);
|
|
56
|
-
// }
|
|
57
|
-
// }
|
|
58
|
-
get maxLenRequired() {
|
|
59
|
-
return true;
|
|
60
|
-
// return this.control.value && (this.control.value.length > (this.validators?.maxLength || 0));
|
|
61
|
-
}
|
|
62
|
-
constructor(controlContainer) {
|
|
63
|
-
super(null, controlContainer);
|
|
64
|
-
this.controlContainer = controlContainer;
|
|
65
|
-
this.type = 'text';
|
|
66
|
-
this.clearButton = false;
|
|
67
|
-
this.activeIcons = true;
|
|
68
|
-
this.forceHasPrefix = false;
|
|
69
|
-
this.forceHasSuffix = false;
|
|
70
|
-
this.options = [];
|
|
71
|
-
this.textAlign = 'left';
|
|
72
|
-
this.focusChanged = new EventEmitter();
|
|
73
|
-
this.keyPressed = new EventEmitter();
|
|
74
|
-
this.filteredOptions = [];
|
|
75
|
-
// control = new FormControl();
|
|
76
|
-
this.required = false;
|
|
77
|
-
this.hasFocus = false;
|
|
78
|
-
// this.componentFormControl = new FormControl();
|
|
79
|
-
// super();
|
|
80
|
-
// super(undefined, /*ngControl*/ translateService);
|
|
81
|
-
// super(control);
|
|
82
|
-
// console.log(control);
|
|
83
|
-
// if (control) {
|
|
84
|
-
// control.valueAccessor = this;
|
|
85
|
-
// }
|
|
86
|
-
// if (ngControl != null) {
|
|
87
|
-
// // Setting the value accessor directly (instead of using
|
|
88
|
-
// // the providers) to avoid running into a circular import.
|
|
89
|
-
// ngControl.valueAccessor = this;
|
|
90
|
-
// }
|
|
91
|
-
}
|
|
92
|
-
get showClearButton() {
|
|
93
|
-
return this.clearButton && this.componentFormControl?.value !== '';
|
|
94
|
-
}
|
|
95
|
-
ngOnInit() {
|
|
96
|
-
super.ngOnInit();
|
|
97
|
-
this.filteredOptions = this.options;
|
|
98
|
-
this.componentFormControl?.valueChanges.subscribe((v) => {
|
|
99
|
-
const vl = v.toLowerCase();
|
|
100
|
-
this.filteredOptions = this.options.filter(o => vl === '' || o.toLowerCase().includes(vl));
|
|
101
|
-
});
|
|
102
|
-
// console.log('probiha vubec oninit?');
|
|
103
|
-
// if (this.ngControl) {
|
|
104
|
-
// console.log('from ngControl....??');
|
|
105
|
-
// if (this.formControl) {
|
|
106
|
-
// this.componentFormControl = this.formControl;
|
|
107
|
-
// } else {
|
|
108
|
-
// this.componentFormControl = this.ngControl.control as UntypedFormControl;
|
|
109
|
-
// }
|
|
110
|
-
// setTimeout(() => {
|
|
111
|
-
// this.applyValidators();
|
|
112
|
-
// });
|
|
113
|
-
// } else {
|
|
114
|
-
// const control = this.formControlName ?
|
|
115
|
-
// (this.controlContainer as FormGroupDirective).control.get(this.formControlName) : this.formControl;
|
|
116
|
-
// this.componentFormControl.setValidators(control.validator);
|
|
117
|
-
// this.componentFormControl.valueChanges.subscribe(v => console.log('onitin sub', v));
|
|
118
|
-
// control._componentFormControl = this.componentFormControl;
|
|
119
|
-
// if (control._markAsTouched === undefined) {
|
|
120
|
-
// // control._componentFormControl = this.componentFormControl;
|
|
121
|
-
// console.log('overriding markAsTouched for', this.formControlName);
|
|
122
|
-
// control._markAsTouched = control.markAsTouched;
|
|
123
|
-
// control.markAsTouched = ({onlySelf}: { onlySelf?: boolean } = {}): void => {
|
|
124
|
-
// console.log('marking as touched', this.componentFormControl.value, control.value, this.xxx.value, control._componentFormControl.value);
|
|
125
|
-
// control._markAsTouched({onlySelf});
|
|
126
|
-
// setTimeout(() => control._componentFormControl.markAsTouched(), 1000);
|
|
127
|
-
// }
|
|
128
|
-
// }
|
|
129
|
-
// }
|
|
130
|
-
}
|
|
131
|
-
clearValue() {
|
|
132
|
-
this.componentFormControl?.setValue('');
|
|
133
|
-
this.input?.nativeElement.focus();
|
|
134
|
-
}
|
|
135
|
-
focus() {
|
|
136
|
-
this.input?.nativeElement.focus();
|
|
137
|
-
}
|
|
138
|
-
onFocus(focus) {
|
|
139
|
-
setTimeout(() => {
|
|
140
|
-
this.hasFocus = focus;
|
|
141
|
-
this.focusChanged.emit(focus);
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
onKeypressed($event) {
|
|
145
|
-
this.keyPressed.emit($event);
|
|
146
|
-
}
|
|
147
|
-
// registerOnChange(onChange: any): void {
|
|
148
|
-
// this.onChange = onChange;
|
|
149
|
-
// }
|
|
150
|
-
//
|
|
151
|
-
// registerOnTouched(onTouched: any): void {
|
|
152
|
-
// this.onTouched = onTouched;
|
|
153
|
-
// }
|
|
154
|
-
// registerOnValidatorChange(fn: () => void): void {
|
|
155
|
-
// }
|
|
156
|
-
// setDisabledState(isDisabled: boolean): void {
|
|
157
|
-
// // isDisabled ? this.control.disable() : this.control.enable();
|
|
158
|
-
// }
|
|
159
|
-
// validate(control: AbstractControl): ValidationErrors | null {
|
|
160
|
-
// // this.control = control;
|
|
161
|
-
// // console.log(control, control.value, control.errors);
|
|
162
|
-
// if (this.value === 'error') {
|
|
163
|
-
// return { customError: 'muj error'}
|
|
164
|
-
// } else {
|
|
165
|
-
// return null;
|
|
166
|
-
// }
|
|
167
|
-
// // console.log('custom validate');
|
|
168
|
-
// // return null;
|
|
169
|
-
// }
|
|
170
|
-
//
|
|
171
|
-
// writeValue(obj: any): void {
|
|
172
|
-
// console.log('writevalue: ', obj);
|
|
173
|
-
// this.componentFormControl.setValue(obj);
|
|
174
|
-
// // this.value = obj;
|
|
175
|
-
// // this.control.setValue(obj);
|
|
176
|
-
// }
|
|
177
|
-
//
|
|
178
|
-
// registerOnChange(fn: any): void {
|
|
179
|
-
// }
|
|
180
|
-
//
|
|
181
|
-
// registerOnTouched(fn: any): void {
|
|
182
|
-
// }
|
|
183
|
-
//
|
|
184
|
-
// setDisabledState(isDisabled: boolean): void {
|
|
185
|
-
// }
|
|
186
|
-
// modelChange($event: any) {
|
|
187
|
-
// console.log($event);
|
|
188
|
-
// this.onTouched();
|
|
189
|
-
// this.onChange($event)
|
|
190
|
-
// }
|
|
191
|
-
// validate(control: AbstractControl): ValidationErrors | null {
|
|
192
|
-
// console.log(this.label, 'validate');
|
|
193
|
-
// return this.componentFormControl.errors;
|
|
194
|
-
// // return undefined;
|
|
195
|
-
// }
|
|
196
|
-
validate(control) {
|
|
197
|
-
if (this.parentFormControl) {
|
|
198
|
-
return this.parentFormControl._componentFormControl.errors;
|
|
199
|
-
}
|
|
200
|
-
// console.log('validate', this.componentFormControl.errors);
|
|
201
|
-
// // this.componentFormControl.setErrors( { custom: 'xxx' });
|
|
202
|
-
// this.componentFormControl.setErrors( this.componentFormControl.errors);
|
|
203
|
-
// console.log('validate 2', this.componentFormControl.errors);
|
|
204
|
-
// return this.componentFormControl.errors;
|
|
205
|
-
// console.log(this.componentFormControl.errors, control.errors, this.parentFormControl.errors, this);
|
|
206
|
-
// return this.componentFormControl.errors;
|
|
207
|
-
}
|
|
208
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
209
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
210
|
-
{
|
|
211
|
-
provide: NG_VALUE_ACCESSOR,
|
|
212
|
-
multi: true,
|
|
213
|
-
useExisting: InputAutocompleteComponent
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
provide: NG_VALIDATORS,
|
|
217
|
-
multi: true,
|
|
218
|
-
useExisting: InputAutocompleteComponent
|
|
219
|
-
}
|
|
220
|
-
], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "prefix", first: true, predicate: ["prefix"], descendants: true, static: true }, { propertyName: "suffix", first: true, predicate: ["suffix"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<div class=\"control-container\" [ngClass]=\"{'has-suffix': hasSuffix, 'has-prefix': hasPrefix, 'has-clear-icon': showClearButton, 'active-icons': activeIcons, 'has-focus': hasFocus}\">\r\n <input #input matInput [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" [matAutocomplete]=\"auto\"/>\r\n\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">{{option}}</mat-option>\r\n </mat-autocomplete>\r\n <div #prefix><ng-content select=\"[slot=prefix]\"></ng-content></div>\r\n <div #suffix><ng-content select=\"[slot=suffix]\"></ng-content></div>\r\n <mat-icon *ngIf=\"prefixIcon\" class=\"prefix-icon\" [matTooltip]=\"prefixIcon.tooltip\">{{ prefixIcon.icon }}</mat-icon>\r\n <mat-icon *ngIf=\"suffixIcon\" class=\"suffix-icon\" [matTooltip]=\"suffixIcon.tooltip\">{{ suffixIcon.icon }}</mat-icon>\r\n <ui-action-icon [size]=\"'small'\" [color]=\"'warn'\" *ngIf=\"showClearButton\" (click)=\"clearValue()\" [matIcon]=\"'clear'\" class=\"clear-icon\"></ui-action-icon>\r\n</div>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .control-container{width:100%;position:relative}:host .control-container.has-prefix ::ng-deep input,:host .control-container.has-prefix ::ng-deep textarea,:host .control-container.has-prefix ::ng-deep .mat-mdc-select-trigger{padding-left:1.8em}:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep input,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep textarea,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep input,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep textarea,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-suffix.has-clear-icon ::ng-deep input,:host .control-container.has-suffix.has-clear-icon ::ng-deep textarea,:host .control-container.has-suffix.has-clear-icon ::ng-deep .mat-mdc-select-trigger{padding-right:3.6em}:host .control-container.has-suffix.has-clear-icon ::ng-deep .clear-icon{right:1.4em!important}:host ::ng-deep [slot=suffix],:host ::ng-deep .clear-icon,:host ::ng-deep .suffix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=suffix]:not(.disabled),:host ::ng-deep .clear-icon:not(.disabled),:host ::ng-deep .suffix-icon:not(.disabled){cursor:pointer}:host ::ng-deep [slot=prefix],:host ::ng-deep .prefix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]:not(.disabled),:host ::ng-deep .prefix-icon:not(.disabled){cursor:pointer}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep .mat-mdc-select-trigger,:host ::ng-deep .editor-wrapper{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n", ":host.text-align-left ::ng-deep input{text-align:left}:host.text-align-right ::ng-deep input{text-align:right}:host.text-align-center ::ng-deep input{text-align:center}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.UiSimpleLayoutComponent, selector: "ui-simple-layout", inputs: ["ctx"] }, { kind: "component", type: i9.ActionIconComponent, selector: "ui-action-icon", inputs: ["size", "color", "disabled", "busy", "matIcon"] }] }); }
|
|
221
|
-
}
|
|
222
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
223
|
-
type: Component,
|
|
224
|
-
args: [{ selector: 'ui-input-autocomplete', providers: [
|
|
225
|
-
{
|
|
226
|
-
provide: NG_VALUE_ACCESSOR,
|
|
227
|
-
multi: true,
|
|
228
|
-
useExisting: InputAutocompleteComponent
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
provide: NG_VALIDATORS,
|
|
232
|
-
multi: true,
|
|
233
|
-
useExisting: InputAutocompleteComponent
|
|
234
|
-
}
|
|
235
|
-
], template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<div class=\"control-container\" [ngClass]=\"{'has-suffix': hasSuffix, 'has-prefix': hasPrefix, 'has-clear-icon': showClearButton, 'active-icons': activeIcons, 'has-focus': hasFocus}\">\r\n <input #input matInput [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" [matAutocomplete]=\"auto\"/>\r\n\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">{{option}}</mat-option>\r\n </mat-autocomplete>\r\n <div #prefix><ng-content select=\"[slot=prefix]\"></ng-content></div>\r\n <div #suffix><ng-content select=\"[slot=suffix]\"></ng-content></div>\r\n <mat-icon *ngIf=\"prefixIcon\" class=\"prefix-icon\" [matTooltip]=\"prefixIcon.tooltip\">{{ prefixIcon.icon }}</mat-icon>\r\n <mat-icon *ngIf=\"suffixIcon\" class=\"suffix-icon\" [matTooltip]=\"suffixIcon.tooltip\">{{ suffixIcon.icon }}</mat-icon>\r\n <ui-action-icon [size]=\"'small'\" [color]=\"'warn'\" *ngIf=\"showClearButton\" (click)=\"clearValue()\" [matIcon]=\"'clear'\" class=\"clear-icon\"></ui-action-icon>\r\n</div>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .control-container{width:100%;position:relative}:host .control-container.has-prefix ::ng-deep input,:host .control-container.has-prefix ::ng-deep textarea,:host .control-container.has-prefix ::ng-deep .mat-mdc-select-trigger{padding-left:1.8em}:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep input,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep textarea,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep input,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep textarea,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-suffix.has-clear-icon ::ng-deep input,:host .control-container.has-suffix.has-clear-icon ::ng-deep textarea,:host .control-container.has-suffix.has-clear-icon ::ng-deep .mat-mdc-select-trigger{padding-right:3.6em}:host .control-container.has-suffix.has-clear-icon ::ng-deep .clear-icon{right:1.4em!important}:host ::ng-deep [slot=suffix],:host ::ng-deep .clear-icon,:host ::ng-deep .suffix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=suffix]:not(.disabled),:host ::ng-deep .clear-icon:not(.disabled),:host ::ng-deep .suffix-icon:not(.disabled){cursor:pointer}:host ::ng-deep [slot=prefix],:host ::ng-deep .prefix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]:not(.disabled),:host ::ng-deep .prefix-icon:not(.disabled){cursor:pointer}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep .mat-mdc-select-trigger,:host ::ng-deep .editor-wrapper{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n", ":host.text-align-left ::ng-deep input{text-align:left}:host.text-align-right ::ng-deep input{text-align:right}:host.text-align-center ::ng-deep input{text-align:center}\n"] }]
|
|
236
|
-
}], ctorParameters:
|
|
237
|
-
type: Optional
|
|
238
|
-
}, {
|
|
239
|
-
type: Host
|
|
240
|
-
}, {
|
|
241
|
-
type: SkipSelf
|
|
242
|
-
}] }]
|
|
243
|
-
type: Input
|
|
244
|
-
}], suffixIcon: [{
|
|
245
|
-
type: Input
|
|
246
|
-
}], type: [{
|
|
247
|
-
type: Input
|
|
248
|
-
}], clearButton: [{
|
|
249
|
-
type: Input
|
|
250
|
-
}], activeIcons: [{
|
|
251
|
-
type: Input
|
|
252
|
-
}], forceHasPrefix: [{
|
|
253
|
-
type: Input
|
|
254
|
-
}], forceHasSuffix: [{
|
|
255
|
-
type: Input
|
|
256
|
-
}], options: [{
|
|
257
|
-
type: Input
|
|
258
|
-
}], textAlignClass: [{
|
|
259
|
-
type: HostBinding,
|
|
260
|
-
args: ['class']
|
|
261
|
-
}], textAlign: [{
|
|
262
|
-
type: Input
|
|
263
|
-
}], input: [{
|
|
264
|
-
type: ViewChild,
|
|
265
|
-
args: ['input']
|
|
266
|
-
}], prefix: [{
|
|
267
|
-
type: ViewChild,
|
|
268
|
-
args: ['prefix', { static: true }]
|
|
269
|
-
}], suffix: [{
|
|
270
|
-
type: ViewChild,
|
|
271
|
-
args: ['suffix', { static: true }]
|
|
272
|
-
}], focusChanged: [{
|
|
273
|
-
type: Output
|
|
274
|
-
}], keyPressed: [{
|
|
275
|
-
type: Output
|
|
276
|
-
}] } });
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvaW5wdXQtYXV0b2NvbXBsZXRlL2lucHV0LWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lucHV0LWF1dG9jb21wbGV0ZS9pbnB1dC1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osSUFBSSxFQUFFLFdBQVcsRUFDakIsS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFvQjFFLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxpQkFBaUI7SUFtQy9ELElBQ0ksY0FBYztRQUNoQixPQUFPLGNBQWMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFXRCxJQUFJLFNBQVM7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDakksQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FB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QkFDdEIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyw0QkFBNEI7eUJBQ3hDO3FCQUNGOzswQkFpSFksUUFBUTs7MEJBQUksSUFBSTs7MEJBQUksUUFBUTs0Q0FyRmhDLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0YsY0FBYztzQkFEakIsV0FBVzt1QkFBQyxPQUFPO2dCQUtYLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRWMsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNxQixNQUFNO3NCQUE1QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUUzQixZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0LCBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFNraXBTZWxmLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBVaVNpbXBsZUNvbXBvbmVudCB9IGZyb20gJy4uL2xheW91dHMvc2ltcGxlL3VpLXNpbXBsZS5jb21wb25lbnQnO1xyXG5cclxudHlwZSBQcmVmaXhTdWZmaXggPSB7IGljb246IHN0cmluZywgdG9vbHRpcD86IHN0cmluZyB9O1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLWlucHV0LWF1dG9jb21wbGV0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbICcuLi9sYXlvdXRzL3NpbXBsZS91aS1zaW1wbGUtbGF5b3V0LmNvbXBvbmVudC5zY3NzJywgJy4uL2lucHV0L2lucHV0LmNvbXBvbmVudC5zY3NzJyBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBJbnB1dEF1dG9jb21wbGV0ZUNvbXBvbmVudFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBJbnB1dEF1dG9jb21wbGV0ZUNvbXBvbmVudFxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIElucHV0QXV0b2NvbXBsZXRlQ29tcG9uZW50IGV4dGVuZHMgVWlTaW1wbGVDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCB7IC8vIH0sIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHsgLy8gfSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7IC8vIH0sIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAvLyBVaVNpbXBsZUNvbXBvbmVudCA9IElucHV0Q29tcG9uZW50O1xyXG5cclxuICAvLyBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xyXG4gIC8vIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgdXNlSW5wdXRNZXNzYWdlczogJ25ldmVyJyB8ICdhbHdheXMnIHwgJ29uZGVtYW5kJyA9ICdhbHdheXMnO1xyXG4gIC8vIEBJbnB1dCgpIGhpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSB2YWxpZGF0b3JzOiBVaVZhbGlkYXRvcnMgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgc2l6ZTogJ3NtYWxsJyB8ICdzbWFsbGVyJyB8ICdub3JtYWwnIHwgJ2xhcmdlcicgfCAnbGFyZ2UnID0gJ25vcm1hbCc7XHJcbiAgLy8gQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lO1xyXG5cclxuICAvLyBjb21wb25lbnRGb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xyXG4gIC8vXHJcbiAgLy8gbmdDb250cm9sOiBOZ0NvbnRyb2w7XHJcbiAgLy9cclxuICAvLyBASW5wdXQoKSB2YWxpZGF0b3JzOiBVaVZhbGlkYXRvcnMgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lO1xyXG4gIC8vXHJcbiAgLy8gQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICAvLyBASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIHVzZUlucHV0TWVzc2FnZXM6ICduZXZlcicgfCAnYWx3YXlzJyB8ICdvbmRlbWFuZCcgPSAnYWx3YXlzJztcclxuICAvLyBASW5wdXQoKSBoaW50Pzogc3RyaW5nO1xyXG4gIC8vIEBJbnB1dCgpIHNpemU6ICdzbWFsbCcgfCAnc21hbGxlcicgfCAnbm9ybWFsJyB8ICdsYXJnZXInIHwgJ2xhcmdlJyA9ICdub3JtYWwnO1xyXG5cclxuICBASW5wdXQoKSBwcmVmaXhJY29uOiBQcmVmaXhTdWZmaXg7XHJcbiAgQElucHV0KCkgc3VmZml4SWNvbjogUHJlZml4U3VmZml4O1xyXG4gIEBJbnB1dCgpIHR5cGU6ICd0ZXh0JyB8ICdudW1iZXInIHwgJ3Bhc3N3b3JkJyA9ICd0ZXh0JztcclxuICBASW5wdXQoKSBjbGVhckJ1dHRvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFjdGl2ZUljb25zID0gdHJ1ZTtcclxuICBASW5wdXQoKSBmb3JjZUhhc1ByZWZpeCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZvcmNlSGFzU3VmZml4ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgZ2V0IHRleHRBbGlnbkNsYXNzKCkge1xyXG4gICAgcmV0dXJuIGB0ZXh0LWFsaWduLSR7dGhpcy50ZXh0QWxpZ259YDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHRleHRBbGlnbjogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnID0gJ2xlZnQnO1xyXG5cclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG4gIEBWaWV3Q2hpbGQoJ3ByZWZpeCcsIHsgc3RhdGljOiB0cnVlIH0pIHByZWZpeDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcclxuICBAVmlld0NoaWxkKCdzdWZmaXgnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWZmaXg6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKSBmb2N1c0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGtleVByZXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XHJcblxyXG4gIGdldCBoYXNQcmVmaXgoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMucHJlZml4SWNvbiAmJiB0aGlzLnByZWZpeEljb24uaWNvbiAhPT0gJycpIHx8IHRoaXMucHJlZml4Py5uYXRpdmVFbGVtZW50Py5pbm5lclRleHQgIT09ICcnIHx8IHRoaXMuZm9yY2VIYXNQcmVmaXg7XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzU3VmZml4KCkge1xyXG4gICAgcmV0dXJuICh0aGlzLnN1ZmZpeEljb24gJiYgdGhpcy5zdWZmaXhJY29uLmljb24gIT09ICcnKSB8fCB0aGlzLnN1ZmZpeD8ubmF0aXZlRWxlbWVudD8uaW5uZXJUZXh0ICE9PSAnJyB8fCB0aGlzLmZvcmNlSGFzU3VmZml4O1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcblxyXG4gIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgaGFzRm9jdXMgPSBmYWxzZTtcclxuXHJcbiAgdmFsdWU6IHN0cmluZztcclxuXHJcbiAgLy8gY29udHJvbDtcclxuXHJcblxyXG4gIC8vIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xyXG4gIC8vIG9uQ2hhbmdlID0gKHZhbHVlKSA9PiB7fTtcclxuXHJcbiAgLy8gZ2V0IHNob3dJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gIC8vICAgcmV0dXJuIHRydWU7XHJcbiAgLy8gICAvLyByZXR1cm4gdGhpcy5jb250cm9sLnRvdWNoZWQgJiYgISF0aGlzLmNvbnRyb2wuZXJyb3JzO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbnRyb2w/LmVycm9ycyk7XHJcbiAgLy8gICBsZXQgZTogYW55ID0ge2NvZGU6ICdOZXpuw6Ftw6EgY2h5YmEnfTtcclxuICAvLyAgIGNvbnN0IGVycm9ycyA9IHRoaXMuY29udHJvbD8uZXJyb3JzIHx8IHt9O1xyXG4gIC8vICAgT2JqZWN0LmtleXMoZXJyb3JzKS5maW5kKGEgPT4ge1xyXG4gIC8vICAgICBlID0ge2NvZGU6IGEsIGRhdGE6IGVycm9yc1thXX07XHJcbiAgLy8gICAgIHJldHVybiB0cnVlO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gICBzd2l0Y2ggKGUuY29kZSkge1xyXG4gIC8vICAgICBjYXNlICdyZXF1aXJlZCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLnJlcXVpcmVkJyk7XHJcbiAgLy8gICAgIGNhc2UgJ2VtYWlsJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24uZW1haWwnKTtcclxuICAvLyAgICAgY2FzZSAnbWF0RGF0ZXBpY2tlclBhcnNlJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ubWF0RGF0ZXBpY2tlclBhcnNlJyk7XHJcbiAgLy8gICAgIGNhc2UgJ21heGxlbmd0aCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1heGxlbmd0aCcsIGUuZGF0YSk7XHJcbiAgLy8gICAgIGNhc2UgJ21pbmxlbmd0aCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1pbmxlbmd0aCcsIGUuZGF0YSk7XHJcbiAgLy8gICAgIGNhc2UgJ3Bvc2l0aXZlJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoaXNOYU4oTnVtYmVyKGUuZGF0YSkpID8gJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24uaW52YWxpZE51bWJlcicgOiAndWkuY29udHJvbHMudmFsaWRhdGlvbi5wb3NpdGl2ZScpO1xyXG4gIC8vICAgICBjYXNlICdjdXN0b20nOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmRhdGEpO1xyXG4gIC8vICAgICBkZWZhdWx0OlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmNvZGUpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IG1heExlblJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5jb250cm9sLnZhbHVlICYmICh0aGlzLmNvbnRyb2wudmFsdWUubGVuZ3RoID4gKHRoaXMudmFsaWRhdG9ycz8ubWF4TGVuZ3RoIHx8IDApKTtcclxuICB9XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASG9zdCgpIEBTa2lwU2VsZigpIHByb3RlY3RlZCBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxyXG4gICAgLypcclxuICAgIGJ1ZCBwcmVzIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2w6IE5nQ29udHJvbCBhIGNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXMgPT4genRyYXRpbWUgYWxlIGN1c3RvbSB2YWxpZGFjaVxyXG4gICAgYW5lYm8gcHJlcyBESSBqYWtvIHByb3ZpZGVycyBhIHBhayB0aGlzLmNvbnRyb2wgPSB2aXogbmdPbkluaXQgLSBwb2t1ZCBqZWogdnViZWMgcG90cmVidWplbVxyXG5cclxuICAgICAqL1xyXG4gICAgLy8gcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgIC8vIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIC8vIEBTZWxmKCkgcHJpdmF0ZSBjb250cm9sRGlyZWN0aXZlOiBOZ0NvbnRyb2wsXHJcbiAgICkge1xyXG4gICAgc3VwZXIobnVsbCwgY29udHJvbENvbnRhaW5lcik7XHJcblxyXG4gICAgLy8gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgLy8gc3VwZXIoKTtcclxuICAvLyAgc3VwZXIodW5kZWZpbmVkLCAvKm5nQ29udHJvbCovIHRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgLy8gc3VwZXIoY29udHJvbCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhjb250cm9sKTtcclxuICAgIC8vIGlmIChjb250cm9sKSB7XHJcbiAgICAvLyAgIGNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKG5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAvLyAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXHJcbiAgICAvLyAgIC8vIHRoZSBwcm92aWRlcnMpIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydC5cclxuICAgIC8vICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNsZWFyQnV0dG9uICYmIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2w/LnZhbHVlICE9PSAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuICAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2w/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHYpID0+IHtcclxuICAgICAgY29uc3QgdmwgPSB2LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcihvID0+IHZsID09PSAnJyB8fCBvLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmwpKVxyXG4gICAgfSlcclxuICAgIC8vIGNvbnNvbGUubG9nKCdwcm9iaWhhIHZ1YmVjIG9uaW5pdD8nKTtcclxuICAgIC8vIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZygnZnJvbSBuZ0NvbnRyb2wuLi4uPz8nKTtcclxuICAgIC8vICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wpIHtcclxuICAgIC8vICAgICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udHJvbDtcclxuICAgIC8vICAgfSBlbHNlIHtcclxuICAgIC8vICAgICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy5hcHBseVZhbGlkYXRvcnMoKTtcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtQ29udHJvbE5hbWUgP1xyXG4gICAgLy8gICAgICh0aGlzLmNvbnRyb2xDb250YWluZXIgYXMgRm9ybUdyb3VwRGlyZWN0aXZlKS5jb250cm9sLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgOiB0aGlzLmZvcm1Db250cm9sO1xyXG4gICAgLy8gICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoY29udHJvbC52YWxpZGF0b3IpO1xyXG4gICAgLy8gICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodiA9PiBjb25zb2xlLmxvZygnb25pdGluIHN1YicsIHYpKTtcclxuICAgIC8vICAgY29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wgPSB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sO1xyXG4gICAgLy8gICBpZiAoY29udHJvbC5fbWFya0FzVG91Y2hlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyAgICAgLy8gY29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wgPSB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sO1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKCdvdmVycmlkaW5nIG1hcmtBc1RvdWNoZWQgZm9yJywgdGhpcy5mb3JtQ29udHJvbE5hbWUpO1xyXG4gICAgLy8gICAgIGNvbnRyb2wuX21hcmtBc1RvdWNoZWQgPSBjb250cm9sLm1hcmtBc1RvdWNoZWQ7XHJcbiAgICAvLyAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkID0gKHtvbmx5U2VsZn06IHsgb25seVNlbGY/OiBib29sZWFuIH0gPSB7fSk6IHZvaWQgPT4ge1xyXG4gICAgLy8gICAgICAgY29uc29sZS5sb2coJ21hcmtpbmcgYXMgdG91Y2hlZCcsIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wudmFsdWUsIGNvbnRyb2wudmFsdWUsIHRoaXMueHh4LnZhbHVlLCBjb250cm9sLl9jb21wb25lbnRGb3JtQ29udHJvbC52YWx1ZSk7XHJcbiAgICAvLyAgICAgICBjb250cm9sLl9tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZn0pO1xyXG4gICAgLy8gICAgICAgc2V0VGltZW91dCgoKSA9PiBjb250cm9sLl9jb21wb25lbnRGb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCksIDEwMDApO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2w/LnNldFZhbHVlKCcnKTtcclxuICAgIHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIGZvY3VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhmb2N1czogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaGFzRm9jdXMgPSBmb2N1cztcclxuICAgICAgdGhpcy5mb2N1c0NoYW5nZWQuZW1pdChmb2N1cyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uS2V5cHJlc3NlZCgkZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5rZXlQcmVzc2VkLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8vIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IGFueSk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5vbkNoYW5nZSA9IG9uQ2hhbmdlO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogYW55KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcclxuICAvLyB9XHJcblxyXG4gIC8vIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gIC8vICAgLy8gaXNEaXNhYmxlZCA/IHRoaXMuY29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgLy8gICAvLyB0aGlzLmNvbnRyb2wgPSBjb250cm9sO1xyXG4gIC8vICAgLy8gY29uc29sZS5sb2coY29udHJvbCwgY29udHJvbC52YWx1ZSwgY29udHJvbC5lcnJvcnMpO1xyXG4gIC8vICAgaWYgKHRoaXMudmFsdWUgPT09ICdlcnJvcicpIHtcclxuICAvLyAgICAgcmV0dXJuIHsgY3VzdG9tRXJyb3I6ICdtdWogZXJyb3InfVxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgcmV0dXJuIG51bGw7XHJcbiAgLy8gICB9XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZygnY3VzdG9tIHZhbGlkYXRlJyk7XHJcbiAgLy8gICAvLyByZXR1cm4gbnVsbDtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgLy8gICBjb25zb2xlLmxvZygnd3JpdGV2YWx1ZTogJywgb2JqKTtcclxuICAvLyAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0VmFsdWUob2JqKTtcclxuICAvLyAgIC8vIHRoaXMudmFsdWUgPSBvYmo7XHJcbiAgLy8gICAvLyB0aGlzLmNvbnRyb2wuc2V0VmFsdWUob2JqKTtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBtb2RlbENoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgY29uc29sZS5sb2coJGV2ZW50KTtcclxuICAvLyAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgLy8gICB0aGlzLm9uQ2hhbmdlKCRldmVudClcclxuICAvLyB9XHJcblxyXG4gIC8vIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubGFiZWwsICd2YWxpZGF0ZScpO1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gIC8vICAgLy8gcmV0dXJuIHVuZGVmaW5lZDtcclxuICAvLyB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLnBhcmVudEZvcm1Db250cm9sKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudEZvcm1Db250cm9sLl9jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnM7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdGUnLCB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycyk7XHJcbiAgICAvLyAvLyB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldEVycm9ycyggeyBjdXN0b206ICd4eHgnIH0pO1xyXG4gICAgLy8gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZSAyJywgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnMpO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnMsIGNvbnRyb2wuZXJyb3JzLCB0aGlzLnBhcmVudEZvcm1Db250cm9sLmVycm9ycywgdGhpcyk7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnM7XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8dWktc2ltcGxlLWxheW91dCBbY3R4XT1cInRoaXNcIj5cclxuXHJcbjxkaXYgY2xhc3M9XCJjb250cm9sLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnaGFzLXN1ZmZpeCc6IGhhc1N1ZmZpeCwgJ2hhcy1wcmVmaXgnOiBoYXNQcmVmaXgsICdoYXMtY2xlYXItaWNvbic6IHNob3dDbGVhckJ1dHRvbiwgJ2FjdGl2ZS1pY29ucyc6IGFjdGl2ZUljb25zLCAnaGFzLWZvY3VzJzogaGFzRm9jdXN9XCI+XHJcbiAgPGlucHV0ICNpbnB1dCBtYXRJbnB1dCBbdHlwZV09XCJ0eXBlXCIgW2Zvcm1Db250cm9sXT1cImNvbXBvbmVudEZvcm1Db250cm9sXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgKGtleWRvd24pPVwib25LZXlwcmVzc2VkKCRldmVudClcIiAoZm9jdXMpPVwib25Gb2N1cyh0cnVlKVwiIChibHVyKT1cIm9uRm9jdXMoZmFsc2UpXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCIvPlxyXG5cclxuICAgIDxtYXQtYXV0b2NvbXBsZXRlIGF1dG9BY3RpdmVGaXJzdE9wdGlvbiAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7b3B0aW9ufX08L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgPGRpdiAjcHJlZml4PjxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PXByZWZpeF1cIj48L25nLWNvbnRlbnQ+PC9kaXY+XHJcbiAgPGRpdiAjc3VmZml4PjxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PXN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+PC9kaXY+XHJcbiAgPG1hdC1pY29uICpuZ0lmPVwicHJlZml4SWNvblwiIGNsYXNzPVwicHJlZml4LWljb25cIiBbbWF0VG9vbHRpcF09XCJwcmVmaXhJY29uLnRvb2x0aXBcIj57eyBwcmVmaXhJY29uLmljb24gfX08L21hdC1pY29uPlxyXG4gIDxtYXQtaWNvbiAqbmdJZj1cInN1ZmZpeEljb25cIiBjbGFzcz1cInN1ZmZpeC1pY29uXCIgW21hdFRvb2x0aXBdPVwic3VmZml4SWNvbi50b29sdGlwXCI+e3sgc3VmZml4SWNvbi5pY29uIH19PC9tYXQtaWNvbj5cclxuICA8dWktYWN0aW9uLWljb24gW3NpemVdPVwiJ3NtYWxsJ1wiIFtjb2xvcl09XCInd2FybidcIiAqbmdJZj1cInNob3dDbGVhckJ1dHRvblwiIChjbGljayk9XCJjbGVhclZhbHVlKClcIiBbbWF0SWNvbl09XCInY2xlYXInXCIgY2xhc3M9XCJjbGVhci1pY29uXCI+PC91aS1hY3Rpb24taWNvbj5cclxuPC9kaXY+XHJcblxyXG48L3VpLXNpbXBsZS1sYXlvdXQ+XHJcbiJdfQ==
|
|
1
|
+
import { Component, EventEmitter, Host, HostBinding, Input, Optional, Output, SkipSelf, ViewChild } from '@angular/core';
|
|
2
|
+
import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { UiSimpleComponent } from '../layouts/simple/ui-simple.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/forms";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "@angular/material/icon";
|
|
8
|
+
import * as i4 from "@angular/material/tooltip";
|
|
9
|
+
import * as i5 from "@angular/material/core";
|
|
10
|
+
import * as i6 from "@angular/material/input";
|
|
11
|
+
import * as i7 from "@angular/material/autocomplete";
|
|
12
|
+
import * as i8 from "../layouts/simple/ui-simple-layout.component";
|
|
13
|
+
import * as i9 from "../action-icon/action-icon.component";
|
|
14
|
+
export class InputAutocompleteComponent extends UiSimpleComponent {
|
|
15
|
+
get textAlignClass() {
|
|
16
|
+
return `text-align-${this.textAlign}`;
|
|
17
|
+
}
|
|
18
|
+
get hasPrefix() {
|
|
19
|
+
return (this.prefixIcon && this.prefixIcon.icon !== '') || this.prefix?.nativeElement?.innerText !== '' || this.forceHasPrefix;
|
|
20
|
+
}
|
|
21
|
+
get hasSuffix() {
|
|
22
|
+
return (this.suffixIcon && this.suffixIcon.icon !== '') || this.suffix?.nativeElement?.innerText !== '' || this.forceHasSuffix;
|
|
23
|
+
}
|
|
24
|
+
// control;
|
|
25
|
+
// onTouched = () => {};
|
|
26
|
+
// onChange = (value) => {};
|
|
27
|
+
// get showInvalid(): boolean {
|
|
28
|
+
// return true;
|
|
29
|
+
// // return this.control.touched && !!this.control.errors;
|
|
30
|
+
// }
|
|
31
|
+
// get validationMessage(): string {
|
|
32
|
+
// // console.log(this.control?.errors);
|
|
33
|
+
// let e: any = {code: 'Neznámá chyba'};
|
|
34
|
+
// const errors = this.control?.errors || {};
|
|
35
|
+
// Object.keys(errors).find(a => {
|
|
36
|
+
// e = {code: a, data: errors[a]};
|
|
37
|
+
// return true;
|
|
38
|
+
// });
|
|
39
|
+
// switch (e.code) {
|
|
40
|
+
// case 'required':
|
|
41
|
+
// return this.translateService.instant('ui.controls.validation.required');
|
|
42
|
+
// case 'email':
|
|
43
|
+
// return this.translateService.instant('ui.controls.validation.email');
|
|
44
|
+
// case 'matDatepickerParse':
|
|
45
|
+
// return this.translateService.instant('ui.controls.validation.matDatepickerParse');
|
|
46
|
+
// case 'maxlength':
|
|
47
|
+
// return this.translateService.instant('ui.controls.validation.maxlength', e.data);
|
|
48
|
+
// case 'minlength':
|
|
49
|
+
// return this.translateService.instant('ui.controls.validation.minlength', e.data);
|
|
50
|
+
// case 'positive':
|
|
51
|
+
// return this.translateService.instant(isNaN(Number(e.data)) ? 'ui.controls.validation.invalidNumber' : 'ui.controls.validation.positive');
|
|
52
|
+
// case 'custom':
|
|
53
|
+
// return this.translateService.instant(e.data);
|
|
54
|
+
// default:
|
|
55
|
+
// return this.translateService.instant(e.code);
|
|
56
|
+
// }
|
|
57
|
+
// }
|
|
58
|
+
get maxLenRequired() {
|
|
59
|
+
return true;
|
|
60
|
+
// return this.control.value && (this.control.value.length > (this.validators?.maxLength || 0));
|
|
61
|
+
}
|
|
62
|
+
constructor(controlContainer) {
|
|
63
|
+
super(null, controlContainer);
|
|
64
|
+
this.controlContainer = controlContainer;
|
|
65
|
+
this.type = 'text';
|
|
66
|
+
this.clearButton = false;
|
|
67
|
+
this.activeIcons = true;
|
|
68
|
+
this.forceHasPrefix = false;
|
|
69
|
+
this.forceHasSuffix = false;
|
|
70
|
+
this.options = [];
|
|
71
|
+
this.textAlign = 'left';
|
|
72
|
+
this.focusChanged = new EventEmitter();
|
|
73
|
+
this.keyPressed = new EventEmitter();
|
|
74
|
+
this.filteredOptions = [];
|
|
75
|
+
// control = new FormControl();
|
|
76
|
+
this.required = false;
|
|
77
|
+
this.hasFocus = false;
|
|
78
|
+
// this.componentFormControl = new FormControl();
|
|
79
|
+
// super();
|
|
80
|
+
// super(undefined, /*ngControl*/ translateService);
|
|
81
|
+
// super(control);
|
|
82
|
+
// console.log(control);
|
|
83
|
+
// if (control) {
|
|
84
|
+
// control.valueAccessor = this;
|
|
85
|
+
// }
|
|
86
|
+
// if (ngControl != null) {
|
|
87
|
+
// // Setting the value accessor directly (instead of using
|
|
88
|
+
// // the providers) to avoid running into a circular import.
|
|
89
|
+
// ngControl.valueAccessor = this;
|
|
90
|
+
// }
|
|
91
|
+
}
|
|
92
|
+
get showClearButton() {
|
|
93
|
+
return this.clearButton && this.componentFormControl?.value !== '';
|
|
94
|
+
}
|
|
95
|
+
ngOnInit() {
|
|
96
|
+
super.ngOnInit();
|
|
97
|
+
this.filteredOptions = this.options;
|
|
98
|
+
this.componentFormControl?.valueChanges.subscribe((v) => {
|
|
99
|
+
const vl = v.toLowerCase();
|
|
100
|
+
this.filteredOptions = this.options.filter(o => vl === '' || o.toLowerCase().includes(vl));
|
|
101
|
+
});
|
|
102
|
+
// console.log('probiha vubec oninit?');
|
|
103
|
+
// if (this.ngControl) {
|
|
104
|
+
// console.log('from ngControl....??');
|
|
105
|
+
// if (this.formControl) {
|
|
106
|
+
// this.componentFormControl = this.formControl;
|
|
107
|
+
// } else {
|
|
108
|
+
// this.componentFormControl = this.ngControl.control as UntypedFormControl;
|
|
109
|
+
// }
|
|
110
|
+
// setTimeout(() => {
|
|
111
|
+
// this.applyValidators();
|
|
112
|
+
// });
|
|
113
|
+
// } else {
|
|
114
|
+
// const control = this.formControlName ?
|
|
115
|
+
// (this.controlContainer as FormGroupDirective).control.get(this.formControlName) : this.formControl;
|
|
116
|
+
// this.componentFormControl.setValidators(control.validator);
|
|
117
|
+
// this.componentFormControl.valueChanges.subscribe(v => console.log('onitin sub', v));
|
|
118
|
+
// control._componentFormControl = this.componentFormControl;
|
|
119
|
+
// if (control._markAsTouched === undefined) {
|
|
120
|
+
// // control._componentFormControl = this.componentFormControl;
|
|
121
|
+
// console.log('overriding markAsTouched for', this.formControlName);
|
|
122
|
+
// control._markAsTouched = control.markAsTouched;
|
|
123
|
+
// control.markAsTouched = ({onlySelf}: { onlySelf?: boolean } = {}): void => {
|
|
124
|
+
// console.log('marking as touched', this.componentFormControl.value, control.value, this.xxx.value, control._componentFormControl.value);
|
|
125
|
+
// control._markAsTouched({onlySelf});
|
|
126
|
+
// setTimeout(() => control._componentFormControl.markAsTouched(), 1000);
|
|
127
|
+
// }
|
|
128
|
+
// }
|
|
129
|
+
// }
|
|
130
|
+
}
|
|
131
|
+
clearValue() {
|
|
132
|
+
this.componentFormControl?.setValue('');
|
|
133
|
+
this.input?.nativeElement.focus();
|
|
134
|
+
}
|
|
135
|
+
focus() {
|
|
136
|
+
this.input?.nativeElement.focus();
|
|
137
|
+
}
|
|
138
|
+
onFocus(focus) {
|
|
139
|
+
setTimeout(() => {
|
|
140
|
+
this.hasFocus = focus;
|
|
141
|
+
this.focusChanged.emit(focus);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
onKeypressed($event) {
|
|
145
|
+
this.keyPressed.emit($event);
|
|
146
|
+
}
|
|
147
|
+
// registerOnChange(onChange: any): void {
|
|
148
|
+
// this.onChange = onChange;
|
|
149
|
+
// }
|
|
150
|
+
//
|
|
151
|
+
// registerOnTouched(onTouched: any): void {
|
|
152
|
+
// this.onTouched = onTouched;
|
|
153
|
+
// }
|
|
154
|
+
// registerOnValidatorChange(fn: () => void): void {
|
|
155
|
+
// }
|
|
156
|
+
// setDisabledState(isDisabled: boolean): void {
|
|
157
|
+
// // isDisabled ? this.control.disable() : this.control.enable();
|
|
158
|
+
// }
|
|
159
|
+
// validate(control: AbstractControl): ValidationErrors | null {
|
|
160
|
+
// // this.control = control;
|
|
161
|
+
// // console.log(control, control.value, control.errors);
|
|
162
|
+
// if (this.value === 'error') {
|
|
163
|
+
// return { customError: 'muj error'}
|
|
164
|
+
// } else {
|
|
165
|
+
// return null;
|
|
166
|
+
// }
|
|
167
|
+
// // console.log('custom validate');
|
|
168
|
+
// // return null;
|
|
169
|
+
// }
|
|
170
|
+
//
|
|
171
|
+
// writeValue(obj: any): void {
|
|
172
|
+
// console.log('writevalue: ', obj);
|
|
173
|
+
// this.componentFormControl.setValue(obj);
|
|
174
|
+
// // this.value = obj;
|
|
175
|
+
// // this.control.setValue(obj);
|
|
176
|
+
// }
|
|
177
|
+
//
|
|
178
|
+
// registerOnChange(fn: any): void {
|
|
179
|
+
// }
|
|
180
|
+
//
|
|
181
|
+
// registerOnTouched(fn: any): void {
|
|
182
|
+
// }
|
|
183
|
+
//
|
|
184
|
+
// setDisabledState(isDisabled: boolean): void {
|
|
185
|
+
// }
|
|
186
|
+
// modelChange($event: any) {
|
|
187
|
+
// console.log($event);
|
|
188
|
+
// this.onTouched();
|
|
189
|
+
// this.onChange($event)
|
|
190
|
+
// }
|
|
191
|
+
// validate(control: AbstractControl): ValidationErrors | null {
|
|
192
|
+
// console.log(this.label, 'validate');
|
|
193
|
+
// return this.componentFormControl.errors;
|
|
194
|
+
// // return undefined;
|
|
195
|
+
// }
|
|
196
|
+
validate(control) {
|
|
197
|
+
if (this.parentFormControl) {
|
|
198
|
+
return this.parentFormControl._componentFormControl.errors;
|
|
199
|
+
}
|
|
200
|
+
// console.log('validate', this.componentFormControl.errors);
|
|
201
|
+
// // this.componentFormControl.setErrors( { custom: 'xxx' });
|
|
202
|
+
// this.componentFormControl.setErrors( this.componentFormControl.errors);
|
|
203
|
+
// console.log('validate 2', this.componentFormControl.errors);
|
|
204
|
+
// return this.componentFormControl.errors;
|
|
205
|
+
// console.log(this.componentFormControl.errors, control.errors, this.parentFormControl.errors, this);
|
|
206
|
+
// return this.componentFormControl.errors;
|
|
207
|
+
}
|
|
208
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: InputAutocompleteComponent, deps: [{ token: i1.ControlContainer, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
209
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: InputAutocompleteComponent, selector: "ui-input-autocomplete", inputs: { prefixIcon: "prefixIcon", suffixIcon: "suffixIcon", type: "type", clearButton: "clearButton", activeIcons: "activeIcons", forceHasPrefix: "forceHasPrefix", forceHasSuffix: "forceHasSuffix", options: "options", textAlign: "textAlign" }, outputs: { focusChanged: "focusChanged", keyPressed: "keyPressed" }, host: { properties: { "class": "this.textAlignClass" } }, providers: [
|
|
210
|
+
{
|
|
211
|
+
provide: NG_VALUE_ACCESSOR,
|
|
212
|
+
multi: true,
|
|
213
|
+
useExisting: InputAutocompleteComponent
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
provide: NG_VALIDATORS,
|
|
217
|
+
multi: true,
|
|
218
|
+
useExisting: InputAutocompleteComponent
|
|
219
|
+
}
|
|
220
|
+
], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "prefix", first: true, predicate: ["prefix"], descendants: true, static: true }, { propertyName: "suffix", first: true, predicate: ["suffix"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<div class=\"control-container\" [ngClass]=\"{'has-suffix': hasSuffix, 'has-prefix': hasPrefix, 'has-clear-icon': showClearButton, 'active-icons': activeIcons, 'has-focus': hasFocus}\">\r\n <input #input matInput [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" [matAutocomplete]=\"auto\"/>\r\n\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">{{option}}</mat-option>\r\n </mat-autocomplete>\r\n <div #prefix><ng-content select=\"[slot=prefix]\"></ng-content></div>\r\n <div #suffix><ng-content select=\"[slot=suffix]\"></ng-content></div>\r\n <mat-icon *ngIf=\"prefixIcon\" class=\"prefix-icon\" [matTooltip]=\"prefixIcon.tooltip\">{{ prefixIcon.icon }}</mat-icon>\r\n <mat-icon *ngIf=\"suffixIcon\" class=\"suffix-icon\" [matTooltip]=\"suffixIcon.tooltip\">{{ suffixIcon.icon }}</mat-icon>\r\n <ui-action-icon [size]=\"'small'\" [color]=\"'warn'\" *ngIf=\"showClearButton\" (click)=\"clearValue()\" [matIcon]=\"'clear'\" class=\"clear-icon\"></ui-action-icon>\r\n</div>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .control-container{width:100%;position:relative}:host .control-container.has-prefix ::ng-deep input,:host .control-container.has-prefix ::ng-deep textarea,:host .control-container.has-prefix ::ng-deep .mat-mdc-select-trigger{padding-left:1.8em}:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep input,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep textarea,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep input,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep textarea,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-suffix.has-clear-icon ::ng-deep input,:host .control-container.has-suffix.has-clear-icon ::ng-deep textarea,:host .control-container.has-suffix.has-clear-icon ::ng-deep .mat-mdc-select-trigger{padding-right:3.6em}:host .control-container.has-suffix.has-clear-icon ::ng-deep .clear-icon{right:1.4em!important}:host ::ng-deep [slot=suffix],:host ::ng-deep .clear-icon,:host ::ng-deep .suffix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=suffix]:not(.disabled),:host ::ng-deep .clear-icon:not(.disabled),:host ::ng-deep .suffix-icon:not(.disabled){cursor:pointer}:host ::ng-deep [slot=prefix],:host ::ng-deep .prefix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]:not(.disabled),:host ::ng-deep .prefix-icon:not(.disabled){cursor:pointer}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep .mat-mdc-select-trigger,:host ::ng-deep .editor-wrapper{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n", ":host.text-align-left ::ng-deep input{text-align:left}:host.text-align-right ::ng-deep input{text-align:right}:host.text-align-center ::ng-deep input{text-align:center}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.UiSimpleLayoutComponent, selector: "ui-simple-layout", inputs: ["ctx"] }, { kind: "component", type: i9.ActionIconComponent, selector: "ui-action-icon", inputs: ["size", "color", "disabled", "busy", "matIcon"] }] }); }
|
|
221
|
+
}
|
|
222
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: InputAutocompleteComponent, decorators: [{
|
|
223
|
+
type: Component,
|
|
224
|
+
args: [{ selector: 'ui-input-autocomplete', providers: [
|
|
225
|
+
{
|
|
226
|
+
provide: NG_VALUE_ACCESSOR,
|
|
227
|
+
multi: true,
|
|
228
|
+
useExisting: InputAutocompleteComponent
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
provide: NG_VALIDATORS,
|
|
232
|
+
multi: true,
|
|
233
|
+
useExisting: InputAutocompleteComponent
|
|
234
|
+
}
|
|
235
|
+
], template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<div class=\"control-container\" [ngClass]=\"{'has-suffix': hasSuffix, 'has-prefix': hasPrefix, 'has-clear-icon': showClearButton, 'active-icons': activeIcons, 'has-focus': hasFocus}\">\r\n <input #input matInput [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" [matAutocomplete]=\"auto\"/>\r\n\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">{{option}}</mat-option>\r\n </mat-autocomplete>\r\n <div #prefix><ng-content select=\"[slot=prefix]\"></ng-content></div>\r\n <div #suffix><ng-content select=\"[slot=suffix]\"></ng-content></div>\r\n <mat-icon *ngIf=\"prefixIcon\" class=\"prefix-icon\" [matTooltip]=\"prefixIcon.tooltip\">{{ prefixIcon.icon }}</mat-icon>\r\n <mat-icon *ngIf=\"suffixIcon\" class=\"suffix-icon\" [matTooltip]=\"suffixIcon.tooltip\">{{ suffixIcon.icon }}</mat-icon>\r\n <ui-action-icon [size]=\"'small'\" [color]=\"'warn'\" *ngIf=\"showClearButton\" (click)=\"clearValue()\" [matIcon]=\"'clear'\" class=\"clear-icon\"></ui-action-icon>\r\n</div>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .control-container{width:100%;position:relative}:host .control-container.has-prefix ::ng-deep input,:host .control-container.has-prefix ::ng-deep textarea,:host .control-container.has-prefix ::ng-deep .mat-mdc-select-trigger{padding-left:1.8em}:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep input,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep textarea,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep input,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep textarea,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-suffix.has-clear-icon ::ng-deep input,:host .control-container.has-suffix.has-clear-icon ::ng-deep textarea,:host .control-container.has-suffix.has-clear-icon ::ng-deep .mat-mdc-select-trigger{padding-right:3.6em}:host .control-container.has-suffix.has-clear-icon ::ng-deep .clear-icon{right:1.4em!important}:host ::ng-deep [slot=suffix],:host ::ng-deep .clear-icon,:host ::ng-deep .suffix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=suffix]:not(.disabled),:host ::ng-deep .clear-icon:not(.disabled),:host ::ng-deep .suffix-icon:not(.disabled){cursor:pointer}:host ::ng-deep [slot=prefix],:host ::ng-deep .prefix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]:not(.disabled),:host ::ng-deep .prefix-icon:not(.disabled){cursor:pointer}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep .mat-mdc-select-trigger,:host ::ng-deep .editor-wrapper{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n", ":host.text-align-left ::ng-deep input{text-align:left}:host.text-align-right ::ng-deep input{text-align:right}:host.text-align-center ::ng-deep input{text-align:center}\n"] }]
|
|
236
|
+
}], ctorParameters: () => [{ type: i1.ControlContainer, decorators: [{
|
|
237
|
+
type: Optional
|
|
238
|
+
}, {
|
|
239
|
+
type: Host
|
|
240
|
+
}, {
|
|
241
|
+
type: SkipSelf
|
|
242
|
+
}] }], propDecorators: { prefixIcon: [{
|
|
243
|
+
type: Input
|
|
244
|
+
}], suffixIcon: [{
|
|
245
|
+
type: Input
|
|
246
|
+
}], type: [{
|
|
247
|
+
type: Input
|
|
248
|
+
}], clearButton: [{
|
|
249
|
+
type: Input
|
|
250
|
+
}], activeIcons: [{
|
|
251
|
+
type: Input
|
|
252
|
+
}], forceHasPrefix: [{
|
|
253
|
+
type: Input
|
|
254
|
+
}], forceHasSuffix: [{
|
|
255
|
+
type: Input
|
|
256
|
+
}], options: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}], textAlignClass: [{
|
|
259
|
+
type: HostBinding,
|
|
260
|
+
args: ['class']
|
|
261
|
+
}], textAlign: [{
|
|
262
|
+
type: Input
|
|
263
|
+
}], input: [{
|
|
264
|
+
type: ViewChild,
|
|
265
|
+
args: ['input']
|
|
266
|
+
}], prefix: [{
|
|
267
|
+
type: ViewChild,
|
|
268
|
+
args: ['prefix', { static: true }]
|
|
269
|
+
}], suffix: [{
|
|
270
|
+
type: ViewChild,
|
|
271
|
+
args: ['suffix', { static: true }]
|
|
272
|
+
}], focusChanged: [{
|
|
273
|
+
type: Output
|
|
274
|
+
}], keyPressed: [{
|
|
275
|
+
type: Output
|
|
276
|
+
}] } });
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvaW5wdXQtYXV0b2NvbXBsZXRlL2lucHV0LWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lucHV0LWF1dG9jb21wbGV0ZS9pbnB1dC1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osSUFBSSxFQUFFLFdBQVcsRUFDakIsS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFvQjFFLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxpQkFBaUI7SUFtQy9ELElBQ0ksY0FBYztRQUNoQixPQUFPLGNBQWMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFXRCxJQUFJLFNBQVM7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDakksQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FB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QUFFLGFBQWE7NEJBQ3RCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsNEJBQTRCO3lCQUN4QztxQkFDRjs7MEJBaUhZLFFBQVE7OzBCQUFJLElBQUk7OzBCQUFJLFFBQVE7eUNBckZoQyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUdGLGNBQWM7c0JBRGpCLFdBQVc7dUJBQUMsT0FBTztnQkFLWCxTQUFTO3NCQUFqQixLQUFLO2dCQUVjLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDcUIsTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNFLE1BQU07c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFM0IsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdCwgSG9zdEJpbmRpbmcsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBTa2lwU2VsZixcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVWlTaW1wbGVDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL3NpbXBsZS91aS1zaW1wbGUuY29tcG9uZW50JztcclxuXHJcbnR5cGUgUHJlZml4U3VmZml4ID0geyBpY29uOiBzdHJpbmcsIHRvb2x0aXA/OiBzdHJpbmcgfTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1pbnB1dC1hdXRvY29tcGxldGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWyAnLi4vbGF5b3V0cy9zaW1wbGUvdWktc2ltcGxlLWxheW91dC5jb21wb25lbnQuc2NzcycsICcuLi9pbnB1dC9pbnB1dC5jb21wb25lbnQuc2NzcycgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogSW5wdXRBdXRvY29tcGxldGVDb21wb25lbnRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogSW5wdXRBdXRvY29tcGxldGVDb21wb25lbnRcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dEF1dG9jb21wbGV0ZUNvbXBvbmVudCBleHRlbmRzIFVpU2ltcGxlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQgeyAvLyB9LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7IC8vIH0sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IgeyAvLyB9LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgLy8gVWlTaW1wbGVDb21wb25lbnQgPSBJbnB1dENvbXBvbmVudDtcclxuXHJcbiAgLy8gQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICAvLyBASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIHVzZUlucHV0TWVzc2FnZXM6ICduZXZlcicgfCAnYWx3YXlzJyB8ICdvbmRlbWFuZCcgPSAnYWx3YXlzJztcclxuICAvLyBASW5wdXQoKSBoaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgdmFsaWRhdG9yczogVWlWYWxpZGF0b3JzIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIHNpemU6ICdzbWFsbCcgfCAnc21hbGxlcicgfCAnbm9ybWFsJyB8ICdsYXJnZXInIHwgJ2xhcmdlJyA9ICdub3JtYWwnO1xyXG4gIC8vIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTtcclxuXHJcbiAgLy8gY29tcG9uZW50Rm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAvL1xyXG4gIC8vIG5nQ29udHJvbDogTmdDb250cm9sO1xyXG4gIC8vXHJcbiAgLy8gQElucHV0KCkgdmFsaWRhdG9yczogVWlWYWxpZGF0b3JzIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTtcclxuICAvL1xyXG4gIC8vIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XHJcbiAgLy8gQElucHV0KCkgbGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSB1c2VJbnB1dE1lc3NhZ2VzOiAnbmV2ZXInIHwgJ2Fsd2F5cycgfCAnb25kZW1hbmQnID0gJ2Fsd2F5cyc7XHJcbiAgLy8gQElucHV0KCkgaGludD86IHN0cmluZztcclxuICAvLyBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ3NtYWxsZXInIHwgJ25vcm1hbCcgfCAnbGFyZ2VyJyB8ICdsYXJnZScgPSAnbm9ybWFsJztcclxuXHJcbiAgQElucHV0KCkgcHJlZml4SWNvbjogUHJlZml4U3VmZml4O1xyXG4gIEBJbnB1dCgpIHN1ZmZpeEljb246IFByZWZpeFN1ZmZpeDtcclxuICBASW5wdXQoKSB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdwYXNzd29yZCcgPSAndGV4dCc7XHJcbiAgQElucHV0KCkgY2xlYXJCdXR0b24gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhY3RpdmVJY29ucyA9IHRydWU7XHJcbiAgQElucHV0KCkgZm9yY2VIYXNQcmVmaXggPSBmYWxzZTtcclxuICBASW5wdXQoKSBmb3JjZUhhc1N1ZmZpeCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxyXG4gIGdldCB0ZXh0QWxpZ25DbGFzcygpIHtcclxuICAgIHJldHVybiBgdGV4dC1hbGlnbi0ke3RoaXMudGV4dEFsaWdufWA7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSB0ZXh0QWxpZ246ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyA9ICdsZWZ0JztcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcclxuICBAVmlld0NoaWxkKCdwcmVmaXgnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcmVmaXg6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcbiAgQFZpZXdDaGlsZCgnc3VmZml4JywgeyBzdGF0aWM6IHRydWUgfSkgc3VmZml4OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KCkgZm9jdXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBrZXlQcmVzc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xyXG5cclxuICBnZXQgaGFzUHJlZml4KCkge1xyXG4gICAgcmV0dXJuICh0aGlzLnByZWZpeEljb24gJiYgdGhpcy5wcmVmaXhJY29uLmljb24gIT09ICcnKSB8fCB0aGlzLnByZWZpeD8ubmF0aXZlRWxlbWVudD8uaW5uZXJUZXh0ICE9PSAnJyB8fCB0aGlzLmZvcmNlSGFzUHJlZml4O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc1N1ZmZpeCgpIHtcclxuICAgIHJldHVybiAodGhpcy5zdWZmaXhJY29uICYmIHRoaXMuc3VmZml4SWNvbi5pY29uICE9PSAnJykgfHwgdGhpcy5zdWZmaXg/Lm5hdGl2ZUVsZW1lbnQ/LmlubmVyVGV4dCAhPT0gJycgfHwgdGhpcy5mb3JjZUhhc1N1ZmZpeDtcclxuICB9XHJcblxyXG4gIGZpbHRlcmVkT3B0aW9uczogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG5cclxuICByZXF1aXJlZCA9IGZhbHNlO1xyXG4gIGhhc0ZvY3VzID0gZmFsc2U7XHJcblxyXG4gIHZhbHVlOiBzdHJpbmc7XHJcblxyXG4gIC8vIGNvbnRyb2w7XHJcblxyXG5cclxuICAvLyBvblRvdWNoZWQgPSAoKSA9PiB7fTtcclxuICAvLyBvbkNoYW5nZSA9ICh2YWx1ZSkgPT4ge307XHJcblxyXG4gIC8vIGdldCBzaG93SW52YWxpZCgpOiBib29sZWFuIHtcclxuICAvLyAgIHJldHVybiB0cnVlO1xyXG4gIC8vICAgLy8gcmV0dXJuIHRoaXMuY29udHJvbC50b3VjaGVkICYmICEhdGhpcy5jb250cm9sLmVycm9ycztcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gIC8vICAgLy8gY29uc29sZS5sb2codGhpcy5jb250cm9sPy5lcnJvcnMpO1xyXG4gIC8vICAgbGV0IGU6IGFueSA9IHtjb2RlOiAnTmV6bsOhbcOhIGNoeWJhJ307XHJcbiAgLy8gICBjb25zdCBlcnJvcnMgPSB0aGlzLmNvbnRyb2w/LmVycm9ycyB8fCB7fTtcclxuICAvLyAgIE9iamVjdC5rZXlzKGVycm9ycykuZmluZChhID0+IHtcclxuICAvLyAgICAgZSA9IHtjb2RlOiBhLCBkYXRhOiBlcnJvcnNbYV19O1xyXG4gIC8vICAgICByZXR1cm4gdHJ1ZTtcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgc3dpdGNoIChlLmNvZGUpIHtcclxuICAvLyAgICAgY2FzZSAncmVxdWlyZWQnOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudmFsaWRhdGlvbi5yZXF1aXJlZCcpO1xyXG4gIC8vICAgICBjYXNlICdlbWFpbCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLmVtYWlsJyk7XHJcbiAgLy8gICAgIGNhc2UgJ21hdERhdGVwaWNrZXJQYXJzZSc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1hdERhdGVwaWNrZXJQYXJzZScpO1xyXG4gIC8vICAgICBjYXNlICdtYXhsZW5ndGgnOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudmFsaWRhdGlvbi5tYXhsZW5ndGgnLCBlLmRhdGEpO1xyXG4gIC8vICAgICBjYXNlICdtaW5sZW5ndGgnOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudmFsaWRhdGlvbi5taW5sZW5ndGgnLCBlLmRhdGEpO1xyXG4gIC8vICAgICBjYXNlICdwb3NpdGl2ZSc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGlzTmFOKE51bWJlcihlLmRhdGEpKSA/ICd1aS5jb250cm9scy52YWxpZGF0aW9uLmludmFsaWROdW1iZXInIDogJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ucG9zaXRpdmUnKTtcclxuICAvLyAgICAgY2FzZSAnY3VzdG9tJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZS5kYXRhKTtcclxuICAvLyAgICAgZGVmYXVsdDpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZS5jb2RlKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGdldCBtYXhMZW5SZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuY29udHJvbC52YWx1ZSAmJiAodGhpcy5jb250cm9sLnZhbHVlLmxlbmd0aCA+ICh0aGlzLnZhbGlkYXRvcnM/Lm1heExlbmd0aCB8fCAwKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBwcm90ZWN0ZWQgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgIC8qXHJcbiAgICBidWQgcHJlcyBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sOiBOZ0NvbnRyb2wgYSBjb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzID0+IHp0cmF0aW1lIGFsZSBjdXN0b20gdmFsaWRhY2lcclxuICAgIGFuZWJvIHByZXMgREkgamFrbyBwcm92aWRlcnMgYSBwYWsgdGhpcy5jb250cm9sID0gdml6IG5nT25Jbml0IC0gcG9rdWQgamVqIHZ1YmVjIHBvdHJlYnVqZW1cclxuXHJcbiAgICAgKi9cclxuICAgIC8vIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAvLyBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICAvLyBAU2VsZigpIHByaXZhdGUgY29udHJvbERpcmVjdGl2ZTogTmdDb250cm9sLFxyXG4gICApIHtcclxuICAgIHN1cGVyKG51bGwsIGNvbnRyb2xDb250YWluZXIpO1xyXG5cclxuICAgIC8vIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICAgIC8vIHN1cGVyKCk7XHJcbiAgLy8gIHN1cGVyKHVuZGVmaW5lZCwgLypuZ0NvbnRyb2wqLyB0cmFuc2xhdGVTZXJ2aWNlKTtcclxuICAgIC8vIHN1cGVyKGNvbnRyb2wpO1xyXG4gICAgLy8gY29uc29sZS5sb2coY29udHJvbCk7XHJcbiAgICAvLyBpZiAoY29udHJvbCkge1xyXG4gICAgLy8gICBjb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmIChuZ0NvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgLy8gICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSBhY2Nlc3NvciBkaXJlY3RseSAoaW5zdGVhZCBvZiB1c2luZ1xyXG4gICAgLy8gICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXHJcbiAgICAvLyAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGdldCBzaG93Q2xlYXJCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhckJ1dHRvbiAmJiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sPy52YWx1ZSAhPT0gJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2KSA9PiB7XHJcbiAgICAgIGNvbnN0IHZsID0gdi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIobyA9PiB2bCA9PT0gJycgfHwgby50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZsKSlcclxuICAgIH0pXHJcbiAgICAvLyBjb25zb2xlLmxvZygncHJvYmloYSB2dWJlYyBvbmluaXQ/Jyk7XHJcbiAgICAvLyBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgIC8vICAgY29uc29sZS5sb2coJ2Zyb20gbmdDb250cm9sLi4uLj8/Jyk7XHJcbiAgICAvLyAgIGlmICh0aGlzLmZvcm1Db250cm9sKSB7XHJcbiAgICAvLyAgICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCA9IHRoaXMubmdDb250cm9sLmNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuYXBwbHlWYWxpZGF0b3JzKCk7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2xOYW1lID9cclxuICAgIC8vICAgICAodGhpcy5jb250cm9sQ29udGFpbmVyIGFzIEZvcm1Hcm91cERpcmVjdGl2ZSkuY29udHJvbC5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIDogdGhpcy5mb3JtQ29udHJvbDtcclxuICAgIC8vICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKGNvbnRyb2wudmFsaWRhdG9yKTtcclxuICAgIC8vICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4gY29uc29sZS5sb2coJ29uaXRpbiBzdWInLCB2KSk7XHJcbiAgICAvLyAgIGNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sID0gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbDtcclxuICAgIC8vICAgaWYgKGNvbnRyb2wuX21hcmtBc1RvdWNoZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAgIC8vIGNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sID0gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbDtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZygnb3ZlcnJpZGluZyBtYXJrQXNUb3VjaGVkIGZvcicsIHRoaXMuZm9ybUNvbnRyb2xOYW1lKTtcclxuICAgIC8vICAgICBjb250cm9sLl9tYXJrQXNUb3VjaGVkID0gY29udHJvbC5tYXJrQXNUb3VjaGVkO1xyXG4gICAgLy8gICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCA9ICh7b25seVNlbGZ9OiB7IG9ubHlTZWxmPzogYm9vbGVhbiB9ID0ge30pOiB2b2lkID0+IHtcclxuICAgIC8vICAgICAgIGNvbnNvbGUubG9nKCdtYXJraW5nIGFzIHRvdWNoZWQnLCB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnZhbHVlLCBjb250cm9sLnZhbHVlLCB0aGlzLnh4eC52YWx1ZSwgY29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gICAgLy8gICAgICAgY29udHJvbC5fbWFya0FzVG91Y2hlZCh7b25seVNlbGZ9KTtcclxuICAgIC8vICAgICAgIHNldFRpbWVvdXQoKCkgPT4gY29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpLCAxMDAwKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGNsZWFyVmFsdWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoZm9jdXM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhhc0ZvY3VzID0gZm9jdXM7XHJcbiAgICAgIHRoaXMuZm9jdXNDaGFuZ2VkLmVtaXQoZm9jdXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbktleXByZXNzZWQoJGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMua2V5UHJlc3NlZC5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICAvLyByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiBhbnkpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IGFueSk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XHJcbiAgLy8gfVxyXG5cclxuICAvLyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAvLyAgIC8vIGlzRGlzYWJsZWQgPyB0aGlzLmNvbnRyb2wuZGlzYWJsZSgpIDogdGhpcy5jb250cm9sLmVuYWJsZSgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIC8vICAgLy8gdGhpcy5jb250cm9sID0gY29udHJvbDtcclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKGNvbnRyb2wsIGNvbnRyb2wudmFsdWUsIGNvbnRyb2wuZXJyb3JzKTtcclxuICAvLyAgIGlmICh0aGlzLnZhbHVlID09PSAnZXJyb3InKSB7XHJcbiAgLy8gICAgIHJldHVybiB7IGN1c3RvbUVycm9yOiAnbXVqIGVycm9yJ31cclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHJldHVybiBudWxsO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgLy8gY29uc29sZS5sb2coJ2N1c3RvbSB2YWxpZGF0ZScpO1xyXG4gIC8vICAgLy8gcmV0dXJuIG51bGw7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gIC8vICAgY29uc29sZS5sb2coJ3dyaXRldmFsdWU6ICcsIG9iaik7XHJcbiAgLy8gICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldFZhbHVlKG9iaik7XHJcbiAgLy8gICAvLyB0aGlzLnZhbHVlID0gb2JqO1xyXG4gIC8vICAgLy8gdGhpcy5jb250cm9sLnNldFZhbHVlKG9iaik7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gbW9kZWxDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKCRldmVudCk7XHJcbiAgLy8gICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIC8vICAgdGhpcy5vbkNoYW5nZSgkZXZlbnQpXHJcbiAgLy8gfVxyXG5cclxuICAvLyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxhYmVsLCAndmFsaWRhdGUnKTtcclxuICAvLyAgIHJldHVybiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycztcclxuICAvLyAgIC8vIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgLy8gfVxyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnRGb3JtQ29udHJvbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnRGb3JtQ29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnMpO1xyXG4gICAgLy8gLy8gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoIHsgY3VzdG9tOiAneHh4JyB9KTtcclxuICAgIC8vIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKCB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdGUgMicsIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzKTtcclxuICAgIC8vIHJldHVybiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycztcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzLCBjb250cm9sLmVycm9ycywgdGhpcy5wYXJlbnRGb3JtQ29udHJvbC5lcnJvcnMsIHRoaXMpO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gIH1cclxufVxyXG5cclxuIiwiPHVpLXNpbXBsZS1sYXlvdXQgW2N0eF09XCJ0aGlzXCI+XHJcblxyXG48ZGl2IGNsYXNzPVwiY29udHJvbC1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7J2hhcy1zdWZmaXgnOiBoYXNTdWZmaXgsICdoYXMtcHJlZml4JzogaGFzUHJlZml4LCAnaGFzLWNsZWFyLWljb24nOiBzaG93Q2xlYXJCdXR0b24sICdhY3RpdmUtaWNvbnMnOiBhY3RpdmVJY29ucywgJ2hhcy1mb2N1cyc6IGhhc0ZvY3VzfVwiPlxyXG4gIDxpbnB1dCAjaW5wdXQgbWF0SW5wdXQgW3R5cGVdPVwidHlwZVwiIFtmb3JtQ29udHJvbF09XCJjb21wb25lbnRGb3JtQ29udHJvbFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIChrZXlkb3duKT1cIm9uS2V5cHJlc3NlZCgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXModHJ1ZSlcIiAoYmx1cik9XCJvbkZvY3VzKGZhbHNlKVwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiLz5cclxuXHJcbiAgICA8bWF0LWF1dG9jb21wbGV0ZSBhdXRvQWN0aXZlRmlyc3RPcHRpb24gI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj57e29wdGlvbn19PC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gIDxkaXYgI3ByZWZpeD48bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1wcmVmaXhdXCI+PC9uZy1jb250ZW50PjwvZGl2PlxyXG4gIDxkaXYgI3N1ZmZpeD48bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1zdWZmaXhdXCI+PC9uZy1jb250ZW50PjwvZGl2PlxyXG4gIDxtYXQtaWNvbiAqbmdJZj1cInByZWZpeEljb25cIiBjbGFzcz1cInByZWZpeC1pY29uXCIgW21hdFRvb2x0aXBdPVwicHJlZml4SWNvbi50b29sdGlwXCI+e3sgcHJlZml4SWNvbi5pY29uIH19PC9tYXQtaWNvbj5cclxuICA8bWF0LWljb24gKm5nSWY9XCJzdWZmaXhJY29uXCIgY2xhc3M9XCJzdWZmaXgtaWNvblwiIFttYXRUb29sdGlwXT1cInN1ZmZpeEljb24udG9vbHRpcFwiPnt7IHN1ZmZpeEljb24uaWNvbiB9fTwvbWF0LWljb24+XHJcbiAgPHVpLWFjdGlvbi1pY29uIFtzaXplXT1cIidzbWFsbCdcIiBbY29sb3JdPVwiJ3dhcm4nXCIgKm5nSWY9XCJzaG93Q2xlYXJCdXR0b25cIiAoY2xpY2spPVwiY2xlYXJWYWx1ZSgpXCIgW21hdEljb25dPVwiJ2NsZWFyJ1wiIGNsYXNzPVwiY2xlYXItaWNvblwiPjwvdWktYWN0aW9uLWljb24+XHJcbjwvZGl2PlxyXG5cclxuPC91aS1zaW1wbGUtbGF5b3V0PlxyXG4iXX0=
|