ng-select2-component 8.0.2 → 8.0.6

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.
@@ -1,384 +1,388 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/select2-utils.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import { defaultMinCountForSearch, protectRegexp, unicodePatterns } from './select2-const';
7
- export class Select2Utils {
8
- /**
9
- * @param {?} data
10
- * @param {?} value
11
- * @return {?}
12
- */
13
- static getOptionByValue(data, value) {
14
- if (Array.isArray(data)) {
15
- for (const groupOrOption of data) {
16
- /** @type {?} */
17
- const options = ((/** @type {?} */ (groupOrOption))).options;
18
- if (options) {
19
- for (const option of options) {
20
- if (option.value === value) {
21
- return option;
22
- }
23
- }
24
- }
25
- else {
26
- if (((/** @type {?} */ (groupOrOption))).value === value) {
27
- return (/** @type {?} */ (groupOrOption));
28
- }
29
- }
30
- }
31
- }
32
- return null;
33
- }
34
- /**
35
- * @param {?} data
36
- * @param {?} value
37
- * @param {?} multiple
38
- * @return {?}
39
- */
40
- static getOptionsByValue(data, value, multiple) {
41
- if (multiple) {
42
- /** @type {?} */
43
- const values = Array.isArray(value) ? value : [];
44
- /** @type {?} */
45
- const result = [];
46
- for (const v of values) {
47
- /** @type {?} */
48
- const option = Select2Utils.getOptionByValue(data, v);
49
- if (option) {
50
- result.push(option);
51
- }
52
- }
53
- return result;
54
- }
55
- return Select2Utils.getOptionByValue(data, (/** @type {?} */ (value)));
56
- }
57
- /**
58
- * @param {?} data
59
- * @return {?}
60
- */
61
- static getFirstAvailableOption(data) {
62
- if (Array.isArray(data)) {
63
- for (const groupOrOption of data) {
64
- /** @type {?} */
65
- const options = ((/** @type {?} */ (groupOrOption))).options;
66
- if (options) {
67
- for (const option of options) {
68
- if (!option.disabled) {
69
- return option.value;
70
- }
71
- }
72
- }
73
- else {
74
- /** @type {?} */
75
- const option = (/** @type {?} */ (groupOrOption));
76
- if (!option.disabled) {
77
- return option.value;
78
- }
79
- }
80
- }
81
- }
82
- return null;
83
- }
84
- /**
85
- * @private
86
- * @param {?} data
87
- * @return {?}
88
- */
89
- static getOptionsCount(data) {
90
- /** @type {?} */
91
- let count = 0;
92
- if (Array.isArray(data)) {
93
- for (const groupOrOption of data) {
94
- /** @type {?} */
95
- const options = ((/** @type {?} */ (groupOrOption))).options;
96
- if (options) {
97
- count += options.length;
98
- }
99
- else {
100
- count++;
101
- }
102
- }
103
- }
104
- return count;
105
- }
106
- /**
107
- * @param {?} filteredData
108
- * @param {?} value
109
- * @return {?}
110
- */
111
- static valueIsNotInFilteredData(filteredData, value) {
112
- if (Select2Utils.isNullOrUndefined(value)) {
113
- return true;
114
- }
115
- for (const groupOrOption of filteredData) {
116
- /** @type {?} */
117
- const options = ((/** @type {?} */ (groupOrOption))).options;
118
- if (options) {
119
- for (const option of options) {
120
- if (option.value === value) {
121
- return false;
122
- }
123
- }
124
- }
125
- else {
126
- if (((/** @type {?} */ (groupOrOption))).value === value) {
127
- return false;
128
- }
129
- }
130
- }
131
- return true;
132
- }
133
- // tslint:disable-next-line:cognitive-complexity
134
- /**
135
- * @param {?} filteredData
136
- * @param {?} hoveringValue
137
- * @return {?}
138
- */
139
- static getPreviousOption(filteredData, hoveringValue) {
140
- /** @type {?} */
141
- let findIt = Select2Utils.isNullOrUndefined(hoveringValue);
142
- for (let i = filteredData.length - 1; i >= 0; i--) {
143
- /** @type {?} */
144
- const groupOrOption = filteredData[i];
145
- /** @type {?} */
146
- const options = ((/** @type {?} */ (groupOrOption))).options;
147
- if (options) {
148
- for (let j = options.length - 1; j >= 0; j--) {
149
- /** @type {?} */
150
- const option = options[j];
151
- if (findIt) {
152
- if (!option.disabled && !option.hide) {
153
- return option;
154
- }
155
- }
156
- if (!findIt) {
157
- findIt = option.value === hoveringValue;
158
- }
159
- }
160
- }
161
- else {
162
- /** @type {?} */
163
- const option = (/** @type {?} */ (groupOrOption));
164
- if (findIt) {
165
- if (!option.disabled && !option.hide) {
166
- return option;
167
- }
168
- }
169
- if (!findIt) {
170
- findIt = option.value === hoveringValue;
171
- }
172
- }
173
- }
174
- return null;
175
- }
176
- // tslint:disable-next-line:cognitive-complexity
177
- /**
178
- * @param {?} filteredData
179
- * @param {?} hoveringValue
180
- * @return {?}
181
- */
182
- static getNextOption(filteredData, hoveringValue) {
183
- /** @type {?} */
184
- let findIt = Select2Utils.isNullOrUndefined(hoveringValue);
185
- for (const groupOrOption of filteredData) {
186
- /** @type {?} */
187
- const options = ((/** @type {?} */ (groupOrOption))).options;
188
- if (options) {
189
- for (const option of options) {
190
- if (findIt) {
191
- if (!option.disabled && !option.hide) {
192
- return option;
193
- }
194
- }
195
- else if (!findIt) {
196
- findIt = option.value === hoveringValue;
197
- }
198
- }
199
- }
200
- else {
201
- /** @type {?} */
202
- const option = (/** @type {?} */ (groupOrOption));
203
- if (findIt) {
204
- if (!option.disabled && !option.hide) {
205
- return option;
206
- }
207
- }
208
- else if (!findIt) {
209
- findIt = option.value === hoveringValue;
210
- }
211
- }
212
- }
213
- return null;
214
- }
215
- /**
216
- * @private
217
- * @param {?} value
218
- * @return {?}
219
- */
220
- static isNullOrUndefined(value) {
221
- return value === null || value === undefined;
222
- }
223
- /**
224
- * @private
225
- * @param {?} label
226
- * @param {?} searchText
227
- * @param {?} editPattern
228
- * @return {?}
229
- */
230
- static containSearchText(label, searchText, editPattern) {
231
- return searchText
232
- ? Select2Utils
233
- .formatSansUnicode(label)
234
- .match(new RegExp(Select2Utils.formatPattern(searchText, editPattern), 'i')) !== null
235
- : true;
236
- }
237
- /**
238
- * @private
239
- * @param {?} str
240
- * @return {?}
241
- */
242
- static protectPattern(str) {
243
- return str.replace(protectRegexp, '\\$&');
244
- }
245
- /**
246
- * @private
247
- * @param {?} str
248
- * @return {?}
249
- */
250
- static formatSansUnicode(str) {
251
- for (const unicodePattern of unicodePatterns) {
252
- str = str.replace(unicodePattern.s, unicodePattern.l);
253
- }
254
- return str;
255
- }
256
- /**
257
- * @private
258
- * @param {?} str
259
- * @param {?} editPattern
260
- * @return {?}
261
- */
262
- static formatPattern(str, editPattern) {
263
- str = Select2Utils.formatSansUnicode(Select2Utils.protectPattern(str));
264
- if (editPattern && typeof editPattern === 'function') {
265
- str = editPattern(str);
266
- }
267
- return str;
268
- }
269
- /**
270
- * @param {?} data
271
- * @param {?} searchText
272
- * @param {?=} editPattern
273
- * @return {?}
274
- */
275
- static getFilteredData(data, searchText, editPattern) {
276
- if (searchText) {
277
- /** @type {?} */
278
- const result = [];
279
- for (const groupOrOption of data) {
280
- /** @type {?} */
281
- const options = ((/** @type {?} */ (groupOrOption))).options;
282
- if (options) {
283
- if (options.some((/**
284
- * @param {?} group
285
- * @return {?}
286
- */
287
- group => Select2Utils.containSearchText(group.label, searchText, editPattern)))) {
288
- /** @type {?} */
289
- const filteredOptions = options.filter((/**
290
- * @param {?} group
291
- * @return {?}
292
- */
293
- group => Select2Utils.containSearchText(group.label, searchText, editPattern)));
294
- result.push({
295
- label: groupOrOption.label,
296
- options: filteredOptions
297
- });
298
- }
299
- }
300
- else if (Select2Utils.containSearchText(groupOrOption.label, searchText, editPattern)) {
301
- result.push(groupOrOption);
302
- }
303
- }
304
- return result;
305
- }
306
- else {
307
- return data;
308
- }
309
- }
310
- /**
311
- * @param {?} data
312
- * @param {?} selectedOptions
313
- * @return {?}
314
- */
315
- static getFilteredSelectedData(data, selectedOptions) {
316
- /** @type {?} */
317
- const result = [];
318
- for (const groupOrOption of data) {
319
- /** @type {?} */
320
- const options = ((/** @type {?} */ (groupOrOption))).options;
321
- if (options) {
322
- /** @type {?} */
323
- const filteredOptions = options.filter((/**
324
- * @param {?} group
325
- * @return {?}
326
- */
327
- group => Select2Utils.isSelected(selectedOptions, group, true) === 'false'));
328
- if (filteredOptions.length) {
329
- result.push({
330
- label: groupOrOption.label,
331
- options: filteredOptions
332
- });
333
- }
334
- }
335
- else if (Select2Utils.isSelected(selectedOptions, (/** @type {?} */ (groupOrOption)), true) === 'false') {
336
- result.push(groupOrOption);
337
- }
338
- }
339
- return result;
340
- }
341
- /**
342
- * @param {?} data
343
- * @param {?=} minCountForSearch
344
- * @return {?}
345
- */
346
- static isSearchboxHiddex(data, minCountForSearch) {
347
- if (minCountForSearch === '' || minCountForSearch === undefined || minCountForSearch === null || isNaN(+minCountForSearch)) {
348
- minCountForSearch = defaultMinCountForSearch;
349
- }
350
- /** @type {?} */
351
- const optionCount = Select2Utils.getOptionsCount(data);
352
- return optionCount < +minCountForSearch;
353
- }
354
- /**
355
- * @param {?} options
356
- * @param {?} option
357
- * @param {?} multiple
358
- * @return {?}
359
- */
360
- static isSelected(options, option, multiple) {
361
- return multiple
362
- ? options && ((/** @type {?} */ (options)))
363
- .some((/**
364
- * @param {?} op
365
- * @return {?}
366
- */
367
- op => op.value === option.value)) ? 'true' : 'false'
368
- : options && option.value === ((/** @type {?} */ (options))).value ? 'true' : 'false';
369
- }
370
- /**
371
- * @param {?} options
372
- * @param {?} option
373
- * @return {?}
374
- */
375
- static removeSelection(options, option) {
376
- for (let i = 0; i < ((/** @type {?} */ (options))).length; i++) {
377
- if (((/** @type {?} */ (options)))[i].value === option.value) {
378
- ((/** @type {?} */ (options))).splice(i, 1);
379
- return;
380
- }
381
- }
382
- }
383
- }
384
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiJDOi9waXRjaC9uZy1zZWxlY3QyL3Byb2plY3RzL25nLXNlbGVjdDItY29tcG9uZW50L3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3QyLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczRixNQUFNLE9BQU8sWUFBWTs7Ozs7O0lBRXJCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFpQixFQUFFLEtBQXNDO1FBQzdFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksRUFBRTs7c0JBQ3hCLE9BQU8sR0FBRyxDQUFDLG1CQUFBLGFBQWEsRUFBZ0IsQ0FBQyxDQUFDLE9BQU87Z0JBQ3ZELElBQUksT0FBTyxFQUFFO29CQUNULEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO3dCQUMxQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFOzRCQUN4QixPQUFPLE1BQU0sQ0FBQzt5QkFDakI7cUJBQ0o7aUJBQ0o7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLG1CQUFBLGFBQWEsRUFBaUIsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7d0JBQ2xELE9BQU8sbUJBQUEsYUFBYSxFQUFpQixDQUFDO3FCQUN6QztpQkFDSjthQUNKO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs7Ozs7O0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUNwQixJQUFpQixFQUNqQixLQUE0QyxFQUM1QyxRQUFvQztRQUVwQyxJQUFJLFFBQVEsRUFBRTs7a0JBQ0osTUFBTSxHQUFtQixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMs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TUFBcUI7UUFDekYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsbUJBQUEsT0FBTyxFQUFtQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFELElBQUksQ0FBQyxtQkFBQSxPQUFPLEVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDeEQsQ0FBQyxtQkFBQSxPQUFPLEVBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPO2FBQ1Y7U0FDSjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmF1bHRNaW5Db3VudEZvclNlYXJjaCwgcHJvdGVjdFJlZ2V4cCwgdW5pY29kZVBhdHRlcm5zIH0gZnJvbSAnLi9zZWxlY3QyLWNvbnN0JztcclxuaW1wb3J0IHsgU2VsZWN0MkRhdGEsIFNlbGVjdDJHcm91cCwgU2VsZWN0Mk9wdGlvbiwgU2VsZWN0MlVwZGF0ZVZhbHVlLCBTZWxlY3QyVmFsdWUgfSBmcm9tICcuL3NlbGVjdDItaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0MlV0aWxzIHtcclxuXHJcbiAgICBzdGF0aWMgZ2V0T3B0aW9uQnlWYWx1ZShkYXRhOiBTZWxlY3QyRGF0YSwgdmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb24pLnZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0T3B0aW9uc0J5VmFsdWUoXHJcbiAgICAgICAgZGF0YTogU2VsZWN0MkRhdGEsXHJcbiAgICAgICAgdmFsdWU6IFNlbGVjdDJVcGRhdGVWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgbXVsdGlwbGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgICBpZiAobXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzOiBTZWxlY3QyVmFsdWVbXSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBTZWxlY3QyT3B0aW9uW10gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gU2VsZWN0MlV0aWxzLmdldE9wdGlvbkJ5VmFsdWUoZGF0YSwgdik7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gob3B0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU2VsZWN0MlV0aWxzLmdldE9wdGlvbkJ5VmFsdWUoZGF0YSwgdmFsdWUgYXMgU2VsZWN0MlZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldEZpcnN0QXZhaWxhYmxlT3B0aW9uKGRhdGE6IFNlbGVjdDJEYXRhKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRPcHRpb25zQ291bnQoZGF0YTogU2VsZWN0MkRhdGEpIHtcclxuICAgICAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBvcHRpb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHZhbHVlSXNOb3RJbkZpbHRlcmVkRGF0YShmaWx0ZXJlZERhdGE6IFNlbGVjdDJEYXRhLCB2YWx1ZTogU2VsZWN0MlZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChTZWxlY3QyVXRpbHMuaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZmlsdGVyZWREYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uKS52YWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvZ25pdGl2ZS1jb21wbGV4aXR5XHJcbiAgICBzdGF0aWMgZ2V0UHJldmlvdXNPcHRpb24oZmlsdGVyZWREYXRhOiBTZWxlY3QyRGF0YSwgaG92ZXJpbmdWYWx1ZTogU2VsZWN0MlZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGxldCBmaW5kSXQgPSBTZWxlY3QyVXRpbHMuaXNOdWxsT3JVbmRlZmluZWQoaG92ZXJpbmdWYWx1ZSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGZpbHRlcmVkRGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cE9yT3B0aW9uID0gZmlsdGVyZWREYXRhW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IG9wdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmluZEl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoZmluZEl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFmaW5kSXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaW5kSXQgPSBvcHRpb24udmFsdWUgPT09IGhvdmVyaW5nVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29nbml0aXZlLWNvbXBsZXhpdHlcclxuICAgIHN0YXRpYyBnZXROZXh0T3B0aW9uKGZpbHRlcmVkRGF0YTogU2VsZWN0MkRhdGEsIGhvdmVyaW5nVmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICBsZXQgZmluZEl0ID0gU2VsZWN0MlV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKGhvdmVyaW5nVmFsdWUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBmaWx0ZXJlZERhdGEpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaGlkZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpbmRJdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kSXQgPSBvcHRpb24udmFsdWUgPT09IGhvdmVyaW5nVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbmRJdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaGlkZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpbmRJdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgY29udGFpblNlYXJjaFRleHQoXHJcbiAgICAgICAgbGFiZWw6IHN0cmluZyxcclxuICAgICAgICBzZWFyY2hUZXh0OiBzdHJpbmcgfCBudWxsLFxyXG4gICAgICAgIGVkaXRQYXR0ZXJuOiAoKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkXHJcbiAgICApOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc2VhcmNoVGV4dFxyXG4gICAgICAgICAgICA/IFNlbGVjdDJVdGlsc1xyXG4gICAgICAgICAgICAgICAgLmZvcm1hdFNhbnNVbmljb2RlKGxhYmVsKVxyXG4gICAgICAgICAgICAgICAgLm1hdGNoKG5ldyBSZWdFeHAoU2VsZWN0MlV0aWxzLmZvcm1hdFBhdHRlcm4oc2VhcmNoVGV4dCwgZWRpdFBhdHRlcm4pLCAnaScpKSAhPT0gbnVsbFxyXG4gICAgICAgICAgICA6IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcHJvdGVjdFBhdHRlcm4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShwcm90ZWN0UmVnZXhwLCAnXFxcXCQmJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9ybWF0U2Fuc1VuaWNvZGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGZvciAoY29uc3QgdW5pY29kZVBhdHRlcm4gb2YgdW5pY29kZVBhdHRlcm5zKSB7XHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKHVuaWNvZGVQYXR0ZXJuLnMsIHVuaWNvZGVQYXR0ZXJuLmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGZvcm1hdFBhdHRlcm4oc3RyOiBzdHJpbmcsIGVkaXRQYXR0ZXJuOiAoKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgICAgICBzdHIgPSBTZWxlY3QyVXRpbHMuZm9ybWF0U2Fuc1VuaWNvZGUoU2VsZWN0MlV0aWxzLnByb3RlY3RQYXR0ZXJuKHN0cikpO1xyXG5cclxuICAgICAgICBpZiAoZWRpdFBhdHRlcm4gJiYgdHlwZW9mIGVkaXRQYXR0ZXJuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHN0ciA9IGVkaXRQYXR0ZXJuKHN0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldEZpbHRlcmVkRGF0YShkYXRhOiBTZWxlY3QyRGF0YSwgc2VhcmNoVGV4dDogc3RyaW5nIHwgbnVsbCwgZWRpdFBhdHRlcm4/OiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZyk6IFNlbGVjdDJEYXRhIHtcclxuICAgICAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJEYXRhID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zb21lKGdyb3VwID0+IFNlbGVjdDJVdGlscy5jb250YWluU2VhcmNoVGV4dChncm91cC5sYWJlbCwgc2VhcmNoVGV4dCwgZWRpdFBhdHRlcm4pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0+IFNlbGVjdDJVdGlscy5jb250YWluU2VhcmNoVGV4dChncm91cC5sYWJlbCwgc2VhcmNoVGV4dCwgZWRpdFBhdHRlcm4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBncm91cE9yT3B0aW9uLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoU2VsZWN0MlV0aWxzLmNvbnRhaW5TZWFyY2hUZXh0KGdyb3VwT3JPcHRpb24ubGFiZWwsIHNlYXJjaFRleHQsIGVkaXRQYXR0ZXJuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdyb3VwT3JPcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRGaWx0ZXJlZFNlbGVjdGVkRGF0YShkYXRhOiBTZWxlY3QyRGF0YSwgc2VsZWN0ZWRPcHRpb25zOiBTZWxlY3QyT3B0aW9uIHwgU2VsZWN0Mk9wdGlvbltdIHwgbnVsbCk6IFNlbGVjdDJEYXRhIHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJEYXRhID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwID0+IFNlbGVjdDJVdGlscy5pc1NlbGVjdGVkKHNlbGVjdGVkT3B0aW9ucywgZ3JvdXAsIHRydWUpID09PSAnZmFsc2UnXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBncm91cE9yT3B0aW9uLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBmaWx0ZXJlZE9wdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChTZWxlY3QyVXRpbHMuaXNTZWxlY3RlZChzZWxlY3RlZE9wdGlvbnMsIGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbiwgdHJ1ZSkgPT09ICdmYWxzZScpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdyb3VwT3JPcHRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzU2VhcmNoYm94SGlkZGV4KGRhdGE6IFNlbGVjdDJEYXRhLCBtaW5Db3VudEZvclNlYXJjaD86IG51bWJlciB8IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChtaW5Db3VudEZvclNlYXJjaCA9PT0gJycgfHwgbWluQ291bnRGb3JTZWFyY2ggPT09IHVuZGVmaW5lZCB8fCBtaW5Db3VudEZvclNlYXJjaCA9PT0gbnVsbCB8fCBpc05hTigrbWluQ291bnRGb3JTZWFyY2gpKSB7XHJcbiAgICAgICAgICAgIG1pbkNvdW50Rm9yU2VhcmNoID0gZGVmYXVsdE1pbkNvdW50Rm9yU2VhcmNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25Db3VudCA9IFNlbGVjdDJVdGlscy5nZXRPcHRpb25zQ291bnQoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbkNvdW50IDwgK21pbkNvdW50Rm9yU2VhcmNoO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc1NlbGVjdGVkKFxyXG4gICAgICAgIG9wdGlvbnM6IFNlbGVjdDJPcHRpb24gfCBTZWxlY3QyT3B0aW9uW10gfCBudWxsLFxyXG4gICAgICAgIG9wdGlvbjogU2VsZWN0Mk9wdGlvbixcclxuICAgICAgICBtdWx0aXBsZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybiBtdWx0aXBsZVxyXG4gICAgICAgICAgICA/IG9wdGlvbnMgJiYgKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbltdKVxyXG4gICAgICAgICAgICAgICAgLnNvbWUob3AgPT4gb3AudmFsdWUgPT09IG9wdGlvbi52YWx1ZSkgPyAndHJ1ZScgOiAnZmFsc2UnXHJcbiAgICAgICAgICAgIDogb3B0aW9ucyAmJiBvcHRpb24udmFsdWUgPT09IChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb24pLnZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJztcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcmVtb3ZlU2VsZWN0aW9uKG9wdGlvbnM6IFNlbGVjdDJPcHRpb24gfCBTZWxlY3QyT3B0aW9uW10gfCBudWxsLCBvcHRpb246IFNlbGVjdDJPcHRpb24pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb25bXSkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb25bXSlbaV0udmFsdWUgPT09IG9wdGlvbi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbltdKS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * Generated from: lib/select2-utils.ts
4
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
+ */
6
+ import { defaultMinCountForSearch, protectRegexp, unicodePatterns } from './select2-const';
7
+ export class Select2Utils {
8
+ /**
9
+ * @param {?} data
10
+ * @param {?} value
11
+ * @return {?}
12
+ */
13
+ static getOptionByValue(data, value) {
14
+ if (Array.isArray(data)) {
15
+ for (const groupOrOption of data) {
16
+ /** @type {?} */
17
+ const options = ((/** @type {?} */ (groupOrOption))).options;
18
+ if (options) {
19
+ for (const option of options) {
20
+ if (option.value === value) {
21
+ return option;
22
+ }
23
+ }
24
+ }
25
+ else {
26
+ if (((/** @type {?} */ (groupOrOption))).value === value) {
27
+ return (/** @type {?} */ (groupOrOption));
28
+ }
29
+ }
30
+ }
31
+ }
32
+ return null;
33
+ }
34
+ /**
35
+ * @param {?} data
36
+ * @param {?} value
37
+ * @param {?} multiple
38
+ * @return {?}
39
+ */
40
+ static getOptionsByValue(data, value, multiple) {
41
+ if (multiple) {
42
+ /** @type {?} */
43
+ const values = Array.isArray(value) ? value : [];
44
+ /** @type {?} */
45
+ const result = [];
46
+ for (const v of values) {
47
+ /** @type {?} */
48
+ const option = Select2Utils.getOptionByValue(data, v);
49
+ if (option) {
50
+ result.push(option);
51
+ }
52
+ }
53
+ return result;
54
+ }
55
+ return Select2Utils.getOptionByValue(data, (/** @type {?} */ (value)));
56
+ }
57
+ /**
58
+ * @param {?} data
59
+ * @return {?}
60
+ */
61
+ static getFirstAvailableOption(data) {
62
+ if (Array.isArray(data)) {
63
+ for (const groupOrOption of data) {
64
+ /** @type {?} */
65
+ const options = ((/** @type {?} */ (groupOrOption))).options;
66
+ if (options) {
67
+ for (const option of options) {
68
+ if (!option.disabled) {
69
+ return option.value;
70
+ }
71
+ }
72
+ }
73
+ else {
74
+ /** @type {?} */
75
+ const option = (/** @type {?} */ (groupOrOption));
76
+ if (!option.disabled) {
77
+ return option.value;
78
+ }
79
+ }
80
+ }
81
+ }
82
+ return null;
83
+ }
84
+ /**
85
+ * @private
86
+ * @param {?} data
87
+ * @return {?}
88
+ */
89
+ static getOptionsCount(data) {
90
+ /** @type {?} */
91
+ let count = 0;
92
+ if (Array.isArray(data)) {
93
+ for (const groupOrOption of data) {
94
+ /** @type {?} */
95
+ const options = ((/** @type {?} */ (groupOrOption))).options;
96
+ if (options) {
97
+ count += options.length;
98
+ }
99
+ else {
100
+ count++;
101
+ }
102
+ }
103
+ }
104
+ return count;
105
+ }
106
+ /**
107
+ * @param {?} filteredData
108
+ * @param {?} value
109
+ * @return {?}
110
+ */
111
+ static valueIsNotInFilteredData(filteredData, value) {
112
+ if (Select2Utils.isNullOrUndefined(value)) {
113
+ return true;
114
+ }
115
+ for (const groupOrOption of filteredData) {
116
+ /** @type {?} */
117
+ const options = ((/** @type {?} */ (groupOrOption))).options;
118
+ if (options) {
119
+ for (const option of options) {
120
+ if (option.value === value) {
121
+ return false;
122
+ }
123
+ }
124
+ }
125
+ else {
126
+ if (((/** @type {?} */ (groupOrOption))).value === value) {
127
+ return false;
128
+ }
129
+ }
130
+ }
131
+ return true;
132
+ }
133
+ // tslint:disable-next-line:cognitive-complexity
134
+ /**
135
+ * @param {?} filteredData
136
+ * @param {?} hoveringValue
137
+ * @return {?}
138
+ */
139
+ static getPreviousOption(filteredData, hoveringValue) {
140
+ /** @type {?} */
141
+ let findIt = Select2Utils.isNullOrUndefined(hoveringValue);
142
+ for (let i = filteredData.length - 1; i >= 0; i--) {
143
+ /** @type {?} */
144
+ const groupOrOption = filteredData[i];
145
+ /** @type {?} */
146
+ const options = ((/** @type {?} */ (groupOrOption))).options;
147
+ if (options) {
148
+ for (let j = options.length - 1; j >= 0; j--) {
149
+ /** @type {?} */
150
+ const option = options[j];
151
+ if (findIt) {
152
+ if (!option.disabled && !option.hide) {
153
+ return option;
154
+ }
155
+ }
156
+ if (!findIt) {
157
+ findIt = option.value === hoveringValue;
158
+ }
159
+ }
160
+ }
161
+ else {
162
+ /** @type {?} */
163
+ const option = (/** @type {?} */ (groupOrOption));
164
+ if (findIt) {
165
+ if (!option.disabled && !option.hide) {
166
+ return option;
167
+ }
168
+ }
169
+ if (!findIt) {
170
+ findIt = option.value === hoveringValue;
171
+ }
172
+ }
173
+ }
174
+ return null;
175
+ }
176
+ // tslint:disable-next-line:cognitive-complexity
177
+ /**
178
+ * @param {?} filteredData
179
+ * @param {?} hoveringValue
180
+ * @return {?}
181
+ */
182
+ static getNextOption(filteredData, hoveringValue) {
183
+ /** @type {?} */
184
+ let findIt = Select2Utils.isNullOrUndefined(hoveringValue);
185
+ for (const groupOrOption of filteredData) {
186
+ /** @type {?} */
187
+ const options = ((/** @type {?} */ (groupOrOption))).options;
188
+ if (options) {
189
+ for (const option of options) {
190
+ if (findIt) {
191
+ if (!option.disabled && !option.hide) {
192
+ return option;
193
+ }
194
+ }
195
+ else if (!findIt) {
196
+ findIt = option.value === hoveringValue;
197
+ }
198
+ }
199
+ }
200
+ else {
201
+ /** @type {?} */
202
+ const option = (/** @type {?} */ (groupOrOption));
203
+ if (findIt) {
204
+ if (!option.disabled && !option.hide) {
205
+ return option;
206
+ }
207
+ }
208
+ else if (!findIt) {
209
+ findIt = option.value === hoveringValue;
210
+ }
211
+ }
212
+ }
213
+ return null;
214
+ }
215
+ /**
216
+ * @private
217
+ * @param {?} value
218
+ * @return {?}
219
+ */
220
+ static isNullOrUndefined(value) {
221
+ return value === null || value === undefined;
222
+ }
223
+ /**
224
+ * @private
225
+ * @param {?} label
226
+ * @param {?} searchText
227
+ * @param {?} editPattern
228
+ * @return {?}
229
+ */
230
+ static containSearchText(label, searchText, editPattern) {
231
+ return searchText
232
+ ? Select2Utils.formatSansUnicode(label).match(new RegExp(Select2Utils.formatPattern(searchText, editPattern), 'i')) !== null
233
+ : true;
234
+ }
235
+ /**
236
+ * @private
237
+ * @param {?} str
238
+ * @return {?}
239
+ */
240
+ static protectPattern(str) {
241
+ return str.replace(protectRegexp, '\\$&');
242
+ }
243
+ /**
244
+ * @private
245
+ * @param {?} str
246
+ * @return {?}
247
+ */
248
+ static formatSansUnicode(str) {
249
+ for (const unicodePattern of unicodePatterns) {
250
+ str = str.replace(unicodePattern.s, unicodePattern.l);
251
+ }
252
+ return str;
253
+ }
254
+ /**
255
+ * @private
256
+ * @param {?} str
257
+ * @param {?} editPattern
258
+ * @return {?}
259
+ */
260
+ static formatPattern(str, editPattern) {
261
+ str = Select2Utils.formatSansUnicode(Select2Utils.protectPattern(str));
262
+ if (editPattern && typeof editPattern === 'function') {
263
+ str = editPattern(str);
264
+ }
265
+ return str;
266
+ }
267
+ /**
268
+ * @param {?} data
269
+ * @param {?} searchText
270
+ * @param {?=} editPattern
271
+ * @return {?}
272
+ */
273
+ static getFilteredData(data, searchText, editPattern) {
274
+ if (searchText) {
275
+ /** @type {?} */
276
+ const result = [];
277
+ for (const groupOrOption of data) {
278
+ /** @type {?} */
279
+ const options = ((/** @type {?} */ (groupOrOption))).options;
280
+ if (options) {
281
+ if (options.some((/**
282
+ * @param {?} group
283
+ * @return {?}
284
+ */
285
+ group => Select2Utils.containSearchText(group.label, searchText, editPattern)))) {
286
+ /** @type {?} */
287
+ const filteredOptions = options.filter((/**
288
+ * @param {?} group
289
+ * @return {?}
290
+ */
291
+ group => Select2Utils.containSearchText(group.label, searchText, editPattern)));
292
+ result.push({
293
+ label: groupOrOption.label,
294
+ options: filteredOptions,
295
+ });
296
+ }
297
+ }
298
+ else if (Select2Utils.containSearchText(groupOrOption.label, searchText, editPattern)) {
299
+ result.push(groupOrOption);
300
+ }
301
+ }
302
+ return result;
303
+ }
304
+ else {
305
+ return data;
306
+ }
307
+ }
308
+ /**
309
+ * @param {?} data
310
+ * @param {?} selectedOptions
311
+ * @return {?}
312
+ */
313
+ static getFilteredSelectedData(data, selectedOptions) {
314
+ /** @type {?} */
315
+ const result = [];
316
+ for (const groupOrOption of data) {
317
+ /** @type {?} */
318
+ const options = ((/** @type {?} */ (groupOrOption))).options;
319
+ if (options) {
320
+ /** @type {?} */
321
+ const filteredOptions = options.filter((/**
322
+ * @param {?} group
323
+ * @return {?}
324
+ */
325
+ group => Select2Utils.isSelected(selectedOptions, group, true) === 'false'));
326
+ if (filteredOptions.length) {
327
+ result.push({
328
+ label: groupOrOption.label,
329
+ options: filteredOptions,
330
+ });
331
+ }
332
+ }
333
+ else if (Select2Utils.isSelected(selectedOptions, (/** @type {?} */ (groupOrOption)), true) === 'false') {
334
+ result.push(groupOrOption);
335
+ }
336
+ }
337
+ return result;
338
+ }
339
+ /**
340
+ * @param {?} data
341
+ * @param {?=} minCountForSearch
342
+ * @return {?}
343
+ */
344
+ static isSearchboxHiddex(data, minCountForSearch) {
345
+ if (minCountForSearch === '' ||
346
+ minCountForSearch === undefined ||
347
+ minCountForSearch === null ||
348
+ isNaN(+minCountForSearch)) {
349
+ minCountForSearch = defaultMinCountForSearch;
350
+ }
351
+ /** @type {?} */
352
+ const optionCount = Select2Utils.getOptionsCount(data);
353
+ return optionCount < +minCountForSearch;
354
+ }
355
+ /**
356
+ * @param {?} options
357
+ * @param {?} option
358
+ * @param {?} multiple
359
+ * @return {?}
360
+ */
361
+ static isSelected(options, option, multiple) {
362
+ return multiple
363
+ ? options && ((/** @type {?} */ (options))).some((/**
364
+ * @param {?} op
365
+ * @return {?}
366
+ */
367
+ op => op.value === option.value))
368
+ ? 'true'
369
+ : 'false'
370
+ : options && option.value === ((/** @type {?} */ (options))).value
371
+ ? 'true'
372
+ : 'false';
373
+ }
374
+ /**
375
+ * @param {?} options
376
+ * @param {?} option
377
+ * @return {?}
378
+ */
379
+ static removeSelection(options, option) {
380
+ for (let i = 0; i < ((/** @type {?} */ (options))).length; i++) {
381
+ if (((/** @type {?} */ (options)))[i].value === option.value) {
382
+ ((/** @type {?} */ (options))).splice(i, 1);
383
+ return;
384
+ }
385
+ }
386
+ }
387
+ }
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIvbWVkaWEvemVmbGluZy9aQUlERS02L0dpdC9uZy1zZWxlY3QyL3Byb2plY3RzL25nLXNlbGVjdDItY29tcG9uZW50L3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3QyLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczRixNQUFNLE9BQU8sWUFBWTs7Ozs7O0lBQ3JCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFpQixFQUFFLEtBQXNDO1FBQzdFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksRUFBRTs7c0JBQ3hCLE9BQU8sR0FBRyxDQUFDLG1CQUFBLGFBQWEsRUFBZ0IsQ0FBQyxDQUFDLE9BQU87Z0JBQ3ZELElBQUksT0FBTyxFQUFFO29CQUNULEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO3dCQUMxQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFOzRCQUN4QixPQUFPLE1BQU0sQ0FBQzt5QkFDakI7cUJBQ0o7aUJBQ0o7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLG1CQUFBLGFBQWEsRUFBaUIsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7d0JBQ2xELE9BQU8sbUJBQUEsYUFBYSxFQUFpQixDQUFDO3FCQUN6QztpQkFDSjthQUNKO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs7Ozs7O0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUNwQixJQUFpQixFQUNqQixLQUE0QyxFQUM1QyxRQUFvQztRQUVwQyxJQUFJLFFBQVEsRUFBRTs7a0JBQ0osTUFBTSxHQUFtQixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENB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LENBQUMsZUFBZSxDQUFDLE9BQStDLEVBQUUsTUFBcUI7UUFDekYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsbUJBQUEsT0FBTyxFQUFtQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFELElBQUksQ0FBQyxtQkFBQSxPQUFPLEVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDeEQsQ0FBQyxtQkFBQSxPQUFPLEVBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPO2FBQ1Y7U0FDSjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmF1bHRNaW5Db3VudEZvclNlYXJjaCwgcHJvdGVjdFJlZ2V4cCwgdW5pY29kZVBhdHRlcm5zIH0gZnJvbSAnLi9zZWxlY3QyLWNvbnN0JztcbmltcG9ydCB7IFNlbGVjdDJEYXRhLCBTZWxlY3QyR3JvdXAsIFNlbGVjdDJPcHRpb24sIFNlbGVjdDJVcGRhdGVWYWx1ZSwgU2VsZWN0MlZhbHVlIH0gZnJvbSAnLi9zZWxlY3QyLWludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgU2VsZWN0MlV0aWxzIHtcbiAgICBzdGF0aWMgZ2V0T3B0aW9uQnlWYWx1ZShkYXRhOiBTZWxlY3QyRGF0YSwgdmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbikudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRPcHRpb25zQnlWYWx1ZShcbiAgICAgICAgZGF0YTogU2VsZWN0MkRhdGEsXG4gICAgICAgIHZhbHVlOiBTZWxlY3QyVXBkYXRlVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgICAgICBtdWx0aXBsZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgKSB7XG4gICAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzOiBTZWxlY3QyVmFsdWVbXSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogU2VsZWN0Mk9wdGlvbltdID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gU2VsZWN0MlV0aWxzLmdldE9wdGlvbkJ5VmFsdWUoZGF0YSwgdik7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChvcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNlbGVjdDJVdGlscy5nZXRPcHRpb25CeVZhbHVlKGRhdGEsIHZhbHVlIGFzIFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRGaXJzdEF2YWlsYWJsZU9wdGlvbihkYXRhOiBTZWxlY3QyRGF0YSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0T3B0aW9uc0NvdW50KGRhdGE6IFNlbGVjdDJEYXRhKSB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gb3B0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cblxuICAgIHN0YXRpYyB2YWx1ZUlzTm90SW5GaWx0ZXJlZERhdGEoZmlsdGVyZWREYXRhOiBTZWxlY3QyRGF0YSwgdmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKFNlbGVjdDJVdGlscy5pc051bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBmaWx0ZXJlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb24pLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb2duaXRpdmUtY29tcGxleGl0eVxuICAgIHN0YXRpYyBnZXRQcmV2aW91c09wdGlvbihmaWx0ZXJlZERhdGE6IFNlbGVjdDJEYXRhLCBob3ZlcmluZ1ZhbHVlOiBTZWxlY3QyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBmaW5kSXQgPSBTZWxlY3QyVXRpbHMuaXNOdWxsT3JVbmRlZmluZWQoaG92ZXJpbmdWYWx1ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSBmaWx0ZXJlZERhdGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwT3JPcHRpb24gPSBmaWx0ZXJlZERhdGFbaV07XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gb3B0aW9ucy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kSXQgPSBvcHRpb24udmFsdWUgPT09IGhvdmVyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaGlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWZpbmRJdCkge1xuICAgICAgICAgICAgICAgICAgICBmaW5kSXQgPSBvcHRpb24udmFsdWUgPT09IGhvdmVyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29nbml0aXZlLWNvbXBsZXhpdHlcbiAgICBzdGF0aWMgZ2V0TmV4dE9wdGlvbihmaWx0ZXJlZERhdGE6IFNlbGVjdDJEYXRhLCBob3ZlcmluZ1ZhbHVlOiBTZWxlY3QyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBmaW5kSXQgPSBTZWxlY3QyVXRpbHMuaXNOdWxsT3JVbmRlZmluZWQoaG92ZXJpbmdWYWx1ZSk7XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBmaWx0ZXJlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRJdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kSXQgPSBvcHRpb24udmFsdWUgPT09IGhvdmVyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaGlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpbmRJdCkge1xuICAgICAgICAgICAgICAgICAgICBmaW5kSXQgPSBvcHRpb24udmFsdWUgPT09IGhvdmVyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY29udGFpblNlYXJjaFRleHQoXG4gICAgICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgICAgIHNlYXJjaFRleHQ6IHN0cmluZyB8IG51bGwsXG4gICAgICAgIGVkaXRQYXR0ZXJuOiAoKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkLFxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc2VhcmNoVGV4dFxuICAgICAgICAgICAgPyBTZWxlY3QyVXRpbHMuZm9ybWF0U2Fuc1VuaWNvZGUobGFiZWwpLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChTZWxlY3QyVXRpbHMuZm9ybWF0UGF0dGVybihzZWFyY2hUZXh0LCBlZGl0UGF0dGVybiksICdpJyksXG4gICAgICAgICAgICAgICkgIT09IG51bGxcbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBwcm90ZWN0UGF0dGVybihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShwcm90ZWN0UmVnZXhwLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9ybWF0U2Fuc1VuaWNvZGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBmb3IgKGNvbnN0IHVuaWNvZGVQYXR0ZXJuIG9mIHVuaWNvZGVQYXR0ZXJucykge1xuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UodW5pY29kZVBhdHRlcm4ucywgdW5pY29kZVBhdHRlcm4ubCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBmb3JtYXRQYXR0ZXJuKHN0cjogc3RyaW5nLCBlZGl0UGF0dGVybjogKChzdHI6IHN0cmluZykgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgICAgIHN0ciA9IFNlbGVjdDJVdGlscy5mb3JtYXRTYW5zVW5pY29kZShTZWxlY3QyVXRpbHMucHJvdGVjdFBhdHRlcm4oc3RyKSk7XG5cbiAgICAgICAgaWYgKGVkaXRQYXR0ZXJuICYmIHR5cGVvZiBlZGl0UGF0dGVybiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RyID0gZWRpdFBhdHRlcm4oc3RyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRGaWx0ZXJlZERhdGEoXG4gICAgICAgIGRhdGE6IFNlbGVjdDJEYXRhLFxuICAgICAgICBzZWFyY2hUZXh0OiBzdHJpbmcgfCBudWxsLFxuICAgICAgICBlZGl0UGF0dGVybj86IChzdHI6IHN0cmluZykgPT4gc3RyaW5nLFxuICAgICk6IFNlbGVjdDJEYXRhIHtcbiAgICAgICAgaWYgKHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogU2VsZWN0MkRhdGEgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zb21lKGdyb3VwID0+IFNlbGVjdDJVdGlscy5jb250YWluU2VhcmNoVGV4dChncm91cC5sYWJlbCwgc2VhcmNoVGV4dCwgZWRpdFBhdHRlcm4pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoZ3JvdXAgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QyVXRpbHMuY29udGFpblNlYXJjaFRleHQoZ3JvdXAubGFiZWwsIHNlYXJjaFRleHQsIGVkaXRQYXR0ZXJuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGdyb3VwT3JPcHRpb24ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNlbGVjdDJVdGlscy5jb250YWluU2VhcmNoVGV4dChncm91cE9yT3B0aW9uLmxhYmVsLCBzZWFyY2hUZXh0LCBlZGl0UGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBPck9wdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEZpbHRlcmVkU2VsZWN0ZWREYXRhKFxuICAgICAgICBkYXRhOiBTZWxlY3QyRGF0YSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBTZWxlY3QyT3B0aW9uIHwgU2VsZWN0Mk9wdGlvbltdIHwgbnVsbCxcbiAgICApOiBTZWxlY3QyRGF0YSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogU2VsZWN0MkRhdGEgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICBncm91cCA9PiBTZWxlY3QyVXRpbHMuaXNTZWxlY3RlZChzZWxlY3RlZE9wdGlvbnMsIGdyb3VwLCB0cnVlKSA9PT0gJ2ZhbHNlJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBncm91cE9yT3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFNlbGVjdDJVdGlscy5pc1NlbGVjdGVkKHNlbGVjdGVkT3B0aW9ucywgZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uLCB0cnVlKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdyb3VwT3JPcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzU2VhcmNoYm94SGlkZGV4KGRhdGE6IFNlbGVjdDJEYXRhLCBtaW5Db3VudEZvclNlYXJjaD86IG51bWJlciB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBtaW5Db3VudEZvclNlYXJjaCA9PT0gJycgfHxcbiAgICAgICAgICAgIG1pbkNvdW50Rm9yU2VhcmNoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG1pbkNvdW50Rm9yU2VhcmNoID09PSBudWxsIHx8XG4gICAgICAgICAgICBpc05hTigrbWluQ291bnRGb3JTZWFyY2gpXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWluQ291bnRGb3JTZWFyY2ggPSBkZWZhdWx0TWluQ291bnRGb3JTZWFyY2g7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uQ291bnQgPSBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uc0NvdW50KGRhdGEpO1xuICAgICAgICByZXR1cm4gb3B0aW9uQ291bnQgPCArbWluQ291bnRGb3JTZWFyY2g7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzU2VsZWN0ZWQoXG4gICAgICAgIG9wdGlvbnM6IFNlbGVjdDJPcHRpb24gfCBTZWxlY3QyT3B0aW9uW10gfCBudWxsLFxuICAgICAgICBvcHRpb246IFNlbGVjdDJPcHRpb24sXG4gICAgICAgIG11bHRpcGxlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIG11bHRpcGxlXG4gICAgICAgICAgICA/IG9wdGlvbnMgJiYgKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbltdKS5zb21lKG9wID0+IG9wLnZhbHVlID09PSBvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgICAgICAgICA6ICdmYWxzZSdcbiAgICAgICAgICAgIDogb3B0aW9ucyAmJiBvcHRpb24udmFsdWUgPT09IChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb24pLnZhbHVlXG4gICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIHN0YXRpYyByZW1vdmVTZWxlY3Rpb24ob3B0aW9uczogU2VsZWN0Mk9wdGlvbiB8IFNlbGVjdDJPcHRpb25bXSB8IG51bGwsIG9wdGlvbjogU2VsZWN0Mk9wdGlvbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb25bXSkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyBhcyBTZWxlY3QyT3B0aW9uW10pW2ldLnZhbHVlID09PSBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAob3B0aW9ucyBhcyBTZWxlY3QyT3B0aW9uW10pLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=