@fundamental-ngx/btp 0.46.0-rc.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/esm2022/fundamental-ngx-btp.mjs +5 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/navigation/directives/navigation-home.directive.mjs +19 -0
- package/esm2022/navigation/directives/navigation-list-spacer.directive.mjs +24 -0
- package/esm2022/navigation/fundamental-ngx-btp-navigation.mjs +5 -0
- package/esm2022/navigation/index.mjs +11 -0
- package/esm2022/navigation/navigation-component.token.mjs +22 -0
- package/esm2022/navigation/navigation-content-end.component.mjs +62 -0
- package/esm2022/navigation/navigation-content-start.component.mjs +207 -0
- package/esm2022/navigation/navigation-content.token.mjs +3 -0
- package/esm2022/navigation/navigation-link.component.mjs +188 -0
- package/esm2022/navigation/navigation-list/navigation-list-item.component.mjs +423 -0
- package/esm2022/navigation/navigation-list/navigation-list-overflow-item.component.mjs +57 -0
- package/esm2022/navigation/navigation-list/navigation-list.component.mjs +125 -0
- package/esm2022/navigation/navigation-list-component.token.mjs +3 -0
- package/esm2022/navigation/navigation-list-item-component.token.mjs +90 -0
- package/esm2022/navigation/navigation.component.mjs +251 -0
- package/esm2022/navigation/navigation.service.mjs +14 -0
- package/esm2022/navigation/navigation.types.mjs +2 -0
- package/esm2022/navigation-menu/fundamental-ngx-btp-navigation-menu.mjs +5 -0
- package/esm2022/navigation-menu/index.mjs +6 -0
- package/esm2022/navigation-menu/lib/navigation-menu-item.component.mjs +48 -0
- package/esm2022/navigation-menu/lib/navigation-menu-popover-control.directive.mjs +19 -0
- package/esm2022/navigation-menu/lib/navigation-menu-popover.component.mjs +38 -0
- package/esm2022/navigation-menu/lib/navigation-menu.component.mjs +13 -0
- package/esm2022/navigation-menu/lib/navigation-menu.module.mjs +17 -0
- package/esm2022/search-field/fundamental-ngx-btp-search-field.mjs +5 -0
- package/esm2022/search-field/index.mjs +2 -0
- package/esm2022/search-field/search-field.component.mjs +62 -0
- package/esm2022/shared/fundamental-ngx-btp-shared.mjs +5 -0
- package/esm2022/shared/index.mjs +2 -0
- package/esm2022/tool-header/components/tool-header/tool-header.component.mjs +227 -0
- package/esm2022/tool-header/components/tool-header-product-switch.component.mjs +102 -0
- package/esm2022/tool-header/directives/tool-header-action.directive.mjs +43 -0
- package/esm2022/tool-header/directives/tool-header-actions.directive.mjs +63 -0
- package/esm2022/tool-header/directives/tool-header-auto-mode.directive.mjs +114 -0
- package/esm2022/tool-header/directives/tool-header-button.directive.mjs +51 -0
- package/esm2022/tool-header/directives/tool-header-element.directive.mjs +17 -0
- package/esm2022/tool-header/directives/tool-header-group.directive.mjs +26 -0
- package/esm2022/tool-header/directives/tool-header-logo.directive.mjs +19 -0
- package/esm2022/tool-header/directives/tool-header-user.directive.mjs +14 -0
- package/esm2022/tool-header/fundamental-ngx-btp-tool-header.mjs +5 -0
- package/esm2022/tool-header/index.mjs +10 -0
- package/esm2022/tool-header/tool-header-action-button.type.mjs +2 -0
- package/esm2022/tool-header/tool-header-component.class.mjs +74 -0
- package/esm2022/tool-header/tool-header-state.type.mjs +2 -0
- package/esm2022/tool-layout/directives/tool-layout-container.directive.mjs +17 -0
- package/esm2022/tool-layout/directives/tool-layout-content-container.directive.mjs +50 -0
- package/esm2022/tool-layout/directives/tool-layout-header-container.directive.mjs +17 -0
- package/esm2022/tool-layout/directives/tool-layout-navigation-container.directive.mjs +37 -0
- package/esm2022/tool-layout/fundamental-ngx-btp-tool-layout.mjs +5 -0
- package/esm2022/tool-layout/index.mjs +7 -0
- package/esm2022/tool-layout/tool-layout.component.mjs +43 -0
- package/esm2022/tool-layout/tool-layout.module.mjs +40 -0
- package/fesm2022/fundamental-ngx-btp-navigation-menu.mjs +130 -0
- package/fesm2022/fundamental-ngx-btp-navigation-menu.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp-navigation.mjs +1409 -0
- package/fesm2022/fundamental-ngx-btp-navigation.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp-search-field.mjs +69 -0
- package/fesm2022/fundamental-ngx-btp-search-field.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp-shared.mjs +4 -0
- package/fesm2022/fundamental-ngx-btp-shared.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp-tool-header.mjs +717 -0
- package/fesm2022/fundamental-ngx-btp-tool-header.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp-tool-layout.mjs +194 -0
- package/fesm2022/fundamental-ngx-btp-tool-layout.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp.mjs +7 -0
- package/fesm2022/fundamental-ngx-btp.mjs.map +1 -0
- package/fundamental-ngx-btp-v0.46.0-rc.100.tgz +0 -0
- package/index.d.ts +2 -0
- package/navigation/README.md +3 -0
- package/navigation/directives/navigation-home.directive.d.ts +10 -0
- package/navigation/directives/navigation-list-spacer.directive.d.ts +8 -0
- package/navigation/index.d.ts +10 -0
- package/navigation/navigation-component.token.d.ts +34 -0
- package/navigation/navigation-content-end.component.d.ts +23 -0
- package/navigation/navigation-content-start.component.d.ts +54 -0
- package/navigation/navigation-content.token.d.ts +11 -0
- package/navigation/navigation-link.component.d.ts +49 -0
- package/navigation/navigation-list/navigation-list-item.component.d.ts +142 -0
- package/navigation/navigation-list/navigation-list-overflow-item.component.d.ts +16 -0
- package/navigation/navigation-list/navigation-list.component.d.ts +60 -0
- package/navigation/navigation-list-component.token.d.ts +17 -0
- package/navigation/navigation-list-item-component.token.d.ts +68 -0
- package/navigation/navigation.component.d.ts +82 -0
- package/navigation/navigation.service.d.ts +8 -0
- package/navigation/navigation.types.d.ts +2 -0
- package/navigation-menu/README.md +3 -0
- package/navigation-menu/index.d.ts +5 -0
- package/navigation-menu/lib/navigation-menu-item.component.d.ts +13 -0
- package/navigation-menu/lib/navigation-menu-popover-control.directive.d.ts +10 -0
- package/navigation-menu/lib/navigation-menu-popover.component.d.ts +11 -0
- package/navigation-menu/lib/navigation-menu.component.d.ts +5 -0
- package/navigation-menu/lib/navigation-menu.module.d.ts +8 -0
- package/package.json +63 -0
- package/search-field/README.md +3 -0
- package/search-field/index.d.ts +1 -0
- package/search-field/search-field.component.d.ts +34 -0
- package/shared/README.md +3 -0
- package/shared/index.d.ts +1 -0
- package/tool-header/README.md +3 -0
- package/tool-header/components/tool-header/tool-header.component.d.ts +91 -0
- package/tool-header/components/tool-header-product-switch.component.d.ts +11 -0
- package/tool-header/directives/tool-header-action.directive.d.ts +35 -0
- package/tool-header/directives/tool-header-actions.directive.d.ts +27 -0
- package/tool-header/directives/tool-header-auto-mode.directive.d.ts +68 -0
- package/tool-header/directives/tool-header-button.directive.d.ts +22 -0
- package/tool-header/directives/tool-header-element.directive.d.ts +5 -0
- package/tool-header/directives/tool-header-group.directive.d.ts +12 -0
- package/tool-header/directives/tool-header-logo.directive.d.ts +5 -0
- package/tool-header/directives/tool-header-user.directive.d.ts +5 -0
- package/tool-header/index.d.ts +9 -0
- package/tool-header/tool-header-action-button.type.d.ts +10 -0
- package/tool-header/tool-header-component.class.d.ts +20 -0
- package/tool-header/tool-header-state.type.d.ts +14 -0
- package/tool-layout/README.md +3 -0
- package/tool-layout/directives/tool-layout-container.directive.d.ts +5 -0
- package/tool-layout/directives/tool-layout-content-container.directive.d.ts +29 -0
- package/tool-layout/directives/tool-layout-header-container.directive.d.ts +5 -0
- package/tool-layout/directives/tool-layout-navigation-container.directive.d.ts +13 -0
- package/tool-layout/index.d.ts +6 -0
- package/tool-layout/tool-layout.component.d.ts +27 -0
- package/tool-layout/tool-layout.module.d.ts +11 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
|
|
3
|
+
import { DomPortal } from '@angular/cdk/portal';
|
|
4
|
+
import { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';
|
|
5
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, HostListener, Injector, Input, QueryList, TemplateRef, ViewChild, ViewEncapsulation, computed, effect, inject, signal } from '@angular/core';
|
|
6
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
7
|
+
import { RouterLink, RouterLinkActive } from '@angular/router';
|
|
8
|
+
import { KeyUtil, TabbableElementService, applyCssClass } from '@fundamental-ngx/cdk/utils';
|
|
9
|
+
import { ButtonComponent } from '@fundamental-ngx/core/button';
|
|
10
|
+
import { IconComponent } from '@fundamental-ngx/core/icon';
|
|
11
|
+
import { PopoverComponent, PopoverControlComponent, PopoverService } from '@fundamental-ngx/core/popover';
|
|
12
|
+
import { FdbNavigationComponent } from '../navigation-component.token';
|
|
13
|
+
import { NavigationLinkComponent } from '../navigation-link.component';
|
|
14
|
+
import { FdbNavigationListComponent } from '../navigation-list-component.token';
|
|
15
|
+
import { FdbNavigationListItemComponent } from '../navigation-list-item-component.token';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
export class NavigationListItemComponent extends FdbNavigationListItemComponent {
|
|
18
|
+
/** @hidden */
|
|
19
|
+
set group(group) {
|
|
20
|
+
this.isGroup.set(group);
|
|
21
|
+
}
|
|
22
|
+
/** @hidden */
|
|
23
|
+
set _expanded(expanded) {
|
|
24
|
+
this.expanded.set(expanded);
|
|
25
|
+
}
|
|
26
|
+
/** @hidden */
|
|
27
|
+
set _navigationListComponent(navigationListComponent) {
|
|
28
|
+
this.childNavigationListComponent.set(navigationListComponent);
|
|
29
|
+
}
|
|
30
|
+
/** @hidden */
|
|
31
|
+
set _routerLinkActive(routerLinkActive) {
|
|
32
|
+
this.routerLinkActive.set(routerLinkActive);
|
|
33
|
+
}
|
|
34
|
+
/** @hidden */
|
|
35
|
+
set _routerLink(routerLink) {
|
|
36
|
+
this.routerLink.set(routerLink);
|
|
37
|
+
}
|
|
38
|
+
/** @hidden */
|
|
39
|
+
set _childrenTemplate(templateRef) {
|
|
40
|
+
this.childrenTemplate.set(templateRef);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Used in attribute only. For actual calculation of level of nesting use `normalizedLevel`.
|
|
44
|
+
*/
|
|
45
|
+
get level() {
|
|
46
|
+
return this.parentNavigationListComponent.level;
|
|
47
|
+
}
|
|
48
|
+
/** @hidden */
|
|
49
|
+
constructor() {
|
|
50
|
+
super();
|
|
51
|
+
/** @hidden */
|
|
52
|
+
this.alwaysFocusable = false;
|
|
53
|
+
/** @hidden */
|
|
54
|
+
this.injector = inject(Injector);
|
|
55
|
+
/** @hidden */
|
|
56
|
+
this.elementRef = inject(ElementRef);
|
|
57
|
+
/** @hidden */
|
|
58
|
+
this.parentListItemComponent = inject(FdbNavigationListItemComponent, { optional: true, skipSelf: true });
|
|
59
|
+
/** @hidden */
|
|
60
|
+
this.noArrow = false;
|
|
61
|
+
/** @hidden */
|
|
62
|
+
this.additionalBodyClass = 'fd-navigation__list-container';
|
|
63
|
+
/** @hidden */
|
|
64
|
+
this.routerLink = signal(null);
|
|
65
|
+
/** @hidden */
|
|
66
|
+
this.routerLinkActive = signal(null);
|
|
67
|
+
/** @hidden */
|
|
68
|
+
this.isRouterLinkActive = computed(() => {
|
|
69
|
+
const routerLinkActive = this.routerLinkActive();
|
|
70
|
+
if (routerLinkActive) {
|
|
71
|
+
return toSignal(routerLinkActive.isActiveChange, {
|
|
72
|
+
initialValue: routerLinkActive.isActive,
|
|
73
|
+
injector: this.injector
|
|
74
|
+
})();
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
});
|
|
78
|
+
/** @hidden */
|
|
79
|
+
this.childNavigationListComponent = signal(null);
|
|
80
|
+
/** @hidden */
|
|
81
|
+
this.expanded = signal(false);
|
|
82
|
+
/** @hidden */
|
|
83
|
+
this.fullPathExpanded = computed(() => (this.parentListItemComponent ? this.parentListItemComponent.expanded() : true) && this.expanded());
|
|
84
|
+
/** @hidden */
|
|
85
|
+
this.isGroup = signal(false);
|
|
86
|
+
/** @hidden */
|
|
87
|
+
this.childrenTemplate = signal(null);
|
|
88
|
+
/** @hidden */
|
|
89
|
+
this.childrenActive = signal(false);
|
|
90
|
+
/** @hidden */
|
|
91
|
+
this.inPortal = computed(() => this.parentInPortal() || this._selfInPortal());
|
|
92
|
+
/** @hidden */
|
|
93
|
+
this.parentInPortal = computed(() => this.parentListItemComponent?.inPortal() || false);
|
|
94
|
+
/**
|
|
95
|
+
* Used for calculation of the level of inclusion. Can be different than the actual level due to ability to mix grouped lists with ungrouped.
|
|
96
|
+
* For ungrouped lists will add +1 for the first list in the hierarchy to mimic group existence.
|
|
97
|
+
*/
|
|
98
|
+
this.normalizedLevel = computed(() => {
|
|
99
|
+
if (this.parentNavigationListComponent.isInGroup() || this.isGroup()) {
|
|
100
|
+
return this.level();
|
|
101
|
+
}
|
|
102
|
+
return this.level() + 1;
|
|
103
|
+
});
|
|
104
|
+
/** @hidden */
|
|
105
|
+
this._isInPopover = computed(() => this.navigationComponent.isSnapped() && (this.normalizedLevel() > 2 || this._hidden()));
|
|
106
|
+
/** @hidden */
|
|
107
|
+
// eslint-disable-next-line max-len
|
|
108
|
+
this.expandedAttr = computed(() => (this.expanded() ||
|
|
109
|
+
(this.normalizedLevel() === 1 &&
|
|
110
|
+
!!this.childNavigationListComponent() &&
|
|
111
|
+
this.navigationComponent.isSnapped())) &&
|
|
112
|
+
!this._hidden());
|
|
113
|
+
/**
|
|
114
|
+
* Icon which should be used for the toggle button.
|
|
115
|
+
**/
|
|
116
|
+
this.toggleIcon = computed(() => {
|
|
117
|
+
if (this.expandedAttr()) {
|
|
118
|
+
return 'slim-arrow-down';
|
|
119
|
+
}
|
|
120
|
+
return this._isRtl() ? 'slim-arrow-left' : 'slim-arrow-right';
|
|
121
|
+
});
|
|
122
|
+
/** @hidden */
|
|
123
|
+
this._selfInPortal = signal(false);
|
|
124
|
+
/** @hidden */
|
|
125
|
+
this._cdr = inject(ChangeDetectorRef);
|
|
126
|
+
/** @hidden */
|
|
127
|
+
this._tabbableService = inject(TabbableElementService);
|
|
128
|
+
/** @hidden */
|
|
129
|
+
this._navigationComponent = inject(FdbNavigationComponent);
|
|
130
|
+
effect(() => {
|
|
131
|
+
this.additionalBodyComponentClasses = [
|
|
132
|
+
'fd-navigation',
|
|
133
|
+
'fd-navigation--snapped',
|
|
134
|
+
`fd-navigation--${this.navigationComponent.mode()}`
|
|
135
|
+
]
|
|
136
|
+
.filter((klass) => !!klass)
|
|
137
|
+
.join(' ');
|
|
138
|
+
this._popoverService.updateContent(null, this.childrenTemplate());
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/** @hidden */
|
|
142
|
+
buildComponentCssClass() {
|
|
143
|
+
return [this.class || '', 'fd-navigation__list-item'];
|
|
144
|
+
}
|
|
145
|
+
/** @hidden */
|
|
146
|
+
_keydownHandler(event) {
|
|
147
|
+
if (this._isInPopover() && KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {
|
|
148
|
+
event.stopImmediatePropagation();
|
|
149
|
+
if (this._hidden() || this.parentListItemComponent?._hidden()) {
|
|
150
|
+
const hiddenItems = this.navigationComponent.getMoreButton()?.hiddenItems() || [];
|
|
151
|
+
const firstLevelHiddenElementCondition = hiddenItems &&
|
|
152
|
+
((KeyUtil.isKeyCode(event, UP_ARROW) &&
|
|
153
|
+
this.elementRef.nativeElement === hiddenItems[0]?.elementRef.nativeElement) ||
|
|
154
|
+
(KeyUtil.isKeyCode(event, DOWN_ARROW) &&
|
|
155
|
+
this.elementRef.nativeElement ===
|
|
156
|
+
hiddenItems[hiddenItems.length - 1]?.elementRef.nativeElement));
|
|
157
|
+
const secondLevelHiddenElementCondition = this.normalizedLevel() > 2 &&
|
|
158
|
+
((KeyUtil.isKeyCode(event, UP_ARROW) &&
|
|
159
|
+
this.parentNavigationListComponent.listItems.first === this) ||
|
|
160
|
+
(KeyUtil.isKeyCode(event, DOWN_ARROW) &&
|
|
161
|
+
this.parentNavigationListComponent.listItems.last === this));
|
|
162
|
+
if (firstLevelHiddenElementCondition || secondLevelHiddenElementCondition) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
this.navigationComponent.keyDownHandler(event);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (KeyUtil.isKeyCode(event, UP_ARROW) && this.parentNavigationListComponent.listItems.first === this) {
|
|
169
|
+
this.parentListItemComponent?.focusOnClonedLink();
|
|
170
|
+
}
|
|
171
|
+
if ((KeyUtil.isKeyCode(event, UP_ARROW) && this.parentNavigationListComponent.listItems.first === this) ||
|
|
172
|
+
(KeyUtil.isKeyCode(event, DOWN_ARROW) && this.parentNavigationListComponent.listItems.last === this)) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
this.navigationComponent.keyDownHandler(event);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if (!KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW])) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
event.stopImmediatePropagation();
|
|
182
|
+
const shouldExpand = !this._isCollapseAction(event);
|
|
183
|
+
if (!this.navigationComponent.isSnapped()) {
|
|
184
|
+
this._expandedStateKeyboardHandler(shouldExpand);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
this._snappedStateKeyboardHandler(shouldExpand);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/** @hidden */
|
|
191
|
+
clonedMainLinkKeydown(event) {
|
|
192
|
+
if (this._isCollapseAction(event)) {
|
|
193
|
+
this._popoverService.close();
|
|
194
|
+
this.focus();
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {
|
|
198
|
+
this._childNavigationListItems.first?.focus();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/** @hidden */
|
|
202
|
+
calculateExpanded() {
|
|
203
|
+
this._cdr.detectChanges();
|
|
204
|
+
}
|
|
205
|
+
/** @hidden */
|
|
206
|
+
focus() {
|
|
207
|
+
if (this.linkComponent) {
|
|
208
|
+
this.linkComponent.elementRef.nativeElement.focus();
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
this._tabbableService.getTabbableElement(this.elementRef.nativeElement, false, true)?.focus();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/** @hidden */
|
|
215
|
+
ngAfterViewInit() {
|
|
216
|
+
this._popoverService.updateTriggerElement(this._navigationItem);
|
|
217
|
+
}
|
|
218
|
+
/** @hidden */
|
|
219
|
+
ngOnChanges() {
|
|
220
|
+
this.buildComponentCssClass();
|
|
221
|
+
this._popoverService.refreshConfiguration(this);
|
|
222
|
+
}
|
|
223
|
+
/** @hidden */
|
|
224
|
+
ngOnInit() {
|
|
225
|
+
this.buildComponentCssClass();
|
|
226
|
+
}
|
|
227
|
+
/** @hidden */
|
|
228
|
+
collapse() {
|
|
229
|
+
this.expanded.set(false);
|
|
230
|
+
this._popoverService.close();
|
|
231
|
+
}
|
|
232
|
+
/** @hidden */
|
|
233
|
+
expand() {
|
|
234
|
+
this.expanded.set(true);
|
|
235
|
+
}
|
|
236
|
+
/** @hidden */
|
|
237
|
+
toggle() {
|
|
238
|
+
if (this._hidden()) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
this.expanded.set(!this.expanded());
|
|
242
|
+
}
|
|
243
|
+
/** @hidden */
|
|
244
|
+
setSnappedActiveState(isActive) {
|
|
245
|
+
this.childrenActive.set(isActive);
|
|
246
|
+
}
|
|
247
|
+
/** @hidden */
|
|
248
|
+
hide() {
|
|
249
|
+
this._hidden.set(true);
|
|
250
|
+
this.buildComponentCssClass();
|
|
251
|
+
}
|
|
252
|
+
/** @hidden */
|
|
253
|
+
show() {
|
|
254
|
+
this._hidden.set(false);
|
|
255
|
+
this.elementRef.nativeElement.style.display = 'flex';
|
|
256
|
+
this.buildComponentCssClass();
|
|
257
|
+
}
|
|
258
|
+
/** @hidden */
|
|
259
|
+
checkSelfHidden() {
|
|
260
|
+
const shouldHide = this._childNavigationListItems
|
|
261
|
+
?.filter((item) => item.normalizedLevel() === this.normalizedLevel() + 1)
|
|
262
|
+
.every((item) => item._hidden());
|
|
263
|
+
this._hidden.set(shouldHide);
|
|
264
|
+
this.isOpen = shouldHide;
|
|
265
|
+
this.elementRef.nativeElement.style.display = shouldHide ? 'none' : 'flex';
|
|
266
|
+
this.buildComponentCssClass();
|
|
267
|
+
}
|
|
268
|
+
/** @hidden */
|
|
269
|
+
focusOnClonedLink() {
|
|
270
|
+
if (this._clonedMainLink) {
|
|
271
|
+
this._clonedMainLink.nativeElement.focus();
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
const hiddenItems = this.hiddenItems();
|
|
275
|
+
if (hiddenItems.length > 0) {
|
|
276
|
+
this._tabbableService.getTabbableElement(hiddenItems[0]?.elementRef.nativeElement)?.focus();
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/** @hidden */
|
|
280
|
+
createPortal() {
|
|
281
|
+
this.domPortal = this.domPortal || new DomPortal(this.elementRef.nativeElement);
|
|
282
|
+
this._selfInPortal.set(true);
|
|
283
|
+
return this.domPortal;
|
|
284
|
+
}
|
|
285
|
+
/** @hidden */
|
|
286
|
+
destroyPortal() {
|
|
287
|
+
if (this.domPortal?.isAttached) {
|
|
288
|
+
this.domPortal.detach();
|
|
289
|
+
this.domPortal = null;
|
|
290
|
+
}
|
|
291
|
+
this._selfInPortal.set(false);
|
|
292
|
+
}
|
|
293
|
+
/** @hidden */
|
|
294
|
+
_isCollapseAction(event) {
|
|
295
|
+
const expandKey = this._rtl?.rtl.value ? RIGHT_ARROW : LEFT_ARROW;
|
|
296
|
+
return KeyUtil.isKeyCode(event, expandKey);
|
|
297
|
+
}
|
|
298
|
+
/** @hidden */
|
|
299
|
+
_expandedStateKeyboardHandler(shouldExpand) {
|
|
300
|
+
if (shouldExpand && this.expanded()) {
|
|
301
|
+
this.navigationComponent.setNextItemActive();
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
if (!shouldExpand && !this.expanded() && this.parentListItemComponent) {
|
|
305
|
+
this.navigationComponent.setActiveItem(this.parentListItemComponent);
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
if (!shouldExpand && this.childNavigationListComponent()) {
|
|
309
|
+
if (!this.expanded()) {
|
|
310
|
+
this.navigationComponent.setPreviousItemActive();
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
this.expanded.set(false);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
this.expanded.set(shouldExpand);
|
|
317
|
+
}
|
|
318
|
+
/** @hidden */
|
|
319
|
+
_snappedStateKeyboardHandler(shouldExpand) {
|
|
320
|
+
if (shouldExpand && this._hidden()) {
|
|
321
|
+
this.expanded.set(shouldExpand);
|
|
322
|
+
this._childNavigationListItems.first?.focus();
|
|
323
|
+
this.childFocused.set(true);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
if (shouldExpand) {
|
|
327
|
+
if (this.expanded()) {
|
|
328
|
+
this._childNavigationListItems.first?.focus();
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
this.expanded.set(shouldExpand);
|
|
332
|
+
this._popoverService.open();
|
|
333
|
+
setTimeout(() => {
|
|
334
|
+
this.focusOnClonedLink();
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
this.expanded.set(shouldExpand);
|
|
339
|
+
this._popoverService.close();
|
|
340
|
+
if (!this.inPortal()) {
|
|
341
|
+
this.focus();
|
|
342
|
+
}
|
|
343
|
+
if (this.inPortal() && this.normalizedLevel() === 2) {
|
|
344
|
+
this._navigationComponent.focusMoreButton();
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
this.parentListItemComponent?.focus();
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: NavigationListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
352
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: NavigationListItemComponent, isStandalone: true, selector: "li[fdb-navigation-list-item]", inputs: { class: "class", group: "group", _expanded: ["expanded", "_expanded"], linkTemplate: "linkTemplate", alwaysFocusable: "alwaysFocusable" }, host: { listeners: { "keydown": "_keydownHandler($event)" } }, providers: [
|
|
353
|
+
PopoverService,
|
|
354
|
+
{
|
|
355
|
+
provide: FdbNavigationListItemComponent,
|
|
356
|
+
useExisting: NavigationListItemComponent
|
|
357
|
+
}
|
|
358
|
+
], queries: [{ propertyName: "_navigationListComponent", first: true, predicate: FdbNavigationListComponent, descendants: true }, { propertyName: "_routerLinkActive", first: true, predicate: RouterLinkActive, descendants: true }, { propertyName: "_routerLink", first: true, predicate: RouterLink, descendants: true }, { propertyName: "linkComponent", first: true, predicate: NavigationLinkComponent, descendants: true }, { propertyName: "_childNavigationListItems", predicate: FdbNavigationListItemComponent, descendants: true }], viewQueries: [{ propertyName: "_childrenTemplate", first: true, predicate: ["childrenTemplate"], descendants: true, read: TemplateRef }, { propertyName: "_navigationItem", first: true, predicate: ["navigationItem"], descendants: true }, { propertyName: "_clonedMainLink", first: true, predicate: ["clonedMainLink"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"fd-navigation__item\"\n [class.fd-navigation__item--group]=\"isGroup()\"\n [class.fd-navigation__item--overflow]=\"_hidden()\"\n [class.fd-navigation__item--child]=\"normalizedLevel() > 2\"\n [class.fd-navigation__item--with-expander]=\"\n childNavigationListComponent() && normalizedLevel() < 3 && linkComponent?._routerLink\n \"\n aria-current=\"page\"\n [attr.aria-selected]=\"isRouterLinkActive() || (childrenActive() && navigationComponent.isSnapped()) ? true : null\"\n [attr.aria-expanded]=\"expandedAttr()\"\n [attr.aria-level]=\"level()\"\n #navigationItem\n role=\"menuitem\"\n>\n <ng-container *ngIf=\"linkTemplate\">\n <ng-template [ngTemplateOutlet]=\"linkTemplate\" [ngTemplateOutletInjector]=\"injector\"></ng-template>\n </ng-container>\n <ng-content select=\"[fdb-navigation-link]\"></ng-content>\n <button\n (click)=\"toggle()\"\n *ngIf=\"childNavigationListComponent() && normalizedLevel() < 3 && linkComponent?._routerLink\"\n fd-button\n class=\"fd-button--nested fd-navigation__expander\"\n >\n <fd-icon [glyph]=\"toggleIcon()\"></fd-icon>\n </button>\n</div>\n<ng-container\n *ngIf=\"\n (childNavigationListComponent() && !navigationComponent.isSnapped()) ||\n (navigationComponent.isSnapped() && normalizedLevel() < 2) ||\n _hidden()\n \"\n>\n <ng-template [ngTemplateOutlet]=\"childrenTemplate\" [ngTemplateOutletInjector]=\"injector\"></ng-template>\n</ng-container>\n\n<ng-template #childrenTemplate>\n <ng-template #childNavigationLists>\n <ng-content select=\"ul[fdb-navigation-list]\"></ng-content>\n </ng-template>\n\n <ng-container *ngIf=\"isGroup(); else withWrapper\">\n <ng-template [ngTemplateOutlet]=\"childNavigationLists\" [ngTemplateOutletInjector]=\"injector\"></ng-template>\n </ng-container>\n <ng-template #withWrapper>\n <ng-template #popoverTemplate>\n <!-- fd-navigation__list-container -->\n <div\n *ngIf=\"childNavigationListComponent()\"\n [class.fd-navigation__list-container]=\"!navigationComponent.isSnapped()\"\n aria-hidden=\"true\"\n >\n <div class=\"fd-navigation__list-wrapper popover-wrapper\" aria-hidden=\"true\">\n <div\n *ngIf=\"linkComponent && navigationComponent.isSnapped()\"\n class=\"fd-navigation__item fd-navigation__item--title fd-navigation__item--child\"\n aria-level=\"1\"\n role=\"treeitem\"\n aria-expanded=\"true\"\n [attr.aria-selected]=\"isRouterLinkActive()\"\n >\n <a\n class=\"fd-navigation__link\"\n [routerLink]=\"$any(routerLink())?.commands\"\n role=\"button\"\n tabindex=\"0\"\n (keydown)=\"clonedMainLinkKeydown($event)\"\n #clonedMainLink\n >\n <span\n class=\"fd-navigation__icon sap-icon--basket\"\n role=\"presentation\"\n aria-hidden=\"true\"\n ></span>\n <ng-container *ngTemplateOutlet=\"linkComponent.textRenderer!\"></ng-container>\n <span class=\"fd-navigation__selection-indicator\"></span>\n </a>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"childNavigationLists\"\n [ngTemplateOutletInjector]=\"injector\"\n ></ng-template>\n </div>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"_hidden()\" [ngIfElse]=\"popoverTemplate\">\n <div\n *ngIf=\"childNavigationListComponent()\"\n class=\"fd-navigation__list-container fd-navigation__list-container--submenu fd-menu__sublist\"\n >\n <div class=\"fd-navigation__list-wrapper\">\n <ng-template\n [ngTemplateOutlet]=\"childNavigationLists\"\n [ngTemplateOutletInjector]=\"injector\"\n ></ng-template>\n </div>\n </div>\n </ng-template>\n </ng-template>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel", "ariaHidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
359
|
+
}
|
|
360
|
+
__decorate([
|
|
361
|
+
applyCssClass,
|
|
362
|
+
__metadata("design:type", Function),
|
|
363
|
+
__metadata("design:paramtypes", []),
|
|
364
|
+
__metadata("design:returntype", Array)
|
|
365
|
+
], NavigationListItemComponent.prototype, "buildComponentCssClass", null);
|
|
366
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: NavigationListItemComponent, decorators: [{
|
|
367
|
+
type: Component,
|
|
368
|
+
args: [{ selector: 'li[fdb-navigation-list-item]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
|
|
369
|
+
PopoverService,
|
|
370
|
+
{
|
|
371
|
+
provide: FdbNavigationListItemComponent,
|
|
372
|
+
useExisting: NavigationListItemComponent
|
|
373
|
+
}
|
|
374
|
+
], imports: [
|
|
375
|
+
AsyncPipe,
|
|
376
|
+
NgIf,
|
|
377
|
+
NgTemplateOutlet,
|
|
378
|
+
PopoverComponent,
|
|
379
|
+
PopoverControlComponent,
|
|
380
|
+
RouterLink,
|
|
381
|
+
ButtonComponent,
|
|
382
|
+
IconComponent
|
|
383
|
+
], standalone: true, template: "<div\n class=\"fd-navigation__item\"\n [class.fd-navigation__item--group]=\"isGroup()\"\n [class.fd-navigation__item--overflow]=\"_hidden()\"\n [class.fd-navigation__item--child]=\"normalizedLevel() > 2\"\n [class.fd-navigation__item--with-expander]=\"\n childNavigationListComponent() && normalizedLevel() < 3 && linkComponent?._routerLink\n \"\n aria-current=\"page\"\n [attr.aria-selected]=\"isRouterLinkActive() || (childrenActive() && navigationComponent.isSnapped()) ? true : null\"\n [attr.aria-expanded]=\"expandedAttr()\"\n [attr.aria-level]=\"level()\"\n #navigationItem\n role=\"menuitem\"\n>\n <ng-container *ngIf=\"linkTemplate\">\n <ng-template [ngTemplateOutlet]=\"linkTemplate\" [ngTemplateOutletInjector]=\"injector\"></ng-template>\n </ng-container>\n <ng-content select=\"[fdb-navigation-link]\"></ng-content>\n <button\n (click)=\"toggle()\"\n *ngIf=\"childNavigationListComponent() && normalizedLevel() < 3 && linkComponent?._routerLink\"\n fd-button\n class=\"fd-button--nested fd-navigation__expander\"\n >\n <fd-icon [glyph]=\"toggleIcon()\"></fd-icon>\n </button>\n</div>\n<ng-container\n *ngIf=\"\n (childNavigationListComponent() && !navigationComponent.isSnapped()) ||\n (navigationComponent.isSnapped() && normalizedLevel() < 2) ||\n _hidden()\n \"\n>\n <ng-template [ngTemplateOutlet]=\"childrenTemplate\" [ngTemplateOutletInjector]=\"injector\"></ng-template>\n</ng-container>\n\n<ng-template #childrenTemplate>\n <ng-template #childNavigationLists>\n <ng-content select=\"ul[fdb-navigation-list]\"></ng-content>\n </ng-template>\n\n <ng-container *ngIf=\"isGroup(); else withWrapper\">\n <ng-template [ngTemplateOutlet]=\"childNavigationLists\" [ngTemplateOutletInjector]=\"injector\"></ng-template>\n </ng-container>\n <ng-template #withWrapper>\n <ng-template #popoverTemplate>\n <!-- fd-navigation__list-container -->\n <div\n *ngIf=\"childNavigationListComponent()\"\n [class.fd-navigation__list-container]=\"!navigationComponent.isSnapped()\"\n aria-hidden=\"true\"\n >\n <div class=\"fd-navigation__list-wrapper popover-wrapper\" aria-hidden=\"true\">\n <div\n *ngIf=\"linkComponent && navigationComponent.isSnapped()\"\n class=\"fd-navigation__item fd-navigation__item--title fd-navigation__item--child\"\n aria-level=\"1\"\n role=\"treeitem\"\n aria-expanded=\"true\"\n [attr.aria-selected]=\"isRouterLinkActive()\"\n >\n <a\n class=\"fd-navigation__link\"\n [routerLink]=\"$any(routerLink())?.commands\"\n role=\"button\"\n tabindex=\"0\"\n (keydown)=\"clonedMainLinkKeydown($event)\"\n #clonedMainLink\n >\n <span\n class=\"fd-navigation__icon sap-icon--basket\"\n role=\"presentation\"\n aria-hidden=\"true\"\n ></span>\n <ng-container *ngTemplateOutlet=\"linkComponent.textRenderer!\"></ng-container>\n <span class=\"fd-navigation__selection-indicator\"></span>\n </a>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"childNavigationLists\"\n [ngTemplateOutletInjector]=\"injector\"\n ></ng-template>\n </div>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"_hidden()\" [ngIfElse]=\"popoverTemplate\">\n <div\n *ngIf=\"childNavigationListComponent()\"\n class=\"fd-navigation__list-container fd-navigation__list-container--submenu fd-menu__sublist\"\n >\n <div class=\"fd-navigation__list-wrapper\">\n <ng-template\n [ngTemplateOutlet]=\"childNavigationLists\"\n [ngTemplateOutletInjector]=\"injector\"\n ></ng-template>\n </div>\n </div>\n </ng-template>\n </ng-template>\n</ng-template>\n" }]
|
|
384
|
+
}], ctorParameters: function () { return []; }, propDecorators: { class: [{
|
|
385
|
+
type: Input
|
|
386
|
+
}], group: [{
|
|
387
|
+
type: Input
|
|
388
|
+
}], _expanded: [{
|
|
389
|
+
type: Input,
|
|
390
|
+
args: ['expanded']
|
|
391
|
+
}], linkTemplate: [{
|
|
392
|
+
type: Input
|
|
393
|
+
}], alwaysFocusable: [{
|
|
394
|
+
type: Input
|
|
395
|
+
}], _navigationListComponent: [{
|
|
396
|
+
type: ContentChild,
|
|
397
|
+
args: [FdbNavigationListComponent]
|
|
398
|
+
}], _routerLinkActive: [{
|
|
399
|
+
type: ContentChild,
|
|
400
|
+
args: [RouterLinkActive]
|
|
401
|
+
}], _routerLink: [{
|
|
402
|
+
type: ContentChild,
|
|
403
|
+
args: [RouterLink]
|
|
404
|
+
}], _childrenTemplate: [{
|
|
405
|
+
type: ViewChild,
|
|
406
|
+
args: ['childrenTemplate', { read: TemplateRef }]
|
|
407
|
+
}], _navigationItem: [{
|
|
408
|
+
type: ViewChild,
|
|
409
|
+
args: ['navigationItem']
|
|
410
|
+
}], linkComponent: [{
|
|
411
|
+
type: ContentChild,
|
|
412
|
+
args: [NavigationLinkComponent]
|
|
413
|
+
}], _childNavigationListItems: [{
|
|
414
|
+
type: ContentChildren,
|
|
415
|
+
args: [FdbNavigationListItemComponent, { descendants: true }]
|
|
416
|
+
}], _clonedMainLink: [{
|
|
417
|
+
type: ViewChild,
|
|
418
|
+
args: ['clonedMainLink', { static: false, read: ElementRef }]
|
|
419
|
+
}], buildComponentCssClass: [], _keydownHandler: [{
|
|
420
|
+
type: HostListener,
|
|
421
|
+
args: ['keydown', ['$event']]
|
|
422
|
+
}] } });
|
|
423
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9idHAvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLWxpc3QvbmF2aWdhdGlvbi1saXN0LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9idHAvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLWxpc3QvbmF2aWdhdGlvbi1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFHSCxPQUFPLEVBRVAsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDaEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxF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QUFXLDZCQUE2Qjt5QkFDM0M7cUJBQ0osV0FDUTt3QkFDTCxTQUFTO3dCQUNULElBQUk7d0JBQ0osZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLHVCQUF1Qjt3QkFDdkIsVUFBVTt3QkFDVixlQUFlO3dCQUNmLGFBQWE7cUJBQ2hCLGNBQ1csSUFBSTswRUFRaEIsS0FBSztzQkFESixLQUFLO2dCQUtGLEtBQUs7c0JBRFIsS0FBSztnQkFPRixTQUFTO3NCQURaLEtBQUs7dUJBQUMsVUFBVTtnQkFPakIsWUFBWTtzQkFEWCxLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLRix3QkFBd0I7c0JBRDNCLFlBQVk7dUJBQUMsMEJBQTBCO2dCQU9wQyxpQkFBaUI7c0JBRHBCLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQU8xQixXQUFXO3NCQURkLFlBQVk7dUJBQUMsVUFBVTtnQkFPcEIsaUJBQWlCO3NCQURwQixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFPcEQsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGdCQUFnQjtnQkFLM0IsYUFBYTtzQkFEWixZQUFZO3VCQUFDLHVCQUF1QjtnQkFLcEIseUJBQXlCO3NCQUR6QyxlQUFlO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFLckQsZUFBZTtzQkFEL0IsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkF5SWhFLHNCQUFzQixNQU1kLGVBQWU7c0JBRHRCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZSAqL1xuaW1wb3J0IHsgRm9jdXNhYmxlT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IERvbVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaWduYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBpbmplY3QsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rLCBSb3V0ZXJMaW5rQWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gICAgQ3NzQ2xhc3NCdWlsZGVyLFxuICAgIEhhc0VsZW1lbnRSZWYsXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBUYWJiYWJsZUVsZW1lbnRTZXJ2aWNlLFxuICAgIGFwcGx5Q3NzQ2xhc3Ncbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCwgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQsIFBvcG92ZXJTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgRmRiTmF2aWdhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tY29tcG9uZW50LnRva2VuJztcbmltcG9ydCB7IE5hdmlnYXRpb25MaW5rQ29tcG9uZW50IH0gZnJvbSAnLi4vbmF2aWdhdGlvbi1saW5rLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGZGJOYXZpZ2F0aW9uTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tbGlzdC1jb21wb25lbnQudG9rZW4nO1xuaW1wb3J0IHsgRmRiTmF2aWdhdGlvbkxpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmF2aWdhdGlvbi1saXN0LWl0ZW0tY29tcG9uZW50LnRva2VuJztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2xpW2ZkYi1uYXZpZ2F0aW9uLWxpc3QtaXRlbV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uYXZpZ2F0aW9uLWxpc3QtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgUG9wb3ZlclNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZkYk5hdmlnYXRpb25MaXN0SXRlbUNvbXBvbmVudCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBOYXZpZ2F0aW9uTGlzdEl0ZW1Db21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIFBvcG92ZXJDb21wb25lbnQsXG4gICAgICAgIFBvcG92ZXJDb250cm9sQ29tcG9uZW50LFxuICAgICAgICBSb3V0ZXJMaW5rLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEljb25Db21wb25lbnRcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvbkxpc3RJdGVtQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBGZGJOYXZpZ2F0aW9uTGlzdEl0ZW1Db21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDc3NDbGFzc0J1aWxkZXIsIEhhc0VsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIEZvY3VzYWJsZU9wdGlvblxue1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZ3JvdXAoZ3JvdXA6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc0dyb3VwLnNldChncm91cCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASW5wdXQoJ2V4cGFuZGVkJylcbiAgICBzZXQgX2V4cGFuZGVkKGV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWQuc2V0KGV4cGFuZGVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGlua1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBhbHdheXNGb2N1c2FibGUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChGZGJOYXZpZ2F0aW9uTGlzdENvbXBvbmVudClcbiAgICBzZXQgX25hdmlnYXRpb25MaXN0Q29tcG9uZW50KG5hdmlnYXRpb25MaXN0Q29tcG9uZW50OiBGZGJOYXZpZ2F0aW9uTGlzdENvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmNoaWxkTmF2aWdhdGlvbkxpc3RDb21wb25lbnQuc2V0KG5hdmlnYXRpb25MaXN0Q29tcG9uZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoUm91dGVyTGlua0FjdGl2ZSlcbiAgICBzZXQgX3JvdXRlckxpbmtBY3RpdmUocm91dGVyTGlua0FjdGl2ZTogUm91dGVyTGlua0FjdGl2ZSkge1xuICAgICAgICB0aGlzLnJvdXRlckxpbmtBY3RpdmUuc2V0KHJvdXRlckxpbmtBY3RpdmUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChSb3V0ZXJMaW5rKVxuICAgIHNldCBfcm91dGVyTGluayhyb3V0ZXJMaW5rOiBSb3V0ZXJMaW5rKSB7XG4gICAgICAgIHRoaXMucm91dGVyTGluay5zZXQocm91dGVyTGluayk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdjaGlsZHJlblRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHNldCBfY2hpbGRyZW5UZW1wbGF0ZSh0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dm9pZD4pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlblRlbXBsYXRlLnNldCh0ZW1wbGF0ZVJlZik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCduYXZpZ2F0aW9uSXRlbScpXG4gICAgX25hdmlnYXRpb25JdGVtOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKE5hdmlnYXRpb25MaW5rQ29tcG9uZW50KVxuICAgIGxpbmtDb21wb25lbnQ6IE51bGxhYmxlPE5hdmlnYXRpb25MaW5rQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihGZGJOYXZpZ2F0aW9uTGlzdEl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jaGlsZE5hdmlnYXRpb25MaXN0SXRlbXM6IFF1ZXJ5TGlzdDxGZGJOYXZpZ2F0aW9uTGlzdEl0ZW1Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdjbG9uZWRNYWluTGluaycsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Nsb25lZE1haW5MaW5rOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcGFyZW50TGlzdEl0ZW1Db21wb25lbnQgPSBpbmplY3QoRmRiTmF2aWdhdGlvbkxpc3RJdGVtQ29tcG9uZW50LCB7IG9wdGlvbmFsOiB0cnVlLCBza2lwU2VsZjogdHJ1ZSB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3ZlcnJpZGUgbm9BcnJvdyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvdmVycmlkZSBhZGRpdGlvbmFsQm9keUNsYXNzID0gJ2ZkLW5hdmlnYXRpb25fX2xpc3QtY29udGFpbmVyJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcm91dGVyTGluayA9IHNpZ25hbDxSb3V0ZXJMaW5rIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJvdXRlckxpbmtBY3RpdmUgPSBzaWduYWw8Um91dGVyTGlua0FjdGl2ZSB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpc1JvdXRlckxpbmtBY3RpdmUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdXRlckxpbmtBY3RpdmUgPSB0aGlzLnJvdXRlckxpbmtBY3RpdmUoKTtcbiAgICAgICAgaWYgKHJvdXRlckxpbmtBY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0b1NpZ25hbChyb3V0ZXJMaW5rQWN0aXZlLmlzQWN0aXZlQ2hhbmdlLCB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiByb3V0ZXJMaW5rQWN0aXZlLmlzQWN0aXZlLFxuICAgICAgICAgICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yXG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2hpbGROYXZpZ2F0aW9uTGlzdENvbXBvbmVudCA9IHNpZ25hbDxGZGJOYXZpZ2F0aW9uTGlzdENvbXBvbmVudCB8IG51bGw+KG51bGwpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZXhwYW5kZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmdWxsUGF0aEV4cGFuZGVkID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+ICh0aGlzLnBhcmVudExpc3RJdGVtQ29tcG9uZW50ID8gdGhpcy5wYXJlbnRMaXN0SXRlbUNvbXBvbmVudC5leHBhbmRlZCgpIDogdHJ1ZSkgJiYgdGhpcy5leHBhbmRlZCgpXG4gICAgKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNHcm91cCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNoaWxkcmVuVGVtcGxhdGUgPSBzaWduYWw8VGVtcGxhdGVSZWY8dm9pZD4gfCBudWxsPihudWxsKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2hpbGRyZW5BY3RpdmUgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpblBvcnRhbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFyZW50SW5Qb3J0YWwoKSB8fCB0aGlzLl9zZWxmSW5Qb3J0YWwoKSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHBhcmVudEluUG9ydGFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wYXJlbnRMaXN0SXRlbUNvbXBvbmVudD8uaW5Qb3J0YWwoKSB8fCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGluIGF0dHJpYnV0ZSBvbmx5LiBGb3IgYWN0dWFsIGNhbGN1bGF0aW9uIG9mIGxldmVsIG9mIG5lc3RpbmcgdXNlIGBub3JtYWxpemVkTGV2ZWxgLlxuICAgICAqL1xuICAgIGdldCBsZXZlbCgpOiBTaWduYWw8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudE5hdmlnYXRpb25MaXN0Q29tcG9uZW50LmxldmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbGN1bGF0aW9uIG9mIHRoZSBsZXZlbCBvZiBpbmNsdXNpb24uIENhbiBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgYWN0dWFsIGxldmVsIGR1ZSB0byBhYmlsaXR5IHRvIG1peCBncm91cGVkIGxpc3RzIHdpdGggdW5ncm91cGVkLlxuICAgICAqIEZvciB1bmdyb3VwZWQgbGlzdHMgd2lsbCBhZGQgKzEgZm9yIHRoZSBmaXJzdCBsaXN0IGluIHRoZSBoaWVyYXJjaHkgdG8gbWltaWMgZ3JvdXAgZXhpc3RlbmNlLlxuICAgICAqL1xuICAgIG5vcm1hbGl6ZWRMZXZlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50TmF2aWdhdGlvbkxpc3RDb21wb25lbnQuaXNJbkdyb3VwKCkgfHwgdGhpcy5pc0dyb3VwKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxldmVsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubGV2ZWwoKSArIDE7XG4gICAgfSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0luUG9wb3ZlciA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PiB0aGlzLm5hdmlnYXRpb25Db21wb25lbnQuaXNTbmFwcGVkKCkgJiYgKHRoaXMubm9ybWFsaXplZExldmVsKCkgPiAyIHx8IHRoaXMuX2hpZGRlbigpKVxuICAgICk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgZXhwYW5kZWRBdHRyID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICAodGhpcy5leHBhbmRlZCgpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMubm9ybWFsaXplZExldmVsKCkgPT09IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgISF0aGlzLmNoaWxkTmF2aWdhdGlvbkxpc3RDb21wb25lbnQoKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Db21wb25lbnQuaXNTbmFwcGVkKCkpKSAmJlxuICAgICAgICAgICAgIXRoaXMuX2hpZGRlbigpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEljb24gd2hpY2ggc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSB0b2dnbGUgYnV0dG9uLlxuICAgICAqKi9cbiAgICB0b2dnbGVJY29uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5leHBhbmRlZEF0dHIoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdzbGltLWFycm93LWRvd24nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1J0bCgpID8gJ3NsaW0tYXJyb3ctbGVmdCcgOiAnc2xpbS1hcnJvdy1yaWdodCc7XG4gICAgfSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGRvbVBvcnRhbDogTnVsbGFibGU8RG9tUG9ydGFsPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZkluUG9ydGFsID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFiYmFibGVTZXJ2aWNlID0gaW5qZWN0KFRhYmJhYmxlRWxlbWVudFNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9uYXZpZ2F0aW9uQ29tcG9uZW50ID0gaW5qZWN0KEZkYk5hdmlnYXRpb25Db21wb25lbnQpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbEJvZHlDb21wb25lbnRDbGFzc2VzID0gW1xuICAgICAgICAgICAgICAgICdmZC1uYXZpZ2F0aW9uJyxcbiAgICAgICAgICAgICAgICAnZmQtbmF2aWdhdGlvbi0tc25hcHBlZCcsXG4gICAgICAgICAgICAgICAgYGZkLW5hdmlnYXRpb24tLSR7dGhpcy5uYXZpZ2F0aW9uQ29tcG9uZW50Lm1vZGUoKX1gXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoa2xhc3MpID0+ICEha2xhc3MpXG4gICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLnVwZGF0ZUNvbnRlbnQobnVsbCwgdGhpcy5jaGlsZHJlblRlbXBsYXRlKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBhcHBseUNzc0NsYXNzXG4gICAgYnVpbGRDb21wb25lbnRDc3NDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5jbGFzcyB8fCAnJywgJ2ZkLW5hdmlnYXRpb25fX2xpc3QtaXRlbSddO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHJpdmF0ZSBfa2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5Qb3BvdmVyKCkgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtET1dOX0FSUk9XLCBVUF9BUlJPV10pKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9oaWRkZW4oKSB8fCB0aGlzLnBhcmVudExpc3RJdGVtQ29tcG9uZW50Py5faGlkZGVuKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoaWRkZW5JdGVtcyA9IHRoaXMubmF2aWdhdGlvbkNvbXBvbmVudC5nZXRNb3JlQnV0dG9uKCk/LmhpZGRlbkl0ZW1zKCkgfHwgW107XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RMZXZlbEhpZGRlbkVsZW1lbnRDb25kaXRpb24gPVxuICAgICAgICAgICAgICAgICAgICBoaWRkZW5JdGVtcyAmJlxuICAgICAgICAgICAgICAgICAgICAoKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ID09PSBoaWRkZW5JdGVtc1swXT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5JdGVtc1toaWRkZW5JdGVtcy5sZW5ndGggLSAxXT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRMZXZlbEhpZGRlbkVsZW1lbnRDb25kaXRpb24gPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZWRMZXZlbCgpID4gMiAmJlxuICAgICAgICAgICAgICAgICAgICAoKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50TmF2aWdhdGlvbkxpc3RDb21wb25lbnQubGlzdEl0ZW1zLmZpcnN0ID09PSB0aGlzKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50TmF2aWdhdGlvbkxpc3RDb21wb25lbnQubGlzdEl0ZW1zLmxhc3QgPT09IHRoaXMpKTtcblxuICAgICAgICAgICAgICAgIGlmIChmaXJzdExldmVsSGlkZGVuRWxlbWVudENvbmRpdGlvbiB8fCBzZWNvbmRMZXZlbEhpZGRlbkVsZW1lbnRDb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Db21wb25lbnQua2V5RG93bkhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpICYmIHRoaXMucGFyZW50TmF2aWdhdGlvbkxpc3RDb21wb25lbnQubGlzdEl0ZW1zLmZpcnN0ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRMaXN0SXRlbUNvbXBvbmVudD8uZm9jdXNPbkNsb25lZExpbmsoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSAmJiB0aGlzLnBhcmVudE5hdmlnYXRpb25MaXN0Q29tcG9uZW50Lmxpc3RJdGVtcy5maXJzdCA9PT0gdGhpcykgfHxcbiAgICAgICAgICAgICAgICAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpICYmIHRoaXMucGFyZW50TmF2aWdhdGlvbkxpc3RDb21wb25lbnQubGlzdEl0ZW1zLmxhc3QgPT09IHRoaXMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Db21wb25lbnQua2V5RG93bkhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtMRUZUX0FSUk9XLCBSSUdIVF9BUlJPV10pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnN0IHNob3VsZEV4cGFuZCA9ICF0aGlzLl9pc0NvbGxhcHNlQWN0aW9uKGV2ZW50KTtcblxuICAgICAgICBpZiAoIXRoaXMubmF2aWdhdGlvbkNvbXBvbmVudC5pc1NuYXBwZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRTdGF0ZUtleWJvYXJkSGFuZGxlcihzaG91bGRFeHBhbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc25hcHBlZFN0YXRlS2V5Ym9hcmRIYW5kbGVyKHNob3VsZEV4cGFuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsb25lZE1haW5MaW5rS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXNDb2xsYXBzZUFjdGlvbihldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZE5hdmlnYXRpb25MaXN0SXRlbXMuZmlyc3Q/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNhbGN1bGF0ZUV4cGFuZGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxpbmtDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubGlua0NvbXBvbmVudC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmJhYmxlU2VydmljZS5nZXRUYWJiYWJsZUVsZW1lbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGZhbHNlLCB0cnVlKT8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS51cGRhdGVUcmlnZ2VyRWxlbWVudCh0aGlzLl9uYXZpZ2F0aW9uSXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLnJlZnJlc2hDb25maWd1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29sbGFwc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2UuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGV4cGFuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZC5zZXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2dnbGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9oaWRkZW4oKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXhwYW5kZWQuc2V0KCF0aGlzLmV4cGFuZGVkKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0U25hcHBlZEFjdGl2ZVN0YXRlKGlzQWN0aXZlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5BY3RpdmUuc2V0KGlzQWN0aXZlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhpZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hpZGRlbi5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2hvdygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGlkZGVuLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2hlY2tTZWxmSGlkZGVuKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaG91bGRIaWRlID0gdGhpcy5fY2hpbGROYXZpZ2F0aW9uTGlzdEl0ZW1zXG4gICAgICAgICAgICA/LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5ub3JtYWxpemVkTGV2ZWwoKSA9PT0gdGhpcy5ub3JtYWxpemVkTGV2ZWwoKSArIDEpXG4gICAgICAgICAgICAuZXZlcnkoKGl0ZW0pID0+IGl0ZW0uX2hpZGRlbigpKTtcbiAgICAgICAgdGhpcy5faGlkZGVuLnNldChzaG91bGRIaWRlKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBzaG91bGRIaWRlO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gc2hvdWxkSGlkZSA/ICdub25lJyA6ICdmbGV4JztcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmb2N1c09uQ2xvbmVkTGluaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2Nsb25lZE1haW5MaW5rKSB7XG4gICAgICAgICAgICB0aGlzLl9jbG9uZWRNYWluTGluay5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoaWRkZW5JdGVtcyA9IHRoaXMuaGlkZGVuSXRlbXMoKTtcblxuICAgICAgICBpZiAoaGlkZGVuSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fdGFiYmFibGVTZXJ2aWNlLmdldFRhYmJhYmxlRWxlbWVudChoaWRkZW5JdGVtc1swXT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KT8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY3JlYXRlUG9ydGFsKCk6IERvbVBvcnRhbCB7XG4gICAgICAgIHRoaXMuZG9tUG9ydGFsID0gdGhpcy5kb21Qb3J0YWwgfHwgbmV3IERvbVBvcnRhbCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX3NlbGZJblBvcnRhbC5zZXQodHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmRvbVBvcnRhbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGRlc3Ryb3lQb3J0YWwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvbVBvcnRhbD8uaXNBdHRhY2hlZCkge1xuICAgICAgICAgICAgdGhpcy5kb21Qb3J0YWwuZGV0YWNoKCk7XG4gICAgICAgICAgICB0aGlzLmRvbVBvcnRhbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZkluUG9ydGFsLnNldChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0NvbGxhcHNlQWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGV4cGFuZEtleSA9IHRoaXMuX3J0bD8ucnRsLnZhbHVlID8gUklHSFRfQVJST1cgOiBMRUZUX0FSUk9XO1xuICAgICAgICByZXR1cm4gS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIGV4cGFuZEtleSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9leHBhbmRlZFN0YXRlS2V5Ym9hcmRIYW5kbGVyKHNob3VsZEV4cGFuZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoc2hvdWxkRXhwYW5kICYmIHRoaXMuZXhwYW5kZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29tcG9uZW50LnNldE5leHRJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNob3VsZEV4cGFuZCAmJiAhdGhpcy5leHBhbmRlZCgpICYmIHRoaXMucGFyZW50TGlzdEl0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbXBvbmVudC5zZXRBY3RpdmVJdGVtKHRoaXMucGFyZW50TGlzdEl0ZW1Db21wb25lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaG91bGRFeHBhbmQgJiYgdGhpcy5jaGlsZE5hdmlnYXRpb25MaXN0Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5leHBhbmRlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29tcG9uZW50LnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkLnNldChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4cGFuZGVkLnNldChzaG91bGRFeHBhbmQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc25hcHBlZFN0YXRlS2V5Ym9hcmRIYW5kbGVyKHNob3VsZEV4cGFuZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoc2hvdWxkRXhwYW5kICYmIHRoaXMuX2hpZGRlbigpKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkLnNldChzaG91bGRFeHBhbmQpO1xuICAgICAgICAgICAgdGhpcy5fY2hpbGROYXZpZ2F0aW9uTGlzdEl0ZW1zLmZpcnN0Py5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5jaGlsZEZvY3VzZWQuc2V0KHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRFeHBhbmQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZE5hdmlnYXRpb25MaXN0SXRlbXMuZmlyc3Q/LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkLnNldChzaG91bGRFeHBhbmQpO1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2Uub3BlbigpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uQ2xvbmVkTGluaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkLnNldChzaG91bGRFeHBhbmQpO1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2UuY2xvc2UoKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmluUG9ydGFsKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmluUG9ydGFsKCkgJiYgdGhpcy5ub3JtYWxpemVkTGV2ZWwoKSA9PT0gMikge1xuICAgICAgICAgICAgICAgIHRoaXMuX25hdmlnYXRpb25Db21wb25lbnQuZm9jdXNNb3JlQnV0dG9uKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50TGlzdEl0ZW1Db21wb25lbnQ/LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmZC1uYXZpZ2F0aW9uX19pdGVtXCJcbiAgICBbY2xhc3MuZmQtbmF2aWdhdGlvbl9faXRlbS0tZ3JvdXBdPVwiaXNHcm91cCgpXCJcbiAgICBbY2xhc3MuZmQtbmF2aWdhdGlvbl9faXRlbS0tb3ZlcmZsb3ddPVwiX2hpZGRlbigpXCJcbiAgICBbY2xhc3MuZmQtbmF2aWdhdGlvbl9faXRlbS0tY2hpbGRdPVwibm9ybWFsaXplZExldmVsKCkgPiAyXCJcbiAgICBbY2xhc3MuZmQtbmF2aWdhdGlvbl9faXRlbS0td2l0aC1leHBhbmRlcl09XCJcbiAgICAgICAgY2hpbGROYXZpZ2F0aW9uTGlzdENvbXBvbmVudCgpICYmIG5vcm1hbGl6ZWRMZXZlbCgpIDwgMyAmJiBsaW5rQ29tcG9uZW50Py5fcm91dGVyTGlua1xuICAgIFwiXG4gICAgYXJpYS1jdXJyZW50PVwicGFnZVwiXG4gICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc1JvdXRlckxpbmtBY3RpdmUoKSB8fCAoY2hpbGRyZW5BY3RpdmUoKSAmJiBuYXZpZ2F0aW9uQ29tcG9uZW50LmlzU25hcHBlZCgpKSA/IHRydWUgOiBudWxsXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImV4cGFuZGVkQXR0cigpXCJcbiAgICBbYXR0ci5hcmlhLWxldmVsXT1cImxldmVsKClcIlxuICAgICNuYXZpZ2F0aW9uSXRlbVxuICAgIHJvbGU9XCJtZW51aXRlbVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpbmtUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlua1RlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZkYi1uYXZpZ2F0aW9uLWxpbmtdXCI+PC9uZy1jb250ZW50PlxuICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICAgICAgKm5nSWY9XCJjaGlsZE5hdmlnYXRpb25MaXN0Q29tcG9uZW50KCkgJiYgbm9ybWFsaXplZExldmVsKCkgPCAzICYmIGxpbmtDb21wb25lbnQ/Ll9yb3V0ZXJMaW5rXCJcbiAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgIGNsYXNzPVwiZmQtYnV0dG9uLS1uZXN0ZWQgZmQtbmF2aWdhdGlvbl9fZXhwYW5kZXJcIlxuICAgID5cbiAgICAgICAgPGZkLWljb24gW2dseXBoXT1cInRvZ2dsZUljb24oKVwiPjwvZmQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICAgIChjaGlsZE5hdmlnYXRpb25MaXN0Q29tcG9uZW50KCkgJiYgIW5hdmlnYXRpb25Db21wb25lbnQuaXNTbmFwcGVkKCkpIHx8XG4gICAgICAgIChuYXZpZ2F0aW9uQ29tcG9uZW50LmlzU25hcHBlZCgpICYmIG5vcm1hbGl6ZWRMZXZlbCgpIDwgMikgfHxcbiAgICAgICAgX2hpZGRlbigpXG4gICAgXCJcbj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpbGRyZW5UZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIj48L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY2hpbGRyZW5UZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2NoaWxkTmF2aWdhdGlvbkxpc3RzPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ1bFtmZGItbmF2aWdhdGlvbi1saXN0XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzR3JvdXAoKTsgZWxzZSB3aXRoV3JhcHBlclwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpbGROYXZpZ2F0aW9uTGlzdHNcIiBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3dpdGhXcmFwcGVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3BvcG92ZXJUZW1wbGF0ZT5cbiAgICAgICAgICAgIDwhLS0gZmQtbmF2aWdhdGlvbl9fbGlzdC1jb250YWluZXIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjaGlsZE5hdmlnYXRpb25MaXN0Q29tcG9uZW50KClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1uYXZpZ2F0aW9uX19saXN0LWNvbnRhaW5lcl09XCIhbmF2aWdhdGlvbkNvbXBvbmVudC5pc1NuYXBwZWQoKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtbmF2aWdhdGlvbl9fbGlzdC13cmFwcGVyIHBvcG92ZXItd3JhcHBlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImxpbmtDb21wb25lbnQgJiYgbmF2aWdhdGlvbkNvbXBvbmVudC5pc1NuYXBwZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLW5hdmlnYXRpb25fX2l0ZW0gZmQtbmF2aWdhdGlvbl9faXRlbS0tdGl0bGUgZmQtbmF2aWdhdGlvbl9faXRlbS0tY2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sZXZlbD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNSb3V0ZXJMaW5rQWN0aXZlKClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtbmF2aWdhdGlvbl9fbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiJGFueShyb3V0ZXJMaW5rKCkpPy5jb21tYW5kc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJjbG9uZWRNYWluTGlua0tleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Nsb25lZE1haW5MaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1uYXZpZ2F0aW9uX19pY29uIHNhcC1pY29uLS1iYXNrZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaW5rQ29tcG9uZW50LnRleHRSZW5kZXJlciFcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZkLW5hdmlnYXRpb25fX3NlbGVjdGlvbi1pbmRpY2F0b3JcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaWxkTmF2aWdhdGlvbkxpc3RzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiX2hpZGRlbigpXCIgW25nSWZFbHNlXT1cInBvcG92ZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hpbGROYXZpZ2F0aW9uTGlzdENvbXBvbmVudCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLW5hdmlnYXRpb25fX2xpc3QtY29udGFpbmVyIGZkLW5hdmlnYXRpb25fX2xpc3QtY29udGFpbmVyLS1zdWJtZW51IGZkLW1lbnVfX3N1Ymxpc3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1uYXZpZ2F0aW9uX19saXN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZE5hdmlnYXRpb25MaXN0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { PortalModule } from '@angular/cdk/portal';
|
|
2
|
+
import { AsyncPipe, NgForOf } from '@angular/common';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewChild, ViewEncapsulation, effect } from '@angular/core';
|
|
4
|
+
import { PopoverService } from '@fundamental-ngx/core/popover';
|
|
5
|
+
import { FdbNavigationListItemComponent } from '../navigation-list-item-component.token';
|
|
6
|
+
import { NavigationListItemComponent } from './navigation-list-item.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/cdk/portal";
|
|
9
|
+
export class NavigationListOverflowItemComponent extends NavigationListItemComponent {
|
|
10
|
+
/** @hidden */
|
|
11
|
+
// eslint-disable-next-line @angular-eslint/no-input-rename
|
|
12
|
+
set _hiddenItems(items) {
|
|
13
|
+
this.hiddenItems().forEach((item) => item.destroyPortal());
|
|
14
|
+
items.forEach((item) => item.createPortal());
|
|
15
|
+
this.hiddenItems.set(items);
|
|
16
|
+
}
|
|
17
|
+
/** @hidden */
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
/** @hidden */
|
|
21
|
+
this.additionalBodyClass = 'fd-navigation__list-container fd-navigation__list-container--menu';
|
|
22
|
+
effect(() => {
|
|
23
|
+
const items = this.hiddenItems();
|
|
24
|
+
this.hasPortalChildren.set(items.length > 0);
|
|
25
|
+
if (items.length === 0) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
}, {
|
|
29
|
+
allowSignalWrites: true
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: NavigationListOverflowItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: NavigationListOverflowItemComponent, isStandalone: true, selector: "li[fdb-navigation-list-overflow-item]", inputs: { _hiddenItems: ["hiddenItems", "_hiddenItems"] }, providers: [
|
|
34
|
+
PopoverService,
|
|
35
|
+
{
|
|
36
|
+
provide: FdbNavigationListItemComponent,
|
|
37
|
+
useExisting: NavigationListOverflowItemComponent
|
|
38
|
+
}
|
|
39
|
+
], viewQueries: [{ propertyName: "_portal", first: true, predicate: ["childrenTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"fd-navigation__item\"\n [class.fd-navigation__item--group]=\"isGroup()\"\n [class.fd-navigation__item--child]=\"parentNavigationListComponent.parentListComponent?.isParentGroupChild()\"\n aria-current=\"page\"\n [attr.aria-selected]=\"childrenActive() && navigationComponent.isSnapped() ? true : null\"\n [attr.aria-expanded]=\"expandedAttr()\"\n [attr.aria-level]=\"1\"\n #navigationItem\n role=\"menuitem\"\n>\n <ng-content select=\"[fdb-navigation-link]\"></ng-content>\n</div>\n<!-- Detach elements from their hosts immediately to fix issue with flickering elements. -->\n<ul hidden>\n <ng-template *ngFor=\"let item of hiddenItems()\" [cdkPortalOutlet]=\"item.domPortal\"></ng-template>\n</ul>\n<ng-template #childrenTemplate>\n <div class=\"fd-navigation__list-container--menu\">\n <ul class=\"fd-navigation__list fd-navigation__list--parent-items fd-menu__list\">\n <ng-template *ngFor=\"let item of hiddenItems()\" [cdkPortalOutlet]=\"item.domPortal\"></ng-template>\n </ul>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: NavigationListOverflowItemComponent, decorators: [{
|
|
42
|
+
type: Component,
|
|
43
|
+
args: [{ selector: 'li[fdb-navigation-list-overflow-item]', standalone: true, imports: [PortalModule, AsyncPipe, NgForOf], providers: [
|
|
44
|
+
PopoverService,
|
|
45
|
+
{
|
|
46
|
+
provide: FdbNavigationListItemComponent,
|
|
47
|
+
useExisting: NavigationListOverflowItemComponent
|
|
48
|
+
}
|
|
49
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"fd-navigation__item\"\n [class.fd-navigation__item--group]=\"isGroup()\"\n [class.fd-navigation__item--child]=\"parentNavigationListComponent.parentListComponent?.isParentGroupChild()\"\n aria-current=\"page\"\n [attr.aria-selected]=\"childrenActive() && navigationComponent.isSnapped() ? true : null\"\n [attr.aria-expanded]=\"expandedAttr()\"\n [attr.aria-level]=\"1\"\n #navigationItem\n role=\"menuitem\"\n>\n <ng-content select=\"[fdb-navigation-link]\"></ng-content>\n</div>\n<!-- Detach elements from their hosts immediately to fix issue with flickering elements. -->\n<ul hidden>\n <ng-template *ngFor=\"let item of hiddenItems()\" [cdkPortalOutlet]=\"item.domPortal\"></ng-template>\n</ul>\n<ng-template #childrenTemplate>\n <div class=\"fd-navigation__list-container--menu\">\n <ul class=\"fd-navigation__list fd-navigation__list--parent-items fd-menu__list\">\n <ng-template *ngFor=\"let item of hiddenItems()\" [cdkPortalOutlet]=\"item.domPortal\"></ng-template>\n </ul>\n </div>\n</ng-template>\n" }]
|
|
50
|
+
}], ctorParameters: function () { return []; }, propDecorators: { _hiddenItems: [{
|
|
51
|
+
type: Input,
|
|
52
|
+
args: ['hiddenItems']
|
|
53
|
+
}], _portal: [{
|
|
54
|
+
type: ViewChild,
|
|
55
|
+
args: ['childrenTemplate', { read: TemplateRef }]
|
|
56
|
+
}] } });
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1saXN0LW92ZXJmbG93LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9idHAvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLWxpc3QvbmF2aWdhdGlvbi1saXN0LW92ZXJmbG93LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9idHAvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLWxpc3QvbmF2aWdhdGlvbi1saXN0LW92ZXJmbG93LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDekYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7OztBQWtCL0UsTUFBTSxPQUFPLG1DQUFvQyxTQUFRLDJCQUEyQjtJQUNoRixjQUFjO0lBQ2QsMkRBQTJEO0lBQzNELElBQ0ksWUFBWSxDQUFDLEtBQXVDO1FBQ3BELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFTRCxjQUFjO0lBQ2Q7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQUxaLGNBQWM7UUFDTCx3QkFBbUIsR0FBRyxtRUFBbUUsQ0FBQztRQUsvRixNQUFNLENBQ0YsR0FBRyxFQUFFO1lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNwQixPQUFPO2FBQ1Y7UUFDTCxDQUFDLEVBQ0Q7WUFDSSxpQkFBaUIsRUFBRSxJQUFJO1NBQzFCLENBQ0osQ0FBQztJQUNOLENBQUM7OEdBaENRLG1DQUFtQztrR0FBbkMsbUNBQW1DLCtJQVhqQztZQUNQLGNBQWM7WUFDZDtnQkFDSSxPQUFPLEVBQUUsOEJBQThCO2dCQUN2QyxXQUFXLEVBQUUsbUNBQW1DO2FBQ25EO1NBQ0osa0hBZ0JzQyxXQUFXLG9EQzFDdEQsa2tDQXdCQSwyQ0RMYyxZQUFZLGtNQUFhLE9BQU87OzJGQVlqQyxtQ0FBbUM7a0JBaEIvQyxTQUFTOytCQUVJLHVDQUF1QyxjQUNyQyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxhQUNoQzt3QkFDUCxjQUFjO3dCQUNkOzRCQUNJLE9BQU8sRUFBRSw4QkFBOEI7NEJBQ3ZDLFdBQVcscUNBQXFDO3lCQUNuRDtxQkFDSixpQkFFYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzBFQU0zQyxZQUFZO3NCQURmLEtBQUs7dUJBQUMsYUFBYTtnQkFTcEIsT0FBTztzQkFETixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0Zvck9mIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBlZmZlY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb3BvdmVyU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IEZkYk5hdmlnYXRpb25MaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tbGlzdC1pdGVtLWNvbXBvbmVudC50b2tlbic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL25hdmlnYXRpb24tbGlzdC1pdGVtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdsaVtmZGItbmF2aWdhdGlvbi1saXN0LW92ZXJmbG93LWl0ZW1dJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtQb3J0YWxNb2R1bGUsIEFzeW5jUGlwZSwgTmdGb3JPZl0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFBvcG92ZXJTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGZGJOYXZpZ2F0aW9uTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogTmF2aWdhdGlvbkxpc3RPdmVyZmxvd0l0ZW1Db21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdmlnYXRpb24tbGlzdC1vdmVyZmxvdy1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb25MaXN0T3ZlcmZsb3dJdGVtQ29tcG9uZW50IGV4dGVuZHMgTmF2aWdhdGlvbkxpc3RJdGVtQ29tcG9uZW50IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KCdoaWRkZW5JdGVtcycpXG4gICAgc2V0IF9oaWRkZW5JdGVtcyhpdGVtczogRmRiTmF2aWdhdGlvbkxpc3RJdGVtQ29tcG9uZW50W10pIHtcbiAgICAgICAgdGhpcy5oaWRkZW5JdGVtcygpLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0uZGVzdHJveVBvcnRhbCgpKTtcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5jcmVhdGVQb3J0YWwoKSk7XG4gICAgICAgIHRoaXMuaGlkZGVuSXRlbXMuc2V0KGl0ZW1zKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NoaWxkcmVuVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgX3BvcnRhbDogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3ZlcnJpZGUgYWRkaXRpb25hbEJvZHlDbGFzcyA9ICdmZC1uYXZpZ2F0aW9uX19saXN0LWNvbnRhaW5lciBmZC1uYXZpZ2F0aW9uX19saXN0LWNvbnRhaW5lci0tbWVudSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmhpZGRlbkl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNQb3J0YWxDaGlsZHJlbi5zZXQoaXRlbXMubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImZkLW5hdmlnYXRpb25fX2l0ZW1cIlxuICAgIFtjbGFzcy5mZC1uYXZpZ2F0aW9uX19pdGVtLS1ncm91cF09XCJpc0dyb3VwKClcIlxuICAgIFtjbGFzcy5mZC1uYXZpZ2F0aW9uX19pdGVtLS1jaGlsZF09XCJwYXJlbnROYXZpZ2F0aW9uTGlzdENvbXBvbmVudC5wYXJlbnRMaXN0Q29tcG9uZW50Py5pc1BhcmVudEdyb3VwQ2hpbGQoKVwiXG4gICAgYXJpYS1jdXJyZW50PVwicGFnZVwiXG4gICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJjaGlsZHJlbkFjdGl2ZSgpICYmIG5hdmlnYXRpb25Db21wb25lbnQuaXNTbmFwcGVkKCkgPyB0cnVlIDogbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJleHBhbmRlZEF0dHIoKVwiXG4gICAgW2F0dHIuYXJpYS1sZXZlbF09XCIxXCJcbiAgICAjbmF2aWdhdGlvbkl0ZW1cbiAgICByb2xlPVwibWVudWl0ZW1cIlxuPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZGItbmF2aWdhdGlvbi1saW5rXVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuPCEtLSBEZXRhY2ggZWxlbWVudHMgZnJvbSB0aGVpciBob3N0cyBpbW1lZGlhdGVseSB0byBmaXggaXNzdWUgd2l0aCBmbGlja2VyaW5nIGVsZW1lbnRzLiAtLT5cbjx1bCBoaWRkZW4+XG4gICAgPG5nLXRlbXBsYXRlICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhpZGRlbkl0ZW1zKClcIiBbY2RrUG9ydGFsT3V0bGV0XT1cIml0ZW0uZG9tUG9ydGFsXCI+PC9uZy10ZW1wbGF0ZT5cbjwvdWw+XG48bmctdGVtcGxhdGUgI2NoaWxkcmVuVGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImZkLW5hdmlnYXRpb25fX2xpc3QtY29udGFpbmVyLS1tZW51XCI+XG4gICAgICAgIDx1bCBjbGFzcz1cImZkLW5hdmlnYXRpb25fX2xpc3QgZmQtbmF2aWdhdGlvbl9fbGlzdC0tcGFyZW50LWl0ZW1zIGZkLW1lbnVfX2xpc3RcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBoaWRkZW5JdGVtcygpXCIgW2Nka1BvcnRhbE91dGxldF09XCJpdGVtLmRvbVBvcnRhbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|