@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.
Files changed (77) hide show
  1. package/esm2022/lib/action-button/action-button.component.mjs +99 -99
  2. package/esm2022/lib/action-icon/action-icon.component.mjs +37 -37
  3. package/esm2022/lib/autocomplete/autocomplete.component.mjs +391 -391
  4. package/esm2022/lib/avatar/avatar.component.mjs +34 -34
  5. package/esm2022/lib/button/button.component.mjs +57 -57
  6. package/esm2022/lib/checkbox/checkbox.component.mjs +39 -39
  7. package/esm2022/lib/checkbox-group/checkbox-group.component.mjs +91 -91
  8. package/esm2022/lib/currency/currency.component.mjs +151 -151
  9. package/esm2022/lib/date/date.component.mjs +68 -68
  10. package/esm2022/lib/dialog/dialog.component.mjs +37 -37
  11. package/esm2022/lib/directives/force-visibility/force-visibility.directive.mjs +104 -104
  12. package/esm2022/lib/editor/editor.component.mjs +119 -119
  13. package/esm2022/lib/elements/burger/burger.component.mjs +21 -21
  14. package/esm2022/lib/elements/expander/expander.component.mjs +28 -28
  15. package/esm2022/lib/elements/validation-message/validation-message.component.mjs +47 -47
  16. package/esm2022/lib/file/file.component.mjs +166 -145
  17. package/esm2022/lib/file-uploader/ui-file-uploader.component.mjs +423 -405
  18. package/esm2022/lib/input/input.component.mjs +265 -265
  19. package/esm2022/lib/input-autocomplete/input-autocomplete.component.mjs +277 -277
  20. package/esm2022/lib/layouts/base/ui-base-layout.component.mjs +22 -22
  21. package/esm2022/lib/layouts/base/ui-base.component.mjs +74 -74
  22. package/esm2022/lib/layouts/simple/ui-simple-layout.component.mjs +18 -18
  23. package/esm2022/lib/layouts/simple/ui-simple.component.mjs +166 -166
  24. package/esm2022/lib/radio/radio.component.mjs +21 -21
  25. package/esm2022/lib/radio-group/radio-group.component.mjs +53 -53
  26. package/esm2022/lib/select/select.component.mjs +126 -126
  27. package/esm2022/lib/services/message-box.service.mjs +112 -112
  28. package/esm2022/lib/services/toast.service.mjs +23 -23
  29. package/esm2022/lib/services/ui-file.service.mjs +72 -71
  30. package/esm2022/lib/services/ui-translate.service.mjs +32 -32
  31. package/esm2022/lib/submit-button/submit-button.component.mjs +72 -72
  32. package/esm2022/lib/table/table.component.mjs +97 -97
  33. package/esm2022/lib/text-area/text-area.component.mjs +46 -46
  34. package/esm2022/lib/ui.model.mjs +1 -1
  35. package/esm2022/lib/ui.module.mjs +269 -269
  36. package/esm2022/public-api.mjs +34 -34
  37. package/esm2022/rlucan-ui.mjs +4 -4
  38. package/fesm2022/rlucan-ui.mjs +3329 -3289
  39. package/fesm2022/rlucan-ui.mjs.map +1 -1
  40. package/index.d.ts +5 -5
  41. package/lib/action-button/action-button.component.d.ts +28 -28
  42. package/lib/action-icon/action-icon.component.d.ts +15 -15
  43. package/lib/autocomplete/autocomplete.component.d.ts +57 -57
  44. package/lib/avatar/avatar.component.d.ts +14 -14
  45. package/lib/button/button.component.d.ts +18 -18
  46. package/lib/checkbox/checkbox.component.d.ts +15 -15
  47. package/lib/checkbox-group/checkbox-group.component.d.ts +18 -18
  48. package/lib/currency/currency.component.d.ts +31 -31
  49. package/lib/date/date.component.d.ts +24 -24
  50. package/lib/dialog/dialog.component.d.ts +13 -13
  51. package/lib/directives/force-visibility/force-visibility.directive.d.ts +22 -22
  52. package/lib/editor/editor.component.d.ts +24 -24
  53. package/lib/elements/burger/burger.component.d.ts +9 -9
  54. package/lib/elements/expander/expander.component.d.ts +10 -10
  55. package/lib/elements/validation-message/validation-message.component.d.ts +12 -12
  56. package/lib/file/file.component.d.ts +36 -35
  57. package/lib/file-uploader/ui-file-uploader.component.d.ts +106 -102
  58. package/lib/input/input.component.d.ts +42 -42
  59. package/lib/input-autocomplete/input-autocomplete.component.d.ts +44 -44
  60. package/lib/layouts/base/ui-base-layout.component.d.ts +8 -8
  61. package/lib/layouts/base/ui-base.component.d.ts +23 -23
  62. package/lib/layouts/simple/ui-simple-layout.component.d.ts +8 -8
  63. package/lib/layouts/simple/ui-simple.component.d.ts +40 -40
  64. package/lib/radio/radio.component.d.ts +8 -8
  65. package/lib/radio-group/radio-group.component.d.ts +18 -18
  66. package/lib/select/select.component.d.ts +37 -37
  67. package/lib/services/message-box.service.d.ts +58 -58
  68. package/lib/services/toast.service.d.ts +13 -13
  69. package/lib/services/ui-file.service.d.ts +37 -33
  70. package/lib/services/ui-translate.service.d.ts +11 -11
  71. package/lib/submit-button/submit-button.component.d.ts +21 -21
  72. package/lib/table/table.component.d.ts +36 -36
  73. package/lib/text-area/text-area.component.d.ts +18 -18
  74. package/lib/ui.model.d.ts +2 -2
  75. package/lib/ui.module.d.ts +59 -59
  76. package/package.json +14 -14
  77. package/public-api.d.ts +29 -29
@@ -1,265 +1,265 @@
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 "../layouts/simple/ui-simple-layout.component";
10
- import * as i6 from "../action-icon/action-icon.component";
11
- export class InputComponent extends UiSimpleComponent {
12
- get textAlignClass() {
13
- return `text-align-${this.textAlign}`;
14
- }
15
- get hasPrefix() {
16
- return (this.prefixIcon && this.prefixIcon.icon !== '') || this.prefix?.nativeElement?.innerText !== '' || this.forceHasPrefix;
17
- }
18
- get hasSuffix() {
19
- return (this.suffixIcon && this.suffixIcon.icon !== '') || this.suffix?.nativeElement?.innerText !== '' || this.forceHasSuffix;
20
- }
21
- // control;
22
- // onTouched = () => {};
23
- // onChange = (value) => {};
24
- // get showInvalid(): boolean {
25
- // return true;
26
- // // return this.control.touched && !!this.control.errors;
27
- // }
28
- // get validationMessage(): string {
29
- // // console.log(this.control?.errors);
30
- // let e: any = {code: 'Neznámá chyba'};
31
- // const errors = this.control?.errors || {};
32
- // Object.keys(errors).find(a => {
33
- // e = {code: a, data: errors[a]};
34
- // return true;
35
- // });
36
- // switch (e.code) {
37
- // case 'required':
38
- // return this.translateService.instant('ui.controls.validation.required');
39
- // case 'email':
40
- // return this.translateService.instant('ui.controls.validation.email');
41
- // case 'matDatepickerParse':
42
- // return this.translateService.instant('ui.controls.validation.matDatepickerParse');
43
- // case 'maxlength':
44
- // return this.translateService.instant('ui.controls.validation.maxlength', e.data);
45
- // case 'minlength':
46
- // return this.translateService.instant('ui.controls.validation.minlength', e.data);
47
- // case 'positive':
48
- // return this.translateService.instant(isNaN(Number(e.data)) ? 'ui.controls.validation.invalidNumber' : 'ui.controls.validation.positive');
49
- // case 'custom':
50
- // return this.translateService.instant(e.data);
51
- // default:
52
- // return this.translateService.instant(e.code);
53
- // }
54
- // }
55
- get maxLenRequired() {
56
- return true;
57
- // return this.control.value && (this.control.value.length > (this.validators?.maxLength || 0));
58
- }
59
- constructor(controlContainer) {
60
- super(null, controlContainer);
61
- this.controlContainer = controlContainer;
62
- this.type = 'text';
63
- this.clearButton = false;
64
- this.activeIcons = true;
65
- this.forceHasPrefix = false;
66
- this.forceHasSuffix = false;
67
- this.textAlign = 'left';
68
- this.focusChanged = new EventEmitter();
69
- this.keyPressed = new EventEmitter();
70
- // control = new FormControl();
71
- this.required = false;
72
- this.hasFocus = false;
73
- // this.componentFormControl = new FormControl();
74
- // super();
75
- // super(undefined, /*ngControl*/ translateService);
76
- // super(control);
77
- // console.log(control);
78
- // if (control) {
79
- // control.valueAccessor = this;
80
- // }
81
- // if (ngControl != null) {
82
- // // Setting the value accessor directly (instead of using
83
- // // the providers) to avoid running into a circular import.
84
- // ngControl.valueAccessor = this;
85
- // }
86
- }
87
- get showClearButton() {
88
- return this.clearButton && this.componentFormControl?.value !== '';
89
- }
90
- ngOnInit() {
91
- super.ngOnInit();
92
- // console.log('probiha vubec oninit?');
93
- // if (this.ngControl) {
94
- // console.log('from ngControl....??');
95
- // if (this.formControl) {
96
- // this.componentFormControl = this.formControl;
97
- // } else {
98
- // this.componentFormControl = this.ngControl.control as UntypedFormControl;
99
- // }
100
- // setTimeout(() => {
101
- // this.applyValidators();
102
- // });
103
- // } else {
104
- // const control = this.formControlName ?
105
- // (this.controlContainer as FormGroupDirective).control.get(this.formControlName) : this.formControl;
106
- // this.componentFormControl.setValidators(control.validator);
107
- // this.componentFormControl.valueChanges.subscribe(v => console.log('onitin sub', v));
108
- // control._componentFormControl = this.componentFormControl;
109
- // if (control._markAsTouched === undefined) {
110
- // // control._componentFormControl = this.componentFormControl;
111
- // console.log('overriding markAsTouched for', this.formControlName);
112
- // control._markAsTouched = control.markAsTouched;
113
- // control.markAsTouched = ({onlySelf}: { onlySelf?: boolean } = {}): void => {
114
- // console.log('marking as touched', this.componentFormControl.value, control.value, this.xxx.value, control._componentFormControl.value);
115
- // control._markAsTouched({onlySelf});
116
- // setTimeout(() => control._componentFormControl.markAsTouched(), 1000);
117
- // }
118
- // }
119
- // }
120
- }
121
- clearValue() {
122
- this.componentFormControl?.setValue('');
123
- this.input?.nativeElement.focus();
124
- }
125
- focus() {
126
- this.input?.nativeElement.focus();
127
- }
128
- onFocus(focus) {
129
- setTimeout(() => {
130
- this.hasFocus = focus;
131
- this.focusChanged.emit(focus);
132
- });
133
- }
134
- onKeypressed($event) {
135
- this.keyPressed.emit($event);
136
- }
137
- // registerOnChange(onChange: any): void {
138
- // this.onChange = onChange;
139
- // }
140
- //
141
- // registerOnTouched(onTouched: any): void {
142
- // this.onTouched = onTouched;
143
- // }
144
- // registerOnValidatorChange(fn: () => void): void {
145
- // }
146
- // setDisabledState(isDisabled: boolean): void {
147
- // // isDisabled ? this.control.disable() : this.control.enable();
148
- // }
149
- // validate(control: AbstractControl): ValidationErrors | null {
150
- // // this.control = control;
151
- // // console.log(control, control.value, control.errors);
152
- // if (this.value === 'error') {
153
- // return { customError: 'muj error'}
154
- // } else {
155
- // return null;
156
- // }
157
- // // console.log('custom validate');
158
- // // return null;
159
- // }
160
- //
161
- // writeValue(obj: any): void {
162
- // console.log('writevalue: ', obj);
163
- // this.componentFormControl.setValue(obj);
164
- // // this.value = obj;
165
- // // this.control.setValue(obj);
166
- // }
167
- //
168
- // registerOnChange(fn: any): void {
169
- // }
170
- //
171
- // registerOnTouched(fn: any): void {
172
- // }
173
- //
174
- // setDisabledState(isDisabled: boolean): void {
175
- // }
176
- // modelChange($event: any) {
177
- // console.log($event);
178
- // this.onTouched();
179
- // this.onChange($event)
180
- // }
181
- // validate(control: AbstractControl): ValidationErrors | null {
182
- // console.log(this.label, 'validate');
183
- // return this.componentFormControl.errors;
184
- // // return undefined;
185
- // }
186
- validate(control) {
187
- if (this.parentFormControl) {
188
- return this.parentFormControl._componentFormControl.errors;
189
- }
190
- // console.log('validate', this.componentFormControl.errors);
191
- // // this.componentFormControl.setErrors( { custom: 'xxx' });
192
- // this.componentFormControl.setErrors( this.componentFormControl.errors);
193
- // console.log('validate 2', this.componentFormControl.errors);
194
- // return this.componentFormControl.errors;
195
- // console.log(this.componentFormControl.errors, control.errors, this.parentFormControl.errors, this);
196
- // return this.componentFormControl.errors;
197
- }
198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: InputComponent, deps: [{ token: i1.ControlContainer, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
199
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: InputComponent, selector: "ui-input", inputs: { prefixIcon: "prefixIcon", suffixIcon: "suffixIcon", type: "type", clearButton: "clearButton", activeIcons: "activeIcons", forceHasPrefix: "forceHasPrefix", forceHasSuffix: "forceHasSuffix", textAlign: "textAlign" }, outputs: { focusChanged: "focusChanged", keyPressed: "keyPressed" }, host: { properties: { "class": "this.textAlignClass" } }, providers: [
200
- {
201
- provide: NG_VALUE_ACCESSOR,
202
- multi: true,
203
- useExisting: InputComponent
204
- },
205
- {
206
- provide: NG_VALIDATORS,
207
- multi: true,
208
- useExisting: InputComponent
209
- }
210
- ], 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 [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" />\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.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.UiSimpleLayoutComponent, selector: "ui-simple-layout", inputs: ["ctx"] }, { kind: "component", type: i6.ActionIconComponent, selector: "ui-action-icon", inputs: ["size", "color", "disabled", "busy", "matIcon"] }] }); }
211
- }
212
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: InputComponent, decorators: [{
213
- type: Component,
214
- args: [{ selector: 'ui-input', providers: [
215
- {
216
- provide: NG_VALUE_ACCESSOR,
217
- multi: true,
218
- useExisting: InputComponent
219
- },
220
- {
221
- provide: NG_VALIDATORS,
222
- multi: true,
223
- useExisting: InputComponent
224
- }
225
- ], 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 [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" />\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"] }]
226
- }], ctorParameters: function () { return [{ type: i1.ControlContainer, decorators: [{
227
- type: Optional
228
- }, {
229
- type: Host
230
- }, {
231
- type: SkipSelf
232
- }] }]; }, propDecorators: { prefixIcon: [{
233
- type: Input
234
- }], suffixIcon: [{
235
- type: Input
236
- }], type: [{
237
- type: Input
238
- }], clearButton: [{
239
- type: Input
240
- }], activeIcons: [{
241
- type: Input
242
- }], forceHasPrefix: [{
243
- type: Input
244
- }], forceHasSuffix: [{
245
- type: Input
246
- }], textAlignClass: [{
247
- type: HostBinding,
248
- args: ['class']
249
- }], textAlign: [{
250
- type: Input
251
- }], input: [{
252
- type: ViewChild,
253
- args: ['input']
254
- }], prefix: [{
255
- type: ViewChild,
256
- args: ['prefix', { static: true }]
257
- }], suffix: [{
258
- type: ViewChild,
259
- args: ['suffix', { static: true }]
260
- }], focusChanged: [{
261
- type: Output
262
- }], keyPressed: [{
263
- type: Output
264
- }] } });
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFBRSxXQUFXLEVBQ2pCLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxhQUFhLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7O0FBcUIxRSxNQUFNLE9BQU8sY0FBZSxTQUFRLGlCQUFpQjtJQWtDbkQsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sY0FBYyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQVdELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFNBQVMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNqSSxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsU0FBUyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ2pJLENB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O2dCQUUzQixZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0LCBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFNraXBTZWxmLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBVaVNpbXBsZUNvbXBvbmVudCB9IGZyb20gJy4uL2xheW91dHMvc2ltcGxlL3VpLXNpbXBsZS5jb21wb25lbnQnO1xyXG5cclxudHlwZSBQcmVmaXhTdWZmaXggPSB7IGljb246IHN0cmluZywgdG9vbHRpcD86IHN0cmluZyB9O1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLWlucHV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWyAnLi4vbGF5b3V0cy9zaW1wbGUvdWktc2ltcGxlLWxheW91dC5jb21wb25lbnQuc2NzcycsICcuL2lucHV0LmNvbXBvbmVudC5zY3NzJyBdLFxyXG5cclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgbXVsdGk6IHRydWUsXHJcbiAgICB1c2VFeGlzdGluZzogSW5wdXRDb21wb25lbnRcclxuICB9LFxyXG4gIHtcclxuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICBtdWx0aTogdHJ1ZSxcclxuICAgIHVzZUV4aXN0aW5nOiBJbnB1dENvbXBvbmVudFxyXG4gIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dENvbXBvbmVudCBleHRlbmRzIFVpU2ltcGxlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQgeyAvLyB9LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7IC8vIH0sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IgeyAvLyB9LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgLy8gVWlTaW1wbGVDb21wb25lbnQgPSBJbnB1dENvbXBvbmVudDtcclxuXHJcbiAgLy8gQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICAvLyBASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIHVzZUlucHV0TWVzc2FnZXM6ICduZXZlcicgfCAnYWx3YXlzJyB8ICdvbmRlbWFuZCcgPSAnYWx3YXlzJztcclxuICAvLyBASW5wdXQoKSBoaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgdmFsaWRhdG9yczogVWlWYWxpZGF0b3JzIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIHNpemU6ICdzbWFsbCcgfCAnc21hbGxlcicgfCAnbm9ybWFsJyB8ICdsYXJnZXInIHwgJ2xhcmdlJyA9ICdub3JtYWwnO1xyXG4gIC8vIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTtcclxuXHJcbiAgLy8gY29tcG9uZW50Rm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAvL1xyXG4gIC8vIG5nQ29udHJvbDogTmdDb250cm9sO1xyXG4gIC8vXHJcbiAgLy8gQElucHV0KCkgdmFsaWRhdG9yczogVWlWYWxpZGF0b3JzIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTtcclxuICAvL1xyXG4gIC8vIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XHJcbiAgLy8gQElucHV0KCkgbGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSB1c2VJbnB1dE1lc3NhZ2VzOiAnbmV2ZXInIHwgJ2Fsd2F5cycgfCAnb25kZW1hbmQnID0gJ2Fsd2F5cyc7XHJcbiAgLy8gQElucHV0KCkgaGludD86IHN0cmluZztcclxuICAvLyBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ3NtYWxsZXInIHwgJ25vcm1hbCcgfCAnbGFyZ2VyJyB8ICdsYXJnZScgPSAnbm9ybWFsJztcclxuXHJcbiAgQElucHV0KCkgcHJlZml4SWNvbjogUHJlZml4U3VmZml4O1xyXG4gIEBJbnB1dCgpIHN1ZmZpeEljb246IFByZWZpeFN1ZmZpeDtcclxuICBASW5wdXQoKSB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdwYXNzd29yZCcgPSAndGV4dCc7XHJcbiAgQElucHV0KCkgY2xlYXJCdXR0b24gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhY3RpdmVJY29ucyA9IHRydWU7XHJcbiAgQElucHV0KCkgZm9yY2VIYXNQcmVmaXggPSBmYWxzZTtcclxuICBASW5wdXQoKSBmb3JjZUhhc1N1ZmZpeCA9IGZhbHNlO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcclxuICBnZXQgdGV4dEFsaWduQ2xhc3MoKSB7XHJcbiAgICByZXR1cm4gYHRleHQtYWxpZ24tJHt0aGlzLnRleHRBbGlnbn1gO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgdGV4dEFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcgPSAnbGVmdCc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcbiAgQFZpZXdDaGlsZCgncHJlZml4JywgeyBzdGF0aWM6IHRydWUgfSkgcHJlZml4OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG4gIEBWaWV3Q2hpbGQoJ3N1ZmZpeCcsIHsgc3RhdGljOiB0cnVlIH0pIHN1ZmZpeDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpIGZvY3VzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkga2V5UHJlc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcclxuXHJcbiAgZ2V0IGhhc1ByZWZpeCgpIHtcclxuICAgIHJldHVybiAodGhpcy5wcmVmaXhJY29uICYmIHRoaXMucHJlZml4SWNvbi5pY29uICE9PSAnJykgfHwgdGhpcy5wcmVmaXg/Lm5hdGl2ZUVsZW1lbnQ/LmlubmVyVGV4dCAhPT0gJycgfHwgdGhpcy5mb3JjZUhhc1ByZWZpeDtcclxuICB9XHJcblxyXG4gIGdldCBoYXNTdWZmaXgoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuc3VmZml4SWNvbiAmJiB0aGlzLnN1ZmZpeEljb24uaWNvbiAhPT0gJycpIHx8IHRoaXMuc3VmZml4Py5uYXRpdmVFbGVtZW50Py5pbm5lclRleHQgIT09ICcnIHx8IHRoaXMuZm9yY2VIYXNTdWZmaXg7XHJcbiAgfVxyXG5cclxuICAvLyBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcblxyXG4gIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgaGFzRm9jdXMgPSBmYWxzZTtcclxuXHJcbiAgdmFsdWU6IHN0cmluZztcclxuXHJcbiAgLy8gY29udHJvbDtcclxuXHJcblxyXG4gIC8vIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xyXG4gIC8vIG9uQ2hhbmdlID0gKHZhbHVlKSA9PiB7fTtcclxuXHJcbiAgLy8gZ2V0IHNob3dJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gIC8vICAgcmV0dXJuIHRydWU7XHJcbiAgLy8gICAvLyByZXR1cm4gdGhpcy5jb250cm9sLnRvdWNoZWQgJiYgISF0aGlzLmNvbnRyb2wuZXJyb3JzO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbnRyb2w/LmVycm9ycyk7XHJcbiAgLy8gICBsZXQgZTogYW55ID0ge2NvZGU6ICdOZXpuw6Ftw6EgY2h5YmEnfTtcclxuICAvLyAgIGNvbnN0IGVycm9ycyA9IHRoaXMuY29udHJvbD8uZXJyb3JzIHx8IHt9O1xyXG4gIC8vICAgT2JqZWN0LmtleXMoZXJyb3JzKS5maW5kKGEgPT4ge1xyXG4gIC8vICAgICBlID0ge2NvZGU6IGEsIGRhdGE6IGVycm9yc1thXX07XHJcbiAgLy8gICAgIHJldHVybiB0cnVlO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gICBzd2l0Y2ggKGUuY29kZSkge1xyXG4gIC8vICAgICBjYXNlICdyZXF1aXJlZCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLnJlcXVpcmVkJyk7XHJcbiAgLy8gICAgIGNhc2UgJ2VtYWlsJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24uZW1haWwnKTtcclxuICAvLyAgICAgY2FzZSAnbWF0RGF0ZXBpY2tlclBhcnNlJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ubWF0RGF0ZXBpY2tlclBhcnNlJyk7XHJcbiAgLy8gICAgIGNhc2UgJ21heGxlbmd0aCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1heGxlbmd0aCcsIGUuZGF0YSk7XHJcbiAgLy8gICAgIGNhc2UgJ21pbmxlbmd0aCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1pbmxlbmd0aCcsIGUuZGF0YSk7XHJcbiAgLy8gICAgIGNhc2UgJ3Bvc2l0aXZlJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoaXNOYU4oTnVtYmVyKGUuZGF0YSkpID8gJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24uaW52YWxpZE51bWJlcicgOiAndWkuY29udHJvbHMudmFsaWRhdGlvbi5wb3NpdGl2ZScpO1xyXG4gIC8vICAgICBjYXNlICdjdXN0b20nOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmRhdGEpO1xyXG4gIC8vICAgICBkZWZhdWx0OlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmNvZGUpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IG1heExlblJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5jb250cm9sLnZhbHVlICYmICh0aGlzLmNvbnRyb2wudmFsdWUubGVuZ3RoID4gKHRoaXMudmFsaWRhdG9ycz8ubWF4TGVuZ3RoIHx8IDApKTtcclxuICB9XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASG9zdCgpIEBTa2lwU2VsZigpIHByb3RlY3RlZCBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxyXG4gICAgLypcclxuICAgIGJ1ZCBwcmVzIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2w6IE5nQ29udHJvbCBhIGNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXMgPT4genRyYXRpbWUgYWxlIGN1c3RvbSB2YWxpZGFjaVxyXG4gICAgYW5lYm8gcHJlcyBESSBqYWtvIHByb3ZpZGVycyBhIHBhayB0aGlzLmNvbnRyb2wgPSB2aXogbmdPbkluaXQgLSBwb2t1ZCBqZWogdnViZWMgcG90cmVidWplbVxyXG5cclxuICAgICAqL1xyXG4gICAgLy8gcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgIC8vIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIC8vIEBTZWxmKCkgcHJpdmF0ZSBjb250cm9sRGlyZWN0aXZlOiBOZ0NvbnRyb2wsXHJcbiAgICkge1xyXG4gICAgc3VwZXIobnVsbCwgY29udHJvbENvbnRhaW5lcik7XHJcblxyXG4gICAgLy8gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgLy8gc3VwZXIoKTtcclxuICAvLyAgc3VwZXIodW5kZWZpbmVkLCAvKm5nQ29udHJvbCovIHRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgLy8gc3VwZXIoY29udHJvbCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhjb250cm9sKTtcclxuICAgIC8vIGlmIChjb250cm9sKSB7XHJcbiAgICAvLyAgIGNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKG5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAvLyAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXHJcbiAgICAvLyAgIC8vIHRoZSBwcm92aWRlcnMpIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydC5cclxuICAgIC8vICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNsZWFyQnV0dG9uICYmIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2w/LnZhbHVlICE9PSAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygncHJvYmloYSB2dWJlYyBvbmluaXQ/Jyk7XHJcbiAgICAvLyBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgIC8vICAgY29uc29sZS5sb2coJ2Zyb20gbmdDb250cm9sLi4uLj8/Jyk7XHJcbiAgICAvLyAgIGlmICh0aGlzLmZvcm1Db250cm9sKSB7XHJcbiAgICAvLyAgICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCA9IHRoaXMubmdDb250cm9sLmNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuYXBwbHlWYWxpZGF0b3JzKCk7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2xOYW1lID9cclxuICAgIC8vICAgICAodGhpcy5jb250cm9sQ29udGFpbmVyIGFzIEZvcm1Hcm91cERpcmVjdGl2ZSkuY29udHJvbC5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIDogdGhpcy5mb3JtQ29udHJvbDtcclxuICAgIC8vICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKGNvbnRyb2wudmFsaWRhdG9yKTtcclxuICAgIC8vICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4gY29uc29sZS5sb2coJ29uaXRpbiBzdWInLCB2KSk7XHJcbiAgICAvLyAgIGNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sID0gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbDtcclxuICAgIC8vICAgaWYgKGNvbnRyb2wuX21hcmtBc1RvdWNoZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAgIC8vIGNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sID0gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbDtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZygnb3ZlcnJpZGluZyBtYXJrQXNUb3VjaGVkIGZvcicsIHRoaXMuZm9ybUNvbnRyb2xOYW1lKTtcclxuICAgIC8vICAgICBjb250cm9sLl9tYXJrQXNUb3VjaGVkID0gY29udHJvbC5tYXJrQXNUb3VjaGVkO1xyXG4gICAgLy8gICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCA9ICh7b25seVNlbGZ9OiB7IG9ubHlTZWxmPzogYm9vbGVhbiB9ID0ge30pOiB2b2lkID0+IHtcclxuICAgIC8vICAgICAgIGNvbnNvbGUubG9nKCdtYXJraW5nIGFzIHRvdWNoZWQnLCB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnZhbHVlLCBjb250cm9sLnZhbHVlLCB0aGlzLnh4eC52YWx1ZSwgY29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gICAgLy8gICAgICAgY29udHJvbC5fbWFya0FzVG91Y2hlZCh7b25seVNlbGZ9KTtcclxuICAgIC8vICAgICAgIHNldFRpbWVvdXQoKCkgPT4gY29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpLCAxMDAwKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGNsZWFyVmFsdWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoZm9jdXM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhhc0ZvY3VzID0gZm9jdXM7XHJcbiAgICAgIHRoaXMuZm9jdXNDaGFuZ2VkLmVtaXQoZm9jdXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbktleXByZXNzZWQoJGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMua2V5UHJlc3NlZC5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICAvLyByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiBhbnkpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IGFueSk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XHJcbiAgLy8gfVxyXG5cclxuICAvLyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAvLyAgIC8vIGlzRGlzYWJsZWQgPyB0aGlzLmNvbnRyb2wuZGlzYWJsZSgpIDogdGhpcy5jb250cm9sLmVuYWJsZSgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIC8vICAgLy8gdGhpcy5jb250cm9sID0gY29udHJvbDtcclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKGNvbnRyb2wsIGNvbnRyb2wudmFsdWUsIGNvbnRyb2wuZXJyb3JzKTtcclxuICAvLyAgIGlmICh0aGlzLnZhbHVlID09PSAnZXJyb3InKSB7XHJcbiAgLy8gICAgIHJldHVybiB7IGN1c3RvbUVycm9yOiAnbXVqIGVycm9yJ31cclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHJldHVybiBudWxsO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgLy8gY29uc29sZS5sb2coJ2N1c3RvbSB2YWxpZGF0ZScpO1xyXG4gIC8vICAgLy8gcmV0dXJuIG51bGw7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gIC8vICAgY29uc29sZS5sb2coJ3dyaXRldmFsdWU6ICcsIG9iaik7XHJcbiAgLy8gICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldFZhbHVlKG9iaik7XHJcbiAgLy8gICAvLyB0aGlzLnZhbHVlID0gb2JqO1xyXG4gIC8vICAgLy8gdGhpcy5jb250cm9sLnNldFZhbHVlKG9iaik7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gbW9kZWxDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKCRldmVudCk7XHJcbiAgLy8gICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIC8vICAgdGhpcy5vbkNoYW5nZSgkZXZlbnQpXHJcbiAgLy8gfVxyXG5cclxuICAvLyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxhYmVsLCAndmFsaWRhdGUnKTtcclxuICAvLyAgIHJldHVybiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycztcclxuICAvLyAgIC8vIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgLy8gfVxyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnRGb3JtQ29udHJvbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnRGb3JtQ29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnMpO1xyXG4gICAgLy8gLy8gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoIHsgY3VzdG9tOiAneHh4JyB9KTtcclxuICAgIC8vIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKCB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdGUgMicsIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzKTtcclxuICAgIC8vIHJldHVybiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycztcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzLCBjb250cm9sLmVycm9ycywgdGhpcy5wYXJlbnRGb3JtQ29udHJvbC5lcnJvcnMsIHRoaXMpO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gIH1cclxufVxyXG5cclxuIiwiPHVpLXNpbXBsZS1sYXlvdXQgW2N0eF09XCJ0aGlzXCI+XHJcblxyXG48ZGl2IGNsYXNzPVwiY29udHJvbC1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7J2hhcy1zdWZmaXgnOiBoYXNTdWZmaXgsICdoYXMtcHJlZml4JzogaGFzUHJlZml4LCAnaGFzLWNsZWFyLWljb24nOiBzaG93Q2xlYXJCdXR0b24sICdhY3RpdmUtaWNvbnMnOiBhY3RpdmVJY29ucywgJ2hhcy1mb2N1cyc6IGhhc0ZvY3VzfVwiPlxyXG4gIDxpbnB1dCAjaW5wdXQgW3R5cGVdPVwidHlwZVwiIFtmb3JtQ29udHJvbF09XCJjb21wb25lbnRGb3JtQ29udHJvbFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIChrZXlkb3duKT1cIm9uS2V5cHJlc3NlZCgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXModHJ1ZSlcIiAoYmx1cik9XCJvbkZvY3VzKGZhbHNlKVwiIC8+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 "../layouts/simple/ui-simple-layout.component";
10
+ import * as i6 from "../action-icon/action-icon.component";
11
+ export class InputComponent extends UiSimpleComponent {
12
+ get textAlignClass() {
13
+ return `text-align-${this.textAlign}`;
14
+ }
15
+ get hasPrefix() {
16
+ return (this.prefixIcon && this.prefixIcon.icon !== '') || this.prefix?.nativeElement?.innerText !== '' || this.forceHasPrefix;
17
+ }
18
+ get hasSuffix() {
19
+ return (this.suffixIcon && this.suffixIcon.icon !== '') || this.suffix?.nativeElement?.innerText !== '' || this.forceHasSuffix;
20
+ }
21
+ // control;
22
+ // onTouched = () => {};
23
+ // onChange = (value) => {};
24
+ // get showInvalid(): boolean {
25
+ // return true;
26
+ // // return this.control.touched && !!this.control.errors;
27
+ // }
28
+ // get validationMessage(): string {
29
+ // // console.log(this.control?.errors);
30
+ // let e: any = {code: 'Neznámá chyba'};
31
+ // const errors = this.control?.errors || {};
32
+ // Object.keys(errors).find(a => {
33
+ // e = {code: a, data: errors[a]};
34
+ // return true;
35
+ // });
36
+ // switch (e.code) {
37
+ // case 'required':
38
+ // return this.translateService.instant('ui.controls.validation.required');
39
+ // case 'email':
40
+ // return this.translateService.instant('ui.controls.validation.email');
41
+ // case 'matDatepickerParse':
42
+ // return this.translateService.instant('ui.controls.validation.matDatepickerParse');
43
+ // case 'maxlength':
44
+ // return this.translateService.instant('ui.controls.validation.maxlength', e.data);
45
+ // case 'minlength':
46
+ // return this.translateService.instant('ui.controls.validation.minlength', e.data);
47
+ // case 'positive':
48
+ // return this.translateService.instant(isNaN(Number(e.data)) ? 'ui.controls.validation.invalidNumber' : 'ui.controls.validation.positive');
49
+ // case 'custom':
50
+ // return this.translateService.instant(e.data);
51
+ // default:
52
+ // return this.translateService.instant(e.code);
53
+ // }
54
+ // }
55
+ get maxLenRequired() {
56
+ return true;
57
+ // return this.control.value && (this.control.value.length > (this.validators?.maxLength || 0));
58
+ }
59
+ constructor(controlContainer) {
60
+ super(null, controlContainer);
61
+ this.controlContainer = controlContainer;
62
+ this.type = 'text';
63
+ this.clearButton = false;
64
+ this.activeIcons = true;
65
+ this.forceHasPrefix = false;
66
+ this.forceHasSuffix = false;
67
+ this.textAlign = 'left';
68
+ this.focusChanged = new EventEmitter();
69
+ this.keyPressed = new EventEmitter();
70
+ // control = new FormControl();
71
+ this.required = false;
72
+ this.hasFocus = false;
73
+ // this.componentFormControl = new FormControl();
74
+ // super();
75
+ // super(undefined, /*ngControl*/ translateService);
76
+ // super(control);
77
+ // console.log(control);
78
+ // if (control) {
79
+ // control.valueAccessor = this;
80
+ // }
81
+ // if (ngControl != null) {
82
+ // // Setting the value accessor directly (instead of using
83
+ // // the providers) to avoid running into a circular import.
84
+ // ngControl.valueAccessor = this;
85
+ // }
86
+ }
87
+ get showClearButton() {
88
+ return this.clearButton && this.componentFormControl?.value !== '';
89
+ }
90
+ ngOnInit() {
91
+ super.ngOnInit();
92
+ // console.log('probiha vubec oninit?');
93
+ // if (this.ngControl) {
94
+ // console.log('from ngControl....??');
95
+ // if (this.formControl) {
96
+ // this.componentFormControl = this.formControl;
97
+ // } else {
98
+ // this.componentFormControl = this.ngControl.control as UntypedFormControl;
99
+ // }
100
+ // setTimeout(() => {
101
+ // this.applyValidators();
102
+ // });
103
+ // } else {
104
+ // const control = this.formControlName ?
105
+ // (this.controlContainer as FormGroupDirective).control.get(this.formControlName) : this.formControl;
106
+ // this.componentFormControl.setValidators(control.validator);
107
+ // this.componentFormControl.valueChanges.subscribe(v => console.log('onitin sub', v));
108
+ // control._componentFormControl = this.componentFormControl;
109
+ // if (control._markAsTouched === undefined) {
110
+ // // control._componentFormControl = this.componentFormControl;
111
+ // console.log('overriding markAsTouched for', this.formControlName);
112
+ // control._markAsTouched = control.markAsTouched;
113
+ // control.markAsTouched = ({onlySelf}: { onlySelf?: boolean } = {}): void => {
114
+ // console.log('marking as touched', this.componentFormControl.value, control.value, this.xxx.value, control._componentFormControl.value);
115
+ // control._markAsTouched({onlySelf});
116
+ // setTimeout(() => control._componentFormControl.markAsTouched(), 1000);
117
+ // }
118
+ // }
119
+ // }
120
+ }
121
+ clearValue() {
122
+ this.componentFormControl?.setValue('');
123
+ this.input?.nativeElement.focus();
124
+ }
125
+ focus() {
126
+ this.input?.nativeElement.focus();
127
+ }
128
+ onFocus(focus) {
129
+ setTimeout(() => {
130
+ this.hasFocus = focus;
131
+ this.focusChanged.emit(focus);
132
+ });
133
+ }
134
+ onKeypressed($event) {
135
+ this.keyPressed.emit($event);
136
+ }
137
+ // registerOnChange(onChange: any): void {
138
+ // this.onChange = onChange;
139
+ // }
140
+ //
141
+ // registerOnTouched(onTouched: any): void {
142
+ // this.onTouched = onTouched;
143
+ // }
144
+ // registerOnValidatorChange(fn: () => void): void {
145
+ // }
146
+ // setDisabledState(isDisabled: boolean): void {
147
+ // // isDisabled ? this.control.disable() : this.control.enable();
148
+ // }
149
+ // validate(control: AbstractControl): ValidationErrors | null {
150
+ // // this.control = control;
151
+ // // console.log(control, control.value, control.errors);
152
+ // if (this.value === 'error') {
153
+ // return { customError: 'muj error'}
154
+ // } else {
155
+ // return null;
156
+ // }
157
+ // // console.log('custom validate');
158
+ // // return null;
159
+ // }
160
+ //
161
+ // writeValue(obj: any): void {
162
+ // console.log('writevalue: ', obj);
163
+ // this.componentFormControl.setValue(obj);
164
+ // // this.value = obj;
165
+ // // this.control.setValue(obj);
166
+ // }
167
+ //
168
+ // registerOnChange(fn: any): void {
169
+ // }
170
+ //
171
+ // registerOnTouched(fn: any): void {
172
+ // }
173
+ //
174
+ // setDisabledState(isDisabled: boolean): void {
175
+ // }
176
+ // modelChange($event: any) {
177
+ // console.log($event);
178
+ // this.onTouched();
179
+ // this.onChange($event)
180
+ // }
181
+ // validate(control: AbstractControl): ValidationErrors | null {
182
+ // console.log(this.label, 'validate');
183
+ // return this.componentFormControl.errors;
184
+ // // return undefined;
185
+ // }
186
+ validate(control) {
187
+ if (this.parentFormControl) {
188
+ return this.parentFormControl._componentFormControl.errors;
189
+ }
190
+ // console.log('validate', this.componentFormControl.errors);
191
+ // // this.componentFormControl.setErrors( { custom: 'xxx' });
192
+ // this.componentFormControl.setErrors( this.componentFormControl.errors);
193
+ // console.log('validate 2', this.componentFormControl.errors);
194
+ // return this.componentFormControl.errors;
195
+ // console.log(this.componentFormControl.errors, control.errors, this.parentFormControl.errors, this);
196
+ // return this.componentFormControl.errors;
197
+ }
198
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: InputComponent, deps: [{ token: i1.ControlContainer, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: InputComponent, selector: "ui-input", inputs: { prefixIcon: "prefixIcon", suffixIcon: "suffixIcon", type: "type", clearButton: "clearButton", activeIcons: "activeIcons", forceHasPrefix: "forceHasPrefix", forceHasSuffix: "forceHasSuffix", textAlign: "textAlign" }, outputs: { focusChanged: "focusChanged", keyPressed: "keyPressed" }, host: { properties: { "class": "this.textAlignClass" } }, providers: [
200
+ {
201
+ provide: NG_VALUE_ACCESSOR,
202
+ multi: true,
203
+ useExisting: InputComponent
204
+ },
205
+ {
206
+ provide: NG_VALIDATORS,
207
+ multi: true,
208
+ useExisting: InputComponent
209
+ }
210
+ ], 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 [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" />\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.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.UiSimpleLayoutComponent, selector: "ui-simple-layout", inputs: ["ctx"] }, { kind: "component", type: i6.ActionIconComponent, selector: "ui-action-icon", inputs: ["size", "color", "disabled", "busy", "matIcon"] }] }); }
211
+ }
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: InputComponent, decorators: [{
213
+ type: Component,
214
+ args: [{ selector: 'ui-input', providers: [
215
+ {
216
+ provide: NG_VALUE_ACCESSOR,
217
+ multi: true,
218
+ useExisting: InputComponent
219
+ },
220
+ {
221
+ provide: NG_VALIDATORS,
222
+ multi: true,
223
+ useExisting: InputComponent
224
+ }
225
+ ], 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 [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" />\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"] }]
226
+ }], ctorParameters: () => [{ type: i1.ControlContainer, decorators: [{
227
+ type: Optional
228
+ }, {
229
+ type: Host
230
+ }, {
231
+ type: SkipSelf
232
+ }] }], propDecorators: { prefixIcon: [{
233
+ type: Input
234
+ }], suffixIcon: [{
235
+ type: Input
236
+ }], type: [{
237
+ type: Input
238
+ }], clearButton: [{
239
+ type: Input
240
+ }], activeIcons: [{
241
+ type: Input
242
+ }], forceHasPrefix: [{
243
+ type: Input
244
+ }], forceHasSuffix: [{
245
+ type: Input
246
+ }], textAlignClass: [{
247
+ type: HostBinding,
248
+ args: ['class']
249
+ }], textAlign: [{
250
+ type: Input
251
+ }], input: [{
252
+ type: ViewChild,
253
+ args: ['input']
254
+ }], prefix: [{
255
+ type: ViewChild,
256
+ args: ['prefix', { static: true }]
257
+ }], suffix: [{
258
+ type: ViewChild,
259
+ args: ['suffix', { static: true }]
260
+ }], focusChanged: [{
261
+ type: Output
262
+ }], keyPressed: [{
263
+ type: Output
264
+ }] } });
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFBRSxXQUFXLEVBQ2pCLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxhQUFhLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7O0FBcUIxRSxNQUFNLE9BQU8sY0FBZSxTQUFRLGlCQUFpQjtJQWtDbkQsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sY0FBYyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQVdELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFNBQVMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNqSSxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsU0FBUyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ2pJLENB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LElBQUksRUFBRTtnQkFFM0IsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdCwgSG9zdEJpbmRpbmcsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBTa2lwU2VsZixcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVWlTaW1wbGVDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL3NpbXBsZS91aS1zaW1wbGUuY29tcG9uZW50JztcclxuXHJcbnR5cGUgUHJlZml4U3VmZml4ID0geyBpY29uOiBzdHJpbmcsIHRvb2x0aXA/OiBzdHJpbmcgfTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsgJy4uL2xheW91dHMvc2ltcGxlL3VpLXNpbXBsZS1sYXlvdXQuY29tcG9uZW50LnNjc3MnLCAnLi9pbnB1dC5jb21wb25lbnQuc2NzcycgXSxcclxuXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIG11bHRpOiB0cnVlLFxyXG4gICAgdXNlRXhpc3Rpbmc6IElucHV0Q29tcG9uZW50XHJcbiAgfSxcclxuICB7XHJcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgbXVsdGk6IHRydWUsXHJcbiAgICB1c2VFeGlzdGluZzogSW5wdXRDb21wb25lbnRcclxuICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBVaVNpbXBsZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0IHsgLy8gfSwgQ29udHJvbFZhbHVlQWNjZXNzb3IgeyAvLyB9LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHsgLy8gfSwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIC8vIFVpU2ltcGxlQ29tcG9uZW50ID0gSW5wdXRDb21wb25lbnQ7XHJcblxyXG4gIC8vIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XHJcbiAgLy8gQElucHV0KCkgbGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSB1c2VJbnB1dE1lc3NhZ2VzOiAnbmV2ZXInIHwgJ2Fsd2F5cycgfCAnb25kZW1hbmQnID0gJ2Fsd2F5cyc7XHJcbiAgLy8gQElucHV0KCkgaGludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIHZhbGlkYXRvcnM6IFVpVmFsaWRhdG9ycyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ3NtYWxsZXInIHwgJ25vcm1hbCcgfCAnbGFyZ2VyJyB8ICdsYXJnZScgPSAnbm9ybWFsJztcclxuICAvLyBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU7XHJcblxyXG4gIC8vIGNvbXBvbmVudEZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgLy9cclxuICAvLyBuZ0NvbnRyb2w6IE5nQ29udHJvbDtcclxuICAvL1xyXG4gIC8vIEBJbnB1dCgpIHZhbGlkYXRvcnM6IFVpVmFsaWRhdG9ycyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU7XHJcbiAgLy9cclxuICAvLyBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xyXG4gIC8vIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgdXNlSW5wdXRNZXNzYWdlczogJ25ldmVyJyB8ICdhbHdheXMnIHwgJ29uZGVtYW5kJyA9ICdhbHdheXMnO1xyXG4gIC8vIEBJbnB1dCgpIGhpbnQ/OiBzdHJpbmc7XHJcbiAgLy8gQElucHV0KCkgc2l6ZTogJ3NtYWxsJyB8ICdzbWFsbGVyJyB8ICdub3JtYWwnIHwgJ2xhcmdlcicgfCAnbGFyZ2UnID0gJ25vcm1hbCc7XHJcblxyXG4gIEBJbnB1dCgpIHByZWZpeEljb246IFByZWZpeFN1ZmZpeDtcclxuICBASW5wdXQoKSBzdWZmaXhJY29uOiBQcmVmaXhTdWZmaXg7XHJcbiAgQElucHV0KCkgdHlwZTogJ3RleHQnIHwgJ251bWJlcicgfCAncGFzc3dvcmQnID0gJ3RleHQnO1xyXG4gIEBJbnB1dCgpIGNsZWFyQnV0dG9uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWN0aXZlSWNvbnMgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGZvcmNlSGFzUHJlZml4ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZm9yY2VIYXNTdWZmaXggPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgZ2V0IHRleHRBbGlnbkNsYXNzKCkge1xyXG4gICAgcmV0dXJuIGB0ZXh0LWFsaWduLSR7dGhpcy50ZXh0QWxpZ259YDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHRleHRBbGlnbjogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnID0gJ2xlZnQnO1xyXG5cclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG4gIEBWaWV3Q2hpbGQoJ3ByZWZpeCcsIHsgc3RhdGljOiB0cnVlIH0pIHByZWZpeDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcclxuICBAVmlld0NoaWxkKCdzdWZmaXgnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWZmaXg6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKSBmb2N1c0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGtleVByZXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XHJcblxyXG4gIGdldCBoYXNQcmVmaXgoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMucHJlZml4SWNvbiAmJiB0aGlzLnByZWZpeEljb24uaWNvbiAhPT0gJycpIHx8IHRoaXMucHJlZml4Py5uYXRpdmVFbGVtZW50Py5pbm5lclRleHQgIT09ICcnIHx8IHRoaXMuZm9yY2VIYXNQcmVmaXg7XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzU3VmZml4KCkge1xyXG4gICAgcmV0dXJuICh0aGlzLnN1ZmZpeEljb24gJiYgdGhpcy5zdWZmaXhJY29uLmljb24gIT09ICcnKSB8fCB0aGlzLnN1ZmZpeD8ubmF0aXZlRWxlbWVudD8uaW5uZXJUZXh0ICE9PSAnJyB8fCB0aGlzLmZvcmNlSGFzU3VmZml4O1xyXG4gIH1cclxuXHJcbiAgLy8gY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG5cclxuICByZXF1aXJlZCA9IGZhbHNlO1xyXG4gIGhhc0ZvY3VzID0gZmFsc2U7XHJcblxyXG4gIHZhbHVlOiBzdHJpbmc7XHJcblxyXG4gIC8vIGNvbnRyb2w7XHJcblxyXG5cclxuICAvLyBvblRvdWNoZWQgPSAoKSA9PiB7fTtcclxuICAvLyBvbkNoYW5nZSA9ICh2YWx1ZSkgPT4ge307XHJcblxyXG4gIC8vIGdldCBzaG93SW52YWxpZCgpOiBib29sZWFuIHtcclxuICAvLyAgIHJldHVybiB0cnVlO1xyXG4gIC8vICAgLy8gcmV0dXJuIHRoaXMuY29udHJvbC50b3VjaGVkICYmICEhdGhpcy5jb250cm9sLmVycm9ycztcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gIC8vICAgLy8gY29uc29sZS5sb2codGhpcy5jb250cm9sPy5lcnJvcnMpO1xyXG4gIC8vICAgbGV0IGU6IGFueSA9IHtjb2RlOiAnTmV6bsOhbcOhIGNoeWJhJ307XHJcbiAgLy8gICBjb25zdCBlcnJvcnMgPSB0aGlzLmNvbnRyb2w/LmVycm9ycyB8fCB7fTtcclxuICAvLyAgIE9iamVjdC5rZXlzKGVycm9ycykuZmluZChhID0+IHtcclxuICAvLyAgICAgZSA9IHtjb2RlOiBhLCBkYXRhOiBlcnJvcnNbYV19O1xyXG4gIC8vICAgICByZXR1cm4gdHJ1ZTtcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgc3dpdGNoIChlLmNvZGUpIHtcclxuICAvLyAgICAgY2FzZSAncmVxdWlyZWQnOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudmFsaWRhdGlvbi5yZXF1aXJlZCcpO1xyXG4gIC8vICAgICBjYXNlICdlbWFpbCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLmVtYWlsJyk7XHJcbiAgLy8gICAgIGNhc2UgJ21hdERhdGVwaWNrZXJQYXJzZSc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1hdERhdGVwaWNrZXJQYXJzZScpO1xyXG4gIC8vICAgICBjYXNlICdtYXhsZW5ndGgnOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudmFsaWRhdGlvbi5tYXhsZW5ndGgnLCBlLmRhdGEpO1xyXG4gIC8vICAgICBjYXNlICdtaW5sZW5ndGgnOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudmFsaWRhdGlvbi5taW5sZW5ndGgnLCBlLmRhdGEpO1xyXG4gIC8vICAgICBjYXNlICdwb3NpdGl2ZSc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGlzTmFOKE51bWJlcihlLmRhdGEpKSA/ICd1aS5jb250cm9scy52YWxpZGF0aW9uLmludmFsaWROdW1iZXInIDogJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ucG9zaXRpdmUnKTtcclxuICAvLyAgICAgY2FzZSAnY3VzdG9tJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZS5kYXRhKTtcclxuICAvLyAgICAgZGVmYXVsdDpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZS5jb2RlKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGdldCBtYXhMZW5SZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuY29udHJvbC52YWx1ZSAmJiAodGhpcy5jb250cm9sLnZhbHVlLmxlbmd0aCA+ICh0aGlzLnZhbGlkYXRvcnM/Lm1heExlbmd0aCB8fCAwKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBwcm90ZWN0ZWQgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgIC8qXHJcbiAgICBidWQgcHJlcyBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sOiBOZ0NvbnRyb2wgYSBjb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzID0+IHp0cmF0aW1lIGFsZSBjdXN0b20gdmFsaWRhY2lcclxuICAgIGFuZWJvIHByZXMgREkgamFrbyBwcm92aWRlcnMgYSBwYWsgdGhpcy5jb250cm9sID0gdml6IG5nT25Jbml0IC0gcG9rdWQgamVqIHZ1YmVjIHBvdHJlYnVqZW1cclxuXHJcbiAgICAgKi9cclxuICAgIC8vIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAvLyBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICAvLyBAU2VsZigpIHByaXZhdGUgY29udHJvbERpcmVjdGl2ZTogTmdDb250cm9sLFxyXG4gICApIHtcclxuICAgIHN1cGVyKG51bGwsIGNvbnRyb2xDb250YWluZXIpO1xyXG5cclxuICAgIC8vIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICAgIC8vIHN1cGVyKCk7XHJcbiAgLy8gIHN1cGVyKHVuZGVmaW5lZCwgLypuZ0NvbnRyb2wqLyB0cmFuc2xhdGVTZXJ2aWNlKTtcclxuICAgIC8vIHN1cGVyKGNvbnRyb2wpO1xyXG4gICAgLy8gY29uc29sZS5sb2coY29udHJvbCk7XHJcbiAgICAvLyBpZiAoY29udHJvbCkge1xyXG4gICAgLy8gICBjb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmIChuZ0NvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgLy8gICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSBhY2Nlc3NvciBkaXJlY3RseSAoaW5zdGVhZCBvZiB1c2luZ1xyXG4gICAgLy8gICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXHJcbiAgICAvLyAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGdldCBzaG93Q2xlYXJCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhckJ1dHRvbiAmJiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sPy52YWx1ZSAhPT0gJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ3Byb2JpaGEgdnViZWMgb25pbml0PycpO1xyXG4gICAgLy8gaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdmcm9tIG5nQ29udHJvbC4uLi4/PycpO1xyXG4gICAgLy8gICBpZiAodGhpcy5mb3JtQ29udHJvbCkge1xyXG4gICAgLy8gICAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sO1xyXG4gICAgLy8gICB9IGVsc2Uge1xyXG4gICAgLy8gICAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICB0aGlzLmFwcGx5VmFsaWRhdG9ycygpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sTmFtZSA/XHJcbiAgICAvLyAgICAgKHRoaXMuY29udHJvbENvbnRhaW5lciBhcyBGb3JtR3JvdXBEaXJlY3RpdmUpLmNvbnRyb2wuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSA6IHRoaXMuZm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhjb250cm9sLnZhbGlkYXRvcik7XHJcbiAgICAvLyAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IGNvbnNvbGUubG9nKCdvbml0aW4gc3ViJywgdikpO1xyXG4gICAgLy8gICBjb250cm9sLl9jb21wb25lbnRGb3JtQ29udHJvbCA9IHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgIGlmIChjb250cm9sLl9tYXJrQXNUb3VjaGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgIC8vICAgICAvLyBjb250cm9sLl9jb21wb25lbnRGb3JtQ29udHJvbCA9IHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coJ292ZXJyaWRpbmcgbWFya0FzVG91Y2hlZCBmb3InLCB0aGlzLmZvcm1Db250cm9sTmFtZSk7XHJcbiAgICAvLyAgICAgY29udHJvbC5fbWFya0FzVG91Y2hlZCA9IGNvbnRyb2wubWFya0FzVG91Y2hlZDtcclxuICAgIC8vICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQgPSAoe29ubHlTZWxmfTogeyBvbmx5U2VsZj86IGJvb2xlYW4gfSA9IHt9KTogdm9pZCA9PiB7XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZygnbWFya2luZyBhcyB0b3VjaGVkJywgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC52YWx1ZSwgY29udHJvbC52YWx1ZSwgdGhpcy54eHgudmFsdWUsIGNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sLnZhbHVlKTtcclxuICAgIC8vICAgICAgIGNvbnRyb2wuX21hcmtBc1RvdWNoZWQoe29ubHlTZWxmfSk7XHJcbiAgICAvLyAgICAgICBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKSwgMTAwMCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBjbGVhclZhbHVlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbD8uc2V0VmFsdWUoJycpO1xyXG4gICAgdGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKGZvY3VzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5oYXNGb2N1cyA9IGZvY3VzO1xyXG4gICAgICB0aGlzLmZvY3VzQ2hhbmdlZC5lbWl0KGZvY3VzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25LZXlwcmVzc2VkKCRldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmtleVByZXNzZWQuZW1pdCgkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLy8gcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogYW55KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2U7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiBhbnkpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgLy8gICAvLyBpc0Rpc2FibGVkID8gdGhpcy5jb250cm9sLmRpc2FibGUoKSA6IHRoaXMuY29udHJvbC5lbmFibGUoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAvLyAgIC8vIHRoaXMuY29udHJvbCA9IGNvbnRyb2w7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhjb250cm9sLCBjb250cm9sLnZhbHVlLCBjb250cm9sLmVycm9ycyk7XHJcbiAgLy8gICBpZiAodGhpcy52YWx1ZSA9PT0gJ2Vycm9yJykge1xyXG4gIC8vICAgICByZXR1cm4geyBjdXN0b21FcnJvcjogJ211aiBlcnJvcid9XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICByZXR1cm4gbnVsbDtcclxuICAvLyAgIH1cclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKCdjdXN0b20gdmFsaWRhdGUnKTtcclxuICAvLyAgIC8vIHJldHVybiBudWxsO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKCd3cml0ZXZhbHVlOiAnLCBvYmopO1xyXG4gIC8vICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRWYWx1ZShvYmopO1xyXG4gIC8vICAgLy8gdGhpcy52YWx1ZSA9IG9iajtcclxuICAvLyAgIC8vIHRoaXMuY29udHJvbC5zZXRWYWx1ZShvYmopO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAvLyB9XHJcblxyXG4gIC8vIG1vZGVsQ2hhbmdlKCRldmVudDogYW55KSB7XHJcbiAgLy8gICBjb25zb2xlLmxvZygkZXZlbnQpO1xyXG4gIC8vICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAvLyAgIHRoaXMub25DaGFuZ2UoJGV2ZW50KVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIC8vICAgY29uc29sZS5sb2codGhpcy5sYWJlbCwgJ3ZhbGlkYXRlJyk7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnM7XHJcbiAgLy8gICAvLyByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIC8vIH1cclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMucGFyZW50Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFyZW50Rm9ybUNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycztcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzKTtcclxuICAgIC8vIC8vIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKCB7IGN1c3RvbTogJ3h4eCcgfSk7XHJcbiAgICAvLyB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldEVycm9ycyggdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnMpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlIDInLCB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycyk7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnM7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycywgY29udHJvbC5lcnJvcnMsIHRoaXMucGFyZW50Rm9ybUNvbnRyb2wuZXJyb3JzLCB0aGlzKTtcclxuICAgIC8vIHJldHVybiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycztcclxuICB9XHJcbn1cclxuXHJcbiIsIjx1aS1zaW1wbGUtbGF5b3V0IFtjdHhdPVwidGhpc1wiPlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbnRyb2wtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieydoYXMtc3VmZml4JzogaGFzU3VmZml4LCAnaGFzLXByZWZpeCc6IGhhc1ByZWZpeCwgJ2hhcy1jbGVhci1pY29uJzogc2hvd0NsZWFyQnV0dG9uLCAnYWN0aXZlLWljb25zJzogYWN0aXZlSWNvbnMsICdoYXMtZm9jdXMnOiBoYXNGb2N1c31cIj5cclxuICA8aW5wdXQgI2lucHV0IFt0eXBlXT1cInR5cGVcIiBbZm9ybUNvbnRyb2xdPVwiY29tcG9uZW50Rm9ybUNvbnRyb2xcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiAoa2V5ZG93bik9XCJvbktleXByZXNzZWQoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKHRydWUpXCIgKGJsdXIpPVwib25Gb2N1cyhmYWxzZSlcIiAvPlxyXG4gIDxkaXYgI3ByZWZpeD48bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1wcmVmaXhdXCI+PC9uZy1jb250ZW50PjwvZGl2PlxyXG4gIDxkaXYgI3N1ZmZpeD48bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1zdWZmaXhdXCI+PC9uZy1jb250ZW50PjwvZGl2PlxyXG4gIDxtYXQtaWNvbiAqbmdJZj1cInByZWZpeEljb25cIiBjbGFzcz1cInByZWZpeC1pY29uXCIgW21hdFRvb2x0aXBdPVwicHJlZml4SWNvbi50b29sdGlwXCI+e3sgcHJlZml4SWNvbi5pY29uIH19PC9tYXQtaWNvbj5cclxuICA8bWF0LWljb24gKm5nSWY9XCJzdWZmaXhJY29uXCIgY2xhc3M9XCJzdWZmaXgtaWNvblwiIFttYXRUb29sdGlwXT1cInN1ZmZpeEljb24udG9vbHRpcFwiPnt7IHN1ZmZpeEljb24uaWNvbiB9fTwvbWF0LWljb24+XHJcbiAgPHVpLWFjdGlvbi1pY29uIFtzaXplXT1cIidzbWFsbCdcIiBbY29sb3JdPVwiJ3dhcm4nXCIgKm5nSWY9XCJzaG93Q2xlYXJCdXR0b25cIiAoY2xpY2spPVwiY2xlYXJWYWx1ZSgpXCIgW21hdEljb25dPVwiJ2NsZWFyJ1wiIGNsYXNzPVwiY2xlYXItaWNvblwiPjwvdWktYWN0aW9uLWljb24+XHJcbjwvZGl2PlxyXG5cclxuPC91aS1zaW1wbGUtbGF5b3V0PlxyXG4iXX0=