@design-system-rte/angular 1.2.1-rc5 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/dropdown/dropdown-item/dropdown-item.component.mjs +157 -14
- package/esm2022/lib/components/dropdown/dropdown-menu/dropdown-menu.component.mjs +71 -6
- package/esm2022/lib/components/dropdown/dropdown.directive.mjs +48 -39
- package/esm2022/lib/components/dropdown/dropdown.types.mjs +2 -0
- package/esm2022/lib/components/dropdown/index.mjs +1 -3
- package/esm2022/lib/components/icon/icon-map.mjs +112 -112
- package/esm2022/lib/components/modal/modal.component.mjs +3 -3
- package/esm2022/lib/components/segmented-control/segmented-control.component.mjs +5 -3
- package/esm2022/lib/components/side-nav/side-nav.component.mjs +1 -1
- package/esm2022/lib/components/stepper/stepper.component.mjs +3 -3
- package/esm2022/lib/components/tab/tab-item/tab-item.component.mjs +3 -3
- package/esm2022/lib/components/tab/tab.component.mjs +1 -1
- package/esm2022/lib/components/tag/tag.component.mjs +4 -3
- package/esm2022/public-api.mjs +9 -1
- package/fesm2022/design-system-rte-angular.mjs +431 -219
- package/fesm2022/design-system-rte-angular.mjs.map +1 -1
- package/lib/components/assistive-text/assistive-text.component.d.ts +1 -1
- package/lib/components/chip/chip.component.d.ts +1 -1
- package/lib/components/dropdown/dropdown-item/dropdown-item.component.d.ts +28 -16
- package/lib/components/dropdown/dropdown-menu/dropdown-menu.component.d.ts +14 -3
- package/lib/components/dropdown/dropdown.directive.d.ts +8 -4
- package/lib/components/dropdown/dropdown.types.d.ts +30 -0
- package/lib/components/dropdown/index.d.ts +1 -0
- package/lib/components/segmented-control/segmented-control.component.d.ts +3 -1
- package/lib/components/side-nav/side-nav.component.d.ts +2 -2
- package/lib/components/tab/tab.component.d.ts +1 -1
- package/lib/components/tag/tag.component.d.ts +2 -1
- package/lib/components/text-input/base-text-input/base-text-input.component.d.ts +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +8 -0
|
@@ -1,17 +1,34 @@
|
|
|
1
1
|
import { CommonModule } from "@angular/common";
|
|
2
|
-
import { Component, computed, input, output } from "@angular/core";
|
|
2
|
+
import { ChangeDetectorRef, Component, computed, ElementRef, inject, input, output, signal, } from "@angular/core";
|
|
3
3
|
import { shouldDisplayBadge } from "@design-system-rte/core/components/badge/badge.utils";
|
|
4
|
+
import { DropdownManager } from "@design-system-rte/core/components/dropdown/DropdownManager";
|
|
4
5
|
import { ENTER_KEY, SPACE_KEY } from "@design-system-rte/core/constants/keyboard/keyboard.constants";
|
|
5
6
|
import { BadgeComponent } from "../../badge/badge.component";
|
|
6
7
|
import { DividerComponent } from "../../divider/divider.component";
|
|
7
8
|
import { IconComponent } from "../../icon/icon.component";
|
|
9
|
+
import { focusDropdownFirstElement } from "../dropdown.utils";
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
11
|
import * as i1 from "@angular/common";
|
|
12
|
+
const SUB_MENU_CLOSE_DELAY_MS = 300;
|
|
10
13
|
export class DropdownItemComponent {
|
|
11
14
|
constructor() {
|
|
15
|
+
this.elementRef = inject(ElementRef);
|
|
16
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
12
17
|
this.item = input();
|
|
13
18
|
this.menuId = input();
|
|
14
19
|
this.itemEvent = output();
|
|
20
|
+
this.submenuRequest = output();
|
|
21
|
+
this.subMenuOpen = signal(false);
|
|
22
|
+
this.subMenuRef = null;
|
|
23
|
+
this.closeSubMenuTimeout = null;
|
|
24
|
+
this.subMenuSubscriptions = [];
|
|
25
|
+
this.dropdownManagerUnsubscribe = null;
|
|
26
|
+
this.hasChildren = computed(() => (this.item()?.children?.length ?? 0) > 0);
|
|
27
|
+
this.childDropdownId = computed(() => {
|
|
28
|
+
const menuId = this.menuId();
|
|
29
|
+
const label = this.item()?.label ?? "";
|
|
30
|
+
return menuId && label ? `${menuId}-${label.replace(/\s+/g, "")}` : "";
|
|
31
|
+
});
|
|
15
32
|
this.shouldDisplayBadge = computed(() => {
|
|
16
33
|
const item = this.item();
|
|
17
34
|
return shouldDisplayBadge({
|
|
@@ -21,6 +38,7 @@ export class DropdownItemComponent {
|
|
|
21
38
|
badgeIcon: item?.badgeIcon,
|
|
22
39
|
});
|
|
23
40
|
});
|
|
41
|
+
this.boundHandleSubMenuMouseEnter = () => this.handleSubMenuMouseEnter();
|
|
24
42
|
}
|
|
25
43
|
handleClick(event) {
|
|
26
44
|
if (this.item()?.disabled) {
|
|
@@ -28,31 +46,156 @@ export class DropdownItemComponent {
|
|
|
28
46
|
event.stopPropagation();
|
|
29
47
|
return;
|
|
30
48
|
}
|
|
49
|
+
if (this.hasChildren()) {
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
event.stopPropagation();
|
|
52
|
+
this.openSubMenu();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
31
55
|
this.itemEvent.emit({
|
|
32
56
|
event,
|
|
33
57
|
id: this.item()?.id || this.item()?.label || "",
|
|
58
|
+
item: this.item(),
|
|
34
59
|
});
|
|
35
60
|
}
|
|
36
61
|
handleKeyDown(event) {
|
|
37
62
|
event.preventDefault();
|
|
38
|
-
if ([SPACE_KEY, ENTER_KEY].includes(event.key)) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
63
|
+
if (this.item()?.link && [SPACE_KEY, ENTER_KEY].includes(event.key)) {
|
|
64
|
+
const link = event.target.closest("li")?.querySelector("a");
|
|
65
|
+
link?.click();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (this.hasChildren()) {
|
|
69
|
+
if (event.key === SPACE_KEY) {
|
|
70
|
+
this.openSubMenu();
|
|
71
|
+
const childId = this.childDropdownId();
|
|
72
|
+
if (childId) {
|
|
73
|
+
setTimeout(() => focusDropdownFirstElement(childId), 0);
|
|
74
|
+
}
|
|
48
75
|
}
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if ([SPACE_KEY, ENTER_KEY].includes(event.key)) {
|
|
79
|
+
this.itemEvent.emit({
|
|
80
|
+
event,
|
|
81
|
+
id: this.item()?.id || this.item()?.label || "",
|
|
82
|
+
item: this.item(),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
handleMouseEnter() {
|
|
87
|
+
if (this.item()?.disabled || !this.hasChildren())
|
|
88
|
+
return;
|
|
89
|
+
const menuId = this.menuId();
|
|
90
|
+
const childId = this.childDropdownId();
|
|
91
|
+
if (menuId) {
|
|
92
|
+
DropdownManager.closeSubMenus(menuId, childId);
|
|
93
|
+
this.openSubMenu();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
handleFocus() {
|
|
97
|
+
if (this.item()?.disabled || !this.hasChildren())
|
|
98
|
+
return;
|
|
99
|
+
const menuId = this.menuId();
|
|
100
|
+
const childId = this.childDropdownId();
|
|
101
|
+
if (menuId) {
|
|
102
|
+
DropdownManager.closeSubMenus(menuId, childId);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
handleMouseLeave() {
|
|
106
|
+
if (!this.hasChildren())
|
|
107
|
+
return;
|
|
108
|
+
this.scheduleCloseSubMenu();
|
|
109
|
+
}
|
|
110
|
+
handleSubMenuMouseEnter() {
|
|
111
|
+
this.cancelCloseSubMenu();
|
|
112
|
+
}
|
|
113
|
+
openSubMenuForKeyboard() {
|
|
114
|
+
this.openSubMenu();
|
|
115
|
+
const childId = this.childDropdownId();
|
|
116
|
+
if (childId) {
|
|
117
|
+
setTimeout(() => focusDropdownFirstElement(childId), 0);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
openSubMenu() {
|
|
121
|
+
if (this.subMenuRef)
|
|
122
|
+
return;
|
|
123
|
+
const children = this.item()?.children;
|
|
124
|
+
const childId = this.childDropdownId();
|
|
125
|
+
if (!children?.length || !childId)
|
|
126
|
+
return;
|
|
127
|
+
const triggerElement = this.elementRef.nativeElement.querySelector("li.rte-dropdown-item");
|
|
128
|
+
if (!triggerElement)
|
|
129
|
+
return;
|
|
130
|
+
DropdownManager.open(childId);
|
|
131
|
+
this.submenuRequest.emit({
|
|
132
|
+
children,
|
|
133
|
+
childId,
|
|
134
|
+
triggerElement,
|
|
135
|
+
onCreated: (result) => this.wireSubmenu(result),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
wireSubmenu(result) {
|
|
139
|
+
if (this.subMenuRef)
|
|
140
|
+
return;
|
|
141
|
+
this.subMenuRef = result.componentRef;
|
|
142
|
+
const hostElement = result.hostElement;
|
|
143
|
+
const childId = this.childDropdownId();
|
|
144
|
+
this.dropdownManagerUnsubscribe = DropdownManager.subscribe(childId ?? "", () => this.destroySubMenu());
|
|
145
|
+
const menuInstance = this.subMenuRef.instance;
|
|
146
|
+
const itemSub = menuInstance.itemEvent.subscribe((emittedItemEvent) => {
|
|
147
|
+
this.itemEvent.emit({ ...emittedItemEvent, item: emittedItemEvent.item });
|
|
148
|
+
});
|
|
149
|
+
const closeSub = menuInstance.closingMenu.subscribe(() => {
|
|
150
|
+
this.destroySubMenu();
|
|
151
|
+
});
|
|
152
|
+
this.subMenuSubscriptions.push(() => {
|
|
153
|
+
itemSub.unsubscribe();
|
|
154
|
+
closeSub.unsubscribe();
|
|
155
|
+
});
|
|
156
|
+
hostElement.addEventListener("mouseenter", this.boundHandleSubMenuMouseEnter);
|
|
157
|
+
this.subMenuOpen.set(true);
|
|
158
|
+
this.cdr.markForCheck();
|
|
159
|
+
}
|
|
160
|
+
scheduleCloseSubMenu() {
|
|
161
|
+
this.cancelCloseSubMenu();
|
|
162
|
+
this.closeSubMenuTimeout = setTimeout(() => {
|
|
163
|
+
this.closeSubMenuTimeout = null;
|
|
164
|
+
this.destroySubMenu();
|
|
165
|
+
}, SUB_MENU_CLOSE_DELAY_MS);
|
|
166
|
+
}
|
|
167
|
+
cancelCloseSubMenu() {
|
|
168
|
+
if (this.closeSubMenuTimeout) {
|
|
169
|
+
clearTimeout(this.closeSubMenuTimeout);
|
|
170
|
+
this.closeSubMenuTimeout = null;
|
|
49
171
|
}
|
|
50
172
|
}
|
|
173
|
+
destroySubMenu() {
|
|
174
|
+
this.cancelCloseSubMenu();
|
|
175
|
+
this.subMenuSubscriptions.forEach((unsubscribe) => unsubscribe());
|
|
176
|
+
this.subMenuSubscriptions = [];
|
|
177
|
+
if (this.subMenuRef) {
|
|
178
|
+
const hostElement = this.subMenuRef.location.nativeElement;
|
|
179
|
+
hostElement.removeEventListener("mouseenter", this.boundHandleSubMenuMouseEnter);
|
|
180
|
+
const childId = this.childDropdownId();
|
|
181
|
+
this.dropdownManagerUnsubscribe?.();
|
|
182
|
+
this.dropdownManagerUnsubscribe = null;
|
|
183
|
+
if (childId)
|
|
184
|
+
DropdownManager.close(childId);
|
|
185
|
+
this.subMenuRef.destroy();
|
|
186
|
+
this.subMenuRef = null;
|
|
187
|
+
}
|
|
188
|
+
this.subMenuOpen.set(false);
|
|
189
|
+
this.cdr.markForCheck();
|
|
190
|
+
}
|
|
191
|
+
ngOnDestroy() {
|
|
192
|
+
this.destroySubMenu();
|
|
193
|
+
}
|
|
51
194
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DropdownItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
52
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: DropdownItemComponent, isStandalone: true, selector: "rte-dropdown-item", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, menuId: { classPropertyName: "menuId", publicName: "menuId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemEvent: "itemEvent" }, ngImport: i0, template: "<ng-container>\n <li\n #itemRef\n class=\"rte-dropdown-item\"\n role=\"menuitem\"\n tabindex=\"0\"\n [attr.data-disabled]=\"item()?.disabled\"\n [attr.data-active]=\"item()?.selected\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n >\n <span *ngIf=\"item()?.hasIndent && !item()?.leftIcon\" style=\"width: 20px\"></span>\n <rte-icon *ngIf=\"item()?.leftIcon\" [name]=\"item()?.leftIcon ?? ''\" />\n <ng-container [ngSwitch]=\"!!item()?.link\">\n <a *ngSwitchCase=\"true\" style=\"flex: 2; text-decoration: none; color: inherit\" [href]=\"item()?.link\"\n >{{ item()?.label }}\n </a>\n <span *ngSwitchDefault style=\"flex: 2\">{{ item()?.label }}</span>\n </ng-container>\n <div *ngIf=\"item()?.trailingText\">{{ item()?.trailingText }}</div>\n <rte-badge\n *ngIf=\"shouldDisplayBadge()\"\n [badgeType]=\"item()?.badgeType!\"\n [badgeContent]=\"item()?.badgeContent!\"\n [count]=\"item()?.badgeCount\"\n [simpleBadge]=\"true\"\n [icon]=\"item()?.badgeIcon ?? ''\"\n [badgeSize]=\"item()?.badgeSize!\"\n ></rte-badge>\n </li>\n <div *ngIf=\"item()?.hasSeparator\" class=\"dropdown-divider\">\n <rte-divider />\n </div>\n</ng-container>\n", styles: [".rte-dropdown-item{font-family:Arial;font-size:14px;font-weight:400;line-height:20px;letter-spacing:0px;color:var(--content-secondary);display:flex;height:40px;padding:8px 12px;align-items:center;gap:12px;align-self:stretch;cursor:pointer;box-sizing:border-box}.rte-dropdown-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rte-dropdown-item:hover{background-color:var(--background-hover)}.rte-dropdown-item[data-disabled=true]{cursor:not-allowed;color:var(--content-disabled);background:var(--background-disabled)}.rte-dropdown-item[data-active=true]{background-color:var(--background-brand-inverse-pressed)}.rte-dropdown-item:focus-visible{outline:none;background-color:var(--background-hover)}.dropdown-divider{width:100%;padding:8px 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: IconComponent, selector: "rte-icon", inputs: ["name", "size", "color", "classes", "appearance"] }, { kind: "component", type: DividerComponent, selector: "rte-divider", inputs: ["orientation", "thickness", "appearance", "endPoint"] }, { kind: "component", type: BadgeComponent, selector: "rte-badge", inputs: ["badgeType", "badgeSize", "badgeContent", "count", "icon", "simpleBadge"] }] }); }
|
|
195
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: DropdownItemComponent, isStandalone: true, selector: "rte-dropdown-item", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, menuId: { classPropertyName: "menuId", publicName: "menuId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemEvent: "itemEvent", submenuRequest: "submenuRequest" }, ngImport: i0, template: "<ng-container>\n <li\n #itemRef\n class=\"rte-dropdown-item\"\n role=\"menuitem\"\n tabindex=\"0\"\n [attr.data-disabled]=\"item()?.disabled\"\n [attr.data-active]=\"hasChildren() ? subMenuOpen() : item()?.selected\"\n [attr.aria-haspopup]=\"hasChildren() ? 'menu' : null\"\n [attr.aria-expanded]=\"hasChildren() ? subMenuOpen() : null\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (mouseenter)=\"handleMouseEnter()\"\n (mouseleave)=\"handleMouseLeave()\"\n (focus)=\"handleFocus()\"\n >\n <span *ngIf=\"item()?.hasIndent && !item()?.leftIcon\" style=\"width: 20px\"></span>\n <rte-icon *ngIf=\"item()?.leftIcon\" [name]=\"item()?.leftIcon ?? ''\" />\n <ng-container [ngSwitch]=\"!!item()?.link\">\n <a *ngSwitchCase=\"true\" style=\"flex: 2; text-decoration: none; color: inherit\" [href]=\"item()?.link\"\n >{{ item()?.label }}\n </a>\n <span *ngSwitchDefault style=\"flex: 2\">{{ item()?.label }}</span>\n </ng-container>\n <rte-icon *ngIf=\"hasChildren()\" name=\"arrow-chevron-right\" />\n <div *ngIf=\"item()?.trailingText\">{{ item()?.trailingText }}</div>\n <rte-badge\n *ngIf=\"shouldDisplayBadge()\"\n [badgeType]=\"item()?.badgeType!\"\n [badgeContent]=\"item()?.badgeContent!\"\n [count]=\"item()?.badgeCount\"\n [simpleBadge]=\"true\"\n [icon]=\"item()?.badgeIcon ?? ''\"\n [badgeSize]=\"item()?.badgeSize!\"\n ></rte-badge>\n </li>\n <div *ngIf=\"item()?.hasSeparator\" class=\"dropdown-divider\">\n <rte-divider />\n </div>\n</ng-container>\n", styles: [".rte-dropdown-item{font-family:Arial;font-size:14px;font-weight:400;line-height:20px;letter-spacing:0px;color:var(--content-secondary);display:flex;height:40px;padding:8px 12px;align-items:center;gap:12px;align-self:stretch;cursor:pointer;box-sizing:border-box}.rte-dropdown-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rte-dropdown-item:hover{background-color:var(--background-hover)}.rte-dropdown-item[data-disabled=true]{cursor:not-allowed;color:var(--content-disabled);background:var(--background-disabled)}.rte-dropdown-item[data-active=true]{background-color:var(--background-brand-inverse-pressed)}.rte-dropdown-item:focus-visible{outline:none;background-color:var(--background-hover)}.dropdown-divider{width:100%;padding:8px 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: IconComponent, selector: "rte-icon", inputs: ["name", "size", "color", "classes", "appearance"] }, { kind: "component", type: DividerComponent, selector: "rte-divider", inputs: ["orientation", "thickness", "appearance", "endPoint"] }, { kind: "component", type: BadgeComponent, selector: "rte-badge", inputs: ["badgeType", "badgeSize", "badgeContent", "count", "icon", "simpleBadge"] }] }); }
|
|
53
196
|
}
|
|
54
197
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DropdownItemComponent, decorators: [{
|
|
55
198
|
type: Component,
|
|
56
|
-
args: [{ selector: "rte-dropdown-item", imports: [CommonModule, IconComponent, DividerComponent, BadgeComponent], standalone: true, template: "<ng-container>\n <li\n #itemRef\n class=\"rte-dropdown-item\"\n role=\"menuitem\"\n tabindex=\"0\"\n [attr.data-disabled]=\"item()?.disabled\"\n [attr.data-active]=\"item()?.selected\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n >\n <span *ngIf=\"item()?.hasIndent && !item()?.leftIcon\" style=\"width: 20px\"></span>\n <rte-icon *ngIf=\"item()?.leftIcon\" [name]=\"item()?.leftIcon ?? ''\" />\n <ng-container [ngSwitch]=\"!!item()?.link\">\n <a *ngSwitchCase=\"true\" style=\"flex: 2; text-decoration: none; color: inherit\" [href]=\"item()?.link\"\n >{{ item()?.label }}\n </a>\n <span *ngSwitchDefault style=\"flex: 2\">{{ item()?.label }}</span>\n </ng-container>\n <div *ngIf=\"item()?.trailingText\">{{ item()?.trailingText }}</div>\n <rte-badge\n *ngIf=\"shouldDisplayBadge()\"\n [badgeType]=\"item()?.badgeType!\"\n [badgeContent]=\"item()?.badgeContent!\"\n [count]=\"item()?.badgeCount\"\n [simpleBadge]=\"true\"\n [icon]=\"item()?.badgeIcon ?? ''\"\n [badgeSize]=\"item()?.badgeSize!\"\n ></rte-badge>\n </li>\n <div *ngIf=\"item()?.hasSeparator\" class=\"dropdown-divider\">\n <rte-divider />\n </div>\n</ng-container>\n", styles: [".rte-dropdown-item{font-family:Arial;font-size:14px;font-weight:400;line-height:20px;letter-spacing:0px;color:var(--content-secondary);display:flex;height:40px;padding:8px 12px;align-items:center;gap:12px;align-self:stretch;cursor:pointer;box-sizing:border-box}.rte-dropdown-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rte-dropdown-item:hover{background-color:var(--background-hover)}.rte-dropdown-item[data-disabled=true]{cursor:not-allowed;color:var(--content-disabled);background:var(--background-disabled)}.rte-dropdown-item[data-active=true]{background-color:var(--background-brand-inverse-pressed)}.rte-dropdown-item:focus-visible{outline:none;background-color:var(--background-hover)}.dropdown-divider{width:100%;padding:8px 0}\n"] }]
|
|
199
|
+
args: [{ selector: "rte-dropdown-item", imports: [CommonModule, IconComponent, DividerComponent, BadgeComponent], standalone: true, template: "<ng-container>\n <li\n #itemRef\n class=\"rte-dropdown-item\"\n role=\"menuitem\"\n tabindex=\"0\"\n [attr.data-disabled]=\"item()?.disabled\"\n [attr.data-active]=\"hasChildren() ? subMenuOpen() : item()?.selected\"\n [attr.aria-haspopup]=\"hasChildren() ? 'menu' : null\"\n [attr.aria-expanded]=\"hasChildren() ? subMenuOpen() : null\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (mouseenter)=\"handleMouseEnter()\"\n (mouseleave)=\"handleMouseLeave()\"\n (focus)=\"handleFocus()\"\n >\n <span *ngIf=\"item()?.hasIndent && !item()?.leftIcon\" style=\"width: 20px\"></span>\n <rte-icon *ngIf=\"item()?.leftIcon\" [name]=\"item()?.leftIcon ?? ''\" />\n <ng-container [ngSwitch]=\"!!item()?.link\">\n <a *ngSwitchCase=\"true\" style=\"flex: 2; text-decoration: none; color: inherit\" [href]=\"item()?.link\"\n >{{ item()?.label }}\n </a>\n <span *ngSwitchDefault style=\"flex: 2\">{{ item()?.label }}</span>\n </ng-container>\n <rte-icon *ngIf=\"hasChildren()\" name=\"arrow-chevron-right\" />\n <div *ngIf=\"item()?.trailingText\">{{ item()?.trailingText }}</div>\n <rte-badge\n *ngIf=\"shouldDisplayBadge()\"\n [badgeType]=\"item()?.badgeType!\"\n [badgeContent]=\"item()?.badgeContent!\"\n [count]=\"item()?.badgeCount\"\n [simpleBadge]=\"true\"\n [icon]=\"item()?.badgeIcon ?? ''\"\n [badgeSize]=\"item()?.badgeSize!\"\n ></rte-badge>\n </li>\n <div *ngIf=\"item()?.hasSeparator\" class=\"dropdown-divider\">\n <rte-divider />\n </div>\n</ng-container>\n", styles: [".rte-dropdown-item{font-family:Arial;font-size:14px;font-weight:400;line-height:20px;letter-spacing:0px;color:var(--content-secondary);display:flex;height:40px;padding:8px 12px;align-items:center;gap:12px;align-self:stretch;cursor:pointer;box-sizing:border-box}.rte-dropdown-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rte-dropdown-item:hover{background-color:var(--background-hover)}.rte-dropdown-item[data-disabled=true]{cursor:not-allowed;color:var(--content-disabled);background:var(--background-disabled)}.rte-dropdown-item[data-active=true]{background-color:var(--background-brand-inverse-pressed)}.rte-dropdown-item:focus-visible{outline:none;background-color:var(--background-hover)}.dropdown-divider{width:100%;padding:8px 0}\n"] }]
|
|
57
200
|
}] });
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1ydGUtbGliL3NyYy9saWIvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi1pdGVtL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtcnRlLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24taXRlbS9kcm9wZG93bi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBZ0IsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUUxRixPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBRXJHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQXNCMUQsTUFBTSxPQUFPLHFCQUFxQjtJQVBsQztRQVFXLFNBQUksR0FBRyxLQUFLLEVBQXNCLENBQUM7UUFDbkMsV0FBTSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3pCLGNBQVMsR0FBRyxNQUFNLEVBQWdDLENBQUM7UUFFbkQsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMxQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsT0FBTyxrQkFBa0IsQ0FBQztnQkFDeEIsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUztnQkFDNUIsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZO2dCQUNoQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVU7Z0JBQzVCLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUzthQUMzQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztLQTZCSjtJQTNCQyxXQUFXLENBQUMsS0FBWTtRQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbEIsS0FBSztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtTQUNoRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEdBQUksS0FBSyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2hCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDbEIsS0FBSztvQkFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7aUJBQ2hELENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0F6Q1UscUJBQXFCO21HQUFyQixxQkFBcUIsOFdDOUJsQywwdkNBa0NBLGt6QkRUWSxZQUFZLCtZQUFFLGFBQWEsaUhBQUUsZ0JBQWdCLHdIQUFFLGNBQWM7OzRGQUs1RCxxQkFBcUI7a0JBUGpDLFNBQVM7K0JBQ0UsbUJBQW1CLFdBQ3BCLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsY0FDNUQsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIEV2ZW50RW1pdHRlciwgaW5wdXQsIG91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBzaG91bGREaXNwbGF5QmFkZ2UgfSBmcm9tIFwiQGRlc2lnbi1zeXN0ZW0tcnRlL2NvcmUvY29tcG9uZW50cy9iYWRnZS9iYWRnZS51dGlsc1wiO1xuaW1wb3J0IHsgRHJvcGRvd25JdGVtUHJvcHMgfSBmcm9tIFwiQGRlc2lnbi1zeXN0ZW0tcnRlL2NvcmUvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IEVOVEVSX0tFWSwgU1BBQ0VfS0VZIH0gZnJvbSBcIkBkZXNpZ24tc3lzdGVtLXJ0ZS9jb3JlL2NvbnN0YW50cy9rZXlib2FyZC9rZXlib2FyZC5jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQmFkZ2VDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vYmFkZ2UvYmFkZ2UuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEaXZpZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2RpdmlkZXIvZGl2aWRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSXRlbUNvbmZpZyBleHRlbmRzIE9taXQ8RHJvcGRvd25JdGVtUHJvcHMsIFwib25DbGlja1wiPiB7XG4gIGlkPzogc3RyaW5nO1xuICBzZWxlY3RlZD86IGJvb2xlYW47XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxlZnRJY29uPzogc3RyaW5nO1xuICB0cmFpbGluZ1RleHQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaGFzU2VwYXJhdG9yPzogYm9vbGVhbjtcbiAgaGFzSW5kZW50PzogYm9vbGVhbjtcbiAgbGluaz86IHN0cmluZztcbiAgY2xpY2s/OiBFdmVudEVtaXR0ZXI8RXZlbnQ+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwicnRlLWRyb3Bkb3duLWl0ZW1cIixcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgRGl2aWRlckNvbXBvbmVudCwgQmFkZ2VDb21wb25lbnRdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogXCIuL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmw6IFwiLi9kcm9wZG93bi1pdGVtLmNvbXBvbmVudC5zY3NzXCIsXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duSXRlbUNvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGl0ZW0gPSBpbnB1dDxEcm9wZG93bkl0ZW1Db25maWc+KCk7XG4gIHJlYWRvbmx5IG1lbnVJZCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaXRlbUV2ZW50ID0gb3V0cHV0PHsgZXZlbnQ6IEV2ZW50OyBpZDogc3RyaW5nIH0+KCk7XG5cbiAgcmVhZG9ubHkgc2hvdWxkRGlzcGxheUJhZGdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW0oKTtcbiAgICByZXR1cm4gc2hvdWxkRGlzcGxheUJhZGdlKHtcbiAgICAgIHNob3dCYWRnZTogISFpdGVtPy5zaG93QmFkZ2UsXG4gICAgICBiYWRnZUNvbnRlbnQ6IGl0ZW0/LmJhZGdlQ29udGVudCxcbiAgICAgIGJhZGdlQ291bnQ6IGl0ZW0/LmJhZGdlQ291bnQsXG4gICAgICBiYWRnZUljb246IGl0ZW0/LmJhZGdlSWNvbixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaGFuZGxlQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXRlbSgpPy5kaXNhYmxlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLml0ZW1FdmVudC5lbWl0KHtcbiAgICAgIGV2ZW50LFxuICAgICAgaWQ6IHRoaXMuaXRlbSgpPy5pZCB8fCB0aGlzLml0ZW0oKT8ubGFiZWwgfHwgXCJcIixcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKFtTUEFDRV9LRVksIEVOVEVSX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgaWYgKHRoaXMuaXRlbSgpPy5saW5rKSB7XG4gICAgICAgIGNvbnN0IGxpbmsgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFwibGlcIik/LnF1ZXJ5U2VsZWN0b3IoXCJhXCIpO1xuICAgICAgICBsaW5rPy5jbGljaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pdGVtRXZlbnQuZW1pdCh7XG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgaWQ6IHRoaXMuaXRlbSgpPy5pZCB8fCB0aGlzLml0ZW0oKT8ubGFiZWwgfHwgXCJcIixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICA8bGlcbiAgICAjaXRlbVJlZlxuICAgIGNsYXNzPVwicnRlLWRyb3Bkb3duLWl0ZW1cIlxuICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICBbYXR0ci5kYXRhLWRpc2FibGVkXT1cIml0ZW0oKT8uZGlzYWJsZWRcIlxuICAgIFthdHRyLmRhdGEtYWN0aXZlXT1cIml0ZW0oKT8uc2VsZWN0ZWRcIlxuICAgIChjbGljayk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIlxuICA+XG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtKCk/Lmhhc0luZGVudCAmJiAhaXRlbSgpPy5sZWZ0SWNvblwiIHN0eWxlPVwid2lkdGg6IDIwcHhcIj48L3NwYW4+XG4gICAgPHJ0ZS1pY29uICpuZ0lmPVwiaXRlbSgpPy5sZWZ0SWNvblwiIFtuYW1lXT1cIml0ZW0oKT8ubGVmdEljb24gPz8gJydcIiAvPlxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIiEhaXRlbSgpPy5saW5rXCI+XG4gICAgICA8YSAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiIHN0eWxlPVwiZmxleDogMjsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBjb2xvcjogaW5oZXJpdFwiIFtocmVmXT1cIml0ZW0oKT8ubGlua1wiXG4gICAgICAgID57eyBpdGVtKCk/LmxhYmVsIH19XG4gICAgICA8L2E+XG4gICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IHN0eWxlPVwiZmxleDogMlwiPnt7IGl0ZW0oKT8ubGFiZWwgfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiAqbmdJZj1cIml0ZW0oKT8udHJhaWxpbmdUZXh0XCI+e3sgaXRlbSgpPy50cmFpbGluZ1RleHQgfX08L2Rpdj5cbiAgICA8cnRlLWJhZGdlXG4gICAgICAqbmdJZj1cInNob3VsZERpc3BsYXlCYWRnZSgpXCJcbiAgICAgIFtiYWRnZVR5cGVdPVwiaXRlbSgpPy5iYWRnZVR5cGUhXCJcbiAgICAgIFtiYWRnZUNvbnRlbnRdPVwiaXRlbSgpPy5iYWRnZUNvbnRlbnQhXCJcbiAgICAgIFtjb3VudF09XCJpdGVtKCk/LmJhZGdlQ291bnRcIlxuICAgICAgW3NpbXBsZUJhZGdlXT1cInRydWVcIlxuICAgICAgW2ljb25dPVwiaXRlbSgpPy5iYWRnZUljb24gPz8gJydcIlxuICAgICAgW2JhZGdlU2l6ZV09XCJpdGVtKCk/LmJhZGdlU2l6ZSFcIlxuICAgID48L3J0ZS1iYWRnZT5cbiAgPC9saT5cbiAgPGRpdiAqbmdJZj1cIml0ZW0oKT8uaGFzU2VwYXJhdG9yXCIgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+XG4gICAgPHJ0ZS1kaXZpZGVyIC8+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1ydGUtbGliL3NyYy9saWIvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi1pdGVtL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtcnRlLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24taXRlbS9kcm9wZG93bi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUVyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFJOUQsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFTcEMsTUFBTSxPQUFPLHFCQUFxQjtJQVBsQztRQVFXLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENB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bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBzaG91bGREaXNwbGF5QmFkZ2UgfSBmcm9tIFwiQGRlc2lnbi1zeXN0ZW0tcnRlL2NvcmUvY29tcG9uZW50cy9iYWRnZS9iYWRnZS51dGlsc1wiO1xuaW1wb3J0IHsgRHJvcGRvd25NYW5hZ2VyIH0gZnJvbSBcIkBkZXNpZ24tc3lzdGVtLXJ0ZS9jb3JlL2NvbXBvbmVudHMvZHJvcGRvd24vRHJvcGRvd25NYW5hZ2VyXCI7XG5pbXBvcnQgeyBFTlRFUl9LRVksIFNQQUNFX0tFWSB9IGZyb20gXCJAZGVzaWduLXN5c3RlbS1ydGUvY29yZS9jb25zdGFudHMva2V5Ym9hcmQva2V5Ym9hcmQuY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IEJhZGdlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2JhZGdlL2JhZGdlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGl2aWRlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9kaXZpZGVyL2RpdmlkZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2ljb24vaWNvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IERyb3Bkb3duSXRlbUNvbmZpZywgU3VibWVudUNyZWF0ZWRSZXN1bHQsIFN1Ym1lbnVSZXF1ZXN0RXZlbnQgfSBmcm9tIFwiLi4vZHJvcGRvd24udHlwZXNcIjtcbmltcG9ydCB7IGZvY3VzRHJvcGRvd25GaXJzdEVsZW1lbnQgfSBmcm9tIFwiLi4vZHJvcGRvd24udXRpbHNcIjtcblxuZXhwb3J0IHR5cGUgeyBEcm9wZG93bkl0ZW1Db25maWcgfTtcblxuY29uc3QgU1VCX01FTlVfQ0xPU0VfREVMQVlfTVMgPSAzMDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJydGUtZHJvcGRvd24taXRlbVwiLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJY29uQ29tcG9uZW50LCBEaXZpZGVyQ29tcG9uZW50LCBCYWRnZUNvbXBvbmVudF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZHJvcGRvd24taXRlbS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybDogXCIuL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50LnNjc3NcIixcbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25JdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHJlYWRvbmx5IGl0ZW0gPSBpbnB1dDxEcm9wZG93bkl0ZW1Db25maWc+KCk7XG4gIHJlYWRvbmx5IG1lbnVJZCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaXRlbUV2ZW50ID0gb3V0cHV0PHsgZXZlbnQ6IEV2ZW50OyBpZDogc3RyaW5nOyBpdGVtPzogRHJvcGRvd25JdGVtQ29uZmlnIH0+KCk7XG4gIHJlYWRvbmx5IHN1Ym1lbnVSZXF1ZXN0ID0gb3V0cHV0PFN1Ym1lbnVSZXF1ZXN0RXZlbnQ+KCk7XG5cbiAgcmVhZG9ubHkgc3ViTWVudU9wZW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgc3ViTWVudVJlZjogaW1wb3J0KFwiQGFuZ3VsYXIvY29yZVwiKS5Db21wb25lbnRSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjbG9zZVN1Yk1lbnVUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1Yk1lbnVTdWJzY3JpcHRpb25zOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuICBwcml2YXRlIGRyb3Bkb3duTWFuYWdlclVuc3Vic2NyaWJlOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICByZWFkb25seSBoYXNDaGlsZHJlbiA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLml0ZW0oKT8uY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA+IDApO1xuICByZWFkb25seSBjaGlsZERyb3Bkb3duSWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWVudUlkID0gdGhpcy5tZW51SWQoKTtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuaXRlbSgpPy5sYWJlbCA/PyBcIlwiO1xuICAgIHJldHVybiBtZW51SWQgJiYgbGFiZWwgPyBgJHttZW51SWR9LSR7bGFiZWwucmVwbGFjZSgvXFxzKy9nLCBcIlwiKX1gIDogXCJcIjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2hvdWxkRGlzcGxheUJhZGdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW0oKTtcbiAgICByZXR1cm4gc2hvdWxkRGlzcGxheUJhZGdlKHtcbiAgICAgIHNob3dCYWRnZTogISFpdGVtPy5zaG93QmFkZ2UsXG4gICAgICBiYWRnZUNvbnRlbnQ6IGl0ZW0/LmJhZGdlQ29udGVudCxcbiAgICAgIGJhZGdlQ291bnQ6IGl0ZW0/LmJhZGdlQ291bnQsXG4gICAgICBiYWRnZUljb246IGl0ZW0/LmJhZGdlSWNvbixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaGFuZGxlQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXRlbSgpPy5kaXNhYmxlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNDaGlsZHJlbigpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLm9wZW5TdWJNZW51KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXRlbUV2ZW50LmVtaXQoe1xuICAgICAgZXZlbnQsXG4gICAgICBpZDogdGhpcy5pdGVtKCk/LmlkIHx8IHRoaXMuaXRlbSgpPy5sYWJlbCB8fCBcIlwiLFxuICAgICAgaXRlbTogdGhpcy5pdGVtKCksXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLml0ZW0oKT8ubGluayAmJiBbU1BBQ0VfS0VZLCBFTlRFUl9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIGNvbnN0IGxpbmsgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFwibGlcIik/LnF1ZXJ5U2VsZWN0b3IoXCJhXCIpO1xuICAgICAgbGluaz8uY2xpY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNDaGlsZHJlbigpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBTUEFDRV9LRVkpIHtcbiAgICAgICAgdGhpcy5vcGVuU3ViTWVudSgpO1xuICAgICAgICBjb25zdCBjaGlsZElkID0gdGhpcy5jaGlsZERyb3Bkb3duSWQoKTtcbiAgICAgICAgaWYgKGNoaWxkSWQpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGZvY3VzRHJvcGRvd25GaXJzdEVsZW1lbnQoY2hpbGRJZCksIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFtTUEFDRV9LRVksIEVOVEVSX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgdGhpcy5pdGVtRXZlbnQuZW1pdCh7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICBpZDogdGhpcy5pdGVtKCk/LmlkIHx8IHRoaXMuaXRlbSgpPy5sYWJlbCB8fCBcIlwiLFxuICAgICAgICBpdGVtOiB0aGlzLml0ZW0oKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU1vdXNlRW50ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXRlbSgpPy5kaXNhYmxlZCB8fCAhdGhpcy5oYXNDaGlsZHJlbigpKSByZXR1cm47XG4gICAgY29uc3QgbWVudUlkID0gdGhpcy5tZW51SWQoKTtcbiAgICBjb25zdCBjaGlsZElkID0gdGhpcy5jaGlsZERyb3Bkb3duSWQoKTtcbiAgICBpZiAobWVudUlkKSB7XG4gICAgICBEcm9wZG93bk1hbmFnZXIuY2xvc2VTdWJNZW51cyhtZW51SWQsIGNoaWxkSWQpO1xuICAgICAgdGhpcy5vcGVuU3ViTWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZvY3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLml0ZW0oKT8uZGlzYWJsZWQgfHwgIXRoaXMuaGFzQ2hpbGRyZW4oKSkgcmV0dXJuO1xuICAgIGNvbnN0IG1lbnVJZCA9IHRoaXMubWVudUlkKCk7XG4gICAgY29uc3QgY2hpbGRJZCA9IHRoaXMuY2hpbGREcm9wZG93bklkKCk7XG4gICAgaWYgKG1lbnVJZCkge1xuICAgICAgRHJvcGRvd25NYW5hZ2VyLmNsb3NlU3ViTWVudXMobWVudUlkLCBjaGlsZElkKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNDaGlsZHJlbigpKSByZXR1cm47XG4gICAgdGhpcy5zY2hlZHVsZUNsb3NlU3ViTWVudSgpO1xuICB9XG5cbiAgaGFuZGxlU3ViTWVudU1vdXNlRW50ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxDbG9zZVN1Yk1lbnUoKTtcbiAgfVxuXG4gIG9wZW5TdWJNZW51Rm9yS2V5Ym9hcmQoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuU3ViTWVudSgpO1xuICAgIGNvbnN0IGNoaWxkSWQgPSB0aGlzLmNoaWxkRHJvcGRvd25JZCgpO1xuICAgIGlmIChjaGlsZElkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGZvY3VzRHJvcGRvd25GaXJzdEVsZW1lbnQoY2hpbGRJZCksIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlblN1Yk1lbnUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3ViTWVudVJlZikgcmV0dXJuO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5pdGVtKCk/LmNoaWxkcmVuO1xuICAgIGNvbnN0IGNoaWxkSWQgPSB0aGlzLmNoaWxkRHJvcGRvd25JZCgpO1xuICAgIGlmICghY2hpbGRyZW4/Lmxlbmd0aCB8fCAhY2hpbGRJZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdHJpZ2dlckVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwibGkucnRlLWRyb3Bkb3duLWl0ZW1cIikgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghdHJpZ2dlckVsZW1lbnQpIHJldHVybjtcblxuICAgIERyb3Bkb3duTWFuYWdlci5vcGVuKGNoaWxkSWQpO1xuXG4gICAgdGhpcy5zdWJtZW51UmVxdWVzdC5lbWl0KHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2hpbGRJZCxcbiAgICAgIHRyaWdnZXJFbGVtZW50LFxuICAgICAgb25DcmVhdGVkOiAocmVzdWx0KSA9PiB0aGlzLndpcmVTdWJtZW51KHJlc3VsdCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHdpcmVTdWJtZW51KHJlc3VsdDogU3VibWVudUNyZWF0ZWRSZXN1bHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJNZW51UmVmKSByZXR1cm47XG4gICAgdGhpcy5zdWJNZW51UmVmID0gcmVzdWx0LmNvbXBvbmVudFJlZjtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IHJlc3VsdC5ob3N0RWxlbWVudDtcbiAgICBjb25zdCBjaGlsZElkID0gdGhpcy5jaGlsZERyb3Bkb3duSWQoKTtcblxuICAgIHRoaXMuZHJvcGRvd25NYW5hZ2VyVW5zdWJzY3JpYmUgPSBEcm9wZG93bk1hbmFnZXIuc3Vic2NyaWJlKGNoaWxkSWQgPz8gXCJcIiwgKCkgPT4gdGhpcy5kZXN0cm95U3ViTWVudSgpKTtcblxuICAgIGNvbnN0IG1lbnVJbnN0YW5jZSA9IHRoaXMuc3ViTWVudVJlZi5pbnN0YW5jZSBhcyB7XG4gICAgICBpdGVtRXZlbnQ6IHtcbiAgICAgICAgc3Vic2NyaWJlOiAoY2FsbGJhY2s6IChldmVudDogeyBldmVudDogRXZlbnQ7IGlkOiBzdHJpbmc7IGl0ZW0/OiBEcm9wZG93bkl0ZW1Db25maWcgfSkgPT4gdm9pZCkgPT4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB2b2lkO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNsb3NpbmdNZW51OiB7IHN1YnNjcmliZTogKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7IHVuc3Vic2NyaWJlOiAoKSA9PiB2b2lkIH0gfTtcbiAgICB9O1xuICAgIGNvbnN0IGl0ZW1TdWIgPSBtZW51SW5zdGFuY2UuaXRlbUV2ZW50LnN1YnNjcmliZShcbiAgICAgIChlbWl0dGVkSXRlbUV2ZW50OiB7IGV2ZW50OiBFdmVudDsgaWQ6IHN0cmluZzsgaXRlbT86IERyb3Bkb3duSXRlbUNvbmZpZyB9KSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbUV2ZW50LmVtaXQoeyAuLi5lbWl0dGVkSXRlbUV2ZW50LCBpdGVtOiBlbWl0dGVkSXRlbUV2ZW50Lml0ZW0gfSk7XG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc3QgY2xvc2VTdWIgPSBtZW51SW5zdGFuY2UuY2xvc2luZ01lbnUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZGVzdHJveVN1Yk1lbnUoKTtcbiAgICB9KTtcbiAgICB0aGlzLnN1Yk1lbnVTdWJzY3JpcHRpb25zLnB1c2goKCkgPT4ge1xuICAgICAgaXRlbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgY2xvc2VTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIGhvc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHRoaXMuYm91bmRIYW5kbGVTdWJNZW51TW91c2VFbnRlcik7XG5cbiAgICB0aGlzLnN1Yk1lbnVPcGVuLnNldCh0cnVlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVDbG9zZVN1Yk1lbnUoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxDbG9zZVN1Yk1lbnUoKTtcbiAgICB0aGlzLmNsb3NlU3ViTWVudVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2xvc2VTdWJNZW51VGltZW91dCA9IG51bGw7XG4gICAgICB0aGlzLmRlc3Ryb3lTdWJNZW51KCk7XG4gICAgfSwgU1VCX01FTlVfQ0xPU0VfREVMQVlfTVMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5jZWxDbG9zZVN1Yk1lbnUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VTdWJNZW51VGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VTdWJNZW51VGltZW91dCk7XG4gICAgICB0aGlzLmNsb3NlU3ViTWVudVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgYm91bmRIYW5kbGVTdWJNZW51TW91c2VFbnRlciA9ICgpOiB2b2lkID0+IHRoaXMuaGFuZGxlU3ViTWVudU1vdXNlRW50ZXIoKTtcblxuICBwcml2YXRlIGRlc3Ryb3lTdWJNZW51KCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsQ2xvc2VTdWJNZW51KCk7XG4gICAgdGhpcy5zdWJNZW51U3Vic2NyaXB0aW9ucy5mb3JFYWNoKCh1bnN1YnNjcmliZSkgPT4gdW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5zdWJNZW51U3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIGlmICh0aGlzLnN1Yk1lbnVSZWYpIHtcbiAgICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5zdWJNZW51UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBob3N0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCB0aGlzLmJvdW5kSGFuZGxlU3ViTWVudU1vdXNlRW50ZXIpO1xuICAgICAgY29uc3QgY2hpbGRJZCA9IHRoaXMuY2hpbGREcm9wZG93bklkKCk7XG4gICAgICB0aGlzLmRyb3Bkb3duTWFuYWdlclVuc3Vic2NyaWJlPy4oKTtcbiAgICAgIHRoaXMuZHJvcGRvd25NYW5hZ2VyVW5zdWJzY3JpYmUgPSBudWxsO1xuICAgICAgaWYgKGNoaWxkSWQpIERyb3Bkb3duTWFuYWdlci5jbG9zZShjaGlsZElkKTtcbiAgICAgIHRoaXMuc3ViTWVudVJlZi5kZXN0cm95KCk7XG4gICAgICB0aGlzLnN1Yk1lbnVSZWYgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnN1Yk1lbnVPcGVuLnNldChmYWxzZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lTdWJNZW51KCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXI+XG4gIDxsaVxuICAgICNpdGVtUmVmXG4gICAgY2xhc3M9XCJydGUtZHJvcGRvd24taXRlbVwiXG4gICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIFthdHRyLmRhdGEtZGlzYWJsZWRdPVwiaXRlbSgpPy5kaXNhYmxlZFwiXG4gICAgW2F0dHIuZGF0YS1hY3RpdmVdPVwiaGFzQ2hpbGRyZW4oKSA/IHN1Yk1lbnVPcGVuKCkgOiBpdGVtKCk/LnNlbGVjdGVkXCJcbiAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cImhhc0NoaWxkcmVuKCkgPyAnbWVudScgOiBudWxsXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImhhc0NoaWxkcmVuKCkgPyBzdWJNZW51T3BlbigpIDogbnVsbFwiXG4gICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cImhhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlTW91c2VFbnRlcigpXCJcbiAgICAobW91c2VsZWF2ZSk9XCJoYW5kbGVNb3VzZUxlYXZlKClcIlxuICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1cygpXCJcbiAgPlxuICAgIDxzcGFuICpuZ0lmPVwiaXRlbSgpPy5oYXNJbmRlbnQgJiYgIWl0ZW0oKT8ubGVmdEljb25cIiBzdHlsZT1cIndpZHRoOiAyMHB4XCI+PC9zcGFuPlxuICAgIDxydGUtaWNvbiAqbmdJZj1cIml0ZW0oKT8ubGVmdEljb25cIiBbbmFtZV09XCJpdGVtKCk/LmxlZnRJY29uID8/ICcnXCIgLz5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCIhIWl0ZW0oKT8ubGlua1wiPlxuICAgICAgPGEgKm5nU3dpdGNoQ2FzZT1cInRydWVcIiBzdHlsZT1cImZsZXg6IDI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY29sb3I6IGluaGVyaXRcIiBbaHJlZl09XCJpdGVtKCk/LmxpbmtcIlxuICAgICAgICA+e3sgaXRlbSgpPy5sYWJlbCB9fVxuICAgICAgPC9hPlxuICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdCBzdHlsZT1cImZsZXg6IDJcIj57eyBpdGVtKCk/LmxhYmVsIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxydGUtaWNvbiAqbmdJZj1cImhhc0NoaWxkcmVuKClcIiBuYW1lPVwiYXJyb3ctY2hldnJvbi1yaWdodFwiIC8+XG4gICAgPGRpdiAqbmdJZj1cIml0ZW0oKT8udHJhaWxpbmdUZXh0XCI+e3sgaXRlbSgpPy50cmFpbGluZ1RleHQgfX08L2Rpdj5cbiAgICA8cnRlLWJhZGdlXG4gICAgICAqbmdJZj1cInNob3VsZERpc3BsYXlCYWRnZSgpXCJcbiAgICAgIFtiYWRnZVR5cGVdPVwiaXRlbSgpPy5iYWRnZVR5cGUhXCJcbiAgICAgIFtiYWRnZUNvbnRlbnRdPVwiaXRlbSgpPy5iYWRnZUNvbnRlbnQhXCJcbiAgICAgIFtjb3VudF09XCJpdGVtKCk/LmJhZGdlQ291bnRcIlxuICAgICAgW3NpbXBsZUJhZGdlXT1cInRydWVcIlxuICAgICAgW2ljb25dPVwiaXRlbSgpPy5iYWRnZUljb24gPz8gJydcIlxuICAgICAgW2JhZGdlU2l6ZV09XCJpdGVtKCk/LmJhZGdlU2l6ZSFcIlxuICAgID48L3J0ZS1iYWRnZT5cbiAgPC9saT5cbiAgPGRpdiAqbmdJZj1cIml0ZW0oKT8uaGFzU2VwYXJhdG9yXCIgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+XG4gICAgPHJ0ZS1kaXZpZGVyIC8+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { CommonModule } from "@angular/common";
|
|
2
|
-
import { Component, computed, contentChild, ElementRef, HostListener, inject, input, output, viewChild, } from "@angular/core";
|
|
3
|
-
import {
|
|
2
|
+
import { Component, computed, contentChild, ElementRef, HostListener, inject, input, output, ViewContainerRef, viewChild, viewChildren, } from "@angular/core";
|
|
3
|
+
import { DropdownManager } from "@design-system-rte/core/components/dropdown/DropdownManager";
|
|
4
|
+
import { getAutoAlignment, getAutoPlacementDropdown, getCoordinates, } from "@design-system-rte/core/components/utils/auto-placement";
|
|
5
|
+
import { ARROW_DOWN_KEY, ARROW_UP_KEY, ESCAPE_KEY, TAB_KEY, } from "@design-system-rte/core/constants/keyboard/keyboard.constants";
|
|
6
|
+
import { logError, logWarn } from "@design-system-rte/core/utils/log-handlers";
|
|
4
7
|
import { DropdownService } from "../../../services/dropdown.service";
|
|
8
|
+
import { OverlayService } from "../../../services/overlay.service";
|
|
5
9
|
import { DividerComponent } from "../../divider/divider.component";
|
|
6
10
|
import { DropdownItemComponent } from "../dropdown-item/dropdown-item.component";
|
|
11
|
+
import { focusParentDropdownFirstElement } from "../dropdown.utils";
|
|
7
12
|
import { DropdownMenuFooterDirective } from "./dropdown-menu-footer.directive";
|
|
8
13
|
import { DropdownMenuHeaderDirective } from "./dropdown-menu-header.directive";
|
|
9
14
|
import * as i0 from "@angular/core";
|
|
@@ -11,7 +16,10 @@ import * as i1 from "@angular/common";
|
|
|
11
16
|
export class DropdownMenuComponent {
|
|
12
17
|
constructor() {
|
|
13
18
|
this.elementRef = inject(ElementRef);
|
|
19
|
+
this.pendingPositioningFrameId = null;
|
|
14
20
|
this.dropdownService = inject(DropdownService);
|
|
21
|
+
this.overlayService = inject(OverlayService);
|
|
22
|
+
this.viewContainerRef = inject(ViewContainerRef);
|
|
15
23
|
this.items = input([]);
|
|
16
24
|
this.menuId = input();
|
|
17
25
|
this.itemEvent = output();
|
|
@@ -28,6 +36,7 @@ export class DropdownMenuComponent {
|
|
|
28
36
|
this.footerTemplate = input(undefined);
|
|
29
37
|
this.headerContentRef = viewChild("headerContent");
|
|
30
38
|
this.footerContentRef = viewChild("footerContent");
|
|
39
|
+
this.itemComponents = viewChildren(DropdownItemComponent);
|
|
31
40
|
this.hasHeaderContent = computed(() => {
|
|
32
41
|
const hasTemplate = !!this.headerTemplate();
|
|
33
42
|
const hasProjectedContent = !!this.headerContentRef()?.nativeElement?.children.length;
|
|
@@ -39,36 +48,92 @@ export class DropdownMenuComponent {
|
|
|
39
48
|
return hasTemplate || hasProjectedContent;
|
|
40
49
|
});
|
|
41
50
|
}
|
|
51
|
+
static { this.SUB_MENU_OFFSET = 4; }
|
|
42
52
|
getChildMenuId(itemIndex) {
|
|
43
53
|
return `${this.menuId()}:${itemIndex + 1}`;
|
|
44
54
|
}
|
|
45
55
|
handleItemEvent(itemEvent) {
|
|
46
56
|
this.itemEvent.emit(itemEvent);
|
|
47
57
|
}
|
|
58
|
+
handleSubmenuRequest(event) {
|
|
59
|
+
const { children, childId, triggerElement, onCreated } = event;
|
|
60
|
+
const componentRef = this.overlayService.create(DropdownMenuComponent, this.viewContainerRef);
|
|
61
|
+
componentRef.setInput("items", children);
|
|
62
|
+
componentRef.setInput("menuId", childId);
|
|
63
|
+
componentRef.setInput("isOpen", true);
|
|
64
|
+
const hostElement = componentRef.location.nativeElement;
|
|
65
|
+
this.cancelPendingPositioningFrame();
|
|
66
|
+
this.pendingPositioningFrameId = requestAnimationFrame(() => {
|
|
67
|
+
this.pendingPositioningFrameId = null;
|
|
68
|
+
try {
|
|
69
|
+
const subMenuHost = componentRef.location?.nativeElement;
|
|
70
|
+
const menuElement = subMenuHost?.querySelector(".rte-dropdown-menu");
|
|
71
|
+
if (!triggerElement || !menuElement) {
|
|
72
|
+
logWarn("DropdownMenuComponent", "Unable to position submenu: required DOM elements not found.");
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const position = getAutoPlacementDropdown({
|
|
76
|
+
hostElement: triggerElement,
|
|
77
|
+
castedElement: menuElement,
|
|
78
|
+
defaultPosition: "right",
|
|
79
|
+
offset: DropdownMenuComponent.SUB_MENU_OFFSET,
|
|
80
|
+
hasDropdownParent: true,
|
|
81
|
+
});
|
|
82
|
+
const alignment = getAutoAlignment(triggerElement, menuElement, position);
|
|
83
|
+
const coords = getCoordinates(position, triggerElement, menuElement, DropdownMenuComponent.SUB_MENU_OFFSET, alignment);
|
|
84
|
+
hostElement.style.display = "block";
|
|
85
|
+
hostElement.style.position = "absolute";
|
|
86
|
+
hostElement.style.top = `${coords.top}px`;
|
|
87
|
+
hostElement.style.left = `${coords.left}px`;
|
|
88
|
+
hostElement.style.opacity = "1";
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
logError("DropdownMenuComponent", "Error while positioning submenu:", error);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
onCreated({ componentRef, hostElement });
|
|
95
|
+
}
|
|
96
|
+
ngOnDestroy() {
|
|
97
|
+
this.cancelPendingPositioningFrame();
|
|
98
|
+
}
|
|
99
|
+
cancelPendingPositioningFrame() {
|
|
100
|
+
if (this.pendingPositioningFrameId !== null) {
|
|
101
|
+
cancelAnimationFrame(this.pendingPositioningFrameId);
|
|
102
|
+
this.pendingPositioningFrameId = null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
48
105
|
onKeyDown(event) {
|
|
49
106
|
if (!event.target || !this.menuId()) {
|
|
50
107
|
return;
|
|
51
108
|
}
|
|
52
|
-
if ([ARROW_UP_KEY, ARROW_DOWN_KEY,
|
|
109
|
+
if ([ARROW_UP_KEY, ARROW_DOWN_KEY, TAB_KEY].includes(event.key)) {
|
|
53
110
|
event.preventDefault();
|
|
54
111
|
}
|
|
55
112
|
if (event.key === ESCAPE_KEY) {
|
|
56
113
|
this.closingMenu.emit();
|
|
57
114
|
}
|
|
58
115
|
const menuId = this.menuId();
|
|
116
|
+
if (event.key === TAB_KEY && event.shiftKey) {
|
|
117
|
+
const parentMenuId = DropdownManager.getParentDropdownId(menuId);
|
|
118
|
+
if (parentMenuId) {
|
|
119
|
+
focusParentDropdownFirstElement(menuId);
|
|
120
|
+
this.closingMenu.emit();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
59
124
|
this.dropdownService.handleKeyboardInput(event.key, {
|
|
60
125
|
menuElement: this.elementRef,
|
|
61
126
|
menuId,
|
|
62
127
|
});
|
|
63
128
|
}
|
|
64
129
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DropdownMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
65
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DropdownMenuComponent, isStandalone: true, selector: "rte-dropdown-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, menuId: { classPropertyName: "menuId", publicName: "menuId", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: false, transformFunction: null }, footerTemplate: { classPropertyName: "footerTemplate", publicName: "footerTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemEvent: "itemEvent", closingMenu: "closingMenu" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "attr.data-menu-id": "menuId()" } }, queries: [{ propertyName: "headerDirective", first: true, predicate: DropdownMenuHeaderDirective, descendants: true, isSignal: true }, { propertyName: "footerDirective", first: true, predicate: DropdownMenuFooterDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "headerContentRef", first: true, predicate: ["headerContent"], descendants: true, isSignal: true }, { propertyName: "footerContentRef", first: true, predicate: ["footerContent"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"rte-dropdown-menu {{ isOpen() ? 'open' : 'closed' }}\" [ngStyle]=\"menuStyle()\">\n @if (hasHeaderContent()) {\n <div class=\"rte-dropdown-menu-header\">\n @if (headerTemplate() || headerDirective()?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"(headerTemplate() || headerDirective()?.templateRef) ?? null\"></ng-container>\n } @else {\n <div #headerContent>\n <ng-content select=\"[dropdown-menu-header]\"></ng-content>\n </div>\n }\n <rte-divider />\n </div>\n }\n <div class=\"rte-dropdown-menu-content\">\n <ul class=\"rte-dropdown-items\" role=\"menu\" [attr.aria-activedescendant]=\"menuId()\">\n @for (item of items(); track item.label; let i = $index) {\n <rte-dropdown-item
|
|
130
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DropdownMenuComponent, isStandalone: true, selector: "rte-dropdown-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, menuId: { classPropertyName: "menuId", publicName: "menuId", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: false, transformFunction: null }, footerTemplate: { classPropertyName: "footerTemplate", publicName: "footerTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemEvent: "itemEvent", closingMenu: "closingMenu" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "attr.data-menu-id": "menuId()" } }, queries: [{ propertyName: "headerDirective", first: true, predicate: DropdownMenuHeaderDirective, descendants: true, isSignal: true }, { propertyName: "footerDirective", first: true, predicate: DropdownMenuFooterDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "headerContentRef", first: true, predicate: ["headerContent"], descendants: true, isSignal: true }, { propertyName: "footerContentRef", first: true, predicate: ["footerContent"], descendants: true, isSignal: true }, { propertyName: "itemComponents", predicate: DropdownItemComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"rte-dropdown-menu {{ isOpen() ? 'open' : 'closed' }}\" [ngStyle]=\"menuStyle()\">\n @if (hasHeaderContent()) {\n <div class=\"rte-dropdown-menu-header\">\n @if (headerTemplate() || headerDirective()?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"(headerTemplate() || headerDirective()?.templateRef) ?? null\"></ng-container>\n } @else {\n <div #headerContent>\n <ng-content select=\"[dropdown-menu-header]\"></ng-content>\n </div>\n }\n <rte-divider />\n </div>\n }\n <div class=\"rte-dropdown-menu-content\">\n <ul class=\"rte-dropdown-items\" role=\"menu\" [attr.aria-activedescendant]=\"menuId()\">\n @for (item of items(); track item.label; let i = $index) {\n <rte-dropdown-item\n [item]=\"item\"\n [menuId]=\"menuId()\"\n (itemEvent)=\"handleItemEvent($event)\"\n (submenuRequest)=\"handleSubmenuRequest($event)\"\n />\n }\n </ul>\n </div>\n @if (hasFooterContent()) {\n <div class=\"rte-dropdown-menu-footer\">\n <rte-divider />\n @if (footerTemplate() || footerDirective()?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"(footerTemplate() || footerDirective()?.templateRef) ?? null\"></ng-container>\n } @else {\n <div #footerContent>\n <ng-content select=\"[dropdown-menu-footer]\"></ng-content>\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host{display:none;position:absolute}.rte-dropdown-menu{opacity:0;box-shadow:0 8px 16px 0 var(--elevation-shadow-key),0 0 2px 0 var(--elevation-shadow-ambient);background:linear-gradient(0deg,var(--elevation-surface-shadow-4) 0%,var(--elevation-surface-shadow-4) 100%);background-color:var(--background-default);position:absolute;top:0;left:0;display:flex;min-width:112px;max-width:280px;padding:8px 0;flex-direction:column;align-items:flex-start;gap:0px;border-radius:4px;transition:opacity .1s ease-in-out;pointer-events:auto;overflow-x:hidden;overflow-y:auto}.rte-dropdown-menu-header,.rte-dropdown-menu-content,.rte-dropdown-menu-footer{width:100%}.rte-dropdown-menu.open{opacity:1}.rte-dropdown-menu .rte-dropdown-items{width:100%;padding:0;margin:0}.rte-dropdown-menu .rte-dropdown-items li{list-style:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: DropdownItemComponent, selector: "rte-dropdown-item", inputs: ["item", "menuId"], outputs: ["itemEvent", "submenuRequest"] }, { kind: "component", type: DividerComponent, selector: "rte-divider", inputs: ["orientation", "thickness", "appearance", "endPoint"] }] }); }
|
|
66
131
|
}
|
|
67
132
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DropdownMenuComponent, decorators: [{
|
|
68
133
|
type: Component,
|
|
69
|
-
args: [{ selector: "rte-dropdown-menu", imports: [CommonModule, DropdownItemComponent, DividerComponent], standalone: true, host: { "[attr.data-menu-id]": "menuId()" }, template: "<div class=\"rte-dropdown-menu {{ isOpen() ? 'open' : 'closed' }}\" [ngStyle]=\"menuStyle()\">\n @if (hasHeaderContent()) {\n <div class=\"rte-dropdown-menu-header\">\n @if (headerTemplate() || headerDirective()?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"(headerTemplate() || headerDirective()?.templateRef) ?? null\"></ng-container>\n } @else {\n <div #headerContent>\n <ng-content select=\"[dropdown-menu-header]\"></ng-content>\n </div>\n }\n <rte-divider />\n </div>\n }\n <div class=\"rte-dropdown-menu-content\">\n <ul class=\"rte-dropdown-items\" role=\"menu\" [attr.aria-activedescendant]=\"menuId()\">\n @for (item of items(); track item.label; let i = $index) {\n <rte-dropdown-item
|
|
134
|
+
args: [{ selector: "rte-dropdown-menu", imports: [CommonModule, DropdownItemComponent, DividerComponent], standalone: true, host: { "[attr.data-menu-id]": "menuId()" }, template: "<div class=\"rte-dropdown-menu {{ isOpen() ? 'open' : 'closed' }}\" [ngStyle]=\"menuStyle()\">\n @if (hasHeaderContent()) {\n <div class=\"rte-dropdown-menu-header\">\n @if (headerTemplate() || headerDirective()?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"(headerTemplate() || headerDirective()?.templateRef) ?? null\"></ng-container>\n } @else {\n <div #headerContent>\n <ng-content select=\"[dropdown-menu-header]\"></ng-content>\n </div>\n }\n <rte-divider />\n </div>\n }\n <div class=\"rte-dropdown-menu-content\">\n <ul class=\"rte-dropdown-items\" role=\"menu\" [attr.aria-activedescendant]=\"menuId()\">\n @for (item of items(); track item.label; let i = $index) {\n <rte-dropdown-item\n [item]=\"item\"\n [menuId]=\"menuId()\"\n (itemEvent)=\"handleItemEvent($event)\"\n (submenuRequest)=\"handleSubmenuRequest($event)\"\n />\n }\n </ul>\n </div>\n @if (hasFooterContent()) {\n <div class=\"rte-dropdown-menu-footer\">\n <rte-divider />\n @if (footerTemplate() || footerDirective()?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"(footerTemplate() || footerDirective()?.templateRef) ?? null\"></ng-container>\n } @else {\n <div #footerContent>\n <ng-content select=\"[dropdown-menu-footer]\"></ng-content>\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host{display:none;position:absolute}.rte-dropdown-menu{opacity:0;box-shadow:0 8px 16px 0 var(--elevation-shadow-key),0 0 2px 0 var(--elevation-shadow-ambient);background:linear-gradient(0deg,var(--elevation-surface-shadow-4) 0%,var(--elevation-surface-shadow-4) 100%);background-color:var(--background-default);position:absolute;top:0;left:0;display:flex;min-width:112px;max-width:280px;padding:8px 0;flex-direction:column;align-items:flex-start;gap:0px;border-radius:4px;transition:opacity .1s ease-in-out;pointer-events:auto;overflow-x:hidden;overflow-y:auto}.rte-dropdown-menu-header,.rte-dropdown-menu-content,.rte-dropdown-menu-footer{width:100%}.rte-dropdown-menu.open{opacity:1}.rte-dropdown-menu .rte-dropdown-items{width:100%;padding:0;margin:0}.rte-dropdown-menu .rte-dropdown-items li{list-style:none}\n"] }]
|
|
70
135
|
}], propDecorators: { onKeyDown: [{
|
|
71
136
|
type: HostListener,
|
|
72
137
|
args: ["keydown", ["$event"]]
|
|
73
138
|
}] } });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1ydGUtbGliL3NyYy9saWIvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi1tZW51L2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtcnRlLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24tbWVudS9kcm9wZG93bi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGNBQWMsRUFDZCxjQUFjLEVBQ2QsZUFBZSxFQUNmLFlBQVksRUFDWixVQUFVLEVBQ1YsT0FBTyxHQUNSLE1BQU0sK0RBQStELENBQUM7QUFFdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxxQkFBcUIsRUFBc0IsTUFBTSwwQ0FBMEMsQ0FBQztBQUVyRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7O0FBVS9FLE1BQU0sT0FBTyxxQkFBcUI7SUFSbEM7UUFTbUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxvQkFBZSxHQUFHLE1BQU0s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ekIsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2xELFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUM1QixNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FsRVUscUJBQXFCO21HQUFyQixxQkFBcUIsNmpDQWtCUSwyQkFBMkIsa0dBQzNCLDJCQUEyQix1VEN4RHJFLDZ5Q0FpQ0EsdzJCREZZLFlBQVksMlJBQUUscUJBQXFCLGtIQUFFLGdCQUFnQjs7NEZBTXBELHFCQUFxQjtrQkFSakMsU0FBUzsrQkFDRSxtQkFBbUIsV0FDcEIsQ0FBQyxZQUFZLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMsY0FDcEQsSUFBSSxRQUdWLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFOzhCQWtEM0MsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGNvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBBUlJPV19ET1dOX0tFWSxcbiAgQVJST1dfTEVGVF9LRVksXG4gIEFSUk9XX1JJR0hUX0tFWSxcbiAgQVJST1dfVVBfS0VZLFxuICBFU0NBUEVfS0VZLFxuICBUQUJfS0VZLFxufSBmcm9tIFwiQGRlc2lnbi1zeXN0ZW0tcnRlL2NvcmUvY29uc3RhbnRzL2tleWJvYXJkL2tleWJvYXJkLmNvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZHJvcGRvd24uc2VydmljZVwiO1xuaW1wb3J0IHsgRGl2aWRlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9kaXZpZGVyL2RpdmlkZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEcm9wZG93bkl0ZW1Db21wb25lbnQsIERyb3Bkb3duSXRlbUNvbmZpZyB9IGZyb20gXCIuLi9kcm9wZG93bi1pdGVtL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50XCI7XG5cbmltcG9ydCB7IERyb3Bkb3duTWVudUZvb3RlckRpcmVjdGl2ZSB9IGZyb20gXCIuL2Ryb3Bkb3duLW1lbnUtZm9vdGVyLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgRHJvcGRvd25NZW51SGVhZGVyRGlyZWN0aXZlIH0gZnJvbSBcIi4vZHJvcGRvd24tbWVudS1oZWFkZXIuZGlyZWN0aXZlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJydGUtZHJvcGRvd24tbWVudVwiLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEcm9wZG93bkl0ZW1Db21wb25lbnQsIERpdmlkZXJDb21wb25lbnRdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogXCIuL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmw6IFwiLi9kcm9wZG93bi1tZW51LmNvbXBvbmVudC5zY3NzXCIsXG4gIGhvc3Q6IHsgXCJbYXR0ci5kYXRhLW1lbnUtaWRdXCI6IFwibWVudUlkKClcIiB9LFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bk1lbnVDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZHJvcGRvd25TZXJ2aWNlID0gaW5qZWN0KERyb3Bkb3duU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgaXRlbXMgPSBpbnB1dDxEcm9wZG93bkl0ZW1Db25maWdbXT4oW10pO1xuICByZWFkb25seSBtZW51SWQgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgcmVhZG9ubHkgaXRlbUV2ZW50ID0gb3V0cHV0PHsgZXZlbnQ6IEV2ZW50OyBpZDogc3RyaW5nIH0+KCk7XG5cbiAgcmVhZG9ubHkgd2lkdGhTdHlsZSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLndpZHRoKCkgIT09IHVuZGVmaW5lZCA/IGAke3RoaXMud2lkdGgoKX1weGAgOiB1bmRlZmluZWQpKTtcbiAgcmVhZG9ubHkgaXNPcGVuID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB3aWR0aCA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBjbG9zaW5nTWVudSA9IG91dHB1dDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IG1lbnVTdHlsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy53aWR0aCgpID8geyB3aWR0aDogdGhpcy53aWR0aCgpICsgXCJweFwiLCBcIm1heC13aWR0aFwiOiB0aGlzLndpZHRoKCkgKyBcInB4XCIgfSA6IHt9O1xuICB9KTtcblxuICByZWFkb25seSBoZWFkZXJEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoRHJvcGRvd25NZW51SGVhZGVyRGlyZWN0aXZlKTtcbiAgcmVhZG9ubHkgZm9vdGVyRGlyZWN0aXZlID0gY29udGVudENoaWxkKERyb3Bkb3duTWVudUZvb3RlckRpcmVjdGl2ZSk7XG5cbiAgcmVhZG9ubHkgaGVhZGVyVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGZvb3RlclRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IGhlYWRlckNvbnRlbnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KFwiaGVhZGVyQ29udGVudFwiKTtcbiAgcmVhZG9ubHkgZm9vdGVyQ29udGVudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oXCJmb290ZXJDb250ZW50XCIpO1xuXG4gIHJlYWRvbmx5IGhhc0hlYWRlckNvbnRlbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaGFzVGVtcGxhdGUgPSAhIXRoaXMuaGVhZGVyVGVtcGxhdGUoKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0ZWRDb250ZW50ID0gISF0aGlzLmhlYWRlckNvbnRlbnRSZWYoKT8ubmF0aXZlRWxlbWVudD8uY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHJldHVybiBoYXNUZW1wbGF0ZSB8fCBoYXNQcm9qZWN0ZWRDb250ZW50O1xuICB9KTtcblxuICByZWFkb25seSBoYXNGb290ZXJDb250ZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGhhc1RlbXBsYXRlID0gISF0aGlzLmZvb3RlclRlbXBsYXRlKCk7XG4gICAgY29uc3QgaGFzUHJvamVjdGVkQ29udGVudCA9ICEhdGhpcy5mb290ZXJDb250ZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmNoaWxkcmVuLmxlbmd0aDtcbiAgICByZXR1cm4gaGFzVGVtcGxhdGUgfHwgaGFzUHJvamVjdGVkQ29udGVudDtcbiAgfSk7XG5cbiAgZ2V0Q2hpbGRNZW51SWQoaXRlbUluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm1lbnVJZCgpfToke2l0ZW1JbmRleCArIDF9YDtcbiAgfVxuXG4gIGhhbmRsZUl0ZW1FdmVudChpdGVtRXZlbnQ6IHsgZXZlbnQ6IEV2ZW50OyBpZDogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1FdmVudC5lbWl0KGl0ZW1FdmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKFwia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghZXZlbnQudGFyZ2V0IHx8ICF0aGlzLm1lbnVJZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFtBUlJPV19VUF9LRVksIEFSUk9XX0RPV05fS0VZLCBBUlJPV19MRUZUX0tFWSwgQVJST1dfUklHSFRfS0VZLCBUQUJfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgIHRoaXMuY2xvc2luZ01lbnUuZW1pdCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbnVJZCA9IHRoaXMubWVudUlkKCkgYXMgc3RyaW5nO1xuICAgIHRoaXMuZHJvcGRvd25TZXJ2aWNlLmhhbmRsZUtleWJvYXJkSW5wdXQoZXZlbnQua2V5LCB7XG4gICAgICBtZW51RWxlbWVudDogdGhpcy5lbGVtZW50UmVmLFxuICAgICAgbWVudUlkLFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicnRlLWRyb3Bkb3duLW1lbnUge3sgaXNPcGVuKCkgPyAnb3BlbicgOiAnY2xvc2VkJyB9fVwiIFtuZ1N0eWxlXT1cIm1lbnVTdHlsZSgpXCI+XG4gIEBpZiAoaGFzSGVhZGVyQ29udGVudCgpKSB7XG4gICAgPGRpdiBjbGFzcz1cInJ0ZS1kcm9wZG93bi1tZW51LWhlYWRlclwiPlxuICAgICAgQGlmIChoZWFkZXJUZW1wbGF0ZSgpIHx8IGhlYWRlckRpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZikge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIihoZWFkZXJUZW1wbGF0ZSgpIHx8IGhlYWRlckRpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZikgPz8gbnVsbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgI2hlYWRlckNvbnRlbnQ+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Ryb3Bkb3duLW1lbnUtaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8cnRlLWRpdmlkZXIgLz5cbiAgICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwicnRlLWRyb3Bkb3duLW1lbnUtY29udGVudFwiPlxuICAgIDx1bCBjbGFzcz1cInJ0ZS1kcm9wZG93bi1pdGVtc1wiIHJvbGU9XCJtZW51XCIgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIm1lbnVJZCgpXCI+XG4gICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zKCk7IHRyYWNrIGl0ZW0ubGFiZWw7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDxydGUtZHJvcGRvd24taXRlbSBbaXRlbV09XCJpdGVtXCIgKGl0ZW1FdmVudCk9XCJoYW5kbGVJdGVtRXZlbnQoJGV2ZW50KVwiIC8+XG4gICAgICB9XG4gICAgPC91bD5cbiAgPC9kaXY+XG4gIEBpZiAoaGFzRm9vdGVyQ29udGVudCgpKSB7XG4gICAgPGRpdiBjbGFzcz1cInJ0ZS1kcm9wZG93bi1tZW51LWZvb3RlclwiPlxuICAgICAgPHJ0ZS1kaXZpZGVyIC8+XG4gICAgICBAaWYgKGZvb3RlclRlbXBsYXRlKCkgfHwgZm9vdGVyRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiKGZvb3RlclRlbXBsYXRlKCkgfHwgZm9vdGVyRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmKSA/PyBudWxsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiAjZm9vdGVyQ29udGVudD5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZHJvcGRvd24tbWVudS1mb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1ydGUtbGliL3NyYy9saWIvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi1tZW51L2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtcnRlLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24tbWVudS9kcm9wZG93bi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFFTixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUYsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsY0FBYyxHQUNmLE1BQU0seURBQXlELENBQUM7QUFDakUsT0FBTyxFQUNMLGNBQWMsRUFDZCxZQUFZLEVBQ1osVUFBVSxFQUNWLE9BQU8sR0FDUixNQUFNLCtEQUErRCxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJB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QixNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0EvSVUscUJBQXFCO21HQUFyQixxQkFBcUIsNmpDQXNCUSwyQkFBMkIsa0dBQzNCLDJCQUEyQiwyVUFPNUIscUJBQXFCLGdFQzlFOUQsMDZDQXNDQSx3MkJESVksWUFBWSwyUkFBRSxxQkFBcUIsb0lBQUUsZ0JBQWdCOzs0RkFNcEQscUJBQXFCO2tCQVJqQyxTQUFTOytCQUNFLG1CQUFtQixXQUNwQixDQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsQ0FBQyxjQUNwRCxJQUFJLFFBR1YsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUU7OEJBcUgzQyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgY29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgb3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgdmlld0NoaWxkLFxuICB2aWV3Q2hpbGRyZW4sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEcm9wZG93bk1hbmFnZXIgfSBmcm9tIFwiQGRlc2lnbi1zeXN0ZW0tcnRlL2NvcmUvY29tcG9uZW50cy9kcm9wZG93bi9Ecm9wZG93bk1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIGdldEF1dG9BbGlnbm1lbnQsXG4gIGdldEF1dG9QbGFjZW1lbnREcm9wZG93bixcbiAgZ2V0Q29vcmRpbmF0ZXMsXG59IGZyb20gXCJAZGVzaWduLXN5c3RlbS1ydGUvY29yZS9jb21wb25lbnRzL3V0aWxzL2F1dG8tcGxhY2VtZW50XCI7XG5pbXBvcnQge1xuICBBUlJPV19ET1dOX0tFWSxcbiAgQVJST1dfVVBfS0VZLFxuICBFU0NBUEVfS0VZLFxuICBUQUJfS0VZLFxufSBmcm9tIFwiQGRlc2lnbi1zeXN0ZW0tcnRlL2NvcmUvY29uc3RhbnRzL2tleWJvYXJkL2tleWJvYXJkLmNvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nRXJyb3IsIGxvZ1dhcm4gfSBmcm9tIFwiQGRlc2lnbi1zeXN0ZW0tcnRlL2NvcmUvdXRpbHMvbG9nLWhhbmRsZXJzXCI7XG5cbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9kcm9wZG93bi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBPdmVybGF5U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9vdmVybGF5LnNlcnZpY2VcIjtcbmltcG9ydCB7IERpdmlkZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vZGl2aWRlci9kaXZpZGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRHJvcGRvd25JdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4uL2Ryb3Bkb3duLWl0ZW0vZHJvcGRvd24taXRlbS5jb21wb25lbnRcIjtcbmltcG9ydCB7IERyb3Bkb3duSXRlbUNvbmZpZywgU3VibWVudVJlcXVlc3RFdmVudCB9IGZyb20gXCIuLi9kcm9wZG93bi50eXBlc1wiO1xuaW1wb3J0IHsgZm9jdXNQYXJlbnREcm9wZG93bkZpcnN0RWxlbWVudCB9IGZyb20gXCIuLi9kcm9wZG93bi51dGlsc1wiO1xuXG5pbXBvcnQgeyBEcm9wZG93bk1lbnVGb290ZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi9kcm9wZG93bi1tZW51LWZvb3Rlci5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IERyb3Bkb3duTWVudUhlYWRlckRpcmVjdGl2ZSB9IGZyb20gXCIuL2Ryb3Bkb3duLW1lbnUtaGVhZGVyLmRpcmVjdGl2ZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwicnRlLWRyb3Bkb3duLW1lbnVcIixcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHJvcGRvd25JdGVtQ29tcG9uZW50LCBEaXZpZGVyQ29tcG9uZW50XSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9kcm9wZG93bi1tZW51LmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsOiBcIi4vZHJvcGRvd24tbWVudS5jb21wb25lbnQuc2Nzc1wiLFxuICBob3N0OiB7IFwiW2F0dHIuZGF0YS1tZW51LWlkXVwiOiBcIm1lbnVJZCgpXCIgfSxcbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25NZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU1VCX01FTlVfT0ZGU0VUID0gNDtcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHBlbmRpbmdQb3NpdGlvbmluZ0ZyYW1lSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bkb3duU2VydmljZSA9IGluamVjdChEcm9wZG93blNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXlTZXJ2aWNlID0gaW5qZWN0KE92ZXJsYXlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXG4gIHJlYWRvbmx5IGl0ZW1zID0gaW5wdXQ8RHJvcGRvd25JdGVtQ29uZmlnW10+KFtdKTtcbiAgcmVhZG9ubHkgbWVudUlkID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIHJlYWRvbmx5IGl0ZW1FdmVudCA9IG91dHB1dDx7IGV2ZW50OiBFdmVudDsgaWQ6IHN0cmluZzsgaXRlbT86IERyb3Bkb3duSXRlbUNvbmZpZyB9PigpO1xuXG4gIHJlYWRvbmx5IHdpZHRoU3R5bGUgPSBjb21wdXRlZCgoKSA9PiAodGhpcy53aWR0aCgpICE9PSB1bmRlZmluZWQgPyBgJHt0aGlzLndpZHRoKCl9cHhgIDogdW5kZWZpbmVkKSk7XG4gIHJlYWRvbmx5IGlzT3BlbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgd2lkdGggPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgY2xvc2luZ01lbnUgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICByZWFkb25seSBtZW51U3R5bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGgoKSA/IHsgd2lkdGg6IHRoaXMud2lkdGgoKSArIFwicHhcIiwgXCJtYXgtd2lkdGhcIjogdGhpcy53aWR0aCgpICsgXCJweFwiIH0gOiB7fTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGVhZGVyRGlyZWN0aXZlID0gY29udGVudENoaWxkKERyb3Bkb3duTWVudUhlYWRlckRpcmVjdGl2ZSk7XG4gIHJlYWRvbmx5IGZvb3RlckRpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChEcm9wZG93bk1lbnVGb290ZXJEaXJlY3RpdmUpO1xuXG4gIHJlYWRvbmx5IGhlYWRlclRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBmb290ZXJUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBoZWFkZXJDb250ZW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihcImhlYWRlckNvbnRlbnRcIik7XG4gIHJlYWRvbmx5IGZvb3RlckNvbnRlbnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KFwiZm9vdGVyQ29udGVudFwiKTtcbiAgcmVhZG9ubHkgaXRlbUNvbXBvbmVudHMgPSB2aWV3Q2hpbGRyZW4oRHJvcGRvd25JdGVtQ29tcG9uZW50KTtcblxuICByZWFkb25seSBoYXNIZWFkZXJDb250ZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGhhc1RlbXBsYXRlID0gISF0aGlzLmhlYWRlclRlbXBsYXRlKCk7XG4gICAgY29uc3QgaGFzUHJvamVjdGVkQ29udGVudCA9ICEhdGhpcy5oZWFkZXJDb250ZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmNoaWxkcmVuLmxlbmd0aDtcbiAgICByZXR1cm4gaGFzVGVtcGxhdGUgfHwgaGFzUHJvamVjdGVkQ29udGVudDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGFzRm9vdGVyQ29udGVudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBoYXNUZW1wbGF0ZSA9ICEhdGhpcy5mb290ZXJUZW1wbGF0ZSgpO1xuICAgIGNvbnN0IGhhc1Byb2plY3RlZENvbnRlbnQgPSAhIXRoaXMuZm9vdGVyQ29udGVudFJlZigpPy5uYXRpdmVFbGVtZW50Py5jaGlsZHJlbi5sZW5ndGg7XG4gICAgcmV0dXJuIGhhc1RlbXBsYXRlIHx8IGhhc1Byb2plY3RlZENvbnRlbnQ7XG4gIH0pO1xuXG4gIGdldENoaWxkTWVudUlkKGl0ZW1JbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5tZW51SWQoKX06JHtpdGVtSW5kZXggKyAxfWA7XG4gIH1cblxuICBoYW5kbGVJdGVtRXZlbnQoaXRlbUV2ZW50OiB7IGV2ZW50OiBFdmVudDsgaWQ6IHN0cmluZzsgaXRlbT86IERyb3Bkb3duSXRlbUNvbmZpZyB9KTogdm9pZCB7XG4gICAgdGhpcy5pdGVtRXZlbnQuZW1pdChpdGVtRXZlbnQpO1xuICB9XG5cbiAgaGFuZGxlU3VibWVudVJlcXVlc3QoZXZlbnQ6IFN1Ym1lbnVSZXF1ZXN0RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNoaWxkcmVuLCBjaGlsZElkLCB0cmlnZ2VyRWxlbWVudCwgb25DcmVhdGVkIH0gPSBldmVudDtcblxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMub3ZlcmxheVNlcnZpY2UuY3JlYXRlKERyb3Bkb3duTWVudUNvbXBvbmVudCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoXCJpdGVtc1wiLCBjaGlsZHJlbik7XG4gICAgY29tcG9uZW50UmVmLnNldElucHV0KFwibWVudUlkXCIsIGNoaWxkSWQpO1xuICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dChcImlzT3BlblwiLCB0cnVlKTtcblxuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICB0aGlzLmNhbmNlbFBlbmRpbmdQb3NpdGlvbmluZ0ZyYW1lKCk7XG4gICAgdGhpcy5wZW5kaW5nUG9zaXRpb25pbmdGcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ1Bvc2l0aW9uaW5nRnJhbWVJZCA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdWJNZW51SG9zdCA9IGNvbXBvbmVudFJlZi5sb2NhdGlvbj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICAgIGNvbnN0IG1lbnVFbGVtZW50ID0gc3ViTWVudUhvc3Q/LnF1ZXJ5U2VsZWN0b3IoXCIucnRlLWRyb3Bkb3duLW1lbnVcIikgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICAgIGlmICghdHJpZ2dlckVsZW1lbnQgfHwgIW1lbnVFbGVtZW50KSB7XG4gICAgICAgICAgbG9nV2FybihcIkRyb3Bkb3duTWVudUNvbXBvbmVudFwiLCBcIlVuYWJsZSB0byBwb3NpdGlvbiBzdWJtZW51OiByZXF1aXJlZCBET00gZWxlbWVudHMgbm90IGZvdW5kLlwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldEF1dG9QbGFjZW1lbnREcm9wZG93bih7XG4gICAgICAgICAgaG9zdEVsZW1lbnQ6IHRyaWdnZXJFbGVtZW50LFxuICAgICAgICAgIGNhc3RlZEVsZW1lbnQ6IG1lbnVFbGVtZW50LFxuICAgICAgICAgIGRlZmF1bHRQb3NpdGlvbjogXCJyaWdodFwiLFxuICAgICAgICAgIG9mZnNldDogRHJvcGRvd25NZW51Q29tcG9uZW50LlNVQl9NRU5VX09GRlNFVCxcbiAgICAgICAgICBoYXNEcm9wZG93blBhcmVudDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEF1dG9BbGlnbm1lbnQodHJpZ2dlckVsZW1lbnQsIG1lbnVFbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IGdldENvb3JkaW5hdGVzKFxuICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgIHRyaWdnZXJFbGVtZW50LFxuICAgICAgICAgIG1lbnVFbGVtZW50LFxuICAgICAgICAgIERyb3Bkb3duTWVudUNvbXBvbmVudC5TVUJfTUVOVV9PRkZTRVQsXG4gICAgICAgICAgYWxpZ25tZW50LFxuICAgICAgICApO1xuXG4gICAgICAgIGhvc3RFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICBob3N0RWxlbWVudC5zdHlsZS50b3AgPSBgJHtjb29yZHMudG9wfXB4YDtcbiAgICAgICAgaG9zdEVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2Nvb3Jkcy5sZWZ0fXB4YDtcbiAgICAgICAgaG9zdEVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IFwiMVwiO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nRXJyb3IoXCJEcm9wZG93bk1lbnVDb21wb25lbnRcIiwgXCJFcnJvciB3aGlsZSBwb3NpdGlvbmluZyBzdWJtZW51OlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBvbkNyZWF0ZWQoeyBjb21wb25lbnRSZWYsIGhvc3RFbGVtZW50IH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxQZW5kaW5nUG9zaXRpb25pbmdGcmFtZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5jZWxQZW5kaW5nUG9zaXRpb25pbmdGcmFtZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nUG9zaXRpb25pbmdGcmFtZUlkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnBlbmRpbmdQb3NpdGlvbmluZ0ZyYW1lSWQpO1xuICAgICAgdGhpcy5wZW5kaW5nUG9zaXRpb25pbmdGcmFtZUlkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKFwia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghZXZlbnQudGFyZ2V0IHx8ICF0aGlzLm1lbnVJZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFtBUlJPV19VUF9LRVksIEFSUk9XX0RPV05fS0VZLCBUQUJfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgIHRoaXMuY2xvc2luZ01lbnUuZW1pdCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbnVJZCA9IHRoaXMubWVudUlkKCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gVEFCX0tFWSAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgY29uc3QgcGFyZW50TWVudUlkID0gRHJvcGRvd25NYW5hZ2VyLmdldFBhcmVudERyb3Bkb3duSWQobWVudUlkKTtcbiAgICAgIGlmIChwYXJlbnRNZW51SWQpIHtcbiAgICAgICAgZm9jdXNQYXJlbnREcm9wZG93bkZpcnN0RWxlbWVudChtZW51SWQpO1xuICAgICAgICB0aGlzLmNsb3NpbmdNZW51LmVtaXQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZHJvcGRvd25TZXJ2aWNlLmhhbmRsZUtleWJvYXJkSW5wdXQoZXZlbnQua2V5LCB7XG4gICAgICBtZW51RWxlbWVudDogdGhpcy5lbGVtZW50UmVmLFxuICAgICAgbWVudUlkLFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicnRlLWRyb3Bkb3duLW1lbnUge3sgaXNPcGVuKCkgPyAnb3BlbicgOiAnY2xvc2VkJyB9fVwiIFtuZ1N0eWxlXT1cIm1lbnVTdHlsZSgpXCI+XG4gIEBpZiAoaGFzSGVhZGVyQ29udGVudCgpKSB7XG4gICAgPGRpdiBjbGFzcz1cInJ0ZS1kcm9wZG93bi1tZW51LWhlYWRlclwiPlxuICAgICAgQGlmIChoZWFkZXJUZW1wbGF0ZSgpIHx8IGhlYWRlckRpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZikge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIihoZWFkZXJUZW1wbGF0ZSgpIHx8IGhlYWRlckRpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZikgPz8gbnVsbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgI2hlYWRlckNvbnRlbnQ+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Ryb3Bkb3duLW1lbnUtaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8cnRlLWRpdmlkZXIgLz5cbiAgICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwicnRlLWRyb3Bkb3duLW1lbnUtY29udGVudFwiPlxuICAgIDx1bCBjbGFzcz1cInJ0ZS1kcm9wZG93bi1pdGVtc1wiIHJvbGU9XCJtZW51XCIgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIm1lbnVJZCgpXCI+XG4gICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zKCk7IHRyYWNrIGl0ZW0ubGFiZWw7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDxydGUtZHJvcGRvd24taXRlbVxuICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgIFttZW51SWRdPVwibWVudUlkKClcIlxuICAgICAgICAgIChpdGVtRXZlbnQpPVwiaGFuZGxlSXRlbUV2ZW50KCRldmVudClcIlxuICAgICAgICAgIChzdWJtZW51UmVxdWVzdCk9XCJoYW5kbGVTdWJtZW51UmVxdWVzdCgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8L3VsPlxuICA8L2Rpdj5cbiAgQGlmIChoYXNGb290ZXJDb250ZW50KCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwicnRlLWRyb3Bkb3duLW1lbnUtZm9vdGVyXCI+XG4gICAgICA8cnRlLWRpdmlkZXIgLz5cbiAgICAgIEBpZiAoZm9vdGVyVGVtcGxhdGUoKSB8fCBmb290ZXJEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWYpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCIoZm9vdGVyVGVtcGxhdGUoKSB8fCBmb290ZXJEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWYpID8/IG51bGxcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2ICNmb290ZXJDb250ZW50PlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltkcm9wZG93bi1tZW51LWZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
|