@agorapulse/ui-components 18.0.9 → 18.0.11

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 (65) hide show
  1. package/agorapulse-ui-components-18.0.11.tgz +0 -0
  2. package/esm2022/datepicker/datepicker.component.mjs +1 -1
  3. package/esm2022/index.mjs +2 -1
  4. package/esm2022/input-search/input-search.component.mjs +5 -4
  5. package/esm2022/nav-selector/agorapulse-ui-components-nav-selector.mjs +5 -0
  6. package/esm2022/nav-selector/directives/tree-node-accessibility.directive.mjs +30 -0
  7. package/esm2022/nav-selector/nav-selector-category/nav-selector-category.component.mjs +81 -0
  8. package/esm2022/nav-selector/nav-selector-category/nav-selector-category.presenter.mjs +29 -0
  9. package/esm2022/nav-selector/nav-selector-group/nav-selector-group.component.mjs +142 -0
  10. package/esm2022/nav-selector/nav-selector-group/nav-selector-group.presenter.mjs +31 -0
  11. package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.component.mjs +240 -0
  12. package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.presenter.mjs +35 -0
  13. package/esm2022/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.component.mjs +39 -0
  14. package/esm2022/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.mjs +18 -0
  15. package/esm2022/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.component.mjs +92 -0
  16. package/esm2022/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.presenter.mjs +31 -0
  17. package/esm2022/nav-selector/nav-selector.component.mjs +123 -0
  18. package/esm2022/nav-selector/nav-selector.mjs +9 -0
  19. package/esm2022/nav-selector/nav-selector.state.mjs +173 -0
  20. package/esm2022/nav-selector/public_api.mjs +2 -0
  21. package/esm2022/nav-selector/utils/leaf.utils.mjs +10 -0
  22. package/esm2022/nav-selector/utils/nav-selector.accessibility.mjs +171 -0
  23. package/esm2022/nav-selector/utils/nav-selector.builder.mjs +263 -0
  24. package/esm2022/nav-selector/utils/nav-selector.filter.mjs +102 -0
  25. package/esm2022/nav-selector/utils/nav-selector.folding.mjs +219 -0
  26. package/esm2022/nav-selector/utils/nav-selector.minifying.mjs +50 -0
  27. package/esm2022/nav-selector/utils/nav-selector.multi-select.mjs +208 -0
  28. package/esm2022/nav-selector/utils/nav-selector.single-select.mjs +91 -0
  29. package/esm2022/nav-selector/utils/nav-selector.view-more.mjs +98 -0
  30. package/fesm2022/agorapulse-ui-components-datepicker.mjs.map +1 -1
  31. package/fesm2022/agorapulse-ui-components-input-search.mjs +4 -3
  32. package/fesm2022/agorapulse-ui-components-input-search.mjs.map +1 -1
  33. package/fesm2022/agorapulse-ui-components-nav-selector.mjs +2198 -0
  34. package/fesm2022/agorapulse-ui-components-nav-selector.mjs.map +1 -0
  35. package/fesm2022/agorapulse-ui-components.mjs +1 -0
  36. package/fesm2022/agorapulse-ui-components.mjs.map +1 -1
  37. package/index.d.ts +1 -0
  38. package/input-search/input-search.component.d.ts +1 -1
  39. package/nav-selector/directives/tree-node-accessibility.directive.d.ts +9 -0
  40. package/nav-selector/index.d.ts +5 -0
  41. package/nav-selector/nav-selector-category/nav-selector-category.component.d.ts +16 -0
  42. package/nav-selector/nav-selector-category/nav-selector-category.presenter.d.ts +14 -0
  43. package/nav-selector/nav-selector-group/nav-selector-group.component.d.ts +29 -0
  44. package/nav-selector/nav-selector-group/nav-selector-group.presenter.d.ts +17 -0
  45. package/nav-selector/nav-selector-leaf/nav-selector-leaf.component.d.ts +51 -0
  46. package/nav-selector/nav-selector-leaf/nav-selector-leaf.presenter.d.ts +19 -0
  47. package/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.component.d.ts +13 -0
  48. package/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.d.ts +10 -0
  49. package/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.component.d.ts +24 -0
  50. package/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.presenter.d.ts +14 -0
  51. package/nav-selector/nav-selector.component.d.ts +29 -0
  52. package/nav-selector/nav-selector.d.ts +220 -0
  53. package/nav-selector/nav-selector.state.d.ts +47 -0
  54. package/nav-selector/public_api.d.ts +2 -0
  55. package/nav-selector/utils/leaf.utils.d.ts +5 -0
  56. package/nav-selector/utils/nav-selector.accessibility.d.ts +52 -0
  57. package/nav-selector/utils/nav-selector.builder.d.ts +32 -0
  58. package/nav-selector/utils/nav-selector.filter.d.ts +30 -0
  59. package/nav-selector/utils/nav-selector.folding.d.ts +47 -0
  60. package/nav-selector/utils/nav-selector.minifying.d.ts +27 -0
  61. package/nav-selector/utils/nav-selector.multi-select.d.ts +54 -0
  62. package/nav-selector/utils/nav-selector.single-select.d.ts +15 -0
  63. package/nav-selector/utils/nav-selector.view-more.d.ts +30 -0
  64. package/package.json +13 -7
  65. package/agorapulse-ui-components-18.0.9.tgz +0 -0
@@ -0,0 +1,173 @@
1
+ import { computed, effect, Injectable, signal } from '@angular/core';
2
+ import { isInternalNavSelectorEntryALeaf, isInternalNavSelectorEntryANode, } from './nav-selector';
3
+ import { NavSelectorAccessibility } from './utils/nav-selector.accessibility';
4
+ import { NavSelectorBuilder } from './utils/nav-selector.builder';
5
+ import { NavSelectorFilter } from './utils/nav-selector.filter';
6
+ import { NavSelectorFolding } from './utils/nav-selector.folding';
7
+ import { NavSelectorMinifying } from './utils/nav-selector.minifying';
8
+ import { NavSelectorMultiSelect } from './utils/nav-selector.multi-select';
9
+ import { NavSelectorSingleSelect } from './utils/nav-selector.single-select';
10
+ import { NavSelectorViewMore } from './utils/nav-selector.view-more';
11
+ import * as i0 from "@angular/core";
12
+ /**
13
+ * NavSelectorState is a service that manages the state of the nav selector.
14
+ *
15
+ * It should be provided by the component to ensure that if many nav selectors are used in the same page, they don't share the same state.
16
+ */
17
+ export class NavSelectorState {
18
+ entries = signal([]);
19
+ multipleModeEnabled = signal(false);
20
+ _texts = signal({
21
+ title: '',
22
+ only: '',
23
+ tokenInvalid: '',
24
+ featureLocked: '',
25
+ searchPlaceholder: '',
26
+ noResults: '',
27
+ viewMore: '',
28
+ viewLess: '',
29
+ });
30
+ lastSelectedUids = signal([]);
31
+ isMultipleModeEnabled = this.multipleModeEnabled;
32
+ search = signal('');
33
+ filteredEntries = computed(() => NavSelectorFilter.filter(this.entries(), this.search()));
34
+ noResults = computed(() => this.filteredEntries().every(({ hidden }) => hidden));
35
+ texts = this._texts.asReadonly();
36
+ leafActionProjection = signal(undefined);
37
+ expanded = signal(true);
38
+ expandedAfterDelay = signal(true);
39
+ selectedUidsChangeCallback = null;
40
+ constructor() {
41
+ effect(() => {
42
+ const newSelectedUids = this.collectSelectedUids(this.entries());
43
+ if (this.selectedUidsChangeCallback) {
44
+ this.selectedUidsChangeCallback(newSelectedUids);
45
+ }
46
+ }, { allowSignalWrites: true });
47
+ }
48
+ updateMultiModeEnabled(enabled) {
49
+ this.multipleModeEnabled.set(enabled);
50
+ }
51
+ updateEntries(entries, initialSelectedEntryUids, detailsDisplayedLimit) {
52
+ if (this.multipleModeEnabled()) {
53
+ this.entries.set(NavSelectorBuilder.buildInMultipleMode(entries, initialSelectedEntryUids, detailsDisplayedLimit));
54
+ }
55
+ else {
56
+ this.entries.set(NavSelectorBuilder.build(entries, initialSelectedEntryUids?.[0] ?? null, detailsDisplayedLimit));
57
+ }
58
+ }
59
+ onGroupToggleFolding(group) {
60
+ this.entries.update(entries => NavSelectorFolding.toggleFolding(entries, group.uid, !this.expanded()));
61
+ }
62
+ onNodeSelect(node) {
63
+ this.entries.update(entries => NavSelectorMultiSelect.selectInMultipleMode(entries, node.uid));
64
+ }
65
+ onLeafClicked(leaf) {
66
+ if (!leaf.selectable) {
67
+ return;
68
+ }
69
+ if (this.multipleModeEnabled()) {
70
+ this.entries.update(entries => NavSelectorMultiSelect.selectInMultipleMode(entries, leaf.uid));
71
+ }
72
+ else {
73
+ this.entries.update(entries => NavSelectorSingleSelect.select(entries, leaf.uid));
74
+ }
75
+ }
76
+ onLeafToggleFolding(leaf) {
77
+ this.entries.update(entries => NavSelectorFolding.toggleFolding(entries, leaf.uid, !this.expanded()));
78
+ }
79
+ onLeafDetailClicked(leafDetail) {
80
+ this.entries.update(entries => NavSelectorSingleSelect.select(entries, leafDetail.uid));
81
+ }
82
+ updateTexts(texts) {
83
+ this._texts.set(texts);
84
+ }
85
+ selectOnlyLeaf(leaf) {
86
+ this.entries.update(entries => NavSelectorMultiSelect.selectOnlyALeafInMultipleMode(entries, leaf.uid));
87
+ }
88
+ toggleExpanded() {
89
+ this.expanded.update(expanded => !expanded);
90
+ this.entries.update(entries => {
91
+ if (this.expanded()) {
92
+ return NavSelectorMinifying.expand(entries);
93
+ }
94
+ return NavSelectorMinifying.minify(entries);
95
+ });
96
+ if (!this.expanded()) {
97
+ setTimeout(() => this.expandedAfterDelay.set(this.expanded()), 150);
98
+ }
99
+ else {
100
+ this.expandedAfterDelay.set(this.expanded());
101
+ }
102
+ }
103
+ onSelectionChange(uids) {
104
+ // Avoid infinite loop if you put unexisting uids as select will generate the same entries but with different reference
105
+ if (JSON.stringify(uids) === JSON.stringify(this.lastSelectedUids())) {
106
+ return;
107
+ }
108
+ this.lastSelectedUids.set(uids);
109
+ const selectedUids = this.collectSelectedUids(this.entries());
110
+ const uidToSelect = uids.filter(uid => selectedUids.every(selectedUid => selectedUid !== uid));
111
+ const uidToUnselect = selectedUids.filter(uid => uids.every(selectedUid => selectedUid !== uid));
112
+ if (!uidToSelect.length && !uidToUnselect.length) {
113
+ return;
114
+ }
115
+ let entries = this.entries();
116
+ if (this.multipleModeEnabled()) {
117
+ for (const uid of [...uidToSelect, ...uidToUnselect]) {
118
+ entries = NavSelectorMultiSelect.selectInMultipleMode(entries, uid);
119
+ }
120
+ }
121
+ else {
122
+ entries = NavSelectorSingleSelect.select(entries, uids[0]);
123
+ }
124
+ this.entries.set(entries);
125
+ }
126
+ registerOnSelectedUidsChange(callback) {
127
+ this.selectedUidsChangeCallback = callback;
128
+ }
129
+ onArrowDown() {
130
+ this.entries.update(entries => NavSelectorAccessibility.focusNext(entries));
131
+ }
132
+ onArrowUp() {
133
+ this.entries.update(entries => NavSelectorAccessibility.focusPrevious(entries));
134
+ }
135
+ collectSelectedUids(entries) {
136
+ return entries.flatMap(entry => {
137
+ if (isInternalNavSelectorEntryALeaf(entry)) {
138
+ if (entry.details.length) {
139
+ return entry.details.flatMap(detail => (detail.selected ? [detail.uid] : []));
140
+ }
141
+ return entry.selected ? [entry.uid] : [];
142
+ }
143
+ else if (isInternalNavSelectorEntryANode(entry)) {
144
+ return this.collectSelectedUids(entry.children);
145
+ }
146
+ return [];
147
+ });
148
+ }
149
+ updateLeafAction(leafActionProjection) {
150
+ this.leafActionProjection.set(leafActionProjection);
151
+ }
152
+ fold(entry) {
153
+ this.entries.update(entries => NavSelectorFolding.fold(entries, entry.uid, !this.expanded()));
154
+ }
155
+ unfold(entry) {
156
+ this.entries.update(entries => NavSelectorFolding.unfold(entries, entry.uid, !this.expanded()));
157
+ }
158
+ updateDetailsDisplayedLimit(detailsDisplayedLimit) {
159
+ this.entries.update(entries => NavSelectorViewMore.changeViewMoreDetailsDisplayedLimit(entries, detailsDisplayedLimit));
160
+ }
161
+ viewMore(leaf) {
162
+ this.entries.update(entries => NavSelectorViewMore.viewMore(entries, leaf.uid));
163
+ }
164
+ viewLess(leaf) {
165
+ this.entries.update(entries => NavSelectorViewMore.viewLess(entries, leaf.uid));
166
+ }
167
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NavSelectorState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
168
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NavSelectorState });
169
+ }
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NavSelectorState, decorators: [{
171
+ type: Injectable
172
+ }], ctorParameters: () => [] });
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy91aS1jb21wb25lbnRzL25hdi1zZWxlY3Rvci9zcmMvbmF2LXNlbGVjdG9yLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUlILCtCQUErQixFQUMvQiwrQkFBK0IsR0FHbEMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFFckU7Ozs7R0FJRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFDakIsT0FBTyxHQUFHLE1BQU0sQ0FBNkIsRUFBRSxDQUFDLENBQUM7SUFDakQsbUJBQW1CLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE1BQU0sR0FBRyxNQUFNLENBQTZCO1FBQ2hELEtBQUssRUFBRSxFQUFFO1FBQ1QsSUFBSSxFQUFFLEVBQUU7UUFDUixZQUFZLEVBQUUsRUFBRTtRQUNoQixhQUFhLEVBQUUsRUFBRTtRQUNqQixpQkFBaUIs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QUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUErQjtRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVELDJCQUEyQixDQUFDLHFCQUE2QjtRQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLG1DQUFtQyxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFDNUgsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUE2QjtRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUE2QjtRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEYsQ0FBQzt1R0FoTFEsZ0JBQWdCOzJHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCBJbmplY3RhYmxlLCBzaWduYWwsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeSxcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZixcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZkRldGFpbHMsXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZixcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFOb2RlLFxuICAgIE5hdlNlbGVjdG9yRW50cnksXG4gICAgTmF2U2VsZWN0b3JUcmFuc2xhdGVkVGV4dHMsXG59IGZyb20gJy4vbmF2LXNlbGVjdG9yJztcbmltcG9ydCB7IE5hdlNlbGVjdG9yQWNjZXNzaWJpbGl0eSB9IGZyb20gJy4vdXRpbHMvbmF2LXNlbGVjdG9yLmFjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgTmF2U2VsZWN0b3JCdWlsZGVyIH0gZnJvbSAnLi91dGlscy9uYXYtc2VsZWN0b3IuYnVpbGRlcic7XG5pbXBvcnQgeyBOYXZTZWxlY3RvckZpbHRlciB9IGZyb20gJy4vdXRpbHMvbmF2LXNlbGVjdG9yLmZpbHRlcic7XG5pbXBvcnQgeyBOYXZTZWxlY3RvckZvbGRpbmcgfSBmcm9tICcuL3V0aWxzL25hdi1zZWxlY3Rvci5mb2xkaW5nJztcbmltcG9ydCB7IE5hdlNlbGVjdG9yTWluaWZ5aW5nIH0gZnJvbSAnLi91dGlscy9uYXYtc2VsZWN0b3IubWluaWZ5aW5nJztcbmltcG9ydCB7IE5hdlNlbGVjdG9yTXVsdGlTZWxlY3QgfSBmcm9tICcuL3V0aWxzL25hdi1zZWxlY3Rvci5tdWx0aS1zZWxlY3QnO1xuaW1wb3J0IHsgTmF2U2VsZWN0b3JTaW5nbGVTZWxlY3QgfSBmcm9tICcuL3V0aWxzL25hdi1zZWxlY3Rvci5zaW5nbGUtc2VsZWN0JztcbmltcG9ydCB7IE5hdlNlbGVjdG9yVmlld01vcmUgfSBmcm9tICcuL3V0aWxzL25hdi1zZWxlY3Rvci52aWV3LW1vcmUnO1xuXG4vKipcbiAqIE5hdlNlbGVjdG9yU3RhdGUgaXMgYSBzZXJ2aWNlIHRoYXQgbWFuYWdlcyB0aGUgc3RhdGUgb2YgdGhlIG5hdiBzZWxlY3Rvci5cbiAqXG4gKiBJdCBzaG91bGQgYmUgcHJvdmlkZWQgYnkgdGhlIGNvbXBvbmVudCB0byBlbnN1cmUgdGhhdCBpZiBtYW55IG5hdiBzZWxlY3RvcnMgYXJlIHVzZWQgaW4gdGhlIHNhbWUgcGFnZSwgdGhleSBkb24ndCBzaGFyZSB0aGUgc2FtZSBzdGF0ZS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5hdlNlbGVjdG9yU3RhdGUge1xuICAgIHByaXZhdGUgZW50cmllcyA9IHNpZ25hbDxJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXT4oW10pO1xuICAgIHByaXZhdGUgbXVsdGlwbGVNb2RlRW5hYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfdGV4dHMgPSBzaWduYWw8TmF2U2VsZWN0b3JUcmFuc2xhdGVkVGV4dHM+KHtcbiAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICBvbmx5OiAnJyxcbiAgICAgICAgdG9rZW5JbnZhbGlkOiAnJyxcbiAgICAgICAgZmVhdHVyZUxvY2tlZDogJycsXG4gICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgbm9SZXN1bHRzOiAnJyxcbiAgICAgICAgdmlld01vcmU6ICcnLFxuICAgICAgICB2aWV3TGVzczogJycsXG4gICAgfSk7XG4gICAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWRVaWRzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG5cbiAgICBpc011bHRpcGxlTW9kZUVuYWJsZWQgPSB0aGlzLm11bHRpcGxlTW9kZUVuYWJsZWQ7XG4gICAgc2VhcmNoID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICAgIGZpbHRlcmVkRW50cmllcyA9IGNvbXB1dGVkKCgpID0+IE5hdlNlbGVjdG9yRmlsdGVyLmZpbHRlcih0aGlzLmVudHJpZXMoKSwgdGhpcy5zZWFyY2goKSkpO1xuICAgIG5vUmVzdWx0cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmlsdGVyZWRFbnRyaWVzKCkuZXZlcnkoKHsgaGlkZGVuIH0pID0+IGhpZGRlbikpO1xuICAgIHRleHRzID0gdGhpcy5fdGV4dHMuYXNSZWFkb25seSgpO1xuXG4gICAgbGVhZkFjdGlvblByb2plY3Rpb24gPSBzaWduYWw8UmVhZG9ubHlBcnJheTxUZW1wbGF0ZVJlZjx1bmtub3duPj4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICBleHBhbmRlZCA9IHNpZ25hbCh0cnVlKTtcbiAgICBleHBhbmRlZEFmdGVyRGVsYXkgPSBzaWduYWwodHJ1ZSk7XG5cbiAgICBzZWxlY3RlZFVpZHNDaGFuZ2VDYWxsYmFjazogKChzZWxlY3RlZFVpZHM6IHN0cmluZ1tdKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTZWxlY3RlZFVpZHMgPSB0aGlzLmNvbGxlY3RTZWxlY3RlZFVpZHModGhpcy5lbnRyaWVzKCkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVWlkc0NoYW5nZUNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVaWRzQ2hhbmdlQ2FsbGJhY2sobmV3U2VsZWN0ZWRVaWRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlTXVsdGlNb2RlRW5hYmxlZChlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVNb2RlRW5hYmxlZC5zZXQoZW5hYmxlZCk7XG4gICAgfVxuXG4gICAgdXBkYXRlRW50cmllcyhlbnRyaWVzOiBOYXZTZWxlY3RvckVudHJ5W10sIGluaXRpYWxTZWxlY3RlZEVudHJ5VWlkczogc3RyaW5nW10sIGRldGFpbHNEaXNwbGF5ZWRMaW1pdDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlTW9kZUVuYWJsZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNldChOYXZTZWxlY3RvckJ1aWxkZXIuYnVpbGRJbk11bHRpcGxlTW9kZShlbnRyaWVzLCBpbml0aWFsU2VsZWN0ZWRFbnRyeVVpZHMsIGRldGFpbHNEaXNwbGF5ZWRMaW1pdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNldChOYXZTZWxlY3RvckJ1aWxkZXIuYnVpbGQoZW50cmllcywgaW5pdGlhbFNlbGVjdGVkRW50cnlVaWRzPy5bMF0gPz8gbnVsbCwgZGV0YWlsc0Rpc3BsYXllZExpbWl0KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkdyb3VwVG9nZ2xlRm9sZGluZyhncm91cDogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5KSB7XG4gICAgICAgIHRoaXMuZW50cmllcy51cGRhdGUoZW50cmllcyA9PiBOYXZTZWxlY3RvckZvbGRpbmcudG9nZ2xlRm9sZGluZyhlbnRyaWVzLCBncm91cC51aWQsICF0aGlzLmV4cGFuZGVkKCkpKTtcbiAgICB9XG5cbiAgICBvbk5vZGVTZWxlY3Qobm9kZTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5KSB7XG4gICAgICAgIHRoaXMuZW50cmllcy51cGRhdGUoZW50cmllcyA9PiBOYXZTZWxlY3Rvck11bHRpU2VsZWN0LnNlbGVjdEluTXVsdGlwbGVNb2RlKGVudHJpZXMsIG5vZGUudWlkKSk7XG4gICAgfVxuXG4gICAgb25MZWFmQ2xpY2tlZChsZWFmOiBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZikge1xuICAgICAgICBpZiAoIWxlYWYuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlTW9kZUVuYWJsZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnVwZGF0ZShlbnRyaWVzID0+IE5hdlNlbGVjdG9yTXVsdGlTZWxlY3Quc2VsZWN0SW5NdWx0aXBsZU1vZGUoZW50cmllcywgbGVhZi51aWQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy51cGRhdGUoZW50cmllcyA9PiBOYXZTZWxlY3RvclNpbmdsZVNlbGVjdC5zZWxlY3QoZW50cmllcywgbGVhZi51aWQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTGVhZlRvZ2dsZUZvbGRpbmcobGVhZjogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5KSB7XG4gICAgICAgIHRoaXMuZW50cmllcy51cGRhdGUoZW50cmllcyA9PiBOYXZTZWxlY3RvckZvbGRpbmcudG9nZ2xlRm9sZGluZyhlbnRyaWVzLCBsZWFmLnVpZCwgIXRoaXMuZXhwYW5kZWQoKSkpO1xuICAgIH1cblxuICAgIG9uTGVhZkRldGFpbENsaWNrZWQobGVhZkRldGFpbDogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZEZXRhaWxzKSB7XG4gICAgICAgIHRoaXMuZW50cmllcy51cGRhdGUoZW50cmllcyA9PiBOYXZTZWxlY3RvclNpbmdsZVNlbGVjdC5zZWxlY3QoZW50cmllcywgbGVhZkRldGFpbC51aWQpKTtcbiAgICB9XG5cbiAgICB1cGRhdGVUZXh0cyh0ZXh0czogTmF2U2VsZWN0b3JUcmFuc2xhdGVkVGV4dHMpIHtcbiAgICAgICAgdGhpcy5fdGV4dHMuc2V0KHRleHRzKTtcbiAgICB9XG5cbiAgICBzZWxlY3RPbmx5TGVhZihsZWFmOiBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZikge1xuICAgICAgICB0aGlzLmVudHJpZXMudXBkYXRlKGVudHJpZXMgPT4gTmF2U2VsZWN0b3JNdWx0aVNlbGVjdC5zZWxlY3RPbmx5QUxlYWZJbk11bHRpcGxlTW9kZShlbnRyaWVzLCBsZWFmLnVpZCkpO1xuICAgIH1cblxuICAgIHRvZ2dsZUV4cGFuZGVkKCkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkLnVwZGF0ZShleHBhbmRlZCA9PiAhZXhwYW5kZWQpO1xuICAgICAgICB0aGlzLmVudHJpZXMudXBkYXRlKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBOYXZTZWxlY3Rvck1pbmlmeWluZy5leHBhbmQoZW50cmllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gTmF2U2VsZWN0b3JNaW5pZnlpbmcubWluaWZ5KGVudHJpZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkKCkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5leHBhbmRlZEFmdGVyRGVsYXkuc2V0KHRoaXMuZXhwYW5kZWQoKSksIDE1MCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkQWZ0ZXJEZWxheS5zZXQodGhpcy5leHBhbmRlZCgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlKHVpZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIC8vIEF2b2lkIGluZmluaXRlIGxvb3AgaWYgeW91IHB1dCB1bmV4aXN0aW5nIHVpZHMgYXMgc2VsZWN0IHdpbGwgZ2VuZXJhdGUgdGhlIHNhbWUgZW50cmllcyBidXQgd2l0aCBkaWZmZXJlbnQgcmVmZXJlbmNlXG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh1aWRzKSA9PT0gSlNPTi5zdHJpbmdpZnkodGhpcy5sYXN0U2VsZWN0ZWRVaWRzKCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRVaWRzLnNldCh1aWRzKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRVaWRzID0gdGhpcy5jb2xsZWN0U2VsZWN0ZWRVaWRzKHRoaXMuZW50cmllcygpKTtcbiAgICAgICAgY29uc3QgdWlkVG9TZWxlY3QgPSB1aWRzLmZpbHRlcih1aWQgPT4gc2VsZWN0ZWRVaWRzLmV2ZXJ5KHNlbGVjdGVkVWlkID0+IHNlbGVjdGVkVWlkICE9PSB1aWQpKTtcbiAgICAgICAgY29uc3QgdWlkVG9VbnNlbGVjdCA9IHNlbGVjdGVkVWlkcy5maWx0ZXIodWlkID0+IHVpZHMuZXZlcnkoc2VsZWN0ZWRVaWQgPT4gc2VsZWN0ZWRVaWQgIT09IHVpZCkpO1xuXG4gICAgICAgIGlmICghdWlkVG9TZWxlY3QubGVuZ3RoICYmICF1aWRUb1Vuc2VsZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVudHJpZXMgPSB0aGlzLmVudHJpZXMoKTtcblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZU1vZGVFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdWlkIG9mIFsuLi51aWRUb1NlbGVjdCwgLi4udWlkVG9VbnNlbGVjdF0pIHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzID0gTmF2U2VsZWN0b3JNdWx0aVNlbGVjdC5zZWxlY3RJbk11bHRpcGxlTW9kZShlbnRyaWVzLCB1aWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW50cmllcyA9IE5hdlNlbGVjdG9yU2luZ2xlU2VsZWN0LnNlbGVjdChlbnRyaWVzLCB1aWRzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVudHJpZXMuc2V0KGVudHJpZXMpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25TZWxlY3RlZFVpZHNDaGFuZ2UoY2FsbGJhY2s6IChzZWxlY3RlZFVpZHM6IHN0cmluZ1tdKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVaWRzQ2hhbmdlQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBvbkFycm93RG93bigpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnVwZGF0ZShlbnRyaWVzID0+IE5hdlNlbGVjdG9yQWNjZXNzaWJpbGl0eS5mb2N1c05leHQoZW50cmllcykpO1xuICAgIH1cblxuICAgIG9uQXJyb3dVcCgpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnVwZGF0ZShlbnRyaWVzID0+IE5hdlNlbGVjdG9yQWNjZXNzaWJpbGl0eS5mb2N1c1ByZXZpb3VzKGVudHJpZXMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RTZWxlY3RlZFVpZHMoZW50cmllczogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10pOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBlbnRyaWVzLmZsYXRNYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmRldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS5kZXRhaWxzLmZsYXRNYXAoZGV0YWlsID0+IChkZXRhaWwuc2VsZWN0ZWQgPyBbZGV0YWlsLnVpZF0gOiBbXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkuc2VsZWN0ZWQgPyBbZW50cnkudWlkXSA6IFtdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFOb2RlKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxlY3RTZWxlY3RlZFVpZHMoZW50cnkuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVMZWFmQWN0aW9uKGxlYWZBY3Rpb25Qcm9qZWN0aW9uOiBSZWFkb25seUFycmF5PFRlbXBsYXRlUmVmPHVua25vd24+Pikge1xuICAgICAgICB0aGlzLmxlYWZBY3Rpb25Qcm9qZWN0aW9uLnNldChsZWFmQWN0aW9uUHJvamVjdGlvbik7XG4gICAgfVxuXG4gICAgZm9sZChlbnRyeTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5KSB7XG4gICAgICAgIHRoaXMuZW50cmllcy51cGRhdGUoZW50cmllcyA9PiBOYXZTZWxlY3RvckZvbGRpbmcuZm9sZChlbnRyaWVzLCBlbnRyeS51aWQsICF0aGlzLmV4cGFuZGVkKCkpKTtcbiAgICB9XG5cbiAgICB1bmZvbGQoZW50cnk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeSkge1xuICAgICAgICB0aGlzLmVudHJpZXMudXBkYXRlKGVudHJpZXMgPT4gTmF2U2VsZWN0b3JGb2xkaW5nLnVuZm9sZChlbnRyaWVzLCBlbnRyeS51aWQsICF0aGlzLmV4cGFuZGVkKCkpKTtcbiAgICB9XG5cbiAgICB1cGRhdGVEZXRhaWxzRGlzcGxheWVkTGltaXQoZGV0YWlsc0Rpc3BsYXllZExpbWl0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnVwZGF0ZShlbnRyaWVzID0+IE5hdlNlbGVjdG9yVmlld01vcmUuY2hhbmdlVmlld01vcmVEZXRhaWxzRGlzcGxheWVkTGltaXQoZW50cmllcywgZGV0YWlsc0Rpc3BsYXllZExpbWl0KSk7XG4gICAgfVxuXG4gICAgdmlld01vcmUobGVhZjogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnVwZGF0ZShlbnRyaWVzID0+IE5hdlNlbGVjdG9yVmlld01vcmUudmlld01vcmUoZW50cmllcywgbGVhZi51aWQpKTtcbiAgICB9XG5cbiAgICB2aWV3TGVzcyhsZWFmOiBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZikge1xuICAgICAgICB0aGlzLmVudHJpZXMudXBkYXRlKGVudHJpZXMgPT4gTmF2U2VsZWN0b3JWaWV3TW9yZS52aWV3TGVzcyhlbnRyaWVzLCBsZWFmLnVpZCkpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './nav-selector.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gICAgTmF2U2VsZWN0b3JDYXRlZ29yeSxcbiAgICBOYXZTZWxlY3Rvckdyb3VwLFxuICAgIE5hdlNlbGVjdG9yTGVhZixcbiAgICBOYXZTZWxlY3RvckxlYWZEZXRhaWxzLFxuICAgIE5hdlNlbGVjdG9yVHJhbnNsYXRlZFRleHRzLFxuICAgIE5vZGVBY2Nlc3NpYmlsaXR5LFxufSBmcm9tICcuL25hdi1zZWxlY3Rvcic7XG5leHBvcnQgKiBmcm9tICcuL25hdi1zZWxlY3Rvci5jb21wb25lbnQnO1xuIl19
@@ -0,0 +1,10 @@
1
+ export const isInternalNavSelectorEntryALeafFocusable = (leaf, { parentFolded, minified }) => {
2
+ if (parentFolded) {
3
+ return false;
4
+ }
5
+ if (minified) {
6
+ return !leaf.disabled && !leaf.displayTokenInvalid && !leaf.displayFeatureLocked;
7
+ }
8
+ return !leaf.disabled;
9
+ };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZi51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL3V0aWxzL2xlYWYudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sd0NBQXdDLEdBQUcsQ0FDcEQsSUFBNkIsRUFDN0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFnRCxFQUNqRSxFQUFFO0lBQ1QsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNmLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDckYsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVybmFsTmF2U2VsZWN0b3JMZWFmIH0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yJztcblxuZXhwb3J0IGNvbnN0IGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZGb2N1c2FibGUgPSAoXG4gICAgbGVhZjogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYsXG4gICAgeyBwYXJlbnRGb2xkZWQsIG1pbmlmaWVkIH06IHsgcGFyZW50Rm9sZGVkOiBib29sZWFuOyBtaW5pZmllZDogYm9vbGVhbiB9XG4pOiBib29sZWFuID0+IHtcbiAgICBpZiAocGFyZW50Rm9sZGVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG1pbmlmaWVkKSB7XG4gICAgICAgIHJldHVybiAhbGVhZi5kaXNhYmxlZCAmJiAhbGVhZi5kaXNwbGF5VG9rZW5JbnZhbGlkICYmICFsZWFmLmRpc3BsYXlGZWF0dXJlTG9ja2VkO1xuICAgIH1cbiAgICByZXR1cm4gIWxlYWYuZGlzYWJsZWQ7XG59O1xuIl19
@@ -0,0 +1,171 @@
1
+ import { isInternalNavSelectorEntryACategory, isInternalNavSelectorEntryAGroup, isInternalNavSelectorEntryALeaf, isInternalNavSelectorEntryALeafDetails, } from '../nav-selector';
2
+ /**
3
+ * NavSelectorAccessibility is a utility class that provides methods to manage the accessibility and the focusability of nav selector entries.
4
+ */
5
+ export class NavSelectorAccessibility {
6
+ /**
7
+ * Set tabIndex to 0 for the first focusable entry and -1 for all other entries
8
+ * @param entries nav selector entries
9
+ */
10
+ static resetFocus(entries) {
11
+ return entries.reduce((acc, entry) => {
12
+ if (!acc.length) {
13
+ return [{ ...entry, accessibility: { ...entry.accessibility, tabIndex: entry.focusable ? 0 : -1 } }];
14
+ }
15
+ if (acc.every(({ focusable }) => !focusable)) {
16
+ return [...acc, { ...entry, accessibility: { ...entry.accessibility, tabIndex: entry.focusable ? 0 : -1 } }];
17
+ }
18
+ return [...acc, entry];
19
+ }, []);
20
+ }
21
+ /**
22
+ * Focus the given entry and set tabIndex to 0 for the given uid and -1 for all other entries
23
+ * @param entries nav selector entries
24
+ * @param uid the uid of the entry to focus
25
+ */
26
+ static focus(entries, uid) {
27
+ return entries.map(entry => {
28
+ if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {
29
+ return {
30
+ ...this.focusAnEntry(entry, uid),
31
+ children: NavSelectorAccessibility.focus(entry.children, uid),
32
+ };
33
+ }
34
+ if (isInternalNavSelectorEntryALeaf(entry)) {
35
+ return {
36
+ ...this.focusAnEntry(entry, uid),
37
+ details: entry.details.map(detail => this.focusAnEntry(detail, uid)),
38
+ };
39
+ }
40
+ return this.focusAnEntry(entry, uid);
41
+ });
42
+ }
43
+ /**
44
+ * Unfocus the given entry and set tabIndex to -1 for the given uid and 0 for all other entries
45
+ * @param entries nav selector entries
46
+ * @param uid the uid of the entry to unfocus
47
+ */
48
+ static unfocus(entries, uid) {
49
+ return entries.map(entry => {
50
+ if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {
51
+ return {
52
+ ...this.unfocusAnEntry(entry, uid),
53
+ children: NavSelectorAccessibility.unfocus(entry.children, uid),
54
+ };
55
+ }
56
+ if (isInternalNavSelectorEntryALeaf(entry)) {
57
+ return {
58
+ ...this.unfocusAnEntry(entry, uid),
59
+ details: entry.details.map(detail => this.unfocusAnEntry(detail, uid)),
60
+ };
61
+ }
62
+ return this.unfocusAnEntry(entry, uid);
63
+ });
64
+ }
65
+ /**
66
+ * Focus the previous entry focusable and set tabIndex to 0 for the previous focusable entry and -1 for all other entries
67
+ *
68
+ * If not previous entries are focusable, entries will not be modified
69
+ *
70
+ * @param entries nav selector entries
71
+ */
72
+ static focusPrevious(entries) {
73
+ const flattenEntries = this.flatten(entries);
74
+ const idxFocusedId = flattenEntries.findIndex(({ accessibility }) => accessibility.tabIndex === 0);
75
+ if (idxFocusedId === 0 || this.previousEntryIsFirstAndNotFocusable(flattenEntries, idxFocusedId)) {
76
+ return entries;
77
+ }
78
+ const focusedEntry = flattenEntries[idxFocusedId];
79
+ focusedEntry.accessibility.tabIndex = -1;
80
+ for (let i = idxFocusedId - 1; i >= 0; i--) {
81
+ const entry = flattenEntries[i];
82
+ if (entry.focusable) {
83
+ entry.accessibility.tabIndex = 0;
84
+ break;
85
+ }
86
+ }
87
+ return this.unflatten(flattenEntries);
88
+ }
89
+ /**
90
+ * Focus the next entry focusable and set tabIndex to 0 for the next focusable entry and -1 for all other entries
91
+ *
92
+ * If not next entries are focusable, entries will not be modified
93
+ *
94
+ * @param entries nav selector entries
95
+ */
96
+ static focusNext(entries) {
97
+ const flattenEntries = this.flatten(entries);
98
+ const focusableFlattenEntries = flattenEntries.filter(entry => entry.focusable);
99
+ const idxFocusedId = focusableFlattenEntries.findIndex(({ accessibility }) => accessibility.tabIndex === 0);
100
+ if (focusableFlattenEntries.length - 1 <= idxFocusedId) {
101
+ return entries;
102
+ }
103
+ focusableFlattenEntries[idxFocusedId].accessibility.tabIndex = -1;
104
+ focusableFlattenEntries[idxFocusedId + 1].accessibility.tabIndex = 0;
105
+ return this.unflatten(flattenEntries);
106
+ }
107
+ static previousEntryIsFirstAndNotFocusable(flattenEntries, idxFocusedId) {
108
+ if (idxFocusedId - 1 === 0) {
109
+ const previous = flattenEntries[0];
110
+ return !previous.focusable;
111
+ }
112
+ return false;
113
+ }
114
+ static focusAnEntry(entry, uid) {
115
+ return { ...entry, accessibility: { ...entry.accessibility, tabIndex: entry.uid === uid ? 0 : -1 } };
116
+ }
117
+ static unfocusAnEntry(entry, uid) {
118
+ return { ...entry, accessibility: { ...entry.accessibility, tabIndex: entry.uid === uid ? -1 : entry.accessibility.tabIndex } };
119
+ }
120
+ /**
121
+ * Flatten the nav selector entries. It is easier to work with flat entries for the focus management as we need to know which is the previous or the next entry
122
+ * @param entries nav selector entries
123
+ */
124
+ static flatten(entries) {
125
+ return entries.flatMap(entry => {
126
+ if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {
127
+ return [{ ...entry, children: [] }, ...this.flatten(entry.children)];
128
+ }
129
+ if (isInternalNavSelectorEntryALeaf(entry)) {
130
+ return [{ ...entry, details: [] }, ...entry.details.map(detail => ({ ...detail }))];
131
+ }
132
+ return [{ ...entry }];
133
+ });
134
+ }
135
+ /**
136
+ * Unflatten the nav selector entries
137
+ * @param entries nav selector entries
138
+ */
139
+ static unflatten(entries) {
140
+ return entries.reduceRight((acc, entry) => {
141
+ if (!acc.length) {
142
+ return [entry];
143
+ }
144
+ if (entry.accessibility.ariaLevel < acc[0].accessibility.ariaLevel) {
145
+ if (isInternalNavSelectorEntryALeaf(entry)) {
146
+ return [
147
+ {
148
+ ...entry,
149
+ details: acc
150
+ .filter(it => isInternalNavSelectorEntryALeafDetails(it))
151
+ // Force destroying the reference to the original object else Angular will not detect the change
152
+ .map(it => ({ ...it })),
153
+ },
154
+ ...acc.filter(it => !isInternalNavSelectorEntryALeafDetails(it)),
155
+ ];
156
+ }
157
+ else if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {
158
+ return [
159
+ {
160
+ ...entry,
161
+ children: acc.filter(({ accessibility }) => accessibility.ariaLevel > entry.accessibility.ariaLevel),
162
+ },
163
+ ...acc.filter(({ accessibility }) => accessibility.ariaLevel <= entry.accessibility.ariaLevel),
164
+ ];
165
+ }
166
+ }
167
+ return [entry, ...acc];
168
+ }, []);
169
+ }
170
+ }
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLmFjY2Vzc2liaWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvbmF2LXNlbGVjdG9yL3NyYy91dGlscy9uYXYtc2VsZWN0b3IuYWNjZXNzaWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0gsbUNBQW1DLEVBQ25DLGdDQUFnQyxFQUNoQywrQkFBK0IsRUFDL0Isc0NBQXNDLEdBQ3pDLE1BQU0saUJBQWlCLENBQUM7QUFFekI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2pDOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBbUM7UUFDakQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLENBQUM7WUFFRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMs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Q2xFO3dCQUNELEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsc0NBQXNDLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ25FLENBQUM7Z0JBQ04sQ0FBQztxQkFBTSxJQUFJLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxJQUFJLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQy9GLE9BQU87d0JBQ0g7NEJBQ0ksR0FBRyxLQUFLOzRCQUNSLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUNoQixDQUFDLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQ3BEO3lCQUNqQzt3QkFDRCxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO3FCQUNqRyxDQUFDO2dCQUNOLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLENBQUMsRUFBRSxFQUFnQyxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnksXG4gICAgSW50ZXJuYWxOYXZTZWxlY3Rvckdyb3VwLFxuICAgIEludGVybmFsTmF2U2VsZWN0b3JMZWFmLFxuICAgIEludGVybmFsTmF2U2VsZWN0b3JMZWFmRGV0YWlscyxcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFDYXRlZ29yeSxcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFHcm91cCxcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmLFxuICAgIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZEZXRhaWxzLFxufSBmcm9tICcuLi9uYXYtc2VsZWN0b3InO1xuXG4vKipcbiAqIE5hdlNlbGVjdG9yQWNjZXNzaWJpbGl0eSBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG1hbmFnZSB0aGUgYWNjZXNzaWJpbGl0eSBhbmQgdGhlIGZvY3VzYWJpbGl0eSBvZiBuYXYgc2VsZWN0b3IgZW50cmllcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hdlNlbGVjdG9yQWNjZXNzaWJpbGl0eSB7XG4gICAgLyoqXG4gICAgICogU2V0IHRhYkluZGV4IHRvIDAgZm9yIHRoZSBmaXJzdCBmb2N1c2FibGUgZW50cnkgYW5kIC0xIGZvciBhbGwgb3RoZXIgZW50cmllc1xuICAgICAqIEBwYXJhbSBlbnRyaWVzIG5hdiBzZWxlY3RvciBlbnRyaWVzXG4gICAgICovXG4gICAgc3RhdGljIHJlc2V0Rm9jdXMoZW50cmllczogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10pOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSB7XG4gICAgICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFhY2MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt7IC4uLmVudHJ5LCBhY2Nlc3NpYmlsaXR5OiB7IC4uLmVudHJ5LmFjY2Vzc2liaWxpdHksIHRhYkluZGV4OiBlbnRyeS5mb2N1c2FibGUgPyAwIDogLTEgfSB9XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFjYy5ldmVyeSgoeyBmb2N1c2FibGUgfSkgPT4gIWZvY3VzYWJsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFjYywgeyAuLi5lbnRyeSwgYWNjZXNzaWJpbGl0eTogeyAuLi5lbnRyeS5hY2Nlc3NpYmlsaXR5LCB0YWJJbmRleDogZW50cnkuZm9jdXNhYmxlID8gMCA6IC0xIH0gfV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBbLi4uYWNjLCBlbnRyeV07XG4gICAgICAgIH0sIFtdIGFzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1cyB0aGUgZ2l2ZW4gZW50cnkgYW5kIHNldCB0YWJJbmRleCB0byAwIGZvciB0aGUgZ2l2ZW4gdWlkIGFuZCAtMSBmb3IgYWxsIG90aGVyIGVudHJpZXNcbiAgICAgKiBAcGFyYW0gZW50cmllcyBuYXYgc2VsZWN0b3IgZW50cmllc1xuICAgICAqIEBwYXJhbSB1aWQgdGhlIHVpZCBvZiB0aGUgZW50cnkgdG8gZm9jdXNcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9jdXM8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oZW50cmllczogVFtdLCB1aWQ6IHN0cmluZyk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIGVudHJpZXMubWFwKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFHcm91cChlbnRyeSkgfHwgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBQ2F0ZWdvcnkoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5mb2N1c0FuRW50cnkoZW50cnksIHVpZCksXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBOYXZTZWxlY3RvckFjY2Vzc2liaWxpdHkuZm9jdXMoZW50cnkuY2hpbGRyZW4sIHVpZCksXG4gICAgICAgICAgICAgICAgfSBhcyBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmZvY3VzQW5FbnRyeShlbnRyeSwgdWlkKSxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogZW50cnkuZGV0YWlscy5tYXAoZGV0YWlsID0+IHRoaXMuZm9jdXNBbkVudHJ5KGRldGFpbCwgdWlkKSksXG4gICAgICAgICAgICAgICAgfSBhcyBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvY3VzQW5FbnRyeShlbnRyeSwgdWlkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5mb2N1cyB0aGUgZ2l2ZW4gZW50cnkgYW5kIHNldCB0YWJJbmRleCB0byAtMSBmb3IgdGhlIGdpdmVuIHVpZCBhbmQgMCBmb3IgYWxsIG90aGVyIGVudHJpZXNcbiAgICAgKiBAcGFyYW0gZW50cmllcyBuYXYgc2VsZWN0b3IgZW50cmllc1xuICAgICAqIEBwYXJhbSB1aWQgdGhlIHVpZCBvZiB0aGUgZW50cnkgdG8gdW5mb2N1c1xuICAgICAqL1xuICAgIHN0YXRpYyB1bmZvY3VzKGVudHJpZXM6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdLCB1aWQ6IHN0cmluZyk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIGVudHJpZXMubWFwKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFHcm91cChlbnRyeSkgfHwgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBQ2F0ZWdvcnkoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy51bmZvY3VzQW5FbnRyeShlbnRyeSwgdWlkKSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IE5hdlNlbGVjdG9yQWNjZXNzaWJpbGl0eS51bmZvY3VzKGVudHJ5LmNoaWxkcmVuLCB1aWQpLFxuICAgICAgICAgICAgICAgIH0gYXMgSW50ZXJuYWxOYXZTZWxlY3Rvckdyb3VwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy51bmZvY3VzQW5FbnRyeShlbnRyeSwgdWlkKSxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogZW50cnkuZGV0YWlscy5tYXAoZGV0YWlsID0+IHRoaXMudW5mb2N1c0FuRW50cnkoZGV0YWlsLCB1aWQpKSxcbiAgICAgICAgICAgICAgICB9IGFzIEludGVybmFsTmF2U2VsZWN0b3JMZWFmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2N1c0FuRW50cnkoZW50cnksIHVpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvY3VzIHRoZSBwcmV2aW91cyBlbnRyeSBmb2N1c2FibGUgYW5kIHNldCB0YWJJbmRleCB0byAwIGZvciB0aGUgcHJldmlvdXMgZm9jdXNhYmxlIGVudHJ5IGFuZCAtMSBmb3IgYWxsIG90aGVyIGVudHJpZXNcbiAgICAgKlxuICAgICAqIElmIG5vdCBwcmV2aW91cyBlbnRyaWVzIGFyZSBmb2N1c2FibGUsIGVudHJpZXMgd2lsbCBub3QgYmUgbW9kaWZpZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRyaWVzIG5hdiBzZWxlY3RvciBlbnRyaWVzXG4gICAgICovXG4gICAgc3RhdGljIGZvY3VzUHJldmlvdXM8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oZW50cmllczogVFtdKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICBjb25zdCBmbGF0dGVuRW50cmllcyA9IHRoaXMuZmxhdHRlbihlbnRyaWVzKTtcblxuICAgICAgICBjb25zdCBpZHhGb2N1c2VkSWQgPSBmbGF0dGVuRW50cmllcy5maW5kSW5kZXgoKHsgYWNjZXNzaWJpbGl0eSB9KSA9PiBhY2Nlc3NpYmlsaXR5LnRhYkluZGV4ID09PSAwKTtcblxuICAgICAgICBpZiAoaWR4Rm9jdXNlZElkID09PSAwIHx8IHRoaXMucHJldmlvdXNFbnRyeUlzRmlyc3RBbmROb3RGb2N1c2FibGUoZmxhdHRlbkVudHJpZXMsIGlkeEZvY3VzZWRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9jdXNlZEVudHJ5ID0gZmxhdHRlbkVudHJpZXNbaWR4Rm9jdXNlZElkXTtcbiAgICAgICAgZm9jdXNlZEVudHJ5LmFjY2Vzc2liaWxpdHkudGFiSW5kZXggPSAtMTtcblxuICAgICAgICBmb3IgKGxldCBpID0gaWR4Rm9jdXNlZElkIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZmxhdHRlbkVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAoZW50cnkuZm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgZW50cnkuYWNjZXNzaWJpbGl0eS50YWJJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy51bmZsYXR0ZW4oZmxhdHRlbkVudHJpZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvY3VzIHRoZSBuZXh0IGVudHJ5IGZvY3VzYWJsZSBhbmQgc2V0IHRhYkluZGV4IHRvIDAgZm9yIHRoZSBuZXh0IGZvY3VzYWJsZSBlbnRyeSBhbmQgLTEgZm9yIGFsbCBvdGhlciBlbnRyaWVzXG4gICAgICpcbiAgICAgKiBJZiBub3QgbmV4dCBlbnRyaWVzIGFyZSBmb2N1c2FibGUsIGVudHJpZXMgd2lsbCBub3QgYmUgbW9kaWZpZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRyaWVzIG5hdiBzZWxlY3RvciBlbnRyaWVzXG4gICAgICovXG4gICAgc3RhdGljIGZvY3VzTmV4dDxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihlbnRyaWVzOiBUW10pOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSB7XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5FbnRyaWVzID0gdGhpcy5mbGF0dGVuKGVudHJpZXMpO1xuXG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZUZsYXR0ZW5FbnRyaWVzID0gZmxhdHRlbkVudHJpZXMuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LmZvY3VzYWJsZSk7XG5cbiAgICAgICAgY29uc3QgaWR4Rm9jdXNlZElkID0gZm9jdXNhYmxlRmxhdHRlbkVudHJpZXMuZmluZEluZGV4KCh7IGFjY2Vzc2liaWxpdHkgfSkgPT4gYWNjZXNzaWJpbGl0eS50YWJJbmRleCA9PT0gMCk7XG5cbiAgICAgICAgaWYgKGZvY3VzYWJsZUZsYXR0ZW5FbnRyaWVzLmxlbmd0aCAtIDEgPD0gaWR4Rm9jdXNlZElkKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cmllcztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvY3VzYWJsZUZsYXR0ZW5FbnRyaWVzW2lkeEZvY3VzZWRJZF0uYWNjZXNzaWJpbGl0eS50YWJJbmRleCA9IC0xO1xuXG4gICAgICAgIGZvY3VzYWJsZUZsYXR0ZW5FbnRyaWVzW2lkeEZvY3VzZWRJZCArIDFdLmFjY2Vzc2liaWxpdHkudGFiSW5kZXggPSAwO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVuZmxhdHRlbihmbGF0dGVuRW50cmllcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcHJldmlvdXNFbnRyeUlzRmlyc3RBbmROb3RGb2N1c2FibGUoZmxhdHRlbkVudHJpZXM6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdLCBpZHhGb2N1c2VkSWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoaWR4Rm9jdXNlZElkIC0gMSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBmbGF0dGVuRW50cmllc1swXTtcbiAgICAgICAgICAgIHJldHVybiAhcHJldmlvdXMuZm9jdXNhYmxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBmb2N1c0FuRW50cnkoZW50cnk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeSwgdWlkOiBzdHJpbmcpOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnkge1xuICAgICAgICByZXR1cm4geyAuLi5lbnRyeSwgYWNjZXNzaWJpbGl0eTogeyAuLi5lbnRyeS5hY2Nlc3NpYmlsaXR5LCB0YWJJbmRleDogZW50cnkudWlkID09PSB1aWQgPyAwIDogLTEgfSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHVuZm9jdXNBbkVudHJ5KGVudHJ5OiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnksIHVpZDogc3RyaW5nKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uZW50cnksIGFjY2Vzc2liaWxpdHk6IHsgLi4uZW50cnkuYWNjZXNzaWJpbGl0eSwgdGFiSW5kZXg6IGVudHJ5LnVpZCA9PT0gdWlkID8gLTEgOiBlbnRyeS5hY2Nlc3NpYmlsaXR5LnRhYkluZGV4IH0gfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGbGF0dGVuIHRoZSBuYXYgc2VsZWN0b3IgZW50cmllcy4gSXQgaXMgZWFzaWVyIHRvIHdvcmsgd2l0aCBmbGF0IGVudHJpZXMgZm9yIHRoZSBmb2N1cyBtYW5hZ2VtZW50IGFzIHdlIG5lZWQgdG8ga25vdyB3aGljaCBpcyB0aGUgcHJldmlvdXMgb3IgdGhlIG5leHQgZW50cnlcbiAgICAgKiBAcGFyYW0gZW50cmllcyBuYXYgc2VsZWN0b3IgZW50cmllc1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGZsYXR0ZW4oZW50cmllczogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10pOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSB7XG4gICAgICAgIHJldHVybiBlbnRyaWVzLmZsYXRNYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUdyb3VwKGVudHJ5KSB8fCBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFDYXRlZ29yeShlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3sgLi4uZW50cnksIGNoaWxkcmVuOiBbXSB9LCAuLi50aGlzLmZsYXR0ZW4oZW50cnkuY2hpbGRyZW4pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbeyAuLi5lbnRyeSwgZGV0YWlsczogW10gfSwgLi4uZW50cnkuZGV0YWlscy5tYXAoZGV0YWlsID0+ICh7IC4uLmRldGFpbCB9KSldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFt7IC4uLmVudHJ5IH1dO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbmZsYXR0ZW4gdGhlIG5hdiBzZWxlY3RvciBlbnRyaWVzXG4gICAgICogQHBhcmFtIGVudHJpZXMgbmF2IHNlbGVjdG9yIGVudHJpZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyB1bmZsYXR0ZW48VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oZW50cmllczogVFtdKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5yZWR1Y2VSaWdodCgoYWNjLCBlbnRyeSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFhY2MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtlbnRyeV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW50cnkuYWNjZXNzaWJpbGl0eS5hcmlhTGV2ZWwgPCBhY2NbMF0uYWNjZXNzaWJpbGl0eS5hcmlhTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiBhY2NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihpdCA9PiBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmRGV0YWlscyhpdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGRlc3Ryb3lpbmcgdGhlIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgb2JqZWN0IGVsc2UgQW5ndWxhciB3aWxsIG5vdCBkZXRlY3QgdGhlIGNoYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGl0ID0+ICh7IC4uLml0IH0pKSBhcyBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZkRldGFpbHNbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5hY2MuZmlsdGVyKGl0ID0+ICFpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmRGV0YWlscyhpdCkpLFxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAoZW50cnkpIHx8IGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUNhdGVnb3J5KGVudHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBhY2MuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBhY2Nlc3NpYmlsaXR5IH0pID0+IGFjY2Vzc2liaWxpdHkuYXJpYUxldmVsID4gZW50cnkuYWNjZXNzaWJpbGl0eS5hcmlhTGV2ZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIEludGVybmFsTmF2U2VsZWN0b3JMZWFmW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWNjLmZpbHRlcigoeyBhY2Nlc3NpYmlsaXR5IH0pID0+IGFjY2Vzc2liaWxpdHkuYXJpYUxldmVsIDw9IGVudHJ5LmFjY2Vzc2liaWxpdHkuYXJpYUxldmVsKSxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2VudHJ5LCAuLi5hY2NdO1xuICAgICAgICB9LCBbXSBhcyBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSk7XG4gICAgfVxufVxuIl19