cps-ui-kit 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +509 -0
- package/esm2020/lib/components/cps-button/cps-button.component.mjs +3 -3
- package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +3 -3
- package/esm2020/lib/components/cps-chip/cps-chip.component.mjs +3 -3
- package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +3 -4
- package/esm2020/lib/components/cps-input/cps-input.component.mjs +7 -4
- package/esm2020/lib/components/cps-radio/cps-radio.component.mjs +3 -3
- package/esm2020/lib/components/cps-select/cps-select.component.mjs +106 -7
- package/esm2020/lib/components/cps-tag/cps-tag.component.mjs +3 -3
- package/esm2020/lib/directives/click-outside.directive.mjs +1 -1
- package/esm2020/lib/pipes/combine-labels.pipe.mjs +1 -1
- package/esm2020/lib/pipes/label-by-value.pipe.mjs +1 -1
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/cps-ui-kit.mjs +634 -23
- package/fesm2015/cps-ui-kit.mjs.map +1 -1
- package/fesm2020/cps-ui-kit.mjs +619 -23
- package/fesm2020/cps-ui-kit.mjs.map +1 -1
- package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +81 -0
- package/lib/components/cps-input/cps-input.component.d.ts +2 -1
- package/lib/components/cps-select/cps-select.component.d.ts +15 -2
- package/package.json +6 -6
- package/public-api.d.ts +2 -0
- package/styles/_variables.scss +1 -1
- package/styles/styles.scss +2 -2
- package/assets/icons/absa-logo.svg +0 -12
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Input, Optional, Output, Self, ViewChild } from '@angular/core';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { Subscription } from 'rxjs';
|
|
5
|
+
import { convertSize } from '../../utils/size-utils';
|
|
6
|
+
import { CpsIconComponent } from '../cps-icon/cps-icon.component';
|
|
7
|
+
import { CpsChipComponent } from '../cps-chip/cps-chip.component';
|
|
8
|
+
import { ClickOutsideDirective } from '../../directives/click-outside.directive';
|
|
9
|
+
import { LabelByValuePipe } from '../../pipes/label-by-value.pipe';
|
|
10
|
+
import { CombineLabelsPipe } from '../../pipes/combine-labels.pipe';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/forms";
|
|
13
|
+
import * as i2 from "../../pipes/label-by-value.pipe";
|
|
14
|
+
import * as i3 from "@angular/common";
|
|
15
|
+
export class CpsAutocompleteComponent {
|
|
16
|
+
set value(value) {
|
|
17
|
+
value = this._convertValue(value);
|
|
18
|
+
this._value = value;
|
|
19
|
+
this.onChange(value);
|
|
20
|
+
}
|
|
21
|
+
get value() {
|
|
22
|
+
return this._value;
|
|
23
|
+
}
|
|
24
|
+
constructor(_control, _labelByValue) {
|
|
25
|
+
this._control = _control;
|
|
26
|
+
this._labelByValue = _labelByValue;
|
|
27
|
+
this.label = '';
|
|
28
|
+
this.placeholder = 'Please enter';
|
|
29
|
+
this.hint = '';
|
|
30
|
+
this.returnObject = true;
|
|
31
|
+
this.multiple = false;
|
|
32
|
+
this.disabled = false;
|
|
33
|
+
this.width = '100%';
|
|
34
|
+
this.selectAll = true;
|
|
35
|
+
this.chips = true;
|
|
36
|
+
this.closableChips = true;
|
|
37
|
+
this.clearable = false;
|
|
38
|
+
this.openOnClear = true;
|
|
39
|
+
this.options = [];
|
|
40
|
+
this.optionLabel = 'label';
|
|
41
|
+
this.optionValue = 'value'; // works only if returnObject === false (TODO potentially can be of any type)
|
|
42
|
+
this.optionInfo = 'info';
|
|
43
|
+
this.hideDetails = false;
|
|
44
|
+
this.persistentClear = false;
|
|
45
|
+
this.prefixIcon = '';
|
|
46
|
+
this.prefixIconSize = '18px';
|
|
47
|
+
this._value = undefined;
|
|
48
|
+
this.valueChanged = new EventEmitter();
|
|
49
|
+
this._statusChangesSubscription = new Subscription();
|
|
50
|
+
this.error = '';
|
|
51
|
+
this.cvtWidth = '';
|
|
52
|
+
this.isOpened = false;
|
|
53
|
+
this.inputText = '';
|
|
54
|
+
this.filteredOptions = [];
|
|
55
|
+
this.backspaceClickedOnce = false;
|
|
56
|
+
this.activeSingle = false;
|
|
57
|
+
this.optionHighlightedIndex = -1;
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
59
|
+
this.onChange = (event) => { };
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
61
|
+
this.onTouched = () => { };
|
|
62
|
+
if (this._control) {
|
|
63
|
+
this._control.valueAccessor = this;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
ngOnChanges(changes) {
|
|
67
|
+
// eslint-disable-next-line dot-notation
|
|
68
|
+
if ('_value' in changes && changes['_value'].isFirstChange()) {
|
|
69
|
+
this.value = this._convertValue(this.value);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
ngOnInit() {
|
|
73
|
+
this.filteredOptions = this.options;
|
|
74
|
+
this.cvtWidth = convertSize(this.width);
|
|
75
|
+
if (this.multiple && !this._value) {
|
|
76
|
+
this._value = [];
|
|
77
|
+
}
|
|
78
|
+
this._statusChangesSubscription = this._control?.statusChanges?.subscribe(() => {
|
|
79
|
+
this._checkErrors();
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
ngOnDestroy() {
|
|
83
|
+
this._statusChangesSubscription?.unsubscribe();
|
|
84
|
+
}
|
|
85
|
+
_toggleOptions(dd, show) {
|
|
86
|
+
if (this.disabled || !dd)
|
|
87
|
+
return;
|
|
88
|
+
this.backspaceClickedOnce = false;
|
|
89
|
+
if (typeof show === 'boolean') {
|
|
90
|
+
if (show)
|
|
91
|
+
dd.classList.add('active');
|
|
92
|
+
else
|
|
93
|
+
dd.classList.remove('active');
|
|
94
|
+
}
|
|
95
|
+
else
|
|
96
|
+
dd.classList.toggle('active');
|
|
97
|
+
this.isOpened = dd.classList.contains('active');
|
|
98
|
+
if (this.isOpened) {
|
|
99
|
+
const selected = this.autocompleteContainer.nativeElement.querySelector('.selected');
|
|
100
|
+
if (selected)
|
|
101
|
+
selected.scrollIntoView();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
select(option, byValue) {
|
|
105
|
+
this.backspaceClickedOnce = false;
|
|
106
|
+
const val = byValue
|
|
107
|
+
? option
|
|
108
|
+
: this.returnObject
|
|
109
|
+
? option
|
|
110
|
+
: option[this.optionValue];
|
|
111
|
+
if (this.multiple) {
|
|
112
|
+
let res = [];
|
|
113
|
+
if (this.value.includes(val)) {
|
|
114
|
+
res = this.value.filter((v) => v !== val);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.options.forEach((o) => {
|
|
118
|
+
const ov = this.returnObject ? o : o[this.optionValue];
|
|
119
|
+
if (this.value.some((v) => v === ov) || val === ov) {
|
|
120
|
+
res.push(ov);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
this.updateValue(res);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
this.updateValue(val);
|
|
128
|
+
}
|
|
129
|
+
this._clearInput();
|
|
130
|
+
setTimeout(() => {
|
|
131
|
+
this.focusInput();
|
|
132
|
+
}, 0);
|
|
133
|
+
}
|
|
134
|
+
onOptionClick(option, dd) {
|
|
135
|
+
this._clickOption(option, dd);
|
|
136
|
+
}
|
|
137
|
+
toggleAll() {
|
|
138
|
+
let res = [];
|
|
139
|
+
if (this.value.length < this.options.length) {
|
|
140
|
+
if (this.returnObject) {
|
|
141
|
+
res = this.options;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
this.options.forEach((o) => {
|
|
145
|
+
res.push(o[this.optionValue]);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
this.updateValue(res);
|
|
150
|
+
setTimeout(() => {
|
|
151
|
+
this.focusInput();
|
|
152
|
+
}, 0);
|
|
153
|
+
}
|
|
154
|
+
_clickOption(option, dd) {
|
|
155
|
+
this.select(option, false);
|
|
156
|
+
if (!this.multiple) {
|
|
157
|
+
this._toggleOptions(dd, false);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
_checkErrors() {
|
|
161
|
+
const errors = this._control?.errors;
|
|
162
|
+
if (!this._control?.control?.touched || !errors) {
|
|
163
|
+
this.error = '';
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if ('required' in errors) {
|
|
167
|
+
this.error = 'Field is required';
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const errArr = Object.values(errors);
|
|
171
|
+
if (errArr.length < 1) {
|
|
172
|
+
this.error = '';
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const message = errArr.find((msg) => typeof msg === 'string');
|
|
176
|
+
this.error = message || 'Unknown error';
|
|
177
|
+
}
|
|
178
|
+
registerOnChange(fn) {
|
|
179
|
+
this.onChange = fn;
|
|
180
|
+
}
|
|
181
|
+
registerOnTouched(fn) {
|
|
182
|
+
this.onTouched = fn;
|
|
183
|
+
}
|
|
184
|
+
filterOptions(event) {
|
|
185
|
+
if (!this.isOpened) {
|
|
186
|
+
this._toggleOptions(this.autocompleteContainer?.nativeElement, true);
|
|
187
|
+
}
|
|
188
|
+
this.backspaceClickedOnce = false;
|
|
189
|
+
const searchVal = (event?.target?.value || '').toLowerCase();
|
|
190
|
+
this.filteredOptions = this.options.filter((o) => o[this.optionLabel].toLowerCase().includes(searchVal));
|
|
191
|
+
}
|
|
192
|
+
_convertValue(value) {
|
|
193
|
+
if (!this.returnObject) {
|
|
194
|
+
if (this.multiple) {
|
|
195
|
+
if (Array.isArray(value)) {
|
|
196
|
+
const temp = [];
|
|
197
|
+
value.forEach((v) => {
|
|
198
|
+
if (typeof v !== 'string') {
|
|
199
|
+
temp.push(v ? v[this.optionValue] : '');
|
|
200
|
+
}
|
|
201
|
+
else
|
|
202
|
+
temp.push(v);
|
|
203
|
+
});
|
|
204
|
+
value = temp;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
if (!value)
|
|
208
|
+
value = [];
|
|
209
|
+
else {
|
|
210
|
+
if (typeof value !== 'string') {
|
|
211
|
+
value = [value[this.optionValue]];
|
|
212
|
+
}
|
|
213
|
+
else
|
|
214
|
+
value = [value];
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
if (typeof value !== 'string') {
|
|
220
|
+
value = value ? value[this.optionValue] : '';
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
if (this.multiple) {
|
|
226
|
+
if (!Array.isArray(value)) {
|
|
227
|
+
value = [value];
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return value;
|
|
232
|
+
}
|
|
233
|
+
writeValue(value) {
|
|
234
|
+
value = this._convertValue(value);
|
|
235
|
+
this.value = value;
|
|
236
|
+
}
|
|
237
|
+
updateValue(value) {
|
|
238
|
+
this.writeValue(value);
|
|
239
|
+
this.onChange(value);
|
|
240
|
+
this.valueChanged.emit(value);
|
|
241
|
+
}
|
|
242
|
+
_getValueLabel() {
|
|
243
|
+
return this.value
|
|
244
|
+
? this.returnObject
|
|
245
|
+
? this.value[this.optionLabel]
|
|
246
|
+
: this._labelByValue.transform(this.value, this.options, this.optionValue, this.optionLabel)
|
|
247
|
+
: '';
|
|
248
|
+
}
|
|
249
|
+
clear(dd, event) {
|
|
250
|
+
event.stopPropagation();
|
|
251
|
+
if ((!this.multiple && this.value) ||
|
|
252
|
+
(this.multiple && this.value?.length > 0)) {
|
|
253
|
+
if (this.openOnClear) {
|
|
254
|
+
this._toggleOptions(dd, true);
|
|
255
|
+
}
|
|
256
|
+
const val = this.multiple ? [] : this.returnObject ? undefined : '';
|
|
257
|
+
this.updateValue(val);
|
|
258
|
+
}
|
|
259
|
+
this._clearInput();
|
|
260
|
+
this._dehighlightOption();
|
|
261
|
+
setTimeout(() => {
|
|
262
|
+
this.focusInput();
|
|
263
|
+
}, 0);
|
|
264
|
+
}
|
|
265
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
266
|
+
setDisabledState(disabled) { }
|
|
267
|
+
onBlur() {
|
|
268
|
+
this._control?.control?.markAsTouched();
|
|
269
|
+
this._checkErrors();
|
|
270
|
+
}
|
|
271
|
+
_clearInput() {
|
|
272
|
+
this.filteredOptions = this.options;
|
|
273
|
+
this.inputText = '';
|
|
274
|
+
this.activeSingle = false;
|
|
275
|
+
}
|
|
276
|
+
_closeAndClear(dd) {
|
|
277
|
+
this._clearInput();
|
|
278
|
+
this._toggleOptions(dd, false);
|
|
279
|
+
this._dehighlightOption();
|
|
280
|
+
}
|
|
281
|
+
onClickOutside(dd) {
|
|
282
|
+
this._closeAndClear(dd);
|
|
283
|
+
}
|
|
284
|
+
_getHTMLOptions() {
|
|
285
|
+
return (this.autocompleteContainer?.nativeElement?.querySelectorAll('.cps-autocomplete-options-option') || []);
|
|
286
|
+
}
|
|
287
|
+
_dehighlightOption(el) {
|
|
288
|
+
if (el)
|
|
289
|
+
el.classList.remove('highlighten');
|
|
290
|
+
else {
|
|
291
|
+
if (this.optionHighlightedIndex < 0)
|
|
292
|
+
return;
|
|
293
|
+
const optionItems = this._getHTMLOptions();
|
|
294
|
+
optionItems[this.optionHighlightedIndex].classList.remove('highlighten');
|
|
295
|
+
this.optionHighlightedIndex = -1;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
_highlightOption(el) {
|
|
299
|
+
el.classList.add('highlighten');
|
|
300
|
+
const parent = el.parentElement;
|
|
301
|
+
if (!parent)
|
|
302
|
+
return;
|
|
303
|
+
const parentRect = parent.getBoundingClientRect();
|
|
304
|
+
const elRect = el.getBoundingClientRect();
|
|
305
|
+
if (elRect.top < parentRect.top || elRect.bottom > parentRect.bottom) {
|
|
306
|
+
el.scrollIntoView();
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
onBoxClick() {
|
|
310
|
+
if (!this.multiple) {
|
|
311
|
+
this.activeSingle = true;
|
|
312
|
+
this.inputText = this._getValueLabel();
|
|
313
|
+
this.filteredOptions = this.options;
|
|
314
|
+
}
|
|
315
|
+
this.focus();
|
|
316
|
+
this._dehighlightOption();
|
|
317
|
+
}
|
|
318
|
+
onContainerKeyDown(event, dd) {
|
|
319
|
+
const code = event.keyCode;
|
|
320
|
+
// escape
|
|
321
|
+
if (code === 27) {
|
|
322
|
+
this._closeAndClear(dd);
|
|
323
|
+
}
|
|
324
|
+
// enter
|
|
325
|
+
else if (code === 13) {
|
|
326
|
+
let idx = this.optionHighlightedIndex;
|
|
327
|
+
if (this.multiple && this.selectAll) {
|
|
328
|
+
if (idx === 0) {
|
|
329
|
+
this.toggleAll();
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
else
|
|
333
|
+
idx--;
|
|
334
|
+
}
|
|
335
|
+
const option = this.filteredOptions[idx];
|
|
336
|
+
this._clickOption(option, dd);
|
|
337
|
+
}
|
|
338
|
+
// vertical arrows
|
|
339
|
+
else if ([38, 40].includes(code)) {
|
|
340
|
+
this._navigateOptionsByArrows(code === 38);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
onInputKeyDown(event) {
|
|
344
|
+
const code = event.keyCode;
|
|
345
|
+
// backspace
|
|
346
|
+
if (code === 8) {
|
|
347
|
+
this._removeLastValue();
|
|
348
|
+
event.stopPropagation();
|
|
349
|
+
}
|
|
350
|
+
// enter
|
|
351
|
+
else if (code === 13) {
|
|
352
|
+
if (this.optionHighlightedIndex < 0) {
|
|
353
|
+
this._confirmInput(event?.target?.value || '');
|
|
354
|
+
event.stopPropagation();
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
else if ([38, 40].includes(code)) {
|
|
358
|
+
event.preventDefault();
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
this._dehighlightOption();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
_navigateOptionsByArrows(up) {
|
|
365
|
+
if (!this.isOpened)
|
|
366
|
+
return;
|
|
367
|
+
const optionItems = this._getHTMLOptions();
|
|
368
|
+
const len = optionItems.length;
|
|
369
|
+
if (len < 1)
|
|
370
|
+
return;
|
|
371
|
+
if (len === 1) {
|
|
372
|
+
this._highlightOption(optionItems[0]);
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
if (up) {
|
|
376
|
+
this._dehighlightOption(optionItems[this.optionHighlightedIndex]);
|
|
377
|
+
this.optionHighlightedIndex =
|
|
378
|
+
this.optionHighlightedIndex < 1
|
|
379
|
+
? len - 1
|
|
380
|
+
: this.optionHighlightedIndex - 1;
|
|
381
|
+
this._highlightOption(optionItems[this.optionHighlightedIndex]);
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
this._dehighlightOption(optionItems[this.optionHighlightedIndex]);
|
|
385
|
+
this.optionHighlightedIndex = [-1, len - 1].includes(this.optionHighlightedIndex)
|
|
386
|
+
? 0
|
|
387
|
+
: this.optionHighlightedIndex + 1;
|
|
388
|
+
this._highlightOption(optionItems[this.optionHighlightedIndex]);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
_confirmInput(searchVal) {
|
|
392
|
+
if (!this.isOpened)
|
|
393
|
+
return;
|
|
394
|
+
searchVal = searchVal.toLowerCase();
|
|
395
|
+
if (!searchVal) {
|
|
396
|
+
if (this.multiple)
|
|
397
|
+
return;
|
|
398
|
+
const val = this.returnObject ? undefined : '';
|
|
399
|
+
this.updateValue(val);
|
|
400
|
+
this._closeAndClear(this.autocompleteContainer?.nativeElement);
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
const found = this.filteredOptions.find((o) => o[this.optionLabel].toLowerCase() === searchVal);
|
|
404
|
+
if (found) {
|
|
405
|
+
this.select(found, false);
|
|
406
|
+
this._toggleOptions(this.autocompleteContainer?.nativeElement, this.multiple);
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
if (!this.multiple) {
|
|
410
|
+
this.inputText = this._getValueLabel();
|
|
411
|
+
this.filteredOptions = this.options;
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
this._clearInput();
|
|
416
|
+
}
|
|
417
|
+
_removeLastValue() {
|
|
418
|
+
if (!this.multiple || this.inputText)
|
|
419
|
+
return;
|
|
420
|
+
if (this.value?.length) {
|
|
421
|
+
if (this.backspaceClickedOnce) {
|
|
422
|
+
this.updateValue(this.value.filter((v, index) => index !== this.value.length - 1));
|
|
423
|
+
this.backspaceClickedOnce = false;
|
|
424
|
+
}
|
|
425
|
+
else
|
|
426
|
+
this.backspaceClickedOnce = true;
|
|
427
|
+
}
|
|
428
|
+
else
|
|
429
|
+
this.backspaceClickedOnce = false;
|
|
430
|
+
setTimeout(() => {
|
|
431
|
+
this.focusInput();
|
|
432
|
+
}, 0);
|
|
433
|
+
}
|
|
434
|
+
focusInput() {
|
|
435
|
+
this.autocompleteContainer?.nativeElement?.querySelector('input')?.focus();
|
|
436
|
+
}
|
|
437
|
+
focus() {
|
|
438
|
+
this.autocompleteContainer?.nativeElement?.focus();
|
|
439
|
+
this.focusInput();
|
|
440
|
+
this._toggleOptions(this.autocompleteContainer?.nativeElement, true);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
CpsAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsAutocompleteComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i2.LabelByValuePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
444
|
+
CpsAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsAutocompleteComponent, isStandalone: true, selector: "cps-autocomplete", inputs: { label: "label", placeholder: "placeholder", hint: "hint", returnObject: "returnObject", multiple: "multiple", disabled: "disabled", width: "width", selectAll: "selectAll", chips: "chips", closableChips: "closableChips", clearable: "clearable", openOnClear: "openOnClear", options: "options", optionLabel: "optionLabel", optionValue: "optionValue", optionInfo: "optionInfo", hideDetails: "hideDetails", persistentClear: "persistentClear", prefixIcon: "prefixIcon", prefixIconSize: "prefixIconSize", _value: ["value", "_value"] }, outputs: { valueChanged: "valueChanged" }, providers: [LabelByValuePipe], viewQueries: [{ propertyName: "autocompleteContainer", first: true, predicate: ["autocompleteContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-autocomplete\"\n tabindex=\"1\"\n [ngClass]=\"{ disabled: disabled, error: error }\"\n #autocompleteContainer>\n <label *ngIf=\"label\" class=\"cps-autocomplete-label\">{{ label }}</label>\n <div\n (keydown)=\"onContainerKeyDown($event, autocompleteContainer)\"\n class=\"cps-autocomplete-container\"\n [class.focused]=\"isOpened\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear\n }\"\n (clickOutside)=\"onClickOutside(autocompleteContainer)\">\n <div class=\"cps-autocomplete-box\" (click)=\"onBoxClick()\">\n <div class=\"cps-autocomplete-box-area\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-autocomplete-box-items\"\n *ngIf=\"\n (value && !multiple) || (value?.length > 0 && multiple);\n else autocompleteInput\n \">\n <span *ngIf=\"!multiple\" class=\"single-item\">\n <div class=\"single-item-selection\">\n <span [style.opacity]=\"activeSingle ? 0 : 1\">{{\n returnObject\n ? value[optionLabel]\n : (value | labelByValue : options : optionValue : optionLabel)\n }}</span>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n autocompleteInput;\n context: {\n inputClass: 'single-item-input',\n inputStyle: activeSingle ? 'opacity: 1' : null\n }\n \">\n </ng-container>\n </span>\n\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <div\n *ngFor=\"let val of value; let last = last\"\n class=\"text-group-item\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\">\n {{\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n }}{{ !last ? ',' : '' }}\n </div>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of value; let last = last\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"select(val, true)\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\"\n [label]=\"\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n \">\n </cps-chip>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n </div>\n <span class=\"cps-autocomplete-box-icons\">\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear ||\n (!persistentClear &&\n ((multiple && value?.length) || (!multiple && value)))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-autocomplete-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear(autocompleteContainer, $event)\"></cps-icon>\n </span>\n <span class=\"cps-autocomplete-box-chevron\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n color=\"text-dark\"></cps-icon>\n </span>\n </span>\n </div>\n </div>\n\n <div class=\"cps-autocomplete-options\">\n <div\n class=\"cps-autocomplete-options-option select-all-option\"\n [class.allselected]=\"value?.length === options.length\"\n *ngIf=\"multiple && selectAll\"\n (click)=\"toggleAll()\">\n <span class=\"cps-autocomplete-options-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-autocomplete-options-option-check\">\n </span>\n <span class=\"cps-autocomplete-options-option-label\">Select all</span>\n </span>\n </div>\n <div\n class=\"cps-autocomplete-options-option\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"onOptionClick(option, autocompleteContainer)\"\n [class.selected]=\"\n multiple\n ? returnObject\n ? value?.includes(option)\n : value?.includes(option[optionValue])\n : returnObject\n ? option === value\n : option[optionValue] === value\n \">\n <span class=\"cps-autocomplete-options-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-autocomplete-options-option-check\">\n </span>\n <span class=\"cps-autocomplete-options-option-label\">{{\n option[optionLabel]\n }}</span>\n </span>\n\n <span class=\"cps-autocomplete-options-option-right\">{{\n option[optionInfo]\n }}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-autocomplete-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-autocomplete-error\">\n {{ error }}\n </div>\n</div>\n\n<ng-template\n #autocompleteInput\n let-inputClass=\"inputClass\"\n let-inputStyle=\"inputStyle\">\n <input\n class=\"cps-autocomplete-box-input\"\n [class]=\"inputClass\"\n [style]=\"inputStyle\"\n [placeholder]=\"\n (!value && !multiple) || (value?.length < 1 && multiple)\n ? placeholder\n : ''\n \"\n (input)=\"filterOptions($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n [(ngModel)]=\"inputText\"\n (blur)=\"onBlur()\" />\n</ng-template>\n", styles: [":host{display:flex}:host .cps-autocomplete{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif}:host .cps-autocomplete.active .cps-autocomplete-options{display:block}:host .cps-autocomplete.active .cps-autocomplete-box{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete.active .cps-autocomplete-box .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-label{display:inline-block;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem}:host .cps-autocomplete .persistent-clear .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container:hover .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:.5}:host .cps-autocomplete .cps-autocomplete-box{overflow:hidden;min-height:38px;width:100%;cursor:text;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;border:1px solid var(--cps-color-text-lightest);transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box-area{display:flex;min-height:36px;align-items:center}:host .cps-autocomplete .cps-autocomplete-box-area .prefix-icon{margin-right:.5rem;color:var(--cps-color-text-dark)}:host .cps-autocomplete .cps-autocomplete-box-input{padding:0;background-color:transparent;width:0;min-width:30px;flex-grow:1;font-size:1rem;color:var(--cps-color-text-dark);border-style:none;outline:none;font-family:Source Sans Pro,sans-serif}:host .cps-autocomplete .cps-autocomplete-box-input::placeholder{color:var(--cps-color-text-lightest);font-style:italic;opacity:1}:host .cps-autocomplete .cps-autocomplete-box-items{display:inline-flex;flex-direction:column;width:100%;margin-top:3px;margin-bottom:3px;position:relative}:host .cps-autocomplete .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-dark);display:inline-flex}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-selection{display:inline-flex;letter-spacing:inherit;line-height:inherit;max-width:100%}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-input{opacity:0;min-width:0;align-self:flex-start;flex:1 1;transition:none;position:absolute;top:0;bottom:0;width:100%;padding-inline-start:inherit;padding-inline-end:inherit}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group{display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-autocomplete .cps-autocomplete-box-items .text-group{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px;display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .text-group .text-group-item{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-autocomplete .cps-autocomplete-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box:hover .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons{display:flex}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon{cursor:pointer;display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:0;transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon:hover{opacity:1!important}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron{display:flex;margin-left:8px;transition-duration:.2s}:host .cps-autocomplete.active .cps-autocomplete-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-autocomplete .cps-autocomplete-options{z-index:1001;position:absolute;width:100%;background:white;box-shadow:0 5px 20px #0000000d;border-radius:4px;overflow-x:hidden;display:none;max-height:240px;overflow-y:auto;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option{padding:12px;justify-content:space-between;display:flex;cursor:pointer}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option:hover{background:#f8f4f5}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option-label{color:var(--cps-color-text-dark)}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option-left{display:flex;align-items:center;margin-right:8px}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option-right{color:var(--cps-color-text-light);text-align:right}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.selected,:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.allselected{font-weight:600}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-label,:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-label{color:var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-check,:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-check{opacity:1}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.selected{background:#efe4e7}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.highlighten{background:#f5eeef}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.selected.highlighten{background:#e6d4d9}:host .cps-autocomplete .cps-autocomplete-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete .cps-autocomplete-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete.disabled{pointer-events:none}:host .cps-autocomplete.disabled .cps-autocomplete-box{background:#f7f7f7}:host .cps-autocomplete.disabled .cps-autocomplete-box-items{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-box-items .text-group,:host .cps-autocomplete.disabled .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-label{color:var(--cps-color-text-mild)}:host .cps-autocomplete.error .cps-autocomplete-box{border-color:#c33!important;background:#fef3f2!important}:host .cps-autocomplete .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}:host .about-to-remove{color:var(--cps-color-text-light)}:host .about-to-remove ::ng-deep .chip{background-color:var(--cps-color-bg-mid)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsChipComponent, selector: "cps-chip", inputs: ["label", "icon", "iconPosition", "closable", "disabled"], outputs: ["closed"] }, { kind: "pipe", type: LabelByValuePipe, name: "labelByValue" }] });
|
|
445
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsAutocompleteComponent, decorators: [{
|
|
446
|
+
type: Component,
|
|
447
|
+
args: [{ standalone: true, imports: [
|
|
448
|
+
CommonModule,
|
|
449
|
+
FormsModule,
|
|
450
|
+
ClickOutsideDirective,
|
|
451
|
+
CpsIconComponent,
|
|
452
|
+
CpsChipComponent,
|
|
453
|
+
LabelByValuePipe,
|
|
454
|
+
CombineLabelsPipe
|
|
455
|
+
], providers: [LabelByValuePipe], selector: 'cps-autocomplete', template: "<div\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-autocomplete\"\n tabindex=\"1\"\n [ngClass]=\"{ disabled: disabled, error: error }\"\n #autocompleteContainer>\n <label *ngIf=\"label\" class=\"cps-autocomplete-label\">{{ label }}</label>\n <div\n (keydown)=\"onContainerKeyDown($event, autocompleteContainer)\"\n class=\"cps-autocomplete-container\"\n [class.focused]=\"isOpened\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear\n }\"\n (clickOutside)=\"onClickOutside(autocompleteContainer)\">\n <div class=\"cps-autocomplete-box\" (click)=\"onBoxClick()\">\n <div class=\"cps-autocomplete-box-area\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-autocomplete-box-items\"\n *ngIf=\"\n (value && !multiple) || (value?.length > 0 && multiple);\n else autocompleteInput\n \">\n <span *ngIf=\"!multiple\" class=\"single-item\">\n <div class=\"single-item-selection\">\n <span [style.opacity]=\"activeSingle ? 0 : 1\">{{\n returnObject\n ? value[optionLabel]\n : (value | labelByValue : options : optionValue : optionLabel)\n }}</span>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n autocompleteInput;\n context: {\n inputClass: 'single-item-input',\n inputStyle: activeSingle ? 'opacity: 1' : null\n }\n \">\n </ng-container>\n </span>\n\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <div\n *ngFor=\"let val of value; let last = last\"\n class=\"text-group-item\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\">\n {{\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n }}{{ !last ? ',' : '' }}\n </div>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of value; let last = last\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"select(val, true)\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\"\n [label]=\"\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n \">\n </cps-chip>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n </div>\n <span class=\"cps-autocomplete-box-icons\">\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear ||\n (!persistentClear &&\n ((multiple && value?.length) || (!multiple && value)))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-autocomplete-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear(autocompleteContainer, $event)\"></cps-icon>\n </span>\n <span class=\"cps-autocomplete-box-chevron\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n color=\"text-dark\"></cps-icon>\n </span>\n </span>\n </div>\n </div>\n\n <div class=\"cps-autocomplete-options\">\n <div\n class=\"cps-autocomplete-options-option select-all-option\"\n [class.allselected]=\"value?.length === options.length\"\n *ngIf=\"multiple && selectAll\"\n (click)=\"toggleAll()\">\n <span class=\"cps-autocomplete-options-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-autocomplete-options-option-check\">\n </span>\n <span class=\"cps-autocomplete-options-option-label\">Select all</span>\n </span>\n </div>\n <div\n class=\"cps-autocomplete-options-option\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"onOptionClick(option, autocompleteContainer)\"\n [class.selected]=\"\n multiple\n ? returnObject\n ? value?.includes(option)\n : value?.includes(option[optionValue])\n : returnObject\n ? option === value\n : option[optionValue] === value\n \">\n <span class=\"cps-autocomplete-options-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-autocomplete-options-option-check\">\n </span>\n <span class=\"cps-autocomplete-options-option-label\">{{\n option[optionLabel]\n }}</span>\n </span>\n\n <span class=\"cps-autocomplete-options-option-right\">{{\n option[optionInfo]\n }}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-autocomplete-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-autocomplete-error\">\n {{ error }}\n </div>\n</div>\n\n<ng-template\n #autocompleteInput\n let-inputClass=\"inputClass\"\n let-inputStyle=\"inputStyle\">\n <input\n class=\"cps-autocomplete-box-input\"\n [class]=\"inputClass\"\n [style]=\"inputStyle\"\n [placeholder]=\"\n (!value && !multiple) || (value?.length < 1 && multiple)\n ? placeholder\n : ''\n \"\n (input)=\"filterOptions($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n [(ngModel)]=\"inputText\"\n (blur)=\"onBlur()\" />\n</ng-template>\n", styles: [":host{display:flex}:host .cps-autocomplete{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif}:host .cps-autocomplete.active .cps-autocomplete-options{display:block}:host .cps-autocomplete.active .cps-autocomplete-box{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete.active .cps-autocomplete-box .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-label{display:inline-block;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem}:host .cps-autocomplete .persistent-clear .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container:hover .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:.5}:host .cps-autocomplete .cps-autocomplete-box{overflow:hidden;min-height:38px;width:100%;cursor:text;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;border:1px solid var(--cps-color-text-lightest);transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box-area{display:flex;min-height:36px;align-items:center}:host .cps-autocomplete .cps-autocomplete-box-area .prefix-icon{margin-right:.5rem;color:var(--cps-color-text-dark)}:host .cps-autocomplete .cps-autocomplete-box-input{padding:0;background-color:transparent;width:0;min-width:30px;flex-grow:1;font-size:1rem;color:var(--cps-color-text-dark);border-style:none;outline:none;font-family:Source Sans Pro,sans-serif}:host .cps-autocomplete .cps-autocomplete-box-input::placeholder{color:var(--cps-color-text-lightest);font-style:italic;opacity:1}:host .cps-autocomplete .cps-autocomplete-box-items{display:inline-flex;flex-direction:column;width:100%;margin-top:3px;margin-bottom:3px;position:relative}:host .cps-autocomplete .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-dark);display:inline-flex}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-selection{display:inline-flex;letter-spacing:inherit;line-height:inherit;max-width:100%}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-input{opacity:0;min-width:0;align-self:flex-start;flex:1 1;transition:none;position:absolute;top:0;bottom:0;width:100%;padding-inline-start:inherit;padding-inline-end:inherit}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group{display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-autocomplete .cps-autocomplete-box-items .text-group{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px;display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .text-group .text-group-item{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-autocomplete .cps-autocomplete-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box:hover .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons{display:flex}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon{cursor:pointer;display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:0;transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon:hover{opacity:1!important}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron{display:flex;margin-left:8px;transition-duration:.2s}:host .cps-autocomplete.active .cps-autocomplete-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-autocomplete .cps-autocomplete-options{z-index:1001;position:absolute;width:100%;background:white;box-shadow:0 5px 20px #0000000d;border-radius:4px;overflow-x:hidden;display:none;max-height:240px;overflow-y:auto;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option{padding:12px;justify-content:space-between;display:flex;cursor:pointer}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option:hover{background:#f8f4f5}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option-label{color:var(--cps-color-text-dark)}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option-left{display:flex;align-items:center;margin-right:8px}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option-right{color:var(--cps-color-text-light);text-align:right}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.selected,:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.allselected{font-weight:600}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-label,:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-label{color:var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-check,:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-check{opacity:1}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.selected{background:#efe4e7}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.highlighten{background:#f5eeef}:host .cps-autocomplete .cps-autocomplete-options .cps-autocomplete-options-option.selected.highlighten{background:#e6d4d9}:host .cps-autocomplete .cps-autocomplete-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete .cps-autocomplete-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete.disabled{pointer-events:none}:host .cps-autocomplete.disabled .cps-autocomplete-box{background:#f7f7f7}:host .cps-autocomplete.disabled .cps-autocomplete-box-items{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-box-items .text-group,:host .cps-autocomplete.disabled .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-label{color:var(--cps-color-text-mild)}:host .cps-autocomplete.error .cps-autocomplete-box{border-color:#c33!important;background:#fef3f2!important}:host .cps-autocomplete .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}:host .about-to-remove{color:var(--cps-color-text-light)}:host .about-to-remove ::ng-deep .chip{background-color:var(--cps-color-bg-mid)}\n"] }]
|
|
456
|
+
}], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
|
|
457
|
+
type: Self
|
|
458
|
+
}, {
|
|
459
|
+
type: Optional
|
|
460
|
+
}] }, { type: i2.LabelByValuePipe }]; }, propDecorators: { label: [{
|
|
461
|
+
type: Input
|
|
462
|
+
}], placeholder: [{
|
|
463
|
+
type: Input
|
|
464
|
+
}], hint: [{
|
|
465
|
+
type: Input
|
|
466
|
+
}], returnObject: [{
|
|
467
|
+
type: Input
|
|
468
|
+
}], multiple: [{
|
|
469
|
+
type: Input
|
|
470
|
+
}], disabled: [{
|
|
471
|
+
type: Input
|
|
472
|
+
}], width: [{
|
|
473
|
+
type: Input
|
|
474
|
+
}], selectAll: [{
|
|
475
|
+
type: Input
|
|
476
|
+
}], chips: [{
|
|
477
|
+
type: Input
|
|
478
|
+
}], closableChips: [{
|
|
479
|
+
type: Input
|
|
480
|
+
}], clearable: [{
|
|
481
|
+
type: Input
|
|
482
|
+
}], openOnClear: [{
|
|
483
|
+
type: Input
|
|
484
|
+
}], options: [{
|
|
485
|
+
type: Input
|
|
486
|
+
}], optionLabel: [{
|
|
487
|
+
type: Input
|
|
488
|
+
}], optionValue: [{
|
|
489
|
+
type: Input
|
|
490
|
+
}], optionInfo: [{
|
|
491
|
+
type: Input
|
|
492
|
+
}], hideDetails: [{
|
|
493
|
+
type: Input
|
|
494
|
+
}], persistentClear: [{
|
|
495
|
+
type: Input
|
|
496
|
+
}], prefixIcon: [{
|
|
497
|
+
type: Input
|
|
498
|
+
}], prefixIconSize: [{
|
|
499
|
+
type: Input
|
|
500
|
+
}], _value: [{
|
|
501
|
+
type: Input,
|
|
502
|
+
args: ['value']
|
|
503
|
+
}], valueChanged: [{
|
|
504
|
+
type: Output
|
|
505
|
+
}], autocompleteContainer: [{
|
|
506
|
+
type: ViewChild,
|
|
507
|
+
args: ['autocompleteContainer']
|
|
508
|
+
}] } });
|
|
509
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9jcHMtYXV0b2NvbXBsZXRlL2Nwcy1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLWF1dG9jb21wbGV0ZS9jcHMtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBRUosU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFnQixNQUFNLGdDQUFnQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7OztBQWtCcEUsTUFBTSxPQUFPLHdCQUF3QjtJQTBCbkMsSUFBSSxLQUFLLENBQUMsS0FBVTtRQUNsQixLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEs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QUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFVSxNQUFNO3NCQUFyQixLQUFLO3VCQUFDLE9BQU87Z0JBWUosWUFBWTtzQkFBckIsTUFBTTtnQkFHUCxxQkFBcUI7c0JBRHBCLFNBQVM7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2VsZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50LCBpY29uU2l6ZVR5cGUgfSBmcm9tICcuLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzQ2hpcENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1jaGlwL2Nwcy1jaGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDbGlja091dHNpZGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NsaWNrLW91dHNpZGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IExhYmVsQnlWYWx1ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9sYWJlbC1ieS12YWx1ZS5waXBlJztcbmltcG9ydCB7IENvbWJpbmVMYWJlbHNQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvY29tYmluZS1sYWJlbHMucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENsaWNrT3V0c2lkZURpcmVjdGl2ZSxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc0NoaXBDb21wb25lbnQsXG4gICAgTGFiZWxCeVZhbHVlUGlwZSxcbiAgICBDb21iaW5lTGFiZWxzUGlwZVxuICBdLFxuICBwcm92aWRlcnM6IFtMYWJlbEJ5VmFsdWVQaXBlXSxcbiAgc2VsZWN0b3I6ICdjcHMtYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3BzQXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnUGxlYXNlIGVudGVyJztcbiAgQElucHV0KCkgaGludCA9ICcnO1xuICBASW5wdXQoKSByZXR1cm5PYmplY3QgPSB0cnVlO1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyIHwgc3RyaW5nID0gJzEwMCUnO1xuICBASW5wdXQoKSBzZWxlY3RBbGwgPSB0cnVlO1xuICBASW5wdXQoKSBjaGlwcyA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NhYmxlQ2hpcHMgPSB0cnVlO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgb3Blbk9uQ2xlYXIgPSB0cnVlO1xuICBASW5wdXQoKSBvcHRpb25zID0gW10gYXMgYW55W107XG4gIEBJbnB1dCgpIG9wdGlvbkxhYmVsID0gJ2xhYmVsJztcbiAgQElucHV0KCkgb3B0aW9uVmFsdWUgPSAndmFsdWUnOyAvLyB3b3JrcyBvbmx5IGlmIHJldHVybk9iamVjdCA9PT0gZmFsc2UgKFRPRE8gcG90ZW50aWFsbHkgY2FuIGJlIG9mIGFueSB0eXBlKVxuICBASW5wdXQoKSBvcHRpb25JbmZvID0gJ2luZm8nO1xuICBASW5wdXQoKSBoaWRlRGV0YWlscyA9IGZhbHNlO1xuICBASW5wdXQoKSBwZXJzaXN0ZW50Q2xlYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgcHJlZml4SWNvbiA9ICcnO1xuICBASW5wdXQoKSBwcmVmaXhJY29uU2l6ZTogaWNvblNpemVUeXBlID0gJzE4cHgnO1xuXG4gIEBJbnB1dCgndmFsdWUnKSBfdmFsdWU6IGFueSA9IHVuZGVmaW5lZDtcblxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHZhbHVlID0gdGhpcy5fY29udmVydFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2F1dG9jb21wbGV0ZUNvbnRhaW5lcicpXG4gIGF1dG9jb21wbGV0ZUNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGVycm9yID0gJyc7XG4gIGN2dFdpZHRoID0gJyc7XG4gIGlzT3BlbmVkID0gZmFsc2U7XG4gIGlucHV0VGV4dCA9ICcnO1xuICBmaWx0ZXJlZE9wdGlvbnMgPSBbXSBhcyBhbnlbXTtcbiAgYmFja3NwYWNlQ2xpY2tlZE9uY2UgPSBmYWxzZTtcbiAgYWN0aXZlU2luZ2xlID0gZmFsc2U7XG4gIG9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPSAtMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIF9sYWJlbEJ5VmFsdWU6IExhYmVsQnlWYWx1ZVBpcGVcbiAgKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuX2NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkb3Qtbm90YXRpb25cbiAgICBpZiAoJ192YWx1ZScgaW4gY2hhbmdlcyAmJiBjaGFuZ2VzWydfdmFsdWUnXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl9jb252ZXJ0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdGhpcy5jdnRXaWR0aCA9IGNvbnZlcnRTaXplKHRoaXMud2lkdGgpO1xuICAgIGlmICh0aGlzLm11bHRpcGxlICYmICF0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5fY29udHJvbD8uc3RhdHVzQ2hhbmdlcz8uc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGVja0Vycm9ycygpO1xuICAgICAgfVxuICAgICkgYXMgU3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wdGlvbnMoZGQ6IEhUTUxFbGVtZW50LCBzaG93PzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICFkZCkgcmV0dXJuO1xuICAgIHRoaXMuYmFja3NwYWNlQ2xpY2tlZE9uY2UgPSBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHNob3cgPT09ICdib29sZWFuJykge1xuICAgICAgaWYgKHNob3cpIGRkLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgZWxzZSBkZC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICB9IGVsc2UgZGQuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XG5cbiAgICB0aGlzLmlzT3BlbmVkID0gZGQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKTtcblxuICAgIGlmICh0aGlzLmlzT3BlbmVkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNlbGVjdGVkJyk7XG4gICAgICBpZiAoc2VsZWN0ZWQpIHNlbGVjdGVkLnNjcm9sbEludG9WaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0KG9wdGlvbjogYW55LCBieVZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5iYWNrc3BhY2VDbGlja2VkT25jZSA9IGZhbHNlO1xuICAgIGNvbnN0IHZhbCA9IGJ5VmFsdWVcbiAgICAgID8gb3B0aW9uXG4gICAgICA6IHRoaXMucmV0dXJuT2JqZWN0XG4gICAgICA/IG9wdGlvblxuICAgICAgOiBvcHRpb25bdGhpcy5vcHRpb25WYWx1ZV07XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGxldCByZXMgPSBbXSBhcyBhbnk7XG4gICAgICBpZiAodGhpcy52YWx1ZS5pbmNsdWRlcyh2YWwpKSB7XG4gICAgICAgIHJlcyA9IHRoaXMudmFsdWUuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICAgIGNvbnN0IG92ID0gdGhpcy5yZXR1cm5PYmplY3QgPyBvIDogb1t0aGlzLm9wdGlvblZhbHVlXTtcbiAgICAgICAgICBpZiAodGhpcy52YWx1ZS5zb21lKCh2OiBhbnkpID0+IHYgPT09IG92KSB8fCB2YWwgPT09IG92KSB7XG4gICAgICAgICAgICByZXMucHVzaChvdik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlVmFsdWUocmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWwpO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhcklucHV0KCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIG9uT3B0aW9uQ2xpY2sob3B0aW9uOiBhbnksIGRkOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuX2NsaWNrT3B0aW9uKG9wdGlvbiwgZGQpO1xuICB9XG5cbiAgdG9nZ2xlQWxsKCkge1xuICAgIGxldCByZXMgPSBbXTtcbiAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPCB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5yZXR1cm5PYmplY3QpIHtcbiAgICAgICAgcmVzID0gdGhpcy5vcHRpb25zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgICByZXMucHVzaChvW3RoaXMub3B0aW9uVmFsdWVdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVmFsdWUocmVzKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xpY2tPcHRpb24ob3B0aW9uOiBhbnksIGRkOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuc2VsZWN0KG9wdGlvbiwgZmFsc2UpO1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fdG9nZ2xlT3B0aW9ucyhkZCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRXJyb3JzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuX2NvbnRyb2w/LmVycm9ycztcblxuICAgIGlmICghdGhpcy5fY29udHJvbD8uY29udHJvbD8udG91Y2hlZCB8fCAhZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCdyZXF1aXJlZCcgaW4gZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJ0ZpZWxkIGlzIHJlcXVpcmVkJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJBcnIgPSBPYmplY3QudmFsdWVzKGVycm9ycyk7XG4gICAgaWYgKGVyckFyci5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJBcnIuZmluZCgobXNnKSA9PiB0eXBlb2YgbXNnID09PSAnc3RyaW5nJyk7XG5cbiAgICB0aGlzLmVycm9yID0gbWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcic7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgZmlsdGVyT3B0aW9ucyhldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkKSB7XG4gICAgICB0aGlzLl90b2dnbGVPcHRpb25zKHRoaXMuYXV0b2NvbXBsZXRlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5iYWNrc3BhY2VDbGlja2VkT25jZSA9IGZhbHNlO1xuICAgIGNvbnN0IHNlYXJjaFZhbCA9IChldmVudD8udGFyZ2V0Py52YWx1ZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigobzogYW55KSA9PlxuICAgICAgb1t0aGlzLm9wdGlvbkxhYmVsXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29udmVydFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghdGhpcy5yZXR1cm5PYmplY3QpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IHRlbXA6IGFueSA9IFtdO1xuICAgICAgICAgIHZhbHVlLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdGVtcC5wdXNoKHYgPyB2W3RoaXMub3B0aW9uVmFsdWVdIDogJycpO1xuICAgICAgICAgICAgfSBlbHNlIHRlbXAucHVzaCh2KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YWx1ZSA9IHRlbXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF2YWx1ZSkgdmFsdWUgPSBbXTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gW3ZhbHVlW3RoaXMub3B0aW9uVmFsdWVdXTtcbiAgICAgICAgICAgIH0gZWxzZSB2YWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPyB2YWx1ZVt0aGlzLm9wdGlvblZhbHVlXSA6ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdmFsdWUgPSB0aGlzLl9jb252ZXJ0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRWYWx1ZUxhYmVsKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICA/IHRoaXMucmV0dXJuT2JqZWN0XG4gICAgICAgID8gdGhpcy52YWx1ZVt0aGlzLm9wdGlvbkxhYmVsXVxuICAgICAgICA6IHRoaXMuX2xhYmVsQnlWYWx1ZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25WYWx1ZSxcbiAgICAgICAgICAgIHRoaXMub3B0aW9uTGFiZWxcbiAgICAgICAgICApXG4gICAgICA6ICcnO1xuICB9XG5cbiAgY2xlYXIoZGQ6IEhUTUxFbGVtZW50LCBldmVudDogYW55KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoXG4gICAgICAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZSkgfHxcbiAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWU/Lmxlbmd0aCA+IDApXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5vcGVuT25DbGVhcikge1xuICAgICAgICB0aGlzLl90b2dnbGVPcHRpb25zKGRkLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMubXVsdGlwbGUgPyBbXSA6IHRoaXMucmV0dXJuT2JqZWN0ID8gdW5kZWZpbmVkIDogJyc7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbCk7XG4gICAgfVxuICAgIHRoaXMuX2NsZWFySW5wdXQoKTtcbiAgICB0aGlzLl9kZWhpZ2hsaWdodE9wdGlvbigpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHt9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMuX2NvbnRyb2w/LmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLl9jaGVja0Vycm9ycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYXJJbnB1dCgpIHtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xuICAgIHRoaXMuYWN0aXZlU2luZ2xlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZUFuZENsZWFyKGRkOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuX2NsZWFySW5wdXQoKTtcbiAgICB0aGlzLl90b2dnbGVPcHRpb25zKGRkLCBmYWxzZSk7XG4gICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24oKTtcbiAgfVxuXG4gIG9uQ2xpY2tPdXRzaWRlKGRkOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuX2Nsb3NlQW5kQ2xlYXIoZGQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SFRNTE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAnLmNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1vcHRpb24nXG4gICAgICApIHx8IFtdXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlaGlnaGxpZ2h0T3B0aW9uKGVsPzogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoZWwpIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZ2hsaWdodGVuJyk7XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4IDwgMCkgcmV0dXJuO1xuICAgICAgY29uc3Qgb3B0aW9uSXRlbXMgPSB0aGlzLl9nZXRIVE1MT3B0aW9ucygpO1xuICAgICAgb3B0aW9uSXRlbXNbdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4XS5jbGFzc0xpc3QucmVtb3ZlKCdoaWdobGlnaHRlbicpO1xuICAgICAgdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0T3B0aW9uKGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2hpZ2hsaWdodGVuJyk7XG4gICAgY29uc3QgcGFyZW50ID0gZWwucGFyZW50RWxlbWVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICAgIGNvbnN0IHBhcmVudFJlY3QgPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGVsUmVjdC50b3AgPCBwYXJlbnRSZWN0LnRvcCB8fCBlbFJlY3QuYm90dG9tID4gcGFyZW50UmVjdC5ib3R0b20pIHtcbiAgICAgIGVsLnNjcm9sbEludG9WaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgb25Cb3hDbGljaygpIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuYWN0aXZlU2luZ2xlID0gdHJ1ZTtcbiAgICAgIHRoaXMuaW5wdXRUZXh0ID0gdGhpcy5fZ2V0VmFsdWVMYWJlbCgpO1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgfVxuICAgIHRoaXMuZm9jdXMoKTtcbiAgICB0aGlzLl9kZWhpZ2hsaWdodE9wdGlvbigpO1xuICB9XG5cbiAgb25Db250YWluZXJLZXlEb3duKGV2ZW50OiBhbnksIGRkOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIC8vIGVzY2FwZVxuICAgIGlmIChjb2RlID09PSAyNykge1xuICAgICAgdGhpcy5fY2xvc2VBbmRDbGVhcihkZCk7XG4gICAgfVxuICAgIC8vIGVudGVyXG4gICAgZWxzZSBpZiAoY29kZSA9PT0gMTMpIHtcbiAgICAgIGxldCBpZHggPSB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXg7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnNlbGVjdEFsbCkge1xuICAgICAgICBpZiAoaWR4ID09PSAwKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVBbGwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZHgtLTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZmlsdGVyZWRPcHRpb25zW2lkeF07XG4gICAgICB0aGlzLl9jbGlja09wdGlvbihvcHRpb24sIGRkKTtcbiAgICB9XG4gICAgLy8gdmVydGljYWwgYXJyb3dzXG4gICAgZWxzZSBpZiAoWzM4LCA0MF0uaW5jbHVkZXMoY29kZSkpIHtcbiAgICAgIHRoaXMuX25hdmlnYXRlT3B0aW9uc0J5QXJyb3dzKGNvZGUgPT09IDM4KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0S2V5RG93bihldmVudDogYW55KSB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgLy8gYmFja3NwYWNlXG4gICAgaWYgKGNvZGUgPT09IDgpIHtcbiAgICAgIHRoaXMuX3JlbW92ZUxhc3RWYWx1ZSgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIC8vIGVudGVyXG4gICAgZWxzZSBpZiAoY29kZSA9PT0gMTMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPCAwKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpcm1JbnB1dChldmVudD8udGFyZ2V0Py52YWx1ZSB8fCAnJyk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoWzM4LCA0MF0uaW5jbHVkZXMoY29kZSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RlaGlnaGxpZ2h0T3B0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbmF2aWdhdGVPcHRpb25zQnlBcnJvd3ModXA6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHJldHVybjtcblxuICAgIGNvbnN0IG9wdGlvbkl0ZW1zID0gdGhpcy5fZ2V0SFRNTE9wdGlvbnMoKTtcbiAgICBjb25zdCBsZW4gPSBvcHRpb25JdGVtcy5sZW5ndGg7XG4gICAgaWYgKGxlbiA8IDEpIHJldHVybjtcblxuICAgIGlmIChsZW4gPT09IDEpIHtcbiAgICAgIHRoaXMuX2hpZ2hsaWdodE9wdGlvbihvcHRpb25JdGVtc1swXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHVwKSB7XG4gICAgICB0aGlzLl9kZWhpZ2hsaWdodE9wdGlvbihvcHRpb25JdGVtc1t0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXhdKTtcbiAgICAgIHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCA9XG4gICAgICAgIHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCA8IDFcbiAgICAgICAgICA/IGxlbiAtIDFcbiAgICAgICAgICA6IHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCAtIDE7XG4gICAgICB0aGlzLl9oaWdobGlnaHRPcHRpb24ob3B0aW9uSXRlbXNbdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RlaGlnaGxpZ2h0T3B0aW9uKG9wdGlvbkl0ZW1zW3RoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleF0pO1xuICAgICAgdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4ID0gWy0xLCBsZW4gLSAxXS5pbmNsdWRlcyhcbiAgICAgICAgdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4XG4gICAgICApXG4gICAgICAgID8gMFxuICAgICAgICA6IHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCArIDE7XG4gICAgICB0aGlzLl9oaWdobGlnaHRPcHRpb24ob3B0aW9uSXRlbXNbdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4XSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlybUlucHV0KHNlYXJjaFZhbDogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkKSByZXR1cm47XG4gICAgc2VhcmNoVmFsID0gc2VhcmNoVmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFzZWFyY2hWYWwpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSByZXR1cm47XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLnJldHVybk9iamVjdCA/IHVuZGVmaW5lZCA6ICcnO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWwpO1xuICAgICAgdGhpcy5fY2xvc2VBbmRDbGVhcih0aGlzLmF1dG9jb21wbGV0ZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kKFxuICAgICAgKG86IGFueSkgPT4gb1t0aGlzLm9wdGlvbkxhYmVsXS50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hWYWxcbiAgICApO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3QoZm91bmQsIGZhbHNlKTtcbiAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnMoXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50LFxuICAgICAgICB0aGlzLm11bHRpcGxlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLl9nZXRWYWx1ZUxhYmVsKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fY2xlYXJJbnB1dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlTGFzdFZhbHVlKCkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSB8fCB0aGlzLmlucHV0VGV4dCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMudmFsdWU/Lmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuYmFja3NwYWNlQ2xpY2tlZE9uY2UpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnZhbHVlLmZpbHRlcihcbiAgICAgICAgICAgICh2OiBhbnksIGluZGV4OiBudW1iZXIpID0+IGluZGV4ICE9PSB0aGlzLnZhbHVlLmxlbmd0aCAtIDFcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5iYWNrc3BhY2VDbGlja2VkT25jZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHRoaXMuYmFja3NwYWNlQ2xpY2tlZE9uY2UgPSB0cnVlO1xuICAgIH0gZWxzZSB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgZm9jdXNJbnB1dCgpIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uZm9jdXMoKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnModGhpcy5hdXRvY29tcGxldGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsIHRydWUpO1xuICB9XG59XG4iLCI8ZGl2XG4gIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGN2dFdpZHRoIH1cIlxuICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGVcIlxuICB0YWJpbmRleD1cIjFcIlxuICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCwgZXJyb3I6IGVycm9yIH1cIlxuICAjYXV0b2NvbXBsZXRlQ29udGFpbmVyPlxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1sYWJlbFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgPGRpdlxuICAgIChrZXlkb3duKT1cIm9uQ29udGFpbmVyS2V5RG93bigkZXZlbnQsIGF1dG9jb21wbGV0ZUNvbnRhaW5lcilcIlxuICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1jb250YWluZXJcIlxuICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzT3BlbmVkXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAncGVyc2lzdGVudC1jbGVhcic6IHBlcnNpc3RlbnRDbGVhclxuICAgIH1cIlxuICAgIChjbGlja091dHNpZGUpPVwib25DbGlja091dHNpZGUoYXV0b2NvbXBsZXRlQ29udGFpbmVyKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWJveFwiIChjbGljayk9XCJvbkJveENsaWNrKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWJveC1hcmVhXCI+XG4gICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICpuZ0lmPVwicHJlZml4SWNvblwiXG4gICAgICAgICAgW2ljb25dPVwicHJlZml4SWNvblwiXG4gICAgICAgICAgW3NpemVdPVwicHJlZml4SWNvblNpemVcIlxuICAgICAgICAgIGNsYXNzPVwicHJlZml4LWljb25cIj5cbiAgICAgICAgPC9jcHMtaWNvbj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1ib3gtaXRlbXNcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAodmFsdWUgJiYgIW11bHRpcGxlKSB8fCAodmFsdWU/Lmxlbmd0aCA+IDAgJiYgbXVsdGlwbGUpO1xuICAgICAgICAgICAgZWxzZSBhdXRvY29tcGxldGVJbnB1dFxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW11bHRpcGxlXCIgY2xhc3M9XCJzaW5nbGUtaXRlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1pdGVtLXNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICA8c3BhbiBbc3R5bGUub3BhY2l0eV09XCJhY3RpdmVTaW5nbGUgPyAwIDogMVwiPnt7XG4gICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0XG4gICAgICAgICAgICAgICAgICA/IHZhbHVlW29wdGlvbkxhYmVsXVxuICAgICAgICAgICAgICAgICAgOiAodmFsdWUgfCBsYWJlbEJ5VmFsdWUgOiBvcHRpb25zIDogb3B0aW9uVmFsdWUgOiBvcHRpb25MYWJlbClcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVJbnB1dDtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICBpbnB1dENsYXNzOiAnc2luZ2xlLWl0ZW0taW5wdXQnLFxuICAgICAgICAgICAgICAgICAgaW5wdXRTdHlsZTogYWN0aXZlU2luZ2xlID8gJ29wYWNpdHk6IDEnIDogbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlwbGUgJiYgIWNoaXBzXCIgY2xhc3M9XCJ0ZXh0LWdyb3VwXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2YWwgb2YgdmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ncm91cC1pdGVtXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYWJvdXQtdG8tcmVtb3ZlJzogbGFzdCAmJiBiYWNrc3BhY2VDbGlja2VkT25jZSB9XCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0XG4gICAgICAgICAgICAgICAgICA/IHZhbFtvcHRpb25MYWJlbF1cbiAgICAgICAgICAgICAgICAgIDogKHZhbCB8IGxhYmVsQnlWYWx1ZSA6IG9wdGlvbnMgOiBvcHRpb25WYWx1ZSA6IG9wdGlvbkxhYmVsKVxuICAgICAgICAgICAgICB9fXt7ICFsYXN0ID8gJywnIDogJycgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImF1dG9jb21wbGV0ZUlucHV0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlwbGUgJiYgY2hpcHNcIiBjbGFzcz1cImNoaXBzLWdyb3VwXCI+XG4gICAgICAgICAgICA8Y3BzLWNoaXBcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbCBvZiB2YWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2Nsb3NhYmxlXT1cImNsb3NhYmxlQ2hpcHNcIlxuICAgICAgICAgICAgICAoY2xvc2VkKT1cInNlbGVjdCh2YWwsIHRydWUpXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYWJvdXQtdG8tcmVtb3ZlJzogbGFzdCAmJiBiYWNrc3BhY2VDbGlja2VkT25jZSB9XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdFxuICAgICAgICAgICAgICAgICAgPyB2YWxbb3B0aW9uTGFiZWxdXG4gICAgICAgICAgICAgICAgICA6ICh2YWwgfCBsYWJlbEJ5VmFsdWUgOiBvcHRpb25zIDogb3B0aW9uVmFsdWUgOiBvcHRpb25MYWJlbClcbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICA8L2Nwcy1jaGlwPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImF1dG9jb21wbGV0ZUlucHV0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94LWljb25zXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiY2xlYXJhYmxlICYmICFkaXNhYmxlZFwiXG4gICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJcbiAgICAgICAgICAgICAgcGVyc2lzdGVudENsZWFyIHx8XG4gICAgICAgICAgICAgICghcGVyc2lzdGVudENsZWFyICYmXG4gICAgICAgICAgICAgICAgKChtdWx0aXBsZSAmJiB2YWx1ZT8ubGVuZ3RoKSB8fCAoIW11bHRpcGxlICYmIHZhbHVlKSkpXG4gICAgICAgICAgICAgICAgPyAndmlzaWJsZSdcbiAgICAgICAgICAgICAgICA6ICdoaWRkZW4nXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWJveC1jbGVhci1pY29uXCI+XG4gICAgICAgICAgICA8Y3BzLWljb25cbiAgICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGVhcihhdXRvY29tcGxldGVDb250YWluZXIsICRldmVudClcIj48L2Nwcy1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94LWNoZXZyb25cIj5cbiAgICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgICBpY29uPVwiY2hldnJvbi1kb3duXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ0ZXh0LWRhcmtcIj48L2Nwcy1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbiBzZWxlY3QtYWxsLW9wdGlvblwiXG4gICAgICAgIFtjbGFzcy5hbGxzZWxlY3RlZF09XCJ2YWx1ZT8ubGVuZ3RoID09PSBvcHRpb25zLmxlbmd0aFwiXG4gICAgICAgICpuZ0lmPVwibXVsdGlwbGUgJiYgc2VsZWN0QWxsXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbCgpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1sZWZ0XCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJtdWx0aXBsZVwiIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1jaGVja1wiPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1vcHRpb24tbGFiZWxcIj5TZWxlY3QgYWxsPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAoY2xpY2spPVwib25PcHRpb25DbGljayhvcHRpb24sIGF1dG9jb21wbGV0ZUNvbnRhaW5lcilcIlxuICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgID8gcmV0dXJuT2JqZWN0XG4gICAgICAgICAgICAgID8gdmFsdWU/LmluY2x1ZGVzKG9wdGlvbilcbiAgICAgICAgICAgICAgOiB2YWx1ZT8uaW5jbHVkZXMob3B0aW9uW29wdGlvblZhbHVlXSlcbiAgICAgICAgICAgIDogcmV0dXJuT2JqZWN0XG4gICAgICAgICAgICA/IG9wdGlvbiA9PT0gdmFsdWVcbiAgICAgICAgICAgIDogb3B0aW9uW29wdGlvblZhbHVlXSA9PT0gdmFsdWVcbiAgICAgICAgXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1sZWZ0XCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJtdWx0aXBsZVwiIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1jaGVja1wiPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1vcHRpb24tbGFiZWxcIj57e1xuICAgICAgICAgICAgb3B0aW9uW29wdGlvbkxhYmVsXVxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uLXJpZ2h0XCI+e3tcbiAgICAgICAgICBvcHRpb25bb3B0aW9uSW5mb11cbiAgICAgICAgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhZXJyb3IgJiYgIWhpZGVEZXRhaWxzXCIgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWhpbnRcIj5cbiAgICB7eyBoaW50IH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZXJyb3IgJiYgIWhpZGVEZXRhaWxzXCIgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWVycm9yXCI+XG4gICAge3sgZXJyb3IgfX1cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNhdXRvY29tcGxldGVJbnB1dFxuICBsZXQtaW5wdXRDbGFzcz1cImlucHV0Q2xhc3NcIlxuICBsZXQtaW5wdXRTdHlsZT1cImlucHV0U3R5bGVcIj5cbiAgPGlucHV0XG4gICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWJveC1pbnB1dFwiXG4gICAgW2NsYXNzXT1cImlucHV0Q2xhc3NcIlxuICAgIFtzdHlsZV09XCJpbnB1dFN0eWxlXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAoIXZhbHVlICYmICFtdWx0aXBsZSkgfHwgKHZhbHVlPy5sZW5ndGggPCAxICYmIG11bHRpcGxlKVxuICAgICAgICA/IHBsYWNlaG9sZGVyXG4gICAgICAgIDogJydcbiAgICBcIlxuICAgIChpbnB1dCk9XCJmaWx0ZXJPcHRpb25zKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgIFsobmdNb2RlbCldPVwiaW5wdXRUZXh0XCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiIC8+XG48L25nLXRlbXBsYXRlPlxuIl19
|