@agorapulse/ui-components 18.0.8 → 18.0.10

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 (92) hide show
  1. package/agorapulse-ui-components-18.0.10.tgz +0 -0
  2. package/avatar/avatar.component.d.ts +1 -1
  3. package/checkbox/checkbox.component.d.ts +3 -3
  4. package/close-button/close-button.component.d.ts +4 -4
  5. package/datepicker/datepicker.component.d.ts +1 -1
  6. package/esm2022/avatar/avatar.component.mjs +4 -3
  7. package/esm2022/checkbox/checkbox.component.mjs +7 -7
  8. package/esm2022/close-button/close-button.component.mjs +6 -6
  9. package/esm2022/datepicker/datepicker.component.mjs +2 -2
  10. package/esm2022/index.mjs +2 -1
  11. package/esm2022/infobox/infobox.component.mjs +1 -1
  12. package/esm2022/input-search/input-search.component.mjs +5 -4
  13. package/esm2022/labels/label.component.mjs +1 -1
  14. package/esm2022/nav-selector/agorapulse-ui-components-nav-selector.mjs +5 -0
  15. package/esm2022/nav-selector/directives/tree-node-accessibility.directive.mjs +30 -0
  16. package/esm2022/nav-selector/nav-selector-category/nav-selector-category.component.mjs +81 -0
  17. package/esm2022/nav-selector/nav-selector-category/nav-selector-category.presenter.mjs +29 -0
  18. package/esm2022/nav-selector/nav-selector-group/nav-selector-group.component.mjs +142 -0
  19. package/esm2022/nav-selector/nav-selector-group/nav-selector-group.presenter.mjs +31 -0
  20. package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.component.mjs +240 -0
  21. package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.presenter.mjs +35 -0
  22. package/esm2022/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.component.mjs +39 -0
  23. package/esm2022/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.mjs +18 -0
  24. package/esm2022/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.component.mjs +92 -0
  25. package/esm2022/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.presenter.mjs +31 -0
  26. package/esm2022/nav-selector/nav-selector.component.mjs +123 -0
  27. package/esm2022/nav-selector/nav-selector.mjs +9 -0
  28. package/esm2022/nav-selector/nav-selector.state.mjs +173 -0
  29. package/esm2022/nav-selector/public_api.mjs +2 -0
  30. package/esm2022/nav-selector/utils/leaf.utils.mjs +10 -0
  31. package/esm2022/nav-selector/utils/nav-selector.accessibility.mjs +171 -0
  32. package/esm2022/nav-selector/utils/nav-selector.builder.mjs +263 -0
  33. package/esm2022/nav-selector/utils/nav-selector.filter.mjs +102 -0
  34. package/esm2022/nav-selector/utils/nav-selector.folding.mjs +219 -0
  35. package/esm2022/nav-selector/utils/nav-selector.minifying.mjs +50 -0
  36. package/esm2022/nav-selector/utils/nav-selector.multi-select.mjs +208 -0
  37. package/esm2022/nav-selector/utils/nav-selector.single-select.mjs +91 -0
  38. package/esm2022/nav-selector/utils/nav-selector.view-more.mjs +98 -0
  39. package/esm2022/snackbars-thread/component/snackbars-thread.component.mjs +2 -2
  40. package/esm2022/tag/tag.component.mjs +7 -5
  41. package/fesm2022/agorapulse-ui-components-avatar.mjs +3 -2
  42. package/fesm2022/agorapulse-ui-components-avatar.mjs.map +1 -1
  43. package/fesm2022/agorapulse-ui-components-checkbox.mjs +6 -6
  44. package/fesm2022/agorapulse-ui-components-checkbox.mjs.map +1 -1
  45. package/fesm2022/agorapulse-ui-components-close-button.mjs +5 -5
  46. package/fesm2022/agorapulse-ui-components-close-button.mjs.map +1 -1
  47. package/fesm2022/agorapulse-ui-components-datepicker.mjs +1 -1
  48. package/fesm2022/agorapulse-ui-components-datepicker.mjs.map +1 -1
  49. package/fesm2022/agorapulse-ui-components-infobox.mjs +1 -1
  50. package/fesm2022/agorapulse-ui-components-infobox.mjs.map +1 -1
  51. package/fesm2022/agorapulse-ui-components-input-search.mjs +4 -3
  52. package/fesm2022/agorapulse-ui-components-input-search.mjs.map +1 -1
  53. package/fesm2022/agorapulse-ui-components-labels.mjs +1 -1
  54. package/fesm2022/agorapulse-ui-components-labels.mjs.map +1 -1
  55. package/fesm2022/agorapulse-ui-components-nav-selector.mjs +2198 -0
  56. package/fesm2022/agorapulse-ui-components-nav-selector.mjs.map +1 -0
  57. package/fesm2022/agorapulse-ui-components-snackbars-thread.mjs +1 -1
  58. package/fesm2022/agorapulse-ui-components-snackbars-thread.mjs.map +1 -1
  59. package/fesm2022/agorapulse-ui-components-tag.mjs +6 -4
  60. package/fesm2022/agorapulse-ui-components-tag.mjs.map +1 -1
  61. package/fesm2022/agorapulse-ui-components.mjs +1 -0
  62. package/fesm2022/agorapulse-ui-components.mjs.map +1 -1
  63. package/index.d.ts +1 -0
  64. package/input-search/input-search.component.d.ts +1 -1
  65. package/nav-selector/directives/tree-node-accessibility.directive.d.ts +9 -0
  66. package/nav-selector/index.d.ts +5 -0
  67. package/nav-selector/nav-selector-category/nav-selector-category.component.d.ts +16 -0
  68. package/nav-selector/nav-selector-category/nav-selector-category.presenter.d.ts +14 -0
  69. package/nav-selector/nav-selector-group/nav-selector-group.component.d.ts +29 -0
  70. package/nav-selector/nav-selector-group/nav-selector-group.presenter.d.ts +17 -0
  71. package/nav-selector/nav-selector-leaf/nav-selector-leaf.component.d.ts +51 -0
  72. package/nav-selector/nav-selector-leaf/nav-selector-leaf.presenter.d.ts +19 -0
  73. package/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.component.d.ts +13 -0
  74. package/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.d.ts +10 -0
  75. package/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.component.d.ts +24 -0
  76. package/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.presenter.d.ts +14 -0
  77. package/nav-selector/nav-selector.component.d.ts +29 -0
  78. package/nav-selector/nav-selector.d.ts +220 -0
  79. package/nav-selector/nav-selector.state.d.ts +47 -0
  80. package/nav-selector/public_api.d.ts +2 -0
  81. package/nav-selector/utils/leaf.utils.d.ts +5 -0
  82. package/nav-selector/utils/nav-selector.accessibility.d.ts +52 -0
  83. package/nav-selector/utils/nav-selector.builder.d.ts +32 -0
  84. package/nav-selector/utils/nav-selector.filter.d.ts +30 -0
  85. package/nav-selector/utils/nav-selector.folding.d.ts +47 -0
  86. package/nav-selector/utils/nav-selector.minifying.d.ts +27 -0
  87. package/nav-selector/utils/nav-selector.multi-select.d.ts +54 -0
  88. package/nav-selector/utils/nav-selector.single-select.d.ts +15 -0
  89. package/nav-selector/utils/nav-selector.view-more.d.ts +30 -0
  90. package/package.json +7 -1
  91. package/tag/tag.component.d.ts +3 -1
  92. package/agorapulse-ui-components-18.0.8.tgz +0 -0
@@ -0,0 +1,219 @@
1
+ import { isInternalNavSelectorEntryACategory, isInternalNavSelectorEntryAGroup, isInternalNavSelectorEntryALeaf, } from '../nav-selector';
2
+ import { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';
3
+ /**
4
+ * Class to handle the folding and unfolding of nav selector entries.
5
+ */
6
+ export class NavSelectorFolding {
7
+ /**
8
+ * Toggle the folding state of an entry.
9
+ *
10
+ * @see {@link NavSelectorFolding.fold} and {@link NavSelectorFolding.unfold} for more information on folding and unfolding.
11
+ *
12
+ * @param entries nav selector entries
13
+ * @param entryUid the entry uid to toggle
14
+ * @param minified true if the nav selector is minified. Needed for leaf as they are not foldable in minified mode
15
+ */
16
+ static toggleFolding(entries, entryUid, minified) {
17
+ return this.toggleEntryFolding(entries, entryUid, minified);
18
+ }
19
+ /**
20
+ * Fold an entry.
21
+ *
22
+ * Set unfocusable on all children of the folded entry.
23
+ * Compute whenever the counter and token invalid should be displayed on groups and leaves.
24
+ *
25
+ * @param entries nav selector entries
26
+ * @param entryUid the entry uid to fold
27
+ * @param minified true if the nav selector is minified. Needed for leaf as they are not foldable in minified mode
28
+ */
29
+ static fold(entries, entryUid, minified) {
30
+ return this.foldEntry(entries, entryUid, minified);
31
+ }
32
+ /**
33
+ * Unfold an entry.
34
+ *
35
+ * Set focusable on all children of the folded entry.
36
+ * Compute whenever the counter and token invalid should be displayed on groups and leaves.
37
+ *
38
+ * @param entries nav selector entries
39
+ * @param entryUid the entry uid to unfold
40
+ * @param minified true if the nav selector is minified. Needed for leaf as they are not foldable in minified mode
41
+ */
42
+ static unfold(entries, entryUid, minified) {
43
+ return this.unfoldEntry(entries, entryUid, minified);
44
+ }
45
+ static toggleEntryFolding(entries, entryUid, minified, parentFolded = false) {
46
+ return entries.map(entry => {
47
+ if (isInternalNavSelectorEntryACategory(entry)) {
48
+ if (entry.uid === entryUid) {
49
+ const folded = !entry.folded;
50
+ if (folded) {
51
+ return this.foldCategory(entry, minified);
52
+ }
53
+ else {
54
+ return this.unfoldCategory(entry, minified);
55
+ }
56
+ }
57
+ return {
58
+ ...entry,
59
+ children: this.toggleEntryFolding(entry.children, entryUid, minified, entry.folded),
60
+ };
61
+ }
62
+ if (isInternalNavSelectorEntryAGroup(entry)) {
63
+ if (entry.uid === entryUid) {
64
+ const folded = !entry.folded;
65
+ if (folded) {
66
+ return this.foldGroup(entry, minified);
67
+ }
68
+ else {
69
+ return this.unfoldGroup(entry, minified);
70
+ }
71
+ }
72
+ return {
73
+ ...entry,
74
+ children: this.toggleEntryFolding(entry.children, entryUid, minified, parentFolded || entry.folded),
75
+ };
76
+ }
77
+ if (isInternalNavSelectorEntryALeaf(entry)) {
78
+ if (entry.uid === entryUid) {
79
+ const folded = !entry.folded;
80
+ if (folded) {
81
+ return this.foldLeaf(entry, minified);
82
+ }
83
+ else {
84
+ return this.unfoldLeaf(entry, minified);
85
+ }
86
+ }
87
+ return {
88
+ ...entry,
89
+ focusable: isInternalNavSelectorEntryALeafFocusable(entry, { minified, parentFolded }),
90
+ };
91
+ }
92
+ return { ...entry, focusable: !parentFolded };
93
+ });
94
+ }
95
+ static foldEntry(entries, entryUid, minified, parentFolded = false) {
96
+ return entries.map(entry => {
97
+ if (isInternalNavSelectorEntryACategory(entry)) {
98
+ if (entry.uid === entryUid) {
99
+ return this.foldCategory(entry, minified);
100
+ }
101
+ return {
102
+ ...entry,
103
+ children: this.foldEntry(entry.children, entryUid, minified, entry.folded),
104
+ };
105
+ }
106
+ if (isInternalNavSelectorEntryAGroup(entry)) {
107
+ if (entry.uid === entryUid) {
108
+ return this.foldGroup(entry, minified);
109
+ }
110
+ return {
111
+ ...entry,
112
+ focusable: !parentFolded,
113
+ children: this.foldEntry(entry.children, entryUid, minified, parentFolded || entry.folded),
114
+ };
115
+ }
116
+ if (isInternalNavSelectorEntryALeaf(entry)) {
117
+ if (entry.uid === entryUid) {
118
+ return this.foldLeaf(entry, minified);
119
+ }
120
+ return {
121
+ ...entry,
122
+ focusable: isInternalNavSelectorEntryALeafFocusable(entry, { minified, parentFolded }),
123
+ };
124
+ }
125
+ return { ...entry, focusable: !parentFolded };
126
+ });
127
+ }
128
+ static unfoldEntry(entries, entryUid, minified, parentFolded = false) {
129
+ return entries.map(entry => {
130
+ if (isInternalNavSelectorEntryACategory(entry)) {
131
+ if (entry.uid === entryUid) {
132
+ return this.unfoldCategory(entry, minified);
133
+ }
134
+ return {
135
+ ...entry,
136
+ children: this.unfoldEntry(entry.children, entryUid, minified, entry.folded),
137
+ };
138
+ }
139
+ if (isInternalNavSelectorEntryAGroup(entry)) {
140
+ if (entry.uid === entryUid) {
141
+ return this.unfoldGroup(entry, minified);
142
+ }
143
+ return {
144
+ ...entry,
145
+ children: this.unfoldEntry(entry.children, entryUid, minified, parentFolded || entry.folded),
146
+ focusable: !parentFolded,
147
+ };
148
+ }
149
+ if (isInternalNavSelectorEntryALeaf(entry)) {
150
+ if (entry.uid === entryUid) {
151
+ return this.unfoldLeaf(entry, minified);
152
+ }
153
+ return {
154
+ ...entry,
155
+ focusable: isInternalNavSelectorEntryALeafFocusable(entry, { minified, parentFolded }),
156
+ };
157
+ }
158
+ return { ...entry, focusable: !parentFolded };
159
+ });
160
+ }
161
+ static foldCategory(category, minified) {
162
+ return {
163
+ ...category,
164
+ folded: true,
165
+ children: this.foldEntry(category.children, category.uid, minified, true),
166
+ };
167
+ }
168
+ static unfoldCategory(category, minified) {
169
+ return {
170
+ ...category,
171
+ folded: false,
172
+ children: this.unfoldEntry(category.children, category.uid, minified, false),
173
+ };
174
+ }
175
+ static foldGroup(group, minified) {
176
+ return {
177
+ ...group,
178
+ folded: true,
179
+ children: this.foldEntry(group.children, group.uid, minified, true),
180
+ displayCounter: !!group.counter,
181
+ displayTokenInvalid: group.children.some(({ displayTokenInvalid }) => displayTokenInvalid),
182
+ };
183
+ }
184
+ static unfoldGroup(group, minified) {
185
+ return {
186
+ ...group,
187
+ folded: false,
188
+ children: this.unfoldEntry(group.children, group.uid, minified, false),
189
+ displayCounter: false,
190
+ displayTokenInvalid: false,
191
+ };
192
+ }
193
+ static foldLeaf(leaf, minified) {
194
+ if (!leaf.foldable || minified) {
195
+ return leaf;
196
+ }
197
+ return {
198
+ ...leaf,
199
+ displayCounter: true,
200
+ folded: true,
201
+ details: leaf.details.map(detail => ({ ...detail, focusable: false })),
202
+ };
203
+ }
204
+ static unfoldLeaf(leaf, minified) {
205
+ if (!leaf.foldable || minified) {
206
+ return leaf;
207
+ }
208
+ return {
209
+ ...leaf,
210
+ displayCounter: false,
211
+ folded: false,
212
+ details: leaf.details.map((detail, idx) => ({
213
+ ...detail,
214
+ focusable: idx < leaf.viewMoreDetailsDisplayedLimit,
215
+ })),
216
+ };
217
+ }
218
+ }
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLmZvbGRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvbmF2LXNlbGVjdG9yL3NyYy91dGlscy9uYXYtc2VsZWN0b3IuZm9sZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0gsbUNBQW1DLEVBQ25DLGdDQUFnQyxFQUNoQywrQkFBK0IsR0FDbEMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRTs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0I7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUNoQixPQUFZLEVBQ1osUUFBZ0IsRUFDaEIsUUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBcUMsT0FBWSxFQUFFLFFBQWdCLEVBQUUsUUFBaUI7UUFDN0YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQXFDLE9BQVksRUFBRSxRQUFnQixFQUFFLFFBQWlCO1FBQy9GLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQzdCLE9BQVksRUFDWixRQUFnQixFQUNoQixRQUFpQixFQUNqQixZQUFZLEdBQUcsS0FBSztRQUVwQixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7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QkFBNkI7YUFDdEQsQ0FBQyxDQUFDO1NBQ04sQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5LFxuICAgIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeSxcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXAsXG4gICAgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYsXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBQ2F0ZWdvcnksXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAsXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZixcbn0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yJztcbmltcG9ydCB7IGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZGb2N1c2FibGUgfSBmcm9tICcuLi91dGlscy9sZWFmLnV0aWxzJztcblxuLyoqXG4gKiBDbGFzcyB0byBoYW5kbGUgdGhlIGZvbGRpbmcgYW5kIHVuZm9sZGluZyBvZiBuYXYgc2VsZWN0b3IgZW50cmllcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hdlNlbGVjdG9yRm9sZGluZyB7XG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHRoZSBmb2xkaW5nIHN0YXRlIG9mIGFuIGVudHJ5LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgTmF2U2VsZWN0b3JGb2xkaW5nLmZvbGR9IGFuZCB7QGxpbmsgTmF2U2VsZWN0b3JGb2xkaW5nLnVuZm9sZH0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZm9sZGluZyBhbmQgdW5mb2xkaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJpZXMgbmF2IHNlbGVjdG9yIGVudHJpZXNcbiAgICAgKiBAcGFyYW0gZW50cnlVaWQgdGhlIGVudHJ5IHVpZCB0byB0b2dnbGVcbiAgICAgKiBAcGFyYW0gbWluaWZpZWQgdHJ1ZSBpZiB0aGUgbmF2IHNlbGVjdG9yIGlzIG1pbmlmaWVkLiBOZWVkZWQgZm9yIGxlYWYgYXMgdGhleSBhcmUgbm90IGZvbGRhYmxlIGluIG1pbmlmaWVkIG1vZGVcbiAgICAgKi9cbiAgICBzdGF0aWMgdG9nZ2xlRm9sZGluZzxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihcbiAgICAgICAgZW50cmllczogVFtdLFxuICAgICAgICBlbnRyeVVpZDogc3RyaW5nLFxuICAgICAgICBtaW5pZmllZDogYm9vbGVhblxuICAgICk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlRW50cnlGb2xkaW5nKGVudHJpZXMsIGVudHJ5VWlkLCBtaW5pZmllZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9sZCBhbiBlbnRyeS5cbiAgICAgKlxuICAgICAqIFNldCB1bmZvY3VzYWJsZSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhlIGZvbGRlZCBlbnRyeS5cbiAgICAgKiBDb21wdXRlIHdoZW5ldmVyIHRoZSBjb3VudGVyIGFuZCB0b2tlbiBpbnZhbGlkIHNob3VsZCBiZSBkaXNwbGF5ZWQgb24gZ3JvdXBzIGFuZCBsZWF2ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50cmllcyBuYXYgc2VsZWN0b3IgZW50cmllc1xuICAgICAqIEBwYXJhbSBlbnRyeVVpZCB0aGUgZW50cnkgdWlkIHRvIGZvbGRcbiAgICAgKiBAcGFyYW0gbWluaWZpZWQgdHJ1ZSBpZiB0aGUgbmF2IHNlbGVjdG9yIGlzIG1pbmlmaWVkLiBOZWVkZWQgZm9yIGxlYWYgYXMgdGhleSBhcmUgbm90IGZvbGRhYmxlIGluIG1pbmlmaWVkIG1vZGVcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9sZDxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihlbnRyaWVzOiBUW10sIGVudHJ5VWlkOiBzdHJpbmcsIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2xkRW50cnkoZW50cmllcywgZW50cnlVaWQsIG1pbmlmaWVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbmZvbGQgYW4gZW50cnkuXG4gICAgICpcbiAgICAgKiBTZXQgZm9jdXNhYmxlIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGUgZm9sZGVkIGVudHJ5LlxuICAgICAqIENvbXB1dGUgd2hlbmV2ZXIgdGhlIGNvdW50ZXIgYW5kIHRva2VuIGludmFsaWQgc2hvdWxkIGJlIGRpc3BsYXllZCBvbiBncm91cHMgYW5kIGxlYXZlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRyaWVzIG5hdiBzZWxlY3RvciBlbnRyaWVzXG4gICAgICogQHBhcmFtIGVudHJ5VWlkIHRoZSBlbnRyeSB1aWQgdG8gdW5mb2xkXG4gICAgICogQHBhcmFtIG1pbmlmaWVkIHRydWUgaWYgdGhlIG5hdiBzZWxlY3RvciBpcyBtaW5pZmllZC4gTmVlZGVkIGZvciBsZWFmIGFzIHRoZXkgYXJlIG5vdCBmb2xkYWJsZSBpbiBtaW5pZmllZCBtb2RlXG4gICAgICovXG4gICAgc3RhdGljIHVuZm9sZDxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihlbnRyaWVzOiBUW10sIGVudHJ5VWlkOiBzdHJpbmcsIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy51bmZvbGRFbnRyeShlbnRyaWVzLCBlbnRyeVVpZCwgbWluaWZpZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHRvZ2dsZUVudHJ5Rm9sZGluZzxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihcbiAgICAgICAgZW50cmllczogVFtdLFxuICAgICAgICBlbnRyeVVpZDogc3RyaW5nLFxuICAgICAgICBtaW5pZmllZDogYm9vbGVhbixcbiAgICAgICAgcGFyZW50Rm9sZGVkID0gZmFsc2VcbiAgICApOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSB7XG4gICAgICAgIHJldHVybiBlbnRyaWVzLm1hcChlbnRyeSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBQ2F0ZWdvcnkoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnVpZCA9PT0gZW50cnlVaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9sZGVkID0gIWVudHJ5LmZvbGRlZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9sZENhdGVnb3J5KGVudHJ5LCBtaW5pZmllZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51bmZvbGRDYXRlZ29yeShlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy50b2dnbGVFbnRyeUZvbGRpbmcoZW50cnkuY2hpbGRyZW4sIGVudHJ5VWlkLCBtaW5pZmllZCwgZW50cnkuZm9sZGVkKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUdyb3VwKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvbGRlZCA9ICFlbnRyeS5mb2xkZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2xkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvbGRHcm91cChlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkR3JvdXAoZW50cnksIG1pbmlmaWVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudG9nZ2xlRW50cnlGb2xkaW5nKGVudHJ5LmNoaWxkcmVuLCBlbnRyeVVpZCwgbWluaWZpZWQsIHBhcmVudEZvbGRlZCB8fCBlbnRyeS5mb2xkZWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkudWlkID09PSBlbnRyeVVpZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2xkZWQgPSAhZW50cnkuZm9sZGVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb2xkTGVhZihlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkTGVhZihlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU6IGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZGb2N1c2FibGUoZW50cnksIHsgbWluaWZpZWQsIHBhcmVudEZvbGRlZCB9KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZW50cnksIGZvY3VzYWJsZTogIXBhcmVudEZvbGRlZCB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBmb2xkRW50cnk8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oXG4gICAgICAgIGVudHJpZXM6IFRbXSxcbiAgICAgICAgZW50cnlVaWQ6IHN0cmluZyxcbiAgICAgICAgbWluaWZpZWQ6IGJvb2xlYW4sXG4gICAgICAgIHBhcmVudEZvbGRlZCA9IGZhbHNlXG4gICAgKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUNhdGVnb3J5KGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvbGRDYXRlZ29yeShlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuZm9sZEVudHJ5KGVudHJ5LmNoaWxkcmVuLCBlbnRyeVVpZCwgbWluaWZpZWQsIGVudHJ5LmZvbGRlZCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFHcm91cChlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkudWlkID09PSBlbnRyeVVpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb2xkR3JvdXAoZW50cnksIG1pbmlmaWVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogIXBhcmVudEZvbGRlZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuZm9sZEVudHJ5KGVudHJ5LmNoaWxkcmVuLCBlbnRyeVVpZCwgbWluaWZpZWQsIHBhcmVudEZvbGRlZCB8fCBlbnRyeS5mb2xkZWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkudWlkID09PSBlbnRyeVVpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb2xkTGVhZihlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlOiBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmRm9jdXNhYmxlKGVudHJ5LCB7IG1pbmlmaWVkLCBwYXJlbnRGb2xkZWQgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmVudHJ5LCBmb2N1c2FibGU6ICFwYXJlbnRGb2xkZWQgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgdW5mb2xkRW50cnk8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oXG4gICAgICAgIGVudHJpZXM6IFRbXSxcbiAgICAgICAgZW50cnlVaWQ6IHN0cmluZyxcbiAgICAgICAgbWluaWZpZWQ6IGJvb2xlYW4sXG4gICAgICAgIHBhcmVudEZvbGRlZCA9IGZhbHNlXG4gICAgKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUNhdGVnb3J5KGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVuZm9sZENhdGVnb3J5KGVudHJ5LCBtaW5pZmllZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy51bmZvbGRFbnRyeShlbnRyeS5jaGlsZHJlbiwgZW50cnlVaWQsIG1pbmlmaWVkLCBlbnRyeS5mb2xkZWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnVpZCA9PT0gZW50cnlVaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkR3JvdXAoZW50cnksIG1pbmlmaWVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLnVuZm9sZEVudHJ5KGVudHJ5LmNoaWxkcmVuLCBlbnRyeVVpZCwgbWluaWZpZWQsIHBhcmVudEZvbGRlZCB8fCBlbnRyeS5mb2xkZWQpLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU6ICFwYXJlbnRGb2xkZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVuZm9sZExlYWYoZW50cnksIG1pbmlmaWVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZkZvY3VzYWJsZShlbnRyeSwgeyBtaW5pZmllZCwgcGFyZW50Rm9sZGVkIH0pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyAuLi5lbnRyeSwgZm9jdXNhYmxlOiAhcGFyZW50Rm9sZGVkIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGZvbGRDYXRlZ29yeShjYXRlZ29yeTogSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5LCBtaW5pZmllZDogYm9vbGVhbik6IEludGVybmFsTmF2U2VsZWN0b3JDYXRlZ29yeSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jYXRlZ29yeSxcbiAgICAgICAgICAgIGZvbGRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmZvbGRFbnRyeShjYXRlZ29yeS5jaGlsZHJlbiwgY2F0ZWdvcnkudWlkLCBtaW5pZmllZCwgdHJ1ZSkgYXMgKFxuICAgICAgICAgICAgICAgIHwgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZcbiAgICAgICAgICAgICAgICB8IEludGVybmFsTmF2U2VsZWN0b3JHcm91cFxuICAgICAgICAgICAgKVtdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHVuZm9sZENhdGVnb3J5KGNhdGVnb3J5OiBJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnksIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNhdGVnb3J5LFxuICAgICAgICAgICAgZm9sZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLnVuZm9sZEVudHJ5KGNhdGVnb3J5LmNoaWxkcmVuLCBjYXRlZ29yeS51aWQsIG1pbmlmaWVkLCBmYWxzZSkgYXMgKFxuICAgICAgICAgICAgICAgIHwgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZcbiAgICAgICAgICAgICAgICB8IEludGVybmFsTmF2U2VsZWN0b3JHcm91cFxuICAgICAgICAgICAgKVtdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGZvbGRHcm91cChncm91cDogSW50ZXJuYWxOYXZTZWxlY3Rvckdyb3VwLCBtaW5pZmllZDogYm9vbGVhbik6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgIGZvbGRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmZvbGRFbnRyeShncm91cC5jaGlsZHJlbiwgZ3JvdXAudWlkLCBtaW5pZmllZCwgdHJ1ZSkgYXMgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZbXSxcbiAgICAgICAgICAgIGRpc3BsYXlDb3VudGVyOiAhIWdyb3VwLmNvdW50ZXIsXG4gICAgICAgICAgICBkaXNwbGF5VG9rZW5JbnZhbGlkOiBncm91cC5jaGlsZHJlbi5zb21lKCh7IGRpc3BsYXlUb2tlbkludmFsaWQgfSkgPT4gZGlzcGxheVRva2VuSW52YWxpZCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgdW5mb2xkR3JvdXAoZ3JvdXA6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCwgbWluaWZpZWQ6IGJvb2xlYW4pOiBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXAge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICBmb2xkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudW5mb2xkRW50cnkoZ3JvdXAuY2hpbGRyZW4sIGdyb3VwLnVpZCwgbWluaWZpZWQsIGZhbHNlKSBhcyBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZltdLFxuICAgICAgICAgICAgZGlzcGxheUNvdW50ZXI6IGZhbHNlLFxuICAgICAgICAgICAgZGlzcGxheVRva2VuSW52YWxpZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9sZExlYWYobGVhZjogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYsIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYge1xuICAgICAgICBpZiAoIWxlYWYuZm9sZGFibGUgfHwgbWluaWZpZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWFmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5sZWFmLFxuICAgICAgICAgICAgZGlzcGxheUNvdW50ZXI6IHRydWUsXG4gICAgICAgICAgICBmb2xkZWQ6IHRydWUsXG4gICAgICAgICAgICBkZXRhaWxzOiBsZWFmLmRldGFpbHMubWFwKGRldGFpbCA9PiAoeyAuLi5kZXRhaWwsIGZvY3VzYWJsZTogZmFsc2UgfSkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHVuZm9sZExlYWYobGVhZjogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYsIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYge1xuICAgICAgICBpZiAoIWxlYWYuZm9sZGFibGUgfHwgbWluaWZpZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWFmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5sZWFmLFxuICAgICAgICAgICAgZGlzcGxheUNvdW50ZXI6IGZhbHNlLFxuICAgICAgICAgICAgZm9sZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbHM6IGxlYWYuZGV0YWlscy5tYXAoKGRldGFpbCwgaWR4KSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLmRldGFpbCxcbiAgICAgICAgICAgICAgICBmb2N1c2FibGU6IGlkeCA8IGxlYWYudmlld01vcmVEZXRhaWxzRGlzcGxheWVkTGltaXQsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
@@ -0,0 +1,50 @@
1
+ import { isInternalNavSelectorEntryALeafDetails, isInternalNavSelectorEntryANode, } from '../nav-selector';
2
+ import { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';
3
+ /**
4
+ * NavSelectorMinifying is a utility class that provides methods to apply rules on entries when minifying or expanded nav selector.
5
+ */
6
+ export class NavSelectorMinifying {
7
+ /**
8
+ * When minifying the nav selector, compute the focusable state of the entries.
9
+ *
10
+ * Leaf are not focusable in any error state when minified.
11
+ * Detail are not focusable when minified.
12
+ *
13
+ * @param entries The entries to minify.
14
+ * @returns The modified entries.
15
+ */
16
+ static minify(entries) {
17
+ return this.compute(entries, true);
18
+ }
19
+ /**
20
+ * When expanding the nav selector, compute the focusable state of the entries.
21
+ *
22
+ * Leaf are not focusable in disabled state when expanded.
23
+ * Detail are focusable when expanded.
24
+ *
25
+ * @param entries The entries to minify.
26
+ * @returns The modified entries.
27
+ */
28
+ static expand(entries) {
29
+ return this.compute(entries, false);
30
+ }
31
+ static compute(entries, minified, parent = null) {
32
+ return entries.map(entry => {
33
+ if (isInternalNavSelectorEntryALeafDetails(entry)) {
34
+ return { ...entry, focusable: !minified };
35
+ }
36
+ if (isInternalNavSelectorEntryANode(entry)) {
37
+ return {
38
+ ...entry,
39
+ children: this.compute(entry.children, minified, entry),
40
+ };
41
+ }
42
+ return {
43
+ ...entry,
44
+ focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded: parent?.folded === true, minified: minified }),
45
+ details: this.compute(entry.details, minified),
46
+ };
47
+ });
48
+ }
49
+ }
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLm1pbmlmeWluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL3V0aWxzL25hdi1zZWxlY3Rvci5taW5pZnlpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILHNDQUFzQyxFQUN0QywrQkFBK0IsR0FDbEMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRTs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFDN0I7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFxQyxPQUFZO1FBQzFELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBcUMsT0FBWTtRQUMxRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxNQUFNLENBQUMsT0FBTyxDQUNsQixPQUFZLEVBQ1osUUFBaUIsRUFDakIsU0FBd0UsSUFBSTtRQUU1RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxzQ0FBc0MsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUMsQ0FBQztZQUNELElBQUksK0JBQStCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsT0FBTztvQkFDSCxHQUFHLEtBQUs7b0JBQ1IsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDO2lCQUMxRCxDQUFDO1lBQ04sQ0FBQztZQUVELE9BQU87Z0JBQ0gsR0FBRyxLQUFLO2dCQUNSLFNBQVMsRUFBRSx3Q0FBd0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUN6SCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQzthQUNqRCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEludGVybmFsTmF2U2VsZWN0b3JDYXRlZ29yeSxcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnksXG4gICAgSW50ZXJuYWxOYXZTZWxlY3Rvckdyb3VwLFxuICAgIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZEZXRhaWxzLFxuICAgIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUsXG59IGZyb20gJy4uL25hdi1zZWxlY3Rvcic7XG5pbXBvcnQgeyBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmRm9jdXNhYmxlIH0gZnJvbSAnLi4vdXRpbHMvbGVhZi51dGlscyc7XG5cbi8qKlxuICogTmF2U2VsZWN0b3JNaW5pZnlpbmcgaXMgYSB1dGlsaXR5IGNsYXNzIHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBhcHBseSBydWxlcyBvbiBlbnRyaWVzIHdoZW4gbWluaWZ5aW5nIG9yIGV4cGFuZGVkIG5hdiBzZWxlY3Rvci5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hdlNlbGVjdG9yTWluaWZ5aW5nIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIG1pbmlmeWluZyB0aGUgbmF2IHNlbGVjdG9yLCBjb21wdXRlIHRoZSBmb2N1c2FibGUgc3RhdGUgb2YgdGhlIGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBMZWFmIGFyZSBub3QgZm9jdXNhYmxlIGluIGFueSBlcnJvciBzdGF0ZSB3aGVuIG1pbmlmaWVkLlxuICAgICAqIERldGFpbCBhcmUgbm90IGZvY3VzYWJsZSB3aGVuIG1pbmlmaWVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJpZXMgVGhlIGVudHJpZXMgdG8gbWluaWZ5LlxuICAgICAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBlbnRyaWVzLlxuICAgICAqL1xuICAgIHN0YXRpYyBtaW5pZnk8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oZW50cmllczogVFtdKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlKGVudHJpZXMsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gZXhwYW5kaW5nIHRoZSBuYXYgc2VsZWN0b3IsIGNvbXB1dGUgdGhlIGZvY3VzYWJsZSBzdGF0ZSBvZiB0aGUgZW50cmllcy5cbiAgICAgKlxuICAgICAqIExlYWYgYXJlIG5vdCBmb2N1c2FibGUgaW4gZGlzYWJsZWQgc3RhdGUgd2hlbiBleHBhbmRlZC5cbiAgICAgKiBEZXRhaWwgYXJlIGZvY3VzYWJsZSB3aGVuIGV4cGFuZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJpZXMgVGhlIGVudHJpZXMgdG8gbWluaWZ5LlxuICAgICAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBlbnRyaWVzLlxuICAgICAqL1xuICAgIHN0YXRpYyBleHBhbmQ8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oZW50cmllczogVFtdKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlKGVudHJpZXMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb21wdXRlPFQgZXh0ZW5kcyBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnk+KFxuICAgICAgICBlbnRyaWVzOiBUW10sXG4gICAgICAgIG1pbmlmaWVkOiBib29sZWFuLFxuICAgICAgICBwYXJlbnQ6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCB8IEludGVybmFsTmF2U2VsZWN0b3JDYXRlZ29yeSB8IG51bGwgPSBudWxsXG4gICAgKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZEZXRhaWxzKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmVudHJ5LCBmb2N1c2FibGU6ICFtaW5pZmllZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmNvbXB1dGUoZW50cnkuY2hpbGRyZW4sIG1pbmlmaWVkLCBlbnRyeSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICBmb2N1c2FibGU6IGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZGb2N1c2FibGUoZW50cnksIHsgcGFyZW50Rm9sZGVkOiBwYXJlbnQ/LmZvbGRlZCA9PT0gdHJ1ZSwgbWluaWZpZWQ6IG1pbmlmaWVkIH0pLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuY29tcHV0ZShlbnRyeS5kZXRhaWxzLCBtaW5pZmllZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,208 @@
1
+ import { isInternalNavSelectorEntryACategory, isInternalNavSelectorEntryAGroup, isInternalNavSelectorEntryALeaf, isInternalNavSelectorEntryANode, } from '../nav-selector';
2
+ /**
3
+ * NavSelectorMultiSelect is a utility class that provides methods to select an entry in multiple mode.
4
+ */
5
+ export class NavSelectorMultiSelect {
6
+ /**
7
+ * Select an entry in multiple mode.
8
+ *
9
+ * Categories are not selectable.
10
+ *
11
+ * Groups and leaves are selectable.
12
+ *
13
+ * Groups may be in undetermined state if some of their children are selected and some are not.
14
+ * @param entries nav selector entries
15
+ * @param entryUid the entry uid to select
16
+ */
17
+ static selectInMultipleMode(entries, entryUid) {
18
+ return entries.map(entry => {
19
+ if (isInternalNavSelectorEntryALeaf(entry)) {
20
+ return this.selectALeafInMultipleMode(entry, entryUid);
21
+ }
22
+ else if (isInternalNavSelectorEntryAGroup(entry)) {
23
+ return this.selectAGroupInMultipleMode(entry, entryUid);
24
+ }
25
+ else if (isInternalNavSelectorEntryACategory(entry)) {
26
+ return this.selectACategoryInMultipleMode(entry, entryUid);
27
+ }
28
+ return entry;
29
+ });
30
+ }
31
+ /**
32
+ * Select only a leaf in multiple mode.
33
+ *
34
+ * Categories are not selectable.
35
+ *
36
+ * Groups may be in undetermined state if some of their children are selected and some are not.
37
+ * @param entries nav selector entries
38
+ * @param entryUid the entry uid to select
39
+ */
40
+ static selectOnlyALeafInMultipleMode(entries, entryUid) {
41
+ return entries.map(entry => {
42
+ if (isInternalNavSelectorEntryALeaf(entry)) {
43
+ return {
44
+ ...entry,
45
+ selected: entry.uid === entryUid,
46
+ };
47
+ }
48
+ else if (isInternalNavSelectorEntryACategory(entry)) {
49
+ return {
50
+ ...entry,
51
+ children: this.selectOnlyALeafInMultipleMode(entry.children, entryUid),
52
+ };
53
+ }
54
+ else if (isInternalNavSelectorEntryAGroup(entry)) {
55
+ const children = entry.children.flatMap(child => this.selectOnlyALeafInMultipleMode([child], entryUid));
56
+ const selected = children.every(child => child.selected || (isInternalNavSelectorEntryALeaf(child) && !child.selectable));
57
+ return {
58
+ ...entry,
59
+ children,
60
+ selected,
61
+ undeterminedSelection: !selected && children.some(child => child.selected),
62
+ };
63
+ }
64
+ return entry;
65
+ });
66
+ }
67
+ /**
68
+ * Select all entries in multiple mode.
69
+ *
70
+ * Categories are not selectable.
71
+ *
72
+ * Groups and leaves are selectable.
73
+ * @param entries nav selector entries
74
+ */
75
+ static selectAll(entries) {
76
+ return this.selectChildren(entries);
77
+ }
78
+ /**
79
+ * Unselect all entries in multiple mode.
80
+ *
81
+ * Categories are not selectable.
82
+ *
83
+ * Groups and leaves are selectable.
84
+ * @param entries nav selector entries
85
+ */
86
+ static unselectAll(entries) {
87
+ return this.unselectChildren(entries);
88
+ }
89
+ static selectALeafInMultipleMode(leaf, entryUid) {
90
+ let selected = false;
91
+ if (leaf.selectable) {
92
+ selected = leaf.uid === entryUid ? !leaf.selected : leaf.selected;
93
+ }
94
+ return {
95
+ ...leaf,
96
+ selected,
97
+ };
98
+ }
99
+ static selectACategoryInMultipleMode(entry, entryUid) {
100
+ return {
101
+ ...entry,
102
+ children: entry.children.map(child => {
103
+ if (isInternalNavSelectorEntryALeaf(child)) {
104
+ return this.selectALeafInMultipleMode(child, entryUid);
105
+ }
106
+ return this.selectAGroupInMultipleMode(child, entryUid);
107
+ }),
108
+ };
109
+ }
110
+ static selectAGroupInMultipleMode(entry, entryUid) {
111
+ if (!entry.selectable) {
112
+ return entry;
113
+ }
114
+ let selected;
115
+ let children;
116
+ let undeterminedSelection = false;
117
+ if (entry.uid === entryUid) {
118
+ selected = !entry.selected;
119
+ if (selected) {
120
+ children = this.selectLeafs(entry.children);
121
+ }
122
+ else {
123
+ children = this.unselectLeafs(entry.children);
124
+ }
125
+ }
126
+ else {
127
+ children = entry.children.map(child => this.toggleSelectLeaf(child, entryUid));
128
+ selected = children.every(child => child.selected || (isInternalNavSelectorEntryALeaf(child) && !child.selectable));
129
+ undeterminedSelection = !selected && children.some(child => child.selected);
130
+ }
131
+ return {
132
+ ...entry,
133
+ children,
134
+ selected,
135
+ undeterminedSelection,
136
+ };
137
+ }
138
+ static toggleSelectLeaf(leaf, uid) {
139
+ if (leaf.uid === uid) {
140
+ return {
141
+ ...leaf,
142
+ selected: !leaf.selected,
143
+ };
144
+ }
145
+ return leaf;
146
+ }
147
+ static selectLeafs(leafs) {
148
+ return leafs.map(leaf => ({
149
+ ...leaf,
150
+ selected: true,
151
+ }));
152
+ }
153
+ static unselectLeafs(leafs) {
154
+ return leafs.map(leaf => ({
155
+ ...leaf,
156
+ selected: false,
157
+ }));
158
+ }
159
+ static unselectChildren(entry) {
160
+ return entry.map(child => {
161
+ if (isInternalNavSelectorEntryALeaf(child)) {
162
+ return {
163
+ ...child,
164
+ selected: false,
165
+ };
166
+ }
167
+ else if (isInternalNavSelectorEntryACategory(child)) {
168
+ return {
169
+ ...child,
170
+ children: this.unselectChildren(child.children),
171
+ };
172
+ }
173
+ else if (isInternalNavSelectorEntryANode(child)) {
174
+ return {
175
+ ...child,
176
+ children: this.unselectChildren(child.children),
177
+ selected: false,
178
+ };
179
+ }
180
+ return child;
181
+ });
182
+ }
183
+ static selectChildren(entry) {
184
+ return entry.map(child => {
185
+ if (isInternalNavSelectorEntryALeaf(child)) {
186
+ return {
187
+ ...child,
188
+ selected: child.selectable,
189
+ };
190
+ }
191
+ else if (isInternalNavSelectorEntryACategory(child)) {
192
+ return {
193
+ ...child,
194
+ children: this.selectChildren(child.children),
195
+ };
196
+ }
197
+ else if (isInternalNavSelectorEntryAGroup(child)) {
198
+ return {
199
+ ...child,
200
+ children: this.selectChildren(child.children),
201
+ selected: true,
202
+ };
203
+ }
204
+ return child;
205
+ });
206
+ }
207
+ }
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLm11bHRpLXNlbGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL3V0aWxzL25hdi1zZWxlY3Rvci5tdWx0aS1zZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUtILG1DQUFtQyxFQUNuQyxnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLCtCQUErQixHQUNsQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUMvQjs7Ozs7Ozs7OztPQVVHO0lBQ0gsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE9BQW1DLEVBQUUsUUFBZ0I7UUFDN0UsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLElBQUksK0JBQStCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNELENBQUM7aUJBQU0sSUFBSSxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUQsQ0FBQztpQkFBTSxJQUFJLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsNkJBQTZCLENBQXFDLE9BQVksRUFBRSxRQUFnQjtRQUNuRyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMs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QUFDO29CQUMvQyxRQUFRLEVBQUUsS0FBSztpQkFDbEIsQ0FBQztZQUNOLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxNQUFNLENBQUMsY0FBYyxDQUFxQyxLQUFVO1FBQ3hFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLCtCQUErQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLE9BQU87b0JBQ0gsR0FBRyxLQUFLO29CQUNSLFFBQVEsRUFBRSxLQUFLLENBQUMsVUFBVTtpQkFDN0IsQ0FBQztZQUNOLENBQUM7aUJBQU0sSUFBSSxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxPQUFPO29CQUNILEdBQUcsS0FBSztvQkFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO2lCQUNoRCxDQUFDO1lBQ04sQ0FBQztpQkFBTSxJQUFJLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE9BQU87b0JBQ0gsR0FBRyxLQUFLO29CQUNSLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7b0JBQzdDLFFBQVEsRUFBRSxJQUFJO2lCQUNqQixDQUFDO1lBQ04sQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnksXG4gICAgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5LFxuICAgIEludGVybmFsTmF2U2VsZWN0b3JHcm91cCxcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZixcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFDYXRlZ29yeSxcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFHcm91cCxcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmLFxuICAgIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUsXG59IGZyb20gJy4uL25hdi1zZWxlY3Rvcic7XG5cbi8qKlxuICogTmF2U2VsZWN0b3JNdWx0aVNlbGVjdCBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIHNlbGVjdCBhbiBlbnRyeSBpbiBtdWx0aXBsZSBtb2RlLlxuICovXG5leHBvcnQgY2xhc3MgTmF2U2VsZWN0b3JNdWx0aVNlbGVjdCB7XG4gICAgLyoqXG4gICAgICogU2VsZWN0IGFuIGVudHJ5IGluIG11bHRpcGxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBDYXRlZ29yaWVzIGFyZSBub3Qgc2VsZWN0YWJsZS5cbiAgICAgKlxuICAgICAqIEdyb3VwcyBhbmQgbGVhdmVzIGFyZSBzZWxlY3RhYmxlLlxuICAgICAqXG4gICAgICogR3JvdXBzIG1heSBiZSBpbiB1bmRldGVybWluZWQgc3RhdGUgaWYgc29tZSBvZiB0aGVpciBjaGlsZHJlbiBhcmUgc2VsZWN0ZWQgYW5kIHNvbWUgYXJlIG5vdC5cbiAgICAgKiBAcGFyYW0gZW50cmllcyBuYXYgc2VsZWN0b3IgZW50cmllc1xuICAgICAqIEBwYXJhbSBlbnRyeVVpZCB0aGUgZW50cnkgdWlkIHRvIHNlbGVjdFxuICAgICAqL1xuICAgIHN0YXRpYyBzZWxlY3RJbk11bHRpcGxlTW9kZShlbnRyaWVzOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSwgZW50cnlVaWQ6IHN0cmluZyk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIGVudHJpZXMubWFwKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdEFMZWFmSW5NdWx0aXBsZU1vZGUoZW50cnksIGVudHJ5VWlkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QUdyb3VwSW5NdWx0aXBsZU1vZGUoZW50cnksIGVudHJ5VWlkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBQ2F0ZWdvcnkoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QUNhdGVnb3J5SW5NdWx0aXBsZU1vZGUoZW50cnksIGVudHJ5VWlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IG9ubHkgYSBsZWFmIGluIG11bHRpcGxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBDYXRlZ29yaWVzIGFyZSBub3Qgc2VsZWN0YWJsZS5cbiAgICAgKlxuICAgICAqIEdyb3VwcyBtYXkgYmUgaW4gdW5kZXRlcm1pbmVkIHN0YXRlIGlmIHNvbWUgb2YgdGhlaXIgY2hpbGRyZW4gYXJlIHNlbGVjdGVkIGFuZCBzb21lIGFyZSBub3QuXG4gICAgICogQHBhcmFtIGVudHJpZXMgbmF2IHNlbGVjdG9yIGVudHJpZXNcbiAgICAgKiBAcGFyYW0gZW50cnlVaWQgdGhlIGVudHJ5IHVpZCB0byBzZWxlY3RcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VsZWN0T25seUFMZWFmSW5NdWx0aXBsZU1vZGU8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oZW50cmllczogVFtdLCBlbnRyeVVpZDogc3RyaW5nKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBlbnRyeS51aWQgPT09IGVudHJ5VWlkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUNhdGVnb3J5KGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5zZWxlY3RPbmx5QUxlYWZJbk11bHRpcGxlTW9kZShlbnRyeS5jaGlsZHJlbiwgZW50cnlVaWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUdyb3VwKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZW50cnkuY2hpbGRyZW4uZmxhdE1hcChcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQgPT4gdGhpcy5zZWxlY3RPbmx5QUxlYWZJbk11bHRpcGxlTW9kZShbY2hpbGRdLCBlbnRyeVVpZCkgYXMgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZbXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBjaGlsZHJlbi5ldmVyeShjaGlsZCA9PiBjaGlsZC5zZWxlY3RlZCB8fCAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZihjaGlsZCkgJiYgIWNoaWxkLnNlbGVjdGFibGUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICB1bmRldGVybWluZWRTZWxlY3Rpb246ICFzZWxlY3RlZCAmJiBjaGlsZHJlbi5zb21lKGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3QgYWxsIGVudHJpZXMgaW4gbXVsdGlwbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIENhdGVnb3JpZXMgYXJlIG5vdCBzZWxlY3RhYmxlLlxuICAgICAqXG4gICAgICogR3JvdXBzIGFuZCBsZWF2ZXMgYXJlIHNlbGVjdGFibGUuXG4gICAgICogQHBhcmFtIGVudHJpZXMgbmF2IHNlbGVjdG9yIGVudHJpZXNcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VsZWN0QWxsKGVudHJpZXM6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RDaGlsZHJlbihlbnRyaWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbnNlbGVjdCBhbGwgZW50cmllcyBpbiBtdWx0aXBsZSBtb2RlLlxuICAgICAqXG4gICAgICogQ2F0ZWdvcmllcyBhcmUgbm90IHNlbGVjdGFibGUuXG4gICAgICpcbiAgICAgKiBHcm91cHMgYW5kIGxlYXZlcyBhcmUgc2VsZWN0YWJsZS5cbiAgICAgKiBAcGFyYW0gZW50cmllcyBuYXYgc2VsZWN0b3IgZW50cmllc1xuICAgICAqL1xuICAgIHN0YXRpYyB1bnNlbGVjdEFsbChlbnRyaWVzOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5zZWxlY3RDaGlsZHJlbihlbnRyaWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBzZWxlY3RBTGVhZkluTXVsdGlwbGVNb2RlKGxlYWY6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmLCBlbnRyeVVpZDogc3RyaW5nKTogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYge1xuICAgICAgICBsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGxlYWYuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBsZWFmLnVpZCA9PT0gZW50cnlVaWQgPyAhbGVhZi5zZWxlY3RlZCA6IGxlYWYuc2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmxlYWYsXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBzZWxlY3RBQ2F0ZWdvcnlJbk11bHRpcGxlTW9kZShlbnRyeTogSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5LCBlbnRyeVVpZDogc3RyaW5nKTogSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgY2hpbGRyZW46IGVudHJ5LmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdEFMZWFmSW5NdWx0aXBsZU1vZGUoY2hpbGQsIGVudHJ5VWlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QUdyb3VwSW5NdWx0aXBsZU1vZGUoY2hpbGQsIGVudHJ5VWlkKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNlbGVjdEFHcm91cEluTXVsdGlwbGVNb2RlKGVudHJ5OiBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXAsIGVudHJ5VWlkOiBzdHJpbmcpOiBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXAge1xuICAgICAgICBpZiAoIWVudHJ5LnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgICAgIGxldCBjaGlsZHJlbjogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZbXTtcbiAgICAgICAgbGV0IHVuZGV0ZXJtaW5lZFNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoZW50cnkudWlkID09PSBlbnRyeVVpZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSAhZW50cnkuc2VsZWN0ZWQ7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMuc2VsZWN0TGVhZnMoZW50cnkuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMudW5zZWxlY3RMZWFmcyhlbnRyeS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGVudHJ5LmNoaWxkcmVuLm1hcChjaGlsZCA9PiB0aGlzLnRvZ2dsZVNlbGVjdExlYWYoY2hpbGQsIGVudHJ5VWlkKSk7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IGNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkIHx8IChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGNoaWxkKSAmJiAhY2hpbGQuc2VsZWN0YWJsZSkpO1xuICAgICAgICAgICAgdW5kZXRlcm1pbmVkU2VsZWN0aW9uID0gIXNlbGVjdGVkICYmIGNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQuc2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIHVuZGV0ZXJtaW5lZFNlbGVjdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB0b2dnbGVTZWxlY3RMZWFmKGxlYWY6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmLCB1aWQ6IHN0cmluZyk6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmIHtcbiAgICAgICAgaWYgKGxlYWYudWlkID09PSB1aWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ubGVhZixcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogIWxlYWYuc2VsZWN0ZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsZWFmO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNlbGVjdExlYWZzKGxlYWZzOiBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZltdKTogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZbXSB7XG4gICAgICAgIHJldHVybiBsZWFmcy5tYXAobGVhZiA9PiAoe1xuICAgICAgICAgICAgLi4ubGVhZixcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgdW5zZWxlY3RMZWFmcyhsZWFmczogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZbXSk6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmW10ge1xuICAgICAgICByZXR1cm4gbGVhZnMubWFwKGxlYWYgPT4gKHtcbiAgICAgICAgICAgIC4uLmxlYWYsXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB1bnNlbGVjdENoaWxkcmVuPFQgZXh0ZW5kcyBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnk+KGVudHJ5OiBUW10pOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSB7XG4gICAgICAgIHJldHVybiBlbnRyeS5tYXAoY2hpbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFDYXRlZ29yeShjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudW5zZWxlY3RDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTm9kZShjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudW5zZWxlY3RDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBzZWxlY3RDaGlsZHJlbjxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihlbnRyeTogVFtdKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cnkubWFwKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogY2hpbGQuc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFDYXRlZ29yeShjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuc2VsZWN0Q2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUdyb3VwKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5zZWxlY3RDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==