@marcura/marcura-combobox 6.1.0 → 6.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2020/lib/combobox.injectables.mjs +5 -5
- package/esm2020/lib/combobox.module.mjs +103 -103
- package/esm2020/lib/components/abstract-combobox/abstract-combobox.component.mjs +240 -240
- package/esm2020/lib/components/abstract-dropdown/abstract-dropdown.component.mjs +230 -230
- package/esm2020/lib/components/combobox/combobox.component.mjs +365 -361
- package/esm2020/lib/components/combobox-popup-footer/combobox-popup-footer.component.mjs +38 -38
- package/esm2020/lib/components/dropdown/dropdown.component.mjs +234 -234
- package/esm2020/lib/components/multiselect/multiselect.component.mjs +247 -247
- package/esm2020/lib/directives/combobox-item-template.directive.mjs +13 -13
- package/esm2020/lib/directives/dropdown-item-template.directive.mjs +13 -13
- package/esm2020/lib/directives/dropdown-value-template.directive.mjs +13 -13
- package/esm2020/lib/directives/multiselect-item-template.directive.mjs +13 -13
- package/esm2020/lib/directives/multiselect-tag-template.directive.mjs +13 -13
- package/esm2020/lib/directives/multiselect-tag-wrapper.directive.mjs +60 -60
- package/esm2020/lib/model/combobox-changed.event.mjs +4 -4
- package/esm2020/lib/model/combobox-item.type.mjs +12 -12
- package/esm2020/lib/model/combobox-kendo-component.interface.mjs +2 -2
- package/esm2020/lib/model/combobox-localization.interface.mjs +2 -2
- package/esm2020/lib/model/combobox-search-fn.type.mjs +1 -1
- package/esm2020/lib/model/combobox-search-settings-operator.enum.mjs +6 -6
- package/esm2020/lib/model/combobox-search-settings.interface.mjs +2 -2
- package/esm2020/lib/model/dropdown-changed.event.mjs +4 -4
- package/esm2020/lib/model/dropdown-kendo-component.interface.mjs +2 -2
- package/esm2020/lib/model/dropdown-localization.interface.mjs +2 -2
- package/esm2020/lib/model/dropdown-localizer.interface.mjs +2 -2
- package/esm2020/lib/model/multiselect-changed.event.mjs +4 -4
- package/esm2020/lib/model/multiselect-localization.interface.mjs +2 -2
- package/esm2020/marcura-marcura-combobox.mjs +4 -4
- package/esm2020/public-api.mjs +25 -25
- package/fesm2015/marcura-marcura-combobox.mjs +1482 -1478
- package/fesm2015/marcura-marcura-combobox.mjs.map +1 -1
- package/fesm2020/marcura-marcura-combobox.mjs +1477 -1473
- package/fesm2020/marcura-marcura-combobox.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/combobox.injectables.d.ts +8 -8
- package/lib/combobox.module.d.ts +25 -25
- package/lib/components/abstract-combobox/abstract-combobox.component.d.ts +59 -59
- package/lib/components/abstract-dropdown/abstract-dropdown.component.d.ts +76 -76
- package/lib/components/combobox/combobox.component.d.ts +65 -64
- package/lib/components/combobox-popup-footer/combobox-popup-footer.component.d.ts +13 -13
- package/lib/components/dropdown/dropdown.component.d.ts +45 -45
- package/lib/components/multiselect/multiselect.component.d.ts +51 -51
- package/lib/directives/combobox-item-template.directive.d.ts +5 -5
- package/lib/directives/dropdown-item-template.directive.d.ts +5 -5
- package/lib/directives/dropdown-value-template.directive.d.ts +5 -5
- package/lib/directives/multiselect-item-template.directive.d.ts +5 -5
- package/lib/directives/multiselect-tag-template.directive.d.ts +5 -5
- package/lib/directives/multiselect-tag-wrapper.directive.d.ts +21 -21
- package/lib/model/combobox-changed.event.d.ts +3 -3
- package/lib/model/combobox-item.type.d.ts +4 -4
- package/lib/model/combobox-kendo-component.interface.d.ts +7 -7
- package/lib/model/combobox-localization.interface.d.ts +5 -5
- package/lib/model/combobox-search-fn.type.d.ts +3 -3
- package/lib/model/combobox-search-settings-operator.enum.d.ts +4 -4
- package/lib/model/combobox-search-settings.interface.d.ts +5 -5
- package/lib/model/dropdown-changed.event.d.ts +3 -3
- package/lib/model/dropdown-kendo-component.interface.d.ts +6 -6
- package/lib/model/dropdown-localization.interface.d.ts +3 -3
- package/lib/model/dropdown-localizer.interface.d.ts +5 -5
- package/lib/model/multiselect-changed.event.d.ts +3 -3
- package/lib/model/multiselect-localization.interface.d.ts +5 -5
- package/package.json +1 -1
- package/public-api.d.ts +24 -24
|
@@ -1,361 +1,365 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, forwardRef, HostBinding, Inject, Input, Optional, Renderer2, TemplateRef, ViewChild, } from '@angular/core';
|
|
2
|
-
import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { ABSTRACT_CONTROL_COMPONENT, ControlSize, isTrue, OPENABLE_CONTROL_COMPONENT, SIZEABLE_CONTROL_COMPONENT, STATEABLE_CONTROL_COMPONENT, TYPEABLE_CONTROL_COMPONENT, } from '@marcura/marcura-common';
|
|
4
|
-
import { ComboBoxComponent as KendoComboBoxComponent } from '@progress/kendo-angular-dropdowns';
|
|
5
|
-
import { debounceTime, filter, map } from 'rxjs/operators';
|
|
6
|
-
import { COMBOBOX_LOCALIZER } from '../../combobox.injectables';
|
|
7
|
-
import { ComboboxItemTemplateDirective } from '../../directives/combobox-item-template.directive';
|
|
8
|
-
import { ComboboxChangedEvent } from '../../model/combobox-changed.event';
|
|
9
|
-
import { AbstractComboboxComponent } from '../abstract-combobox/abstract-combobox.component';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/common";
|
|
12
|
-
import * as i2 from "@angular/forms";
|
|
13
|
-
import * as i3 from "@progress/kendo-angular-dropdowns";
|
|
14
|
-
import * as i4 from "../combobox-popup-footer/combobox-popup-footer.component";
|
|
15
|
-
export class ComboboxComponent extends AbstractComboboxComponent {
|
|
16
|
-
get hasHasValueCssClass() {
|
|
17
|
-
return this.hasValue;
|
|
18
|
-
}
|
|
19
|
-
get hasIsHoveredCssClass() {
|
|
20
|
-
return this._isHovered.value;
|
|
21
|
-
}
|
|
22
|
-
get hasIsFocusedCssClass() {
|
|
23
|
-
return this.isFocused;
|
|
24
|
-
}
|
|
25
|
-
get hasIsDisabledCssClass() {
|
|
26
|
-
return this.isDisabled;
|
|
27
|
-
}
|
|
28
|
-
get isSuccessType() {
|
|
29
|
-
return this._isSuccessType;
|
|
30
|
-
}
|
|
31
|
-
get isErrorType() {
|
|
32
|
-
return this._isErrorType;
|
|
33
|
-
}
|
|
34
|
-
get isWarningType() {
|
|
35
|
-
return this._isWarningType;
|
|
36
|
-
}
|
|
37
|
-
get isHighlightedState() {
|
|
38
|
-
return this._isHighlightedState;
|
|
39
|
-
}
|
|
40
|
-
get hasIsLoadingCssClass() {
|
|
41
|
-
return this.isLoading || this._isSearching.value;
|
|
42
|
-
}
|
|
43
|
-
get hasHasResetCssClass() {
|
|
44
|
-
return this.hasReset;
|
|
45
|
-
}
|
|
46
|
-
get hasIsOutlineCssClass() {
|
|
47
|
-
return this.isOutline;
|
|
48
|
-
}
|
|
49
|
-
get loadingText() {
|
|
50
|
-
return this._loadingText || this._localization.loadingText;
|
|
51
|
-
}
|
|
52
|
-
set loadingText(loadingText) {
|
|
53
|
-
this._loadingText = loadingText;
|
|
54
|
-
}
|
|
55
|
-
get noItemsText() {
|
|
56
|
-
return this._noItemsText || this._localization.noItemsText;
|
|
57
|
-
}
|
|
58
|
-
set noItemsText(noItemsText) {
|
|
59
|
-
this._noItemsText = noItemsText;
|
|
60
|
-
}
|
|
61
|
-
get minSearchText() {
|
|
62
|
-
return this._minSearchText || this._localization.minSearchText;
|
|
63
|
-
}
|
|
64
|
-
set minSearchText(minSearchText) {
|
|
65
|
-
this._minSearchText = minSearchText;
|
|
66
|
-
}
|
|
67
|
-
get size() {
|
|
68
|
-
return this._size;
|
|
69
|
-
}
|
|
70
|
-
set size(size) {
|
|
71
|
-
if (size) {
|
|
72
|
-
this._size = size;
|
|
73
|
-
}
|
|
74
|
-
this.hasSmallSizeCssClass = this._size === ControlSize.Small;
|
|
75
|
-
this.hasMediumSizeCssClass = this._size === ControlSize.Medium;
|
|
76
|
-
}
|
|
77
|
-
get popupSettings() {
|
|
78
|
-
return {
|
|
79
|
-
animate: true,
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
this
|
|
88
|
-
this.
|
|
89
|
-
this.
|
|
90
|
-
this.
|
|
91
|
-
this.
|
|
92
|
-
this.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
this.
|
|
99
|
-
this.
|
|
100
|
-
this.
|
|
101
|
-
this.
|
|
102
|
-
this.
|
|
103
|
-
this.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
*
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
//
|
|
132
|
-
// so
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
this.
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
this.
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
this.
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
//
|
|
195
|
-
//
|
|
196
|
-
//
|
|
197
|
-
//
|
|
198
|
-
|
|
199
|
-
//
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
this.
|
|
213
|
-
this.
|
|
214
|
-
this.
|
|
215
|
-
this.
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
//
|
|
220
|
-
//
|
|
221
|
-
//
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
type:
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
type:
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
}],
|
|
347
|
-
type: Input
|
|
348
|
-
}],
|
|
349
|
-
type: Input
|
|
350
|
-
}],
|
|
351
|
-
type: Input
|
|
352
|
-
}],
|
|
353
|
-
type: Input
|
|
354
|
-
}],
|
|
355
|
-
type: Input
|
|
356
|
-
}],
|
|
357
|
-
type: Input
|
|
358
|
-
}],
|
|
359
|
-
type: Input
|
|
360
|
-
}]
|
|
361
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsV0FBVyxFQUVYLE1BQU0sRUFDTiwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLDJCQUEyQixFQUMzQiwwQkFBMEIsR0FDM0IsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUMsaUJBQWlCLElBQUksc0JBQXNCLEVBQWdCLE1BQU0sbUNBQW1DLENBQUM7QUFFN0csT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDaEcsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFHeEUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sa0RBQWtELENBQUM7Ozs7OztBQWtDM0YsTUFBTSxPQUFPLGlCQUF5QixTQUFRLHlCQUEy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QURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQUJTVFJBQ1RfQ09OVFJPTF9DT01QT05FTlQsXG4gIENvbnRyb2xTaXplLFxuICBJU2l6ZWFibGVDb250cm9sQ29tcG9uZW50LFxuICBpc1RydWUsXG4gIE9QRU5BQkxFX0NPTlRST0xfQ09NUE9ORU5ULFxuICBTSVpFQUJMRV9DT05UUk9MX0NPTVBPTkVOVCxcbiAgU1RBVEVBQkxFX0NPTlRST0xfQ09NUE9ORU5ULFxuICBUWVBFQUJMRV9DT05UUk9MX0NPTVBPTkVOVCxcbn0gZnJvbSAnQG1hcmN1cmEvbWFyY3VyYS1jb21tb24nO1xuaW1wb3J0IHtDb21ib0JveENvbXBvbmVudCBhcyBLZW5kb0NvbWJvQm94Q29tcG9uZW50LCBQb3B1cFNldHRpbmdzfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kcm9wZG93bnMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDT01CT0JPWF9MT0NBTElaRVJ9IGZyb20gJy4uLy4uL2NvbWJvYm94LmluamVjdGFibGVzJztcbmltcG9ydCB7Q29tYm9ib3hJdGVtVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29tYm9ib3gtaXRlbS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtDb21ib2JveENoYW5nZWRFdmVudH0gZnJvbSAnLi4vLi4vbW9kZWwvY29tYm9ib3gtY2hhbmdlZC5ldmVudCc7XG5pbXBvcnQge0lDb21ib2JveExvY2FsaXphdGlvbn0gZnJvbSAnLi4vLi4vbW9kZWwvY29tYm9ib3gtbG9jYWxpemF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQge0lEcm9wZG93bkxvY2FsaXplcn0gZnJvbSAnLi4vLi4vbW9kZWwvZHJvcGRvd24tbG9jYWxpemVyLmludGVyZmFjZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29tYm9ib3hDb21wb25lbnR9IGZyb20gJy4uL2Fic3RyYWN0LWNvbWJvYm94L2Fic3RyYWN0LWNvbWJvYm94LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NnLWNvbWJvYm94JyxcbiAgdGVtcGxhdGVVcmw6ICdjb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvYm94Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQUJTVFJBQ1RfQ09OVFJPTF9DT01QT05FTlQsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb21ib2JveENvbXBvbmVudCksXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBPUEVOQUJMRV9DT05UUk9MX0NPTVBPTkVOVCxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvYm94Q29tcG9uZW50KSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNUQVRFQUJMRV9DT05UUk9MX0NPTVBPTkVOVCxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvYm94Q29tcG9uZW50KSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRZUEVBQkxFX0NPTlRST0xfQ09NUE9ORU5ULFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29tYm9ib3hDb21wb25lbnQpLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogU0laRUFCTEVfQ09OVFJPTF9DT01QT05FTlQsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb21ib2JveENvbXBvbmVudCksXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hDb21wb25lbnQ8VEl0ZW0+IGV4dGVuZHMgQWJzdHJhY3RDb21ib2JveENvbXBvbmVudDxUSXRlbSwgVEl0ZW0gfCBudWxsLCBDb21ib2JveENoYW5nZWRFdmVudDxUSXRlbT4+XG4gIGltcGxlbWVudHMgSVNpemVhYmxlQ29udHJvbENvbXBvbmVudCwgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIG92ZXJyaWRlIGZvcm1Db250cm9sITogRm9ybUNvbnRyb2w8VEl0ZW0gfCBudWxsPjtcblxuICAvLyBUT0RPOiB0ZWNobmljYWwtZGVidCB0aGlzIGNvbXBvbmVudCBzaG91bGRuJ3QgaGF2ZSBkZWZhdWx0IHZhbHVlXG4gIHB1YmxpYyBvdmVycmlkZSByZWFkb25seSBkZWZhdWx0VmFsdWU6IFRJdGVtID0gbnVsbCBhcyBhbnk7XG4gIHByaXZhdGUgX3NpemU6IENvbnRyb2xTaXplID0gQ29udHJvbFNpemUuTWVkaXVtO1xuICBwcml2YXRlIF9sb2FkaW5nVGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX25vSXRlbXNUZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfbWluU2VhcmNoVGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2xvY2FsaXphdGlvbjogSUNvbWJvYm94TG9jYWxpemF0aW9uID0ge1xuICAgIGxvYWRpbmdUZXh0OiAnTG9hZGluZy4uLicsXG4gICAgbm9JdGVtc1RleHQ6ICdObyBpdGVtcyBmb3VuZC4nLFxuICAgIG1pblNlYXJjaFRleHQ6ICdFbnRlciB7bWluU2VhcmNoQ2hhcmFjdGVyc30gb3IgbW9yZSBjaGFyYWN0ZXJzLicsXG4gIH07XG4gIEBWaWV3Q2hpbGQoJ2NvbXBvbmVudCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgY29tcG9uZW50ITogS2VuZG9Db21ib0JveENvbXBvbmVudDtcbiAgQENvbnRlbnRDaGlsZChDb21ib2JveEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2ctY29tYm9ib3gnKVxuICBwdWJsaWMgcmVhZG9ubHkgaGFzQ3NzQ2xhc3M6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNnLWNvbWJvYm94LS1oYXMtdmFsdWUnKVxuICBwdWJsaWMgZ2V0IGhhc0hhc1ZhbHVlQ3NzQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzVmFsdWU7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZy1jb21ib2JveC0taXMtaG92ZXJlZCcpXG4gIHB1YmxpYyBnZXQgaGFzSXNIb3ZlcmVkQ3NzQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzSG92ZXJlZC52YWx1ZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNnLWNvbWJvYm94LS1pcy1mb2N1c2VkJylcbiAgcHVibGljIGdldCBoYXNJc0ZvY3VzZWRDc3NDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0ZvY3VzZWQ7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZy1jb21ib2JveC0taXMtZGlzYWJsZWQnKVxuICBwdWJsaWMgZ2V0IGhhc0lzRGlzYWJsZWRDc3NDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2ctY29tYm9ib3gtLXR5cGUtc3VjY2VzcycpXG4gIHB1YmxpYyBnZXQgaXNTdWNjZXNzVHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdWNjZXNzVHlwZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNnLWNvbWJvYm94LS10eXBlLWVycm9yJylcbiAgcHVibGljIGdldCBpc0Vycm9yVHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNFcnJvclR5cGU7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZy1jb21ib2JveC0tdHlwZS13YXJuaW5nJylcbiAgcHVibGljIGdldCBpc1dhcm5pbmdUeXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1dhcm5pbmdUeXBlO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2ctY29tYm9ib3gtLXN0YXRlLWhpZ2hsaWdodGVkJylcbiAgcHVibGljIGdldCBpc0hpZ2hsaWdodGVkU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzSGlnaGxpZ2h0ZWRTdGF0ZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNnLWNvbWJvYm94LS1pcy1sb2FkaW5nJylcbiAgcHVibGljIGdldCBoYXNJc0xvYWRpbmdDc3NDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmcgfHwgdGhpcy5faXNTZWFyY2hpbmcudmFsdWU7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZy1jb21ib2JveC0taGFzLXJlc2V0JylcbiAgcHVibGljIGdldCBoYXNIYXNSZXNldENzc0NsYXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Jlc2V0O1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2ctY29tYm9ib3gtLWlzLW91dGxpbmUnKVxuICBwdWJsaWMgZ2V0IGhhc0lzT3V0bGluZUNzc0NsYXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzT3V0bGluZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNnLWNvbWJvYm94LS1zaXplLXNtYWxsJylcbiAgcHVibGljIGhhc1NtYWxsU2l6ZUNzc0NsYXNzOiBib29sZWFuID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2ctY29tYm9ib3gtLXNpemUtbWVkaXVtJylcbiAgcHVibGljIGhhc01lZGl1bVNpemVDc3NDbGFzczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgbG9hZGluZ1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZ1RleHQgfHwgdGhpcy5fbG9jYWxpemF0aW9uLmxvYWRpbmdUZXh0O1xuICB9XG4gIHB1YmxpYyBzZXQgbG9hZGluZ1RleHQobG9hZGluZ1RleHQ6IHN0cmluZykge1xuICAgIHRoaXMuX2xvYWRpbmdUZXh0ID0gbG9hZGluZ1RleHQ7XG4gIH1cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBub0l0ZW1zVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9ub0l0ZW1zVGV4dCB8fCB0aGlzLl9sb2NhbGl6YXRpb24ubm9JdGVtc1RleHQ7XG4gIH1cbiAgcHVibGljIHNldCBub0l0ZW1zVGV4dChub0l0ZW1zVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbm9JdGVtc1RleHQgPSBub0l0ZW1zVGV4dDtcbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IG1pblNlYXJjaFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbWluU2VhcmNoVGV4dCB8fCB0aGlzLl9sb2NhbGl6YXRpb24ubWluU2VhcmNoVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblNlYXJjaFRleHQobWluU2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbWluU2VhcmNoVGV4dCA9IG1pblNlYXJjaFRleHQ7XG4gIH1cbiAgQElucHV0KClcbiAgcHVibGljIHNob3VsZFN1Z2dlc3Q6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgb3Blbk9uRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxsb3dDdXN0b206IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBzaXplKCk6IENvbnRyb2xTaXplIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHNpemUoc2l6ZTogQ29udHJvbFNpemUpIHtcbiAgICBpZiAoc2l6ZSkge1xuICAgICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5oYXNTbWFsbFNpemVDc3NDbGFzcyA9IHRoaXMuX3NpemUgPT09IENvbnRyb2xTaXplLlNtYWxsO1xuICAgIHRoaXMuaGFzTWVkaXVtU2l6ZUNzc0NsYXNzID0gdGhpcy5fc2l6ZSA9PT0gQ29udHJvbFNpemUuTWVkaXVtO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGNvbnRhaW5zIGZhY3RvcnkgbWV0aG9kIGZvciBpdGVtcyB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgcGxhY2luZyBjdXN0b21pemFibGUgdmFsdWVzIGluc2lkZSBjb21wb25lbnQuIFdvcmtzIHdoZW4gYWxsb3dDdXN0b20gaXMgdHJ1ZS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXRlbUZhY3Rvcnk6ICh0ZXh0OiBzdHJpbmcpID0+IFRJdGVtID0gKHRleHQ6IHN0cmluZyk6IFRJdGVtID0+IHtcbiAgICByZXR1cm4ge1t0aGlzLnZhbHVlRmllbGRdOiBudWxsLCBbdGhpcy50ZXh0RmllbGRdOiB0ZXh0fSBhcyBhbnk7XG4gIH07XG4gIHB1YmxpYyBnZXQgcG9wdXBTZXR0aW5ncygpOiBQb3B1cFNldHRpbmdzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYW5pbWF0ZTogdHJ1ZSxcbiAgICAgIHBvcHVwQ2xhc3M6IGBzZy1jb21ib2JveC1wb3B1cCR7dGhpcy5pc0dyb3VwYWJsZSA/ICcgc2ctY29tYm9ib3gtcG9wdXAtLWlzLWdyb3VwYWJsZScgOiAnJ30gJHtcbiAgICAgICAgdGhpcy5wb3B1cENsYXNzIHx8ICcnXG4gICAgICB9YCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChDT01CT0JPWF9MT0NBTElaRVIpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbG9jYWxpemVyOiBJRHJvcGRvd25Mb2NhbGl6ZXI8SUNvbWJvYm94TG9jYWxpemF0aW9uPlxuICApIHtcbiAgICBzdXBlcihjaGFuZ2VEZXRlY3RvclJlZiwgcmVuZGVyZXIpO1xuICAgIHRoaXMuX2xvY2FsaXplKCk7XG4gIH1cblxuICBwcml2YXRlIF9sb2NhbGl6ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2xvY2FsaXplcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvY2FsaXphdGlvbiA9IHRoaXMuX2xvY2FsaXplci5sb2NhbGl6YXRpb247XG4gICAgdGhpcy5fb2JzZXJ2ZXIubGlzdGVuKHRoaXMuX2xvY2FsaXplci5sb2NhbGl6YXRpb25DaGFuZ2VkLCAobG9jYWxpemF0aW9uKSA9PiB7XG4gICAgICB0aGlzLl9sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25SZXNldENsaWNrZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc1Jlc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzZXRlZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgdGhpcy5fcmVzZXQoKTtcblxuICAgIGlmICh0aGlzLm9wZW5PbkZvY3VzKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0Q29tcG9uZW50KHRoaXMuY29tcG9uZW50KTtcbiAgICB0aGlzLmluaXQoKTtcblxuICAgIC8vIE9wZW5lZC5cbiAgICB0aGlzLl9vYnNlcnZlci5saXN0ZW4odGhpcy5faXNPcGVuLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQuaXNPcGVuKSksICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmVJdGVtc0NhY2hlZCkge1xuICAgICAgICB0aGlzLl9oYXNTZWFyY2hlZC5uZXh0KGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2FuTG9hZEl0ZW1zKHRoaXMuX3NlYXJjaFRleHQudmFsdWUpICYmIHRoaXMuX2xvYWRlZEl0ZW1zLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvYWRJdGVtcyh0aGlzLl9zZWFyY2hUZXh0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9vYnNlcnZlci5saXN0ZW4oXG4gICAgICB0aGlzLl9pc09wZW4ucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQuaXNPcGVuKSxcbiAgICAgICAgLy8gV2hlbiBjbGlja2luZyByZXNldCBpY29uLCBvcGVuZWQgZXZlbnQgdHJpZ2dlcnMgc2VhcmNoIGV2ZW50IHdpdGhcbiAgICAgICAgLy8gd2l0aCBvbGQgc2VhcmNoYmFyIHZhbHVlIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGdpdmUgc2VhcmNoYmFyIGEgbW9tZW50IGJlZm9yZSBmaXJlIG9wZW5lZCBldmVudC5cbiAgICAgICAgLy8gU3RlcHMgdG8gcmVwcm9kdWNlIHRoZSBidWc6XG4gICAgICAgIC8vIDEpIFNlYXJjaCBmb3IgVmxhZGl2b3N0b2sgYW5kIHNlbGVjdCBpdCAyKSBSZXNldCB2YWx1ZSB3aXRoIGljb25cbiAgICAgICAgLy8gMykgc2VhcmNoVGV4dCByZW1haW5zIFwiVmxhZGl2b3N0b2tcIiwgYnV0IHNob3VsZCBiZSBcIlwiLlxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApXG4gICAgICApLFxuICAgICAgKCkgPT4gdGhpcy5vcGVuZWQuZW1pdCgpXG4gICAgKTtcblxuICAgIC8vIEZvY3VzZWQuXG4gICAgdGhpcy5fb2JzZXJ2ZXIubGlzdGVuKHRoaXMuX2lzRm9jdXNlZC5waXBlKGZpbHRlcihpc1RydWUpKSwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3Blbk9uRm9jdXMpIHtcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25DaGFuZ2VkKHZhbHVlOiBUSXRlbSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNWYWx1ZUNoYW5nZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdGhpcy5kZWZhdWx0VmFsdWUgOiB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jb21wb25lbnQuc2VhcmNoYmFyLnN1Z2dlc3RlZFRleHQgPSAnJztcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZWQodmFsdWUpO1xuICAgIHRoaXMucHJvcGFnYXRlVG91Y2hlZCgpO1xuICAgIHRoaXMuX2VtaXRDaGFuZ2VkKHZhbHVlKTtcblxuICAgIGlmICghdmFsdWUgJiYgdGhpcy5faXNTeW5jKSB7XG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGl0ZW1zIGFmdGVyIHNlbGVjdGlvbiwgb3RoZXJ3aXNlIHdoZW4gb3BlbmluZyB0aGUgbGlzdFxuICAgICAgLy8gbmV4dCB0aW1lLCBvbmx5IHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIGl0ZW0gd2lsbCBhcHBlYXIuXG4gICAgICAvLyBTdGVwcyB0byByZXByb2R1Y2U6IDEpIFNlbGVjdCBcIkNheW1hbiBCcmFjXCIsIDIpIEZvY3VzIG91dCBhbmQgZm9jdXMgYmFjayxcbiAgICAgIC8vIDMpIERlbGV0ZSBhIGNvdXBsZSBvZiBjaGFyYWN0ZXJzIHdpdGggYSBCYWNrc3BhY2UgZnJvbSB0aGUgZW5kIGFuZCBoaXQgRW50ZXIuXG4gICAgICAvLyA0KSBPcGVuIHRoZSBsaXN0LlxuICAgICAgdGhpcy5sb2FkSXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdmFsdWVOb3JtYWxpemVyID0gKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pOiBhbnkgPT5cbiAgICB0ZXh0JC5waXBlKFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlOiBUSXRlbSB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENhbid0IHVzZSB0aGlzLl9zZWFyY2hUZXh0LnZhbHVlIGhlcmUgYXMgaXQgbWlnaHQgYmUgZW1wdHksIGNvbnNpZGVyOlxuICAgICAgICAvLyAxKSB0eXBlIGN1c3RvbSB0ZXh0LCAyKSBmb2N1cyBvdXQgYW5kIGJhY2sgaW4gMykgdGhlcmUncyBhIHRleHQgaW4gc2VhcmNoYmFyLFxuICAgICAgICAvLyBidXQgdGhpcy5fc2VhcmNoVGV4dC52YWx1ZSBpcyBlbXB0eS5cbiAgICAgICAgLy8gU28gdGhpcy5jb21wb25lbnQuc2VhcmNoYmFyLnZhbHVlIGlzIHRvIGJlIHVzZWQuXG4gICAgICAgIGNvbnN0IHRleHQ6IHN0cmluZyA9ICh0aGlzLmNvbXBvbmVudC5zZWFyY2hiYXIudmFsdWUgfHwgJycpLnRyaW0oKTtcblxuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb21wb25lbnQudmFsdWUgJiYgdGhpcy5jb21wb25lbnQudmFsdWVbdGhpcy50ZXh0RmllbGRdLnRvTG93ZXJDYXNlKCkgPT09IHRleHQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5jb21wb25lbnQudmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJdGVtKHRoaXMuX3ZhbHVlTm9ybWFsaXplckl0ZW1zLCB0ZXh0KSkge1xuICAgICAgICAgIC8vIElmIGFyZUl0ZW1zQ2FjaGVkIGlzIG9mZiwgdGhlbiB0aGlzLmRhdGEgd2lsbCBiZSBsb3N0IGJ5IHRoaXMgbW9tZW50LFxuICAgICAgICAgIC8vIHNvIHdlIHVzZSBhIGNhY2hlIHRoaXMudmFsdWVOb3JtYWxpemVySXRlbXMuXG4gICAgICAgICAgLy8gVGhpcyBpcyByZWxldmFudCBlc3BlY2lhbGx5IGluIElFL0VkZ2Ugd2hlcmUgdGhpcy5jb21wb25lbnQudmFsdWUgaXMgbnVsbCxcbiAgICAgICAgICAvLyBzbyB0aGUgY29kZSBmYWxscyBiYWNrIHRvIHRoaXMgY29uZGl0aW9uIHNlY3Rpb24uXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmdldEl0ZW0odGhpcy5fdmFsdWVOb3JtYWxpemVySXRlbXMsIHRleHQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWxsb3dDdXN0b20pIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuaXRlbUZhY3RvcnkodGV4dCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5faXNTeW5jKSB7XG4gICAgICAgICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGl0ZW1zIGFmdGVyIHNlbGVjdGlvbiwgb3RoZXJ3aXNlIHdoZW4gb3BlbmluZyB0aGUgbGlzdFxuICAgICAgICAgICAgLy8gbmV4dCB0aW1lLCBvbmx5IHRoZSBzZWxlY3RlZCBpdGVtIHdpbGwgYXBwZWFyLlxuICAgICAgICAgICAgdGhpcy5sb2FkSXRlbXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXJzIHNlYXJjaCB0ZXh0IGlmIHN1Z2dlc3Rpb24gaGFzbid0IGJlZW4gc2VsZWN0ZWQuXG4gICAgICAgICAgLy8gU3RlcHMgdG8gcmVwcm9kdWNlLlxuICAgICAgICAgIC8vIDEuIFVzZSBEeW1hbmljIEVtcHR5IHNhbXBsZS5cbiAgICAgICAgICAvLyAyLiBUeXBlICd0bycsIHdhaXQgZm9yIHRoZSBsaXN0IHRvIGxvYWQsIGJ1dCBkb24ndCBzZWxlY3QgJ1Rva2FpJy4gSW5zdGVhZCBoaXQgRXNjIGtleS5cbiAgICAgICAgICAvLyAzLiBTZWUgdGhhdCB0aGUgc2VhcmNoIGJhciBzdGlsbCBjb250YWlucyAndG8nIHRleHQsIHdoaWxlIHRoZSB2YWx1ZSBpcyBudWxsLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIHdyb25nIC0gc2VhcmNoIGJhciB0ZXh0IHNob3VsZCBiZSByZW1vdmVkLlxuICAgICAgICAgIC8vIHRoaXMuY29tcG9uZW50LnNlYXJjaGJhci5zdWdnZXN0ZWRUZXh0ID0gJyc7IC8vIFRoaXMgZG9lc24ndCB3b3JrLlxuICAgICAgICAgIC8vIEFzIHRoZSBhYm92ZSBsaW5lIGRvZXNuJ3Qgd29yaywgc28gd29ya2Fyb3VuZCBpdCBieSBzZXR0aW5nIGZvcm0gY29udHJvbCB2YWx1ZSB0byBudWxsLlxuICAgICAgICAgIHRoaXMudmFsdWVGb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl92YWx1ZU5vcm1hbGl6ZXJJdGVtcyA9IFtdO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIF9lbWl0Q2hhbmdlZCh2YWx1ZTogVEl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZWQuZW1pdChuZXcgQ29tYm9ib3hDaGFuZ2VkRXZlbnQodmFsdWUpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBoYXNWYWx1ZUNoYW5nZWQodmFsdWU6IFRJdGVtIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0l0ZW1FcXVhbCh0aGlzLnZhbHVlLCB2YWx1ZSk7XG4gIH1cblxufVxuIiwiPGtlbmRvLWNvbWJvYm94XHJcbiAgI2NvbXBvbmVudFxyXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgW2Zvcm1Db250cm9sXT1cInZhbHVlRm9ybUNvbnRyb2xcIlxyXG4gIFtkYXRhXT1cImNvbWJpbmVkSXRlbXMgfCBhc3luY1wiXHJcbiAgW2ZpbHRlcmFibGVdPVwiaXNTZWFyY2hhYmxlXCJcclxuICBbdmFsdWVGaWVsZF09XCJ2YWx1ZUtleVwiXHJcbiAgW3RleHRGaWVsZF09XCJ0ZXh0S2V5XCJcclxuICBbbG9hZGluZ109XCJpc0xvYWRpbmdTcGlubmVyVmlzaWJsZSB8IGFzeW5jXCJcclxuICBbY2xlYXJCdXR0b25dPVwiZmFsc2VcIlxyXG4gIFtwb3B1cFNldHRpbmdzXT1cInBvcHVwU2V0dGluZ3NcIlxyXG4gIFtsaXN0SGVpZ2h0XT1cImxpc3RIZWlnaHRcIlxyXG4gIFt2YWx1ZVByaW1pdGl2ZV09XCJpc1ByaW1pdGl2ZVZhbHVlXCJcclxuICBbc3VnZ2VzdF09XCJzaG91bGRTdWdnZXN0XCJcclxuICBbYWxsb3dDdXN0b21dPVwidHJ1ZVwiXHJcbiAgW3ZhbHVlTm9ybWFsaXplcl09XCJ2YWx1ZU5vcm1hbGl6ZXJcIlxyXG4gIChmaWx0ZXJDaGFuZ2UpPVwib25TZWFyY2hlZCgkZXZlbnQpXCJcclxuICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2VkKCRldmVudClcIlxyXG4gIChvcGVuKT1cIm9uT3BlbmVkKClcIlxyXG4gIChjbG9zZSk9XCJvbkNsb3NlZCgpXCJcclxuICAoZm9jdXMpPVwib25Gb2N1c2VkKClcIlxyXG4gIChibHVyKT1cIm9uQmx1cnJlZCgpXCJcclxuPlxyXG4gIDxuZy10ZW1wbGF0ZSBrZW5kb0Ryb3BEb3duTGlzdEZvb3RlclRlbXBsYXRlPlxyXG4gICAgPHNnLWNvbWJvYm94LXBvcHVwLWZvb3RlclxyXG4gICAgICBbaXNMb2FkaW5nVGV4dFZpc2libGVdPVwiaXNMb2FkaW5nVGV4dFZpc2libGUgfCBhc3luY1wiXHJcbiAgICAgIFtpc05vSXRlbXNUZXh0VmlzaWJsZV09XCJpc05vSXRlbXNUZXh0VmlzaWJsZSB8IGFzeW5jXCJcclxuICAgICAgW2lzTWluU2VhcmNoVGV4dFZpc2libGVdPVwiaXNNaW5TZWFyY2hUZXh0VmlzaWJsZSB8IGFzeW5jXCJcclxuICAgICAgW2xvYWRpbmdUZXh0XT1cImxvYWRpbmdUZXh0XCJcclxuICAgICAgW25vSXRlbXNUZXh0XT1cIm5vSXRlbXNUZXh0XCJcclxuICAgICAgW21pblNlYXJjaFRleHRdPVwibWluU2VhcmNoVGV4dFwiXHJcbiAgICAgIFttaW5TZWFyY2hDaGFyYWN0ZXJzXT1cIm1pblNlYXJjaENoYXJhY3RlcnNcIlxyXG4gICAgPlxyXG4gICAgPC9zZy1jb21ib2JveC1wb3B1cC1mb290ZXI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8bmctdGVtcGxhdGUga2VuZG9Db21ib0JveE5vRGF0YVRlbXBsYXRlPjwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXRlbVRlbXBsYXRlXCIga2VuZG9Db21ib0JveEl0ZW1UZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XHJcbiAgICA8c3BhbiBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGRhdGFJdGVtfVwiPjwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2tlbmRvLWNvbWJvYm94PlxyXG48ZGl2IGNsYXNzPVwic2ctY29tYm9ib3hfX3Jlc2V0XCIgKm5nSWY9XCIhaXNEaXNhYmxlZFwiIChjbGljayk9XCJvblJlc2V0Q2xpY2tlZCgpXCI+XHJcbiAgPGkgY2xhc3M9XCJmYXIgZmEtdGltZXNcIj48L2k+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwic2ctY29tYm9ib3hfX3N0YXRlLWxpbmVcIj48L2Rpdj5cclxuIl19
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, forwardRef, HostBinding, Inject, Input, Optional, Renderer2, TemplateRef, ViewChild, } from '@angular/core';
|
|
2
|
+
import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { ABSTRACT_CONTROL_COMPONENT, ControlSize, isTrue, OPENABLE_CONTROL_COMPONENT, SIZEABLE_CONTROL_COMPONENT, STATEABLE_CONTROL_COMPONENT, TYPEABLE_CONTROL_COMPONENT, } from '@marcura/marcura-common';
|
|
4
|
+
import { ComboBoxComponent as KendoComboBoxComponent } from '@progress/kendo-angular-dropdowns';
|
|
5
|
+
import { debounceTime, filter, map } from 'rxjs/operators';
|
|
6
|
+
import { COMBOBOX_LOCALIZER } from '../../combobox.injectables';
|
|
7
|
+
import { ComboboxItemTemplateDirective } from '../../directives/combobox-item-template.directive';
|
|
8
|
+
import { ComboboxChangedEvent } from '../../model/combobox-changed.event';
|
|
9
|
+
import { AbstractComboboxComponent } from '../abstract-combobox/abstract-combobox.component';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/common";
|
|
12
|
+
import * as i2 from "@angular/forms";
|
|
13
|
+
import * as i3 from "@progress/kendo-angular-dropdowns";
|
|
14
|
+
import * as i4 from "../combobox-popup-footer/combobox-popup-footer.component";
|
|
15
|
+
export class ComboboxComponent extends AbstractComboboxComponent {
|
|
16
|
+
get hasHasValueCssClass() {
|
|
17
|
+
return this.hasValue;
|
|
18
|
+
}
|
|
19
|
+
get hasIsHoveredCssClass() {
|
|
20
|
+
return this._isHovered.value;
|
|
21
|
+
}
|
|
22
|
+
get hasIsFocusedCssClass() {
|
|
23
|
+
return this.isFocused;
|
|
24
|
+
}
|
|
25
|
+
get hasIsDisabledCssClass() {
|
|
26
|
+
return this.isDisabled;
|
|
27
|
+
}
|
|
28
|
+
get isSuccessType() {
|
|
29
|
+
return this._isSuccessType;
|
|
30
|
+
}
|
|
31
|
+
get isErrorType() {
|
|
32
|
+
return this._isErrorType;
|
|
33
|
+
}
|
|
34
|
+
get isWarningType() {
|
|
35
|
+
return this._isWarningType;
|
|
36
|
+
}
|
|
37
|
+
get isHighlightedState() {
|
|
38
|
+
return this._isHighlightedState;
|
|
39
|
+
}
|
|
40
|
+
get hasIsLoadingCssClass() {
|
|
41
|
+
return this.isLoading || this._isSearching.value;
|
|
42
|
+
}
|
|
43
|
+
get hasHasResetCssClass() {
|
|
44
|
+
return this.hasReset;
|
|
45
|
+
}
|
|
46
|
+
get hasIsOutlineCssClass() {
|
|
47
|
+
return this.isOutline;
|
|
48
|
+
}
|
|
49
|
+
get loadingText() {
|
|
50
|
+
return this._loadingText || this._localization.loadingText;
|
|
51
|
+
}
|
|
52
|
+
set loadingText(loadingText) {
|
|
53
|
+
this._loadingText = loadingText;
|
|
54
|
+
}
|
|
55
|
+
get noItemsText() {
|
|
56
|
+
return this._noItemsText || this._localization.noItemsText;
|
|
57
|
+
}
|
|
58
|
+
set noItemsText(noItemsText) {
|
|
59
|
+
this._noItemsText = noItemsText;
|
|
60
|
+
}
|
|
61
|
+
get minSearchText() {
|
|
62
|
+
return this._minSearchText || this._localization.minSearchText;
|
|
63
|
+
}
|
|
64
|
+
set minSearchText(minSearchText) {
|
|
65
|
+
this._minSearchText = minSearchText;
|
|
66
|
+
}
|
|
67
|
+
get size() {
|
|
68
|
+
return this._size;
|
|
69
|
+
}
|
|
70
|
+
set size(size) {
|
|
71
|
+
if (size) {
|
|
72
|
+
this._size = size;
|
|
73
|
+
}
|
|
74
|
+
this.hasSmallSizeCssClass = this._size === ControlSize.Small;
|
|
75
|
+
this.hasMediumSizeCssClass = this._size === ControlSize.Medium;
|
|
76
|
+
}
|
|
77
|
+
get popupSettings() {
|
|
78
|
+
return {
|
|
79
|
+
animate: true,
|
|
80
|
+
appendTo: this.appendPopupToRoot ? 'root' : 'component',
|
|
81
|
+
popupClass: `sg-combobox-popup${this.isGroupable ? ' sg-combobox-popup--is-groupable' : ''} ${this.popupClass || ''}`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
constructor(changeDetectorRef, renderer, _localizer) {
|
|
85
|
+
super(changeDetectorRef, renderer);
|
|
86
|
+
this._localizer = _localizer;
|
|
87
|
+
// TODO: technical-debt this component shouldn't have default value
|
|
88
|
+
this.defaultValue = null;
|
|
89
|
+
this._size = ControlSize.Medium;
|
|
90
|
+
this._loadingText = null;
|
|
91
|
+
this._noItemsText = null;
|
|
92
|
+
this._minSearchText = null;
|
|
93
|
+
this._localization = {
|
|
94
|
+
loadingText: 'Loading...',
|
|
95
|
+
noItemsText: 'No items found.',
|
|
96
|
+
minSearchText: 'Enter {minSearchCharacters} or more characters.',
|
|
97
|
+
};
|
|
98
|
+
this.itemTemplate = null;
|
|
99
|
+
this.hasCssClass = true;
|
|
100
|
+
this.hasSmallSizeCssClass = false;
|
|
101
|
+
this.hasMediumSizeCssClass = true;
|
|
102
|
+
this.shouldSuggest = true;
|
|
103
|
+
this.openOnFocus = true;
|
|
104
|
+
this.allowCustom = false;
|
|
105
|
+
this.appendPopupToRoot = true;
|
|
106
|
+
/**
|
|
107
|
+
* This field contains factory method for items which will be created placing customizable values inside component. Works when allowCustom is true.
|
|
108
|
+
*
|
|
109
|
+
* @memberof ComboboxComponent
|
|
110
|
+
*/
|
|
111
|
+
this.itemFactory = (text) => {
|
|
112
|
+
return { [this.valueField]: null, [this.textField]: text };
|
|
113
|
+
};
|
|
114
|
+
this.valueNormalizer = (text$) => text$.pipe(map(() => {
|
|
115
|
+
let value = null;
|
|
116
|
+
if (!this.component) {
|
|
117
|
+
return value;
|
|
118
|
+
}
|
|
119
|
+
// Can't use this._searchText.value here as it might be empty, consider:
|
|
120
|
+
// 1) type custom text, 2) focus out and back in 3) there's a text in searchbar,
|
|
121
|
+
// but this._searchText.value is empty.
|
|
122
|
+
// So this.component.searchbar.value is to be used.
|
|
123
|
+
const text = (this.component.searchbar.value || '').trim();
|
|
124
|
+
if (!text) {
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
if (this.component.value && this.component.value[this.textField].toLowerCase() === text.toLowerCase()) {
|
|
128
|
+
value = this.component.value;
|
|
129
|
+
}
|
|
130
|
+
else if (this.getItem(this._valueNormalizerItems, text)) {
|
|
131
|
+
// If areItemsCached is off, then this.data will be lost by this moment,
|
|
132
|
+
// so we use a cache this.valueNormalizerItems.
|
|
133
|
+
// This is relevant especially in IE/Edge where this.component.value is null,
|
|
134
|
+
// so the code falls back to this condition section.
|
|
135
|
+
value = this.getItem(this._valueNormalizerItems, text);
|
|
136
|
+
}
|
|
137
|
+
else if (this.allowCustom) {
|
|
138
|
+
value = this.itemFactory(text);
|
|
139
|
+
if (this._isSync) {
|
|
140
|
+
// Restore original items after selection, otherwise when opening the list
|
|
141
|
+
// next time, only the selected item will appear.
|
|
142
|
+
this.loadItems();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Clears search text if suggestion hasn't been selected.
|
|
147
|
+
// Steps to reproduce.
|
|
148
|
+
// 1. Use Dymanic Empty sample.
|
|
149
|
+
// 2. Type 'to', wait for the list to load, but don't select 'Tokai'. Instead hit Esc key.
|
|
150
|
+
// 3. See that the search bar still contains 'to' text, while the value is null,
|
|
151
|
+
// which is wrong - search bar text should be removed.
|
|
152
|
+
// this.component.searchbar.suggestedText = ''; // This doesn't work.
|
|
153
|
+
// As the above line doesn't work, so workaround it by setting form control value to null.
|
|
154
|
+
this.valueFormControl.setValue(value);
|
|
155
|
+
}
|
|
156
|
+
this._valueNormalizerItems = [];
|
|
157
|
+
return value;
|
|
158
|
+
}));
|
|
159
|
+
this._localize();
|
|
160
|
+
}
|
|
161
|
+
_localize() {
|
|
162
|
+
if (!this._localizer) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
this._localization = this._localizer.localization;
|
|
166
|
+
this._observer.listen(this._localizer.localizationChanged, (localization) => {
|
|
167
|
+
this._localization = localization;
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
onResetClicked() {
|
|
171
|
+
if (!this.hasReset) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
this._resetedValue = this.value;
|
|
175
|
+
this.focus();
|
|
176
|
+
this._reset();
|
|
177
|
+
if (this.openOnFocus) {
|
|
178
|
+
this.open();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
ngOnInit() {
|
|
182
|
+
this._setComponent(this.component);
|
|
183
|
+
this.init();
|
|
184
|
+
// Opened.
|
|
185
|
+
this._observer.listen(this._isOpen.pipe(filter((event) => event.isOpen)), () => {
|
|
186
|
+
if (!this.areItemsCached) {
|
|
187
|
+
this._hasSearched.next(false);
|
|
188
|
+
}
|
|
189
|
+
if (this.canLoadItems(this._searchText.value) && this._loadedItems.value.length === 0) {
|
|
190
|
+
this.loadItems(this._searchText.value);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
this._observer.listen(this._isOpen.pipe(filter((event) => event.isOpen),
|
|
194
|
+
// When clicking reset icon, opened event triggers search event with
|
|
195
|
+
// with old searchbar value instead of an empty string.
|
|
196
|
+
// So we need to give searchbar a moment before fire opened event.
|
|
197
|
+
// Steps to reproduce the bug:
|
|
198
|
+
// 1) Search for Vladivostok and select it 2) Reset value with icon
|
|
199
|
+
// 3) searchText remains "Vladivostok", but should be "".
|
|
200
|
+
debounceTime(50)), () => this.opened.emit());
|
|
201
|
+
// Focused.
|
|
202
|
+
this._observer.listen(this._isFocused.pipe(filter(isTrue)), () => {
|
|
203
|
+
if (this.openOnFocus) {
|
|
204
|
+
this.open();
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
onChanged(value) {
|
|
209
|
+
if (!this.hasValueChanged(value)) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
value = value === undefined ? this.defaultValue : value;
|
|
213
|
+
this.value = value;
|
|
214
|
+
this.component.searchbar.suggestedText = '';
|
|
215
|
+
this.propagateChanged(value);
|
|
216
|
+
this.propagateTouched();
|
|
217
|
+
this._emitChanged(value);
|
|
218
|
+
if (!value && this._isSync) {
|
|
219
|
+
// Restore original items after selection, otherwise when opening the list
|
|
220
|
+
// next time, only the previously selected item will appear.
|
|
221
|
+
// Steps to reproduce: 1) Select "Cayman Brac", 2) Focus out and focus back,
|
|
222
|
+
// 3) Delete a couple of characters with a Backspace from the end and hit Enter.
|
|
223
|
+
// 4) Open the list.
|
|
224
|
+
this.loadItems();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
_emitChanged(value) {
|
|
228
|
+
this.changed.emit(new ComboboxChangedEvent(value));
|
|
229
|
+
}
|
|
230
|
+
hasValueChanged(value) {
|
|
231
|
+
return !this.isItemEqual(this.value, value);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
ComboboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: ComboboxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: COMBOBOX_LOCALIZER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
235
|
+
ComboboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: ComboboxComponent, selector: "sg-combobox", inputs: { formControl: "formControl", loadingText: "loadingText", noItemsText: "noItemsText", minSearchText: "minSearchText", shouldSuggest: "shouldSuggest", openOnFocus: "openOnFocus", allowCustom: "allowCustom", appendPopupToRoot: "appendPopupToRoot", size: "size", itemFactory: "itemFactory" }, host: { properties: { "class.sg-combobox": "this.hasCssClass", "class.sg-combobox--has-value": "this.hasHasValueCssClass", "class.sg-combobox--is-hovered": "this.hasIsHoveredCssClass", "class.sg-combobox--is-focused": "this.hasIsFocusedCssClass", "class.sg-combobox--is-disabled": "this.hasIsDisabledCssClass", "class.sg-combobox--type-success": "this.isSuccessType", "class.sg-combobox--type-error": "this.isErrorType", "class.sg-combobox--type-warning": "this.isWarningType", "class.sg-combobox--state-highlighted": "this.isHighlightedState", "class.sg-combobox--is-loading": "this.hasIsLoadingCssClass", "class.sg-combobox--has-reset": "this.hasHasResetCssClass", "class.sg-combobox--is-outline": "this.hasIsOutlineCssClass", "class.sg-combobox--size-small": "this.hasSmallSizeCssClass", "class.sg-combobox--size-medium": "this.hasMediumSizeCssClass" } }, providers: [
|
|
236
|
+
{
|
|
237
|
+
provide: NG_VALUE_ACCESSOR,
|
|
238
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
239
|
+
multi: true,
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
provide: ABSTRACT_CONTROL_COMPONENT,
|
|
243
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
provide: OPENABLE_CONTROL_COMPONENT,
|
|
247
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
provide: STATEABLE_CONTROL_COMPONENT,
|
|
251
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
provide: TYPEABLE_CONTROL_COMPONENT,
|
|
255
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
provide: SIZEABLE_CONTROL_COMPONENT,
|
|
259
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
260
|
+
},
|
|
261
|
+
], queries: [{ propertyName: "itemTemplate", first: true, predicate: ComboboxItemTemplateDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "component", first: true, predicate: ["component"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<kendo-combobox\n #component\n [placeholder]=\"placeholder\"\n [formControl]=\"valueFormControl\"\n [data]=\"combinedItems | async\"\n [filterable]=\"isSearchable\"\n [valueField]=\"valueKey\"\n [textField]=\"textKey\"\n [loading]=\"isLoadingSpinnerVisible | async\"\n [clearButton]=\"false\"\n [popupSettings]=\"popupSettings\"\n [listHeight]=\"listHeight\"\n [valuePrimitive]=\"isPrimitiveValue\"\n [suggest]=\"shouldSuggest\"\n [allowCustom]=\"true\"\n [valueNormalizer]=\"valueNormalizer\"\n (filterChange)=\"onSearched($event)\"\n (valueChange)=\"onChanged($event)\"\n (open)=\"onOpened()\"\n (close)=\"onClosed()\"\n (focus)=\"onFocused()\"\n (blur)=\"onBlurred()\"\n>\n <ng-template kendoDropDownListFooterTemplate>\n <sg-combobox-popup-footer\n [isLoadingTextVisible]=\"isLoadingTextVisible | async\"\n [isNoItemsTextVisible]=\"isNoItemsTextVisible | async\"\n [isMinSearchTextVisible]=\"isMinSearchTextVisible | async\"\n [loadingText]=\"loadingText\"\n [noItemsText]=\"noItemsText\"\n [minSearchText]=\"minSearchText\"\n [minSearchCharacters]=\"minSearchCharacters\"\n >\n </sg-combobox-popup-footer>\n </ng-template>\n <ng-template kendoComboBoxNoDataTemplate></ng-template>\n <ng-template *ngIf=\"itemTemplate\" kendoComboBoxItemTemplate let-dataItem>\n <span [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{item: dataItem}\"></span>\n </ng-template>\n</kendo-combobox>\n<div class=\"sg-combobox__reset\" *ngIf=\"!isDisabled\" (click)=\"onResetClicked()\">\n <i class=\"far fa-times\"></i>\n</div>\n<div class=\"sg-combobox__state-line\"></div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.ComboBoxComponent, selector: "kendo-combobox", inputs: ["focusableId", "allowCustom", "valueNormalizer", "placeholder", "listHeight", "suggest", "clearButton", "disabled", "readonly", "tabindex", "filterable", "data", "value", "valuePrimitive", "popupSettings", "itemDisabled", "tabIndex", "virtual", "loading", "textField", "valueField", "iconClass"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoComboBox"] }, { kind: "directive", type: i3.FooterTemplateDirective, selector: "[kendoDropDownListFooterTemplate],[kendoComboBoxFooterTemplate],[kendoDropDownTreeFooterTemplate],[kendoMultiColumnComboBoxFooterTemplate],[kendoAutoCompleteFooterTemplate],[kendoMultiSelectFooterTemplate],[kendoMultiSelectTreeFooterTemplate]" }, { kind: "directive", type: i3.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "directive", type: i3.NoDataTemplateDirective, selector: "[kendoDropDownListNoDataTemplate],[kendoDropDownTreeNoDataTemplate],[kendoComboBoxNoDataTemplate],[kendoMultiColumnComboBoxNoDataTemplate],[kendoAutoCompleteNoDataTemplate],[kendoMultiSelectNoDataTemplate],[kendoMultiSelectTreeNoDataTemplate]" }, { kind: "component", type: i4.ComboboxPopupFooterComponent, selector: "sg-combobox-popup-footer", inputs: ["isLoadingTextVisible", "isNoItemsTextVisible", "isMinSearchTextVisible", "loadingText", "noItemsText", "minSearchText", "minSearchCharacters"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
262
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: ComboboxComponent, decorators: [{
|
|
263
|
+
type: Component,
|
|
264
|
+
args: [{ selector: 'sg-combobox', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
265
|
+
{
|
|
266
|
+
provide: NG_VALUE_ACCESSOR,
|
|
267
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
268
|
+
multi: true,
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
provide: ABSTRACT_CONTROL_COMPONENT,
|
|
272
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
provide: OPENABLE_CONTROL_COMPONENT,
|
|
276
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
provide: STATEABLE_CONTROL_COMPONENT,
|
|
280
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
provide: TYPEABLE_CONTROL_COMPONENT,
|
|
284
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
provide: SIZEABLE_CONTROL_COMPONENT,
|
|
288
|
+
useExisting: forwardRef(() => ComboboxComponent),
|
|
289
|
+
},
|
|
290
|
+
], template: "<kendo-combobox\n #component\n [placeholder]=\"placeholder\"\n [formControl]=\"valueFormControl\"\n [data]=\"combinedItems | async\"\n [filterable]=\"isSearchable\"\n [valueField]=\"valueKey\"\n [textField]=\"textKey\"\n [loading]=\"isLoadingSpinnerVisible | async\"\n [clearButton]=\"false\"\n [popupSettings]=\"popupSettings\"\n [listHeight]=\"listHeight\"\n [valuePrimitive]=\"isPrimitiveValue\"\n [suggest]=\"shouldSuggest\"\n [allowCustom]=\"true\"\n [valueNormalizer]=\"valueNormalizer\"\n (filterChange)=\"onSearched($event)\"\n (valueChange)=\"onChanged($event)\"\n (open)=\"onOpened()\"\n (close)=\"onClosed()\"\n (focus)=\"onFocused()\"\n (blur)=\"onBlurred()\"\n>\n <ng-template kendoDropDownListFooterTemplate>\n <sg-combobox-popup-footer\n [isLoadingTextVisible]=\"isLoadingTextVisible | async\"\n [isNoItemsTextVisible]=\"isNoItemsTextVisible | async\"\n [isMinSearchTextVisible]=\"isMinSearchTextVisible | async\"\n [loadingText]=\"loadingText\"\n [noItemsText]=\"noItemsText\"\n [minSearchText]=\"minSearchText\"\n [minSearchCharacters]=\"minSearchCharacters\"\n >\n </sg-combobox-popup-footer>\n </ng-template>\n <ng-template kendoComboBoxNoDataTemplate></ng-template>\n <ng-template *ngIf=\"itemTemplate\" kendoComboBoxItemTemplate let-dataItem>\n <span [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{item: dataItem}\"></span>\n </ng-template>\n</kendo-combobox>\n<div class=\"sg-combobox__reset\" *ngIf=\"!isDisabled\" (click)=\"onResetClicked()\">\n <i class=\"far fa-times\"></i>\n</div>\n<div class=\"sg-combobox__state-line\"></div>\n" }]
|
|
291
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
292
|
+
type: Optional
|
|
293
|
+
}, {
|
|
294
|
+
type: Inject,
|
|
295
|
+
args: [COMBOBOX_LOCALIZER]
|
|
296
|
+
}] }]; }, propDecorators: { formControl: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], component: [{
|
|
299
|
+
type: ViewChild,
|
|
300
|
+
args: ['component', { static: true }]
|
|
301
|
+
}], itemTemplate: [{
|
|
302
|
+
type: ContentChild,
|
|
303
|
+
args: [ComboboxItemTemplateDirective, { read: TemplateRef, static: true }]
|
|
304
|
+
}], hasCssClass: [{
|
|
305
|
+
type: HostBinding,
|
|
306
|
+
args: ['class.sg-combobox']
|
|
307
|
+
}], hasHasValueCssClass: [{
|
|
308
|
+
type: HostBinding,
|
|
309
|
+
args: ['class.sg-combobox--has-value']
|
|
310
|
+
}], hasIsHoveredCssClass: [{
|
|
311
|
+
type: HostBinding,
|
|
312
|
+
args: ['class.sg-combobox--is-hovered']
|
|
313
|
+
}], hasIsFocusedCssClass: [{
|
|
314
|
+
type: HostBinding,
|
|
315
|
+
args: ['class.sg-combobox--is-focused']
|
|
316
|
+
}], hasIsDisabledCssClass: [{
|
|
317
|
+
type: HostBinding,
|
|
318
|
+
args: ['class.sg-combobox--is-disabled']
|
|
319
|
+
}], isSuccessType: [{
|
|
320
|
+
type: HostBinding,
|
|
321
|
+
args: ['class.sg-combobox--type-success']
|
|
322
|
+
}], isErrorType: [{
|
|
323
|
+
type: HostBinding,
|
|
324
|
+
args: ['class.sg-combobox--type-error']
|
|
325
|
+
}], isWarningType: [{
|
|
326
|
+
type: HostBinding,
|
|
327
|
+
args: ['class.sg-combobox--type-warning']
|
|
328
|
+
}], isHighlightedState: [{
|
|
329
|
+
type: HostBinding,
|
|
330
|
+
args: ['class.sg-combobox--state-highlighted']
|
|
331
|
+
}], hasIsLoadingCssClass: [{
|
|
332
|
+
type: HostBinding,
|
|
333
|
+
args: ['class.sg-combobox--is-loading']
|
|
334
|
+
}], hasHasResetCssClass: [{
|
|
335
|
+
type: HostBinding,
|
|
336
|
+
args: ['class.sg-combobox--has-reset']
|
|
337
|
+
}], hasIsOutlineCssClass: [{
|
|
338
|
+
type: HostBinding,
|
|
339
|
+
args: ['class.sg-combobox--is-outline']
|
|
340
|
+
}], hasSmallSizeCssClass: [{
|
|
341
|
+
type: HostBinding,
|
|
342
|
+
args: ['class.sg-combobox--size-small']
|
|
343
|
+
}], hasMediumSizeCssClass: [{
|
|
344
|
+
type: HostBinding,
|
|
345
|
+
args: ['class.sg-combobox--size-medium']
|
|
346
|
+
}], loadingText: [{
|
|
347
|
+
type: Input
|
|
348
|
+
}], noItemsText: [{
|
|
349
|
+
type: Input
|
|
350
|
+
}], minSearchText: [{
|
|
351
|
+
type: Input
|
|
352
|
+
}], shouldSuggest: [{
|
|
353
|
+
type: Input
|
|
354
|
+
}], openOnFocus: [{
|
|
355
|
+
type: Input
|
|
356
|
+
}], allowCustom: [{
|
|
357
|
+
type: Input
|
|
358
|
+
}], appendPopupToRoot: [{
|
|
359
|
+
type: Input
|
|
360
|
+
}], size: [{
|
|
361
|
+
type: Input
|
|
362
|
+
}], itemFactory: [{
|
|
363
|
+
type: Input
|
|
364
|
+
}] } });
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsV0FBVyxFQUVYLE1BQU0sRUFDTiwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLDJCQUEyQixFQUMzQiwwQkFBMEIsR0FDM0IsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUMsaUJBQWlCLElBQUksc0JBQXNCLEVBQWdCLE1BQU0sbUNBQW1DLENBQUM7QUFFN0csT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDaEcsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFHeEUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sa0RBQWtELENBQUM7Ozs7OztBQWtDM0YsTUFBTSxPQUFPLGlCQUF5QixTQUFRLHlCQUEy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QyxhQUFhO3NCQURuQixLQUFLO2dCQUdDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBR0MsV0FBVztzQkFEakIsS0FBSztnQkFHQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBR0ssSUFBSTtzQkFEZCxLQUFLO2dCQWtCQyxXQUFXO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQUJTVFJBQ1RfQ09OVFJPTF9DT01QT05FTlQsXG4gIENvbnRyb2xTaXplLFxuICBJU2l6ZWFibGVDb250cm9sQ29tcG9uZW50LFxuICBpc1RydWUsXG4gIE9QRU5BQkxFX0NPTlRST0xfQ09NUE9ORU5ULFxuICBTSVpFQUJMRV9DT05UUk9MX0NPTVBPTkVOVCxcbiAgU1RBVEVBQkxFX0NPTlRST0xfQ09NUE9ORU5ULFxuICBUWVBFQUJMRV9DT05UUk9MX0NPTVBPTkVOVCxcbn0gZnJvbSAnQG1hcmN1cmEvbWFyY3VyYS1jb21tb24nO1xuaW1wb3J0IHtDb21ib0JveENvbXBvbmVudCBhcyBLZW5kb0NvbWJvQm94Q29tcG9uZW50LCBQb3B1cFNldHRpbmdzfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kcm9wZG93bnMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDT01CT0JPWF9MT0NBTElaRVJ9IGZyb20gJy4uLy4uL2NvbWJvYm94LmluamVjdGFibGVzJztcbmltcG9ydCB7Q29tYm9ib3hJdGVtVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29tYm9ib3gtaXRlbS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtDb21ib2JveENoYW5nZWRFdmVudH0gZnJvbSAnLi4vLi4vbW9kZWwvY29tYm9ib3gtY2hhbmdlZC5ldmVudCc7XG5pbXBvcnQge0lDb21ib2JveExvY2FsaXphdGlvbn0gZnJvbSAnLi4vLi4vbW9kZWwvY29tYm9ib3gtbG9jYWxpemF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQge0lEcm9wZG93bkxvY2FsaXplcn0gZnJvbSAnLi4vLi4vbW9kZWwvZHJvcGRvd24tbG9jYWxpemVyLmludGVyZmFjZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29tYm9ib3hDb21wb25lbnR9IGZyb20gJy4uL2Fic3RyYWN0LWNvbWJvYm94L2Fic3RyYWN0LWNvbWJvYm94LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NnLWNvbWJvYm94JyxcbiAgdGVtcGxhdGVVcmw6ICdjb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvYm94Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQUJTVFJBQ1RfQ09OVFJPTF9DT01QT05FTlQsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb21ib2JveENvbXBvbmVudCksXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBPUEVOQUJMRV9DT05UUk9MX0NPTVBPTkVOVCxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvYm94Q29tcG9uZW50KSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNUQVRFQUJMRV9DT05UUk9MX0NPTVBPTkVOVCxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvYm94Q29tcG9uZW50KSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRZUEVBQkxFX0NPTlRST0xfQ09NUE9ORU5ULFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29tYm9ib3hDb21wb25lbnQpLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogU0laRUFCTEVfQ09OVFJPTF9DT01QT05FTlQsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb21ib2JveENvbXBvbmVudCksXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hDb21wb25lbnQ8VEl0ZW0+IGV4dGVuZHMgQWJzdHJhY3RDb21ib2JveENvbXBvbmVudDxUSXRlbSwgVEl0ZW0gfCBudWxsLCBDb21ib2JveENoYW5nZWRFdmVudDxUSXRlbT4+XG4gIGltcGxlbWVudHMgSVNpemVhYmxlQ29udHJvbENvbXBvbmVudCwgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIG92ZXJyaWRlIGZvcm1Db250cm9sITogRm9ybUNvbnRyb2w8VEl0ZW0gfCBudWxsPjtcblxuICAvLyBUT0RPOiB0ZWNobmljYWwtZGVidCB0aGlzIGNvbXBvbmVudCBzaG91bGRuJ3QgaGF2ZSBkZWZhdWx0IHZhbHVlXG4gIHB1YmxpYyBvdmVycmlkZSByZWFkb25seSBkZWZhdWx0VmFsdWU6IFRJdGVtID0gbnVsbCBhcyBhbnk7XG4gIHByaXZhdGUgX3NpemU6IENvbnRyb2xTaXplID0gQ29udHJvbFNpemUuTWVkaXVtO1xuICBwcml2YXRlIF9sb2FkaW5nVGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX25vSXRlbXNUZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfbWluU2VhcmNoVGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2xvY2FsaXphdGlvbjogSUNvbWJvYm94TG9jYWxpemF0aW9uID0ge1xuICAgIGxvYWRpbmdUZXh0OiAnTG9hZGluZy4uLicsXG4gICAgbm9JdGVtc1RleHQ6ICdObyBpdGVtcyBmb3VuZC4nLFxuICAgIG1pblNlYXJjaFRleHQ6ICdFbnRlciB7bWluU2VhcmNoQ2hhcmFjdGVyc30gb3IgbW9yZSBjaGFyYWN0ZXJzLicsXG4gIH07XG4gIEBWaWV3Q2hpbGQoJ2NvbXBvbmVudCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgY29tcG9uZW50ITogS2VuZG9Db21ib0JveENvbXBvbmVudDtcbiAgQENvbnRlbnRDaGlsZChDb21ib2JveEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2ctY29tYm9ib3gnKVxuICBwdWJsaWMgcmVhZG9ubHkgaGFzQ3NzQ2xhc3M6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNnLWNvbWJvYm94LS1oYXMtdmFsdWUnKVxuICBwdWJsaWMgZ2V0IGhhc0hhc1ZhbHVlQ3NzQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzVmFsdWU7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZy1jb21ib2JveC0taXMtaG92ZXJlZCcpXG4gIHB1YmxpYyBnZXQgaGFzSXNIb3ZlcmVkQ3NzQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzSG92ZXJlZC52YWx1ZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNnLWNvbWJvYm94LS1pcy1mb2N1c2VkJylcbiAgcHVibGljIGdldCBoYXNJc0ZvY3VzZWRDc3NDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0ZvY3VzZWQ7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZy1jb21ib2JveC0taXMtZGlzYWJsZWQnKVxuICBwdWJsaWMgZ2V0IGhhc0lzRGlzYWJsZWRDc3NDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2ctY29tYm9ib3gtLXR5cGUtc3VjY2VzcycpXG4gIHB1YmxpYyBnZXQgaXNTdWNjZXNzVHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdWNjZXNzVHlwZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNnLWNvbWJvYm94LS10eXBlLWVycm9yJylcbiAgcHVibGljIGdldCBpc0Vycm9yVHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNFcnJvclR5cGU7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZy1jb21ib2JveC0tdHlwZS13YXJuaW5nJylcbiAgcHVibGljIGdldCBpc1dhcm5pbmdUeXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1dhcm5pbmdUeXBlO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2ctY29tYm9ib3gtLXN0YXRlLWhpZ2hsaWdodGVkJylcbiAgcHVibGljIGdldCBpc0hpZ2hsaWdodGVkU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzSGlnaGxpZ2h0ZWRTdGF0ZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNnLWNvbWJvYm94LS1pcy1sb2FkaW5nJylcbiAgcHVibGljIGdldCBoYXNJc0xvYWRpbmdDc3NDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmcgfHwgdGhpcy5faXNTZWFyY2hpbmcudmFsdWU7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZy1jb21ib2JveC0taGFzLXJlc2V0JylcbiAgcHVibGljIGdldCBoYXNIYXNSZXNldENzc0NsYXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Jlc2V0O1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2ctY29tYm9ib3gtLWlzLW91dGxpbmUnKVxuICBwdWJsaWMgZ2V0IGhhc0lzT3V0bGluZUNzc0NsYXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzT3V0bGluZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNnLWNvbWJvYm94LS1zaXplLXNtYWxsJylcbiAgcHVibGljIGhhc1NtYWxsU2l6ZUNzc0NsYXNzOiBib29sZWFuID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2ctY29tYm9ib3gtLXNpemUtbWVkaXVtJylcbiAgcHVibGljIGhhc01lZGl1bVNpemVDc3NDbGFzczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgbG9hZGluZ1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZ1RleHQgfHwgdGhpcy5fbG9jYWxpemF0aW9uLmxvYWRpbmdUZXh0O1xuICB9XG4gIHB1YmxpYyBzZXQgbG9hZGluZ1RleHQobG9hZGluZ1RleHQ6IHN0cmluZykge1xuICAgIHRoaXMuX2xvYWRpbmdUZXh0ID0gbG9hZGluZ1RleHQ7XG4gIH1cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBub0l0ZW1zVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9ub0l0ZW1zVGV4dCB8fCB0aGlzLl9sb2NhbGl6YXRpb24ubm9JdGVtc1RleHQ7XG4gIH1cbiAgcHVibGljIHNldCBub0l0ZW1zVGV4dChub0l0ZW1zVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbm9JdGVtc1RleHQgPSBub0l0ZW1zVGV4dDtcbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IG1pblNlYXJjaFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbWluU2VhcmNoVGV4dCB8fCB0aGlzLl9sb2NhbGl6YXRpb24ubWluU2VhcmNoVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblNlYXJjaFRleHQobWluU2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbWluU2VhcmNoVGV4dCA9IG1pblNlYXJjaFRleHQ7XG4gIH1cbiAgQElucHV0KClcbiAgcHVibGljIHNob3VsZFN1Z2dlc3Q6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgb3Blbk9uRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxsb3dDdXN0b206IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGFwcGVuZFBvcHVwVG9Sb290OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBzaXplKCk6IENvbnRyb2xTaXplIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHNpemUoc2l6ZTogQ29udHJvbFNpemUpIHtcbiAgICBpZiAoc2l6ZSkge1xuICAgICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5oYXNTbWFsbFNpemVDc3NDbGFzcyA9IHRoaXMuX3NpemUgPT09IENvbnRyb2xTaXplLlNtYWxsO1xuICAgIHRoaXMuaGFzTWVkaXVtU2l6ZUNzc0NsYXNzID0gdGhpcy5fc2l6ZSA9PT0gQ29udHJvbFNpemUuTWVkaXVtO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGNvbnRhaW5zIGZhY3RvcnkgbWV0aG9kIGZvciBpdGVtcyB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgcGxhY2luZyBjdXN0b21pemFibGUgdmFsdWVzIGluc2lkZSBjb21wb25lbnQuIFdvcmtzIHdoZW4gYWxsb3dDdXN0b20gaXMgdHJ1ZS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXRlbUZhY3Rvcnk6ICh0ZXh0OiBzdHJpbmcpID0+IFRJdGVtID0gKHRleHQ6IHN0cmluZyk6IFRJdGVtID0+IHtcbiAgICByZXR1cm4ge1t0aGlzLnZhbHVlRmllbGRdOiBudWxsLCBbdGhpcy50ZXh0RmllbGRdOiB0ZXh0fSBhcyBhbnk7XG4gIH07XG4gIHB1YmxpYyBnZXQgcG9wdXBTZXR0aW5ncygpOiBQb3B1cFNldHRpbmdzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYW5pbWF0ZTogdHJ1ZSxcbiAgICAgIGFwcGVuZFRvOiB0aGlzLmFwcGVuZFBvcHVwVG9Sb290ID8gJ3Jvb3QnIDogJ2NvbXBvbmVudCcsXG4gICAgICBwb3B1cENsYXNzOiBgc2ctY29tYm9ib3gtcG9wdXAke3RoaXMuaXNHcm91cGFibGUgPyAnIHNnLWNvbWJvYm94LXBvcHVwLS1pcy1ncm91cGFibGUnIDogJyd9ICR7XG4gICAgICAgIHRoaXMucG9wdXBDbGFzcyB8fCAnJ1xuICAgICAgfWAsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoQ09NQk9CT1hfTE9DQUxJWkVSKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvY2FsaXplcjogSURyb3Bkb3duTG9jYWxpemVyPElDb21ib2JveExvY2FsaXphdGlvbj5cbiAgKSB7XG4gICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3JSZWYsIHJlbmRlcmVyKTtcbiAgICB0aGlzLl9sb2NhbGl6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9jYWxpemUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9sb2NhbGl6ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2NhbGl6YXRpb24gPSB0aGlzLl9sb2NhbGl6ZXIubG9jYWxpemF0aW9uO1xuICAgIHRoaXMuX29ic2VydmVyLmxpc3Rlbih0aGlzLl9sb2NhbGl6ZXIubG9jYWxpemF0aW9uQ2hhbmdlZCwgKGxvY2FsaXphdGlvbikgPT4ge1xuICAgICAgdGhpcy5fbG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uUmVzZXRDbGlja2VkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNSZXNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlc2V0ZWRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5mb2N1cygpO1xuICAgIHRoaXMuX3Jlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5vcGVuT25Gb2N1cykge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3NldENvbXBvbmVudCh0aGlzLmNvbXBvbmVudCk7XG4gICAgdGhpcy5pbml0KCk7XG5cbiAgICAvLyBPcGVuZWQuXG4gICAgdGhpcy5fb2JzZXJ2ZXIubGlzdGVuKHRoaXMuX2lzT3Blbi5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmlzT3BlbikpLCAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYXJlSXRlbXNDYWNoZWQpIHtcbiAgICAgICAgdGhpcy5faGFzU2VhcmNoZWQubmV4dChmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNhbkxvYWRJdGVtcyh0aGlzLl9zZWFyY2hUZXh0LnZhbHVlKSAmJiB0aGlzLl9sb2FkZWRJdGVtcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5sb2FkSXRlbXModGhpcy5fc2VhcmNoVGV4dC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIubGlzdGVuKFxuICAgICAgdGhpcy5faXNPcGVuLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmlzT3BlbiksXG4gICAgICAgIC8vIFdoZW4gY2xpY2tpbmcgcmVzZXQgaWNvbiwgb3BlbmVkIGV2ZW50IHRyaWdnZXJzIHNlYXJjaCBldmVudCB3aXRoXG4gICAgICAgIC8vIHdpdGggb2xkIHNlYXJjaGJhciB2YWx1ZSBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgICAgLy8gU28gd2UgbmVlZCB0byBnaXZlIHNlYXJjaGJhciBhIG1vbWVudCBiZWZvcmUgZmlyZSBvcGVuZWQgZXZlbnQuXG4gICAgICAgIC8vIFN0ZXBzIHRvIHJlcHJvZHVjZSB0aGUgYnVnOlxuICAgICAgICAvLyAxKSBTZWFyY2ggZm9yIFZsYWRpdm9zdG9rIGFuZCBzZWxlY3QgaXQgMikgUmVzZXQgdmFsdWUgd2l0aCBpY29uXG4gICAgICAgIC8vIDMpIHNlYXJjaFRleHQgcmVtYWlucyBcIlZsYWRpdm9zdG9rXCIsIGJ1dCBzaG91bGQgYmUgXCJcIi5cbiAgICAgICAgZGVib3VuY2VUaW1lKDUwKVxuICAgICAgKSxcbiAgICAgICgpID0+IHRoaXMub3BlbmVkLmVtaXQoKVxuICAgICk7XG5cbiAgICAvLyBGb2N1c2VkLlxuICAgIHRoaXMuX29ic2VydmVyLmxpc3Rlbih0aGlzLl9pc0ZvY3VzZWQucGlwZShmaWx0ZXIoaXNUcnVlKSksICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wZW5PbkZvY3VzKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uQ2hhbmdlZCh2YWx1ZTogVEl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWVDaGFuZ2VkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHRoaXMuZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY29tcG9uZW50LnNlYXJjaGJhci5zdWdnZXN0ZWRUZXh0ID0gJyc7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2VkKHZhbHVlKTtcbiAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQoKTtcbiAgICB0aGlzLl9lbWl0Q2hhbmdlZCh2YWx1ZSk7XG5cbiAgICBpZiAoIXZhbHVlICYmIHRoaXMuX2lzU3luYykge1xuICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBpdGVtcyBhZnRlciBzZWxlY3Rpb24sIG90aGVyd2lzZSB3aGVuIG9wZW5pbmcgdGhlIGxpc3RcbiAgICAgIC8vIG5leHQgdGltZSwgb25seSB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBpdGVtIHdpbGwgYXBwZWFyLlxuICAgICAgLy8gU3RlcHMgdG8gcmVwcm9kdWNlOiAxKSBTZWxlY3QgXCJDYXltYW4gQnJhY1wiLCAyKSBGb2N1cyBvdXQgYW5kIGZvY3VzIGJhY2ssXG4gICAgICAvLyAzKSBEZWxldGUgYSBjb3VwbGUgb2YgY2hhcmFjdGVycyB3aXRoIGEgQmFja3NwYWNlIGZyb20gdGhlIGVuZCBhbmQgaGl0IEVudGVyLlxuICAgICAgLy8gNCkgT3BlbiB0aGUgbGlzdC5cbiAgICAgIHRoaXMubG9hZEl0ZW1zKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHZhbHVlTm9ybWFsaXplciA9ICh0ZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+KTogYW55ID0+XG4gICAgdGV4dCQucGlwZShcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZTogVEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDYW4ndCB1c2UgdGhpcy5fc2VhcmNoVGV4dC52YWx1ZSBoZXJlIGFzIGl0IG1pZ2h0IGJlIGVtcHR5LCBjb25zaWRlcjpcbiAgICAgICAgLy8gMSkgdHlwZSBjdXN0b20gdGV4dCwgMikgZm9jdXMgb3V0IGFuZCBiYWNrIGluIDMpIHRoZXJlJ3MgYSB0ZXh0IGluIHNlYXJjaGJhcixcbiAgICAgICAgLy8gYnV0IHRoaXMuX3NlYXJjaFRleHQudmFsdWUgaXMgZW1wdHkuXG4gICAgICAgIC8vIFNvIHRoaXMuY29tcG9uZW50LnNlYXJjaGJhci52YWx1ZSBpcyB0byBiZSB1c2VkLlxuICAgICAgICBjb25zdCB0ZXh0OiBzdHJpbmcgPSAodGhpcy5jb21wb25lbnQuc2VhcmNoYmFyLnZhbHVlIHx8ICcnKS50cmltKCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50LnZhbHVlICYmIHRoaXMuY29tcG9uZW50LnZhbHVlW3RoaXMudGV4dEZpZWxkXS50b0xvd2VyQ2FzZSgpID09PSB0ZXh0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuY29tcG9uZW50LnZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXRlbSh0aGlzLl92YWx1ZU5vcm1hbGl6ZXJJdGVtcywgdGV4dCkpIHtcbiAgICAgICAgICAvLyBJZiBhcmVJdGVtc0NhY2hlZCBpcyBvZmYsIHRoZW4gdGhpcy5kYXRhIHdpbGwgYmUgbG9zdCBieSB0aGlzIG1vbWVudCxcbiAgICAgICAgICAvLyBzbyB3ZSB1c2UgYSBjYWNoZSB0aGlzLnZhbHVlTm9ybWFsaXplckl0ZW1zLlxuICAgICAgICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgZXNwZWNpYWxseSBpbiBJRS9FZGdlIHdoZXJlIHRoaXMuY29tcG9uZW50LnZhbHVlIGlzIG51bGwsXG4gICAgICAgICAgLy8gc28gdGhlIGNvZGUgZmFsbHMgYmFjayB0byB0aGlzIGNvbmRpdGlvbiBzZWN0aW9uLlxuICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRJdGVtKHRoaXMuX3ZhbHVlTm9ybWFsaXplckl0ZW1zLCB0ZXh0KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFsbG93Q3VzdG9tKSB7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLml0ZW1GYWN0b3J5KHRleHQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2lzU3luYykge1xuICAgICAgICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBpdGVtcyBhZnRlciBzZWxlY3Rpb24sIG90aGVyd2lzZSB3aGVuIG9wZW5pbmcgdGhlIGxpc3RcbiAgICAgICAgICAgIC8vIG5leHQgdGltZSwgb25seSB0aGUgc2VsZWN0ZWQgaXRlbSB3aWxsIGFwcGVhci5cbiAgICAgICAgICAgIHRoaXMubG9hZEl0ZW1zKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFycyBzZWFyY2ggdGV4dCBpZiBzdWdnZXN0aW9uIGhhc24ndCBiZWVuIHNlbGVjdGVkLlxuICAgICAgICAgIC8vIFN0ZXBzIHRvIHJlcHJvZHVjZS5cbiAgICAgICAgICAvLyAxLiBVc2UgRHltYW5pYyBFbXB0eSBzYW1wbGUuXG4gICAgICAgICAgLy8gMi4gVHlwZSAndG8nLCB3YWl0IGZvciB0aGUgbGlzdCB0byBsb2FkLCBidXQgZG9uJ3Qgc2VsZWN0ICdUb2thaScuIEluc3RlYWQgaGl0IEVzYyBrZXkuXG4gICAgICAgICAgLy8gMy4gU2VlIHRoYXQgdGhlIHNlYXJjaCBiYXIgc3RpbGwgY29udGFpbnMgJ3RvJyB0ZXh0LCB3aGlsZSB0aGUgdmFsdWUgaXMgbnVsbCxcbiAgICAgICAgICAvLyB3aGljaCBpcyB3cm9uZyAtIHNlYXJjaCBiYXIgdGV4dCBzaG91bGQgYmUgcmVtb3ZlZC5cbiAgICAgICAgICAvLyB0aGlzLmNvbXBvbmVudC5zZWFyY2hiYXIuc3VnZ2VzdGVkVGV4dCA9ICcnOyAvLyBUaGlzIGRvZXNuJ3Qgd29yay5cbiAgICAgICAgICAvLyBBcyB0aGUgYWJvdmUgbGluZSBkb2Vzbid0IHdvcmssIHNvIHdvcmthcm91bmQgaXQgYnkgc2V0dGluZyBmb3JtIGNvbnRyb2wgdmFsdWUgdG8gbnVsbC5cbiAgICAgICAgICB0aGlzLnZhbHVlRm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdmFsdWVOb3JtYWxpemVySXRlbXMgPSBbXTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfZW1pdENoYW5nZWQodmFsdWU6IFRJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VkLmVtaXQobmV3IENvbWJvYm94Q2hhbmdlZEV2ZW50KHZhbHVlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaGFzVmFsdWVDaGFuZ2VkKHZhbHVlOiBUSXRlbSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNJdGVtRXF1YWwodGhpcy52YWx1ZSwgdmFsdWUpO1xuICB9XG5cbn1cbiIsIjxrZW5kby1jb21ib2JveFxuICAjY29tcG9uZW50XG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIFtmb3JtQ29udHJvbF09XCJ2YWx1ZUZvcm1Db250cm9sXCJcbiAgW2RhdGFdPVwiY29tYmluZWRJdGVtcyB8IGFzeW5jXCJcbiAgW2ZpbHRlcmFibGVdPVwiaXNTZWFyY2hhYmxlXCJcbiAgW3ZhbHVlRmllbGRdPVwidmFsdWVLZXlcIlxuICBbdGV4dEZpZWxkXT1cInRleHRLZXlcIlxuICBbbG9hZGluZ109XCJpc0xvYWRpbmdTcGlubmVyVmlzaWJsZSB8IGFzeW5jXCJcbiAgW2NsZWFyQnV0dG9uXT1cImZhbHNlXCJcbiAgW3BvcHVwU2V0dGluZ3NdPVwicG9wdXBTZXR0aW5nc1wiXG4gIFtsaXN0SGVpZ2h0XT1cImxpc3RIZWlnaHRcIlxuICBbdmFsdWVQcmltaXRpdmVdPVwiaXNQcmltaXRpdmVWYWx1ZVwiXG4gIFtzdWdnZXN0XT1cInNob3VsZFN1Z2dlc3RcIlxuICBbYWxsb3dDdXN0b21dPVwidHJ1ZVwiXG4gIFt2YWx1ZU5vcm1hbGl6ZXJdPVwidmFsdWVOb3JtYWxpemVyXCJcbiAgKGZpbHRlckNoYW5nZSk9XCJvblNlYXJjaGVkKCRldmVudClcIlxuICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2VkKCRldmVudClcIlxuICAob3Blbik9XCJvbk9wZW5lZCgpXCJcbiAgKGNsb3NlKT1cIm9uQ2xvc2VkKClcIlxuICAoZm9jdXMpPVwib25Gb2N1c2VkKClcIlxuICAoYmx1cik9XCJvbkJsdXJyZWQoKVwiXG4+XG4gIDxuZy10ZW1wbGF0ZSBrZW5kb0Ryb3BEb3duTGlzdEZvb3RlclRlbXBsYXRlPlxuICAgIDxzZy1jb21ib2JveC1wb3B1cC1mb290ZXJcbiAgICAgIFtpc0xvYWRpbmdUZXh0VmlzaWJsZV09XCJpc0xvYWRpbmdUZXh0VmlzaWJsZSB8IGFzeW5jXCJcbiAgICAgIFtpc05vSXRlbXNUZXh0VmlzaWJsZV09XCJpc05vSXRlbXNUZXh0VmlzaWJsZSB8IGFzeW5jXCJcbiAgICAgIFtpc01pblNlYXJjaFRleHRWaXNpYmxlXT1cImlzTWluU2VhcmNoVGV4dFZpc2libGUgfCBhc3luY1wiXG4gICAgICBbbG9hZGluZ1RleHRdPVwibG9hZGluZ1RleHRcIlxuICAgICAgW25vSXRlbXNUZXh0XT1cIm5vSXRlbXNUZXh0XCJcbiAgICAgIFttaW5TZWFyY2hUZXh0XT1cIm1pblNlYXJjaFRleHRcIlxuICAgICAgW21pblNlYXJjaENoYXJhY3RlcnNdPVwibWluU2VhcmNoQ2hhcmFjdGVyc1wiXG4gICAgPlxuICAgIDwvc2ctY29tYm9ib3gtcG9wdXAtZm9vdGVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUga2VuZG9Db21ib0JveE5vRGF0YVRlbXBsYXRlPjwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIml0ZW1UZW1wbGF0ZVwiIGtlbmRvQ29tYm9Cb3hJdGVtVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxuICAgIDxzcGFuIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogZGF0YUl0ZW19XCI+PC9zcGFuPlxuICA8L25nLXRlbXBsYXRlPlxuPC9rZW5kby1jb21ib2JveD5cbjxkaXYgY2xhc3M9XCJzZy1jb21ib2JveF9fcmVzZXRcIiAqbmdJZj1cIiFpc0Rpc2FibGVkXCIgKGNsaWNrKT1cIm9uUmVzZXRDbGlja2VkKClcIj5cbiAgPGkgY2xhc3M9XCJmYXIgZmEtdGltZXNcIj48L2k+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJzZy1jb21ib2JveF9fc3RhdGUtbGluZVwiPjwvZGl2PlxuIl19
|