ng-select2-component 8.0.6 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/README.md +46 -38
  3. package/esm2020/lib/select2-const.mjs +48 -0
  4. package/esm2020/lib/select2-hint.component.mjs +11 -0
  5. package/esm2020/lib/select2-interfaces.mjs +2 -0
  6. package/esm2020/lib/select2-label.component.mjs +11 -0
  7. package/esm2020/lib/select2-utils.mjs +280 -0
  8. package/esm2020/lib/select2.component.mjs +871 -0
  9. package/esm2020/lib/select2.module.mjs +23 -0
  10. package/esm2020/ng-select2-component.mjs +5 -0
  11. package/esm2020/public_api.mjs +12 -0
  12. package/fesm2015/ng-select2-component.mjs +1241 -0
  13. package/fesm2015/ng-select2-component.mjs.map +1 -0
  14. package/fesm2020/ng-select2-component.mjs +1242 -0
  15. package/fesm2020/ng-select2-component.mjs.map +1 -0
  16. package/index.d.ts +6 -0
  17. package/lib/select2-const.d.ts +1 -0
  18. package/lib/select2-const.d.ts.map +1 -0
  19. package/lib/select2-hint.component.d.ts +4 -0
  20. package/lib/select2-hint.component.d.ts.map +1 -0
  21. package/lib/select2-interfaces.d.ts +1 -0
  22. package/lib/select2-interfaces.d.ts.map +1 -0
  23. package/lib/select2-label.component.d.ts +4 -0
  24. package/lib/select2-label.component.d.ts.map +1 -0
  25. package/lib/select2-utils.d.ts +11 -6
  26. package/lib/select2-utils.d.ts.map +1 -0
  27. package/lib/select2.component.d.ts +15 -6
  28. package/lib/select2.component.d.ts.map +1 -0
  29. package/lib/select2.module.d.ts +12 -0
  30. package/lib/select2.module.d.ts.map +1 -0
  31. package/ng-select2-component.d.ts.map +1 -0
  32. package/package.json +26 -14
  33. package/public_api.d.ts +1 -0
  34. package/public_api.d.ts.map +1 -0
  35. package/bundles/ng-select2-component.umd.js +0 -2587
  36. package/bundles/ng-select2-component.umd.js.map +0 -1
  37. package/bundles/ng-select2-component.umd.min.js +0 -2
  38. package/bundles/ng-select2-component.umd.min.js.map +0 -1
  39. package/esm2015/lib/select2-const.js +0 -57
  40. package/esm2015/lib/select2-hint.component.js +0 -12
  41. package/esm2015/lib/select2-interfaces.js +0 -134
  42. package/esm2015/lib/select2-label.component.js +0 -12
  43. package/esm2015/lib/select2-utils.js +0 -388
  44. package/esm2015/lib/select2.component.js +0 -1500
  45. package/esm2015/lib/select2.module.js +0 -23
  46. package/esm2015/ng-select2-component.js +0 -10
  47. package/esm2015/public_api.js +0 -17
  48. package/fesm2015/ng-select2-component.js +0 -2130
  49. package/fesm2015/ng-select2-component.js.map +0 -1
  50. package/ng-select2-component.d.ts +0 -4
  51. package/ng-select2-component.metadata.json +0 -1
package/CHANGELOG.md CHANGED
@@ -1,6 +1,36 @@
1
1
  # Changelog of ng-select2
2
2
 
3
- ## V8.0.6 (2021-02-04)
3
+ ## V10.0.0 (2002-07-27)
4
+
5
+ ### Breaking Changes
6
+
7
+ - minimum required support has been upgraded to Angular `14.0`.
8
+ - update ngx-infinite-scroll to `14.0.0`.
9
+
10
+ ## V9.0.0 (2002-03-10)
11
+
12
+ ### Breaking Changes
13
+
14
+ - minimum required support has been upgraded to Angular `13.2`.
15
+ - update ngx-infinite-scroll to `13.0.2`.
16
+
17
+ ## V8.1.0 (2022-02-18)
18
+
19
+ ### Breaking Changes
20
+
21
+ - CSS variable `--select2-font-style-color` renamed in `--select2-too-much-font-style`
22
+
23
+ ### Changes
24
+
25
+ - add `maxResults` maximum results limit (`0` = no limit, by default : `0`).
26
+ - add `maxResultsMessage` parameter, message when maximum results (by default : `'Too many results…'`)
27
+ - add CSS variable `--select2-too-much-result-color` and `--select2-too-much-result-style`
28
+
29
+ ### Corrections
30
+
31
+ - filtered data for group is now correct
32
+
33
+ ## V8.0.6 (2022-01-04)
4
34
 
5
35
  ### Corrections
6
36
 
package/README.md CHANGED
@@ -14,14 +14,17 @@ npm i ng-select2-component --save
14
14
 
15
15
  - peerDependencies:
16
16
 
17
- - `angular` 10.0.0 and more
18
- - `angular/cdk` 10.0.0 and more
17
+ - `angular` 14.1.0 and more
18
+ - `angular/cdk` 14.1.0 and more
19
19
 
20
20
  - dependencies (include):
21
- - `ngx-infinite-scroll@^10.0.1`
21
+ - `ngx-infinite-scroll@^14.0.0`
22
22
 
23
23
  > **Note:**<br>
24
24
  > For `angular` 7, 8 and 9 : use version `7.3.1`.
25
+ > For `angular` 10, 11 and 12 (View Engine) : use version `8.1.0`.
26
+ > For `angular` 13 (Ivy) : use version `9.0.0`.
27
+ > For `angular` 14 and more (Ivy) : use version `10.0.0`.
25
28
 
26
29
  ## Demo
27
30
 
@@ -64,38 +67,40 @@ class MainModule {}
64
67
 
65
68
  ### properties and events of the component
66
69
 
67
- | name | type | status | default | description |
68
- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -------- | ----------- | -------------------------------------------------------------------------------------------------- |
69
- | `data` | [`Select2Data`](#select2-data-structure) | required | | the data of the select2 |
70
- | `value` | [`Select2Value`](#select2-data-structure) | | | initial value |
71
- | `minCharForSearch` | `number` | | `0` | start the search when the number of characters is reached (`0` = unlimited) |
72
- | `minCountForSearch` | `number` | | `6` | hide search box if `options.length < minCountForSearch` |
73
- | `displaySearchStatus` | `'default'`<br>`'hidden'`<br>`'always'` | | `'default'` | display the search box (`default` : is based on `minCountForSearch`) |
74
- | `placeholder` | `string` | | | the placeholder string if nothing selected |
75
- | `noResultMessage` | `string` | | | the message string if no results when using the search field |
76
- | `customSearchEnabled` | `boolean` | | `false` | will trigger `search` event, and disable inside filter |
77
- | `multiple` | `boolean` | | `false` | select multiple options |
78
- | `resettable` | `boolean` | | `false` | add a button to reset value (not with `multiple`) |
79
- | `limitSelection` | `number` | | `0` | to limit multiple selection (`0` = unlimited) |
80
- | `hideSelectedItems` | `boolean` | | `false` | for `multiple`, remove selected values |
81
- | `resultMaxHeight` | `string` | | `'200px'` | change the height size of results |
82
- | `listPosition` | `'below'`<br>`'above'`<br>`'auto'` \* | | `'below'` | the position for the dropdown list<br> \* `'auto'`: only with `overlay` |
83
- | `infiniteScroll` | `boolean` | | `false` | active infiniteScroll on dropdown list ( with `ngx-infinite-scroll`) |
84
- | `infiniteScrollDistance` | `number` | | `1.5` | infiniteScroll distance |
85
- | `infiniteScrollThrottle` | `number` | | `150` | infiniteScroll throttle |
86
- | `overlay` | `boolean` | | `false` | active an overlay mode for dropdown list (with angular cdk). (See [Overlay](#overlay)) |
87
- | `styleMode` | `'default'`<br>`'material'`<br>`'noStyle'` | | `'default'` | change style for material style or remove border and background color |
88
- | `templates` | `TemplateRef`<br> `{option?: TemplateRef, group?: TemplateRef}`<br> `{templateId1: TemplateRef, ...}` | | | use templates for formatting content (see [Templating](#templating)) |
89
- | `editPattern` | `(str: string) => string` | | | use it for change the pattern of the filter search |
90
- | `ngModel`<br>`id`<br>`required`<br>`disabled`<br>`readonly`<br>`tabIndex` | | | | just like a `select` control |
91
- | `(update)` | `(event: `[`Select2UpdateEvent`](#select2-data-structure)`) => void` | event | | triggered when user select an option |
92
- | `(open)` | `(event: Select2) => void` | event | | triggered when user open the options |
93
- | `(close)` | `(event: Select2) => void` | event | | triggered when user close the options |
94
- | `(focus)` | `(event: Select2) => void` | event | | triggered when user enters the component |
95
- | `(blur)` | `(event: Select2) => void` | event | | triggered when user leaves the component |
96
- | `(search)` | `(event: `[`Select2SearchEvent`](#select2-data-structure)`) => void` | event | | triggered when search text changed |
97
- | `(scroll)` | `(event: `[`Select2ScrollEvent`](#select2-data-structure)`) => void` | event | | triggered when infiniteScroll is on `up` or `down` position |
98
- | `(removedOption)` | `(event: `[`Select2RemoveEvent`](#select2-data-structure)`) => void` | event | | for `multiple`, triggered when an option is removed from the list of selected options options list |
70
+ | name | type | status | default | description |
71
+ | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------- | -------------------- | -------------------------------------------------------------------------------------------------- |
72
+ | `data` | [`Select2Data`](#select2-data-structure) | required | | the data of the select2 |
73
+ | `value` | [`Select2Value`](#select2-data-structure) | | | initial value |
74
+ | `minCharForSearch` | `number` | | `0` | start the search when the number of characters is reached (`0` = unlimited) |
75
+ | `minCountForSearch` | `number` | | `6` | hide search box if `options.length < minCountForSearch` |
76
+ | `displaySearchStatus` | `'default'`<br>`'hidden'`<br>`'always'` | | `'default'` | display the search box (`default` : is based on `minCountForSearch`) |
77
+ | `placeholder` | `string` | | | the placeholder string if nothing selected |
78
+ | `noResultMessage` | `string` | | | the message string if no results when using the search field |
79
+ | `customSearchEnabled` | `boolean` | | `false` | will trigger `search` event, and disable inside filter |
80
+ | `multiple` | `boolean` | | `false` | select multiple options |
81
+ | `resettable` | `boolean` | | `false` | add a button to reset value (not with `multiple`) |
82
+ | `limitSelection` | `number` | | `0` | to limit multiple selection (`0` = unlimited) |
83
+ | `hideSelectedItems` | `boolean` | | `false` | for `multiple`, remove selected values |
84
+ | `resultMaxHeight` | `string` | | `'200px'` | change the height size of results |
85
+ | `maxResults` | `number` | | `0` | maximum results limit (`0` = unlimited)s |
86
+ | `maxResultsMessage` | `string` | | `'Too much result…'` | message when maximum result |
87
+ | `listPosition` | `'below'`<br>`'above'`<br>`'auto'` \* | | `'below'` | the position for the dropdown list<br> \* `'auto'`: only with `overlay` |
88
+ | `infiniteScroll` | `boolean` | | `false` | active infiniteScroll on dropdown list ( with `ngx-infinite-scroll`) |
89
+ | `infiniteScrollDistance` | `number` | | `1.5` | infiniteScroll distance |
90
+ | `infiniteScrollThrottle` | `number` | | `150` | infiniteScroll throttle |
91
+ | `overlay` | `boolean` | | `false` | active an overlay mode for dropdown list (with angular cdk). (See [Overlay](#overlay)) |
92
+ | `styleMode` | `'default'`<br>`'material'`<br>`'noStyle'` | | `'default'` | change style for material style or remove border and background color |
93
+ | `templates` | `TemplateRef`<br>`{option?: TemplateRef, group?: TemplateRef}`<br>`{templateId1: TemplateRef, ...}` | | | use templates for formatting content (see [Templating](#templating)) |
94
+ | `editPattern` | `(str: string) => string` | | | use it for change the pattern of the filter search |
95
+ | `ngModel`<br>`id`<br>`required`<br>`disabled`<br>`readonly`<br>`tabIndex` | | | | just like a `select` control |
96
+ | `(update)` | `(event: `[`Select2UpdateEvent`](#select2-data-structure)`) => void` | event | | triggered when user select an option |
97
+ | `(open)` | `(event: Select2) => void` | event | | triggered when user open the options |
98
+ | `(close)` | `(event: Select2) => void` | event | | triggered when user close the options |
99
+ | `(focus)` | `(event: Select2) => void` | event | | triggered when user enters the component |
100
+ | `(blur)` | `(event: Select2) => void` | event | | triggered when user leaves the component |
101
+ | `(search)` | `(event: `[`Select2SearchEvent`](#select2-data-structure)`) => void` | event | | triggered when search text changed |
102
+ | `(scroll)` | `(event: `[`Select2ScrollEvent`](#select2-data-structure)`) => void` | event | | triggered when infiniteScroll is on `up` or `down` position |
103
+ | `(removedOption)` | `(event: `[`Select2RemoveEvent`](#select2-data-structure)`) => void` | event | | for `multiple`, triggered when an option is removed from the list of selected options options list |
99
104
 
100
105
  ### select2 data structure
101
106
 
@@ -265,7 +270,11 @@ It's possible to change different colors (and more) with CSS variables without h
265
270
 
266
271
  /* no result message */
267
272
  --select2-no-result-color: #888;
268
- --select2-font-style-color: italic;
273
+ --select2-no-result-font-style: italic;
274
+
275
+ /* no result message */
276
+ --select2-too-much-result-color: #888;
277
+ --select2-too-much-result-style: italic;
269
278
 
270
279
  /* reset */
271
280
  --select2-reset-color: #999;
@@ -323,8 +332,7 @@ For IE11, see [css-vars-ponyfill](https://github.com/jhildenbiddle/css-vars-pony
323
332
 
324
333
  ```
325
334
  npm run build:lib
326
- cd dist/ng-select2-component
327
- npm publish
335
+ npm run publish:lib
328
336
  ```
329
337
 
330
338
  ## Update Demo
@@ -0,0 +1,48 @@
1
+ export const timeout = 200;
2
+ export const unicodePatterns = [
3
+ { l: 'a', s: /[ⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ]/gi },
4
+ { l: 'aa', s: /ꜳ/gi },
5
+ { l: 'ae', s: /[æǽǣ]/gi },
6
+ { l: 'ao', s: /ꜵ/gi },
7
+ { l: 'au', s: /ꜷ/gi },
8
+ { l: 'av', s: /[ꜹꜻ]/gi },
9
+ { l: 'ay', s: /ꜽ/gi },
10
+ { l: 'b', s: /[ⓑbḃḅḇƀƃɓ]/gi },
11
+ { l: 'c', s: /[ⓒcćĉċčçḉƈȼꜿↄ]/gi },
12
+ { l: 'd', s: /[ⓓdḋďḍḑḓḏđƌɖɗꝺ]/gi },
13
+ { l: 'dz', s: /[dzdž]/gi },
14
+ { l: 'e', s: /[ⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ]/gi },
15
+ { l: 'f', s: /[ⓕfḟƒꝼ]/gi },
16
+ { l: 'g', s: /[ⓖgǵĝḡğġǧģǥɠꞡᵹꝿ]/gi },
17
+ { l: 'h', s: /[ⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ]/gi },
18
+ { l: 'hv', s: /ƕ/gi },
19
+ { l: 'i', s: /[ⓘiìíîĩīĭİïḯỉǐȉȋịįḭɨı]/gi },
20
+ { l: 'j', s: /[ⓙjĵǰɉ]/gi },
21
+ { l: 'k', s: /[ⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ]/gi },
22
+ { l: 'l', s: /[ⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇꝆ]/gi },
23
+ { l: 'lj', s: /lj/gi },
24
+ { l: 'm', s: /[ⓜmḿṁṃɱɯ]/gi },
25
+ { l: 'n', s: /[ⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ]/gi },
26
+ { l: 'nj', s: /nj/gi },
27
+ { l: 'o', s: /[ⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔƟꝋꝍɵ]/gi },
28
+ { l: 'oi', s: /ƣ/gi },
29
+ { l: 'oe', s: /œ/gi },
30
+ { l: 'oo', s: /ꝏ/gi },
31
+ { l: 'ou', s: /ȣ/gi },
32
+ { l: 'p', s: /[ⓟpṕṗƥᵽꝑꝓꝕ]/gi },
33
+ { l: 'q', s: /[ⓠqɋꝗꝙ]/gi },
34
+ { l: 'r', s: /[ⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ]/gi },
35
+ { l: 's', s: /[ⓢsßẞśṥŝṡšṧṣṩșşȿꞩꞅẛ]/gi },
36
+ { l: 't', s: /[ⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ]/gi },
37
+ { l: 'tz', s: /ꜩ/gi },
38
+ { l: 'u', s: /[ⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ]/gi },
39
+ { l: 'v', s: /[ⓥvṽṿʋꝟʌ]/gi },
40
+ { l: 'vy', s: /ꝡ/gi },
41
+ { l: 'w', s: /[ⓦwẁẃŵẇẅẘẉⱳ]/gi },
42
+ { l: 'x', s: /[ⓧxẋẍ]/gi },
43
+ { l: 'y', s: /[ⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ]/gi },
44
+ { l: 'z', s: /[ⓩzźẑżžẓẕƶȥɀⱬꝣ]/gi },
45
+ ];
46
+ export const defaultMinCountForSearch = 6;
47
+ export const protectRegexp = new RegExp('[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]', 'g');
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi1jb25zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNlbGVjdDItY29tcG9uZW50L3NyYy9saWIvc2VsZWN0Mi1jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBRTNCLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBK0I7SUFDdkQsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSx3Q0FBd0MsRUFBRTtJQUN2RCxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUNyQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtJQUN6QixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUNyQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUNyQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRTtJQUN4QixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUNyQixFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRTtJQUM3QixFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLGtCQUFrQixFQUFFO0lBQ2pDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsbUJBQW1CLEVBQUU7SUFDbEMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUU7SUFDeEIsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxvQ0FBb0MsRUFBRTtJQUNuRCxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRTtJQUMxQixFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQixFQUFFO0lBQ25DLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsb0JBQW9CLEVBQUU7SUFDbkMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDckIsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSwwQkFBMEIsRUFBRTtJQUN6QyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRTtJQUMxQixFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLG1CQUFtQixFQUFFO0lBQ2xDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUseUJBQXlCLEVBQUU7SUFDeEMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDckIsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUU7SUFDNUIsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxzQkFBc0IsRUFBRTtJQUNyQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUNyQixFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLGlEQUFpRCxFQUFFO0lBQ2hFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQ3JCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQ3JCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQ3JCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQ3JCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFO0lBQzlCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFO0lBQzFCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsc0JBQXNCLEVBQUU7SUFDckMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSx3QkFBd0IsRUFBRTtJQUN2QyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLHFCQUFxQixFQUFFO0lBQ3BDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQ3JCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsdUNBQXVDLEVBQUU7SUFDdEQsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUU7SUFDNUIsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDckIsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRTtJQUMvQixFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRTtJQUN6QixFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLHFCQUFxQixFQUFFO0lBQ3BDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsbUJBQW1CLEVBQUU7Q0FDckMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMscURBQXFELEVBQUUsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdGltZW91dCA9IDIwMDtcblxuZXhwb3J0IGNvbnN0IHVuaWNvZGVQYXR0ZXJuczogeyBsOiBzdHJpbmc7IHM6IFJlZ0V4cCB9W10gPSBbXG4gICAgeyBsOiAnYScsIHM6IC9b4pOQ772B4bqaw6DDocOi4bqn4bql4bqr4bqpw6PEgcSD4bqx4bqv4bq14bqzyKfHocOkx5/huqPDpce7x47IgciD4bqh4bqt4bq34biBxIXisaXJkF0vZ2kgfSxcbiAgICB7IGw6ICdhYScsIHM6IC/qnLMvZ2kgfSxcbiAgICB7IGw6ICdhZScsIHM6IC9bw6bHvcejXS9naSB9LFxuICAgIHsgbDogJ2FvJywgczogL+qctS9naSB9LFxuICAgIHsgbDogJ2F1JywgczogL+qcty9naSB9LFxuICAgIHsgbDogJ2F2JywgczogL1vqnLnqnLtdL2dpIH0sXG4gICAgeyBsOiAnYXknLCBzOiAv6py9L2dpIH0sXG4gICAgeyBsOiAnYicsIHM6IC9b4pOR772C4biD4biF4biHxoDGg8mTXS9naSB9LFxuICAgIHsgbDogJ2MnLCBzOiAvW+KTku+9g8SHxInEi8SNw6fhuInGiMi86py/4oaEXS9naSB9LFxuICAgIHsgbDogJ2QnLCBzOiAvW+KTk++9hOG4i8SP4biN4biR4biT4biPxJHGjMmWyZfqnbpdL2dpIH0sXG4gICAgeyBsOiAnZHonLCBzOiAvW8ezx4ZdL2dpIH0sXG4gICAgeyBsOiAnZScsIHM6IC9b4pOU772Fw6jDqcOq4buB4bq/4buF4buD4bq9xJPhuJXhuJfElcSXw6vhurvEm8iFyIfhurnhu4fIqeG4ncSZ4biZ4bibyYfJm8edXS9naSB9LFxuICAgIHsgbDogJ2YnLCBzOiAvW+KTle+9huG4n8aS6p28XS9naSB9LFxuICAgIHsgbDogJ2cnLCBzOiAvW+KTlu+9h8e1xJ3huKHEn8Shx6fEo8elyaDqnqHhtbnqnb9dL2dpIH0sXG4gICAgeyBsOiAnaCcsIHM6IC9b4pOX772IxKXhuKPhuKfIn+G4peG4qeG4q+G6lsSn4rGo4rG2yaVdL2dpIH0sXG4gICAgeyBsOiAnaHYnLCBzOiAvxpUvZ2kgfSxcbiAgICB7IGw6ICdpJywgczogL1vik5jvvYnDrMOtw67EqcSrxK3EsMOv4biv4buJx5DIiciL4buLxK/huK3JqMSxXS9naSB9LFxuICAgIHsgbDogJ2onLCBzOiAvW+KTme+9isS1x7DJiV0vZ2kgfSxcbiAgICB7IGw6ICdrJywgczogL1vik5rvvYvhuLHHqeG4s8S34bi1xpnisarqnYHqnYPqnYXqnqNdL2dpIH0sXG4gICAgeyBsOiAnbCcsIHM6IC9b4pOb772MxYDEusS+4bi34bi5xLzhuL3huLvFv8WCxprJq+Kxoeqdieqegeqdh+qdhl0vZ2kgfSxcbiAgICB7IGw6ICdsaicsIHM6IC/HiS9naSB9LFxuICAgIHsgbDogJ20nLCBzOiAvW+KTnO+9jeG4v+G5geG5g8mxya9dL2dpIH0sXG4gICAgeyBsOiAnbicsIHM6IC9b4pOd772Ox7nFhMOx4bmFxYjhuYfFhuG5i+G5icaeybLFieqekeqepV0vZ2kgfSxcbiAgICB7IGw6ICduaicsIHM6IC/HjC9naSB9LFxuICAgIHsgbDogJ28nLCBzOiAvW+KTnu+9j8Oyw7PDtOG7k+G7keG7l+G7lcO14bmNyK3huY/FjeG5keG5k8WPyK/IscO2yKvhu4/FkceSyI3Ij8ah4bud4bub4buh4buf4buj4buN4buZx6vHrcO4x7/JlMaf6p2L6p2NybVdL2dpIH0sXG4gICAgeyBsOiAnb2knLCBzOiAvxqMvZ2kgfSxcbiAgICB7IGw6ICdvZScsIHM6IC/Fky9naSB9LFxuICAgIHsgbDogJ29vJywgczogL+qdjy9naSB9LFxuICAgIHsgbDogJ291JywgczogL8ijL2dpIH0sXG4gICAgeyBsOiAncCcsIHM6IC9b4pOf772Q4bmV4bmXxqXhtb3qnZHqnZPqnZVdL2dpIH0sXG4gICAgeyBsOiAncScsIHM6IC9b4pOg772RyYvqnZfqnZldL2dpIH0sXG4gICAgeyBsOiAncicsIHM6IC9b4pOh772SxZXhuZnFmciRyJPhuZvhuZ3Fl+G5n8mNyb3qnZvqnqfqnoNdL2dpIH0sXG4gICAgeyBsOiAncycsIHM6IC9b4pOi772Tw5/hup7Fm+G5pcWd4bmhxaHhuafhuaPhuanImcWfyL/qnqnqnoXhuptdL2dpIH0sXG4gICAgeyBsOiAndCcsIHM6IC9b4pOj772U4bmr4bqXxaXhua3Im8Wj4bmx4bmvxafGrcqI4rGm6p6HXS9naSB9LFxuICAgIHsgbDogJ3R6JywgczogL+qcqS9naSB9LFxuICAgIHsgbDogJ3UnLCBzOiAvW+KTpO+9lcO5w7rDu8Wp4bm5xavhubvFrcO8x5zHmMeWx5rhu6fFr8Wxx5TIlciXxrDhu6vhu6nhu6/hu63hu7Hhu6XhubPFs+G5t+G5tcqJXS9naSB9LFxuICAgIHsgbDogJ3YnLCBzOiAvW+KTpe+9luG5veG5v8qL6p2fyoxdL2dpIH0sXG4gICAgeyBsOiAndnknLCBzOiAv6p2hL2dpIH0sXG4gICAgeyBsOiAndycsIHM6IC9b4pOm772X4bqB4bqDxbXhuofhuoXhupjhuonisbNdL2dpIH0sXG4gICAgeyBsOiAneCcsIHM6IC9b4pOn772Y4bqL4bqNXS9naSB9LFxuICAgIHsgbDogJ3knLCBzOiAvW+KTqO+9meG7s8O9xbfhu7nIs+G6j8O/4bu34bqZ4bu1xrTJj+G7v10vZ2kgfSxcbiAgICB7IGw6ICd6JywgczogL1vik6nvvZrFuuG6kcW8xb7hupPhupXGtsilyYDisazqnaNdL2dpIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdE1pbkNvdW50Rm9yU2VhcmNoID0gNjtcblxuZXhwb3J0IGNvbnN0IHByb3RlY3RSZWdleHAgPSBuZXcgUmVnRXhwKCdbXFxcXC1cXFxcW1xcXFxdXFxcXC9cXFxce1xcXFx9XFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcP1xcXFwuXFxcXFxcXFxcXFxcXlxcXFwkXFxcXHxdJywgJ2cnKTtcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import { Directive } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class Select2Hint {
4
+ }
5
+ /** @nocollapse */ Select2Hint.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: Select2Hint, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
+ /** @nocollapse */ Select2Hint.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: Select2Hint, selector: "select2-hint", ngImport: i0 });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: Select2Hint, decorators: [{
8
+ type: Directive,
9
+ args: [{ selector: 'select2-hint' }]
10
+ }] });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi1oaW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNlbGVjdDItY29tcG9uZW50L3NyYy9saWIvc2VsZWN0Mi1oaW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUkxQyxNQUFNLE9BQU8sV0FBVzs7MkhBQVgsV0FBVzsrR0FBWCxXQUFXOzJGQUFYLFdBQVc7a0JBRHZCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnc2VsZWN0Mi1oaW50JyB9KVxuZXhwb3J0IGNsYXNzIFNlbGVjdDJIaW50IHt9XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi1pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctc2VsZWN0Mi1jb21wb25lbnQvc3JjL2xpYi9zZWxlY3QyLWludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdDIgfSBmcm9tICcuL3NlbGVjdDIuY29tcG9uZW50JztcblxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdDJHcm91cCB7XG4gICAgLyoqIGxhYmVsIG9mIGdyb3VwICovXG4gICAgbGFiZWw6IHN0cmluZztcbiAgICAvKiogb3B0aW9ucyBsaXN0ICovXG4gICAgb3B0aW9uczogU2VsZWN0Mk9wdGlvbltdO1xuICAgIC8qKiBhZGQgY2xhc3NlcyAgKi9cbiAgICBjbGFzc2VzPzogc3RyaW5nO1xuICAgIC8qKiB0ZW1wbGF0ZSBpZCAgKi9cbiAgICB0ZW1wbGF0ZUlkPzogc3RyaW5nO1xuICAgIC8qKiB0ZW1wbGF0ZSBkYXRhICAqL1xuICAgIGRhdGE/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0Mk9wdGlvbiB7XG4gICAgLyoqIHZhbHVlICAqL1xuICAgIHZhbHVlOiBTZWxlY3QyVmFsdWU7XG4gICAgLyoqIGxhYmVsIG9mIG9wdGlvbiAqL1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgLyoqIG5vIHNlbGVjdGFibGUgaXMgZGlzYWJsZWQgKi9cbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgLyoqIGZvciBpZGVudGlmaWNhdGlvbiAqL1xuICAgIGlkPzogc3RyaW5nO1xuICAgIC8qKiBhZGQgY2xhc3NlcyAgKi9cbiAgICBjbGFzc2VzPzogc3RyaW5nO1xuICAgIC8qKiB0ZW1wbGF0ZSBpZCAgKi9cbiAgICB0ZW1wbGF0ZUlkPzogc3RyaW5nO1xuICAgIC8qKiB0ZW1wbGF0ZSBkYXRhICAqL1xuICAgIGRhdGE/OiBhbnk7XG4gICAgLyoqIGhpZGUgdGhpcyBvcHRpb24gKi9cbiAgICBoaWRlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU2VsZWN0MlZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdDtcblxuZXhwb3J0IHR5cGUgU2VsZWN0MlVwZGF0ZVZhbHVlID0gU2VsZWN0MlZhbHVlIHwgU2VsZWN0MlZhbHVlW107XG5cbmV4cG9ydCB0eXBlIFNlbGVjdDJEYXRhID0gKFNlbGVjdDJHcm91cCB8IFNlbGVjdDJPcHRpb24pW107XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0MlVwZGF0ZUV2ZW50PFUgZXh0ZW5kcyBTZWxlY3QyVXBkYXRlVmFsdWUgPSBTZWxlY3QyVmFsdWU+IHtcbiAgICBjb21wb25lbnQ6IFNlbGVjdDI7XG4gICAgdmFsdWU6IFU7XG4gICAgb3B0aW9uczogU2VsZWN0Mk9wdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdDJTZWFyY2hFdmVudDxVIGV4dGVuZHMgU2VsZWN0MlVwZGF0ZVZhbHVlID0gU2VsZWN0MlZhbHVlPiB7XG4gICAgY29tcG9uZW50OiBTZWxlY3QyO1xuICAgIHZhbHVlOiBVO1xuICAgIHNlYXJjaDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdDJSZW1vdmVFdmVudDxVIGV4dGVuZHMgU2VsZWN0MlVwZGF0ZVZhbHVlID0gU2VsZWN0MlZhbHVlPiB7XG4gICAgY29tcG9uZW50OiBTZWxlY3QyO1xuICAgIHZhbHVlOiBVO1xuICAgIHJlbW92ZWRPcHRpb246IFNlbGVjdDJPcHRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0MlNjcm9sbEV2ZW50IHtcbiAgICBjb21wb25lbnQ6IFNlbGVjdDI7XG4gICAgd2F5OiAndXAnIHwgJ2Rvd24nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,11 @@
1
+ import { Directive } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class Select2Label {
4
+ }
5
+ /** @nocollapse */ Select2Label.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: Select2Label, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
+ /** @nocollapse */ Select2Label.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: Select2Label, selector: "select2-label", ngImport: i0 });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: Select2Label, decorators: [{
8
+ type: Directive,
9
+ args: [{ selector: 'select2-label' }]
10
+ }] });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi1sYWJlbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zZWxlY3QyLWNvbXBvbmVudC9zcmMvbGliL3NlbGVjdDItbGFiZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTFDLE1BQU0sT0FBTyxZQUFZOzs0SEFBWixZQUFZO2dIQUFaLFlBQVk7MkZBQVosWUFBWTtrQkFEeEIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdzZWxlY3QyLWxhYmVsJyB9KVxuZXhwb3J0IGNsYXNzIFNlbGVjdDJMYWJlbCB7fVxuIl19
@@ -0,0 +1,280 @@
1
+ import { defaultMinCountForSearch, protectRegexp, unicodePatterns } from './select2-const';
2
+ export class Select2Utils {
3
+ static getOptionByValue(data, value) {
4
+ if (Array.isArray(data)) {
5
+ for (const groupOrOption of data) {
6
+ const options = groupOrOption.options;
7
+ if (options) {
8
+ for (const option of options) {
9
+ if (option.value === value) {
10
+ return option;
11
+ }
12
+ }
13
+ }
14
+ else if (groupOrOption.value === value) {
15
+ return groupOrOption;
16
+ }
17
+ }
18
+ }
19
+ return null;
20
+ }
21
+ static getOptionsByValue(data, value, multiple) {
22
+ if (multiple) {
23
+ const values = Array.isArray(value) ? value : [];
24
+ const result = [];
25
+ for (const v of values) {
26
+ const option = Select2Utils.getOptionByValue(data, v);
27
+ if (option) {
28
+ result.push(option);
29
+ }
30
+ }
31
+ return result;
32
+ }
33
+ return Select2Utils.getOptionByValue(data, value);
34
+ }
35
+ static getFirstAvailableOption(data) {
36
+ if (Array.isArray(data)) {
37
+ for (const groupOrOption of data) {
38
+ const options = groupOrOption.options;
39
+ if (options) {
40
+ for (const option of options) {
41
+ if (!option.disabled) {
42
+ return option.value;
43
+ }
44
+ }
45
+ }
46
+ else {
47
+ const option = groupOrOption;
48
+ if (!option.disabled) {
49
+ return option.value;
50
+ }
51
+ }
52
+ }
53
+ }
54
+ return null;
55
+ }
56
+ static valueIsNotInFilteredData(filteredData, value) {
57
+ if (Select2Utils.isNullOrUndefined(value)) {
58
+ return true;
59
+ }
60
+ for (const groupOrOption of filteredData) {
61
+ const options = groupOrOption.options;
62
+ if (options) {
63
+ for (const option of options) {
64
+ if (option.value === value) {
65
+ return false;
66
+ }
67
+ }
68
+ }
69
+ else if (groupOrOption.value === value) {
70
+ return false;
71
+ }
72
+ }
73
+ return true;
74
+ }
75
+ // eslint-disable-next-line
76
+ static getPreviousOption(filteredData, hoveringValue) {
77
+ let findIt = Select2Utils.isNullOrUndefined(hoveringValue);
78
+ for (let i = filteredData.length - 1; i >= 0; i--) {
79
+ const groupOrOption = filteredData[i];
80
+ const options = groupOrOption.options;
81
+ if (options) {
82
+ for (let j = options.length - 1; j >= 0; j--) {
83
+ const option = options[j];
84
+ if (findIt && !option.disabled && !option.hide) {
85
+ return option;
86
+ }
87
+ if (!findIt) {
88
+ findIt = option.value === hoveringValue;
89
+ }
90
+ }
91
+ }
92
+ else {
93
+ const option = groupOrOption;
94
+ if (findIt && !option.disabled && !option.hide) {
95
+ return option;
96
+ }
97
+ if (!findIt) {
98
+ findIt = option.value === hoveringValue;
99
+ }
100
+ }
101
+ }
102
+ return null;
103
+ }
104
+ // eslint-disable-next-line
105
+ static getNextOption(filteredData, hoveringValue) {
106
+ let findIt = Select2Utils.isNullOrUndefined(hoveringValue);
107
+ for (const groupOrOption of filteredData) {
108
+ const options = groupOrOption.options;
109
+ if (options) {
110
+ for (const option of options) {
111
+ if (findIt) {
112
+ if (!option.disabled && !option.hide) {
113
+ return option;
114
+ }
115
+ }
116
+ else if (!findIt) {
117
+ findIt = option.value === hoveringValue;
118
+ }
119
+ }
120
+ }
121
+ else {
122
+ const option = groupOrOption;
123
+ if (findIt) {
124
+ if (!option.disabled && !option.hide) {
125
+ return option;
126
+ }
127
+ }
128
+ else if (!findIt) {
129
+ findIt = option.value === hoveringValue;
130
+ }
131
+ }
132
+ }
133
+ return null;
134
+ }
135
+ static getReduceData(data, maxResults = 0) {
136
+ if (maxResults > 0) {
137
+ let counter = 0;
138
+ const result = [];
139
+ // debugger;
140
+ for (const groupOrOption of data) {
141
+ const options = groupOrOption.options;
142
+ if (options) {
143
+ const group = {
144
+ ...groupOrOption,
145
+ options: [],
146
+ };
147
+ result.push(group);
148
+ for (const item of options) {
149
+ group.options.push(item);
150
+ counter++;
151
+ if (counter === maxResults) {
152
+ return { result, reduce: true };
153
+ }
154
+ }
155
+ }
156
+ else {
157
+ result.push(groupOrOption);
158
+ counter++;
159
+ }
160
+ if (counter === maxResults) {
161
+ return { result, reduce: true };
162
+ }
163
+ }
164
+ return { result, reduce: false };
165
+ }
166
+ else {
167
+ return { result: data, reduce: false };
168
+ }
169
+ }
170
+ static getFilteredData(data, searchText, editPattern) {
171
+ if (searchText) {
172
+ const result = [];
173
+ for (const groupOrOption of data) {
174
+ const options = groupOrOption.options;
175
+ if (options) {
176
+ if (options.some(group => Select2Utils.containSearchText(group.label, searchText, editPattern))) {
177
+ const filteredOptions = options.filter(group => Select2Utils.containSearchText(group.label, searchText, editPattern));
178
+ result.push({
179
+ ...groupOrOption,
180
+ options: filteredOptions,
181
+ });
182
+ }
183
+ }
184
+ else if (Select2Utils.containSearchText(groupOrOption.label, searchText, editPattern)) {
185
+ result.push(groupOrOption);
186
+ }
187
+ }
188
+ return result;
189
+ }
190
+ else {
191
+ return data;
192
+ }
193
+ }
194
+ static getFilteredSelectedData(data, selectedOptions) {
195
+ const result = [];
196
+ for (const groupOrOption of data) {
197
+ const options = groupOrOption.options;
198
+ if (options) {
199
+ const filteredOptions = options.filter(group => Select2Utils.isSelected(selectedOptions, group, true) === 'false');
200
+ if (filteredOptions.length) {
201
+ result.push({
202
+ ...groupOrOption,
203
+ options: filteredOptions,
204
+ });
205
+ }
206
+ }
207
+ else if (Select2Utils.isSelected(selectedOptions, groupOrOption, true) === 'false') {
208
+ result.push(groupOrOption);
209
+ }
210
+ }
211
+ return result;
212
+ }
213
+ static isSearchboxHiddex(data, minCountForSearch) {
214
+ if (minCountForSearch === '' ||
215
+ minCountForSearch === undefined ||
216
+ minCountForSearch === null ||
217
+ isNaN(+minCountForSearch)) {
218
+ minCountForSearch = defaultMinCountForSearch;
219
+ }
220
+ const optionCount = Select2Utils.getOptionsCount(data);
221
+ return optionCount < +minCountForSearch;
222
+ }
223
+ static isSelected(options, option, multiple) {
224
+ return multiple
225
+ ? options && options.some(op => op.value === option.value)
226
+ ? 'true'
227
+ : 'false'
228
+ : options && option.value === options.value
229
+ ? 'true'
230
+ : 'false';
231
+ }
232
+ static removeSelection(options, option) {
233
+ for (let i = 0; i < options.length; i++) {
234
+ if (options[i].value === option.value) {
235
+ options.splice(i, 1);
236
+ return;
237
+ }
238
+ }
239
+ }
240
+ static getOptionsCount(data) {
241
+ let count = 0;
242
+ if (Array.isArray(data)) {
243
+ for (const groupOrOption of data) {
244
+ const options = groupOrOption.options;
245
+ if (options) {
246
+ count += options.length;
247
+ }
248
+ else {
249
+ count++;
250
+ }
251
+ }
252
+ }
253
+ return count;
254
+ }
255
+ static isNullOrUndefined(value) {
256
+ return value === null || value === undefined;
257
+ }
258
+ static containSearchText(label, searchText, editPattern) {
259
+ return searchText
260
+ ? Select2Utils.formatSansUnicode(label).match(new RegExp(Select2Utils.formatPattern(searchText, editPattern), 'i')) !== null
261
+ : true;
262
+ }
263
+ static protectPattern(str) {
264
+ return str.replace(protectRegexp, '\\$&');
265
+ }
266
+ static formatSansUnicode(str) {
267
+ for (const unicodePattern of unicodePatterns) {
268
+ str = str.replace(unicodePattern.s, unicodePattern.l);
269
+ }
270
+ return str;
271
+ }
272
+ static formatPattern(str, editPattern) {
273
+ str = Select2Utils.formatSansUnicode(Select2Utils.protectPattern(str));
274
+ if (editPattern && typeof editPattern === 'function') {
275
+ str = editPattern(str);
276
+ }
277
+ return str;
278
+ }
279
+ }
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNlbGVjdDItY29tcG9uZW50L3NyYy9saWIvc2VsZWN0Mi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSTNGLE1BQU0sT0FBTyxZQUFZO0lBQ3JCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFpQixFQUFFLEtBQXNDO1FBQzdFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksRUFBRTtnQkFDOUIsTUFBTSxPQUFPLEdBQUksYUFBOEIsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hELElBQUksT0FBTyxFQUFFO29CQUNULEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO3dCQUMxQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFOzRCQUN4QixPQUFPLE1BQU0sQ0FBQzt5QkFDakI7cUJBQ0o7aUJBQ0o7cUJBQU0sSUFBSyxhQUErQixDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7b0JBQ3pELE9BQU8sYUFBOEIsQ0FBQztpQkFDekM7YUFDSjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FDcEIsSUFBaUIsRUFDakIsS0FBNEMsRUFDNUMsUUFBb0M7UUFFcEMsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLE1BQU0sR0FBbUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakUsTUFBTSxNQUFNLEdBQW9CLEVBQUUsQ0FBQztZQUNuQyxLQUFLLE1BQU0sQ0FBQyxJQUFJ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IHByb3RlY3RSZWdleHAsIHVuaWNvZGVQYXR0ZXJucyB9IGZyb20gJy4vc2VsZWN0Mi1jb25zdCc7XG5pbXBvcnQgeyBTZWxlY3QyRGF0YSwgU2VsZWN0Mkdyb3VwLCBTZWxlY3QyT3B0aW9uLCBTZWxlY3QyVXBkYXRlVmFsdWUsIFNlbGVjdDJWYWx1ZSB9IGZyb20gJy4vc2VsZWN0Mi1pbnRlcmZhY2VzJztcblxuXG5leHBvcnQgY2xhc3MgU2VsZWN0MlV0aWxzIHtcbiAgICBzdGF0aWMgZ2V0T3B0aW9uQnlWYWx1ZShkYXRhOiBTZWxlY3QyRGF0YSwgdmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb24pLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0T3B0aW9uc0J5VmFsdWUoXG4gICAgICAgIGRhdGE6IFNlbGVjdDJEYXRhLFxuICAgICAgICB2YWx1ZTogU2VsZWN0MlVwZGF0ZVZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICAgICAgbXVsdGlwbGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgICkge1xuICAgICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlczogU2VsZWN0MlZhbHVlW10gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJPcHRpb25bXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IFNlbGVjdDJVdGlscy5nZXRPcHRpb25CeVZhbHVlKGRhdGEsIHYpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uQnlWYWx1ZShkYXRhLCB2YWx1ZSBhcyBTZWxlY3QyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Rmlyc3RBdmFpbGFibGVPcHRpb24oZGF0YTogU2VsZWN0MkRhdGEpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb247XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyB2YWx1ZUlzTm90SW5GaWx0ZXJlZERhdGEoZmlsdGVyZWREYXRhOiBTZWxlY3QyRGF0YSwgdmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKFNlbGVjdDJVdGlscy5pc051bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBmaWx0ZXJlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbikudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHN0YXRpYyBnZXRQcmV2aW91c09wdGlvbihmaWx0ZXJlZERhdGE6IFNlbGVjdDJEYXRhLCBob3ZlcmluZ1ZhbHVlOiBTZWxlY3QyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBmaW5kSXQgPSBTZWxlY3QyVXRpbHMuaXNOdWxsT3JVbmRlZmluZWQoaG92ZXJpbmdWYWx1ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSBmaWx0ZXJlZERhdGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwT3JPcHRpb24gPSBmaWx0ZXJlZERhdGFbaV07XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gb3B0aW9ucy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEl0ICYmICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kSXQgPSBvcHRpb24udmFsdWUgPT09IGhvdmVyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoZmluZEl0ICYmICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHN0YXRpYyBnZXROZXh0T3B0aW9uKGZpbHRlcmVkRGF0YTogU2VsZWN0MkRhdGEsIGhvdmVyaW5nVmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGZpbmRJdCA9IFNlbGVjdDJVdGlscy5pc051bGxPclVuZGVmaW5lZChob3ZlcmluZ1ZhbHVlKTtcbiAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGZpbHRlcmVkRGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaW5kSXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uO1xuICAgICAgICAgICAgICAgIGlmIChmaW5kSXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJlZHVjZURhdGEoZGF0YTogU2VsZWN0MkRhdGEsIG1heFJlc3VsdHM6IG51bWJlciA9IDApOiB7IHJlc3VsdDogU2VsZWN0MkRhdGE7IHJlZHVjZTogYm9vbGVhbiB9IHtcbiAgICAgICAgaWYgKG1heFJlc3VsdHMgPiAwKSB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJEYXRhID0gW107XG4gICAgICAgICAgICAvLyBkZWJ1Z2dlcjtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBPck9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChncm91cCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cC5vcHRpb25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdCwgcmVkdWNlOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChncm91cE9yT3B0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByZXN1bHQsIHJlZHVjZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdCwgcmVkdWNlOiBmYWxzZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiBkYXRhLCByZWR1Y2U6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RmlsdGVyZWREYXRhKFxuICAgICAgICBkYXRhOiBTZWxlY3QyRGF0YSxcbiAgICAgICAgc2VhcmNoVGV4dDogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgZWRpdFBhdHRlcm4/OiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZyxcbiAgICApOiBTZWxlY3QyRGF0YSB7XG4gICAgICAgIGlmIChzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJEYXRhID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc29tZShncm91cCA9PiBTZWxlY3QyVXRpbHMuY29udGFpblNlYXJjaFRleHQoZ3JvdXAubGFiZWwsIHNlYXJjaFRleHQsIGVkaXRQYXR0ZXJuKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKGdyb3VwID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0MlV0aWxzLmNvbnRhaW5TZWFyY2hUZXh0KGdyb3VwLmxhYmVsLCBzZWFyY2hUZXh0LCBlZGl0UGF0dGVybiksXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwT3JPcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNlbGVjdDJVdGlscy5jb250YWluU2VhcmNoVGV4dChncm91cE9yT3B0aW9uLmxhYmVsLCBzZWFyY2hUZXh0LCBlZGl0UGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBPck9wdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEZpbHRlcmVkU2VsZWN0ZWREYXRhKFxuICAgICAgICBkYXRhOiBTZWxlY3QyRGF0YSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBTZWxlY3QyT3B0aW9uIHwgU2VsZWN0Mk9wdGlvbltdIHwgbnVsbCxcbiAgICApOiBTZWxlY3QyRGF0YSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogU2VsZWN0MkRhdGEgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICBncm91cCA9PiBTZWxlY3QyVXRpbHMuaXNTZWxlY3RlZChzZWxlY3RlZE9wdGlvbnMsIGdyb3VwLCB0cnVlKSA9PT0gJ2ZhbHNlJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwT3JPcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBmaWx0ZXJlZE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoU2VsZWN0MlV0aWxzLmlzU2VsZWN0ZWQoc2VsZWN0ZWRPcHRpb25zLCBncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb24sIHRydWUpID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBPck9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNTZWFyY2hib3hIaWRkZXgoZGF0YTogU2VsZWN0MkRhdGEsIG1pbkNvdW50Rm9yU2VhcmNoPzogbnVtYmVyIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1pbkNvdW50Rm9yU2VhcmNoID09PSAnJyB8fFxuICAgICAgICAgICAgbWluQ291bnRGb3JTZWFyY2ggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgbWluQ291bnRGb3JTZWFyY2ggPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlzTmFOKCttaW5Db3VudEZvclNlYXJjaClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaW5Db3VudEZvclNlYXJjaCA9IGRlZmF1bHRNaW5Db3VudEZvclNlYXJjaDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25Db3VudCA9IFNlbGVjdDJVdGlscy5nZXRPcHRpb25zQ291bnQoZGF0YSk7XG4gICAgICAgIHJldHVybiBvcHRpb25Db3VudCA8ICttaW5Db3VudEZvclNlYXJjaDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNTZWxlY3RlZChcbiAgICAgICAgb3B0aW9uczogU2VsZWN0Mk9wdGlvbiB8IFNlbGVjdDJPcHRpb25bXSB8IG51bGwsXG4gICAgICAgIG9wdGlvbjogU2VsZWN0Mk9wdGlvbixcbiAgICAgICAgbXVsdGlwbGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgICkge1xuICAgICAgICByZXR1cm4gbXVsdGlwbGVcbiAgICAgICAgICAgID8gb3B0aW9ucyAmJiAob3B0aW9ucyBhcyBTZWxlY3QyT3B0aW9uW10pLnNvbWUob3AgPT4gb3AudmFsdWUgPT09IG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgICAgIDogJ2ZhbHNlJ1xuICAgICAgICAgICAgOiBvcHRpb25zICYmIG9wdGlvbi52YWx1ZSA9PT0gKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbikudmFsdWVcbiAgICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgICA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbW92ZVNlbGVjdGlvbihvcHRpb25zOiBTZWxlY3QyT3B0aW9uIHwgU2VsZWN0Mk9wdGlvbltdIHwgbnVsbCwgb3B0aW9uOiBTZWxlY3QyT3B0aW9uKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbltdKS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb25bXSlbaV0udmFsdWUgPT09IG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgIChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb25bXSkuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldE9wdGlvbnNDb3VudChkYXRhOiBTZWxlY3QyRGF0YSkge1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IG9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvbnRhaW5TZWFyY2hUZXh0KFxuICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICBzZWFyY2hUZXh0OiBzdHJpbmcgfCBudWxsLFxuICAgICAgICBlZGl0UGF0dGVybjogKChzdHI6IHN0cmluZykgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZCxcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNlYXJjaFRleHRcbiAgICAgICAgICAgID8gU2VsZWN0MlV0aWxzLmZvcm1hdFNhbnNVbmljb2RlKGxhYmVsKS5tYXRjaChcbiAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoU2VsZWN0MlV0aWxzLmZvcm1hdFBhdHRlcm4oc2VhcmNoVGV4dCwgZWRpdFBhdHRlcm4pLCAnaScpLFxuICAgICAgICAgICAgICApICE9PSBudWxsXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcHJvdGVjdFBhdHRlcm4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UocHJvdGVjdFJlZ2V4cCwgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGZvcm1hdFNhbnNVbmljb2RlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgZm9yIChjb25zdCB1bmljb2RlUGF0dGVybiBvZiB1bmljb2RlUGF0dGVybnMpIHtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKHVuaWNvZGVQYXR0ZXJuLnMsIHVuaWNvZGVQYXR0ZXJuLmwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9ybWF0UGF0dGVybihzdHI6IHN0cmluZywgZWRpdFBhdHRlcm46ICgoc3RyOiBzdHJpbmcpID0+IHN0cmluZykgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgICAgICBzdHIgPSBTZWxlY3QyVXRpbHMuZm9ybWF0U2Fuc1VuaWNvZGUoU2VsZWN0MlV0aWxzLnByb3RlY3RQYXR0ZXJuKHN0cikpO1xuXG4gICAgICAgIGlmIChlZGl0UGF0dGVybiAmJiB0eXBlb2YgZWRpdFBhdHRlcm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0ciA9IGVkaXRQYXR0ZXJuKHN0cik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG59XG4iXX0=