ng2-iq-select2-exe 16.2.13 → 17.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/iq-select2/iq-select2-item.mjs +1 -1
- package/esm2022/lib/iq-select2/iq-select2.component.mjs +367 -367
- package/esm2022/lib/iq-select2/messages.mjs +6 -6
- package/esm2022/lib/iq-select2-results/iq-select2-results.component.mjs +96 -96
- package/esm2022/lib/iq-select2-template/iq-select2-template.directive.mjs +25 -25
- package/esm2022/lib/iq-select2.module.mjs +45 -45
- package/esm2022/ng2-iq-select2-exe.mjs +4 -4
- package/esm2022/public_api.mjs +8 -8
- package/fesm2022/ng2-iq-select2-exe.mjs +510 -510
- package/fesm2022/ng2-iq-select2-exe.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/iq-select2/iq-select2-item.d.ts +5 -5
- package/lib/iq-select2/iq-select2.component.d.ts +78 -78
- package/lib/iq-select2/messages.d.ts +6 -6
- package/lib/iq-select2-results/iq-select2-results.component.d.ts +29 -29
- package/lib/iq-select2-template/iq-select2-template.directive.d.ts +13 -13
- package/lib/iq-select2.module.d.ts +12 -12
- package/package.json +3 -3
- package/public_api.d.ts +5 -5
|
@@ -1,367 +1,367 @@
|
|
|
1
|
-
import { Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { IqSelect2ResultsComponent } from '../iq-select2-results/iq-select2-results.component';
|
|
3
|
-
import { NG_VALUE_ACCESSOR, UntypedFormControl } from '@angular/forms';
|
|
4
|
-
import { of } from 'rxjs';
|
|
5
|
-
import { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap, tap } from 'rxjs/operators';
|
|
6
|
-
import Messages from "./messages";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/common";
|
|
9
|
-
import * as i2 from "@angular/forms";
|
|
10
|
-
import * as i3 from "../iq-select2-results/iq-select2-results.component";
|
|
11
|
-
const KEY_CODE_DOWN_ARROW = 'ArrowDown';
|
|
12
|
-
const KEY_CODE_UP_ARROW = 'ArrowUp';
|
|
13
|
-
const KEY_CODE_ENTER = 'Enter';
|
|
14
|
-
const KEY_CODE_ESCAPE = 'Escape';
|
|
15
|
-
const KEY_CODE_DELETE = 'Delete';
|
|
16
|
-
export class IqSelect2Component {
|
|
17
|
-
constructor() {
|
|
18
|
-
this.referenceMode = 'id';
|
|
19
|
-
this.multiple = false;
|
|
20
|
-
this.placeholder = '';
|
|
21
|
-
this.disabled = false;
|
|
22
|
-
this.clientMode = false;
|
|
23
|
-
this.badgeColor = 'info';
|
|
24
|
-
this.wrapSelectedText = 'nowrap';
|
|
25
|
-
this.preventDeselect = false;
|
|
26
|
-
this.consecutiveMultipleSelection = this.multiple;
|
|
27
|
-
this.debounceDelay = 250;
|
|
28
|
-
this.debounceLength = 2;
|
|
29
|
-
this.iconCaret = '▼';
|
|
30
|
-
this.iconDelete = '×';
|
|
31
|
-
this.messageMoreResults = Messages.MORE_RESULTS;
|
|
32
|
-
this.messageNoResults = Messages.NO_RESULTS;
|
|
33
|
-
this.onSelect = new EventEmitter();
|
|
34
|
-
this.onRemove = new EventEmitter();
|
|
35
|
-
this.term = new UntypedFormControl();
|
|
36
|
-
this.resultsVisible = false;
|
|
37
|
-
this.searchFocused = false;
|
|
38
|
-
this.listData = [];
|
|
39
|
-
this.selectedItems = [];
|
|
40
|
-
this.placeholderSelected = '';
|
|
41
|
-
this.onTouchedCallback = () => false;
|
|
42
|
-
this.onChangeCallback = () => false;
|
|
43
|
-
this.handleClickOutside = event => {
|
|
44
|
-
if (!this.container.nativeElement.contains(event.target)) {
|
|
45
|
-
this.resultsVisible = false;
|
|
46
|
-
this.searchFocused = false;
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
ngAfterViewInit() {
|
|
51
|
-
this.subscribeToChangesAndLoadDataFromObservable();
|
|
52
|
-
document.addEventListener("mousedown", this.handleClickOutside);
|
|
53
|
-
}
|
|
54
|
-
ngOnDestroy() {
|
|
55
|
-
document.removeEventListener("mousedown", this.handleClickOutside);
|
|
56
|
-
}
|
|
57
|
-
writeValue(selectedValues) {
|
|
58
|
-
if (selectedValues) {
|
|
59
|
-
if (this.referenceMode === 'id') {
|
|
60
|
-
this.populateItemsFromIds(selectedValues);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
this.populateItemsFromEntities(selectedValues);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
this.placeholderSelected = '';
|
|
68
|
-
this.selectedItems = [];
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
registerOnChange(fn) {
|
|
72
|
-
this.onChangeCallback = fn;
|
|
73
|
-
}
|
|
74
|
-
registerOnTouched(fn) {
|
|
75
|
-
this.onTouchedCallback = fn;
|
|
76
|
-
}
|
|
77
|
-
setDisabledState(isDisabled) {
|
|
78
|
-
this.disabled = isDisabled;
|
|
79
|
-
}
|
|
80
|
-
subscribeToChangesAndLoadDataFromObservable() {
|
|
81
|
-
this.subscribeToResults(this.term.valueChanges.pipe(debounceTime(this.debounceDelay), distinctUntilChanged()));
|
|
82
|
-
}
|
|
83
|
-
subscribeToResults(observable) {
|
|
84
|
-
observable.pipe(tap(() => this.resultsVisible = false), filter((term) => term.length >= this.debounceLength), switchMap(term => this.loadDataFromObservable(term)), map(items => items.filter(item => !(this.multiple && this.alreadySelected(item)))), tap(() => this.resultsVisible = this.searchFocused)).subscribe((items) => this.listData = items);
|
|
85
|
-
}
|
|
86
|
-
loadDataFromObservable(term) {
|
|
87
|
-
return this.clientMode ? this.fetchAndFilterLocalData(term) : this.fetchData(term);
|
|
88
|
-
}
|
|
89
|
-
fetchAndFilterLocalData(term) {
|
|
90
|
-
if (!this.fullDataList) {
|
|
91
|
-
return this.fetchData('').pipe(mergeMap((items) => {
|
|
92
|
-
this.fullDataList = items;
|
|
93
|
-
return this.filterLocalData(term);
|
|
94
|
-
}));
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
return this.filterLocalData(term);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
filterLocalData(term) {
|
|
101
|
-
return of(this.fullDataList.filter(item => item.text.toLowerCase().includes(term.toLowerCase())));
|
|
102
|
-
}
|
|
103
|
-
fetchData(term) {
|
|
104
|
-
return this.dataSourceProvider(term, this.buildValue()).pipe(map((items) => items.map((item) => this.iqSelect2ItemAdapter(item))));
|
|
105
|
-
}
|
|
106
|
-
populateItemsFromEntities(selectedValues) {
|
|
107
|
-
if (this.multiple) {
|
|
108
|
-
this.handleMultipleWithEntities(selectedValues);
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
const iqSelect2Item = this.iqSelect2ItemAdapter(selectedValues);
|
|
112
|
-
this.selectedItems = [iqSelect2Item];
|
|
113
|
-
this.placeholderSelected = iqSelect2Item.text;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
handleMultipleWithEntities(selectedValues) {
|
|
117
|
-
this.selectedItems = [];
|
|
118
|
-
selectedValues.forEach((entity) => {
|
|
119
|
-
const item = this.iqSelect2ItemAdapter(entity);
|
|
120
|
-
const ids = this.getSelectedIds();
|
|
121
|
-
if (ids.indexOf(item.id) === -1) {
|
|
122
|
-
this.selectedItems.push(item);
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
populateItemsFromIds(selectedValues) {
|
|
127
|
-
if (this.multiple) {
|
|
128
|
-
this.handleMultipleWithIds(selectedValues);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
this.handleSingleWithId(selectedValues);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
handleMultipleWithIds(selectedValues) {
|
|
135
|
-
if (selectedValues !== undefined && this.selectedProvider !== undefined) {
|
|
136
|
-
const uniqueIds = [];
|
|
137
|
-
selectedValues.forEach((id) => {
|
|
138
|
-
if (uniqueIds.indexOf(id) === -1) {
|
|
139
|
-
uniqueIds.push(id);
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
this.selectedProvider(uniqueIds).subscribe((items) => {
|
|
143
|
-
this.selectedItems = items.map(this.iqSelect2ItemAdapter);
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
handleSingleWithId(id) {
|
|
148
|
-
if (id !== undefined && this.selectedProvider !== undefined) {
|
|
149
|
-
this.selectedProvider([id]).subscribe((items) => {
|
|
150
|
-
items.forEach((item) => {
|
|
151
|
-
const iqSelect2Item = this.iqSelect2ItemAdapter(item);
|
|
152
|
-
this.selectedItems = [iqSelect2Item];
|
|
153
|
-
this.placeholderSelected = iqSelect2Item.text;
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
alreadySelected(item) {
|
|
159
|
-
let result = false;
|
|
160
|
-
this.selectedItems.forEach(selectedItem => {
|
|
161
|
-
if (selectedItem.id === item.id) {
|
|
162
|
-
result = true;
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
return result;
|
|
166
|
-
}
|
|
167
|
-
onItemSelected(item) {
|
|
168
|
-
if (this.multiple) {
|
|
169
|
-
this.selectedItems.push(item);
|
|
170
|
-
const index = this.listData.indexOf(item, 0);
|
|
171
|
-
if (index > -1) {
|
|
172
|
-
this.listData.splice(index, 1);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
this.selectedItems.length = 0;
|
|
177
|
-
this.selectedItems.push(item);
|
|
178
|
-
}
|
|
179
|
-
this.onChangeCallback(this.buildValue());
|
|
180
|
-
this.term.patchValue('', { emitEvent: false });
|
|
181
|
-
if (this.multiple) {
|
|
182
|
-
if (!this.consecutiveMultipleSelection) {
|
|
183
|
-
this.afterItemSet();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
else if (!this.multiple) {
|
|
187
|
-
this.placeholderSelected = item.text;
|
|
188
|
-
this.afterItemSet();
|
|
189
|
-
}
|
|
190
|
-
this.onSelect.emit(item);
|
|
191
|
-
}
|
|
192
|
-
getSelectedIds() {
|
|
193
|
-
if (this.multiple) {
|
|
194
|
-
return this.selectedItems.map(item => item.id);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
return this.selectedItems.length === 0 ? null : this.selectedItems[0].id;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
getEntities() {
|
|
201
|
-
if (this.multiple) {
|
|
202
|
-
return this.selectedItems.map(item => item.entity);
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
return this.selectedItems.length === 0 ? null : this.selectedItems[0].entity;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
removeItem(item) {
|
|
209
|
-
const index = this.selectedItems.indexOf(item, 0);
|
|
210
|
-
if (index > -1) {
|
|
211
|
-
this.selectedItems.splice(index, 1);
|
|
212
|
-
}
|
|
213
|
-
this.onChangeCallback(this.buildValue());
|
|
214
|
-
this.onRemove.emit(item);
|
|
215
|
-
if (!this.multiple) {
|
|
216
|
-
this.placeholderSelected = '';
|
|
217
|
-
}
|
|
218
|
-
this.afterItemSet();
|
|
219
|
-
}
|
|
220
|
-
afterItemSet() {
|
|
221
|
-
this.searchFocused = false;
|
|
222
|
-
this.resultsVisible = false;
|
|
223
|
-
this.termInput.nativeElement.blur();
|
|
224
|
-
}
|
|
225
|
-
buildValue() {
|
|
226
|
-
return 'id' === this.referenceMode ? this.getSelectedIds() : this.getEntities();
|
|
227
|
-
}
|
|
228
|
-
onFocus() {
|
|
229
|
-
this.searchFocused = true;
|
|
230
|
-
}
|
|
231
|
-
onBlur() {
|
|
232
|
-
this.term.patchValue('', { emitEvent: false });
|
|
233
|
-
this.onTouchedCallback();
|
|
234
|
-
}
|
|
235
|
-
focus() {
|
|
236
|
-
if (!this.disabled) {
|
|
237
|
-
this.termInput.nativeElement.focus();
|
|
238
|
-
this.resultsVisible = false;
|
|
239
|
-
}
|
|
240
|
-
this.searchFocused = !this.disabled;
|
|
241
|
-
}
|
|
242
|
-
focusAndShowResults() {
|
|
243
|
-
if (!this.disabled) {
|
|
244
|
-
this.termInput.nativeElement.focus();
|
|
245
|
-
this.subscribeToResults(of(''));
|
|
246
|
-
}
|
|
247
|
-
this.searchFocused = !this.disabled;
|
|
248
|
-
}
|
|
249
|
-
onKeyUp(event) {
|
|
250
|
-
if (this.results) {
|
|
251
|
-
if (event.key === KEY_CODE_ENTER) {
|
|
252
|
-
this.results.selectCurrentItem();
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
else {
|
|
256
|
-
if (this.debounceLength === 0) {
|
|
257
|
-
if (event.key === KEY_CODE_ENTER || event.key === KEY_CODE_DOWN_ARROW) {
|
|
258
|
-
this.focusAndShowResults();
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
onKeyDown(event) {
|
|
264
|
-
if (event.key === KEY_CODE_ENTER) {
|
|
265
|
-
event.preventDefault();
|
|
266
|
-
}
|
|
267
|
-
if (!this.resultsVisible && event.key.includes('Arrow')) {
|
|
268
|
-
this.resultsVisible = true;
|
|
269
|
-
}
|
|
270
|
-
if (event.key === KEY_CODE_ESCAPE) {
|
|
271
|
-
this.resultsVisible = false;
|
|
272
|
-
}
|
|
273
|
-
if (event.key === KEY_CODE_DELETE) {
|
|
274
|
-
const textEntered = !this.term.value || this.term.value.length === 0;
|
|
275
|
-
if (textEntered && this.selectedItems.length > 0) {
|
|
276
|
-
this.removeItem(this.selectedItems[this.selectedItems.length - 1]);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
if (this.results) {
|
|
280
|
-
if (event.key === KEY_CODE_DOWN_ARROW) {
|
|
281
|
-
this.results.activeNext();
|
|
282
|
-
}
|
|
283
|
-
else if (event.key === KEY_CODE_UP_ARROW) {
|
|
284
|
-
this.results.activePrevious();
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
getPlaceholder() {
|
|
289
|
-
if (this.selectedItems.length > 0) {
|
|
290
|
-
if (!this.multiple && !this.searchFocused) {
|
|
291
|
-
return '';
|
|
292
|
-
}
|
|
293
|
-
else {
|
|
294
|
-
return this.placeholderSelected;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
return this.placeholder;
|
|
298
|
-
}
|
|
299
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
300
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
301
|
-
provide: NG_VALUE_ACCESSOR,
|
|
302
|
-
useExisting: forwardRef(() => IqSelect2Component),
|
|
303
|
-
multi: true
|
|
304
|
-
}], viewQueries: [{ propertyName: "container", first: true, predicate: ["selectContainer"], descendants: true }, { propertyName: "termInput", first: true, predicate: ["termInput"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }], ngImport: i0, template: "<div #selectContainer class=\"select2-container\">\r\n <div\r\n class=\"select2-inner-container\" [ngClass]=\"inputContainerClass ? inputContainerClass : ''\"\r\n [class.simple-selection]=\"!multiple\" [class.multiple-selection]=\"multiple\" [class.readonly]=\"disabled\"\r\n (click)=\"focusAndShowResults()\"\r\n >\r\n <ul class=\"select2-selection-container\">\r\n <ng-container *ngIf=\"!multiple; then input\"></ng-container>\r\n\r\n <li *ngFor=\"let item of selectedItems\" class=\"select2-selected\">\r\n <span class=\"select2-selected-item\" [ngStyle]=\"{whiteSpace: wrapSelectedText}\" [title]=\"item.text\">{{item.text}}</span>\r\n <button type=\"button\" *ngIf=\"!preventDeselect && !disabled\" class=\"select2-icon select2-remove-button\" (click)=\"removeItem(item); $event.stopPropagation()\">\r\n <span class=\"select2-selection-remove\" [innerHTML]=\"iconDelete\"></span>\r\n </button>\r\n </li>\r\n\r\n <ng-container *ngIf=\"multiple; then input\"></ng-container>\r\n\r\n <ng-template #input>\r\n <li *ngIf=\"!disabled\" class=\"select2-input-container\">\r\n <input #termInput [formControl]=\"term\" type=\"text\" [placeholder]=\"getPlaceholder()\" autocomplete=\"off\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\"\r\n />\r\n </li>\r\n </ng-template>\r\n </ul>\r\n\r\n <div *ngIf=\"(multiple || (!multiple && selectedItems.length === 0))\" class=\"select2-icon\">\r\n <span class=\"select2-selection-caret\" [innerHTML]=\"iconCaret\"></span>\r\n </div>\r\n </div>\r\n\r\n <iq-select2-results *ngIf=\"!disabled\" #results [resultsVisible]=\"resultsVisible\"\r\n [items]=\"listData\" [selectedItems]=\"selectedItems\" [maxResults]=\"maxResults\"\r\n [messageMoreResults]=\"messageMoreResults\" [messageNoResults]=\"messageNoResults\"\r\n [templateRef]=\"templateRef\" (onItemSelected)=\"onItemSelected($event);\"\r\n >\r\n </iq-select2-results>\r\n</div>\r\n", styles: [".select2-container{position:relative;width:100%;--select2-color-background: hsl(0, 0%, 96%);--select2-color-border: hsl(0, 0%, 90%);--select2-color-disabled: hsl(220, 20%, 90%);--select2-color-focused-border: hsl(220, 100%, 80%);--select2-color-focused-shadow: hsla(220, 80%, 40%);--select2-color-scrollbar-track: hsl(0, 0%, 90%);--select2-color-scrollbar-thumb: hsl(220, 25%, 25%);--select2-color-item-text: hsl(0, 0%, 96%);--select2-color-item-background: hsl(200, 90%, 50%);--select2-color-list-active: hsl(200, 70%, 70%);--select2-color-list-selected: hsl(200, 70%, 50%)}.select2-inner-container{display:flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;gap:.2em
|
|
305
|
-
}
|
|
306
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
307
|
-
type: Component,
|
|
308
|
-
args: [{ selector: 'iq-select2', providers: [{
|
|
309
|
-
provide: NG_VALUE_ACCESSOR,
|
|
310
|
-
useExisting: forwardRef(() => IqSelect2Component),
|
|
311
|
-
multi: true
|
|
312
|
-
}], template: "<div #selectContainer class=\"select2-container\">\r\n <div\r\n class=\"select2-inner-container\" [ngClass]=\"inputContainerClass ? inputContainerClass : ''\"\r\n [class.simple-selection]=\"!multiple\" [class.multiple-selection]=\"multiple\" [class.readonly]=\"disabled\"\r\n (click)=\"focusAndShowResults()\"\r\n >\r\n <ul class=\"select2-selection-container\">\r\n <ng-container *ngIf=\"!multiple; then input\"></ng-container>\r\n\r\n <li *ngFor=\"let item of selectedItems\" class=\"select2-selected\">\r\n <span class=\"select2-selected-item\" [ngStyle]=\"{whiteSpace: wrapSelectedText}\" [title]=\"item.text\">{{item.text}}</span>\r\n <button type=\"button\" *ngIf=\"!preventDeselect && !disabled\" class=\"select2-icon select2-remove-button\" (click)=\"removeItem(item); $event.stopPropagation()\">\r\n <span class=\"select2-selection-remove\" [innerHTML]=\"iconDelete\"></span>\r\n </button>\r\n </li>\r\n\r\n <ng-container *ngIf=\"multiple; then input\"></ng-container>\r\n\r\n <ng-template #input>\r\n <li *ngIf=\"!disabled\" class=\"select2-input-container\">\r\n <input #termInput [formControl]=\"term\" type=\"text\" [placeholder]=\"getPlaceholder()\" autocomplete=\"off\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\"\r\n />\r\n </li>\r\n </ng-template>\r\n </ul>\r\n\r\n <div *ngIf=\"(multiple || (!multiple && selectedItems.length === 0))\" class=\"select2-icon\">\r\n <span class=\"select2-selection-caret\" [innerHTML]=\"iconCaret\"></span>\r\n </div>\r\n </div>\r\n\r\n <iq-select2-results *ngIf=\"!disabled\" #results [resultsVisible]=\"resultsVisible\"\r\n [items]=\"listData\" [selectedItems]=\"selectedItems\" [maxResults]=\"maxResults\"\r\n [messageMoreResults]=\"messageMoreResults\" [messageNoResults]=\"messageNoResults\"\r\n [templateRef]=\"templateRef\" (onItemSelected)=\"onItemSelected($event);\"\r\n >\r\n </iq-select2-results>\r\n</div>\r\n", styles: [".select2-container{position:relative;width:100%;--select2-color-background: hsl(0, 0%, 96%);--select2-color-border: hsl(0, 0%, 90%);--select2-color-disabled: hsl(220, 20%, 90%);--select2-color-focused-border: hsl(220, 100%, 80%);--select2-color-focused-shadow: hsla(220, 80%, 40%);--select2-color-scrollbar-track: hsl(0, 0%, 90%);--select2-color-scrollbar-thumb: hsl(220, 25%, 25%);--select2-color-item-text: hsl(0, 0%, 96%);--select2-color-item-background: hsl(200, 90%, 50%);--select2-color-list-active: hsl(200, 70%, 70%);--select2-color-list-selected: hsl(200, 70%, 50%)}.select2-inner-container{display:flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;gap:.2em
|
|
313
|
-
}], ctorParameters:
|
|
314
|
-
type: Input
|
|
315
|
-
}], selectedProvider: [{
|
|
316
|
-
type: Input
|
|
317
|
-
}], iqSelect2ItemAdapter: [{
|
|
318
|
-
type: Input
|
|
319
|
-
}], referenceMode: [{
|
|
320
|
-
type: Input
|
|
321
|
-
}], multiple: [{
|
|
322
|
-
type: Input
|
|
323
|
-
}], inputContainerClass: [{
|
|
324
|
-
type: Input
|
|
325
|
-
}], placeholder: [{
|
|
326
|
-
type: Input
|
|
327
|
-
}], disabled: [{
|
|
328
|
-
type: Input
|
|
329
|
-
}], maxResults: [{
|
|
330
|
-
type: Input
|
|
331
|
-
}], clientMode: [{
|
|
332
|
-
type: Input
|
|
333
|
-
}], badgeColor: [{
|
|
334
|
-
type: Input
|
|
335
|
-
}], wrapSelectedText: [{
|
|
336
|
-
type: Input
|
|
337
|
-
}], preventDeselect: [{
|
|
338
|
-
type: Input
|
|
339
|
-
}], consecutiveMultipleSelection: [{
|
|
340
|
-
type: Input
|
|
341
|
-
}], debounceDelay: [{
|
|
342
|
-
type: Input
|
|
343
|
-
}], debounceLength: [{
|
|
344
|
-
type: Input
|
|
345
|
-
}], iconCaret: [{
|
|
346
|
-
type: Input
|
|
347
|
-
}], iconDelete: [{
|
|
348
|
-
type: Input
|
|
349
|
-
}], messageMoreResults: [{
|
|
350
|
-
type: Input
|
|
351
|
-
}], messageNoResults: [{
|
|
352
|
-
type: Input
|
|
353
|
-
}], onSelect: [{
|
|
354
|
-
type: Output
|
|
355
|
-
}], onRemove: [{
|
|
356
|
-
type: Output
|
|
357
|
-
}], container: [{
|
|
358
|
-
type: ViewChild,
|
|
359
|
-
args: ['selectContainer']
|
|
360
|
-
}], termInput: [{
|
|
361
|
-
type: ViewChild,
|
|
362
|
-
args: ['termInput']
|
|
363
|
-
}], results: [{
|
|
364
|
-
type: ViewChild,
|
|
365
|
-
args: ['results']
|
|
366
|
-
}] } });
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEtc2VsZWN0Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFlLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUvSSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUM3RixPQUFPLEVBQXVCLGlCQUFpQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RyxPQUFPLFFBQVEsTUFBTSxZQUFZLENBQUM7Ozs7O0FBRWxDLE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDO0FBQ3hDLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDO0FBQ3BDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQztBQUMvQixNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFDakMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBWWpDLE1BQU0sT0FBTyxrQkFBa0I7SUE0QzdCO1FBdENTLGtCQUFhLEdBQW9CLElBQUksQ0FBQztRQUN0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpC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QVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRXVCLFNBQVM7c0JBQXRDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNKLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDQSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0lxU2VsZWN0Mkl0ZW19IGZyb20gJy4vaXEtc2VsZWN0Mi1pdGVtJztcclxuaW1wb3J0IHtJcVNlbGVjdDJSZXN1bHRzQ29tcG9uZW50fSBmcm9tICcuLi9pcS1zZWxlY3QyLXJlc3VsdHMvaXEtc2VsZWN0Mi1yZXN1bHRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBVbnR5cGVkRm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgTWVzc2FnZXMgZnJvbSBcIi4vbWVzc2FnZXNcIjtcclxuXHJcbmNvbnN0IEtFWV9DT0RFX0RPV05fQVJST1cgPSAnQXJyb3dEb3duJztcclxuY29uc3QgS0VZX0NPREVfVVBfQVJST1cgPSAnQXJyb3dVcCc7XHJcbmNvbnN0IEtFWV9DT0RFX0VOVEVSID0gJ0VudGVyJztcclxuY29uc3QgS0VZX0NPREVfRVNDQVBFID0gJ0VzY2FwZSc7XHJcbmNvbnN0IEtFWV9DT0RFX0RFTEVURSA9ICdEZWxldGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpcS1zZWxlY3QyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaXEtc2VsZWN0Mi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaXEtc2VsZWN0Mi5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbe1xyXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJcVNlbGVjdDJDb21wb25lbnQpLFxyXG4gICAgbXVsdGk6IHRydWVcclxuICB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXFTZWxlY3QyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2VQcm92aWRlcjogKHRlcm06IHN0cmluZywgc2VsZWN0ZWQ/OiBhbnlbXSkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRQcm92aWRlcjogKGlkczogc3RyaW5nW10pID0+IE9ic2VydmFibGU8YW55W10+O1xyXG4gIEBJbnB1dCgpIGlxU2VsZWN0Mkl0ZW1BZGFwdGVyOiAoZW50aXR5OiBhbnkpID0+IElxU2VsZWN0Mkl0ZW07XHJcblxyXG4gIEBJbnB1dCgpIHJlZmVyZW5jZU1vZGU6ICdpZCcgfCAnZW50aXR5JyA9ICdpZCc7XHJcbiAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpbnB1dENvbnRhaW5lckNsYXNzOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1heFJlc3VsdHM6IG51bWJlcjtcclxuICBASW5wdXQoKSBjbGllbnRNb2RlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYmFkZ2VDb2xvciA9ICdpbmZvJztcclxuICBASW5wdXQoKSB3cmFwU2VsZWN0ZWRUZXh0ID0gJ25vd3JhcCdcclxuICBASW5wdXQoKSBwcmV2ZW50RGVzZWxlY3QgPSBmYWxzZVxyXG4gIEBJbnB1dCgpIGNvbnNlY3V0aXZlTXVsdGlwbGVTZWxlY3Rpb24gPSB0aGlzLm11bHRpcGxlXHJcblxyXG4gIEBJbnB1dCgpIGRlYm91bmNlRGVsYXkgPSAyNTBcclxuICBASW5wdXQoKSBkZWJvdW5jZUxlbmd0aCA9IDJcclxuICBASW5wdXQoKSBpY29uQ2FyZXQgPSAnJiM5NjYwOydcclxuICBASW5wdXQoKSBpY29uRGVsZXRlID0gJyYjMjE1OydcclxuICBASW5wdXQoKSBtZXNzYWdlTW9yZVJlc3VsdHM6IHN0cmluZyA9IE1lc3NhZ2VzLk1PUkVfUkVTVUxUUztcclxuICBASW5wdXQoKSBtZXNzYWdlTm9SZXN1bHRzOiBzdHJpbmcgPSBNZXNzYWdlcy5OT19SRVNVTFRTO1xyXG5cclxuICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8SXFTZWxlY3QySXRlbT4oKTtcclxuICBAT3V0cHV0KCkgb25SZW1vdmU6IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8SXFTZWxlY3QySXRlbT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0Q29udGFpbmVyJykgY29udGFpbmVyOiBFbGVtZW50UmVmXHJcbiAgQFZpZXdDaGlsZCgndGVybUlucHV0JykgdGVybUlucHV0OiBFbGVtZW50UmVmXHJcbiAgQFZpZXdDaGlsZCgncmVzdWx0cycpIHJlc3VsdHM6IElxU2VsZWN0MlJlc3VsdHNDb21wb25lbnQ7XHJcblxyXG4gIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHRlcm0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgcmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICBzZWFyY2hGb2N1c2VkID0gZmFsc2U7XHJcbiAgbGlzdERhdGE6IElxU2VsZWN0Mkl0ZW1bXSA9IFtdXHJcbiAgZnVsbERhdGFMaXN0OiBJcVNlbGVjdDJJdGVtW107XHJcbiAgc2VsZWN0ZWRJdGVtczogSXFTZWxlY3QySXRlbVtdID0gW107XHJcbiAgcHJpdmF0ZSBwbGFjZWhvbGRlclNlbGVjdGVkID0gJyc7XHJcblxyXG4gIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gKCkgPT4gZmFsc2VcclxuICBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gKCkgPT4gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXNBbmRMb2FkRGF0YUZyb21PYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSlcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSlcclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZSA9IGV2ZW50ID0+IHtcclxuICAgIGlmICghKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xyXG4gICAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZShzZWxlY3RlZFZhbHVlczogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoc2VsZWN0ZWRWYWx1ZXMpIHtcclxuICAgICAgaWYgKHRoaXMucmVmZXJlbmNlTW9kZSA9PT0gJ2lkJykge1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVJdGVtc0Zyb21JZHMoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVJdGVtc0Zyb21FbnRpdGllcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9ICcnO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0NoYW5nZXNBbmRMb2FkRGF0YUZyb21PYnNlcnZhYmxlKCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb1Jlc3VsdHModGhpcy50ZXJtLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlRGVsYXkpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZVRvUmVzdWx0cyhvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPHN0cmluZz4pOiB2b2lkIHtcclxuICAgIG9ic2VydmFibGUucGlwZShcclxuICAgICAgdGFwKCgpID0+IHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZSksXHJcbiAgICAgIGZpbHRlcigodGVybSkgPT4gdGVybS5sZW5ndGggPj0gdGhpcy5kZWJvdW5jZUxlbmd0aCksXHJcbiAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHRoaXMubG9hZERhdGFGcm9tT2JzZXJ2YWJsZSh0ZXJtKSksXHJcbiAgICAgIG1hcChpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiAhKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5hbHJlYWR5U2VsZWN0ZWQoaXRlbSkpKSksXHJcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnJlc3VsdHNWaXNpYmxlID0gdGhpcy5zZWFyY2hGb2N1c2VkKVxyXG4gICAgKS5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB0aGlzLmxpc3REYXRhID0gaXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRGF0YUZyb21PYnNlcnZhYmxlKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8SXFTZWxlY3QySXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGllbnRNb2RlID8gdGhpcy5mZXRjaEFuZEZpbHRlckxvY2FsRGF0YSh0ZXJtKSA6IHRoaXMuZmV0Y2hEYXRhKHRlcm0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaEFuZEZpbHRlckxvY2FsRGF0YSh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElxU2VsZWN0Mkl0ZW1bXT4ge1xyXG4gICAgaWYgKCF0aGlzLmZ1bGxEYXRhTGlzdCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5mZXRjaERhdGEoJycpLnBpcGUoXHJcbiAgICAgICAgbWVyZ2VNYXAoKGl0ZW1zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZ1bGxEYXRhTGlzdCA9IGl0ZW1zO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyTG9jYWxEYXRhKHRlcm0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJMb2NhbERhdGEodGVybSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlckxvY2FsRGF0YSh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElxU2VsZWN0Mkl0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIG9mKHRoaXMuZnVsbERhdGFMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0udGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0udG9Mb3dlckNhc2UoKSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmV0Y2hEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8SXFTZWxlY3QySXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlUHJvdmlkZXIodGVybSwgdGhpcy5idWlsZFZhbHVlKCkpLnBpcGUobWFwKChpdGVtczogYW55W10pID0+IGl0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5pcVNlbGVjdDJJdGVtQWRhcHRlcihpdGVtKSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9wdWxhdGVJdGVtc0Zyb21FbnRpdGllcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGlxU2VsZWN0Mkl0ZW0gPSB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW2lxU2VsZWN0Mkl0ZW1dO1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSBpcVNlbGVjdDJJdGVtLnRleHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG5cclxuICAgIHNlbGVjdGVkVmFsdWVzLmZvckVhY2goKGVudGl0eSkgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5pcVNlbGVjdDJJdGVtQWRhcHRlcihlbnRpdHkpO1xyXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XHJcblxyXG4gICAgICBpZiAoaWRzLmluZGV4T2YoaXRlbS5pZCkgPT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUl0ZW1zRnJvbUlkcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhhbmRsZVNpbmdsZVdpdGhJZChzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICBpZiAoc2VsZWN0ZWRWYWx1ZXMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkUHJvdmlkZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCB1bmlxdWVJZHMgPSBbXTtcclxuICAgICAgc2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoaWQpID0+IHtcclxuICAgICAgICBpZiAodW5pcXVlSWRzLmluZGV4T2YoaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgdW5pcXVlSWRzLnB1c2goaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvdmlkZXIodW5pcXVlSWRzKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGl0ZW1zLm1hcCh0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVNpbmdsZVdpdGhJZChpZDogYW55KSB7XHJcbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkUHJvdmlkZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvdmlkZXIoW2lkXSkuc3Vic2NyaWJlKChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpcVNlbGVjdDJJdGVtID0gdGhpcy5pcVNlbGVjdDJJdGVtQWRhcHRlcihpdGVtKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtpcVNlbGVjdDJJdGVtXTtcclxuICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IGlxU2VsZWN0Mkl0ZW0udGV4dDtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFscmVhZHlTZWxlY3RlZChpdGVtOiBJcVNlbGVjdDJJdGVtKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goc2VsZWN0ZWRJdGVtID0+IHtcclxuICAgICAgaWYgKHNlbGVjdGVkSXRlbS5pZCA9PT0gaXRlbS5pZCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1TZWxlY3RlZChpdGVtOiBJcVNlbGVjdDJJdGVtKSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxpc3REYXRhLmluZGV4T2YoaXRlbSwgMCk7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5saXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuYnVpbGRWYWx1ZSgpKTtcclxuICAgIHRoaXMudGVybS5wYXRjaFZhbHVlKCcnLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG5cclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIGlmICghdGhpcy5jb25zZWN1dGl2ZU11bHRpcGxlU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5hZnRlckl0ZW1TZXQoKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IGl0ZW0udGV4dDtcclxuXHJcbiAgICAgIHRoaXMuYWZ0ZXJJdGVtU2V0KClcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uU2VsZWN0LmVtaXQoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdGVkSWRzKCk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uaWQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uaWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEVudGl0aWVzKCk6IGFueVtdIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5lbnRpdHkpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uZW50aXR5O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSXRlbShpdGVtOiBJcVNlbGVjdDJJdGVtKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0sIDApO1xyXG5cclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmJ1aWxkVmFsdWUoKSk7XHJcbiAgICB0aGlzLm9uUmVtb3ZlLmVtaXQoaXRlbSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWZ0ZXJJdGVtU2V0KClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWZ0ZXJJdGVtU2V0KCkge1xyXG4gICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gZmFsc2VcclxuICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZVxyXG4gICAgdGhpcy50ZXJtSW5wdXQubmF0aXZlRWxlbWVudC5ibHVyKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRWYWx1ZSgpIHtcclxuICAgIHJldHVybiAnaWQnID09PSB0aGlzLnJlZmVyZW5jZU1vZGUgPyB0aGlzLmdldFNlbGVjdGVkSWRzKCkgOiB0aGlzLmdldEVudGl0aWVzKCk7XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKCkge1xyXG4gICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgb25CbHVyKCkge1xyXG4gICAgdGhpcy50ZXJtLnBhdGNoVmFsdWUoJycsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnRlcm1JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSAhdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGZvY3VzQW5kU2hvd1Jlc3VsdHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy50ZXJtSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvUmVzdWx0cyhvZignJykpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoRm9jdXNlZCA9ICF0aGlzLmRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMucmVzdWx0cykge1xyXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlfQ09ERV9FTlRFUikge1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5zZWxlY3RDdXJyZW50SXRlbSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kZWJvdW5jZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWV9DT0RFX0VOVEVSIHx8IGV2ZW50LmtleSA9PT0gS0VZX0NPREVfRE9XTl9BUlJPVykge1xyXG4gICAgICAgICAgdGhpcy5mb2N1c0FuZFNob3dSZXN1bHRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5rZXkgPT09IEtFWV9DT0RFX0VOVEVSKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnJlc3VsdHNWaXNpYmxlICYmIGV2ZW50LmtleS5pbmNsdWRlcygnQXJyb3cnKSkge1xyXG4gICAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5rZXkgPT09IEtFWV9DT0RFX0VTQ0FQRSkge1xyXG4gICAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlfQ09ERV9ERUxFVEUpIHtcclxuICAgICAgY29uc3QgdGV4dEVudGVyZWQgPSAhdGhpcy50ZXJtLnZhbHVlIHx8IHRoaXMudGVybS52YWx1ZS5sZW5ndGggPT09IDA7XHJcbiAgICAgIGlmICh0ZXh0RW50ZXJlZCAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbSh0aGlzLnNlbGVjdGVkSXRlbXNbdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZX0NPREVfRE9XTl9BUlJPVykge1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5hY3RpdmVOZXh0KCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBLRVlfQ09ERV9VUF9BUlJPVykge1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5hY3RpdmVQcmV2aW91cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5zZWFyY2hGb2N1c2VkKSB7XHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXJcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgI3NlbGVjdENvbnRhaW5lciBjbGFzcz1cInNlbGVjdDItY29udGFpbmVyXCI+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJzZWxlY3QyLWlubmVyLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cImlucHV0Q29udGFpbmVyQ2xhc3MgPyBpbnB1dENvbnRhaW5lckNsYXNzIDogJydcIlxyXG4gICAgW2NsYXNzLnNpbXBsZS1zZWxlY3Rpb25dPVwiIW11bHRpcGxlXCIgW2NsYXNzLm11bHRpcGxlLXNlbGVjdGlvbl09XCJtdWx0aXBsZVwiIFtjbGFzcy5yZWFkb25seV09XCJkaXNhYmxlZFwiXHJcbiAgICAoY2xpY2spPVwiZm9jdXNBbmRTaG93UmVzdWx0cygpXCJcclxuICA+XHJcbiAgICA8dWwgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbi1jb250YWluZXJcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtdWx0aXBsZTsgdGhlbiBpbnB1dFwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXNcIiBjbGFzcz1cInNlbGVjdDItc2VsZWN0ZWRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VsZWN0ZWQtaXRlbVwiIFtuZ1N0eWxlXT1cInt3aGl0ZVNwYWNlOiB3cmFwU2VsZWN0ZWRUZXh0fVwiIFt0aXRsZV09XCJpdGVtLnRleHRcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiIXByZXZlbnREZXNlbGVjdCAmJiAhZGlzYWJsZWRcIiBjbGFzcz1cInNlbGVjdDItaWNvbiBzZWxlY3QyLXJlbW92ZS1idXR0b25cIiAoY2xpY2spPVwicmVtb3ZlSXRlbShpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uLXJlbW92ZVwiIFtpbm5lckhUTUxdPVwiaWNvbkRlbGV0ZVwiPjwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9saT5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aXBsZTsgdGhlbiBpbnB1dFwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNpbnB1dD5cclxuICAgICAgICA8bGkgKm5nSWY9XCIhZGlzYWJsZWRcIiBjbGFzcz1cInNlbGVjdDItaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8aW5wdXQgI3Rlcm1JbnB1dCBbZm9ybUNvbnRyb2xdPVwidGVybVwiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyKClcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoYmx1cik9XCJvbkJsdXIoKVwiIChrZXl1cCk9XCJvbktleVVwKCRldmVudClcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3VsPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIobXVsdGlwbGUgfHwgKCFtdWx0aXBsZSAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCkpXCIgY2xhc3M9XCJzZWxlY3QyLWljb25cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbi1jYXJldFwiIFtpbm5lckhUTUxdPVwiaWNvbkNhcmV0XCI+PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxpcS1zZWxlY3QyLXJlc3VsdHMgKm5nSWY9XCIhZGlzYWJsZWRcIiAjcmVzdWx0cyBbcmVzdWx0c1Zpc2libGVdPVwicmVzdWx0c1Zpc2libGVcIlxyXG4gICAgW2l0ZW1zXT1cImxpc3REYXRhXCIgW3NlbGVjdGVkSXRlbXNdPVwic2VsZWN0ZWRJdGVtc1wiIFttYXhSZXN1bHRzXT1cIm1heFJlc3VsdHNcIlxyXG4gICAgW21lc3NhZ2VNb3JlUmVzdWx0c109XCJtZXNzYWdlTW9yZVJlc3VsdHNcIiBbbWVzc2FnZU5vUmVzdWx0c109XCJtZXNzYWdlTm9SZXN1bHRzXCJcclxuICAgIFt0ZW1wbGF0ZVJlZl09XCJ0ZW1wbGF0ZVJlZlwiIChvbkl0ZW1TZWxlY3RlZCk9XCJvbkl0ZW1TZWxlY3RlZCgkZXZlbnQpO1wiXHJcbiAgPlxyXG4gIDwvaXEtc2VsZWN0Mi1yZXN1bHRzPlxyXG48L2Rpdj5cclxuIl19
|
|
1
|
+
import { Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { IqSelect2ResultsComponent } from '../iq-select2-results/iq-select2-results.component';
|
|
3
|
+
import { NG_VALUE_ACCESSOR, UntypedFormControl } from '@angular/forms';
|
|
4
|
+
import { of } from 'rxjs';
|
|
5
|
+
import { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap, tap } from 'rxjs/operators';
|
|
6
|
+
import Messages from "./messages";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common";
|
|
9
|
+
import * as i2 from "@angular/forms";
|
|
10
|
+
import * as i3 from "../iq-select2-results/iq-select2-results.component";
|
|
11
|
+
const KEY_CODE_DOWN_ARROW = 'ArrowDown';
|
|
12
|
+
const KEY_CODE_UP_ARROW = 'ArrowUp';
|
|
13
|
+
const KEY_CODE_ENTER = 'Enter';
|
|
14
|
+
const KEY_CODE_ESCAPE = 'Escape';
|
|
15
|
+
const KEY_CODE_DELETE = 'Delete';
|
|
16
|
+
export class IqSelect2Component {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.referenceMode = 'id';
|
|
19
|
+
this.multiple = false;
|
|
20
|
+
this.placeholder = '';
|
|
21
|
+
this.disabled = false;
|
|
22
|
+
this.clientMode = false;
|
|
23
|
+
this.badgeColor = 'info';
|
|
24
|
+
this.wrapSelectedText = 'nowrap';
|
|
25
|
+
this.preventDeselect = false;
|
|
26
|
+
this.consecutiveMultipleSelection = this.multiple;
|
|
27
|
+
this.debounceDelay = 250;
|
|
28
|
+
this.debounceLength = 2;
|
|
29
|
+
this.iconCaret = '▼';
|
|
30
|
+
this.iconDelete = '×';
|
|
31
|
+
this.messageMoreResults = Messages.MORE_RESULTS;
|
|
32
|
+
this.messageNoResults = Messages.NO_RESULTS;
|
|
33
|
+
this.onSelect = new EventEmitter();
|
|
34
|
+
this.onRemove = new EventEmitter();
|
|
35
|
+
this.term = new UntypedFormControl();
|
|
36
|
+
this.resultsVisible = false;
|
|
37
|
+
this.searchFocused = false;
|
|
38
|
+
this.listData = [];
|
|
39
|
+
this.selectedItems = [];
|
|
40
|
+
this.placeholderSelected = '';
|
|
41
|
+
this.onTouchedCallback = () => false;
|
|
42
|
+
this.onChangeCallback = () => false;
|
|
43
|
+
this.handleClickOutside = event => {
|
|
44
|
+
if (!this.container.nativeElement.contains(event.target)) {
|
|
45
|
+
this.resultsVisible = false;
|
|
46
|
+
this.searchFocused = false;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
ngAfterViewInit() {
|
|
51
|
+
this.subscribeToChangesAndLoadDataFromObservable();
|
|
52
|
+
document.addEventListener("mousedown", this.handleClickOutside);
|
|
53
|
+
}
|
|
54
|
+
ngOnDestroy() {
|
|
55
|
+
document.removeEventListener("mousedown", this.handleClickOutside);
|
|
56
|
+
}
|
|
57
|
+
writeValue(selectedValues) {
|
|
58
|
+
if (selectedValues) {
|
|
59
|
+
if (this.referenceMode === 'id') {
|
|
60
|
+
this.populateItemsFromIds(selectedValues);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.populateItemsFromEntities(selectedValues);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this.placeholderSelected = '';
|
|
68
|
+
this.selectedItems = [];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
registerOnChange(fn) {
|
|
72
|
+
this.onChangeCallback = fn;
|
|
73
|
+
}
|
|
74
|
+
registerOnTouched(fn) {
|
|
75
|
+
this.onTouchedCallback = fn;
|
|
76
|
+
}
|
|
77
|
+
setDisabledState(isDisabled) {
|
|
78
|
+
this.disabled = isDisabled;
|
|
79
|
+
}
|
|
80
|
+
subscribeToChangesAndLoadDataFromObservable() {
|
|
81
|
+
this.subscribeToResults(this.term.valueChanges.pipe(debounceTime(this.debounceDelay), distinctUntilChanged()));
|
|
82
|
+
}
|
|
83
|
+
subscribeToResults(observable) {
|
|
84
|
+
observable.pipe(tap(() => this.resultsVisible = false), filter((term) => term.length >= this.debounceLength), switchMap(term => this.loadDataFromObservable(term)), map(items => items.filter(item => !(this.multiple && this.alreadySelected(item)))), tap(() => this.resultsVisible = this.searchFocused)).subscribe((items) => this.listData = items);
|
|
85
|
+
}
|
|
86
|
+
loadDataFromObservable(term) {
|
|
87
|
+
return this.clientMode ? this.fetchAndFilterLocalData(term) : this.fetchData(term);
|
|
88
|
+
}
|
|
89
|
+
fetchAndFilterLocalData(term) {
|
|
90
|
+
if (!this.fullDataList) {
|
|
91
|
+
return this.fetchData('').pipe(mergeMap((items) => {
|
|
92
|
+
this.fullDataList = items;
|
|
93
|
+
return this.filterLocalData(term);
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
return this.filterLocalData(term);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
filterLocalData(term) {
|
|
101
|
+
return of(this.fullDataList.filter(item => item.text.toLowerCase().includes(term.toLowerCase())));
|
|
102
|
+
}
|
|
103
|
+
fetchData(term) {
|
|
104
|
+
return this.dataSourceProvider(term, this.buildValue()).pipe(map((items) => items.map((item) => this.iqSelect2ItemAdapter(item))));
|
|
105
|
+
}
|
|
106
|
+
populateItemsFromEntities(selectedValues) {
|
|
107
|
+
if (this.multiple) {
|
|
108
|
+
this.handleMultipleWithEntities(selectedValues);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
const iqSelect2Item = this.iqSelect2ItemAdapter(selectedValues);
|
|
112
|
+
this.selectedItems = [iqSelect2Item];
|
|
113
|
+
this.placeholderSelected = iqSelect2Item.text;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
handleMultipleWithEntities(selectedValues) {
|
|
117
|
+
this.selectedItems = [];
|
|
118
|
+
selectedValues.forEach((entity) => {
|
|
119
|
+
const item = this.iqSelect2ItemAdapter(entity);
|
|
120
|
+
const ids = this.getSelectedIds();
|
|
121
|
+
if (ids.indexOf(item.id) === -1) {
|
|
122
|
+
this.selectedItems.push(item);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
populateItemsFromIds(selectedValues) {
|
|
127
|
+
if (this.multiple) {
|
|
128
|
+
this.handleMultipleWithIds(selectedValues);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
this.handleSingleWithId(selectedValues);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
handleMultipleWithIds(selectedValues) {
|
|
135
|
+
if (selectedValues !== undefined && this.selectedProvider !== undefined) {
|
|
136
|
+
const uniqueIds = [];
|
|
137
|
+
selectedValues.forEach((id) => {
|
|
138
|
+
if (uniqueIds.indexOf(id) === -1) {
|
|
139
|
+
uniqueIds.push(id);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
this.selectedProvider(uniqueIds).subscribe((items) => {
|
|
143
|
+
this.selectedItems = items.map(this.iqSelect2ItemAdapter);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
handleSingleWithId(id) {
|
|
148
|
+
if (id !== undefined && this.selectedProvider !== undefined) {
|
|
149
|
+
this.selectedProvider([id]).subscribe((items) => {
|
|
150
|
+
items.forEach((item) => {
|
|
151
|
+
const iqSelect2Item = this.iqSelect2ItemAdapter(item);
|
|
152
|
+
this.selectedItems = [iqSelect2Item];
|
|
153
|
+
this.placeholderSelected = iqSelect2Item.text;
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
alreadySelected(item) {
|
|
159
|
+
let result = false;
|
|
160
|
+
this.selectedItems.forEach(selectedItem => {
|
|
161
|
+
if (selectedItem.id === item.id) {
|
|
162
|
+
result = true;
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
onItemSelected(item) {
|
|
168
|
+
if (this.multiple) {
|
|
169
|
+
this.selectedItems.push(item);
|
|
170
|
+
const index = this.listData.indexOf(item, 0);
|
|
171
|
+
if (index > -1) {
|
|
172
|
+
this.listData.splice(index, 1);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
this.selectedItems.length = 0;
|
|
177
|
+
this.selectedItems.push(item);
|
|
178
|
+
}
|
|
179
|
+
this.onChangeCallback(this.buildValue());
|
|
180
|
+
this.term.patchValue('', { emitEvent: false });
|
|
181
|
+
if (this.multiple) {
|
|
182
|
+
if (!this.consecutiveMultipleSelection) {
|
|
183
|
+
this.afterItemSet();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else if (!this.multiple) {
|
|
187
|
+
this.placeholderSelected = item.text;
|
|
188
|
+
this.afterItemSet();
|
|
189
|
+
}
|
|
190
|
+
this.onSelect.emit(item);
|
|
191
|
+
}
|
|
192
|
+
getSelectedIds() {
|
|
193
|
+
if (this.multiple) {
|
|
194
|
+
return this.selectedItems.map(item => item.id);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
return this.selectedItems.length === 0 ? null : this.selectedItems[0].id;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
getEntities() {
|
|
201
|
+
if (this.multiple) {
|
|
202
|
+
return this.selectedItems.map(item => item.entity);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
return this.selectedItems.length === 0 ? null : this.selectedItems[0].entity;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
removeItem(item) {
|
|
209
|
+
const index = this.selectedItems.indexOf(item, 0);
|
|
210
|
+
if (index > -1) {
|
|
211
|
+
this.selectedItems.splice(index, 1);
|
|
212
|
+
}
|
|
213
|
+
this.onChangeCallback(this.buildValue());
|
|
214
|
+
this.onRemove.emit(item);
|
|
215
|
+
if (!this.multiple) {
|
|
216
|
+
this.placeholderSelected = '';
|
|
217
|
+
}
|
|
218
|
+
this.afterItemSet();
|
|
219
|
+
}
|
|
220
|
+
afterItemSet() {
|
|
221
|
+
this.searchFocused = false;
|
|
222
|
+
this.resultsVisible = false;
|
|
223
|
+
this.termInput.nativeElement.blur();
|
|
224
|
+
}
|
|
225
|
+
buildValue() {
|
|
226
|
+
return 'id' === this.referenceMode ? this.getSelectedIds() : this.getEntities();
|
|
227
|
+
}
|
|
228
|
+
onFocus() {
|
|
229
|
+
this.searchFocused = true;
|
|
230
|
+
}
|
|
231
|
+
onBlur() {
|
|
232
|
+
this.term.patchValue('', { emitEvent: false });
|
|
233
|
+
this.onTouchedCallback();
|
|
234
|
+
}
|
|
235
|
+
focus() {
|
|
236
|
+
if (!this.disabled) {
|
|
237
|
+
this.termInput.nativeElement.focus();
|
|
238
|
+
this.resultsVisible = false;
|
|
239
|
+
}
|
|
240
|
+
this.searchFocused = !this.disabled;
|
|
241
|
+
}
|
|
242
|
+
focusAndShowResults() {
|
|
243
|
+
if (!this.disabled) {
|
|
244
|
+
this.termInput.nativeElement.focus();
|
|
245
|
+
this.subscribeToResults(of(''));
|
|
246
|
+
}
|
|
247
|
+
this.searchFocused = !this.disabled;
|
|
248
|
+
}
|
|
249
|
+
onKeyUp(event) {
|
|
250
|
+
if (this.results) {
|
|
251
|
+
if (event.key === KEY_CODE_ENTER) {
|
|
252
|
+
this.results.selectCurrentItem();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
if (this.debounceLength === 0) {
|
|
257
|
+
if (event.key === KEY_CODE_ENTER || event.key === KEY_CODE_DOWN_ARROW) {
|
|
258
|
+
this.focusAndShowResults();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
onKeyDown(event) {
|
|
264
|
+
if (event.key === KEY_CODE_ENTER) {
|
|
265
|
+
event.preventDefault();
|
|
266
|
+
}
|
|
267
|
+
if (!this.resultsVisible && event.key.includes('Arrow')) {
|
|
268
|
+
this.resultsVisible = true;
|
|
269
|
+
}
|
|
270
|
+
if (event.key === KEY_CODE_ESCAPE) {
|
|
271
|
+
this.resultsVisible = false;
|
|
272
|
+
}
|
|
273
|
+
if (event.key === KEY_CODE_DELETE) {
|
|
274
|
+
const textEntered = !this.term.value || this.term.value.length === 0;
|
|
275
|
+
if (textEntered && this.selectedItems.length > 0) {
|
|
276
|
+
this.removeItem(this.selectedItems[this.selectedItems.length - 1]);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
if (this.results) {
|
|
280
|
+
if (event.key === KEY_CODE_DOWN_ARROW) {
|
|
281
|
+
this.results.activeNext();
|
|
282
|
+
}
|
|
283
|
+
else if (event.key === KEY_CODE_UP_ARROW) {
|
|
284
|
+
this.results.activePrevious();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
getPlaceholder() {
|
|
289
|
+
if (this.selectedItems.length > 0) {
|
|
290
|
+
if (!this.multiple && !this.searchFocused) {
|
|
291
|
+
return '';
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
return this.placeholderSelected;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return this.placeholder;
|
|
298
|
+
}
|
|
299
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IqSelect2Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
300
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: IqSelect2Component, selector: "iq-select2", inputs: { dataSourceProvider: "dataSourceProvider", selectedProvider: "selectedProvider", iqSelect2ItemAdapter: "iqSelect2ItemAdapter", referenceMode: "referenceMode", multiple: "multiple", inputContainerClass: "inputContainerClass", placeholder: "placeholder", disabled: "disabled", maxResults: "maxResults", clientMode: "clientMode", badgeColor: "badgeColor", wrapSelectedText: "wrapSelectedText", preventDeselect: "preventDeselect", consecutiveMultipleSelection: "consecutiveMultipleSelection", debounceDelay: "debounceDelay", debounceLength: "debounceLength", iconCaret: "iconCaret", iconDelete: "iconDelete", messageMoreResults: "messageMoreResults", messageNoResults: "messageNoResults" }, outputs: { onSelect: "onSelect", onRemove: "onRemove" }, providers: [{
|
|
301
|
+
provide: NG_VALUE_ACCESSOR,
|
|
302
|
+
useExisting: forwardRef(() => IqSelect2Component),
|
|
303
|
+
multi: true
|
|
304
|
+
}], viewQueries: [{ propertyName: "container", first: true, predicate: ["selectContainer"], descendants: true }, { propertyName: "termInput", first: true, predicate: ["termInput"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }], ngImport: i0, template: "<div #selectContainer class=\"select2-container\">\r\n <div\r\n class=\"select2-inner-container\" [ngClass]=\"inputContainerClass ? inputContainerClass : ''\"\r\n [class.simple-selection]=\"!multiple\" [class.multiple-selection]=\"multiple\" [class.readonly]=\"disabled\"\r\n (click)=\"focusAndShowResults()\"\r\n >\r\n <ul class=\"select2-selection-container\">\r\n <ng-container *ngIf=\"!multiple; then input\"></ng-container>\r\n\r\n <li *ngFor=\"let item of selectedItems\" class=\"select2-selected\">\r\n <span class=\"select2-selected-item\" [ngStyle]=\"{whiteSpace: wrapSelectedText}\" [title]=\"item.text\">{{item.text}}</span>\r\n <button type=\"button\" *ngIf=\"!preventDeselect && !disabled\" class=\"select2-icon select2-remove-button\" (click)=\"removeItem(item); $event.stopPropagation()\">\r\n <span class=\"select2-selection-remove\" [innerHTML]=\"iconDelete\"></span>\r\n </button>\r\n </li>\r\n\r\n <ng-container *ngIf=\"multiple; then input\"></ng-container>\r\n\r\n <ng-template #input>\r\n <li *ngIf=\"!disabled\" class=\"select2-input-container\">\r\n <input #termInput [formControl]=\"term\" type=\"text\" [placeholder]=\"getPlaceholder()\" autocomplete=\"off\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\"\r\n />\r\n </li>\r\n </ng-template>\r\n </ul>\r\n\r\n <div *ngIf=\"(multiple || (!multiple && selectedItems.length === 0))\" class=\"select2-icon\">\r\n <span class=\"select2-selection-caret\" [innerHTML]=\"iconCaret\"></span>\r\n </div>\r\n </div>\r\n\r\n <iq-select2-results *ngIf=\"!disabled\" #results [resultsVisible]=\"resultsVisible\"\r\n [items]=\"listData\" [selectedItems]=\"selectedItems\" [maxResults]=\"maxResults\"\r\n [messageMoreResults]=\"messageMoreResults\" [messageNoResults]=\"messageNoResults\"\r\n [templateRef]=\"templateRef\" (onItemSelected)=\"onItemSelected($event);\"\r\n >\r\n </iq-select2-results>\r\n</div>\r\n", styles: [".select2-container{position:relative;width:100%;--select2-color-background: hsl(0, 0%, 96%);--select2-color-border: hsl(0, 0%, 90%);--select2-color-disabled: hsl(220, 20%, 90%);--select2-color-focused-border: hsl(220, 100%, 80%);--select2-color-focused-shadow: hsla(220, 80%, 40%);--select2-color-scrollbar-track: hsl(0, 0%, 90%);--select2-color-scrollbar-thumb: hsl(220, 25%, 25%);--select2-color-item-text: hsl(0, 0%, 96%);--select2-color-item-background: hsl(200, 90%, 50%);--select2-color-list-active: hsl(200, 70%, 70%);--select2-color-list-selected: hsl(200, 70%, 50%)}.select2-inner-container{display:flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;gap:.2em;&:focus-within{color:invert(var(--select2-color-item-text));background-color:var(--select2-color-background);border-color:var(--select2-color-focused-border);outline:0;box-shadow:0 0 0 .1rem var(--select2-color-focused-shadow)}}.simple-selection{.select2-selection-container{display:grid;grid-auto-columns:100%;padding-right:.1em;>*{grid-area:1 / 1}}&:focus-within{.select2-selected-item{opacity:0}}.select2-selected{width:100%;padding:0}}.multiple-selection{.select2-selected{color:var(--select2-color-item-text);background-color:var(--select2-color-item-background);padding:.1em .4em;border-radius:.25em;max-width:100%}}.select2-selection-container{width:100%;display:flex;flex-flow:row wrap;align-items:baseline;justify-content:flex-start;gap:.2em;overflow:hidden;list-style-type:none;padding:0;margin:0}.select2-selected{display:inline-flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;gap:.2em;padding:.25em}.select2-input-container{flex-grow:1;& input{background-color:transparent;border:none;outline:none;padding:0;width:100%}}.select2-icon{color:inherit;font-size:1em;width:1em;height:1em;z-index:10;display:grid;place-content:center;&:is(button){background-color:transparent;border:0;outline:0;&:focus{border:1px solid var(--select2-color-focused-border);border-radius:50%;box-shadow:0 0 0 .1rem var(--select2-color-focused-shadow)}}}:not(.readonly)>.select2-icon{cursor:pointer}.select2-selected-item{width:100%;overflow:hidden;text-overflow:ellipsis}.readonly{background-color:var(--select2-color-disabled);cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.IqSelect2ResultsComponent, selector: "iq-select2-results", inputs: ["items", "maxResults", "messageMoreResults", "messageNoResults", "resultsVisible", "selectedItems", "templateRef"], outputs: ["onItemSelected"] }] }); }
|
|
305
|
+
}
|
|
306
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IqSelect2Component, decorators: [{
|
|
307
|
+
type: Component,
|
|
308
|
+
args: [{ selector: 'iq-select2', providers: [{
|
|
309
|
+
provide: NG_VALUE_ACCESSOR,
|
|
310
|
+
useExisting: forwardRef(() => IqSelect2Component),
|
|
311
|
+
multi: true
|
|
312
|
+
}], template: "<div #selectContainer class=\"select2-container\">\r\n <div\r\n class=\"select2-inner-container\" [ngClass]=\"inputContainerClass ? inputContainerClass : ''\"\r\n [class.simple-selection]=\"!multiple\" [class.multiple-selection]=\"multiple\" [class.readonly]=\"disabled\"\r\n (click)=\"focusAndShowResults()\"\r\n >\r\n <ul class=\"select2-selection-container\">\r\n <ng-container *ngIf=\"!multiple; then input\"></ng-container>\r\n\r\n <li *ngFor=\"let item of selectedItems\" class=\"select2-selected\">\r\n <span class=\"select2-selected-item\" [ngStyle]=\"{whiteSpace: wrapSelectedText}\" [title]=\"item.text\">{{item.text}}</span>\r\n <button type=\"button\" *ngIf=\"!preventDeselect && !disabled\" class=\"select2-icon select2-remove-button\" (click)=\"removeItem(item); $event.stopPropagation()\">\r\n <span class=\"select2-selection-remove\" [innerHTML]=\"iconDelete\"></span>\r\n </button>\r\n </li>\r\n\r\n <ng-container *ngIf=\"multiple; then input\"></ng-container>\r\n\r\n <ng-template #input>\r\n <li *ngIf=\"!disabled\" class=\"select2-input-container\">\r\n <input #termInput [formControl]=\"term\" type=\"text\" [placeholder]=\"getPlaceholder()\" autocomplete=\"off\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\"\r\n />\r\n </li>\r\n </ng-template>\r\n </ul>\r\n\r\n <div *ngIf=\"(multiple || (!multiple && selectedItems.length === 0))\" class=\"select2-icon\">\r\n <span class=\"select2-selection-caret\" [innerHTML]=\"iconCaret\"></span>\r\n </div>\r\n </div>\r\n\r\n <iq-select2-results *ngIf=\"!disabled\" #results [resultsVisible]=\"resultsVisible\"\r\n [items]=\"listData\" [selectedItems]=\"selectedItems\" [maxResults]=\"maxResults\"\r\n [messageMoreResults]=\"messageMoreResults\" [messageNoResults]=\"messageNoResults\"\r\n [templateRef]=\"templateRef\" (onItemSelected)=\"onItemSelected($event);\"\r\n >\r\n </iq-select2-results>\r\n</div>\r\n", styles: [".select2-container{position:relative;width:100%;--select2-color-background: hsl(0, 0%, 96%);--select2-color-border: hsl(0, 0%, 90%);--select2-color-disabled: hsl(220, 20%, 90%);--select2-color-focused-border: hsl(220, 100%, 80%);--select2-color-focused-shadow: hsla(220, 80%, 40%);--select2-color-scrollbar-track: hsl(0, 0%, 90%);--select2-color-scrollbar-thumb: hsl(220, 25%, 25%);--select2-color-item-text: hsl(0, 0%, 96%);--select2-color-item-background: hsl(200, 90%, 50%);--select2-color-list-active: hsl(200, 70%, 70%);--select2-color-list-selected: hsl(200, 70%, 50%)}.select2-inner-container{display:flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;gap:.2em;&:focus-within{color:invert(var(--select2-color-item-text));background-color:var(--select2-color-background);border-color:var(--select2-color-focused-border);outline:0;box-shadow:0 0 0 .1rem var(--select2-color-focused-shadow)}}.simple-selection{.select2-selection-container{display:grid;grid-auto-columns:100%;padding-right:.1em;>*{grid-area:1 / 1}}&:focus-within{.select2-selected-item{opacity:0}}.select2-selected{width:100%;padding:0}}.multiple-selection{.select2-selected{color:var(--select2-color-item-text);background-color:var(--select2-color-item-background);padding:.1em .4em;border-radius:.25em;max-width:100%}}.select2-selection-container{width:100%;display:flex;flex-flow:row wrap;align-items:baseline;justify-content:flex-start;gap:.2em;overflow:hidden;list-style-type:none;padding:0;margin:0}.select2-selected{display:inline-flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;gap:.2em;padding:.25em}.select2-input-container{flex-grow:1;& input{background-color:transparent;border:none;outline:none;padding:0;width:100%}}.select2-icon{color:inherit;font-size:1em;width:1em;height:1em;z-index:10;display:grid;place-content:center;&:is(button){background-color:transparent;border:0;outline:0;&:focus{border:1px solid var(--select2-color-focused-border);border-radius:50%;box-shadow:0 0 0 .1rem var(--select2-color-focused-shadow)}}}:not(.readonly)>.select2-icon{cursor:pointer}.select2-selected-item{width:100%;overflow:hidden;text-overflow:ellipsis}.readonly{background-color:var(--select2-color-disabled);cursor:not-allowed}\n"] }]
|
|
313
|
+
}], ctorParameters: () => [], propDecorators: { dataSourceProvider: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}], selectedProvider: [{
|
|
316
|
+
type: Input
|
|
317
|
+
}], iqSelect2ItemAdapter: [{
|
|
318
|
+
type: Input
|
|
319
|
+
}], referenceMode: [{
|
|
320
|
+
type: Input
|
|
321
|
+
}], multiple: [{
|
|
322
|
+
type: Input
|
|
323
|
+
}], inputContainerClass: [{
|
|
324
|
+
type: Input
|
|
325
|
+
}], placeholder: [{
|
|
326
|
+
type: Input
|
|
327
|
+
}], disabled: [{
|
|
328
|
+
type: Input
|
|
329
|
+
}], maxResults: [{
|
|
330
|
+
type: Input
|
|
331
|
+
}], clientMode: [{
|
|
332
|
+
type: Input
|
|
333
|
+
}], badgeColor: [{
|
|
334
|
+
type: Input
|
|
335
|
+
}], wrapSelectedText: [{
|
|
336
|
+
type: Input
|
|
337
|
+
}], preventDeselect: [{
|
|
338
|
+
type: Input
|
|
339
|
+
}], consecutiveMultipleSelection: [{
|
|
340
|
+
type: Input
|
|
341
|
+
}], debounceDelay: [{
|
|
342
|
+
type: Input
|
|
343
|
+
}], debounceLength: [{
|
|
344
|
+
type: Input
|
|
345
|
+
}], iconCaret: [{
|
|
346
|
+
type: Input
|
|
347
|
+
}], iconDelete: [{
|
|
348
|
+
type: Input
|
|
349
|
+
}], messageMoreResults: [{
|
|
350
|
+
type: Input
|
|
351
|
+
}], messageNoResults: [{
|
|
352
|
+
type: Input
|
|
353
|
+
}], onSelect: [{
|
|
354
|
+
type: Output
|
|
355
|
+
}], onRemove: [{
|
|
356
|
+
type: Output
|
|
357
|
+
}], container: [{
|
|
358
|
+
type: ViewChild,
|
|
359
|
+
args: ['selectContainer']
|
|
360
|
+
}], termInput: [{
|
|
361
|
+
type: ViewChild,
|
|
362
|
+
args: ['termInput']
|
|
363
|
+
}], results: [{
|
|
364
|
+
type: ViewChild,
|
|
365
|
+
args: ['results']
|
|
366
|
+
}] } });
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEtc2VsZWN0Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFlLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUvSSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUM3RixPQUFPLEVBQXVCLGlCQUFpQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RyxPQUFPLFFBQVEsTUFBTSxZQUFZLENBQUM7Ozs7O0FBRWxDLE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDO0FBQ3hDLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDO0FBQ3BDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQztBQUMvQixNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFDakMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBWWpDLE1BQU0sT0FBTyxrQkFBa0I7SUE0QzdCO1FBdENTLGtCQUFhLEdBQW9CLElBQUksQ0FBQztRQUN0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpC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ZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SXFTZWxlY3QySXRlbX0gZnJvbSAnLi9pcS1zZWxlY3QyLWl0ZW0nO1xyXG5pbXBvcnQge0lxU2VsZWN0MlJlc3VsdHNDb21wb25lbnR9IGZyb20gJy4uL2lxLXNlbGVjdDItcmVzdWx0cy9pcS1zZWxlY3QyLXJlc3VsdHMuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIFVudHlwZWRGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCBNZXNzYWdlcyBmcm9tIFwiLi9tZXNzYWdlc1wiO1xyXG5cclxuY29uc3QgS0VZX0NPREVfRE9XTl9BUlJPVyA9ICdBcnJvd0Rvd24nO1xyXG5jb25zdCBLRVlfQ09ERV9VUF9BUlJPVyA9ICdBcnJvd1VwJztcclxuY29uc3QgS0VZX0NPREVfRU5URVIgPSAnRW50ZXInO1xyXG5jb25zdCBLRVlfQ09ERV9FU0NBUEUgPSAnRXNjYXBlJztcclxuY29uc3QgS0VZX0NPREVfREVMRVRFID0gJ0RlbGV0ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lxLXNlbGVjdDInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pcS1zZWxlY3QyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pcS1zZWxlY3QyLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFt7XHJcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElxU2VsZWN0MkNvbXBvbmVudCksXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG4gIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJcVNlbGVjdDJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZVByb3ZpZGVyOiAodGVybTogc3RyaW5nLCBzZWxlY3RlZD86IGFueVtdKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICBASW5wdXQoKSBzZWxlY3RlZFByb3ZpZGVyOiAoaWRzOiBzdHJpbmdbXSkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgQElucHV0KCkgaXFTZWxlY3QySXRlbUFkYXB0ZXI6IChlbnRpdHk6IGFueSkgPT4gSXFTZWxlY3QySXRlbTtcclxuXHJcbiAgQElucHV0KCkgcmVmZXJlbmNlTW9kZTogJ2lkJyB8ICdlbnRpdHknID0gJ2lkJztcclxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlucHV0Q29udGFpbmVyQ2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWF4UmVzdWx0czogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGNsaWVudE1vZGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBiYWRnZUNvbG9yID0gJ2luZm8nO1xyXG4gIEBJbnB1dCgpIHdyYXBTZWxlY3RlZFRleHQgPSAnbm93cmFwJ1xyXG4gIEBJbnB1dCgpIHByZXZlbnREZXNlbGVjdCA9IGZhbHNlXHJcbiAgQElucHV0KCkgY29uc2VjdXRpdmVNdWx0aXBsZVNlbGVjdGlvbiA9IHRoaXMubXVsdGlwbGVcclxuXHJcbiAgQElucHV0KCkgZGVib3VuY2VEZWxheSA9IDI1MFxyXG4gIEBJbnB1dCgpIGRlYm91bmNlTGVuZ3RoID0gMlxyXG4gIEBJbnB1dCgpIGljb25DYXJldCA9ICcmIzk2NjA7J1xyXG4gIEBJbnB1dCgpIGljb25EZWxldGUgPSAnJiMyMTU7J1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2VNb3JlUmVzdWx0czogc3RyaW5nID0gTWVzc2FnZXMuTU9SRV9SRVNVTFRTO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2VOb1Jlc3VsdHM6IHN0cmluZyA9IE1lc3NhZ2VzLk5PX1JFU1VMVFM7XHJcblxyXG4gIEBPdXRwdXQoKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPElxU2VsZWN0Mkl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPigpO1xyXG4gIEBPdXRwdXQoKSBvblJlbW92ZTogRXZlbnRFbWl0dGVyPElxU2VsZWN0Mkl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdzZWxlY3RDb250YWluZXInKSBjb250YWluZXI6IEVsZW1lbnRSZWZcclxuICBAVmlld0NoaWxkKCd0ZXJtSW5wdXQnKSB0ZXJtSW5wdXQ6IEVsZW1lbnRSZWZcclxuICBAVmlld0NoaWxkKCdyZXN1bHRzJykgcmVzdWx0czogSXFTZWxlY3QyUmVzdWx0c0NvbXBvbmVudDtcclxuXHJcbiAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgdGVybSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICByZXN1bHRzVmlzaWJsZSA9IGZhbHNlO1xyXG4gIHNlYXJjaEZvY3VzZWQgPSBmYWxzZTtcclxuICBsaXN0RGF0YTogSXFTZWxlY3QySXRlbVtdID0gW11cclxuICBmdWxsRGF0YUxpc3Q6IElxU2VsZWN0Mkl0ZW1bXTtcclxuICBzZWxlY3RlZEl0ZW1zOiBJcVNlbGVjdDJJdGVtW10gPSBbXTtcclxuICBwcml2YXRlIHBsYWNlaG9sZGVyU2VsZWN0ZWQgPSAnJztcclxuXHJcbiAgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSAoKSA9PiBmYWxzZVxyXG4gIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSAoKSA9PiBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbmdlc0FuZExvYWREYXRhRnJvbU9ic2VydmFibGUoKTtcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gZXZlbnQgPT4ge1xyXG4gICAgaWYgKCEodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHNlbGVjdGVkVmFsdWVzOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChzZWxlY3RlZFZhbHVlcykge1xyXG4gICAgICBpZiAodGhpcy5yZWZlcmVuY2VNb2RlID09PSAnaWQnKSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUl0ZW1zRnJvbUlkcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUl0ZW1zRnJvbUVudGl0aWVzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gJyc7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZVRvQ2hhbmdlc0FuZExvYWREYXRhRnJvbU9ic2VydmFibGUoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvUmVzdWx0cyh0aGlzLnRlcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VEZWxheSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9SZXN1bHRzKG9ic2VydmFibGU6IE9ic2VydmFibGU8c3RyaW5nPik6IHZvaWQge1xyXG4gICAgb2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICB0YXAoKCkgPT4gdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlKSxcclxuICAgICAgZmlsdGVyKCh0ZXJtKSA9PiB0ZXJtLmxlbmd0aCA+PSB0aGlzLmRlYm91bmNlTGVuZ3RoKSxcclxuICAgICAgc3dpdGNoTWFwKHRlcm0gPT4gdGhpcy5sb2FkRGF0YUZyb21PYnNlcnZhYmxlKHRlcm0pKSxcclxuICAgICAgbWFwKGl0ZW1zID0+IGl0ZW1zLmZpbHRlcihpdGVtID0+ICEodGhpcy5tdWx0aXBsZSAmJiB0aGlzLmFscmVhZHlTZWxlY3RlZChpdGVtKSkpKSxcclxuICAgICAgdGFwKCgpID0+IHRoaXMucmVzdWx0c1Zpc2libGUgPSB0aGlzLnNlYXJjaEZvY3VzZWQpXHJcbiAgICApLnN1YnNjcmliZSgoaXRlbXMpID0+IHRoaXMubGlzdERhdGEgPSBpdGVtcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREYXRhRnJvbU9ic2VydmFibGUodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmNsaWVudE1vZGUgPyB0aGlzLmZldGNoQW5kRmlsdGVyTG9jYWxEYXRhKHRlcm0pIDogdGhpcy5mZXRjaERhdGEodGVybSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoQW5kRmlsdGVyTG9jYWxEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8SXFTZWxlY3QySXRlbVtdPiB7XHJcbiAgICBpZiAoIXRoaXMuZnVsbERhdGFMaXN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZldGNoRGF0YSgnJykucGlwZShcclxuICAgICAgICBtZXJnZU1hcCgoaXRlbXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuZnVsbERhdGFMaXN0ID0gaXRlbXM7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJMb2NhbERhdGEodGVybSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckxvY2FsRGF0YSh0ZXJtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyTG9jYWxEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8SXFTZWxlY3QySXRlbVtdPiB7XHJcbiAgICByZXR1cm4gb2YodGhpcy5mdWxsRGF0YUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaERhdGEodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2VQcm92aWRlcih0ZXJtLCB0aGlzLmJ1aWxkVmFsdWUoKSkucGlwZShtYXAoKGl0ZW1zOiBhbnlbXSkgPT4gaXRlbXMubWFwKChpdGVtKSA9PiB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKGl0ZW0pKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUl0ZW1zRnJvbUVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVXaXRoRW50aXRpZXMoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaXFTZWxlY3QySXRlbSA9IHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbaXFTZWxlY3QySXRlbV07XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IGlxU2VsZWN0Mkl0ZW0udGV4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTXVsdGlwbGVXaXRoRW50aXRpZXMoc2VsZWN0ZWRWYWx1ZXM6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcblxyXG4gICAgc2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKGVudGl0eSk7XHJcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJZHMoKTtcclxuXHJcbiAgICAgIGlmIChpZHMuaW5kZXhPZihpdGVtLmlkKSA9PT0gLTEpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVXaXRoSWRzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlU2luZ2xlV2l0aElkKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTXVsdGlwbGVXaXRoSWRzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIGlmIChzZWxlY3RlZFZhbHVlcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRQcm92aWRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHVuaXF1ZUlkcyA9IFtdO1xyXG4gICAgICBzZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh1bmlxdWVJZHMuaW5kZXhPZihpZCkgPT09IC0xKSB7XHJcbiAgICAgICAgICB1bmlxdWVJZHMucHVzaChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aWRlcih1bmlxdWVJZHMpLnN1YnNjcmliZSgoaXRlbXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gaXRlbXMubWFwKHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU2luZ2xlV2l0aElkKGlkOiBhbnkpIHtcclxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRQcm92aWRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aWRlcihbaWRdKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlxU2VsZWN0Mkl0ZW0gPSB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKGl0ZW0pO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW2lxU2VsZWN0Mkl0ZW1dO1xyXG4gICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gaXFTZWxlY3QySXRlbS50ZXh0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWxyZWFkeVNlbGVjdGVkKGl0ZW06IElxU2VsZWN0Mkl0ZW0pOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaChzZWxlY3RlZEl0ZW0gPT4ge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtLmlkID09PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIG9uSXRlbVNlbGVjdGVkKGl0ZW06IElxU2VsZWN0Mkl0ZW0pIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdERhdGEuaW5kZXhPZihpdGVtLCAwKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLmxpc3REYXRhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5idWlsZFZhbHVlKCkpO1xyXG4gICAgdGhpcy50ZXJtLnBhdGNoVmFsdWUoJycsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcblxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgaWYgKCF0aGlzLmNvbnNlY3V0aXZlTXVsdGlwbGVTZWxlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLmFmdGVySXRlbVNldCgpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gaXRlbS50ZXh0O1xyXG5cclxuICAgICAgdGhpcy5hZnRlckl0ZW1TZXQoKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25TZWxlY3QuZW1pdChpdGVtKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRJZHMoKTogYW55IHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pZClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwID8gbnVsbCA6IHRoaXMuc2VsZWN0ZWRJdGVtc1swXS5pZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RW50aXRpZXMoKTogYW55W10ge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmVudGl0eSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwID8gbnVsbCA6IHRoaXMuc2VsZWN0ZWRJdGVtc1swXS5lbnRpdHk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVJdGVtKGl0ZW06IElxU2VsZWN0Mkl0ZW0pIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmluZGV4T2YoaXRlbSwgMCk7XHJcblxyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuYnVpbGRWYWx1ZSgpKTtcclxuICAgIHRoaXMub25SZW1vdmUuZW1pdChpdGVtKTtcclxuXHJcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZnRlckl0ZW1TZXQoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlckl0ZW1TZXQoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlXHJcbiAgICB0aGlzLnRlcm1JbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFZhbHVlKCkge1xyXG4gICAgcmV0dXJuICdpZCcgPT09IHRoaXMucmVmZXJlbmNlTW9kZSA/IHRoaXMuZ2V0U2VsZWN0ZWRJZHMoKSA6IHRoaXMuZ2V0RW50aXRpZXMoKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKSB7XHJcbiAgICB0aGlzLnRlcm0ucGF0Y2hWYWx1ZSgnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIGZvY3VzKCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMudGVybUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoRm9jdXNlZCA9ICF0aGlzLmRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNBbmRTaG93UmVzdWx0cygpIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnRlcm1JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9SZXN1bHRzKG9mKCcnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gIXRoaXMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWV9DT0RFX0VOVEVSKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLnNlbGVjdEN1cnJlbnRJdGVtKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmRlYm91bmNlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZX0NPREVfRU5URVIgfHwgZXZlbnQua2V5ID09PSBLRVlfQ09ERV9ET1dOX0FSUk9XKSB7XHJcbiAgICAgICAgICB0aGlzLmZvY3VzQW5kU2hvd1Jlc3VsdHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZX0NPREVfRU5URVIpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucmVzdWx0c1Zpc2libGUgJiYgZXZlbnQua2V5LmluY2x1ZGVzKCdBcnJvdycpKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZX0NPREVfRVNDQVBFKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5rZXkgPT09IEtFWV9DT0RFX0RFTEVURSkge1xyXG4gICAgICBjb25zdCB0ZXh0RW50ZXJlZCA9ICF0aGlzLnRlcm0udmFsdWUgfHwgdGhpcy50ZXJtLnZhbHVlLmxlbmd0aCA9PT0gMDtcclxuICAgICAgaWYgKHRleHRFbnRlcmVkICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVzdWx0cykge1xyXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlfQ09ERV9ET1dOX0FSUk9XKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZU5leHQoKTtcclxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IEtFWV9DT0RFX1VQX0FSUk9XKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZVByZXZpb3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmICF0aGlzLnNlYXJjaEZvY3VzZWQpIHtcclxuICAgICAgICByZXR1cm4gJydcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlclxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiAjc2VsZWN0Q29udGFpbmVyIGNsYXNzPVwic2VsZWN0Mi1jb250YWluZXJcIj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cInNlbGVjdDItaW5uZXItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiaW5wdXRDb250YWluZXJDbGFzcyA/IGlucHV0Q29udGFpbmVyQ2xhc3MgOiAnJ1wiXHJcbiAgICBbY2xhc3Muc2ltcGxlLXNlbGVjdGlvbl09XCIhbXVsdGlwbGVcIiBbY2xhc3MubXVsdGlwbGUtc2VsZWN0aW9uXT1cIm11bHRpcGxlXCIgW2NsYXNzLnJlYWRvbmx5XT1cImRpc2FibGVkXCJcclxuICAgIChjbGljayk9XCJmb2N1c0FuZFNob3dSZXN1bHRzKClcIlxyXG4gID5cclxuICAgIDx1bCBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uLWNvbnRhaW5lclwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW11bHRpcGxlOyB0aGVuIGlucHV0XCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3RlZFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3RlZC1pdGVtXCIgW25nU3R5bGVdPVwie3doaXRlU3BhY2U6IHdyYXBTZWxlY3RlZFRleHR9XCIgW3RpdGxlXT1cIml0ZW0udGV4dFwiPnt7aXRlbS50ZXh0fX08L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhcHJldmVudERlc2VsZWN0ICYmICFkaXNhYmxlZFwiIGNsYXNzPVwic2VsZWN0Mi1pY29uIHNlbGVjdDItcmVtb3ZlLWJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVJdGVtKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb24tcmVtb3ZlXCIgW2lubmVySFRNTF09XCJpY29uRGVsZXRlXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2xpPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpcGxlOyB0aGVuIGlucHV0XCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2lucHV0PlxyXG4gICAgICAgIDxsaSAqbmdJZj1cIiFkaXNhYmxlZFwiIGNsYXNzPVwic2VsZWN0Mi1pbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxpbnB1dCAjdGVybUlucHV0IFtmb3JtQ29udHJvbF09XCJ0ZXJtXCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwiZ2V0UGxhY2Vob2xkZXIoKVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChibHVyKT1cIm9uQmx1cigpXCIgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdWw+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIihtdWx0aXBsZSB8fCAoIW11bHRpcGxlICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSlcIiBjbGFzcz1cInNlbGVjdDItaWNvblwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uLWNhcmV0XCIgW2lubmVySFRNTF09XCJpY29uQ2FyZXRcIj48L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGlxLXNlbGVjdDItcmVzdWx0cyAqbmdJZj1cIiFkaXNhYmxlZFwiICNyZXN1bHRzIFtyZXN1bHRzVmlzaWJsZV09XCJyZXN1bHRzVmlzaWJsZVwiXHJcbiAgICBbaXRlbXNdPVwibGlzdERhdGFcIiBbc2VsZWN0ZWRJdGVtc109XCJzZWxlY3RlZEl0ZW1zXCIgW21heFJlc3VsdHNdPVwibWF4UmVzdWx0c1wiXHJcbiAgICBbbWVzc2FnZU1vcmVSZXN1bHRzXT1cIm1lc3NhZ2VNb3JlUmVzdWx0c1wiIFttZXNzYWdlTm9SZXN1bHRzXT1cIm1lc3NhZ2VOb1Jlc3VsdHNcIlxyXG4gICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCIgKG9uSXRlbVNlbGVjdGVkKT1cIm9uSXRlbVNlbGVjdGVkKCRldmVudCk7XCJcclxuICA+XHJcbiAgPC9pcS1zZWxlY3QyLXJlc3VsdHM+XHJcbjwvZGl2PlxyXG4iXX0=
|