cps-ui-kit 18.11.0 → 19.1.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/fesm2022/cps-ui-kit.mjs +269 -307
- package/fesm2022/cps-ui-kit.mjs.map +1 -1
- package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
- package/lib/components/cps-menu/cps-menu.component.d.ts +4 -3
- package/lib/components/cps-select/cps-select.component.d.ts +2 -2
- package/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.d.ts +3 -3
- package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +3 -3
- package/package.json +6 -8
- package/styles/styles.scss +9 -0
- package/esm2022/cps-ui-kit.mjs +0 -5
- package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -948
- package/esm2022/lib/components/cps-button/cps-button.component.mjs +0 -205
- package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -239
- package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -154
- package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +0 -94
- package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
- package/esm2022/lib/components/cps-divider/cps-divider.component.mjs +0 -60
- package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -213
- package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -182
- package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +0 -203
- package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
- package/esm2022/lib/components/cps-input/cps-input.component.mjs +0 -385
- package/esm2022/lib/components/cps-loader/cps-loader.component.mjs +0 -58
- package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +0 -572
- package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +0 -118
- package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
- package/esm2022/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +0 -51
- package/esm2022/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +0 -75
- package/esm2022/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +0 -42
- package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -77
- package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -225
- package/esm2022/lib/components/cps-scheduler/cps-scheduler.component.mjs +0 -682
- package/esm2022/lib/components/cps-scheduler/cps-scheduler.utils.mjs +0 -604
- package/esm2022/lib/components/cps-select/cps-select.component.mjs +0 -654
- package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
- package/esm2022/lib/components/cps-switch/cps-switch.component.mjs +0 -131
- package/esm2022/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +0 -86
- package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -308
- package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -407
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -147
- package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -105
- package/esm2022/lib/components/cps-table/cps-column-filter-types.mjs +0 -29
- package/esm2022/lib/components/cps-table/cps-table.component.mjs +0 -1022
- package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
- package/esm2022/lib/components/cps-table/directives/cps-table-column-resizable.directive.mjs +0 -22
- package/esm2022/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +0 -47
- package/esm2022/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +0 -32
- package/esm2022/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +0 -35
- package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -212
- package/esm2022/lib/components/cps-table/pipes/cps-table-detect-filter-type.pipe.mjs +0 -29
- package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +0 -121
- package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +0 -290
- package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -370
- package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -273
- package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
- package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1279
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +0 -174
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-resizable.directive.mjs +0 -22
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +0 -47
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +0 -33
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +0 -36
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -48
- package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -352
- package/esm2022/lib/components/cps-tree-table/pipes/cps-tree-table-detect-filter-type.pipe.mjs +0 -30
- package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -656
- package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +0 -275
- package/esm2022/lib/pipes/internal/check-option-selected.pipe.mjs +0 -24
- package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
- package/esm2022/lib/pipes/internal/label-by-value.pipe.mjs +0 -16
- package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +0 -146
- package/esm2022/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +0 -25
- package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
- package/esm2022/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +0 -18
- package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
- package/esm2022/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -128
- package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +0 -122
- package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -95
- package/esm2022/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +0 -106
- package/esm2022/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -27
- package/esm2022/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -12
- package/esm2022/lib/utils/colors-utils.mjs +0 -59
- package/esm2022/lib/utils/internal/size-utils.mjs +0 -24
- package/esm2022/public-api.mjs +0 -58
|
@@ -1,948 +0,0 @@
|
|
|
1
|
-
import { CommonModule, DOCUMENT } from '@angular/common';
|
|
2
|
-
import { Component, EventEmitter, Inject, Input, Optional, Output, Self, ViewChild } from '@angular/core';
|
|
3
|
-
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';
|
|
5
|
-
import { convertSize } from '../../utils/internal/size-utils';
|
|
6
|
-
import { CpsIconComponent } from '../cps-icon/cps-icon.component';
|
|
7
|
-
import { CpsChipComponent } from '../cps-chip/cps-chip.component';
|
|
8
|
-
import { CpsProgressLinearComponent } from '../cps-progress-linear/cps-progress-linear.component';
|
|
9
|
-
import { CpsInfoCircleComponent } from '../cps-info-circle/cps-info-circle.component';
|
|
10
|
-
import { LabelByValuePipe } from '../../pipes/internal/label-by-value.pipe';
|
|
11
|
-
import { CheckOptionSelectedPipe } from '../../pipes/internal/check-option-selected.pipe';
|
|
12
|
-
import { isEqual } from 'lodash-es';
|
|
13
|
-
import { VirtualScrollerModule } from 'primeng/virtualscroller';
|
|
14
|
-
import { CpsMenuComponent, CpsMenuHideReason } from '../cps-menu/cps-menu.component';
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
import * as i1 from "@angular/forms";
|
|
17
|
-
import * as i2 from "../../pipes/internal/label-by-value.pipe";
|
|
18
|
-
import * as i3 from "@angular/common";
|
|
19
|
-
import * as i4 from "primeng/virtualscroller";
|
|
20
|
-
import * as i5 from "primeng/api";
|
|
21
|
-
/**
|
|
22
|
-
* CpsAutocompleteComponent is an input component that provides real-time suggestions when being typed.
|
|
23
|
-
* @group Components
|
|
24
|
-
*/
|
|
25
|
-
export class CpsAutocompleteComponent {
|
|
26
|
-
get value() {
|
|
27
|
-
return this._value;
|
|
28
|
-
}
|
|
29
|
-
set value(value) {
|
|
30
|
-
this._value = value;
|
|
31
|
-
this.onChange(value);
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* An array of options.
|
|
35
|
-
* @group Props
|
|
36
|
-
*/
|
|
37
|
-
set options(opts) {
|
|
38
|
-
this._options = opts || [];
|
|
39
|
-
}
|
|
40
|
-
get options() {
|
|
41
|
-
return this._options;
|
|
42
|
-
}
|
|
43
|
-
constructor(_control, document, cdRef, _labelByValue) {
|
|
44
|
-
this._control = _control;
|
|
45
|
-
this.document = document;
|
|
46
|
-
this.cdRef = cdRef;
|
|
47
|
-
this._labelByValue = _labelByValue;
|
|
48
|
-
/**
|
|
49
|
-
* Label of the autocomplete component.
|
|
50
|
-
* @group Props
|
|
51
|
-
*/
|
|
52
|
-
this.label = '';
|
|
53
|
-
/**
|
|
54
|
-
* Placeholder text.
|
|
55
|
-
* @group Props
|
|
56
|
-
*/
|
|
57
|
-
this.placeholder = 'Please enter';
|
|
58
|
-
/**
|
|
59
|
-
* Bottom hint text.
|
|
60
|
-
* @group Props
|
|
61
|
-
*/
|
|
62
|
-
this.hint = '';
|
|
63
|
-
/**
|
|
64
|
-
* Returns the object directly rather than the value specified with optionValue.
|
|
65
|
-
* @group Props
|
|
66
|
-
*/
|
|
67
|
-
this.returnObject = true;
|
|
68
|
-
/**
|
|
69
|
-
* Specifies if multiple values can be selected.
|
|
70
|
-
* @group Props
|
|
71
|
-
*/
|
|
72
|
-
this.multiple = false;
|
|
73
|
-
/**
|
|
74
|
-
* Determines whether autocomplete is disabled.
|
|
75
|
-
* @group Props
|
|
76
|
-
*/
|
|
77
|
-
this.disabled = false;
|
|
78
|
-
/**
|
|
79
|
-
* Width of the autocomplete component, a number denoting pixels or a string.
|
|
80
|
-
* @group Props
|
|
81
|
-
*/
|
|
82
|
-
this.width = '100%';
|
|
83
|
-
/**
|
|
84
|
-
* Option for selecting all elements. Doesn't work with virtual scroll.
|
|
85
|
-
* @group Props
|
|
86
|
-
*/
|
|
87
|
-
this.selectAll = true;
|
|
88
|
-
/**
|
|
89
|
-
* Determines whether the chevron icon should be displayed.
|
|
90
|
-
* @group Props
|
|
91
|
-
*/
|
|
92
|
-
this.showChevron = true;
|
|
93
|
-
/**
|
|
94
|
-
* Determines whether the options should be filtered by aliases in addition to labels.
|
|
95
|
-
* @group Props
|
|
96
|
-
*/
|
|
97
|
-
this.withOptionsAliases = false;
|
|
98
|
-
/**
|
|
99
|
-
* Determines whether the options should be filtered by aliases in addition to labels only when no label match is found. Works only If withOptionsAliases is true.
|
|
100
|
-
* @group Props
|
|
101
|
-
*/
|
|
102
|
-
this.useOptionsAliasesWhenNoMatch = false;
|
|
103
|
-
/**
|
|
104
|
-
* Name of the alias field of an option. Needed only if withOptionsAliases is true.
|
|
105
|
-
* @group Props
|
|
106
|
-
*/
|
|
107
|
-
this.optionAlias = 'alias';
|
|
108
|
-
/**
|
|
109
|
-
* When selecting elements, they will appear in a form of a chip.
|
|
110
|
-
* @group Props
|
|
111
|
-
*/
|
|
112
|
-
this.chips = true;
|
|
113
|
-
/**
|
|
114
|
-
* Determines whether the chips can be directly removed.
|
|
115
|
-
* @group Props
|
|
116
|
-
*/
|
|
117
|
-
this.closableChips = true;
|
|
118
|
-
/**
|
|
119
|
-
* When enabled, a clear icon is displayed to clear the value.
|
|
120
|
-
* @group Props
|
|
121
|
-
*/
|
|
122
|
-
this.clearable = false;
|
|
123
|
-
/**
|
|
124
|
-
* Determines whether the dropdown list should open on clear.
|
|
125
|
-
* @group Props
|
|
126
|
-
*/
|
|
127
|
-
this.openOnClear = true;
|
|
128
|
-
/**
|
|
129
|
-
* If multiple, determines whether selected options should be ordered according to the initial order of the options.
|
|
130
|
-
* @group Props
|
|
131
|
-
*/
|
|
132
|
-
this.keepInitialOrder = false;
|
|
133
|
-
/**
|
|
134
|
-
* Name of the label field of an option.
|
|
135
|
-
* @group Props
|
|
136
|
-
*/
|
|
137
|
-
this.optionLabel = 'label';
|
|
138
|
-
/**
|
|
139
|
-
* Name of the value field of an option. Needed only if returnObject prop is false.
|
|
140
|
-
* @group Props
|
|
141
|
-
*/
|
|
142
|
-
this.optionValue = 'value';
|
|
143
|
-
/**
|
|
144
|
-
* Name of the info field of an option, shows the additional information text.
|
|
145
|
-
* @group Props
|
|
146
|
-
*/
|
|
147
|
-
this.optionInfo = 'info';
|
|
148
|
-
/**
|
|
149
|
-
* Hides hint and validation errors.
|
|
150
|
-
* @group Props
|
|
151
|
-
*/
|
|
152
|
-
this.hideDetails = false;
|
|
153
|
-
/**
|
|
154
|
-
* Determines whether the component should have persistent clear icon.
|
|
155
|
-
* @group Props
|
|
156
|
-
*/
|
|
157
|
-
this.persistentClear = false;
|
|
158
|
-
/**
|
|
159
|
-
* Icon before input value.
|
|
160
|
-
* @group Props
|
|
161
|
-
*/
|
|
162
|
-
this.prefixIcon = '';
|
|
163
|
-
/**
|
|
164
|
-
* Size of icon before input value.
|
|
165
|
-
* @group Props
|
|
166
|
-
*/
|
|
167
|
-
this.prefixIconSize = '18px';
|
|
168
|
-
/**
|
|
169
|
-
* When enabled, a loading bar is displayed.
|
|
170
|
-
* @group Props
|
|
171
|
-
*/
|
|
172
|
-
this.loading = false;
|
|
173
|
-
/**
|
|
174
|
-
* Text to display when options list is loading.
|
|
175
|
-
* @group Props
|
|
176
|
-
*/
|
|
177
|
-
this.loadingMessage = 'Loading...';
|
|
178
|
-
/**
|
|
179
|
-
* Determines whether the loading message should be displayed.
|
|
180
|
-
* @group Props
|
|
181
|
-
*/
|
|
182
|
-
this.showLoadingMessage = true;
|
|
183
|
-
/**
|
|
184
|
-
* Text to display when there is no data.
|
|
185
|
-
* @group Props
|
|
186
|
-
*/
|
|
187
|
-
this.emptyMessage = 'No results found';
|
|
188
|
-
/**
|
|
189
|
-
* Determines whether the empty message should be displayed.
|
|
190
|
-
* @group Props
|
|
191
|
-
*/
|
|
192
|
-
this.showEmptyMessage = true;
|
|
193
|
-
/**
|
|
194
|
-
* Determines whether only the elements within scrollable area should be added into the DOM.
|
|
195
|
-
* @group Props
|
|
196
|
-
*/
|
|
197
|
-
this.virtualScroll = false;
|
|
198
|
-
/**
|
|
199
|
-
* Determines how many additional elements to add to the DOM outside of the view.
|
|
200
|
-
* @group Props
|
|
201
|
-
*/
|
|
202
|
-
this.numToleratedItems = 10;
|
|
203
|
-
/**
|
|
204
|
-
* Externally set error message.
|
|
205
|
-
* @group Props
|
|
206
|
-
*/
|
|
207
|
-
this.externalError = '';
|
|
208
|
-
/**
|
|
209
|
-
* When it is not an empty string, an info icon is displayed to show text for more info.
|
|
210
|
-
* @group Props
|
|
211
|
-
*/
|
|
212
|
-
this.infoTooltip = '';
|
|
213
|
-
/**
|
|
214
|
-
* Info tooltip class for styling.
|
|
215
|
-
* @group Props
|
|
216
|
-
*/
|
|
217
|
-
this.infoTooltipClass = 'cps-tooltip-content';
|
|
218
|
-
/**
|
|
219
|
-
* Max width of infoTooltip of type number denoting pixels or string.
|
|
220
|
-
* @group Props
|
|
221
|
-
*/
|
|
222
|
-
this.infoTooltipMaxWidth = '100%';
|
|
223
|
-
/**
|
|
224
|
-
* Determines whether the infoTooltip is persistent.
|
|
225
|
-
* @group Props
|
|
226
|
-
*/
|
|
227
|
-
this.infoTooltipPersistent = false;
|
|
228
|
-
/**
|
|
229
|
-
* Position of infoTooltip, it can be 'top', 'bottom', 'left' or 'right'.
|
|
230
|
-
* @group Props
|
|
231
|
-
*/
|
|
232
|
-
this.infoTooltipPosition = 'top';
|
|
233
|
-
/**
|
|
234
|
-
* Styling appearance of autocomplete input, it could be 'outlined', 'underlined' or 'borderless'.
|
|
235
|
-
* @group Props
|
|
236
|
-
*/
|
|
237
|
-
this.appearance = 'outlined';
|
|
238
|
-
/**
|
|
239
|
-
* Index of empty value in options array. Applicable only if multiple is false.
|
|
240
|
-
* @group Props
|
|
241
|
-
*/
|
|
242
|
-
this.emptyOptionIndex = -1;
|
|
243
|
-
/**
|
|
244
|
-
* Debounce time for inputChanged event.
|
|
245
|
-
* @group Props
|
|
246
|
-
*/
|
|
247
|
-
this.inputChangeDebounceTime = 500;
|
|
248
|
-
/**
|
|
249
|
-
* Determines whether the component is currently validating the selected value asynchronously.
|
|
250
|
-
* @group Props
|
|
251
|
-
*/
|
|
252
|
-
this.validating = false;
|
|
253
|
-
/**
|
|
254
|
-
* Value of the autocomplete.
|
|
255
|
-
* @group Props
|
|
256
|
-
*/
|
|
257
|
-
this._value = undefined;
|
|
258
|
-
/**
|
|
259
|
-
* Callback to invoke on value change.
|
|
260
|
-
* @param {any} any - value changed.
|
|
261
|
-
* @group Emits
|
|
262
|
-
*/
|
|
263
|
-
this.valueChanged = new EventEmitter();
|
|
264
|
-
/**
|
|
265
|
-
* Callback to invoke on field input change.
|
|
266
|
-
* @param {string} string - input changed.
|
|
267
|
-
* @group Emits
|
|
268
|
-
*/
|
|
269
|
-
this.inputChanged = new EventEmitter();
|
|
270
|
-
/**
|
|
271
|
-
* Callback to invoke when the component receives focus.
|
|
272
|
-
* @param {any}
|
|
273
|
-
* @group Emits
|
|
274
|
-
*/
|
|
275
|
-
this.focused = new EventEmitter();
|
|
276
|
-
/**
|
|
277
|
-
* Callback to invoke when the component loses focus.
|
|
278
|
-
* @param {any}
|
|
279
|
-
* @group Emits
|
|
280
|
-
*/
|
|
281
|
-
this.blurred = new EventEmitter();
|
|
282
|
-
this.error = '';
|
|
283
|
-
this.cvtWidth = '';
|
|
284
|
-
this.isOpened = false;
|
|
285
|
-
this.inputText = '';
|
|
286
|
-
this.inputTextDebounced = '';
|
|
287
|
-
this.filteredOptions = [];
|
|
288
|
-
this.backspaceClickedOnce = false;
|
|
289
|
-
this.activeSingle = false;
|
|
290
|
-
this.optionHighlightedIndex = -1;
|
|
291
|
-
this.virtualListHeight = 240;
|
|
292
|
-
this.virtualScrollItemSize = 42;
|
|
293
|
-
this.autocompleteBoxWidth = 0;
|
|
294
|
-
this.isTimePickerField = false;
|
|
295
|
-
this._inputChangeSubject$ = new Subject();
|
|
296
|
-
this._destroy$ = new Subject();
|
|
297
|
-
this._options = [];
|
|
298
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
299
|
-
this.onChange = (event) => { };
|
|
300
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
301
|
-
this.onTouched = () => { };
|
|
302
|
-
if (this._control) {
|
|
303
|
-
this._control.valueAccessor = this;
|
|
304
|
-
}
|
|
305
|
-
this.resizeObserver = new ResizeObserver((entries) => {
|
|
306
|
-
entries.forEach((entry) => {
|
|
307
|
-
if (entry?.target)
|
|
308
|
-
this.autocompleteBoxWidth = entry.target.offsetWidth;
|
|
309
|
-
});
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
ngOnInit() {
|
|
313
|
-
this.cvtWidth = convertSize(this.width);
|
|
314
|
-
if (this.multiple && !this._value) {
|
|
315
|
-
this._value = [];
|
|
316
|
-
}
|
|
317
|
-
if (!this.multiple && this._value === undefined) {
|
|
318
|
-
this._value = this._getEmptyValue();
|
|
319
|
-
}
|
|
320
|
-
this._control?.statusChanges
|
|
321
|
-
?.pipe(takeUntil(this._destroy$))
|
|
322
|
-
?.subscribe(() => {
|
|
323
|
-
this._checkErrors();
|
|
324
|
-
});
|
|
325
|
-
this._inputChangeSubject$
|
|
326
|
-
.pipe(debounceTime(this.inputChangeDebounceTime), distinctUntilChanged(), takeUntil(this._destroy$))
|
|
327
|
-
.subscribe((val) => {
|
|
328
|
-
this.inputTextDebounced = this.inputText;
|
|
329
|
-
this.inputChanged.emit(val);
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
ngOnChanges(changes) {
|
|
333
|
-
if (changes.options) {
|
|
334
|
-
this.filteredOptions = this.options;
|
|
335
|
-
this.recalcVirtualListHeight();
|
|
336
|
-
}
|
|
337
|
-
const loadChanges = changes.loading;
|
|
338
|
-
if (loadChanges &&
|
|
339
|
-
!loadChanges.firstChange &&
|
|
340
|
-
!loadChanges.currentValue &&
|
|
341
|
-
loadChanges.previousValue) {
|
|
342
|
-
this._toggleOptions(true);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
ngAfterViewInit() {
|
|
346
|
-
this.resizeObserver.observe(this.autocompleteBox.nativeElement);
|
|
347
|
-
}
|
|
348
|
-
ngOnDestroy() {
|
|
349
|
-
this.resizeObserver?.disconnect();
|
|
350
|
-
this._destroy$.next();
|
|
351
|
-
this._destroy$.complete();
|
|
352
|
-
}
|
|
353
|
-
select(option, byValue, needClearInput = true, needFocusInput = true) {
|
|
354
|
-
function includes(array, val) {
|
|
355
|
-
return array?.some((item) => isEqual(item, val)) || false;
|
|
356
|
-
}
|
|
357
|
-
this.backspaceClickedOnce = false;
|
|
358
|
-
const val = byValue
|
|
359
|
-
? option
|
|
360
|
-
: this.returnObject
|
|
361
|
-
? option
|
|
362
|
-
: option[this.optionValue];
|
|
363
|
-
if (this.multiple) {
|
|
364
|
-
let res = [];
|
|
365
|
-
if (includes(this.value, val)) {
|
|
366
|
-
res = this.value.filter((v) => !isEqual(v, val));
|
|
367
|
-
}
|
|
368
|
-
else {
|
|
369
|
-
if (this.keepInitialOrder) {
|
|
370
|
-
this.options.forEach((o) => {
|
|
371
|
-
const ov = this.returnObject ? o : o[this.optionValue];
|
|
372
|
-
if (this.value.some((v) => isEqual(v, ov)) ||
|
|
373
|
-
isEqual(val, ov)) {
|
|
374
|
-
res.push(ov);
|
|
375
|
-
}
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
else {
|
|
379
|
-
const opt = this.options.find((o) => {
|
|
380
|
-
return isEqual(val, this.returnObject ? o : o[this.optionValue]);
|
|
381
|
-
});
|
|
382
|
-
if (opt) {
|
|
383
|
-
res = [
|
|
384
|
-
...this.value,
|
|
385
|
-
this.returnObject ? opt : opt[this.optionValue]
|
|
386
|
-
];
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
this.updateValue(res);
|
|
391
|
-
}
|
|
392
|
-
else {
|
|
393
|
-
this.updateValue(val);
|
|
394
|
-
}
|
|
395
|
-
if (needClearInput) {
|
|
396
|
-
this.clearInput();
|
|
397
|
-
}
|
|
398
|
-
if (needFocusInput) {
|
|
399
|
-
setTimeout(() => {
|
|
400
|
-
this.focusInput();
|
|
401
|
-
}, 0);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
onOptionClick(option) {
|
|
405
|
-
this._clickOption(option);
|
|
406
|
-
}
|
|
407
|
-
toggleAll() {
|
|
408
|
-
let res = [];
|
|
409
|
-
if (this.value.length < this.options.length) {
|
|
410
|
-
if (this.returnObject) {
|
|
411
|
-
res = this.options;
|
|
412
|
-
}
|
|
413
|
-
else {
|
|
414
|
-
this.options.forEach((o) => {
|
|
415
|
-
res.push(o[this.optionValue]);
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
this.updateValue(res);
|
|
420
|
-
setTimeout(() => {
|
|
421
|
-
this.focusInput();
|
|
422
|
-
}, 0);
|
|
423
|
-
}
|
|
424
|
-
registerOnChange(fn) {
|
|
425
|
-
this.onChange = fn;
|
|
426
|
-
}
|
|
427
|
-
registerOnTouched(fn) {
|
|
428
|
-
this.onTouched = fn;
|
|
429
|
-
}
|
|
430
|
-
filterOptions(event) {
|
|
431
|
-
const searchVal = (event?.target?.value || '').toLowerCase().trim();
|
|
432
|
-
this.inputTextDebounced = '';
|
|
433
|
-
this._inputChangeSubject$.next(searchVal);
|
|
434
|
-
if (!this.isOpened) {
|
|
435
|
-
this._toggleOptions(true);
|
|
436
|
-
}
|
|
437
|
-
this._dehighlightOption();
|
|
438
|
-
this.backspaceClickedOnce = false;
|
|
439
|
-
let _filteredOptions = this.options.filter((o) => {
|
|
440
|
-
let res = o[this.optionLabel].toLowerCase().includes(searchVal);
|
|
441
|
-
if (!res &&
|
|
442
|
-
this.withOptionsAliases &&
|
|
443
|
-
!this.useOptionsAliasesWhenNoMatch) {
|
|
444
|
-
res = o[this.optionAlias]?.toLowerCase()?.includes(searchVal) || false;
|
|
445
|
-
}
|
|
446
|
-
return res;
|
|
447
|
-
});
|
|
448
|
-
if (_filteredOptions.length === 0 &&
|
|
449
|
-
this.withOptionsAliases &&
|
|
450
|
-
this.useOptionsAliasesWhenNoMatch) {
|
|
451
|
-
_filteredOptions = this.options.filter((o) => o[this.optionAlias]?.toLowerCase()?.includes(searchVal) || false);
|
|
452
|
-
}
|
|
453
|
-
this.filteredOptions = _filteredOptions;
|
|
454
|
-
setTimeout(() => {
|
|
455
|
-
this.recalcVirtualListHeight();
|
|
456
|
-
});
|
|
457
|
-
}
|
|
458
|
-
writeValue(value) {
|
|
459
|
-
this.value = value;
|
|
460
|
-
}
|
|
461
|
-
clear(event) {
|
|
462
|
-
event?.stopPropagation();
|
|
463
|
-
if ((!this.multiple && !this.isEmptyValue()) ||
|
|
464
|
-
(this.multiple && this.value?.length > 0)) {
|
|
465
|
-
if (this.openOnClear) {
|
|
466
|
-
this._toggleOptions(true);
|
|
467
|
-
}
|
|
468
|
-
const val = this.multiple ? [] : this._getEmptyValue();
|
|
469
|
-
this.updateValue(val);
|
|
470
|
-
}
|
|
471
|
-
this.clearInput();
|
|
472
|
-
this._dehighlightOption();
|
|
473
|
-
setTimeout(() => {
|
|
474
|
-
this.focusInput();
|
|
475
|
-
}, 0);
|
|
476
|
-
}
|
|
477
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
478
|
-
setDisabledState(disabled) { }
|
|
479
|
-
onBlur() {
|
|
480
|
-
if (!this.isOpened) {
|
|
481
|
-
this._confirmInput(this.inputText || '', false);
|
|
482
|
-
}
|
|
483
|
-
this._checkErrors();
|
|
484
|
-
this.blurred.emit();
|
|
485
|
-
}
|
|
486
|
-
onFocus() {
|
|
487
|
-
this._control?.control?.markAsTouched();
|
|
488
|
-
this.focused.emit();
|
|
489
|
-
}
|
|
490
|
-
isActive() {
|
|
491
|
-
return (this.isOpened ||
|
|
492
|
-
this.document.activeElement === this.autocompleteInput?.nativeElement);
|
|
493
|
-
}
|
|
494
|
-
onBeforeOptionsHidden(reason) {
|
|
495
|
-
if ((this.loading || this.validating) &&
|
|
496
|
-
reason !== CpsMenuHideReason.KEYDOWN_ESCAPE) {
|
|
497
|
-
return;
|
|
498
|
-
}
|
|
499
|
-
if ([CpsMenuHideReason.SCROLL, CpsMenuHideReason.RESIZE].includes(reason)) {
|
|
500
|
-
this._toggleOptions(false);
|
|
501
|
-
return;
|
|
502
|
-
}
|
|
503
|
-
this._confirmInput(this.inputText || '', false);
|
|
504
|
-
this._closeAndClear();
|
|
505
|
-
this.onBlur();
|
|
506
|
-
}
|
|
507
|
-
onBoxClick() {
|
|
508
|
-
if (!this.multiple) {
|
|
509
|
-
this.activeSingle = true;
|
|
510
|
-
if (!this.inputText)
|
|
511
|
-
this.inputText = this._getValueLabel();
|
|
512
|
-
if (!this.isOpened)
|
|
513
|
-
this.filteredOptions = this.options;
|
|
514
|
-
}
|
|
515
|
-
this._dehighlightOption();
|
|
516
|
-
setTimeout(() => {
|
|
517
|
-
this.focus();
|
|
518
|
-
});
|
|
519
|
-
}
|
|
520
|
-
onContainerKeyDown(event) {
|
|
521
|
-
const code = event.keyCode;
|
|
522
|
-
// enter
|
|
523
|
-
if (code === 13) {
|
|
524
|
-
let idx = this.optionHighlightedIndex;
|
|
525
|
-
if (this.multiple &&
|
|
526
|
-
this.selectAll &&
|
|
527
|
-
this.filteredOptions.length === this.options.length &&
|
|
528
|
-
!this.virtualScroll) {
|
|
529
|
-
if (idx === 0) {
|
|
530
|
-
this.toggleAll();
|
|
531
|
-
return;
|
|
532
|
-
}
|
|
533
|
-
else
|
|
534
|
-
idx--;
|
|
535
|
-
}
|
|
536
|
-
const option = this.filteredOptions[idx];
|
|
537
|
-
if (this.filteredOptions.length !== this.options.length)
|
|
538
|
-
this._dehighlightOption();
|
|
539
|
-
this._clickOption(option);
|
|
540
|
-
}
|
|
541
|
-
// vertical arrows
|
|
542
|
-
else if ([38, 40].includes(code)) {
|
|
543
|
-
// Arrows navigation doesn't work with virtual scroll
|
|
544
|
-
if (!this.virtualScroll)
|
|
545
|
-
this._navigateOptionsByArrows(code === 38);
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
onInputKeyDown(event) {
|
|
549
|
-
const code = event.keyCode;
|
|
550
|
-
// backspace
|
|
551
|
-
if (code === 8) {
|
|
552
|
-
this._removeLastValue();
|
|
553
|
-
event.stopPropagation();
|
|
554
|
-
}
|
|
555
|
-
// enter
|
|
556
|
-
else if (code === 13) {
|
|
557
|
-
if (this.optionHighlightedIndex < 0) {
|
|
558
|
-
this._confirmInput(event?.target?.value || '', true);
|
|
559
|
-
event.stopPropagation();
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
else if ([38, 40].includes(code)) {
|
|
563
|
-
event.preventDefault();
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
onChevronClick(event) {
|
|
567
|
-
event.stopPropagation();
|
|
568
|
-
if (this.isOpened) {
|
|
569
|
-
this._closeAndClear();
|
|
570
|
-
}
|
|
571
|
-
else {
|
|
572
|
-
this.onBoxClick();
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
focusInput() {
|
|
576
|
-
this.autocompleteContainer?.nativeElement?.querySelector('input')?.focus();
|
|
577
|
-
}
|
|
578
|
-
focus() {
|
|
579
|
-
this.focusInput();
|
|
580
|
-
this._toggleOptions(true);
|
|
581
|
-
}
|
|
582
|
-
recalcVirtualListHeight() {
|
|
583
|
-
if (!this.virtualScroll)
|
|
584
|
-
return;
|
|
585
|
-
const currentLen = this.filteredOptions?.length || 0;
|
|
586
|
-
this.virtualListHeight = Math.min(this.virtualScrollItemSize * currentLen, 240);
|
|
587
|
-
}
|
|
588
|
-
isEmptyValue() {
|
|
589
|
-
return (this.value === null ||
|
|
590
|
-
this.value === undefined ||
|
|
591
|
-
(typeof this.value === 'string' && this.value.trim() === '') ||
|
|
592
|
-
Number.isNaN(this.value));
|
|
593
|
-
}
|
|
594
|
-
clearInput() {
|
|
595
|
-
this.filteredOptions = this.options;
|
|
596
|
-
this.inputText = '';
|
|
597
|
-
this.inputTextDebounced = '';
|
|
598
|
-
this._inputChangeSubject$.next('');
|
|
599
|
-
this.activeSingle = false;
|
|
600
|
-
this.recalcVirtualListHeight();
|
|
601
|
-
}
|
|
602
|
-
_getEmptyValue() {
|
|
603
|
-
const option = this.options[this.emptyOptionIndex];
|
|
604
|
-
return !option
|
|
605
|
-
? undefined
|
|
606
|
-
: this.returnObject
|
|
607
|
-
? option
|
|
608
|
-
: option[this.optionValue];
|
|
609
|
-
}
|
|
610
|
-
_toggleOptions(show) {
|
|
611
|
-
if (this.disabled || this.isOpened === show)
|
|
612
|
-
return;
|
|
613
|
-
this.backspaceClickedOnce = false;
|
|
614
|
-
if (typeof show === 'boolean') {
|
|
615
|
-
if (show) {
|
|
616
|
-
this.optionsMenu.show({
|
|
617
|
-
target: this.autocompleteBox.nativeElement
|
|
618
|
-
});
|
|
619
|
-
}
|
|
620
|
-
else {
|
|
621
|
-
this.optionsMenu.hide();
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
else {
|
|
625
|
-
this.optionsMenu.toggle({
|
|
626
|
-
target: this.autocompleteBox.nativeElement
|
|
627
|
-
});
|
|
628
|
-
}
|
|
629
|
-
this.isOpened = this.optionsMenu.isVisible();
|
|
630
|
-
setTimeout(() => {
|
|
631
|
-
if (this.isOpened && this.filteredOptions.length > 0) {
|
|
632
|
-
this.recalcVirtualListHeight();
|
|
633
|
-
const selected = this.optionsList.nativeElement.querySelector('.selected');
|
|
634
|
-
if (selected) {
|
|
635
|
-
selected.scrollIntoView({
|
|
636
|
-
behavior: 'instant',
|
|
637
|
-
block: 'nearest',
|
|
638
|
-
inline: 'center'
|
|
639
|
-
});
|
|
640
|
-
}
|
|
641
|
-
else if (this.virtualScroll && !this.isEmptyValue()) {
|
|
642
|
-
let v;
|
|
643
|
-
if (this.multiple) {
|
|
644
|
-
if (this.value.length > 0) {
|
|
645
|
-
v = this.value[0];
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
else
|
|
649
|
-
v = this.value;
|
|
650
|
-
const idx = this.filteredOptions.findIndex((o) => isEqual(o, v));
|
|
651
|
-
if (idx >= 0)
|
|
652
|
-
this.virtualList.scrollToIndex(idx);
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
});
|
|
656
|
-
}
|
|
657
|
-
_clickOption(option) {
|
|
658
|
-
this.select(option, false, true, this.multiple);
|
|
659
|
-
if (!this.multiple) {
|
|
660
|
-
// Only close options menu if not loading or validating
|
|
661
|
-
if (!this.loading && !this.validating) {
|
|
662
|
-
this._toggleOptions(false);
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
_checkErrors() {
|
|
667
|
-
const errors = this._control?.errors;
|
|
668
|
-
if (!this._control?.control?.touched || !errors) {
|
|
669
|
-
this.error = '';
|
|
670
|
-
return;
|
|
671
|
-
}
|
|
672
|
-
if ('required' in errors) {
|
|
673
|
-
this.error = 'Field is required';
|
|
674
|
-
return;
|
|
675
|
-
}
|
|
676
|
-
const errArr = Object.values(errors);
|
|
677
|
-
if (errArr.length < 1) {
|
|
678
|
-
this.error = '';
|
|
679
|
-
return;
|
|
680
|
-
}
|
|
681
|
-
const message = errArr.find((msg) => typeof msg === 'string');
|
|
682
|
-
this.error = message || 'Unknown error';
|
|
683
|
-
}
|
|
684
|
-
updateValue(value) {
|
|
685
|
-
if (!this.multiple && isEqual(value, this.value))
|
|
686
|
-
return;
|
|
687
|
-
this.writeValue(value);
|
|
688
|
-
this.onChange(value);
|
|
689
|
-
this.valueChanged.emit(value);
|
|
690
|
-
}
|
|
691
|
-
_getValueLabel() {
|
|
692
|
-
return !this.isEmptyValue()
|
|
693
|
-
? this.returnObject
|
|
694
|
-
? this.value[this.optionLabel]
|
|
695
|
-
: this._labelByValue.transform(this.value, this.options, this.optionValue, this.optionLabel)
|
|
696
|
-
: '';
|
|
697
|
-
}
|
|
698
|
-
_closeAndClear() {
|
|
699
|
-
this.clearInput();
|
|
700
|
-
this._toggleOptions(false);
|
|
701
|
-
this._dehighlightOption();
|
|
702
|
-
}
|
|
703
|
-
_getHTMLOptions() {
|
|
704
|
-
return (this.optionsList.nativeElement.querySelectorAll('.cps-autocomplete-options-option') || []);
|
|
705
|
-
}
|
|
706
|
-
_dehighlightOption(el) {
|
|
707
|
-
if (el)
|
|
708
|
-
el.classList.remove('highlighten');
|
|
709
|
-
else {
|
|
710
|
-
if (this.optionHighlightedIndex < 0)
|
|
711
|
-
return;
|
|
712
|
-
const optionItems = this._getHTMLOptions();
|
|
713
|
-
optionItems[this.optionHighlightedIndex].classList.remove('highlighten');
|
|
714
|
-
this.optionHighlightedIndex = -1;
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
_highlightOption(el) {
|
|
718
|
-
el.classList.add('highlighten');
|
|
719
|
-
const parent = el.parentElement;
|
|
720
|
-
if (!parent)
|
|
721
|
-
return;
|
|
722
|
-
const parentRect = parent.getBoundingClientRect();
|
|
723
|
-
const elRect = el.getBoundingClientRect();
|
|
724
|
-
if (elRect.top < parentRect.top || elRect.bottom > parentRect.bottom) {
|
|
725
|
-
el.scrollIntoView({
|
|
726
|
-
block: 'nearest',
|
|
727
|
-
inline: 'center'
|
|
728
|
-
});
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
_navigateOptionsByArrows(up) {
|
|
732
|
-
if (!this.isOpened)
|
|
733
|
-
return;
|
|
734
|
-
const optionItems = this._getHTMLOptions();
|
|
735
|
-
const len = optionItems.length;
|
|
736
|
-
if (len < 1)
|
|
737
|
-
return;
|
|
738
|
-
if (len === 1) {
|
|
739
|
-
this.optionHighlightedIndex = 0;
|
|
740
|
-
this._highlightOption(optionItems[0]);
|
|
741
|
-
return;
|
|
742
|
-
}
|
|
743
|
-
if (up) {
|
|
744
|
-
this._dehighlightOption(optionItems[this.optionHighlightedIndex]);
|
|
745
|
-
this.optionHighlightedIndex =
|
|
746
|
-
this.optionHighlightedIndex < 1
|
|
747
|
-
? len - 1
|
|
748
|
-
: this.optionHighlightedIndex - 1;
|
|
749
|
-
this._highlightOption(optionItems[this.optionHighlightedIndex]);
|
|
750
|
-
}
|
|
751
|
-
else {
|
|
752
|
-
this._dehighlightOption(optionItems[this.optionHighlightedIndex]);
|
|
753
|
-
this.optionHighlightedIndex = [-1, len - 1].includes(this.optionHighlightedIndex)
|
|
754
|
-
? 0
|
|
755
|
-
: this.optionHighlightedIndex + 1;
|
|
756
|
-
this._highlightOption(optionItems[this.optionHighlightedIndex]);
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
_confirmInput(searchVal, needFocusInput) {
|
|
760
|
-
if (!this.isOpened)
|
|
761
|
-
return;
|
|
762
|
-
searchVal = searchVal.toLowerCase();
|
|
763
|
-
if (!searchVal) {
|
|
764
|
-
if (this.multiple)
|
|
765
|
-
return;
|
|
766
|
-
// Only reset the value if the inputText was changed by the user
|
|
767
|
-
if (this.inputText !== this._getValueLabel()) {
|
|
768
|
-
this.updateValue(this._getEmptyValue());
|
|
769
|
-
}
|
|
770
|
-
this.cdRef.detectChanges();
|
|
771
|
-
this._closeAndClear();
|
|
772
|
-
return;
|
|
773
|
-
}
|
|
774
|
-
const found = this.filteredOptions.find((o) => o[this.optionLabel].toLowerCase() === searchVal);
|
|
775
|
-
if (found) {
|
|
776
|
-
this.select(found, false, true, needFocusInput);
|
|
777
|
-
this.cdRef.detectChanges();
|
|
778
|
-
this._toggleOptions(this.multiple);
|
|
779
|
-
}
|
|
780
|
-
else {
|
|
781
|
-
if (!this.multiple) {
|
|
782
|
-
if (this.isTimePickerField && this.filteredOptions.length > 0) {
|
|
783
|
-
this.select(this.filteredOptions[0], false, false, needFocusInput);
|
|
784
|
-
this._toggleOptions(false);
|
|
785
|
-
}
|
|
786
|
-
this.inputText = this._getValueLabel();
|
|
787
|
-
this.filteredOptions = this.options;
|
|
788
|
-
return;
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
this.clearInput();
|
|
792
|
-
}
|
|
793
|
-
_removeLastValue() {
|
|
794
|
-
if (!this.multiple || this.inputText)
|
|
795
|
-
return;
|
|
796
|
-
if (this.value?.length) {
|
|
797
|
-
if (this.backspaceClickedOnce) {
|
|
798
|
-
this.updateValue(this.value.filter((v, index) => index !== this.value.length - 1));
|
|
799
|
-
this.backspaceClickedOnce = false;
|
|
800
|
-
}
|
|
801
|
-
else
|
|
802
|
-
this.backspaceClickedOnce = true;
|
|
803
|
-
}
|
|
804
|
-
else
|
|
805
|
-
this.backspaceClickedOnce = false;
|
|
806
|
-
setTimeout(() => {
|
|
807
|
-
this.focusInput();
|
|
808
|
-
}, 0);
|
|
809
|
-
}
|
|
810
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CpsAutocompleteComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i2.LabelByValuePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
811
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: CpsAutocompleteComponent, isStandalone: true, selector: "cps-autocomplete", inputs: { label: "label", placeholder: "placeholder", hint: "hint", returnObject: "returnObject", multiple: "multiple", disabled: "disabled", width: "width", selectAll: "selectAll", showChevron: "showChevron", withOptionsAliases: "withOptionsAliases", useOptionsAliasesWhenNoMatch: "useOptionsAliasesWhenNoMatch", optionAlias: "optionAlias", chips: "chips", closableChips: "closableChips", clearable: "clearable", openOnClear: "openOnClear", keepInitialOrder: "keepInitialOrder", optionLabel: "optionLabel", optionValue: "optionValue", optionInfo: "optionInfo", hideDetails: "hideDetails", persistentClear: "persistentClear", prefixIcon: "prefixIcon", prefixIconSize: "prefixIconSize", loading: "loading", loadingMessage: "loadingMessage", showLoadingMessage: "showLoadingMessage", emptyMessage: "emptyMessage", showEmptyMessage: "showEmptyMessage", virtualScroll: "virtualScroll", numToleratedItems: "numToleratedItems", externalError: "externalError", infoTooltip: "infoTooltip", infoTooltipClass: "infoTooltipClass", infoTooltipMaxWidth: "infoTooltipMaxWidth", infoTooltipPersistent: "infoTooltipPersistent", infoTooltipPosition: "infoTooltipPosition", appearance: "appearance", emptyOptionIndex: "emptyOptionIndex", inputChangeDebounceTime: "inputChangeDebounceTime", validating: "validating", _value: ["value", "_value"], options: "options" }, outputs: { valueChanged: "valueChanged", inputChanged: "inputChanged", focused: "focused", blurred: "blurred" }, providers: [LabelByValuePipe, CheckOptionSelectedPipe], viewQueries: [{ propertyName: "autocompleteBox", first: true, predicate: ["autocompleteBox"], descendants: true }, { propertyName: "autocompleteContainer", first: true, predicate: ["autocompleteContainer"], descendants: true }, { propertyName: "virtualList", first: true, predicate: ["virtualList"], descendants: true }, { propertyName: "optionsMenu", first: true, predicate: ["optionsMenu"], descendants: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }, { propertyName: "autocompleteInput", first: true, predicate: ["autocompleteInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-autocomplete\"\n tabindex=\"1\"\n [ngClass]=\"{\n disabled: disabled,\n error: error || externalError,\n active: isActive()\n }\"\n #autocompleteContainer>\n <div class=\"cps-autocomplete-label\" *ngIf=\"label\">\n <label>{{ label }}</label>\n <cps-info-circle\n *ngIf=\"infoTooltip\"\n class=\"cps-autocomplete-label-info-circle\"\n size=\"xsmall\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipContentClass]=\"infoTooltipClass\"\n [tooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [tooltipPersistent]=\"infoTooltipPersistent\"\n [tooltipText]=\"infoTooltip\">\n </cps-info-circle>\n </div>\n <div\n (keydown)=\"onContainerKeyDown($event)\"\n class=\"cps-autocomplete-container\"\n [class.focused]=\"isActive()\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear,\n borderless: appearance === 'borderless',\n underlined: appearance === 'underlined'\n }\">\n <div\n class=\"cps-autocomplete-box\"\n #autocompleteBox\n (mousedown)=\"onBoxClick()\">\n <div class=\"cps-autocomplete-box-area\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [style.color]=\"disabled ? '#9a9595' : null\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-autocomplete-box-items\"\n *ngIf=\"\n (!multiple && !isEmptyValue()) || (value?.length > 0 && multiple);\n else autocompleteInputTemplate\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 autocompleteInputTemplate;\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\n *ngTemplateOutlet=\"\n autocompleteInputTemplate;\n context: {\n inputClass: 'multi-item-input'\n }\n \"></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\n *ngTemplateOutlet=\"\n autocompleteInputTemplate;\n context: {\n inputClass: 'multi-chip-input'\n }\n \"></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 && !isEmptyValue())))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-autocomplete-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear($event)\"></cps-icon>\n </span>\n <span\n *ngIf=\"showChevron\"\n class=\"cps-autocomplete-box-chevron\"\n (mousedown)=\"onChevronClick($event)\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n [color]=\"disabled ? 'text-light' : 'text-dark'\"></cps-icon>\n </span>\n </span>\n </div>\n </div>\n\n <cps-menu\n #optionsMenu\n [withArrow]=\"false\"\n (beforeMenuHidden)=\"onBeforeOptionsHidden($event)\"\n hideTransitionOptions=\"0s linear\"\n containerClass=\"cps-autocomplete-options-menu\">\n <div\n #optionsList\n class=\"cps-autocomplete-options\"\n [ngStyle]=\"{\n width: autocompleteBoxWidth + 'px'\n }\">\n <div\n *ngIf=\"loading && showLoadingMessage\"\n class=\"cps-autocomplete-options-loading\">\n {{ loadingMessage }}\n </div>\n <div\n *ngIf=\"\n showEmptyMessage &&\n filteredOptions.length < 1 &&\n !loading &&\n inputTextDebounced\n \"\n class=\"cps-autocomplete-options-empty\">\n {{ emptyMessage }}\n </div>\n <ng-container *ngIf=\"!virtualScroll && !loading\">\n <div\n class=\"cps-autocomplete-options-option select-all-option\"\n [class.allselected]=\"value?.length === options.length\"\n *ngIf=\"\n multiple &&\n selectAll &&\n filteredOptions.length === options.length &&\n options.length > 1\n \"\n (click)=\"toggleAll()\">\n <span class=\"cps-autocomplete-options-option-left\">\n <span\n *ngIf=\"multiple\"\n class=\"cps-autocomplete-options-option-check\">\n </span>\n <span class=\"cps-autocomplete-options-option-label\"\n >Select all</span\n >\n </span>\n </div>\n <ng-container *ngFor=\"let item of filteredOptions\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"virtualScroll && !loading\">\n <p-virtualScroller\n #virtualList\n [value]=\"filteredOptions\"\n [delay]=\"0\"\n [scrollHeight]=\"virtualListHeight + 'px'\"\n [options]=\"{ numToleratedItems: numToleratedItems }\"\n [itemSize]=\"virtualScrollItemSize\">\n <ng-template pTemplate=\"item\" let-item>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-template>\n </p-virtualScroller>\n </ng-container>\n </div>\n </cps-menu>\n <cps-progress-linear\n *ngIf=\"loading || validating\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"autocomplete-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div\n *ngIf=\"!error && !externalError && !hideDetails\"\n class=\"cps-autocomplete-hint\">\n {{ hint }}\n </div>\n <div\n *ngIf=\"(error || externalError) && !hideDetails\"\n class=\"cps-autocomplete-error\">\n {{ error || externalError }}\n </div>\n</div>\n\n<ng-template\n #autocompleteInputTemplate\n let-inputClass=\"inputClass\"\n let-inputStyle=\"inputStyle\">\n <input\n #autocompleteInput\n class=\"cps-autocomplete-box-input\"\n spellcheck=\"false\"\n [class]=\"inputClass\"\n [style]=\"inputStyle\"\n [placeholder]=\"\n (!multiple && isEmptyValue()) || (value?.length < 1 && multiple)\n ? placeholder\n : ''\n \"\n (input)=\"filterOptions($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n [(ngModel)]=\"inputText\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\" />\n</ng-template>\n\n<ng-template #itemTemplate let-item=\"item\">\n <div\n class=\"cps-autocomplete-options-option\"\n (click)=\"onOptionClick(item)\"\n [class.selected]=\"\n item | checkOptionSelected: value : multiple : returnObject : optionValue\n \">\n <span class=\"cps-autocomplete-options-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-autocomplete-options-option-check\">\n </span>\n <span\n data-cy-id=\"cps-autocomplete-options\"\n class=\"cps-autocomplete-options-option-label\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionLabel] }}</span\n >\n </span>\n\n <span\n class=\"cps-autocomplete-options-option-right\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionInfo] }}</span\n >\n </div>\n</ng-template>\n", styles: [":host{display:flex}:host .cps-autocomplete{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif;font-weight:400;display:grid}:host .cps-autocomplete .cps-autocomplete-container{position:relative}:host .cps-autocomplete .cps-autocomplete-container .autocomplete-progress-bar{position:absolute;bottom:1px;padding:0 1px}:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box{background:#fff!important}:host .cps-autocomplete .cps-autocomplete-container.borderless .cps-autocomplete-box,:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{line-height:1;border:none!important;border-radius:0}:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{border-bottom:1px solid var(--cps-color-line-light)!important}: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.active .cps-autocomplete-box .cps-autocomplete-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-autocomplete .cps-autocomplete-label{align-items:center;display:inline-flex;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem;font-weight:600}:host .cps-autocomplete .cps-autocomplete-label .cps-autocomplete-label-info-circle{margin-left:8px;pointer-events:all}: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:#fff;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;border:1px solid var(--cps-color-line-light);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{min-height:36px;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%;padding-top:3px;padding-bottom:3px;min-height:36px;justify-content:center;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 .multi-chip-input{min-height:30px}:host .cps-autocomplete .cps-autocomplete-box-items .multi-item-input{min-height:28px}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group{display:inline-flex;flex-wrap:wrap;align-items:center}: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);align-items:center;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;cursor:pointer}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron:hover ::ng-deep cps-icon .cps-icon{color:var(--cps-color-calm)!important}:host .cps-autocomplete .cps-autocomplete-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete .cps-autocomplete-error{color:var(--cps-color-error);font-weight:700;font-size:.75rem;min-height:1.125rem;line-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:var(--cps-color-error)!important;background:#fef3f2}:host .about-to-remove{color:var(--cps-color-text-light)}:host .about-to-remove ::ng-deep .cps-chip{background-color:var(--cps-color-bg-mid)}.cps-autocomplete-options{font-family:Source Sans Pro,sans-serif;background:#fff;overflow-x:hidden;max-height:242px;overflow-y:auto}.cps-autocomplete-options .cps-autocomplete-options-empty,.cps-autocomplete-options .cps-autocomplete-options-loading{padding:11px;font-size:16px;cursor:default;color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-autocomplete-options .cps-autocomplete-options-option:hover{background:var(--cps-color-highlight-hover)}.cps-autocomplete-options .cps-autocomplete-options-option-label{color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option-left{display:flex;align-items:center;margin-right:8px}.cps-autocomplete-options .cps-autocomplete-options-option-right{color:var(--cps-color-text-light);text-align:right}.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}.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)}.cps-autocomplete-options .cps-autocomplete-options-option.selected,.cps-autocomplete-options .cps-autocomplete-options-option.allselected{font-weight:600}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-label,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-label{color:var(--cps-color-calm)}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-check,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-check{opacity:1}.cps-autocomplete-options .cps-autocomplete-options-option.selected{background:var(--cps-color-highlight-selected)}.cps-autocomplete-options .cps-autocomplete-options-option.highlighten{background:var(--cps-color-highlight-active)}.cps-autocomplete-options .cps-autocomplete-options-option.selected.highlighten{background:var(--cps-color-highlight-selected-dark)}.cps-autocomplete-options .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}.cps-autocomplete-options ::ng-deep .p-virtualscroller-list.p-scroller{overflow-anchor:none}.cps-autocomplete-options .virtual-row{white-space:nowrap}\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: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsChipComponent, selector: "cps-chip", inputs: ["label", "icon", "iconColor", "iconPosition", "closable", "disabled"], outputs: ["closed"] }, { kind: "component", type: CpsProgressLinearComponent, selector: "cps-progress-linear", inputs: ["width", "height", "color", "bgColor", "opacity", "radius"] }, { kind: "component", type: CpsInfoCircleComponent, selector: "cps-info-circle", inputs: ["size", "tooltipText", "tooltipPosition", "tooltipContentClass", "tooltipMaxWidth", "tooltipPersistent"] }, { kind: "pipe", type: LabelByValuePipe, name: "labelByValue" }, { kind: "pipe", type: CheckOptionSelectedPipe, name: "checkOptionSelected" }, { kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i4.VirtualScroller, selector: "p-virtualScroller", inputs: ["value", "itemSize", "style", "styleClass", "scrollHeight", "lazy", "options", "delay"], outputs: ["onLazyLoad"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: CpsMenuComponent, selector: "cps-menu", inputs: ["header", "items", "withArrow", "compressed", "focusOnShow", "persistent", "containerClass", "showTransitionOptions", "hideTransitionOptions"], outputs: ["menuShown", "menuHidden", "beforeMenuHidden", "contentClicked"] }] }); }
|
|
812
|
-
}
|
|
813
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CpsAutocompleteComponent, decorators: [{
|
|
814
|
-
type: Component,
|
|
815
|
-
args: [{ standalone: true, imports: [
|
|
816
|
-
CommonModule,
|
|
817
|
-
FormsModule,
|
|
818
|
-
CpsIconComponent,
|
|
819
|
-
CpsChipComponent,
|
|
820
|
-
CpsProgressLinearComponent,
|
|
821
|
-
CpsInfoCircleComponent,
|
|
822
|
-
LabelByValuePipe,
|
|
823
|
-
CheckOptionSelectedPipe,
|
|
824
|
-
VirtualScrollerModule,
|
|
825
|
-
CpsMenuComponent
|
|
826
|
-
], providers: [LabelByValuePipe, CheckOptionSelectedPipe], selector: 'cps-autocomplete', template: "<div\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-autocomplete\"\n tabindex=\"1\"\n [ngClass]=\"{\n disabled: disabled,\n error: error || externalError,\n active: isActive()\n }\"\n #autocompleteContainer>\n <div class=\"cps-autocomplete-label\" *ngIf=\"label\">\n <label>{{ label }}</label>\n <cps-info-circle\n *ngIf=\"infoTooltip\"\n class=\"cps-autocomplete-label-info-circle\"\n size=\"xsmall\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipContentClass]=\"infoTooltipClass\"\n [tooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [tooltipPersistent]=\"infoTooltipPersistent\"\n [tooltipText]=\"infoTooltip\">\n </cps-info-circle>\n </div>\n <div\n (keydown)=\"onContainerKeyDown($event)\"\n class=\"cps-autocomplete-container\"\n [class.focused]=\"isActive()\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear,\n borderless: appearance === 'borderless',\n underlined: appearance === 'underlined'\n }\">\n <div\n class=\"cps-autocomplete-box\"\n #autocompleteBox\n (mousedown)=\"onBoxClick()\">\n <div class=\"cps-autocomplete-box-area\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [style.color]=\"disabled ? '#9a9595' : null\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-autocomplete-box-items\"\n *ngIf=\"\n (!multiple && !isEmptyValue()) || (value?.length > 0 && multiple);\n else autocompleteInputTemplate\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 autocompleteInputTemplate;\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\n *ngTemplateOutlet=\"\n autocompleteInputTemplate;\n context: {\n inputClass: 'multi-item-input'\n }\n \"></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\n *ngTemplateOutlet=\"\n autocompleteInputTemplate;\n context: {\n inputClass: 'multi-chip-input'\n }\n \"></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 && !isEmptyValue())))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-autocomplete-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear($event)\"></cps-icon>\n </span>\n <span\n *ngIf=\"showChevron\"\n class=\"cps-autocomplete-box-chevron\"\n (mousedown)=\"onChevronClick($event)\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n [color]=\"disabled ? 'text-light' : 'text-dark'\"></cps-icon>\n </span>\n </span>\n </div>\n </div>\n\n <cps-menu\n #optionsMenu\n [withArrow]=\"false\"\n (beforeMenuHidden)=\"onBeforeOptionsHidden($event)\"\n hideTransitionOptions=\"0s linear\"\n containerClass=\"cps-autocomplete-options-menu\">\n <div\n #optionsList\n class=\"cps-autocomplete-options\"\n [ngStyle]=\"{\n width: autocompleteBoxWidth + 'px'\n }\">\n <div\n *ngIf=\"loading && showLoadingMessage\"\n class=\"cps-autocomplete-options-loading\">\n {{ loadingMessage }}\n </div>\n <div\n *ngIf=\"\n showEmptyMessage &&\n filteredOptions.length < 1 &&\n !loading &&\n inputTextDebounced\n \"\n class=\"cps-autocomplete-options-empty\">\n {{ emptyMessage }}\n </div>\n <ng-container *ngIf=\"!virtualScroll && !loading\">\n <div\n class=\"cps-autocomplete-options-option select-all-option\"\n [class.allselected]=\"value?.length === options.length\"\n *ngIf=\"\n multiple &&\n selectAll &&\n filteredOptions.length === options.length &&\n options.length > 1\n \"\n (click)=\"toggleAll()\">\n <span class=\"cps-autocomplete-options-option-left\">\n <span\n *ngIf=\"multiple\"\n class=\"cps-autocomplete-options-option-check\">\n </span>\n <span class=\"cps-autocomplete-options-option-label\"\n >Select all</span\n >\n </span>\n </div>\n <ng-container *ngFor=\"let item of filteredOptions\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"virtualScroll && !loading\">\n <p-virtualScroller\n #virtualList\n [value]=\"filteredOptions\"\n [delay]=\"0\"\n [scrollHeight]=\"virtualListHeight + 'px'\"\n [options]=\"{ numToleratedItems: numToleratedItems }\"\n [itemSize]=\"virtualScrollItemSize\">\n <ng-template pTemplate=\"item\" let-item>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-template>\n </p-virtualScroller>\n </ng-container>\n </div>\n </cps-menu>\n <cps-progress-linear\n *ngIf=\"loading || validating\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"autocomplete-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div\n *ngIf=\"!error && !externalError && !hideDetails\"\n class=\"cps-autocomplete-hint\">\n {{ hint }}\n </div>\n <div\n *ngIf=\"(error || externalError) && !hideDetails\"\n class=\"cps-autocomplete-error\">\n {{ error || externalError }}\n </div>\n</div>\n\n<ng-template\n #autocompleteInputTemplate\n let-inputClass=\"inputClass\"\n let-inputStyle=\"inputStyle\">\n <input\n #autocompleteInput\n class=\"cps-autocomplete-box-input\"\n spellcheck=\"false\"\n [class]=\"inputClass\"\n [style]=\"inputStyle\"\n [placeholder]=\"\n (!multiple && isEmptyValue()) || (value?.length < 1 && multiple)\n ? placeholder\n : ''\n \"\n (input)=\"filterOptions($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n [(ngModel)]=\"inputText\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\" />\n</ng-template>\n\n<ng-template #itemTemplate let-item=\"item\">\n <div\n class=\"cps-autocomplete-options-option\"\n (click)=\"onOptionClick(item)\"\n [class.selected]=\"\n item | checkOptionSelected: value : multiple : returnObject : optionValue\n \">\n <span class=\"cps-autocomplete-options-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-autocomplete-options-option-check\">\n </span>\n <span\n data-cy-id=\"cps-autocomplete-options\"\n class=\"cps-autocomplete-options-option-label\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionLabel] }}</span\n >\n </span>\n\n <span\n class=\"cps-autocomplete-options-option-right\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionInfo] }}</span\n >\n </div>\n</ng-template>\n", styles: [":host{display:flex}:host .cps-autocomplete{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif;font-weight:400;display:grid}:host .cps-autocomplete .cps-autocomplete-container{position:relative}:host .cps-autocomplete .cps-autocomplete-container .autocomplete-progress-bar{position:absolute;bottom:1px;padding:0 1px}:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box{background:#fff!important}:host .cps-autocomplete .cps-autocomplete-container.borderless .cps-autocomplete-box,:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{line-height:1;border:none!important;border-radius:0}:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{border-bottom:1px solid var(--cps-color-line-light)!important}: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.active .cps-autocomplete-box .cps-autocomplete-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-autocomplete .cps-autocomplete-label{align-items:center;display:inline-flex;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem;font-weight:600}:host .cps-autocomplete .cps-autocomplete-label .cps-autocomplete-label-info-circle{margin-left:8px;pointer-events:all}: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:#fff;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;border:1px solid var(--cps-color-line-light);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{min-height:36px;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%;padding-top:3px;padding-bottom:3px;min-height:36px;justify-content:center;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 .multi-chip-input{min-height:30px}:host .cps-autocomplete .cps-autocomplete-box-items .multi-item-input{min-height:28px}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group{display:inline-flex;flex-wrap:wrap;align-items:center}: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);align-items:center;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;cursor:pointer}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron:hover ::ng-deep cps-icon .cps-icon{color:var(--cps-color-calm)!important}:host .cps-autocomplete .cps-autocomplete-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete .cps-autocomplete-error{color:var(--cps-color-error);font-weight:700;font-size:.75rem;min-height:1.125rem;line-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:var(--cps-color-error)!important;background:#fef3f2}:host .about-to-remove{color:var(--cps-color-text-light)}:host .about-to-remove ::ng-deep .cps-chip{background-color:var(--cps-color-bg-mid)}.cps-autocomplete-options{font-family:Source Sans Pro,sans-serif;background:#fff;overflow-x:hidden;max-height:242px;overflow-y:auto}.cps-autocomplete-options .cps-autocomplete-options-empty,.cps-autocomplete-options .cps-autocomplete-options-loading{padding:11px;font-size:16px;cursor:default;color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-autocomplete-options .cps-autocomplete-options-option:hover{background:var(--cps-color-highlight-hover)}.cps-autocomplete-options .cps-autocomplete-options-option-label{color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option-left{display:flex;align-items:center;margin-right:8px}.cps-autocomplete-options .cps-autocomplete-options-option-right{color:var(--cps-color-text-light);text-align:right}.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}.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)}.cps-autocomplete-options .cps-autocomplete-options-option.selected,.cps-autocomplete-options .cps-autocomplete-options-option.allselected{font-weight:600}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-label,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-label{color:var(--cps-color-calm)}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-check,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-check{opacity:1}.cps-autocomplete-options .cps-autocomplete-options-option.selected{background:var(--cps-color-highlight-selected)}.cps-autocomplete-options .cps-autocomplete-options-option.highlighten{background:var(--cps-color-highlight-active)}.cps-autocomplete-options .cps-autocomplete-options-option.selected.highlighten{background:var(--cps-color-highlight-selected-dark)}.cps-autocomplete-options .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}.cps-autocomplete-options ::ng-deep .p-virtualscroller-list.p-scroller{overflow-anchor:none}.cps-autocomplete-options .virtual-row{white-space:nowrap}\n"] }]
|
|
827
|
-
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
828
|
-
type: Self
|
|
829
|
-
}, {
|
|
830
|
-
type: Optional
|
|
831
|
-
}] }, { type: Document, decorators: [{
|
|
832
|
-
type: Inject,
|
|
833
|
-
args: [DOCUMENT]
|
|
834
|
-
}] }, { type: i0.ChangeDetectorRef }, { type: i2.LabelByValuePipe }], propDecorators: { label: [{
|
|
835
|
-
type: Input
|
|
836
|
-
}], placeholder: [{
|
|
837
|
-
type: Input
|
|
838
|
-
}], hint: [{
|
|
839
|
-
type: Input
|
|
840
|
-
}], returnObject: [{
|
|
841
|
-
type: Input
|
|
842
|
-
}], multiple: [{
|
|
843
|
-
type: Input
|
|
844
|
-
}], disabled: [{
|
|
845
|
-
type: Input
|
|
846
|
-
}], width: [{
|
|
847
|
-
type: Input
|
|
848
|
-
}], selectAll: [{
|
|
849
|
-
type: Input
|
|
850
|
-
}], showChevron: [{
|
|
851
|
-
type: Input
|
|
852
|
-
}], withOptionsAliases: [{
|
|
853
|
-
type: Input
|
|
854
|
-
}], useOptionsAliasesWhenNoMatch: [{
|
|
855
|
-
type: Input
|
|
856
|
-
}], optionAlias: [{
|
|
857
|
-
type: Input
|
|
858
|
-
}], chips: [{
|
|
859
|
-
type: Input
|
|
860
|
-
}], closableChips: [{
|
|
861
|
-
type: Input
|
|
862
|
-
}], clearable: [{
|
|
863
|
-
type: Input
|
|
864
|
-
}], openOnClear: [{
|
|
865
|
-
type: Input
|
|
866
|
-
}], keepInitialOrder: [{
|
|
867
|
-
type: Input
|
|
868
|
-
}], optionLabel: [{
|
|
869
|
-
type: Input
|
|
870
|
-
}], optionValue: [{
|
|
871
|
-
type: Input
|
|
872
|
-
}], optionInfo: [{
|
|
873
|
-
type: Input
|
|
874
|
-
}], hideDetails: [{
|
|
875
|
-
type: Input
|
|
876
|
-
}], persistentClear: [{
|
|
877
|
-
type: Input
|
|
878
|
-
}], prefixIcon: [{
|
|
879
|
-
type: Input
|
|
880
|
-
}], prefixIconSize: [{
|
|
881
|
-
type: Input
|
|
882
|
-
}], loading: [{
|
|
883
|
-
type: Input
|
|
884
|
-
}], loadingMessage: [{
|
|
885
|
-
type: Input
|
|
886
|
-
}], showLoadingMessage: [{
|
|
887
|
-
type: Input
|
|
888
|
-
}], emptyMessage: [{
|
|
889
|
-
type: Input
|
|
890
|
-
}], showEmptyMessage: [{
|
|
891
|
-
type: Input
|
|
892
|
-
}], virtualScroll: [{
|
|
893
|
-
type: Input
|
|
894
|
-
}], numToleratedItems: [{
|
|
895
|
-
type: Input
|
|
896
|
-
}], externalError: [{
|
|
897
|
-
type: Input
|
|
898
|
-
}], infoTooltip: [{
|
|
899
|
-
type: Input
|
|
900
|
-
}], infoTooltipClass: [{
|
|
901
|
-
type: Input
|
|
902
|
-
}], infoTooltipMaxWidth: [{
|
|
903
|
-
type: Input
|
|
904
|
-
}], infoTooltipPersistent: [{
|
|
905
|
-
type: Input
|
|
906
|
-
}], infoTooltipPosition: [{
|
|
907
|
-
type: Input
|
|
908
|
-
}], appearance: [{
|
|
909
|
-
type: Input
|
|
910
|
-
}], emptyOptionIndex: [{
|
|
911
|
-
type: Input
|
|
912
|
-
}], inputChangeDebounceTime: [{
|
|
913
|
-
type: Input
|
|
914
|
-
}], validating: [{
|
|
915
|
-
type: Input
|
|
916
|
-
}], _value: [{
|
|
917
|
-
type: Input,
|
|
918
|
-
args: ['value']
|
|
919
|
-
}], options: [{
|
|
920
|
-
type: Input
|
|
921
|
-
}], valueChanged: [{
|
|
922
|
-
type: Output
|
|
923
|
-
}], inputChanged: [{
|
|
924
|
-
type: Output
|
|
925
|
-
}], focused: [{
|
|
926
|
-
type: Output
|
|
927
|
-
}], blurred: [{
|
|
928
|
-
type: Output
|
|
929
|
-
}], autocompleteBox: [{
|
|
930
|
-
type: ViewChild,
|
|
931
|
-
args: ['autocompleteBox']
|
|
932
|
-
}], autocompleteContainer: [{
|
|
933
|
-
type: ViewChild,
|
|
934
|
-
args: ['autocompleteContainer']
|
|
935
|
-
}], virtualList: [{
|
|
936
|
-
type: ViewChild,
|
|
937
|
-
args: ['virtualList']
|
|
938
|
-
}], optionsMenu: [{
|
|
939
|
-
type: ViewChild,
|
|
940
|
-
args: ['optionsMenu']
|
|
941
|
-
}], optionsList: [{
|
|
942
|
-
type: ViewChild,
|
|
943
|
-
args: ['optionsList']
|
|
944
|
-
}], autocompleteInput: [{
|
|
945
|
-
type: ViewChild,
|
|
946
|
-
args: ['autocompleteInput']
|
|
947
|
-
}] } });
|
|
948
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9jcHMtYXV0b2NvbXBsZXRlL2Nwcy1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLWF1dG9jb21wbGV0ZS9jcHMtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFFSixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFDTCxnQkFBZ0IsRUFHakIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxp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V0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWE7Z0JBSXhCLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxhQUFhO2dCQUl4QixpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb252ZXJ0U2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVybmFsL3NpemUtdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ3BzSWNvbkNvbXBvbmVudCxcbiAgSWNvblR5cGUsXG4gIGljb25TaXplVHlwZVxufSBmcm9tICcuLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzQ2hpcENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1jaGlwL2Nwcy1jaGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNQcm9ncmVzc0xpbmVhckNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1wcm9ncmVzcy1saW5lYXIvY3BzLXByb2dyZXNzLWxpbmVhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1pbmZvLWNpcmNsZS9jcHMtaW5mby1jaXJjbGUuY29tcG9uZW50JztcbmltcG9ydCB7IExhYmVsQnlWYWx1ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9pbnRlcm5hbC9sYWJlbC1ieS12YWx1ZS5waXBlJztcbmltcG9ydCB7IENoZWNrT3B0aW9uU2VsZWN0ZWRQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvaW50ZXJuYWwvY2hlY2stb3B0aW9uLXNlbGVjdGVkLnBpcGUnO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBWaXJ0dWFsU2Nyb2xsZXIsXG4gIFZpcnR1YWxTY3JvbGxlck1vZHVsZVxufSBmcm9tICdwcmltZW5nL3ZpcnR1YWxzY3JvbGxlcic7XG5pbXBvcnQgeyBDcHNUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Nwcy10b29sdGlwL2Nwcy10b29sdGlwLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBDcHNNZW51Q29tcG9uZW50LFxuICBDcHNNZW51SGlkZVJlYXNvblxufSBmcm9tICcuLi9jcHMtbWVudS9jcHMtbWVudS5jb21wb25lbnQnO1xuXG4vKipcbiAqIENwc0F1dG9jb21wbGV0ZUFwcGVhcmFuY2VUeXBlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBib3JkZXIgb2YgdGhlIGF1dG9jb21wbGV0ZSBpbnB1dC5cbiAqIEBncm91cCBUeXBlc1xuICovXG5leHBvcnQgdHlwZSBDcHNBdXRvY29tcGxldGVBcHBlYXJhbmNlVHlwZSA9XG4gIHwgJ291dGxpbmVkJ1xuICB8ICd1bmRlcmxpbmVkJ1xuICB8ICdib3JkZXJsZXNzJztcblxuLyoqXG4gKiBDcHNBdXRvY29tcGxldGVDb21wb25lbnQgaXMgYW4gaW5wdXQgY29tcG9uZW50IHRoYXQgcHJvdmlkZXMgcmVhbC10aW1lIHN1Z2dlc3Rpb25zIHdoZW4gYmVpbmcgdHlwZWQuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc0NoaXBDb21wb25lbnQsXG4gICAgQ3BzUHJvZ3Jlc3NMaW5lYXJDb21wb25lbnQsXG4gICAgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudCxcbiAgICBMYWJlbEJ5VmFsdWVQaXBlLFxuICAgIENoZWNrT3B0aW9uU2VsZWN0ZWRQaXBlLFxuICAgIFZpcnR1YWxTY3JvbGxlck1vZHVsZSxcbiAgICBDcHNNZW51Q29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW0xhYmVsQnlWYWx1ZVBpcGUsIENoZWNrT3B0aW9uU2VsZWN0ZWRQaXBlXSxcbiAgc2VsZWN0b3I6ICdjcHMtYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3BzQXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIExhYmVsIG9mIHRoZSBhdXRvY29tcGxldGUgY29tcG9uZW50LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG5cbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHRleHQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnUGxlYXNlIGVudGVyJztcblxuICAvKipcbiAgICogQm90dG9tIGhpbnQgdGV4dC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBoaW50ID0gJyc7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9iamVjdCBkaXJlY3RseSByYXRoZXIgdGhhbiB0aGUgdmFsdWUgc3BlY2lmaWVkIHdpdGggb3B0aW9uVmFsdWUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcmV0dXJuT2JqZWN0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGlmIG11bHRpcGxlIHZhbHVlcyBjYW4gYmUgc2VsZWN0ZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGF1dG9jb21wbGV0ZSBpcyBkaXNhYmxlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgYXV0b2NvbXBsZXRlIGNvbXBvbmVudCwgYSBudW1iZXIgZGVub3RpbmcgcGl4ZWxzIG9yIGEgc3RyaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnMTAwJSc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbiBmb3Igc2VsZWN0aW5nIGFsbCBlbGVtZW50cy4gRG9lc24ndCB3b3JrIHdpdGggdmlydHVhbCBzY3JvbGwuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0QWxsID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjaGV2cm9uIGljb24gc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93Q2hldnJvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgb3B0aW9ucyBzaG91bGQgYmUgZmlsdGVyZWQgYnkgYWxpYXNlcyBpbiBhZGRpdGlvbiB0byBsYWJlbHMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgd2l0aE9wdGlvbnNBbGlhc2VzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgb3B0aW9ucyBzaG91bGQgYmUgZmlsdGVyZWQgYnkgYWxpYXNlcyBpbiBhZGRpdGlvbiB0byBsYWJlbHMgb25seSB3aGVuIG5vIGxhYmVsIG1hdGNoIGlzIGZvdW5kLiBXb3JrcyBvbmx5IElmIHdpdGhPcHRpb25zQWxpYXNlcyBpcyB0cnVlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHVzZU9wdGlvbnNBbGlhc2VzV2hlbk5vTWF0Y2ggPSBmYWxzZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgYWxpYXMgZmllbGQgb2YgYW4gb3B0aW9uLiBOZWVkZWQgb25seSBpZiB3aXRoT3B0aW9uc0FsaWFzZXMgaXMgdHJ1ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25BbGlhcyA9ICdhbGlhcyc7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2VsZWN0aW5nIGVsZW1lbnRzLCB0aGV5IHdpbGwgYXBwZWFyIGluIGEgZm9ybSBvZiBhIGNoaXAuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY2hpcHMgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNoaXBzIGNhbiBiZSBkaXJlY3RseSByZW1vdmVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNsb3NhYmxlQ2hpcHMgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgY2xlYXIgaWNvbiBpcyBkaXNwbGF5ZWQgdG8gY2xlYXIgdGhlIHZhbHVlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRyb3Bkb3duIGxpc3Qgc2hvdWxkIG9wZW4gb24gY2xlYXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgb3Blbk9uQ2xlYXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJZiBtdWx0aXBsZSwgZGV0ZXJtaW5lcyB3aGV0aGVyIHNlbGVjdGVkIG9wdGlvbnMgc2hvdWxkIGJlIG9yZGVyZWQgYWNjb3JkaW5nIHRvIHRoZSBpbml0aWFsIG9yZGVyIG9mIHRoZSBvcHRpb25zLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGtlZXBJbml0aWFsT3JkZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgbGFiZWwgZmllbGQgb2YgYW4gb3B0aW9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbkxhYmVsID0gJ2xhYmVsJztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgdmFsdWUgZmllbGQgb2YgYW4gb3B0aW9uLiBOZWVkZWQgb25seSBpZiByZXR1cm5PYmplY3QgcHJvcCBpcyBmYWxzZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25WYWx1ZSA9ICd2YWx1ZSc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGluZm8gZmllbGQgb2YgYW4gb3B0aW9uLCBzaG93cyB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0ZXh0LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbkluZm8gPSAnaW5mbyc7XG5cbiAgLyoqXG4gICAqIEhpZGVzIGhpbnQgYW5kIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGhpZGVEZXRhaWxzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgY29tcG9uZW50IHNob3VsZCBoYXZlIHBlcnNpc3RlbnQgY2xlYXIgaWNvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBwZXJzaXN0ZW50Q2xlYXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogSWNvbiBiZWZvcmUgaW5wdXQgdmFsdWUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcHJlZml4SWNvbjogSWNvblR5cGUgPSAnJztcblxuICAvKipcbiAgICogU2l6ZSBvZiBpY29uIGJlZm9yZSBpbnB1dCB2YWx1ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBwcmVmaXhJY29uU2l6ZTogaWNvblNpemVUeXBlID0gJzE4cHgnO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgbG9hZGluZyBiYXIgaXMgZGlzcGxheWVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gb3B0aW9ucyBsaXN0IGlzIGxvYWRpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbG9hZGluZ01lc3NhZ2UgPSAnTG9hZGluZy4uLic7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgbG9hZGluZyBtZXNzYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0xvYWRpbmdNZXNzYWdlID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlcmUgaXMgbm8gZGF0YS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBlbXB0eU1lc3NhZ2UgPSAnTm8gcmVzdWx0cyBmb3VuZCc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZW1wdHkgbWVzc2FnZSBzaG91bGQgYmUgZGlzcGxheWVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dFbXB0eU1lc3NhZ2UgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb25seSB0aGUgZWxlbWVudHMgd2l0aGluIHNjcm9sbGFibGUgYXJlYSBzaG91bGQgYmUgYWRkZWQgaW50byB0aGUgRE9NLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBob3cgbWFueSBhZGRpdGlvbmFsIGVsZW1lbnRzIHRvIGFkZCB0byB0aGUgRE9NIG91dHNpZGUgb2YgdGhlIHZpZXcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbnVtVG9sZXJhdGVkSXRlbXMgPSAxMDtcblxuICAvKipcbiAgICogRXh0ZXJuYWxseSBzZXQgZXJyb3IgbWVzc2FnZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBleHRlcm5hbEVycm9yID0gJyc7XG5cbiAgLyoqXG4gICAqIFdoZW4gaXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZywgYW4gaW5mbyBpY29uIGlzIGRpc3BsYXllZCB0byBzaG93IHRleHQgZm9yIG1vcmUgaW5mby5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcCA9ICcnO1xuXG4gIC8qKlxuICAgKiBJbmZvIHRvb2x0aXAgY2xhc3MgZm9yIHN0eWxpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBDbGFzcyA9ICdjcHMtdG9vbHRpcC1jb250ZW50JztcblxuICAvKipcbiAgICogTWF4IHdpZHRoIG9mIGluZm9Ub29sdGlwIG9mIHR5cGUgbnVtYmVyIGRlbm90aW5nIHBpeGVscyBvciBzdHJpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBNYXhXaWR0aDogbnVtYmVyIHwgc3RyaW5nID0gJzEwMCUnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGluZm9Ub29sdGlwIGlzIHBlcnNpc3RlbnQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBQZXJzaXN0ZW50ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIGluZm9Ub29sdGlwLCBpdCBjYW4gYmUgJ3RvcCcsICdib3R0b20nLCAnbGVmdCcgb3IgJ3JpZ2h0Jy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcFBvc2l0aW9uOiBDcHNUb29sdGlwUG9zaXRpb24gPSAndG9wJztcblxuICAvKipcbiAgICogU3R5bGluZyBhcHBlYXJhbmNlIG9mIGF1dG9jb21wbGV0ZSBpbnB1dCwgaXQgY291bGQgYmUgJ291dGxpbmVkJywgJ3VuZGVybGluZWQnIG9yICdib3JkZXJsZXNzJy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBDcHNBdXRvY29tcGxldGVBcHBlYXJhbmNlVHlwZSA9ICdvdXRsaW5lZCc7XG5cbiAgLyoqXG4gICAqIEluZGV4IG9mIGVtcHR5IHZhbHVlIGluIG9wdGlvbnMgYXJyYXkuIEFwcGxpY2FibGUgb25seSBpZiBtdWx0aXBsZSBpcyBmYWxzZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBlbXB0eU9wdGlvbkluZGV4ID0gLTE7XG5cbiAgLyoqXG4gICAqIERlYm91bmNlIHRpbWUgZm9yIGlucHV0Q2hhbmdlZCBldmVudC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbnB1dENoYW5nZURlYm91bmNlVGltZSA9IDUwMDtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgY3VycmVudGx5IHZhbGlkYXRpbmcgdGhlIHNlbGVjdGVkIHZhbHVlIGFzeW5jaHJvbm91c2x5LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHZhbGlkYXRpbmcgPSBmYWxzZTtcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGF1dG9jb21wbGV0ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoJ3ZhbHVlJykgX3ZhbHVlOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG9wdGlvbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0czogYW55W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0cyB8fCBbXTtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gdmFsdWUgY2hhbmdlLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gdmFsdWUgY2hhbmdlZC5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBmaWVsZCBpbnB1dCBjaGFuZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBpbnB1dCBjaGFuZ2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBpbnB1dENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIGNvbXBvbmVudCByZWNlaXZlcyBmb2N1cy5cbiAgICogQHBhcmFtIHthbnl9XG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSBjb21wb25lbnQgbG9zZXMgZm9jdXMuXG4gICAqIEBwYXJhbSB7YW55fVxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBibHVycmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2F1dG9jb21wbGV0ZUJveCcpXG4gIGF1dG9jb21wbGV0ZUJveCE6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnYXV0b2NvbXBsZXRlQ29udGFpbmVyJylcbiAgYXV0b2NvbXBsZXRlQ29udGFpbmVyITogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCd2aXJ0dWFsTGlzdCcpXG4gIHZpcnR1YWxMaXN0ITogVmlydHVhbFNjcm9sbGVyO1xuXG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnNNZW51JylcbiAgb3B0aW9uc01lbnUhOiBDcHNNZW51Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnNMaXN0JylcbiAgb3B0aW9uc0xpc3QhOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2F1dG9jb21wbGV0ZUlucHV0JylcbiAgYXV0b2NvbXBsZXRlSW5wdXQhOiBFbGVtZW50UmVmO1xuXG4gIGVycm9yID0gJyc7XG4gIGN2dFdpZHRoID0gJyc7XG4gIGlzT3BlbmVkID0gZmFsc2U7XG4gIGlucHV0VGV4dCA9ICcnO1xuICBpbnB1dFRleHREZWJvdW5jZWQgPSAnJztcbiAgZmlsdGVyZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBiYWNrc3BhY2VDbGlja2VkT25jZSA9IGZhbHNlO1xuICBhY3RpdmVTaW5nbGUgPSBmYWxzZTtcbiAgb3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xuXG4gIHZpcnR1YWxMaXN0SGVpZ2h0ID0gMjQwO1xuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSA0MjtcblxuICBhdXRvY29tcGxldGVCb3hXaWR0aCA9IDA7XG4gIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcblxuICBpc1RpbWVQaWNrZXJGaWVsZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2lucHV0Q2hhbmdlU3ViamVjdCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9vcHRpb25zOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29udHJvbDogTmdDb250cm9sLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2xhYmVsQnlWYWx1ZTogTGFiZWxCeVZhbHVlUGlwZVxuICApIHtcbiAgICBpZiAodGhpcy5fY29udHJvbCkge1xuICAgICAgdGhpcy5fY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICBpZiAoZW50cnk/LnRhcmdldClcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveFdpZHRoID0gKGVudHJ5LnRhcmdldCBhcyBhbnkpLm9mZnNldFdpZHRoO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmN2dFdpZHRoID0gY29udmVydFNpemUodGhpcy53aWR0aCk7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgIXRoaXMuX3ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IFtdO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2dldEVtcHR5VmFsdWUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250cm9sPy5zdGF0dXNDaGFuZ2VzXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgID8uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5faW5wdXRDaGFuZ2VTdWJqZWN0JFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmlucHV0Q2hhbmdlRGVib3VuY2VUaW1lKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0RGVib3VuY2VkID0gdGhpcy5pbnB1dFRleHQ7XG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2VkLmVtaXQodmFsKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgdGhpcy5yZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpO1xuICAgIH1cbiAgICBjb25zdCBsb2FkQ2hhbmdlcyA9IGNoYW5nZXMubG9hZGluZztcbiAgICBpZiAoXG4gICAgICBsb2FkQ2hhbmdlcyAmJlxuICAgICAgIWxvYWRDaGFuZ2VzLmZpcnN0Q2hhbmdlICYmXG4gICAgICAhbG9hZENoYW5nZXMuY3VycmVudFZhbHVlICYmXG4gICAgICBsb2FkQ2hhbmdlcy5wcmV2aW91c1ZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLl90b2dnbGVPcHRpb25zKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5hdXRvY29tcGxldGVCb3gubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBzZWxlY3QoXG4gICAgb3B0aW9uOiBhbnksXG4gICAgYnlWYWx1ZTogYm9vbGVhbixcbiAgICBuZWVkQ2xlYXJJbnB1dCA9IHRydWUsXG4gICAgbmVlZEZvY3VzSW5wdXQgPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5OiBhbnlbXSwgdmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBhcnJheT8uc29tZSgoaXRlbSkgPT4gaXNFcXVhbChpdGVtLCB2YWwpKSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG4gICAgY29uc3QgdmFsID0gYnlWYWx1ZVxuICAgICAgPyBvcHRpb25cbiAgICAgIDogdGhpcy5yZXR1cm5PYmplY3RcbiAgICAgICAgPyBvcHRpb25cbiAgICAgICAgOiBvcHRpb25bdGhpcy5vcHRpb25WYWx1ZV07XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGxldCByZXMgPSBbXTtcbiAgICAgIGlmIChpbmNsdWRlcyh0aGlzLnZhbHVlLCB2YWwpKSB7XG4gICAgICAgIHJlcyA9IHRoaXMudmFsdWUuZmlsdGVyKCh2OiBhbnkpID0+ICFpc0VxdWFsKHYsIHZhbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMua2VlcEluaXRpYWxPcmRlcikge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdiA9IHRoaXMucmV0dXJuT2JqZWN0ID8gbyA6IG9bdGhpcy5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMudmFsdWUuc29tZSgodjogYW55KSA9PiBpc0VxdWFsKHYsIG92KSkgfHxcbiAgICAgICAgICAgICAgaXNFcXVhbCh2YWwsIG92KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJlcy5wdXNoKG92KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBvcHQgPSB0aGlzLm9wdGlvbnMuZmluZCgobykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGlzRXF1YWwodmFsLCB0aGlzLnJldHVybk9iamVjdCA/IG8gOiBvW3RoaXMub3B0aW9uVmFsdWVdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAob3B0KSB7XG4gICAgICAgICAgICByZXMgPSBbXG4gICAgICAgICAgICAgIC4uLnRoaXMudmFsdWUsXG4gICAgICAgICAgICAgIHRoaXMucmV0dXJuT2JqZWN0ID8gb3B0IDogb3B0W3RoaXMub3B0aW9uVmFsdWVdXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVWYWx1ZShyZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbCk7XG4gICAgfVxuXG4gICAgaWYgKG5lZWRDbGVhcklucHV0KSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICB9XG4gICAgaWYgKG5lZWRGb2N1c0lucHV0KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogYW55KSB7XG4gICAgdGhpcy5fY2xpY2tPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIHRvZ2dsZUFsbCgpIHtcbiAgICBsZXQgcmVzID0gW107XG4gICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMucmV0dXJuT2JqZWN0KSB7XG4gICAgICAgIHJlcyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgICAgcmVzLnB1c2gob1t0aGlzLm9wdGlvblZhbHVlXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHJlcyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge307XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIGZpbHRlck9wdGlvbnMoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHNlYXJjaFZhbCA9IChldmVudD8udGFyZ2V0Py52YWx1ZSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdGhpcy5pbnB1dFRleHREZWJvdW5jZWQgPSAnJztcbiAgICB0aGlzLl9pbnB1dENoYW5nZVN1YmplY3QkLm5leHQoc2VhcmNoVmFsKTtcblxuICAgIGlmICghdGhpcy5pc09wZW5lZCkge1xuICAgICAgdGhpcy5fdG9nZ2xlT3B0aW9ucyh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24oKTtcbiAgICB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG5cbiAgICBsZXQgX2ZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoKG86IGFueSkgPT4ge1xuICAgICAgbGV0IHJlcyA9IG9bdGhpcy5vcHRpb25MYWJlbF0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWwpO1xuICAgICAgaWYgKFxuICAgICAgICAhcmVzICYmXG4gICAgICAgIHRoaXMud2l0aE9wdGlvbnNBbGlhc2VzICYmXG4gICAgICAgICF0aGlzLnVzZU9wdGlvbnNBbGlhc2VzV2hlbk5vTWF0Y2hcbiAgICAgICkge1xuICAgICAgICByZXMgPSBvW3RoaXMub3B0aW9uQWxpYXNdPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhzZWFyY2hWYWwpIHx8IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcblxuICAgIGlmIChcbiAgICAgIF9maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwICYmXG4gICAgICB0aGlzLndpdGhPcHRpb25zQWxpYXNlcyAmJlxuICAgICAgdGhpcy51c2VPcHRpb25zQWxpYXNlc1doZW5Ob01hdGNoXG4gICAgKSB7XG4gICAgICBfZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcihcbiAgICAgICAgKG86IGFueSkgPT5cbiAgICAgICAgICBvW3RoaXMub3B0aW9uQWxpYXNdPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhzZWFyY2hWYWwpIHx8IGZhbHNlXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gX2ZpbHRlcmVkT3B0aW9ucztcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpO1xuICAgIH0pO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgY2xlYXIoZXZlbnQ/OiBhbnkpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoXG4gICAgICAoIXRoaXMubXVsdGlwbGUgJiYgIXRoaXMuaXNFbXB0eVZhbHVlKCkpIHx8XG4gICAgICAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlPy5sZW5ndGggPiAwKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMub3Blbk9uQ2xlYXIpIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlT3B0aW9ucyh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMubXVsdGlwbGUgPyBbXSA6IHRoaXMuX2dldEVtcHR5VmFsdWUoKTtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsKTtcbiAgICB9XG4gICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24oKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKSB7fVxuXG4gIG9uQmx1cigpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHtcbiAgICAgIHRoaXMuX2NvbmZpcm1JbnB1dCh0aGlzLmlucHV0VGV4dCB8fCAnJywgZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLl9jaGVja0Vycm9ycygpO1xuICAgIHRoaXMuYmx1cnJlZC5lbWl0KCk7XG4gIH1cblxuICBvbkZvY3VzKCkge1xuICAgIHRoaXMuX2NvbnRyb2w/LmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLmZvY3VzZWQuZW1pdCgpO1xuICB9XG5cbiAgaXNBY3RpdmUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNPcGVuZWQgfHxcbiAgICAgIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5hdXRvY29tcGxldGVJbnB1dD8ubmF0aXZlRWxlbWVudFxuICAgICk7XG4gIH1cblxuICBvbkJlZm9yZU9wdGlvbnNIaWRkZW4ocmVhc29uOiBDcHNNZW51SGlkZVJlYXNvbik6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICh0aGlzLmxvYWRpbmcgfHwgdGhpcy52YWxpZGF0aW5nKSAmJlxuICAgICAgcmVhc29uICE9PSBDcHNNZW51SGlkZVJlYXNvbi5LRVlET1dOX0VTQ0FQRVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoW0Nwc01lbnVIaWRlUmVhc29uLlNDUk9MTCwgQ3BzTWVudUhpZGVSZWFzb24uUkVTSVpFXS5pbmNsdWRlcyhyZWFzb24pKSB7XG4gICAgICB0aGlzLl90b2dnbGVPcHRpb25zKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY29uZmlybUlucHV0KHRoaXMuaW5wdXRUZXh0IHx8ICcnLCBmYWxzZSk7XG4gICAgdGhpcy5fY2xvc2VBbmRDbGVhcigpO1xuICAgIHRoaXMub25CbHVyKCk7XG4gIH1cblxuICBvbkJveENsaWNrKCkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5hY3RpdmVTaW5nbGUgPSB0cnVlO1xuICAgICAgaWYgKCF0aGlzLmlucHV0VGV4dCkgdGhpcy5pbnB1dFRleHQgPSB0aGlzLl9nZXRWYWx1ZUxhYmVsKCk7XG4gICAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIH1cbiAgICB0aGlzLl9kZWhpZ2hsaWdodE9wdGlvbigpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH0pO1xuICB9XG5cbiAgb25Db250YWluZXJLZXlEb3duKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICAvLyBlbnRlclxuICAgIGlmIChjb2RlID09PSAxMykge1xuICAgICAgbGV0IGlkeCA9IHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleDtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5tdWx0aXBsZSAmJlxuICAgICAgICB0aGlzLnNlbGVjdEFsbCAmJlxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGggJiZcbiAgICAgICAgIXRoaXMudmlydHVhbFNjcm9sbFxuICAgICAgKSB7XG4gICAgICAgIGlmIChpZHggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZUFsbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlkeC0tO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5maWx0ZXJlZE9wdGlvbnNbaWR4XTtcbiAgICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggIT09IHRoaXMub3B0aW9ucy5sZW5ndGgpXG4gICAgICAgIHRoaXMuX2RlaGlnaGxpZ2h0T3B0aW9uKCk7XG4gICAgICB0aGlzLl9jbGlja09wdGlvbihvcHRpb24pO1xuICAgIH1cbiAgICAvLyB2ZXJ0aWNhbCBhcnJvd3NcbiAgICBlbHNlIGlmIChbMzgsIDQwXS5pbmNsdWRlcyhjb2RlKSkge1xuICAgICAgLy8gQXJyb3dzIG5hdmlnYXRpb24gZG9lc24ndCB3b3JrIHdpdGggdmlydHVhbCBzY3JvbGxcbiAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsKSB0aGlzLl9uYXZpZ2F0ZU9wdGlvbnNCeUFycm93cyhjb2RlID09PSAzOCk7XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dEtleURvd24oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIC8vIGJhY2tzcGFjZVxuICAgIGlmIChjb2RlID09PSA4KSB7XG4gICAgICB0aGlzLl9yZW1vdmVMYXN0VmFsdWUoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICAvLyBlbnRlclxuICAgIGVsc2UgaWYgKGNvZGUgPT09IDEzKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4IDwgMCkge1xuICAgICAgICB0aGlzLl9jb25maXJtSW5wdXQoZXZlbnQ/LnRhcmdldD8udmFsdWUgfHwgJycsIHRydWUpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFszOCwgNDBdLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hldnJvbkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLmlzT3BlbmVkKSB7XG4gICAgICB0aGlzLl9jbG9zZUFuZENsZWFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25Cb3hDbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzSW5wdXQoKSB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk/LmZvY3VzKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB0aGlzLl90b2dnbGVPcHRpb25zKHRydWUpO1xuICB9XG5cbiAgcmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKSB7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwpIHJldHVybjtcbiAgICBjb25zdCBjdXJyZW50TGVuID0gdGhpcy5maWx0ZXJlZE9wdGlvbnM/Lmxlbmd0aCB8fCAwO1xuICAgIHRoaXMudmlydHVhbExpc3RIZWlnaHQgPSBNYXRoLm1pbihcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplICogY3VycmVudExlbixcbiAgICAgIDI0MFxuICAgICk7XG4gIH1cblxuICBpc0VtcHR5VmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudmFsdWUgPT09IG51bGwgfHxcbiAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAnc3RyaW5nJyAmJiB0aGlzLnZhbHVlLnRyaW0oKSA9PT0gJycpIHx8XG4gICAgICBOdW1iZXIuaXNOYU4odGhpcy52YWx1ZSlcbiAgICApO1xuICB9XG5cbiAgY2xlYXJJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xuICAgIHRoaXMuaW5wdXRUZXh0RGVib3VuY2VkID0gJyc7XG4gICAgdGhpcy5faW5wdXRDaGFuZ2VTdWJqZWN0JC5uZXh0KCcnKTtcbiAgICB0aGlzLmFjdGl2ZVNpbmdsZSA9IGZhbHNlO1xuICAgIHRoaXMucmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEVtcHR5VmFsdWUoKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zW3RoaXMuZW1wdHlPcHRpb25JbmRleF07XG4gICAgcmV0dXJuICFvcHRpb25cbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHRoaXMucmV0dXJuT2JqZWN0XG4gICAgICAgID8gb3B0aW9uXG4gICAgICAgIDogb3B0aW9uW3RoaXMub3B0aW9uVmFsdWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9nZ2xlT3B0aW9ucyhzaG93PzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaXNPcGVuZWQgPT09IHNob3cpIHJldHVybjtcblxuICAgIHRoaXMuYmFja3NwYWNlQ2xpY2tlZE9uY2UgPSBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHNob3cgPT09ICdib29sZWFuJykge1xuICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zTWVudS5zaG93KHtcbiAgICAgICAgICB0YXJnZXQ6IHRoaXMuYXV0b2NvbXBsZXRlQm94Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNNZW51LmhpZGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zTWVudS50b2dnbGUoe1xuICAgICAgICB0YXJnZXQ6IHRoaXMuYXV0b2NvbXBsZXRlQm94Lm5hdGl2ZUVsZW1lbnRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuaXNPcGVuZWQgPSB0aGlzLm9wdGlvbnNNZW51LmlzVmlzaWJsZSgpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc09wZW5lZCAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMucmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zTGlzdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWxlY3RlZCcpO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICBzZWxlY3RlZC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgICBiZWhhdmlvcjogJ2luc3RhbnQnLFxuICAgICAgICAgICAgYmxvY2s6ICduZWFyZXN0JyxcbiAgICAgICAgICAgIGlubGluZTogJ2NlbnRlcidcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwgJiYgIXRoaXMuaXNFbXB0eVZhbHVlKCkpIHtcbiAgICAgICAgICBsZXQgdjogYW55O1xuICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHYgPSB0aGlzLnZhbHVlWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB2ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgoKG8pID0+IGlzRXF1YWwobywgdikpO1xuICAgICAgICAgIGlmIChpZHggPj0gMCkgdGhpcy52aXJ0dWFsTGlzdC5zY3JvbGxUb0luZGV4KGlkeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsaWNrT3B0aW9uKG9wdGlvbjogYW55KSB7XG4gICAgdGhpcy5zZWxlY3Qob3B0aW9uLCBmYWxzZSwgdHJ1ZSwgdGhpcy5tdWx0aXBsZSk7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAvLyBPbmx5IGNsb3NlIG9wdGlvbnMgbWVudSBpZiBub3QgbG9hZGluZyBvciB2YWxpZGF0aW5nXG4gICAgICBpZiAoIXRoaXMubG9hZGluZyAmJiAhdGhpcy52YWxpZGF0aW5nKSB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnMoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRXJyb3JzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuX2NvbnRyb2w/LmVycm9ycztcblxuICAgIGlmICghdGhpcy5fY29udHJvbD8uY29udHJvbD8udG91Y2hlZCB8fCAhZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCdyZXF1aXJlZCcgaW4gZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJ0ZpZWxkIGlzIHJlcXVpcmVkJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJBcnIgPSBPYmplY3QudmFsdWVzKGVycm9ycyk7XG4gICAgaWYgKGVyckFyci5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJBcnIuZmluZCgobXNnKSA9PiB0eXBlb2YgbXNnID09PSAnc3RyaW5nJyk7XG5cbiAgICB0aGlzLmVycm9yID0gbWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcic7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgaXNFcXVhbCh2YWx1ZSwgdGhpcy52YWx1ZSkpIHJldHVybjtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VmFsdWVMYWJlbCgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNFbXB0eVZhbHVlKClcbiAgICAgID8gdGhpcy5yZXR1cm5PYmplY3RcbiAgICAgICAgPyB0aGlzLnZhbHVlW3RoaXMub3B0aW9uTGFiZWxdXG4gICAgICAgIDogdGhpcy5fbGFiZWxCeVZhbHVlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIHRoaXMudmFsdWUsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLm9wdGlvblZhbHVlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25MYWJlbFxuICAgICAgICAgIClcbiAgICAgIDogJyc7XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZUFuZENsZWFyKCkge1xuICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnMoZmFsc2UpO1xuICAgIHRoaXMuX2RlaGlnaGxpZ2h0T3B0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRIVE1MT3B0aW9ucygpIHtcbiAgICByZXR1cm4gKHRoaXMub3B0aW9uc0xpc3QubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJy5jcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uJ1xuICAgICkgfHwgW10pIGFzIGFueTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlaGlnaGxpZ2h0T3B0aW9uKGVsPzogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoZWwpIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZ2hsaWdodGVuJyk7XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4IDwgMCkgcmV0dXJuO1xuICAgICAgY29uc3Qgb3B0aW9uSXRlbXMgPSB0aGlzLl9nZXRIVE1MT3B0aW9ucygpO1xuICAgICAgb3B0aW9uSXRlbXNbdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4XS5jbGFzc0xpc3QucmVtb3ZlKCdoaWdobGlnaHRlbicpO1xuICAgICAgdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0T3B0aW9uKGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2hpZ2hsaWdodGVuJyk7XG4gICAgY29uc3QgcGFyZW50ID0gZWwucGFyZW50RWxlbWVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICAgIGNvbnN0IHBhcmVudFJlY3QgPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGVsUmVjdC50b3AgPCBwYXJlbnRSZWN0LnRvcCB8fCBlbFJlY3QuYm90dG9tID4gcGFyZW50UmVjdC5ib3R0b20pIHtcbiAgICAgIGVsLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgYmxvY2s6ICduZWFyZXN0JyxcbiAgICAgICAgaW5saW5lOiAnY2VudGVyJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbmF2aWdhdGVPcHRpb25zQnlBcnJvd3ModXA6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHJldHVybjtcblxuICAgIGNvbnN0IG9wdGlvbkl0ZW1zID0gdGhpcy5fZ2V0SFRNTE9wdGlvbnMoKTtcbiAgICBjb25zdCBsZW4gPSBvcHRpb25JdGVtcy5sZW5ndGg7XG4gICAgaWYgKGxlbiA8IDEpIHJldHVybjtcblxuICAgIGlmIChsZW4gPT09IDEpIHtcbiAgICAgIHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCA9IDA7XG4gICAgICB0aGlzLl9oaWdobGlnaHRPcHRpb24ob3B0aW9uSXRlbXNbMF0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh1cCkge1xuICAgICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24ob3B0aW9uSXRlbXNbdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4XSk7XG4gICAgICB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPVxuICAgICAgICB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPCAxXG4gICAgICAgICAgPyBsZW4gLSAxXG4gICAgICAgICAgOiB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggLSAxO1xuICAgICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9uKG9wdGlvbkl0ZW1zW3RoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kZWhpZ2hsaWdodE9wdGlvbihvcHRpb25JdGVtc1t0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXhdKTtcbiAgICAgIHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCA9IFstMSwgbGVuIC0gMV0uaW5jbHVkZXMoXG4gICAgICAgIHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleFxuICAgICAgKVxuICAgICAgICA/IDBcbiAgICAgICAgOiB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggKyAxO1xuICAgICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9uKG9wdGlvbkl0ZW1zW3RoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleF0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpcm1JbnB1dChzZWFyY2hWYWw6IHN0cmluZywgbmVlZEZvY3VzSW5wdXQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHJldHVybjtcblxuICAgIHNlYXJjaFZhbCA9IHNlYXJjaFZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghc2VhcmNoVmFsKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkgcmV0dXJuO1xuICAgICAgLy8gT25seSByZXNldCB0aGUgdmFsdWUgaWYgdGhlIGlucHV0VGV4dCB3YXMgY2hhbmdlZCBieSB0aGUgdXNlclxuICAgICAgaWYgKHRoaXMuaW5wdXRUZXh0ICE9PSB0aGlzLl9nZXRWYWx1ZUxhYmVsKCkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLl9nZXRFbXB0eVZhbHVlKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLl9jbG9zZUFuZENsZWFyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kKFxuICAgICAgKG86IGFueSkgPT4gb1t0aGlzLm9wdGlvbkxhYmVsXS50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hWYWxcbiAgICApO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3QoZm91bmQsIGZhbHNlLCB0cnVlLCBuZWVkRm9jdXNJbnB1dCk7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnModGhpcy5tdWx0aXBsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy5pc1RpbWVQaWNrZXJGaWVsZCAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5maWx0ZXJlZE9wdGlvbnNbMF0sIGZhbHNlLCBmYWxzZSwgbmVlZEZvY3VzSW5wdXQpO1xuICAgICAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnMoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gdGhpcy5fZ2V0VmFsdWVMYWJlbCgpO1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlTGFzdFZhbHVlKCkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSB8fCB0aGlzLmlucHV0VGV4dCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMudmFsdWU/Lmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuYmFja3NwYWNlQ2xpY2tlZE9uY2UpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnZhbHVlLmZpbHRlcihcbiAgICAgICAgICAgICh2OiBhbnksIGluZGV4OiBudW1iZXIpID0+IGluZGV4ICE9PSB0aGlzLnZhbHVlLmxlbmd0aCAtIDFcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5iYWNrc3BhY2VDbGlja2VkT25jZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHRoaXMuYmFja3NwYWNlQ2xpY2tlZE9uY2UgPSB0cnVlO1xuICAgIH0gZWxzZSB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIH0sIDApO1xuICB9XG59XG4iLCI8ZGl2XG4gIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGN2dFdpZHRoIH1cIlxuICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGVcIlxuICB0YWJpbmRleD1cIjFcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGVycm9yOiBlcnJvciB8fCBleHRlcm5hbEVycm9yLFxuICAgIGFjdGl2ZTogaXNBY3RpdmUoKVxuICB9XCJcbiAgI2F1dG9jb21wbGV0ZUNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtbGFiZWxcIiAqbmdJZj1cImxhYmVsXCI+XG4gICAgPGxhYmVsPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgICA8Y3BzLWluZm8tY2lyY2xlXG4gICAgICAqbmdJZj1cImluZm9Ub29sdGlwXCJcbiAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1sYWJlbC1pbmZvLWNpcmNsZVwiXG4gICAgICBzaXplPVwieHNtYWxsXCJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiaW5mb1Rvb2x0aXBQb3NpdGlvblwiXG4gICAgICBbdG9vbHRpcENvbnRlbnRDbGFzc109XCJpbmZvVG9vbHRpcENsYXNzXCJcbiAgICAgIFt0b29sdGlwTWF4V2lkdGhdPVwiaW5mb1Rvb2x0aXBNYXhXaWR0aFwiXG4gICAgICBbdG9vbHRpcFBlcnNpc3RlbnRdPVwiaW5mb1Rvb2x0aXBQZXJzaXN0ZW50XCJcbiAgICAgIFt0b29sdGlwVGV4dF09XCJpbmZvVG9vbHRpcFwiPlxuICAgIDwvY3BzLWluZm8tY2lyY2xlPlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIChrZXlkb3duKT1cIm9uQ29udGFpbmVyS2V5RG93bigkZXZlbnQpXCJcbiAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtY29udGFpbmVyXCJcbiAgICBbY2xhc3MuZm9jdXNlZF09XCJpc0FjdGl2ZSgpXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAncGVyc2lzdGVudC1jbGVhcic6IHBlcnNpc3RlbnRDbGVhcixcbiAgICAgIGJvcmRlcmxlc3M6IGFwcGVhcmFuY2UgPT09ICdib3JkZXJsZXNzJyxcbiAgICAgIHVuZGVybGluZWQ6IGFwcGVhcmFuY2UgPT09ICd1bmRlcmxpbmVkJ1xuICAgIH1cIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94XCJcbiAgICAgICNhdXRvY29tcGxldGVCb3hcbiAgICAgIChtb3VzZWRvd24pPVwib25Cb3hDbGljaygpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1ib3gtYXJlYVwiPlxuICAgICAgICA8Y3BzLWljb25cbiAgICAgICAgICAqbmdJZj1cInByZWZpeEljb25cIlxuICAgICAgICAgIFtpY29uXT1cInByZWZpeEljb25cIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkaXNhYmxlZCA/ICcjOWE5NTk1JyA6IG51bGxcIlxuICAgICAgICAgIFtzaXplXT1cInByZWZpeEljb25TaXplXCJcbiAgICAgICAgICBjbGFzcz1cInByZWZpeC1pY29uXCI+XG4gICAgICAgIDwvY3BzLWljb24+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94LWl0ZW1zXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKCFtdWx0aXBsZSAmJiAhaXNFbXB0eVZhbHVlKCkpIHx8ICh2YWx1ZT8ubGVuZ3RoID4gMCAmJiBtdWx0aXBsZSk7XG4gICAgICAgICAgICBlbHNlIGF1dG9jb21wbGV0ZUlucHV0VGVtcGxhdGVcbiAgICAgICAgICBcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFtdWx0aXBsZVwiIGNsYXNzPVwic2luZ2xlLWl0ZW1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtaXRlbS1zZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlLm9wYWNpdHldPVwiYWN0aXZlU2luZ2xlID8gMCA6IDFcIj57e1xuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdFxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZVtvcHRpb25MYWJlbF1cbiAgICAgICAgICAgICAgICAgIDogKHZhbHVlIHwgbGFiZWxCeVZhbHVlOiBvcHRpb25zIDogb3B0aW9uVmFsdWUgOiBvcHRpb25MYWJlbClcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVJbnB1dFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgIGlucHV0Q2xhc3M6ICdzaW5nbGUtaXRlbS1pbnB1dCcsXG4gICAgICAgICAgICAgICAgICBpbnB1dFN0eWxlOiBhY3RpdmVTaW5nbGUgPyAnb3BhY2l0eTogMScgOiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJtdWx0aXBsZSAmJiAhY2hpcHNcIiBjbGFzcz1cInRleHQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbCBvZiB2YWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWdyb3VwLWl0ZW1cIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhYm91dC10by1yZW1vdmUnOiBsYXN0ICYmIGJhY2tzcGFjZUNsaWNrZWRPbmNlIH1cIj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3RcbiAgICAgICAgICAgICAgICAgID8gdmFsW29wdGlvbkxhYmVsXVxuICAgICAgICAgICAgICAgICAgOiAodmFsIHwgbGFiZWxCeVZhbHVlOiBvcHRpb25zIDogb3B0aW9uVmFsdWUgOiBvcHRpb25MYWJlbClcbiAgICAgICAgICAgICAgfX17eyAhbGFzdCA/ICcsJyA6ICcnIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVJbnB1dFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgIGlucHV0Q2xhc3M6ICdtdWx0aS1pdGVtLWlucHV0J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlwbGUgJiYgY2hpcHNcIiBjbGFzcz1cImNoaXBzLWdyb3VwXCI+XG4gICAgICAgICAgICA8Y3BzLWNoaXBcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbCBvZiB2YWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2Nsb3NhYmxlXT1cImNsb3NhYmxlQ2hpcHNcIlxuICAgICAgICAgICAgICAoY2xvc2VkKT1cInNlbGVjdCh2YWwsIHRydWUpXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYWJvdXQtdG8tcmVtb3ZlJzogbGFzdCAmJiBiYWNrc3BhY2VDbGlja2VkT25jZSB9XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdFxuICAgICAgICAgICAgICAgICAgPyB2YWxbb3B0aW9uTGFiZWxdXG4gICAgICAgICAgICAgICAgICA6ICh2YWwgfCBsYWJlbEJ5VmFsdWU6IG9wdGlvbnMgOiBvcHRpb25WYWx1ZSA6IG9wdGlvbkxhYmVsKVxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgIDwvY3BzLWNoaXA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlSW5wdXRUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICBpbnB1dENsYXNzOiAnbXVsdGktY2hpcC1pbnB1dCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWJveC1pY29uc1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImNsZWFyYWJsZSAmJiAhZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiXG4gICAgICAgICAgICAgIHBlcnNpc3RlbnRDbGVhciB8fFxuICAgICAgICAgICAgICAoIXBlcnNpc3RlbnRDbGVhciAmJlxuICAgICAgICAgICAgICAgICgobXVsdGlwbGUgJiYgdmFsdWU/Lmxlbmd0aCkgfHwgKCFtdWx0aXBsZSAmJiAhaXNFbXB0eVZhbHVlKCkpKSlcbiAgICAgICAgICAgICAgICA/ICd2aXNpYmxlJ1xuICAgICAgICAgICAgICAgIDogJ2hpZGRlbidcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94LWNsZWFyLWljb25cIj5cbiAgICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudClcIj48L2Nwcy1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJzaG93Q2hldnJvblwiXG4gICAgICAgICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94LWNoZXZyb25cIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvbkNoZXZyb25DbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8Y3BzLWljb25cbiAgICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tZG93blwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJkaXNhYmxlZCA/ICd0ZXh0LWxpZ2h0JyA6ICd0ZXh0LWRhcmsnXCI+PC9jcHMtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGNwcy1tZW51XG4gICAgICAjb3B0aW9uc01lbnVcbiAgICAgIFt3aXRoQXJyb3ddPVwiZmFsc2VcIlxuICAgICAgKGJlZm9yZU1lbnVIaWRkZW4pPVwib25CZWZvcmVPcHRpb25zSGlkZGVuKCRldmVudClcIlxuICAgICAgaGlkZVRyYW5zaXRpb25PcHRpb25zPVwiMHMgbGluZWFyXCJcbiAgICAgIGNvbnRhaW5lckNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW1lbnVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI29wdGlvbnNMaXN0XG4gICAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgIHdpZHRoOiBhdXRvY29tcGxldGVCb3hXaWR0aCArICdweCdcbiAgICAgICAgfVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJsb2FkaW5nICYmIHNob3dMb2FkaW5nTWVzc2FnZVwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtbG9hZGluZ1wiPlxuICAgICAgICAgIHt7IGxvYWRpbmdNZXNzYWdlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHNob3dFbXB0eU1lc3NhZ2UgJiZcbiAgICAgICAgICAgIGZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPCAxICYmXG4gICAgICAgICAgICAhbG9hZGluZyAmJlxuICAgICAgICAgICAgaW5wdXRUZXh0RGVib3VuY2VkXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1lbXB0eVwiPlxuICAgICAgICAgIHt7IGVtcHR5TWVzc2FnZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF2aXJ0dWFsU2Nyb2xsICYmICFsb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uIHNlbGVjdC1hbGwtb3B0aW9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5hbGxzZWxlY3RlZF09XCJ2YWx1ZT8ubGVuZ3RoID09PSBvcHRpb25zLmxlbmd0aFwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBtdWx0aXBsZSAmJlxuICAgICAgICAgICAgICBzZWxlY3RBbGwgJiZcbiAgICAgICAgICAgICAgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gb3B0aW9ucy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgb3B0aW9ucy5sZW5ndGggPiAxXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbCgpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1vcHRpb24tbGVmdFwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1jaGVja1wiPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1sYWJlbFwiXG4gICAgICAgICAgICAgICAgPlNlbGVjdCBhbGw8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRPcHRpb25zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgaXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpcnR1YWxTY3JvbGwgJiYgIWxvYWRpbmdcIj5cbiAgICAgICAgICA8cC12aXJ0dWFsU2Nyb2xsZXJcbiAgICAgICAgICAgICN2aXJ0dWFsTGlzdFxuICAgICAgICAgICAgW3ZhbHVlXT1cImZpbHRlcmVkT3B0aW9uc1wiXG4gICAgICAgICAgICBbZGVsYXldPVwiMFwiXG4gICAgICAgICAgICBbc2Nyb2xsSGVpZ2h0XT1cInZpcnR1YWxMaXN0SGVpZ2h0ICsgJ3B4J1wiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJ7IG51bVRvbGVyYXRlZEl0ZW1zOiBudW1Ub2xlcmF0ZWRJdGVtcyB9XCJcbiAgICAgICAgICAgIFtpdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemVcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgaXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC12aXJ0dWFsU2Nyb2xsZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9jcHMtbWVudT5cbiAgICA8Y3BzLXByb2dyZXNzLWxpbmVhclxuICAgICAgKm5nSWY9XCJsb2FkaW5nIHx8IHZhbGlkYXRpbmdcIlxuICAgICAgaGVpZ2h0PVwiM1wiXG4gICAgICByYWRpdXM9XCI0XCJcbiAgICAgIG9wYWNpdHk9XCIwLjNcIlxuICAgICAgY2xhc3M9XCJhdXRvY29tcGxldGUtcHJvZ3Jlc3MtYmFyXCJcbiAgICAgIGJnQ29sb3I9XCJ0cmFuc3BhcmVudFwiPlxuICAgIDwvY3BzLXByb2dyZXNzLWxpbmVhcj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cIiFlcnJvciAmJiAhZXh0ZXJuYWxFcnJvciAmJiAhaGlkZURldGFpbHNcIlxuICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1oaW50XCI+XG4gICAge3sgaGludCB9fVxuICA8L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiKGVycm9yIHx8IGV4dGVybmFsRXJyb3IpICYmICFoaWRlRGV0YWlsc1wiXG4gICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWVycm9yXCI+XG4gICAge3sgZXJyb3IgfHwgZXh0ZXJuYWxFcnJvciB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgI2F1dG9jb21wbGV0ZUlucHV0VGVtcGxhdGVcbiAgbGV0LWlucHV0Q2xhc3M9XCJpbnB1dENsYXNzXCJcbiAgbGV0LWlucHV0U3R5bGU9XCJpbnB1dFN0eWxlXCI+XG4gIDxpbnB1dFxuICAgICNhdXRvY29tcGxldGVJbnB1dFxuICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1ib3gtaW5wdXRcIlxuICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgW2NsYXNzXT1cImlucHV0Q2xhc3NcIlxuICAgIFtzdHlsZV09XCJpbnB1dFN0eWxlXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAoIW11bHRpcGxlICYmIGlzRW1wdHlWYWx1ZSgpKSB8fCAodmFsdWU/Lmxlbmd0aCA8IDEgJiYgbXVsdGlwbGUpXG4gICAgICAgID8gcGxhY2Vob2xkZXJcbiAgICAgICAgOiAnJ1xuICAgIFwiXG4gICAgKGlucHV0KT1cImZpbHRlck9wdGlvbnMoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwib25JbnB1dEtleURvd24oJGV2ZW50KVwiXG4gICAgWyhuZ01vZGVsKV09XCJpbnB1dFRleHRcIlxuICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgIChibHVyKT1cIm9uQmx1cigpXCIgLz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uXCJcbiAgICAoY2xpY2spPVwib25PcHRpb25DbGljayhpdGVtKVwiXG4gICAgW2NsYXNzLnNlbGVjdGVkXT1cIlxuICAgICAgaXRlbSB8IGNoZWNrT3B0aW9uU2VsZWN0ZWQ6IHZhbHVlIDogbXVsdGlwbGUgOiByZXR1cm5PYmplY3QgOiBvcHRpb25WYWx1ZVxuICAgIFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1sZWZ0XCI+XG4gICAgICA8c3BhbiAqbmdJZj1cIm11bHRpcGxlXCIgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uLWNoZWNrXCI+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBkYXRhLWN5LWlkPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zXCJcbiAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uLWxhYmVsXCJcbiAgICAgICAgW2NsYXNzLnZpcnR1YWwtcm93XT1cInZpcnR1YWxTY3JvbGxcIlxuICAgICAgICA+e3sgaXRlbVtvcHRpb25MYWJlbF0gfX08L3NwYW5cbiAgICAgID5cbiAgICA8L3NwYW4+XG5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uLXJpZ2h0XCJcbiAgICAgIFtjbGFzcy52aXJ0dWFsLXJvd109XCJ2aXJ0dWFsU2Nyb2xsXCJcbiAgICAgID57eyBpdGVtW29wdGlvbkluZm9dIH19PC9zcGFuXG4gICAgPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|