@meshmakers/shared-ui 3.1.114-0 → 3.1.116-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +8 -8
- package/esm2022/lib/breadcrumb/mat-breadcrumb/mm-breadcrumb.component.mjs +109 -0
- package/esm2022/lib/breadcrumb/services/breadcrumb.service.mjs +3 -3
- package/esm2022/lib/confirmation-dialog/confirmation-dialog.module.mjs +7 -7
- package/esm2022/lib/confirmation-dialog/confirmation-window/mm-confirmation-window.component.mjs +75 -0
- package/esm2022/lib/confirmation-dialog/services/confirmation.service.mjs +9 -9
- package/esm2022/lib/mm-shared-ui/mm-autocomplete-input/mm-autocomplete-input.component.mjs +302 -0
- package/esm2022/lib/mm-shared-ui/mm-entity-select-input/mm-entity-select-input.component.mjs +293 -0
- package/esm2022/lib/mm-shared-ui/mm-message-details/mm-message-details.component.mjs +26 -0
- package/esm2022/lib/mm-shared-ui/mm-multiple-entity-select-input/mm-multiple-entity-select-input.component.mjs +316 -0
- package/esm2022/lib/mm-shared-ui/mm-notification-bar/mm-notification-bar.component.mjs +40 -0
- package/esm2022/lib/mm-shared-ui/mm-shared-ui.module.mjs +74 -0
- package/esm2022/lib/progress-notifier/progress-notifier.module.mjs +7 -7
- package/esm2022/lib/progress-notifier/progress-window/mm-progress-window.component.mjs +35 -0
- package/esm2022/lib/progress-notifier/services/progress-notifier.service.mjs +6 -6
- package/esm2022/lib/shared/commonValidators.mjs +1 -1
- package/esm2022/public-api.mjs +7 -7
- package/fesm2022/meshmakers-shared-ui.mjs +150 -133
- package/fesm2022/meshmakers-shared-ui.mjs.map +1 -1
- package/lib/breadcrumb/breadcrumb.module.d.ts +2 -2
- package/lib/breadcrumb/mat-breadcrumb/{mat-breadcrumb.component.d.ts → mm-breadcrumb.component.d.ts} +3 -3
- package/lib/confirmation-dialog/confirmation-dialog.module.d.ts +2 -2
- package/lib/confirmation-dialog/confirmation-window/{confirmation-window.component.d.ts → mm-confirmation-window.component.d.ts} +4 -4
- package/lib/{ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.d.ts → mm-shared-ui/mm-autocomplete-input/mm-autocomplete-input.component.d.ts} +10 -10
- package/lib/{ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.d.ts → mm-shared-ui/mm-entity-select-input/mm-entity-select-input.component.d.ts} +3 -3
- package/lib/mm-shared-ui/mm-message-details/mm-message-details.component.d.ts +13 -0
- package/lib/{ia-shared-ui/ia-multiple-entity-select-input/ia-multiple-entity-select-input.component.d.ts → mm-shared-ui/mm-multiple-entity-select-input/mm-multiple-entity-select-input.component.d.ts} +3 -3
- package/lib/{ia-shared-ui/ia-notification-bar/ia-notification-bar.component.d.ts → mm-shared-ui/mm-notification-bar/mm-notification-bar.component.d.ts} +3 -3
- package/lib/mm-shared-ui/mm-shared-ui.module.d.ts +22 -0
- package/lib/progress-notifier/progress-notifier.module.d.ts +2 -2
- package/lib/progress-notifier/progress-window/{progress-window.component.d.ts → mm-progress-window.component.d.ts} +4 -5
- package/package.json +1 -1
- package/public-api.d.ts +6 -6
- package/esm2022/lib/breadcrumb/mat-breadcrumb/mat-breadcrumb.component.mjs +0 -109
- package/esm2022/lib/confirmation-dialog/confirmation-window/confirmation-window.component.mjs +0 -75
- package/esm2022/lib/ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.mjs +0 -295
- package/esm2022/lib/ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.mjs +0 -288
- package/esm2022/lib/ia-shared-ui/ia-multiple-entity-select-input/ia-multiple-entity-select-input.component.mjs +0 -311
- package/esm2022/lib/ia-shared-ui/ia-notification-bar/ia-notification-bar.component.mjs +0 -39
- package/esm2022/lib/ia-shared-ui/ia-shared-ui.module.mjs +0 -74
- package/esm2022/lib/ia-shared-ui/message-details/message-details.component.mjs +0 -26
- package/esm2022/lib/progress-notifier/progress-window/progress-window.component.mjs +0 -35
- package/lib/ia-shared-ui/ia-shared-ui.module.d.ts +0 -22
- package/lib/ia-shared-ui/message-details/message-details.component.d.ts +0 -13
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, forwardRef, HostBinding, Input, ViewChild } from '@angular/core';
|
|
2
|
-
import { MatFormFieldControl } from '@angular/material/form-field';
|
|
3
|
-
import { FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
|
|
4
|
-
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
5
|
-
import { debounceTime, filter, map, switchMap, tap } from 'rxjs/operators';
|
|
6
|
-
import { of, Subject } from 'rxjs';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/cdk/a11y";
|
|
9
|
-
import * as i2 from "@angular/common";
|
|
10
|
-
import * as i3 from "@angular/material/autocomplete";
|
|
11
|
-
import * as i4 from "@angular/material/core";
|
|
12
|
-
import * as i5 from "@angular/material/input";
|
|
13
|
-
import * as i6 from "@angular/material/progress-spinner";
|
|
14
|
-
import * as i7 from "@angular/forms";
|
|
15
|
-
export class IaAutocompleteInput {
|
|
16
|
-
elRef;
|
|
17
|
-
injector;
|
|
18
|
-
fm;
|
|
19
|
-
static nextId = 0;
|
|
20
|
-
searchFormControl;
|
|
21
|
-
isLoading;
|
|
22
|
-
filteredStrings = [];
|
|
23
|
-
ngControl;
|
|
24
|
-
errorState;
|
|
25
|
-
focused;
|
|
26
|
-
stateChanges = new Subject();
|
|
27
|
-
id = `ia-autocomplete-${IaAutocompleteInput.nextId++}`;
|
|
28
|
-
valueChange = new EventEmitter();
|
|
29
|
-
_selectedString;
|
|
30
|
-
inputField;
|
|
31
|
-
describedBy = '';
|
|
32
|
-
activatedValue;
|
|
33
|
-
constructor(elRef, injector, fm) {
|
|
34
|
-
this.elRef = elRef;
|
|
35
|
-
this.injector = injector;
|
|
36
|
-
this.fm = fm;
|
|
37
|
-
this.ngControl = null;
|
|
38
|
-
this.errorState = false;
|
|
39
|
-
this._selectedString = null;
|
|
40
|
-
this.inputField = null;
|
|
41
|
-
this._dataSource = null;
|
|
42
|
-
this._placeholder = '';
|
|
43
|
-
this._prefix = '';
|
|
44
|
-
this.searchFormControl = new FormControl();
|
|
45
|
-
this.isLoading = false;
|
|
46
|
-
this._disabled = false;
|
|
47
|
-
this.focused = false;
|
|
48
|
-
fm.monitor(elRef.nativeElement, true).subscribe((origin) => {
|
|
49
|
-
this.focused = !!origin;
|
|
50
|
-
this.stateChanges.next();
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
_dataSource;
|
|
54
|
-
get dataSource() {
|
|
55
|
-
return this._dataSource;
|
|
56
|
-
}
|
|
57
|
-
set dataSource(value) {
|
|
58
|
-
this._dataSource = value;
|
|
59
|
-
}
|
|
60
|
-
_disabled = false;
|
|
61
|
-
get disabled() {
|
|
62
|
-
return this._disabled;
|
|
63
|
-
}
|
|
64
|
-
set disabled(dis) {
|
|
65
|
-
this._disabled = coerceBooleanProperty(dis);
|
|
66
|
-
this._disabled ? this.searchFormControl.disable() : this.searchFormControl.enable();
|
|
67
|
-
this.stateChanges.next();
|
|
68
|
-
}
|
|
69
|
-
_placeholder;
|
|
70
|
-
get placeholder() {
|
|
71
|
-
return this._placeholder;
|
|
72
|
-
}
|
|
73
|
-
set placeholder(plh) {
|
|
74
|
-
this._placeholder = plh;
|
|
75
|
-
this.stateChanges.next();
|
|
76
|
-
}
|
|
77
|
-
_required = false;
|
|
78
|
-
get required() {
|
|
79
|
-
return this._required;
|
|
80
|
-
}
|
|
81
|
-
set required(req) {
|
|
82
|
-
this._required = coerceBooleanProperty(req);
|
|
83
|
-
if (this.inputField != null) {
|
|
84
|
-
this.inputField.required = this._required;
|
|
85
|
-
}
|
|
86
|
-
this.stateChanges.next();
|
|
87
|
-
}
|
|
88
|
-
_prefix;
|
|
89
|
-
get prefix() {
|
|
90
|
-
return this._prefix;
|
|
91
|
-
}
|
|
92
|
-
set prefix(value) {
|
|
93
|
-
if (value !== this._prefix) {
|
|
94
|
-
this._prefix = value;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
get value() {
|
|
98
|
-
return this._selectedString;
|
|
99
|
-
}
|
|
100
|
-
set value(value) {
|
|
101
|
-
if (value !== this._selectedString) {
|
|
102
|
-
this._selectedString = value;
|
|
103
|
-
this.searchFormControl.setValue(value);
|
|
104
|
-
this.valueChange.emit(value);
|
|
105
|
-
this._propagateChange(this._selectedString);
|
|
106
|
-
this.stateChanges.next();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
get empty() {
|
|
110
|
-
const n = this.searchFormControl.value;
|
|
111
|
-
return !n;
|
|
112
|
-
}
|
|
113
|
-
get shouldLabelFloat() {
|
|
114
|
-
return this.focused || !this.empty;
|
|
115
|
-
}
|
|
116
|
-
ngOnInit() {
|
|
117
|
-
this.ngControl = this.injector.get(NgControl, null);
|
|
118
|
-
if (this.ngControl != null) {
|
|
119
|
-
this.ngControl.valueAccessor = this;
|
|
120
|
-
}
|
|
121
|
-
// If prefix defined, usually this is used for a code scanner.
|
|
122
|
-
// The goal is to select the entity in direct way.
|
|
123
|
-
if (this._prefix) {
|
|
124
|
-
this.searchFormControl.valueChanges
|
|
125
|
-
.pipe(debounceTime(300), filter((value) => typeof value === 'string'), filter((value) => value.startsWith(this._prefix)), tap(() => (this.value = null)), tap(() => (this.isLoading = true)), map((value) => this._dataSource?.onPreprocessSearchString(value) ?? ''), switchMap((value) => this._dataSource?.onFilter(value) ?? of(null)))
|
|
126
|
-
.subscribe((resultSet) => {
|
|
127
|
-
if (resultSet?.list != null) {
|
|
128
|
-
if (resultSet.list.length === 1) {
|
|
129
|
-
this.value = resultSet.list[0];
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
this.filteredStrings = resultSet.list;
|
|
133
|
-
this.searchFormControl.patchValue(resultSet.searchTerm, {
|
|
134
|
-
emitEvent: false
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
this.isLoading = false;
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
// This is the search functionality when search by human.
|
|
142
|
-
this.searchFormControl.valueChanges
|
|
143
|
-
.pipe(debounceTime(300), tap((_) => {
|
|
144
|
-
this.filteredStrings = [];
|
|
145
|
-
}), filter((value) => value != null && value.toString().length >= 1), tap(() => (this.isLoading = true)), map((value) => this._dataSource?.onPreprocessSearchString(value)), tap((value) => (this.value = value)), switchMap((value) => {
|
|
146
|
-
if (value !== null) {
|
|
147
|
-
return this._dataSource?.onFilter(String(value)) ?? of(null);
|
|
148
|
-
}
|
|
149
|
-
return of(null);
|
|
150
|
-
}))
|
|
151
|
-
.subscribe((resultSet) => {
|
|
152
|
-
if (resultSet?.list != null) {
|
|
153
|
-
this.filteredStrings = resultSet.list;
|
|
154
|
-
this.searchFormControl.patchValue(resultSet.searchTerm, {
|
|
155
|
-
emitEvent: false
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
this.isLoading = false;
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
ngOnDestroy() {
|
|
162
|
-
this.stateChanges.complete();
|
|
163
|
-
this.fm.stopMonitoring(this.elRef.nativeElement);
|
|
164
|
-
}
|
|
165
|
-
ngDoCheck() {
|
|
166
|
-
if (this.ngControl != null) {
|
|
167
|
-
this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;
|
|
168
|
-
this.stateChanges.next();
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
clear() {
|
|
172
|
-
this.filteredStrings = [];
|
|
173
|
-
this.searchFormControl.reset(null);
|
|
174
|
-
}
|
|
175
|
-
focus() {
|
|
176
|
-
this.elRef.nativeElement.querySelector('input')?.focus();
|
|
177
|
-
}
|
|
178
|
-
onOptionSelected(event) {
|
|
179
|
-
this.value = event.option.value;
|
|
180
|
-
this.filteredStrings = [];
|
|
181
|
-
}
|
|
182
|
-
onOptionActivated(event) {
|
|
183
|
-
this.activatedValue = event.option?.value;
|
|
184
|
-
}
|
|
185
|
-
onAutoCompleteClosed() {
|
|
186
|
-
if (this.activatedValue) {
|
|
187
|
-
this.value = this.activatedValue;
|
|
188
|
-
this.activatedValue = null;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
reset() {
|
|
192
|
-
this.value = null;
|
|
193
|
-
}
|
|
194
|
-
onFocusOut() {
|
|
195
|
-
if (this.filteredStrings.length === 1) {
|
|
196
|
-
this.activatedValue = this.filteredStrings[0];
|
|
197
|
-
this.value = this.filteredStrings[0];
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
onTouched() {
|
|
201
|
-
this._onTouched();
|
|
202
|
-
this.stateChanges.next();
|
|
203
|
-
}
|
|
204
|
-
registerOnChange(fn) {
|
|
205
|
-
this._propagateChange = fn;
|
|
206
|
-
}
|
|
207
|
-
registerOnTouched(fn) {
|
|
208
|
-
this.onTouched = fn;
|
|
209
|
-
}
|
|
210
|
-
writeValue(obj) {
|
|
211
|
-
this.clear();
|
|
212
|
-
this.value = obj;
|
|
213
|
-
}
|
|
214
|
-
setDisabledState(isDisabled) {
|
|
215
|
-
this.disabled = isDisabled;
|
|
216
|
-
}
|
|
217
|
-
onContainerClick(event) {
|
|
218
|
-
if (event.target.tagName.toLowerCase() !== 'input') {
|
|
219
|
-
this.focus();
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
setDescribedByIds(ids) {
|
|
223
|
-
this.describedBy = ids.join(' ');
|
|
224
|
-
}
|
|
225
|
-
validate(control) {
|
|
226
|
-
const selection = control.value;
|
|
227
|
-
if (typeof selection === 'string' && selection.length < 1) {
|
|
228
|
-
return { incorrect: true };
|
|
229
|
-
}
|
|
230
|
-
return null;
|
|
231
|
-
}
|
|
232
|
-
_propagateChange = (_) => { };
|
|
233
|
-
_onTouched = () => { };
|
|
234
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: IaAutocompleteInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
|
|
235
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: IaAutocompleteInput, selector: "ia-autocomplete", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
|
|
236
|
-
{
|
|
237
|
-
provide: NG_VALUE_ACCESSOR,
|
|
238
|
-
useExisting: forwardRef(() => IaAutocompleteInput),
|
|
239
|
-
multi: true
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
provide: MatFormFieldControl,
|
|
243
|
-
useExisting: IaAutocompleteInput
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
provide: NG_VALIDATORS,
|
|
247
|
-
useExisting: forwardRef(() => IaAutocompleteInput),
|
|
248
|
-
multi: true
|
|
249
|
-
}
|
|
250
|
-
], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\"\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\n {{str}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ 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.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: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i5.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: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
251
|
-
}
|
|
252
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: IaAutocompleteInput, decorators: [{
|
|
253
|
-
type: Component,
|
|
254
|
-
args: [{ selector: 'ia-autocomplete', host: {
|
|
255
|
-
'[id]': 'id',
|
|
256
|
-
'[attr.aria-describedby]': 'describedBy'
|
|
257
|
-
}, providers: [
|
|
258
|
-
{
|
|
259
|
-
provide: NG_VALUE_ACCESSOR,
|
|
260
|
-
useExisting: forwardRef(() => IaAutocompleteInput),
|
|
261
|
-
multi: true
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
provide: MatFormFieldControl,
|
|
265
|
-
useExisting: IaAutocompleteInput
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
provide: NG_VALIDATORS,
|
|
269
|
-
useExisting: forwardRef(() => IaAutocompleteInput),
|
|
270
|
-
multi: true
|
|
271
|
-
}
|
|
272
|
-
], template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\"\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\n {{str}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"] }]
|
|
273
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i1.FocusMonitor }], propDecorators: { id: [{
|
|
274
|
-
type: HostBinding
|
|
275
|
-
}], inputField: [{
|
|
276
|
-
type: ViewChild,
|
|
277
|
-
args: ['input']
|
|
278
|
-
}], describedBy: [{
|
|
279
|
-
type: HostBinding,
|
|
280
|
-
args: ['attr.aria-describedby']
|
|
281
|
-
}], dataSource: [{
|
|
282
|
-
type: Input
|
|
283
|
-
}], disabled: [{
|
|
284
|
-
type: Input
|
|
285
|
-
}], placeholder: [{
|
|
286
|
-
type: Input
|
|
287
|
-
}], required: [{
|
|
288
|
-
type: Input
|
|
289
|
-
}], prefix: [{
|
|
290
|
-
type: Input
|
|
291
|
-
}], shouldLabelFloat: [{
|
|
292
|
-
type: HostBinding,
|
|
293
|
-
args: ['class.floating']
|
|
294
|
-
}] } });
|
|
295
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWEtYXV0b2NvbXBsZXRlLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9pYS1zaGFyZWQtdWkvaWEtYXV0b2NvbXBsZXRlLWlucHV0L2lhLWF1dG9jb21wbGV0ZS1pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvaWEtc2hhcmVkLXVpL2lhLWF1dG9jb21wbGV0ZS1pbnB1dC9pYS1hdXRvY29tcGxldGUtaW5wdXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUVYLEtBQUssRUFHTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUdMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLFNBQVMsRUFHVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0UsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQTZCbkMsTUFBTSxPQUFPLG1CQUFtQjtJQW1CckI7SUFDVTtJQUNBO0lBcEJYLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsaUJBQWlCLENBQWM7SUFDeEMsU0FBUyxDQUFVO0lBQ25CLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFDL0IsU0FBUyxDQUFtQjtJQUM1QixV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Z0JLLE1BQU07c0JBRGhCLEtBQUs7Z0JBK0JLLGdCQUFnQjtzQkFEMUIsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1Db250cm9sLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgTmdDb250cm9sLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlQWN0aXZhdGVkRXZlbnQsIE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlRGF0YVNvdXJjZSB9IGZyb20gJ0BtZXNobWFrZXJzL3NoYXJlZC1zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lhLWF1dG9jb21wbGV0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pYS1hdXRvY29tcGxldGUtaW5wdXQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lhLWF1dG9jb21wbGV0ZS1pbnB1dC5jc3MnXSxcbiAgaG9zdDoge1xuICAgICdbaWRdJzogJ2lkJyxcbiAgICAnW2F0dHIuYXJpYS1kZXNjcmliZWRieV0nOiAnZGVzY3JpYmVkQnknXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSWFBdXRvY29tcGxldGVJbnB1dCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcbiAgICAgIHVzZUV4aXN0aW5nOiBJYUF1dG9jb21wbGV0ZUlucHV0XG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSWFBdXRvY29tcGxldGVJbnB1dCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBJYUF1dG9jb21wbGV0ZUlucHV0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBNYXRGb3JtRmllbGRDb250cm9sPGFueT4sIFZhbGlkYXRvciB7XG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBzZWFyY2hGb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIHB1YmxpYyBmaWx0ZXJlZFN0cmluZ3M6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGw7XG4gIHB1YmxpYyBlcnJvclN0YXRlOiBib29sZWFuO1xuICBwdWJsaWMgZm9jdXNlZDogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIEBIb3N0QmluZGluZygpXG4gIHB1YmxpYyByZWFkb25seSBpZCA9IGBpYS1hdXRvY29tcGxldGUtJHtJYUF1dG9jb21wbGV0ZUlucHV0Lm5leHRJZCsrfWA7XG5cbiAgcHVibGljIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwcml2YXRlIF9zZWxlY3RlZFN0cmluZzogc3RyaW5nIHwgbnVsbDtcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBwcml2YXRlIHJlYWRvbmx5IGlucHV0RmllbGQ6IE1hdElucHV0IHwgbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKSBwcml2YXRlIGRlc2NyaWJlZEJ5ID0gJyc7XG4gIHByaXZhdGUgYWN0aXZhdGVkVmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvclxuICApIHtcbiAgICB0aGlzLm5nQ29udHJvbCA9IG51bGw7XG4gICAgdGhpcy5lcnJvclN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fc2VsZWN0ZWRTdHJpbmcgPSBudWxsO1xuICAgIHRoaXMuaW5wdXRGaWVsZCA9IG51bGw7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSAnJztcbiAgICB0aGlzLl9wcmVmaXggPSAnJztcblxuICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgZm0ubW9uaXRvcihlbFJlZi5uYXRpdmVFbGVtZW50LCB0cnVlKS5zdWJzY3JpYmUoKG9yaWdpbikgPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9kYXRhU291cmNlOiBBdXRvQ29tcGxldGVEYXRhU291cmNlIHwgbnVsbDtcblxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogQXV0b0NvbXBsZXRlRGF0YVNvdXJjZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRhU291cmNlKHZhbHVlOiBBdXRvQ29tcGxldGVEYXRhU291cmNlIHwgbnVsbCkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKGRpcykge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGRpcyk7XG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnNlYXJjaEZvcm1Db250cm9sLmRpc2FibGUoKSA6IHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG5cbiAgcHVibGljIHNldCBwbGFjZWhvbGRlcihwbGg6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gcGxoO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlcXVpcmVkKHJlcSkge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHJlcSk7XG4gICAgaWYgKHRoaXMuaW5wdXRGaWVsZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmlucHV0RmllbGQucmVxdWlyZWQgPSB0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlZml4OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4O1xuICB9XG5cbiAgcHVibGljIHNldCBwcmVmaXgodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fcHJlZml4KSB7XG4gICAgICB0aGlzLl9wcmVmaXggPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU3RyaW5nO1xuICB9XG5cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9zZWxlY3RlZFN0cmluZykge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRTdHJpbmcgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSh0aGlzLl9zZWxlY3RlZFN0cmluZyk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuID0gdGhpcy5zZWFyY2hGb3JtQ29udHJvbC52YWx1ZTtcbiAgICByZXR1cm4gIW47XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcbiAgcHVibGljIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cblxuICAgIC8vIElmIHByZWZpeCBkZWZpbmVkLCB1c3VhbGx5IHRoaXMgaXMgdXNlZCBmb3IgYSBjb2RlIHNjYW5uZXIuXG4gICAgLy8gVGhlIGdvYWwgaXMgdG8gc2VsZWN0IHRoZSBlbnRpdHkgaW4gZGlyZWN0IHdheS5cbiAgICBpZiAodGhpcy5fcHJlZml4KSB7XG4gICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSxcbiAgICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5zdGFydHNXaXRoKHRoaXMuX3ByZWZpeCkpLFxuICAgICAgICAgIHRhcCgoKSA9PiAodGhpcy52YWx1ZSA9IG51bGwpKSxcbiAgICAgICAgICB0YXAoKCkgPT4gKHRoaXMuaXNMb2FkaW5nID0gdHJ1ZSkpLFxuICAgICAgICAgIG1hcCgodmFsdWU6IHN0cmluZykgPT4gdGhpcy5fZGF0YVNvdXJjZT8ub25QcmVwcm9jZXNzU2VhcmNoU3RyaW5nKHZhbHVlKSA/PyAnJyksXG4gICAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT4gdGhpcy5fZGF0YVNvdXJjZT8ub25GaWx0ZXIodmFsdWUpID8/IG9mKG51bGwpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdFNldCkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHRTZXQ/Lmxpc3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdFNldC5saXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gcmVzdWx0U2V0Lmxpc3RbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IHJlc3VsdFNldC5saXN0O1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnBhdGNoVmFsdWUocmVzdWx0U2V0LnNlYXJjaFRlcm0sIHtcbiAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIHRoZSBzZWFyY2ggZnVuY3Rpb25hbGl0eSB3aGVuIHNlYXJjaCBieSBodW1hbi5cbiAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICB0YXAoKF8pID0+IHtcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IFtdO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA+PSAxKSxcbiAgICAgICAgdGFwKCgpID0+ICh0aGlzLmlzTG9hZGluZyA9IHRydWUpKSxcbiAgICAgICAgbWFwKCh2YWx1ZTogc3RyaW5nKSA9PiB0aGlzLl9kYXRhU291cmNlPy5vblByZXByb2Nlc3NTZWFyY2hTdHJpbmcodmFsdWUpKSxcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4gKHRoaXMudmFsdWUgPSB2YWx1ZSkpLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZT8ub25GaWx0ZXIoU3RyaW5nKHZhbHVlKSkgPz8gb2YobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdFNldCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0U2V0Py5saXN0ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IHJlc3VsdFNldC5saXN0O1xuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShyZXN1bHRTZXQuc2VhcmNoVGVybSwge1xuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5mbS5zdG9wTW9uaXRvcmluZyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmVycm9yU3RhdGUgPSAodGhpcy5uZ0NvbnRyb2wuaW52YWxpZCAmJiB0aGlzLm5nQ29udHJvbC50b3VjaGVkKSA/PyBmYWxzZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJlZFN0cmluZ3MgPSBbXTtcbiAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnJlc2V0KG51bGwpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIG9uT3B0aW9uU2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gZXZlbnQub3B0aW9uLnZhbHVlO1xuICAgIHRoaXMuZmlsdGVyZWRTdHJpbmdzID0gW107XG4gIH1cblxuICBwdWJsaWMgb25PcHRpb25BY3RpdmF0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZUFjdGl2YXRlZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZWRWYWx1ZSA9IGV2ZW50Lm9wdGlvbj8udmFsdWU7XG4gIH1cblxuICBwdWJsaWMgb25BdXRvQ29tcGxldGVDbG9zZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZhdGVkVmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmFjdGl2YXRlZFZhbHVlO1xuICAgICAgdGhpcy5hY3RpdmF0ZWRWYWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uRm9jdXNPdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVyZWRTdHJpbmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZWRWYWx1ZSA9IHRoaXMuZmlsdGVyZWRTdHJpbmdzWzBdO1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZmlsdGVyZWRTdHJpbmdzWzBdO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblRvdWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy52YWx1ZSA9IG9iajtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbnRhaW5lckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCkudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnaW5wdXQnKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCBzZWxlY3Rpb246IGFueSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3Rpb24gPT09ICdzdHJpbmcnICYmIHNlbGVjdGlvbi5sZW5ndGggPCAxKSB7XG4gICAgICByZXR1cm4geyBpbmNvcnJlY3Q6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9wcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KTogdm9pZCA9PiB7fTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcbn1cbiIsIjxpbnB1dCAjaW5wdXQgKGJsdXIpPVwib25Ub3VjaGVkKClcIiAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaEZvcm1Db250cm9sXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBtYXRJbnB1dD5cbjxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbG9zZWQpPVwib25BdXRvQ29tcGxldGVDbG9zZWQoKVwiIChvcHRpb25BY3RpdmF0ZWQpPVwib25PcHRpb25BY3RpdmF0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwib25PcHRpb25TZWxlY3RlZCgkZXZlbnQpXCI+XG4gIDxtYXQtb3B0aW9uICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJpcy1sb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuICA8L21hdC1vcHRpb24+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN0ciBvZiBmaWx0ZXJlZFN0cmluZ3NcIiBbdmFsdWVdPVwic3RyXCI+XG4gICAgICB7e3N0cn19XG4gICAgPC9tYXQtb3B0aW9uPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbWF0LWF1dG9jb21wbGV0ZT5cbiJdfQ==
|