@agorapulse/ui-components 18.0.48 → 18.1.1
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/agorapulse-ui-components-18.1.1.tgz +0 -0
- package/avatar/avatar.component.d.ts +1 -1
- package/esm2022/popover-menu/agorapulse-ui-components-popover-menu.mjs +5 -0
- package/esm2022/popover-menu/popover-menu-trigger.directive.mjs +58 -0
- package/esm2022/popover-menu/popover-menu.component.mjs +207 -0
- package/esm2022/popover-menu/public_api.mjs +3 -0
- package/fesm2022/agorapulse-ui-components-popover-menu.mjs +270 -0
- package/fesm2022/agorapulse-ui-components-popover-menu.mjs.map +1 -0
- package/nav-selector/nav-selector-leaf/nav-selector-leaf.component.d.ts +1 -1
- package/package.json +13 -7
- package/popover-menu/index.d.ts +5 -0
- package/popover-menu/popover-menu-trigger.directive.d.ts +15 -0
- package/popover-menu/popover-menu.component.d.ts +47 -0
- package/popover-menu/public_api.d.ts +2 -0
- package/agorapulse-ui-components-18.0.48.tgz +0 -0
|
Binary file
|
|
@@ -34,7 +34,7 @@ export declare class AvatarComponent {
|
|
|
34
34
|
private ngStyle;
|
|
35
35
|
profilePicture: import("@angular/core").InputSignal<string | undefined>;
|
|
36
36
|
alt: import("@angular/core").InputSignal<string>;
|
|
37
|
-
network: import("@angular/core").InputSignalWithTransform<"bluesky" | "facebook" | "instagram" | "linkedin" | "twitter" | "youtube" | "meta" | "google" | "pinterest" | "threads" | "tiktok" | "webBlog" | "webNews" | "X" | "reddit" | undefined, string | undefined>;
|
|
37
|
+
network: import("@angular/core").InputSignalWithTransform<"bluesky" | "facebook" | "instagram" | "linkedin" | "twitter" | "youtube" | "meta" | "google" | "pinterest" | "threads" | "tiktok" | "webBlog" | "webNews" | "X" | "xPlus" | "reddit" | undefined, string | undefined>;
|
|
38
38
|
size: import("@angular/core").InputSignal<AvatarSize | "16" | "32" | "24" | "56" | "48" | "40" | "36">;
|
|
39
39
|
username: import("@angular/core").InputSignal<string | undefined>;
|
|
40
40
|
showInitials: import("@angular/core").InputSignal<string | boolean | undefined>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdvcmFwdWxzZS11aS1jb21wb25lbnRzLXBvcG92ZXItbWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9wb3BvdmVyLW1lbnUvc3JjL2Fnb3JhcHVsc2UtdWktY29tcG9uZW50cy1wb3BvdmVyLW1lbnUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Directive, ElementRef, HostListener, inject, input, output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class PopoverMenuTriggerDirective {
|
|
4
|
+
elementRef = inject((ElementRef));
|
|
5
|
+
apPopoverMenuTrigger = input.required();
|
|
6
|
+
popoverMenuItems = input([]);
|
|
7
|
+
disabled = input(false);
|
|
8
|
+
menuItemClick = output();
|
|
9
|
+
opened = output();
|
|
10
|
+
closed = output();
|
|
11
|
+
onClick(event) {
|
|
12
|
+
event.preventDefault();
|
|
13
|
+
event.stopPropagation();
|
|
14
|
+
if (this.disabled()) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const popoverMenu = this.apPopoverMenuTrigger();
|
|
18
|
+
if (popoverMenu) {
|
|
19
|
+
popoverMenu.toggle(this.elementRef.nativeElement);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
onKeyDown(event) {
|
|
23
|
+
if (this.disabled()) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const popoverMenu = this.apPopoverMenuTrigger();
|
|
27
|
+
if (popoverMenu) {
|
|
28
|
+
switch (event.key) {
|
|
29
|
+
case 'Enter':
|
|
30
|
+
case ' ':
|
|
31
|
+
case 'ArrowDown':
|
|
32
|
+
event.preventDefault();
|
|
33
|
+
popoverMenu.open(this.elementRef.nativeElement);
|
|
34
|
+
break;
|
|
35
|
+
case 'Escape':
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
popoverMenu.close();
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PopoverMenuTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
43
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.9", type: PopoverMenuTriggerDirective, isStandalone: true, selector: "[apPopoverMenuTrigger]", inputs: { apPopoverMenuTrigger: { classPropertyName: "apPopoverMenuTrigger", publicName: "apPopoverMenuTrigger", isSignal: true, isRequired: true, transformFunction: null }, popoverMenuItems: { classPropertyName: "popoverMenuItems", publicName: "popoverMenuItems", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { menuItemClick: "menuItemClick", opened: "opened", closed: "closed" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeyDown($event)" } }, ngImport: i0 });
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PopoverMenuTriggerDirective, decorators: [{
|
|
46
|
+
type: Directive,
|
|
47
|
+
args: [{
|
|
48
|
+
selector: '[apPopoverMenuTrigger]',
|
|
49
|
+
standalone: true,
|
|
50
|
+
}]
|
|
51
|
+
}], propDecorators: { onClick: [{
|
|
52
|
+
type: HostListener,
|
|
53
|
+
args: ['click', ['$event']]
|
|
54
|
+
}], onKeyDown: [{
|
|
55
|
+
type: HostListener,
|
|
56
|
+
args: ['keydown', ['$event']]
|
|
57
|
+
}] } });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1tZW51LXRyaWdnZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy91aS1jb21wb25lbnRzL3BvcG92ZXItbWVudS9zcmMvcG9wb3Zlci1tZW51LXRyaWdnZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPM0YsTUFBTSxPQUFPLDJCQUEyQjtJQUNuQixVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUEsVUFBdUIsQ0FBQSxDQUFDLENBQUM7SUFFOUQsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBd0IsQ0FBQztJQUM5RCxnQkFBZ0IsR0FBRyxLQUFLLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEIsYUFBYSxHQUFHLE1BQU0sRUFBbUIsQ0FBQztJQUMxQyxNQUFNLEdBQUcsTUFBTSxFQUFRLENBQUM7SUFDeEIsTUFBTSxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBR3hCLE9BQU8sQ0FBQyxLQUFpQjtRQUNyQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNoRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDTCxDQUFDO0lBR0QsU0FBUyxDQUFDLEtBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNoRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLEtBQUssT0FBTyxDQUFDO2dCQUNiLEtBQUssR0FBRyxDQUFDO2dCQUNULEtBQUssV0FBVztvQkFDWixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDaEQsTUFBTTtnQkFFVixLQUFLLFFBQVE7b0JBQ1QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3BCLE1BQU07WUFDZCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7dUdBaERRLDJCQUEyQjsyRkFBM0IsMkJBQTJCOzsyRkFBM0IsMkJBQTJCO2tCQUp2QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs4QkFhRyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdCakMsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBpbmplY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvcG92ZXJNZW51Q29tcG9uZW50LCBQb3BvdmVyTWVudUl0ZW0gfSBmcm9tICcuL3BvcG92ZXItbWVudS5jb21wb25lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1thcFBvcG92ZXJNZW51VHJpZ2dlcl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJNZW51VHJpZ2dlckRpcmVjdGl2ZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcblxuICAgIGFwUG9wb3Zlck1lbnVUcmlnZ2VyID0gaW5wdXQucmVxdWlyZWQ8UG9wb3Zlck1lbnVDb21wb25lbnQ+KCk7XG4gICAgcG9wb3Zlck1lbnVJdGVtcyA9IGlucHV0PFBvcG92ZXJNZW51SXRlbVtdPihbXSk7XG4gICAgZGlzYWJsZWQgPSBpbnB1dChmYWxzZSk7XG5cbiAgICBtZW51SXRlbUNsaWNrID0gb3V0cHV0PFBvcG92ZXJNZW51SXRlbT4oKTtcbiAgICBvcGVuZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgICBjbG9zZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvcG92ZXJNZW51ID0gdGhpcy5hcFBvcG92ZXJNZW51VHJpZ2dlcigpO1xuICAgICAgICBpZiAocG9wb3Zlck1lbnUpIHtcbiAgICAgICAgICAgIHBvcG92ZXJNZW51LnRvZ2dsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9wb3Zlck1lbnUgPSB0aGlzLmFwUG9wb3Zlck1lbnVUcmlnZ2VyKCk7XG4gICAgICAgIGlmIChwb3BvdmVyTWVudSkge1xuICAgICAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcG9wb3Zlck1lbnUub3Blbih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcG9wb3Zlck1lbnUuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { BadgeComponent } from '@agorapulse/ui-components/badge';
|
|
2
|
+
import { TooltipDirective } from '@agorapulse/ui-components/tooltip';
|
|
3
|
+
import { apFeatureLock, apInfo, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';
|
|
4
|
+
import { Overlay, OverlayPositionBuilder } from '@angular/cdk/overlay';
|
|
5
|
+
import { TemplatePortal } from '@angular/cdk/portal';
|
|
6
|
+
import { CommonModule } from '@angular/common';
|
|
7
|
+
import { ChangeDetectionStrategy, Component, computed, contentChild, effect, ElementRef, inject, input, output, signal, viewChild, ViewContainerRef, } from '@angular/core';
|
|
8
|
+
import { take } from 'rxjs/operators';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class PopoverMenuComponent {
|
|
11
|
+
elementRef = inject(ElementRef);
|
|
12
|
+
overlay = inject(Overlay);
|
|
13
|
+
positionBuilder = inject(OverlayPositionBuilder);
|
|
14
|
+
viewContainerRef = inject(ViewContainerRef);
|
|
15
|
+
menuTemplate = viewChild('menuTemplate');
|
|
16
|
+
trigger = contentChild('trigger');
|
|
17
|
+
items = input([]);
|
|
18
|
+
disabled = input(false);
|
|
19
|
+
largeMenuEnabled = input(false);
|
|
20
|
+
showBackdrop = input(true);
|
|
21
|
+
customWidth = input(null);
|
|
22
|
+
menuItemClick = output();
|
|
23
|
+
opened = output();
|
|
24
|
+
closed = output();
|
|
25
|
+
overlayRef = null;
|
|
26
|
+
portal = null;
|
|
27
|
+
isOpen = signal(false);
|
|
28
|
+
focusedIndex = signal(-1);
|
|
29
|
+
menuItems = computed(() => this.items().filter(item => !item.divider));
|
|
30
|
+
constructor() {
|
|
31
|
+
effect(() => {
|
|
32
|
+
if (this.isOpen()) {
|
|
33
|
+
this.setupKeyboardNavigation();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
open(triggerElement) {
|
|
38
|
+
const menuTemplate = this.menuTemplate();
|
|
39
|
+
if (this.disabled() || this.isOpen() || !menuTemplate) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const target = triggerElement || this.elementRef.nativeElement;
|
|
43
|
+
if (this.overlayRef) {
|
|
44
|
+
this.overlayRef.dispose();
|
|
45
|
+
}
|
|
46
|
+
const positionStrategy = this.createPositionStrategy(target);
|
|
47
|
+
this.overlayRef = this.overlay.create({
|
|
48
|
+
positionStrategy,
|
|
49
|
+
hasBackdrop: this.showBackdrop(),
|
|
50
|
+
backdropClass: '',
|
|
51
|
+
panelClass: '',
|
|
52
|
+
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
53
|
+
});
|
|
54
|
+
this.portal = new TemplatePortal(menuTemplate, this.viewContainerRef);
|
|
55
|
+
this.overlayRef.attach(this.portal);
|
|
56
|
+
this.isOpen.set(true);
|
|
57
|
+
this.focusedIndex.set(-1);
|
|
58
|
+
this.opened.emit();
|
|
59
|
+
this.overlayRef
|
|
60
|
+
.backdropClick()
|
|
61
|
+
.pipe(take(1))
|
|
62
|
+
.subscribe(() => {
|
|
63
|
+
this.close();
|
|
64
|
+
});
|
|
65
|
+
this.overlayRef
|
|
66
|
+
.keydownEvents()
|
|
67
|
+
.pipe(take(1))
|
|
68
|
+
.subscribe((event) => {
|
|
69
|
+
if (event.key === 'Escape') {
|
|
70
|
+
this.close();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
close() {
|
|
75
|
+
if (!this.isOpen()) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (this.overlayRef) {
|
|
79
|
+
this.overlayRef.dispose();
|
|
80
|
+
this.overlayRef = null;
|
|
81
|
+
}
|
|
82
|
+
this.portal = null;
|
|
83
|
+
this.isOpen.set(false);
|
|
84
|
+
this.focusedIndex.set(-1);
|
|
85
|
+
this.closed.emit();
|
|
86
|
+
}
|
|
87
|
+
toggle(triggerElement) {
|
|
88
|
+
if (this.isOpen()) {
|
|
89
|
+
this.close();
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.open(triggerElement);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
onMenuItemClick(item) {
|
|
96
|
+
if (item.disabled) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.menuItemClick.emit(item);
|
|
100
|
+
this.close();
|
|
101
|
+
}
|
|
102
|
+
onKeyDown(event) {
|
|
103
|
+
const items = this.menuItems();
|
|
104
|
+
const currentIndex = this.focusedIndex();
|
|
105
|
+
let nextIndex;
|
|
106
|
+
let prevIndex;
|
|
107
|
+
switch (event.key) {
|
|
108
|
+
case 'ArrowDown':
|
|
109
|
+
event.preventDefault();
|
|
110
|
+
nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;
|
|
111
|
+
this.focusedIndex.set(nextIndex);
|
|
112
|
+
break;
|
|
113
|
+
case 'ArrowUp':
|
|
114
|
+
event.preventDefault();
|
|
115
|
+
prevIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;
|
|
116
|
+
this.focusedIndex.set(prevIndex);
|
|
117
|
+
break;
|
|
118
|
+
case 'Enter':
|
|
119
|
+
case ' ':
|
|
120
|
+
event.preventDefault();
|
|
121
|
+
if (currentIndex >= 0 && currentIndex < items.length) {
|
|
122
|
+
this.onMenuItemClick(items[currentIndex]);
|
|
123
|
+
}
|
|
124
|
+
break;
|
|
125
|
+
case 'Escape':
|
|
126
|
+
event.preventDefault();
|
|
127
|
+
this.close();
|
|
128
|
+
break;
|
|
129
|
+
case 'Tab':
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
if (event.shiftKey) {
|
|
132
|
+
// Shift+Tab - move to previous item
|
|
133
|
+
prevIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;
|
|
134
|
+
this.focusedIndex.set(prevIndex);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Tab - move to next item
|
|
138
|
+
nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;
|
|
139
|
+
this.focusedIndex.set(nextIndex);
|
|
140
|
+
}
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
createPositionStrategy(target) {
|
|
145
|
+
const positions = [
|
|
146
|
+
// Bottom-right (default)
|
|
147
|
+
{
|
|
148
|
+
originX: 'end',
|
|
149
|
+
originY: 'bottom',
|
|
150
|
+
overlayX: 'start',
|
|
151
|
+
overlayY: 'top',
|
|
152
|
+
offsetX: 0,
|
|
153
|
+
offsetY: 4,
|
|
154
|
+
},
|
|
155
|
+
// Bottom-left (if not enough space on right)
|
|
156
|
+
{
|
|
157
|
+
originX: 'start',
|
|
158
|
+
originY: 'bottom',
|
|
159
|
+
overlayX: 'end',
|
|
160
|
+
overlayY: 'top',
|
|
161
|
+
offsetX: 0,
|
|
162
|
+
offsetY: 4,
|
|
163
|
+
},
|
|
164
|
+
// Top-right (if not enough space below)
|
|
165
|
+
{
|
|
166
|
+
originX: 'end',
|
|
167
|
+
originY: 'top',
|
|
168
|
+
overlayX: 'start',
|
|
169
|
+
overlayY: 'bottom',
|
|
170
|
+
offsetX: 0,
|
|
171
|
+
offsetY: -4,
|
|
172
|
+
},
|
|
173
|
+
// Top-left (if not enough space below and on right)
|
|
174
|
+
{
|
|
175
|
+
originX: 'start',
|
|
176
|
+
originY: 'top',
|
|
177
|
+
overlayX: 'end',
|
|
178
|
+
overlayY: 'bottom',
|
|
179
|
+
offsetX: 0,
|
|
180
|
+
offsetY: -4,
|
|
181
|
+
},
|
|
182
|
+
];
|
|
183
|
+
return this.positionBuilder
|
|
184
|
+
.flexibleConnectedTo(target)
|
|
185
|
+
.withPositions(positions)
|
|
186
|
+
.withFlexibleDimensions(true)
|
|
187
|
+
.withPush(true)
|
|
188
|
+
.withGrowAfterOpen(true)
|
|
189
|
+
.withViewportMargin(8);
|
|
190
|
+
}
|
|
191
|
+
setupKeyboardNavigation() {
|
|
192
|
+
if (!this.overlayRef) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const keydownEvents = this.overlayRef.keydownEvents();
|
|
196
|
+
keydownEvents.subscribe((event) => {
|
|
197
|
+
this.onKeyDown(event);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PopoverMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
201
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: PopoverMenuComponent, isStandalone: true, selector: "ap-popover-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, largeMenuEnabled: { classPropertyName: "largeMenuEnabled", publicName: "largeMenuEnabled", isSignal: true, isRequired: false, transformFunction: null }, showBackdrop: { classPropertyName: "showBackdrop", publicName: "showBackdrop", isSignal: true, isRequired: false, transformFunction: null }, customWidth: { classPropertyName: "customWidth", publicName: "customWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { menuItemClick: "menuItemClick", opened: "opened", closed: "closed" }, providers: [withSymbols(apInfo, apFeatureLock)], queries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "menuTemplate", first: true, predicate: ["menuTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #menuTemplate>\n <!-- Menu -->\n <div\n class=\"ap-popover-menu__content\"\n role=\"menu\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Menu'\"\n [class.ap-popover-menu__content--default]=\"!largeMenuEnabled() && !customWidth()\"\n [class.ap-popover-menu__content--large]=\"largeMenuEnabled()\"\n [style.width]=\"customWidth() ? customWidth() + 'px' : undefined\"\n (keydown)=\"onKeyDown($event)\">\n <!-- Menu items -->\n @for (item of items(); track item.label) {\n <!-- Divider -->\n @if (item.divider) {\n <div\n class=\"ap-popover-menu__divider\"\n role=\"separator\"></div>\n } @else {\n <!-- Menu item -->\n <button\n type=\"button\"\n role=\"menuitem\"\n class=\"ap-popover-menu__item\"\n [class.ap-popover-menu__item--has-description]=\"item.description\"\n [class.ap-popover-menu__item--disabled]=\"item.disabled\"\n [class.ap-popover-menu__item--focused]=\"focusedIndex() === $index\"\n [class.ap-popover-menu__item--red-mode]=\"item.redModeEnabled\"\n [class.ap-popover-menu__item--feature-lock]=\"item.featureLockEnabled\"\n [attr.aria-disabled]=\"item.disabled\"\n [disabled]=\"item.disabled\"\n [apTooltip]=\"item.itemTooltipText\"\n (click)=\"onMenuItemClick(item)\">\n <!-- Left icon -->\n @if (item.symbolId) {\n <ap-symbol\n class=\"ap-popover-menu__item-left-icon\"\n size=\"sm\"\n [color]=\"item.symbolColor ? item.symbolColor : item.redModeEnabled ? 'red' : 'grey'\"\n [symbolId]=\"item.symbolId\" />\n }\n <!-- Label -->\n <div class=\"ap-popover-menu__item-text-container\">\n <div class=\"ap-popover-menu__item-label-container\">\n <div class=\"ap-popover-menu__item-label\">{{ item.label }}</div>\n <!-- Badge -->\n @if (item.badgeLabel) {\n <ap-badge\n class=\"ap-popover-menu__item-badge\"\n color=\"blue\">\n {{ item.badgeLabel }}\n </ap-badge>\n }\n </div>\n <!-- Description -->\n <div class=\"ap-popover-menu__item-description\">{{ item.description }}</div>\n </div>\n <!-- Tooltip icon -->\n @if (item.iconTooltipText) {\n <ap-symbol\n class=\"ap-popover-menu__item-right-icon\"\n size=\"sm\"\n color=\"grey-blue\"\n symbolId=\"info\"\n [apTooltip]=\"item.iconTooltipText\" />\n }\n <!-- Feature lock icon -->\n @if (item.featureLockEnabled) {\n <ap-symbol\n class=\"ap-popover-menu__item-right-icon\"\n size=\"sm\"\n color=\"purple\"\n symbolId=\"feature-lock\" />\n }\n </button>\n }\n }\n </div>\n</ng-template>\n", styles: [".ap-popover-menu__content{background-color:var(--comp-popover-menu-background-color);border:1px solid var(--comp-popover-menu-border-color);border-radius:var(--comp-popover-menu-border-radius);box-shadow:var(--comp-popover-menu-box-shadow);padding:var(--comp-popover-menu-padding);outline:none;overflow:hidden;z-index:1000}.ap-popover-menu__content.ap-popover-menu__content--default{width:250px}.ap-popover-menu__content.ap-popover-menu__content--large{width:340px}.ap-popover-menu__content:focus{outline:2px solid var(--comp-popover-menu-item-background-color-focused);outline-offset:2px}.ap-popover-menu__item{display:flex;align-items:center;width:100%;height:40px;padding:var(--comp-popover-menu-item-padding);border:none;background:transparent;color:var(--comp-popover-menu-item-text-color);cursor:pointer;font-family:Averta;font-size:var(--comp-popover-menu-item-text-size);line-height:var(--comp-popover-menu-item-text-line-height);text-align:left;transition:background-color .2s ease,color .2s ease}.ap-popover-menu__item:hover{background-color:var(--comp-popover-menu-item-background-color-hover)}.ap-popover-menu__item:focus{outline:none;background-color:var(--comp-popover-menu-item-background-color-focused)}.ap-popover-menu__item.ap-popover-menu__item--has-description{height:auto;min-height:50px}.ap-popover-menu__item.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-focused)}.ap-popover-menu__item.ap-popover-menu__item--disabled{cursor:not-allowed;opacity:.4}.ap-popover-menu__item.ap-popover-menu__item--red-mode{color:var(--comp-popover-menu-item-text-color-red-mode)}.ap-popover-menu__item.ap-popover-menu__item--red-mode:hover{background-color:var(--comp-popover-menu-item-background-color-red-mode-hover)}.ap-popover-menu__item.ap-popover-menu__item--red-mode:focus{background-color:var(--comp-popover-menu-item-background-color-red-mode-focused)}.ap-popover-menu__item.ap-popover-menu__item--red-mode.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-red-mode-focused)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock:hover{background-color:var(--comp-popover-menu-item-background-color-feature-lock-hover)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock:focus{background-color:var(--comp-popover-menu-item-background-color-feature-lock-focused)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-feature-lock-focused)}.ap-popover-menu__item.ap-popover-menu__item--disabled:hover{background-color:transparent}.ap-popover-menu__item .ap-popover-menu__item-left-icon{margin-right:var(--comp-popover-menu-item-icon-spacing)}.ap-popover-menu__item .ap-popover-menu__item-right-icon{margin-left:var(--comp-popover-menu-item-icon-spacing)}.ap-popover-menu__item .ap-popover-menu__item-text-container{display:flex;flex-direction:column;flex:1;min-width:0}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-label-container{display:flex;align-items:center;gap:var(--comp-popover-menu-item-label-spacing);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-label-container .ap-popover-menu__item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-description{color:var(--ref-color-grey-80);font-size:var(--ref-font-size-xs);line-height:var(--ref-font-line-height-xs)}.ap-popover-menu__divider{height:1px;background-color:var(--comp-popover-menu-divider-color);margin:var(--comp-popover-menu-divider-margin)}\n"], dependencies: [{ kind: "component", type: BadgeComponent, selector: "ap-badge", inputs: ["color"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }, { kind: "directive", type: TooltipDirective, selector: "[apTooltip]", inputs: ["apTooltip", "apTooltipPosition", "apTooltipShowDelay", "apTooltipHideDelay", "apTooltipDuration", "apTooltipDisabled", "apTooltipTruncatedTextOnly", "apTooltipTemplateContext", "apTooltipVirtualScrollElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
202
|
+
}
|
|
203
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PopoverMenuComponent, decorators: [{
|
|
204
|
+
type: Component,
|
|
205
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ap-popover-menu', standalone: true, imports: [BadgeComponent, CommonModule, SymbolComponent, TooltipDirective], providers: [withSymbols(apInfo, apFeatureLock)], template: "<ng-template #menuTemplate>\n <!-- Menu -->\n <div\n class=\"ap-popover-menu__content\"\n role=\"menu\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Menu'\"\n [class.ap-popover-menu__content--default]=\"!largeMenuEnabled() && !customWidth()\"\n [class.ap-popover-menu__content--large]=\"largeMenuEnabled()\"\n [style.width]=\"customWidth() ? customWidth() + 'px' : undefined\"\n (keydown)=\"onKeyDown($event)\">\n <!-- Menu items -->\n @for (item of items(); track item.label) {\n <!-- Divider -->\n @if (item.divider) {\n <div\n class=\"ap-popover-menu__divider\"\n role=\"separator\"></div>\n } @else {\n <!-- Menu item -->\n <button\n type=\"button\"\n role=\"menuitem\"\n class=\"ap-popover-menu__item\"\n [class.ap-popover-menu__item--has-description]=\"item.description\"\n [class.ap-popover-menu__item--disabled]=\"item.disabled\"\n [class.ap-popover-menu__item--focused]=\"focusedIndex() === $index\"\n [class.ap-popover-menu__item--red-mode]=\"item.redModeEnabled\"\n [class.ap-popover-menu__item--feature-lock]=\"item.featureLockEnabled\"\n [attr.aria-disabled]=\"item.disabled\"\n [disabled]=\"item.disabled\"\n [apTooltip]=\"item.itemTooltipText\"\n (click)=\"onMenuItemClick(item)\">\n <!-- Left icon -->\n @if (item.symbolId) {\n <ap-symbol\n class=\"ap-popover-menu__item-left-icon\"\n size=\"sm\"\n [color]=\"item.symbolColor ? item.symbolColor : item.redModeEnabled ? 'red' : 'grey'\"\n [symbolId]=\"item.symbolId\" />\n }\n <!-- Label -->\n <div class=\"ap-popover-menu__item-text-container\">\n <div class=\"ap-popover-menu__item-label-container\">\n <div class=\"ap-popover-menu__item-label\">{{ item.label }}</div>\n <!-- Badge -->\n @if (item.badgeLabel) {\n <ap-badge\n class=\"ap-popover-menu__item-badge\"\n color=\"blue\">\n {{ item.badgeLabel }}\n </ap-badge>\n }\n </div>\n <!-- Description -->\n <div class=\"ap-popover-menu__item-description\">{{ item.description }}</div>\n </div>\n <!-- Tooltip icon -->\n @if (item.iconTooltipText) {\n <ap-symbol\n class=\"ap-popover-menu__item-right-icon\"\n size=\"sm\"\n color=\"grey-blue\"\n symbolId=\"info\"\n [apTooltip]=\"item.iconTooltipText\" />\n }\n <!-- Feature lock icon -->\n @if (item.featureLockEnabled) {\n <ap-symbol\n class=\"ap-popover-menu__item-right-icon\"\n size=\"sm\"\n color=\"purple\"\n symbolId=\"feature-lock\" />\n }\n </button>\n }\n }\n </div>\n</ng-template>\n", styles: [".ap-popover-menu__content{background-color:var(--comp-popover-menu-background-color);border:1px solid var(--comp-popover-menu-border-color);border-radius:var(--comp-popover-menu-border-radius);box-shadow:var(--comp-popover-menu-box-shadow);padding:var(--comp-popover-menu-padding);outline:none;overflow:hidden;z-index:1000}.ap-popover-menu__content.ap-popover-menu__content--default{width:250px}.ap-popover-menu__content.ap-popover-menu__content--large{width:340px}.ap-popover-menu__content:focus{outline:2px solid var(--comp-popover-menu-item-background-color-focused);outline-offset:2px}.ap-popover-menu__item{display:flex;align-items:center;width:100%;height:40px;padding:var(--comp-popover-menu-item-padding);border:none;background:transparent;color:var(--comp-popover-menu-item-text-color);cursor:pointer;font-family:Averta;font-size:var(--comp-popover-menu-item-text-size);line-height:var(--comp-popover-menu-item-text-line-height);text-align:left;transition:background-color .2s ease,color .2s ease}.ap-popover-menu__item:hover{background-color:var(--comp-popover-menu-item-background-color-hover)}.ap-popover-menu__item:focus{outline:none;background-color:var(--comp-popover-menu-item-background-color-focused)}.ap-popover-menu__item.ap-popover-menu__item--has-description{height:auto;min-height:50px}.ap-popover-menu__item.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-focused)}.ap-popover-menu__item.ap-popover-menu__item--disabled{cursor:not-allowed;opacity:.4}.ap-popover-menu__item.ap-popover-menu__item--red-mode{color:var(--comp-popover-menu-item-text-color-red-mode)}.ap-popover-menu__item.ap-popover-menu__item--red-mode:hover{background-color:var(--comp-popover-menu-item-background-color-red-mode-hover)}.ap-popover-menu__item.ap-popover-menu__item--red-mode:focus{background-color:var(--comp-popover-menu-item-background-color-red-mode-focused)}.ap-popover-menu__item.ap-popover-menu__item--red-mode.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-red-mode-focused)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock:hover{background-color:var(--comp-popover-menu-item-background-color-feature-lock-hover)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock:focus{background-color:var(--comp-popover-menu-item-background-color-feature-lock-focused)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-feature-lock-focused)}.ap-popover-menu__item.ap-popover-menu__item--disabled:hover{background-color:transparent}.ap-popover-menu__item .ap-popover-menu__item-left-icon{margin-right:var(--comp-popover-menu-item-icon-spacing)}.ap-popover-menu__item .ap-popover-menu__item-right-icon{margin-left:var(--comp-popover-menu-item-icon-spacing)}.ap-popover-menu__item .ap-popover-menu__item-text-container{display:flex;flex-direction:column;flex:1;min-width:0}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-label-container{display:flex;align-items:center;gap:var(--comp-popover-menu-item-label-spacing);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-label-container .ap-popover-menu__item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-description{color:var(--ref-color-grey-80);font-size:var(--ref-font-size-xs);line-height:var(--ref-font-line-height-xs)}.ap-popover-menu__divider{height:1px;background-color:var(--comp-popover-menu-divider-color);margin:var(--comp-popover-menu-divider-margin)}\n"] }]
|
|
206
|
+
}], ctorParameters: () => [] });
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9wb3BvdmVyLW1lbnUvc3JjL3BvcG92ZXItbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvcG9wb3Zlci1tZW51L3NyYy9wb3BvdmVyLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBb0IsYUFBYSxFQUFFLE1BQU0sRUFBZSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0gsT0FBTyxFQUF3RCxPQUFPLEVBQUUsc0JBQXNCLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6SSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBeUJ0QyxNQUFNLE9BQU8sb0JBQW9CO0lBQ1osVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLGVBQWUsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNqRCxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU3RCxZQUFZLEdBQUcsU0FBUyxDQUF1QixjQUFjLENBQUMsQ0FBQztJQUMvRCxPQUFPLEdBQUcsWUFBWSxDQUF1QixTQUFTLENBQUMsQ0FBQztJQUV4RCxLQUFLLEdBQUcsS0FBSyxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUNyQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLFdBQVcsR0FBRyxLQUFLLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBRXpDLGFBQWEsR0FBRyxNQUFNLEVBQW1CLENBQUM7SUFDMUMsTUFBTSxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBQ3hCLE1BQU0sR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUVoQixVQUFVLEdBQXNCLElBQUksQ0FBQztJQUNyQyxNQUFNLEdBQW1DLElBQUksQ0FBQztJQUVuQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRTFGO1FBQ0ksTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNSLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ25DLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxJQUFJLENBQUMsY0FBNEI7UUFDN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXpDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BELE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBRS9ELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbEMsZ0JBQWdCO1lBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2hDLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFO1NBQzdELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbkIsSUFBSSxDQUFDLFVBQVU7YUFDVixhQUFhLEVBQUU7YUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxVQUFVO2FBQ1YsYUFBYSxFQUFFO2FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUNoQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNqQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQTRCO1FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFxQjtRQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQW9CO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksU0FBaUIsQ0FBQztRQUV0QixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQixLQUFLLFdBQVc7Z0JBQ1osS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixTQUFTLEdBQUcsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNqQyxNQUFNO1lBRVYsS0FBSyxTQUFTO2dCQUNWLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsU0FBUyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakMsTUFBTTtZQUVWLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxHQUFHO2dCQUNKLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxZQUFZLElBQUksQ0FBQyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLENBQUM7Z0JBQ0QsTUFBTTtZQUVWLEtBQUssUUFBUTtnQkFDVCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixNQUFNO1lBRVYsS0FBSyxLQUFLO2dCQUNOLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2pCLG9DQUFvQztvQkFDcEMsU0FBUyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDckMsQ0FBQztxQkFBTSxDQUFDO29CQUNKLDBCQUEwQjtvQkFDMUIsU0FBUyxHQUFHLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDckMsQ0FBQztnQkFDRCxNQUFNO1FBQ2QsQ0FBQztJQUNMLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxNQUFtQjtRQUM5QyxNQUFNLFNBQVMsR0FBd0I7WUFDbkMseUJBQXlCO1lBQ3pCO2dCQUNJLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixRQUFRLEVBQUUsT0FBTztnQkFDakIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLENBQUM7YUFDYjtZQUNELDZDQUE2QztZQUM3QztnQkFDSSxPQUFPLEVBQUUsT0FBTztnQkFDaEIsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFFBQVEsRUFBRSxLQUFLO2dCQUNmLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sRUFBRSxDQUFDO2FBQ2I7WUFDRCx3Q0FBd0M7WUFDeEM7Z0JBQ0ksT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ2Q7WUFDRCxvREFBb0Q7WUFDcEQ7Z0JBQ0ksT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ2Q7U0FDSixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsZUFBZTthQUN0QixtQkFBbUIsQ0FBQyxNQUFNLENBQUM7YUFDM0IsYUFBYSxDQUFDLFNBQVMsQ0FBQzthQUN4QixzQkFBc0IsQ0FBQyxJQUFJLENBQUM7YUFDNUIsUUFBUSxDQUFDLElBQUksQ0FBQzthQUNkLGlCQUFpQixDQUFDLElBQUksQ0FBQzthQUN2QixrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXRELGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7dUdBN05RLG9CQUFvQjsyRkFBcEIsb0JBQW9CLG8wQkFGbEIsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLHdRQzVDbkQsdXZIQStFQSwwdUhEcENjLGNBQWMsdUVBQUUsWUFBWSwrQkFBRSxlQUFlLHNIQUFFLGdCQUFnQjs7MkZBR2hFLG9CQUFvQjtrQkFUaEMsU0FBUztzQ0FDVyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDLGlCQUFpQixjQUdmLElBQUksV0FDUCxDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLGFBQy9ELENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhZGdlQ29tcG9uZW50IH0gZnJvbSAnQGFnb3JhcHVsc2UvdWktY29tcG9uZW50cy9iYWRnZSc7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFnb3JhcHVsc2UvdWktY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IGFnb3JhcHVsc2VTeW1ib2wsIGFwRmVhdHVyZUxvY2ssIGFwSW5mbywgU3ltYm9sQ29sb3IsIFN5bWJvbENvbXBvbmVudCwgd2l0aFN5bWJvbHMgfSBmcm9tICdAYWdvcmFwdWxzZS91aS1zeW1ib2wnO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSwgT3ZlcmxheSwgT3ZlcmxheVBvc2l0aW9uQnVpbGRlciwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgY29udGVudENoaWxkLFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIHZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9wb3Zlck1lbnVJdGVtIHtcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBiYWRnZUxhYmVsPzogc3RyaW5nO1xuICAgIHN5bWJvbElkPzogYWdvcmFwdWxzZVN5bWJvbDtcbiAgICBzeW1ib2xDb2xvcj86IFN5bWJvbENvbG9yO1xuICAgIGZlYXR1cmVMb2NrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgcmVkTW9kZUVuYWJsZWQ/OiBib29sZWFuO1xuICAgIGl0ZW1Ub29sdGlwVGV4dD86IHN0cmluZztcbiAgICBpY29uVG9vbHRpcFRleHQ/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGRpdmlkZXI/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2FwLXBvcG92ZXItbWVudScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXItbWVudS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcG9wb3Zlci1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQmFkZ2VDb21wb25lbnQsIENvbW1vbk1vZHVsZSwgU3ltYm9sQ29tcG9uZW50LCBUb29sdGlwRGlyZWN0aXZlXSxcbiAgICBwcm92aWRlcnM6IFt3aXRoU3ltYm9scyhhcEluZm8sIGFwRmVhdHVyZUxvY2spXSxcbn0pXG5leHBvcnQgY2xhc3MgUG9wb3Zlck1lbnVDb21wb25lbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3NpdGlvbkJ1aWxkZXIgPSBpbmplY3QoT3ZlcmxheVBvc2l0aW9uQnVpbGRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXG4gICAgbWVudVRlbXBsYXRlID0gdmlld0NoaWxkPFRlbXBsYXRlUmVmPHVua25vd24+PignbWVudVRlbXBsYXRlJyk7XG4gICAgdHJpZ2dlciA9IGNvbnRlbnRDaGlsZDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oJ3RyaWdnZXInKTtcblxuICAgIGl0ZW1zID0gaW5wdXQ8UG9wb3Zlck1lbnVJdGVtW10+KFtdKTtcbiAgICBkaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcbiAgICBsYXJnZU1lbnVFbmFibGVkID0gaW5wdXQoZmFsc2UpO1xuICAgIHNob3dCYWNrZHJvcCA9IGlucHV0KHRydWUpO1xuICAgIGN1c3RvbVdpZHRoID0gaW5wdXQ8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgICBtZW51SXRlbUNsaWNrID0gb3V0cHV0PFBvcG92ZXJNZW51SXRlbT4oKTtcbiAgICBvcGVuZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgICBjbG9zZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcG9ydGFsOiBUZW1wbGF0ZVBvcnRhbDx1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGZvY3VzZWRJbmRleCA9IHNpZ25hbCgtMSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1lbnVJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXZpZGVyKSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEtleWJvYXJkTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuKHRyaWdnZXJFbGVtZW50PzogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWVudVRlbXBsYXRlID0gdGhpcy5tZW51VGVtcGxhdGUoKTtcblxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpIHx8IHRoaXMuaXNPcGVuKCkgfHwgIW1lbnVUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHJpZ2dlckVsZW1lbnQgfHwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLmNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3kodGFyZ2V0KTtcblxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdGhpcy5zaG93QmFja2Ryb3AoKSxcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICcnLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJycsXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChtZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2godGhpcy5wb3J0YWwpO1xuXG4gICAgICAgIHRoaXMuaXNPcGVuLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KC0xKTtcbiAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCgpO1xuXG4gICAgICAgIHRoaXMub3ZlcmxheVJlZlxuICAgICAgICAgICAgLmJhY2tkcm9wQ2xpY2soKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub3ZlcmxheVJlZlxuICAgICAgICAgICAgLmtleWRvd25FdmVudHMoKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wb3J0YWwgPSBudWxsO1xuICAgICAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQoLTEpO1xuICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlKHRyaWdnZXJFbGVtZW50PzogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3Blbih0cmlnZ2VyRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1lbnVJdGVtQ2xpY2soaXRlbTogUG9wb3Zlck1lbnVJdGVtKTogdm9pZCB7XG4gICAgICAgIGlmIChpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1lbnVJdGVtQ2xpY2suZW1pdChpdGVtKTtcblxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tZW51SXRlbXMoKTtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5mb2N1c2VkSW5kZXgoKTtcbiAgICAgICAgbGV0IG5leHRJbmRleDogbnVtYmVyO1xuICAgICAgICBsZXQgcHJldkluZGV4OiBudW1iZXI7XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggPCBpdGVtcy5sZW5ndGggLSAxID8gY3VycmVudEluZGV4ICsgMSA6IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KG5leHRJbmRleCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcHJldkluZGV4ID0gY3VycmVudEluZGV4ID4gMCA/IGN1cnJlbnRJbmRleCAtIDEgOiBpdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldChwcmV2SW5kZXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gMCAmJiBjdXJyZW50SW5kZXggPCBpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk1lbnVJdGVtQ2xpY2soaXRlbXNbY3VycmVudEluZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdUYWInOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNoaWZ0K1RhYiAtIG1vdmUgdG8gcHJldmlvdXMgaXRlbVxuICAgICAgICAgICAgICAgICAgICBwcmV2SW5kZXggPSBjdXJyZW50SW5kZXggPiAwID8gY3VycmVudEluZGV4IC0gMSA6IGl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldChwcmV2SW5kZXgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRhYiAtIG1vdmUgdG8gbmV4dCBpdGVtXG4gICAgICAgICAgICAgICAgICAgIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEgPyBjdXJyZW50SW5kZXggKyAxIDogMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KG5leHRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQb3NpdGlvblN0cmF0ZWd5KHRhcmdldDogSFRNTEVsZW1lbnQpOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbXG4gICAgICAgICAgICAvLyBCb3R0b20tcmlnaHQgKGRlZmF1bHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICAgICAgICAgIG9mZnNldFg6IDAsXG4gICAgICAgICAgICAgICAgb2Zmc2V0WTogNCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBCb3R0b20tbGVmdCAoaWYgbm90IGVub3VnaCBzcGFjZSBvbiByaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgICAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgICAgICAgICBvZmZzZXRZOiA0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIFRvcC1yaWdodCAoaWYgbm90IGVub3VnaCBzcGFjZSBiZWxvdylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICAgICAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgICAgICAgICBvZmZzZXRZOiAtNCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBUb3AtbGVmdCAoaWYgbm90IGVub3VnaCBzcGFjZSBiZWxvdyBhbmQgb24gcmlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgIG9mZnNldFg6IDAsXG4gICAgICAgICAgICAgICAgb2Zmc2V0WTogLTQsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uQnVpbGRlclxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGFyZ2V0KVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMocG9zaXRpb25zKVxuICAgICAgICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnModHJ1ZSlcbiAgICAgICAgICAgIC53aXRoUHVzaCh0cnVlKVxuICAgICAgICAgICAgLndpdGhHcm93QWZ0ZXJPcGVuKHRydWUpXG4gICAgICAgICAgICAud2l0aFZpZXdwb3J0TWFyZ2luKDgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBLZXlib2FyZE5hdmlnYXRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXlkb3duRXZlbnRzID0gdGhpcy5vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKTtcblxuICAgICAgICBrZXlkb3duRXZlbnRzLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNtZW51VGVtcGxhdGU+XG4gICAgPCEtLSBNZW51IC0tPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJhcC1wb3BvdmVyLW1lbnVfX2NvbnRlbnRcIlxuICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51J1wiXG4gICAgICAgIFtjbGFzcy5hcC1wb3BvdmVyLW1lbnVfX2NvbnRlbnQtLWRlZmF1bHRdPVwiIWxhcmdlTWVudUVuYWJsZWQoKSAmJiAhY3VzdG9tV2lkdGgoKVwiXG4gICAgICAgIFtjbGFzcy5hcC1wb3BvdmVyLW1lbnVfX2NvbnRlbnQtLWxhcmdlXT1cImxhcmdlTWVudUVuYWJsZWQoKVwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJjdXN0b21XaWR0aCgpID8gY3VzdG9tV2lkdGgoKSArICdweCcgOiB1bmRlZmluZWRcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiPlxuICAgICAgICA8IS0tIE1lbnUgaXRlbXMgLS0+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXMoKTsgdHJhY2sgaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgPCEtLSBEaXZpZGVyIC0tPlxuICAgICAgICAgICAgQGlmIChpdGVtLmRpdmlkZXIpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXAtcG9wb3Zlci1tZW51X19kaXZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInNlcGFyYXRvclwiPjwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPCEtLSBNZW51IGl0ZW0gLS0+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcC1wb3BvdmVyLW1lbnVfX2l0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXAtcG9wb3Zlci1tZW51X19pdGVtLS1oYXMtZGVzY3JpcHRpb25dPVwiaXRlbS5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hcC1wb3BvdmVyLW1lbnVfX2l0ZW0tLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXAtcG9wb3Zlci1tZW51X19pdGVtLS1mb2N1c2VkXT1cImZvY3VzZWRJbmRleCgpID09PSAkaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXAtcG9wb3Zlci1tZW51X19pdGVtLS1yZWQtbW9kZV09XCJpdGVtLnJlZE1vZGVFbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFwLXBvcG92ZXItbWVudV9faXRlbS0tZmVhdHVyZS1sb2NrXT1cIml0ZW0uZmVhdHVyZUxvY2tFbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXBUb29sdGlwXT1cIml0ZW0uaXRlbVRvb2x0aXBUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWVudUl0ZW1DbGljayhpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIExlZnQgaWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLnN5bWJvbElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXAtc3ltYm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcC1wb3BvdmVyLW1lbnVfX2l0ZW0tbGVmdC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJpdGVtLnN5bWJvbENvbG9yID8gaXRlbS5zeW1ib2xDb2xvciA6IGl0ZW0ucmVkTW9kZUVuYWJsZWQgPyAncmVkJyA6ICdncmV5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5bWJvbElkXT1cIml0ZW0uc3ltYm9sSWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTGFiZWwgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcC1wb3BvdmVyLW1lbnVfX2l0ZW0tdGV4dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcC1wb3BvdmVyLW1lbnVfX2l0ZW0tbGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwLXBvcG92ZXItbWVudV9faXRlbS1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEJhZGdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5iYWRnZUxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1iYWRnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcC1wb3BvdmVyLW1lbnVfX2l0ZW0tYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJibHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmJhZGdlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcC1iYWRnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGVzY3JpcHRpb24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXAtcG9wb3Zlci1tZW51X19pdGVtLWRlc2NyaXB0aW9uXCI+e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBUb29sdGlwIGljb24gLS0+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pY29uVG9vbHRpcFRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1zeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFwLXBvcG92ZXItbWVudV9faXRlbS1yaWdodC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiZ3JleS1ibHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xJZD1cImluZm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcFRvb2x0aXBdPVwiaXRlbS5pY29uVG9vbHRpcFRleHRcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRmVhdHVyZSBsb2NrIGljb24gLS0+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5mZWF0dXJlTG9ja0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcC1zeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFwLXBvcG92ZXItbWVudV9faXRlbS1yaWdodC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHVycGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xJZD1cImZlYXR1cmUtbG9ja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { PopoverMenuTriggerDirective } from './popover-menu-trigger.directive';
|
|
2
|
+
export { PopoverMenuComponent } from './popover-menu.component';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9wb3BvdmVyLW1lbnUvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFtQixNQUFNLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUG9wb3Zlck1lbnVUcmlnZ2VyRGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLW1lbnUtdHJpZ2dlci5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgUG9wb3Zlck1lbnVDb21wb25lbnQsIFBvcG92ZXJNZW51SXRlbSB9IGZyb20gJy4vcG9wb3Zlci1tZW51LmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, ElementRef, input, output, HostListener, Directive, ViewContainerRef, viewChild, contentChild, signal, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { BadgeComponent } from '@agorapulse/ui-components/badge';
|
|
4
|
+
import { TooltipDirective } from '@agorapulse/ui-components/tooltip';
|
|
5
|
+
import { SymbolComponent, withSymbols, apInfo, apFeatureLock } from '@agorapulse/ui-symbol';
|
|
6
|
+
import { Overlay, OverlayPositionBuilder } from '@angular/cdk/overlay';
|
|
7
|
+
import { TemplatePortal } from '@angular/cdk/portal';
|
|
8
|
+
import { CommonModule } from '@angular/common';
|
|
9
|
+
import { take } from 'rxjs/operators';
|
|
10
|
+
|
|
11
|
+
class PopoverMenuTriggerDirective {
|
|
12
|
+
elementRef = inject((ElementRef));
|
|
13
|
+
apPopoverMenuTrigger = input.required();
|
|
14
|
+
popoverMenuItems = input([]);
|
|
15
|
+
disabled = input(false);
|
|
16
|
+
menuItemClick = output();
|
|
17
|
+
opened = output();
|
|
18
|
+
closed = output();
|
|
19
|
+
onClick(event) {
|
|
20
|
+
event.preventDefault();
|
|
21
|
+
event.stopPropagation();
|
|
22
|
+
if (this.disabled()) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const popoverMenu = this.apPopoverMenuTrigger();
|
|
26
|
+
if (popoverMenu) {
|
|
27
|
+
popoverMenu.toggle(this.elementRef.nativeElement);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
onKeyDown(event) {
|
|
31
|
+
if (this.disabled()) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const popoverMenu = this.apPopoverMenuTrigger();
|
|
35
|
+
if (popoverMenu) {
|
|
36
|
+
switch (event.key) {
|
|
37
|
+
case 'Enter':
|
|
38
|
+
case ' ':
|
|
39
|
+
case 'ArrowDown':
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
popoverMenu.open(this.elementRef.nativeElement);
|
|
42
|
+
break;
|
|
43
|
+
case 'Escape':
|
|
44
|
+
event.preventDefault();
|
|
45
|
+
popoverMenu.close();
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PopoverMenuTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
51
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.9", type: PopoverMenuTriggerDirective, isStandalone: true, selector: "[apPopoverMenuTrigger]", inputs: { apPopoverMenuTrigger: { classPropertyName: "apPopoverMenuTrigger", publicName: "apPopoverMenuTrigger", isSignal: true, isRequired: true, transformFunction: null }, popoverMenuItems: { classPropertyName: "popoverMenuItems", publicName: "popoverMenuItems", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { menuItemClick: "menuItemClick", opened: "opened", closed: "closed" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeyDown($event)" } }, ngImport: i0 });
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PopoverMenuTriggerDirective, decorators: [{
|
|
54
|
+
type: Directive,
|
|
55
|
+
args: [{
|
|
56
|
+
selector: '[apPopoverMenuTrigger]',
|
|
57
|
+
standalone: true,
|
|
58
|
+
}]
|
|
59
|
+
}], propDecorators: { onClick: [{
|
|
60
|
+
type: HostListener,
|
|
61
|
+
args: ['click', ['$event']]
|
|
62
|
+
}], onKeyDown: [{
|
|
63
|
+
type: HostListener,
|
|
64
|
+
args: ['keydown', ['$event']]
|
|
65
|
+
}] } });
|
|
66
|
+
|
|
67
|
+
class PopoverMenuComponent {
|
|
68
|
+
elementRef = inject(ElementRef);
|
|
69
|
+
overlay = inject(Overlay);
|
|
70
|
+
positionBuilder = inject(OverlayPositionBuilder);
|
|
71
|
+
viewContainerRef = inject(ViewContainerRef);
|
|
72
|
+
menuTemplate = viewChild('menuTemplate');
|
|
73
|
+
trigger = contentChild('trigger');
|
|
74
|
+
items = input([]);
|
|
75
|
+
disabled = input(false);
|
|
76
|
+
largeMenuEnabled = input(false);
|
|
77
|
+
showBackdrop = input(true);
|
|
78
|
+
customWidth = input(null);
|
|
79
|
+
menuItemClick = output();
|
|
80
|
+
opened = output();
|
|
81
|
+
closed = output();
|
|
82
|
+
overlayRef = null;
|
|
83
|
+
portal = null;
|
|
84
|
+
isOpen = signal(false);
|
|
85
|
+
focusedIndex = signal(-1);
|
|
86
|
+
menuItems = computed(() => this.items().filter(item => !item.divider));
|
|
87
|
+
constructor() {
|
|
88
|
+
effect(() => {
|
|
89
|
+
if (this.isOpen()) {
|
|
90
|
+
this.setupKeyboardNavigation();
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
open(triggerElement) {
|
|
95
|
+
const menuTemplate = this.menuTemplate();
|
|
96
|
+
if (this.disabled() || this.isOpen() || !menuTemplate) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const target = triggerElement || this.elementRef.nativeElement;
|
|
100
|
+
if (this.overlayRef) {
|
|
101
|
+
this.overlayRef.dispose();
|
|
102
|
+
}
|
|
103
|
+
const positionStrategy = this.createPositionStrategy(target);
|
|
104
|
+
this.overlayRef = this.overlay.create({
|
|
105
|
+
positionStrategy,
|
|
106
|
+
hasBackdrop: this.showBackdrop(),
|
|
107
|
+
backdropClass: '',
|
|
108
|
+
panelClass: '',
|
|
109
|
+
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
110
|
+
});
|
|
111
|
+
this.portal = new TemplatePortal(menuTemplate, this.viewContainerRef);
|
|
112
|
+
this.overlayRef.attach(this.portal);
|
|
113
|
+
this.isOpen.set(true);
|
|
114
|
+
this.focusedIndex.set(-1);
|
|
115
|
+
this.opened.emit();
|
|
116
|
+
this.overlayRef
|
|
117
|
+
.backdropClick()
|
|
118
|
+
.pipe(take(1))
|
|
119
|
+
.subscribe(() => {
|
|
120
|
+
this.close();
|
|
121
|
+
});
|
|
122
|
+
this.overlayRef
|
|
123
|
+
.keydownEvents()
|
|
124
|
+
.pipe(take(1))
|
|
125
|
+
.subscribe((event) => {
|
|
126
|
+
if (event.key === 'Escape') {
|
|
127
|
+
this.close();
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
close() {
|
|
132
|
+
if (!this.isOpen()) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (this.overlayRef) {
|
|
136
|
+
this.overlayRef.dispose();
|
|
137
|
+
this.overlayRef = null;
|
|
138
|
+
}
|
|
139
|
+
this.portal = null;
|
|
140
|
+
this.isOpen.set(false);
|
|
141
|
+
this.focusedIndex.set(-1);
|
|
142
|
+
this.closed.emit();
|
|
143
|
+
}
|
|
144
|
+
toggle(triggerElement) {
|
|
145
|
+
if (this.isOpen()) {
|
|
146
|
+
this.close();
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
this.open(triggerElement);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
onMenuItemClick(item) {
|
|
153
|
+
if (item.disabled) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
this.menuItemClick.emit(item);
|
|
157
|
+
this.close();
|
|
158
|
+
}
|
|
159
|
+
onKeyDown(event) {
|
|
160
|
+
const items = this.menuItems();
|
|
161
|
+
const currentIndex = this.focusedIndex();
|
|
162
|
+
let nextIndex;
|
|
163
|
+
let prevIndex;
|
|
164
|
+
switch (event.key) {
|
|
165
|
+
case 'ArrowDown':
|
|
166
|
+
event.preventDefault();
|
|
167
|
+
nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;
|
|
168
|
+
this.focusedIndex.set(nextIndex);
|
|
169
|
+
break;
|
|
170
|
+
case 'ArrowUp':
|
|
171
|
+
event.preventDefault();
|
|
172
|
+
prevIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;
|
|
173
|
+
this.focusedIndex.set(prevIndex);
|
|
174
|
+
break;
|
|
175
|
+
case 'Enter':
|
|
176
|
+
case ' ':
|
|
177
|
+
event.preventDefault();
|
|
178
|
+
if (currentIndex >= 0 && currentIndex < items.length) {
|
|
179
|
+
this.onMenuItemClick(items[currentIndex]);
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
case 'Escape':
|
|
183
|
+
event.preventDefault();
|
|
184
|
+
this.close();
|
|
185
|
+
break;
|
|
186
|
+
case 'Tab':
|
|
187
|
+
event.preventDefault();
|
|
188
|
+
if (event.shiftKey) {
|
|
189
|
+
// Shift+Tab - move to previous item
|
|
190
|
+
prevIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;
|
|
191
|
+
this.focusedIndex.set(prevIndex);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
// Tab - move to next item
|
|
195
|
+
nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;
|
|
196
|
+
this.focusedIndex.set(nextIndex);
|
|
197
|
+
}
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
createPositionStrategy(target) {
|
|
202
|
+
const positions = [
|
|
203
|
+
// Bottom-right (default)
|
|
204
|
+
{
|
|
205
|
+
originX: 'end',
|
|
206
|
+
originY: 'bottom',
|
|
207
|
+
overlayX: 'start',
|
|
208
|
+
overlayY: 'top',
|
|
209
|
+
offsetX: 0,
|
|
210
|
+
offsetY: 4,
|
|
211
|
+
},
|
|
212
|
+
// Bottom-left (if not enough space on right)
|
|
213
|
+
{
|
|
214
|
+
originX: 'start',
|
|
215
|
+
originY: 'bottom',
|
|
216
|
+
overlayX: 'end',
|
|
217
|
+
overlayY: 'top',
|
|
218
|
+
offsetX: 0,
|
|
219
|
+
offsetY: 4,
|
|
220
|
+
},
|
|
221
|
+
// Top-right (if not enough space below)
|
|
222
|
+
{
|
|
223
|
+
originX: 'end',
|
|
224
|
+
originY: 'top',
|
|
225
|
+
overlayX: 'start',
|
|
226
|
+
overlayY: 'bottom',
|
|
227
|
+
offsetX: 0,
|
|
228
|
+
offsetY: -4,
|
|
229
|
+
},
|
|
230
|
+
// Top-left (if not enough space below and on right)
|
|
231
|
+
{
|
|
232
|
+
originX: 'start',
|
|
233
|
+
originY: 'top',
|
|
234
|
+
overlayX: 'end',
|
|
235
|
+
overlayY: 'bottom',
|
|
236
|
+
offsetX: 0,
|
|
237
|
+
offsetY: -4,
|
|
238
|
+
},
|
|
239
|
+
];
|
|
240
|
+
return this.positionBuilder
|
|
241
|
+
.flexibleConnectedTo(target)
|
|
242
|
+
.withPositions(positions)
|
|
243
|
+
.withFlexibleDimensions(true)
|
|
244
|
+
.withPush(true)
|
|
245
|
+
.withGrowAfterOpen(true)
|
|
246
|
+
.withViewportMargin(8);
|
|
247
|
+
}
|
|
248
|
+
setupKeyboardNavigation() {
|
|
249
|
+
if (!this.overlayRef) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const keydownEvents = this.overlayRef.keydownEvents();
|
|
253
|
+
keydownEvents.subscribe((event) => {
|
|
254
|
+
this.onKeyDown(event);
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PopoverMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
258
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: PopoverMenuComponent, isStandalone: true, selector: "ap-popover-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, largeMenuEnabled: { classPropertyName: "largeMenuEnabled", publicName: "largeMenuEnabled", isSignal: true, isRequired: false, transformFunction: null }, showBackdrop: { classPropertyName: "showBackdrop", publicName: "showBackdrop", isSignal: true, isRequired: false, transformFunction: null }, customWidth: { classPropertyName: "customWidth", publicName: "customWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { menuItemClick: "menuItemClick", opened: "opened", closed: "closed" }, providers: [withSymbols(apInfo, apFeatureLock)], queries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "menuTemplate", first: true, predicate: ["menuTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #menuTemplate>\n <!-- Menu -->\n <div\n class=\"ap-popover-menu__content\"\n role=\"menu\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Menu'\"\n [class.ap-popover-menu__content--default]=\"!largeMenuEnabled() && !customWidth()\"\n [class.ap-popover-menu__content--large]=\"largeMenuEnabled()\"\n [style.width]=\"customWidth() ? customWidth() + 'px' : undefined\"\n (keydown)=\"onKeyDown($event)\">\n <!-- Menu items -->\n @for (item of items(); track item.label) {\n <!-- Divider -->\n @if (item.divider) {\n <div\n class=\"ap-popover-menu__divider\"\n role=\"separator\"></div>\n } @else {\n <!-- Menu item -->\n <button\n type=\"button\"\n role=\"menuitem\"\n class=\"ap-popover-menu__item\"\n [class.ap-popover-menu__item--has-description]=\"item.description\"\n [class.ap-popover-menu__item--disabled]=\"item.disabled\"\n [class.ap-popover-menu__item--focused]=\"focusedIndex() === $index\"\n [class.ap-popover-menu__item--red-mode]=\"item.redModeEnabled\"\n [class.ap-popover-menu__item--feature-lock]=\"item.featureLockEnabled\"\n [attr.aria-disabled]=\"item.disabled\"\n [disabled]=\"item.disabled\"\n [apTooltip]=\"item.itemTooltipText\"\n (click)=\"onMenuItemClick(item)\">\n <!-- Left icon -->\n @if (item.symbolId) {\n <ap-symbol\n class=\"ap-popover-menu__item-left-icon\"\n size=\"sm\"\n [color]=\"item.symbolColor ? item.symbolColor : item.redModeEnabled ? 'red' : 'grey'\"\n [symbolId]=\"item.symbolId\" />\n }\n <!-- Label -->\n <div class=\"ap-popover-menu__item-text-container\">\n <div class=\"ap-popover-menu__item-label-container\">\n <div class=\"ap-popover-menu__item-label\">{{ item.label }}</div>\n <!-- Badge -->\n @if (item.badgeLabel) {\n <ap-badge\n class=\"ap-popover-menu__item-badge\"\n color=\"blue\">\n {{ item.badgeLabel }}\n </ap-badge>\n }\n </div>\n <!-- Description -->\n <div class=\"ap-popover-menu__item-description\">{{ item.description }}</div>\n </div>\n <!-- Tooltip icon -->\n @if (item.iconTooltipText) {\n <ap-symbol\n class=\"ap-popover-menu__item-right-icon\"\n size=\"sm\"\n color=\"grey-blue\"\n symbolId=\"info\"\n [apTooltip]=\"item.iconTooltipText\" />\n }\n <!-- Feature lock icon -->\n @if (item.featureLockEnabled) {\n <ap-symbol\n class=\"ap-popover-menu__item-right-icon\"\n size=\"sm\"\n color=\"purple\"\n symbolId=\"feature-lock\" />\n }\n </button>\n }\n }\n </div>\n</ng-template>\n", styles: [".ap-popover-menu__content{background-color:var(--comp-popover-menu-background-color);border:1px solid var(--comp-popover-menu-border-color);border-radius:var(--comp-popover-menu-border-radius);box-shadow:var(--comp-popover-menu-box-shadow);padding:var(--comp-popover-menu-padding);outline:none;overflow:hidden;z-index:1000}.ap-popover-menu__content.ap-popover-menu__content--default{width:250px}.ap-popover-menu__content.ap-popover-menu__content--large{width:340px}.ap-popover-menu__content:focus{outline:2px solid var(--comp-popover-menu-item-background-color-focused);outline-offset:2px}.ap-popover-menu__item{display:flex;align-items:center;width:100%;height:40px;padding:var(--comp-popover-menu-item-padding);border:none;background:transparent;color:var(--comp-popover-menu-item-text-color);cursor:pointer;font-family:Averta;font-size:var(--comp-popover-menu-item-text-size);line-height:var(--comp-popover-menu-item-text-line-height);text-align:left;transition:background-color .2s ease,color .2s ease}.ap-popover-menu__item:hover{background-color:var(--comp-popover-menu-item-background-color-hover)}.ap-popover-menu__item:focus{outline:none;background-color:var(--comp-popover-menu-item-background-color-focused)}.ap-popover-menu__item.ap-popover-menu__item--has-description{height:auto;min-height:50px}.ap-popover-menu__item.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-focused)}.ap-popover-menu__item.ap-popover-menu__item--disabled{cursor:not-allowed;opacity:.4}.ap-popover-menu__item.ap-popover-menu__item--red-mode{color:var(--comp-popover-menu-item-text-color-red-mode)}.ap-popover-menu__item.ap-popover-menu__item--red-mode:hover{background-color:var(--comp-popover-menu-item-background-color-red-mode-hover)}.ap-popover-menu__item.ap-popover-menu__item--red-mode:focus{background-color:var(--comp-popover-menu-item-background-color-red-mode-focused)}.ap-popover-menu__item.ap-popover-menu__item--red-mode.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-red-mode-focused)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock:hover{background-color:var(--comp-popover-menu-item-background-color-feature-lock-hover)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock:focus{background-color:var(--comp-popover-menu-item-background-color-feature-lock-focused)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-feature-lock-focused)}.ap-popover-menu__item.ap-popover-menu__item--disabled:hover{background-color:transparent}.ap-popover-menu__item .ap-popover-menu__item-left-icon{margin-right:var(--comp-popover-menu-item-icon-spacing)}.ap-popover-menu__item .ap-popover-menu__item-right-icon{margin-left:var(--comp-popover-menu-item-icon-spacing)}.ap-popover-menu__item .ap-popover-menu__item-text-container{display:flex;flex-direction:column;flex:1;min-width:0}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-label-container{display:flex;align-items:center;gap:var(--comp-popover-menu-item-label-spacing);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-label-container .ap-popover-menu__item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-description{color:var(--ref-color-grey-80);font-size:var(--ref-font-size-xs);line-height:var(--ref-font-line-height-xs)}.ap-popover-menu__divider{height:1px;background-color:var(--comp-popover-menu-divider-color);margin:var(--comp-popover-menu-divider-margin)}\n"], dependencies: [{ kind: "component", type: BadgeComponent, selector: "ap-badge", inputs: ["color"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }, { kind: "directive", type: TooltipDirective, selector: "[apTooltip]", inputs: ["apTooltip", "apTooltipPosition", "apTooltipShowDelay", "apTooltipHideDelay", "apTooltipDuration", "apTooltipDisabled", "apTooltipTruncatedTextOnly", "apTooltipTemplateContext", "apTooltipVirtualScrollElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
259
|
+
}
|
|
260
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PopoverMenuComponent, decorators: [{
|
|
261
|
+
type: Component,
|
|
262
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ap-popover-menu', standalone: true, imports: [BadgeComponent, CommonModule, SymbolComponent, TooltipDirective], providers: [withSymbols(apInfo, apFeatureLock)], template: "<ng-template #menuTemplate>\n <!-- Menu -->\n <div\n class=\"ap-popover-menu__content\"\n role=\"menu\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Menu'\"\n [class.ap-popover-menu__content--default]=\"!largeMenuEnabled() && !customWidth()\"\n [class.ap-popover-menu__content--large]=\"largeMenuEnabled()\"\n [style.width]=\"customWidth() ? customWidth() + 'px' : undefined\"\n (keydown)=\"onKeyDown($event)\">\n <!-- Menu items -->\n @for (item of items(); track item.label) {\n <!-- Divider -->\n @if (item.divider) {\n <div\n class=\"ap-popover-menu__divider\"\n role=\"separator\"></div>\n } @else {\n <!-- Menu item -->\n <button\n type=\"button\"\n role=\"menuitem\"\n class=\"ap-popover-menu__item\"\n [class.ap-popover-menu__item--has-description]=\"item.description\"\n [class.ap-popover-menu__item--disabled]=\"item.disabled\"\n [class.ap-popover-menu__item--focused]=\"focusedIndex() === $index\"\n [class.ap-popover-menu__item--red-mode]=\"item.redModeEnabled\"\n [class.ap-popover-menu__item--feature-lock]=\"item.featureLockEnabled\"\n [attr.aria-disabled]=\"item.disabled\"\n [disabled]=\"item.disabled\"\n [apTooltip]=\"item.itemTooltipText\"\n (click)=\"onMenuItemClick(item)\">\n <!-- Left icon -->\n @if (item.symbolId) {\n <ap-symbol\n class=\"ap-popover-menu__item-left-icon\"\n size=\"sm\"\n [color]=\"item.symbolColor ? item.symbolColor : item.redModeEnabled ? 'red' : 'grey'\"\n [symbolId]=\"item.symbolId\" />\n }\n <!-- Label -->\n <div class=\"ap-popover-menu__item-text-container\">\n <div class=\"ap-popover-menu__item-label-container\">\n <div class=\"ap-popover-menu__item-label\">{{ item.label }}</div>\n <!-- Badge -->\n @if (item.badgeLabel) {\n <ap-badge\n class=\"ap-popover-menu__item-badge\"\n color=\"blue\">\n {{ item.badgeLabel }}\n </ap-badge>\n }\n </div>\n <!-- Description -->\n <div class=\"ap-popover-menu__item-description\">{{ item.description }}</div>\n </div>\n <!-- Tooltip icon -->\n @if (item.iconTooltipText) {\n <ap-symbol\n class=\"ap-popover-menu__item-right-icon\"\n size=\"sm\"\n color=\"grey-blue\"\n symbolId=\"info\"\n [apTooltip]=\"item.iconTooltipText\" />\n }\n <!-- Feature lock icon -->\n @if (item.featureLockEnabled) {\n <ap-symbol\n class=\"ap-popover-menu__item-right-icon\"\n size=\"sm\"\n color=\"purple\"\n symbolId=\"feature-lock\" />\n }\n </button>\n }\n }\n </div>\n</ng-template>\n", styles: [".ap-popover-menu__content{background-color:var(--comp-popover-menu-background-color);border:1px solid var(--comp-popover-menu-border-color);border-radius:var(--comp-popover-menu-border-radius);box-shadow:var(--comp-popover-menu-box-shadow);padding:var(--comp-popover-menu-padding);outline:none;overflow:hidden;z-index:1000}.ap-popover-menu__content.ap-popover-menu__content--default{width:250px}.ap-popover-menu__content.ap-popover-menu__content--large{width:340px}.ap-popover-menu__content:focus{outline:2px solid var(--comp-popover-menu-item-background-color-focused);outline-offset:2px}.ap-popover-menu__item{display:flex;align-items:center;width:100%;height:40px;padding:var(--comp-popover-menu-item-padding);border:none;background:transparent;color:var(--comp-popover-menu-item-text-color);cursor:pointer;font-family:Averta;font-size:var(--comp-popover-menu-item-text-size);line-height:var(--comp-popover-menu-item-text-line-height);text-align:left;transition:background-color .2s ease,color .2s ease}.ap-popover-menu__item:hover{background-color:var(--comp-popover-menu-item-background-color-hover)}.ap-popover-menu__item:focus{outline:none;background-color:var(--comp-popover-menu-item-background-color-focused)}.ap-popover-menu__item.ap-popover-menu__item--has-description{height:auto;min-height:50px}.ap-popover-menu__item.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-focused)}.ap-popover-menu__item.ap-popover-menu__item--disabled{cursor:not-allowed;opacity:.4}.ap-popover-menu__item.ap-popover-menu__item--red-mode{color:var(--comp-popover-menu-item-text-color-red-mode)}.ap-popover-menu__item.ap-popover-menu__item--red-mode:hover{background-color:var(--comp-popover-menu-item-background-color-red-mode-hover)}.ap-popover-menu__item.ap-popover-menu__item--red-mode:focus{background-color:var(--comp-popover-menu-item-background-color-red-mode-focused)}.ap-popover-menu__item.ap-popover-menu__item--red-mode.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-red-mode-focused)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock:hover{background-color:var(--comp-popover-menu-item-background-color-feature-lock-hover)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock:focus{background-color:var(--comp-popover-menu-item-background-color-feature-lock-focused)}.ap-popover-menu__item.ap-popover-menu__item--feature-lock.ap-popover-menu__item--focused{background-color:var(--comp-popover-menu-item-background-color-feature-lock-focused)}.ap-popover-menu__item.ap-popover-menu__item--disabled:hover{background-color:transparent}.ap-popover-menu__item .ap-popover-menu__item-left-icon{margin-right:var(--comp-popover-menu-item-icon-spacing)}.ap-popover-menu__item .ap-popover-menu__item-right-icon{margin-left:var(--comp-popover-menu-item-icon-spacing)}.ap-popover-menu__item .ap-popover-menu__item-text-container{display:flex;flex-direction:column;flex:1;min-width:0}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-label-container{display:flex;align-items:center;gap:var(--comp-popover-menu-item-label-spacing);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-label-container .ap-popover-menu__item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-popover-menu__item .ap-popover-menu__item-text-container .ap-popover-menu__item-description{color:var(--ref-color-grey-80);font-size:var(--ref-font-size-xs);line-height:var(--ref-font-line-height-xs)}.ap-popover-menu__divider{height:1px;background-color:var(--comp-popover-menu-divider-color);margin:var(--comp-popover-menu-divider-margin)}\n"] }]
|
|
263
|
+
}], ctorParameters: () => [] });
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Generated bundle index. Do not edit.
|
|
267
|
+
*/
|
|
268
|
+
|
|
269
|
+
export { PopoverMenuComponent, PopoverMenuTriggerDirective };
|
|
270
|
+
//# sourceMappingURL=agorapulse-ui-components-popover-menu.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agorapulse-ui-components-popover-menu.mjs","sources":["../../../libs/ui-components/popover-menu/src/popover-menu-trigger.directive.ts","../../../libs/ui-components/popover-menu/src/popover-menu.component.ts","../../../libs/ui-components/popover-menu/src/popover-menu.component.html","../../../libs/ui-components/popover-menu/src/agorapulse-ui-components-popover-menu.ts"],"sourcesContent":["import { Directive, ElementRef, HostListener, inject, input, output } from '@angular/core';\nimport { PopoverMenuComponent, PopoverMenuItem } from './popover-menu.component';\n\n@Directive({\n selector: '[apPopoverMenuTrigger]',\n standalone: true,\n})\nexport class PopoverMenuTriggerDirective {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n apPopoverMenuTrigger = input.required<PopoverMenuComponent>();\n popoverMenuItems = input<PopoverMenuItem[]>([]);\n disabled = input(false);\n\n menuItemClick = output<PopoverMenuItem>();\n opened = output<void>();\n closed = output<void>();\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled()) {\n return;\n }\n\n const popoverMenu = this.apPopoverMenuTrigger();\n if (popoverMenu) {\n popoverMenu.toggle(this.elementRef.nativeElement);\n }\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n const popoverMenu = this.apPopoverMenuTrigger();\n if (popoverMenu) {\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault();\n popoverMenu.open(this.elementRef.nativeElement);\n break;\n\n case 'Escape':\n event.preventDefault();\n popoverMenu.close();\n break;\n }\n }\n }\n}\n","import { BadgeComponent } from '@agorapulse/ui-components/badge';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { agorapulseSymbol, apFeatureLock, apInfo, SymbolColor, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayPositionBuilder, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { take } from 'rxjs/operators';\n\nexport interface PopoverMenuItem {\n label?: string;\n description?: string;\n badgeLabel?: string;\n symbolId?: agorapulseSymbol;\n symbolColor?: SymbolColor;\n featureLockEnabled?: boolean;\n redModeEnabled?: boolean;\n itemTooltipText?: string;\n iconTooltipText?: string;\n disabled?: boolean;\n divider?: boolean;\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-popover-menu',\n templateUrl: './popover-menu.component.html',\n styleUrls: ['./popover-menu.component.scss'],\n standalone: true,\n imports: [BadgeComponent, CommonModule, SymbolComponent, TooltipDirective],\n providers: [withSymbols(apInfo, apFeatureLock)],\n})\nexport class PopoverMenuComponent {\n private readonly elementRef = inject(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(OverlayPositionBuilder);\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n menuTemplate = viewChild<TemplateRef<unknown>>('menuTemplate');\n trigger = contentChild<TemplateRef<unknown>>('trigger');\n\n items = input<PopoverMenuItem[]>([]);\n disabled = input(false);\n largeMenuEnabled = input(false);\n showBackdrop = input(true);\n customWidth = input<number | null>(null);\n\n menuItemClick = output<PopoverMenuItem>();\n opened = output<void>();\n closed = output<void>();\n\n private overlayRef: OverlayRef | null = null;\n private portal: TemplatePortal<unknown> | null = null;\n\n protected readonly isOpen = signal(false);\n protected readonly focusedIndex = signal(-1);\n protected readonly menuItems = computed(() => this.items().filter(item => !item.divider));\n\n constructor() {\n effect(() => {\n if (this.isOpen()) {\n this.setupKeyboardNavigation();\n }\n });\n }\n\n open(triggerElement?: HTMLElement): void {\n const menuTemplate = this.menuTemplate();\n\n if (this.disabled() || this.isOpen() || !menuTemplate) {\n return;\n }\n\n const target = triggerElement || this.elementRef.nativeElement;\n\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n\n const positionStrategy = this.createPositionStrategy(target);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: this.showBackdrop(),\n backdropClass: '',\n panelClass: '',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n });\n\n this.portal = new TemplatePortal(menuTemplate, this.viewContainerRef);\n this.overlayRef.attach(this.portal);\n\n this.isOpen.set(true);\n this.focusedIndex.set(-1);\n this.opened.emit();\n\n this.overlayRef\n .backdropClick()\n .pipe(take(1))\n .subscribe(() => {\n this.close();\n });\n\n this.overlayRef\n .keydownEvents()\n .pipe(take(1))\n .subscribe((event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.close();\n }\n });\n }\n\n close(): void {\n if (!this.isOpen()) {\n return;\n }\n\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n\n this.portal = null;\n this.isOpen.set(false);\n this.focusedIndex.set(-1);\n this.closed.emit();\n }\n\n toggle(triggerElement?: HTMLElement): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open(triggerElement);\n }\n }\n\n onMenuItemClick(item: PopoverMenuItem): void {\n if (item.disabled) {\n return;\n }\n\n this.menuItemClick.emit(item);\n\n this.close();\n }\n\n onKeyDown(event: KeyboardEvent): void {\n const items = this.menuItems();\n const currentIndex = this.focusedIndex();\n let nextIndex: number;\n let prevIndex: number;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n this.focusedIndex.set(nextIndex);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n prevIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n this.focusedIndex.set(prevIndex);\n break;\n\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (currentIndex >= 0 && currentIndex < items.length) {\n this.onMenuItemClick(items[currentIndex]);\n }\n break;\n\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n\n case 'Tab':\n event.preventDefault();\n if (event.shiftKey) {\n // Shift+Tab - move to previous item\n prevIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n this.focusedIndex.set(prevIndex);\n } else {\n // Tab - move to next item\n nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n this.focusedIndex.set(nextIndex);\n }\n break;\n }\n }\n\n private createPositionStrategy(target: HTMLElement): FlexibleConnectedPositionStrategy {\n const positions: ConnectedPosition[] = [\n // Bottom-right (default)\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: 0,\n offsetY: 4,\n },\n // Bottom-left (if not enough space on right)\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: 0,\n offsetY: 4,\n },\n // Top-right (if not enough space below)\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX: 0,\n offsetY: -4,\n },\n // Top-left (if not enough space below and on right)\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetX: 0,\n offsetY: -4,\n },\n ];\n\n return this.positionBuilder\n .flexibleConnectedTo(target)\n .withPositions(positions)\n .withFlexibleDimensions(true)\n .withPush(true)\n .withGrowAfterOpen(true)\n .withViewportMargin(8);\n }\n\n private setupKeyboardNavigation(): void {\n if (!this.overlayRef) {\n return;\n }\n\n const keydownEvents = this.overlayRef.keydownEvents();\n\n keydownEvents.subscribe((event: KeyboardEvent) => {\n this.onKeyDown(event);\n });\n }\n}\n","<ng-template #menuTemplate>\n <!-- Menu -->\n <div\n class=\"ap-popover-menu__content\"\n role=\"menu\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Menu'\"\n [class.ap-popover-menu__content--default]=\"!largeMenuEnabled() && !customWidth()\"\n [class.ap-popover-menu__content--large]=\"largeMenuEnabled()\"\n [style.width]=\"customWidth() ? customWidth() + 'px' : undefined\"\n (keydown)=\"onKeyDown($event)\">\n <!-- Menu items -->\n @for (item of items(); track item.label) {\n <!-- Divider -->\n @if (item.divider) {\n <div\n class=\"ap-popover-menu__divider\"\n role=\"separator\"></div>\n } @else {\n <!-- Menu item -->\n <button\n type=\"button\"\n role=\"menuitem\"\n class=\"ap-popover-menu__item\"\n [class.ap-popover-menu__item--has-description]=\"item.description\"\n [class.ap-popover-menu__item--disabled]=\"item.disabled\"\n [class.ap-popover-menu__item--focused]=\"focusedIndex() === $index\"\n [class.ap-popover-menu__item--red-mode]=\"item.redModeEnabled\"\n [class.ap-popover-menu__item--feature-lock]=\"item.featureLockEnabled\"\n [attr.aria-disabled]=\"item.disabled\"\n [disabled]=\"item.disabled\"\n [apTooltip]=\"item.itemTooltipText\"\n (click)=\"onMenuItemClick(item)\">\n <!-- Left icon -->\n @if (item.symbolId) {\n <ap-symbol\n class=\"ap-popover-menu__item-left-icon\"\n size=\"sm\"\n [color]=\"item.symbolColor ? item.symbolColor : item.redModeEnabled ? 'red' : 'grey'\"\n [symbolId]=\"item.symbolId\" />\n }\n <!-- Label -->\n <div class=\"ap-popover-menu__item-text-container\">\n <div class=\"ap-popover-menu__item-label-container\">\n <div class=\"ap-popover-menu__item-label\">{{ item.label }}</div>\n <!-- Badge -->\n @if (item.badgeLabel) {\n <ap-badge\n class=\"ap-popover-menu__item-badge\"\n color=\"blue\">\n {{ item.badgeLabel }}\n </ap-badge>\n }\n </div>\n <!-- Description -->\n <div class=\"ap-popover-menu__item-description\">{{ item.description }}</div>\n </div>\n <!-- Tooltip icon -->\n @if (item.iconTooltipText) {\n <ap-symbol\n class=\"ap-popover-menu__item-right-icon\"\n size=\"sm\"\n color=\"grey-blue\"\n symbolId=\"info\"\n [apTooltip]=\"item.iconTooltipText\" />\n }\n <!-- Feature lock icon -->\n @if (item.featureLockEnabled) {\n <ap-symbol\n class=\"ap-popover-menu__item-right-icon\"\n size=\"sm\"\n color=\"purple\"\n symbolId=\"feature-lock\" />\n }\n </button>\n }\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ export declare class NavSelectorLeafComponent {
|
|
|
20
20
|
tooltipContent: import("@angular/core").Signal<string>;
|
|
21
21
|
tooltipDisabled: import("@angular/core").Signal<boolean>;
|
|
22
22
|
foldedWithDelay: import("@angular/core").WritableSignal<boolean>;
|
|
23
|
-
network: import("@angular/core").Signal<"bluesky" | "facebook" | "instagram" | "linkedin" | "twitter" | "youtube" | "meta" | "google" | "pinterest" | "threads" | "tiktok" | "webBlog" | "webNews" | "X" | "reddit" | null | undefined>;
|
|
23
|
+
network: import("@angular/core").Signal<"bluesky" | "facebook" | "instagram" | "linkedin" | "twitter" | "youtube" | "meta" | "google" | "pinterest" | "threads" | "tiktok" | "webBlog" | "webNews" | "X" | "xPlus" | "reddit" | null | undefined>;
|
|
24
24
|
constructor(el: ElementRef, navSelectorLeafPresenter: NavSelectorLeafPresenter);
|
|
25
25
|
animationState: import("@angular/core").Signal<"collapsed" | "expanded">;
|
|
26
26
|
maxHeight: import("@angular/core").WritableSignal<string>;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agorapulse/ui-components",
|
|
3
3
|
"description": "Agorapulse UI Components Library",
|
|
4
|
-
"version": "18.
|
|
4
|
+
"version": "18.1.1",
|
|
5
5
|
"author": "Benoit Hediard",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -67,18 +67,18 @@
|
|
|
67
67
|
"esm": "./esm2022/button/agorapulse-ui-components-button.mjs",
|
|
68
68
|
"default": "./fesm2022/agorapulse-ui-components-button.mjs"
|
|
69
69
|
},
|
|
70
|
-
"./checkbox": {
|
|
71
|
-
"types": "./checkbox/index.d.ts",
|
|
72
|
-
"esm2022": "./esm2022/checkbox/agorapulse-ui-components-checkbox.mjs",
|
|
73
|
-
"esm": "./esm2022/checkbox/agorapulse-ui-components-checkbox.mjs",
|
|
74
|
-
"default": "./fesm2022/agorapulse-ui-components-checkbox.mjs"
|
|
75
|
-
},
|
|
76
70
|
"./close-button": {
|
|
77
71
|
"types": "./close-button/index.d.ts",
|
|
78
72
|
"esm2022": "./esm2022/close-button/agorapulse-ui-components-close-button.mjs",
|
|
79
73
|
"esm": "./esm2022/close-button/agorapulse-ui-components-close-button.mjs",
|
|
80
74
|
"default": "./fesm2022/agorapulse-ui-components-close-button.mjs"
|
|
81
75
|
},
|
|
76
|
+
"./checkbox": {
|
|
77
|
+
"types": "./checkbox/index.d.ts",
|
|
78
|
+
"esm2022": "./esm2022/checkbox/agorapulse-ui-components-checkbox.mjs",
|
|
79
|
+
"esm": "./esm2022/checkbox/agorapulse-ui-components-checkbox.mjs",
|
|
80
|
+
"default": "./fesm2022/agorapulse-ui-components-checkbox.mjs"
|
|
81
|
+
},
|
|
82
82
|
"./confirm-modal": {
|
|
83
83
|
"types": "./confirm-modal/index.d.ts",
|
|
84
84
|
"esm2022": "./esm2022/confirm-modal/agorapulse-ui-components-confirm-modal.mjs",
|
|
@@ -217,6 +217,12 @@
|
|
|
217
217
|
"esm": "./esm2022/popmenu/agorapulse-ui-components-popmenu.mjs",
|
|
218
218
|
"default": "./fesm2022/agorapulse-ui-components-popmenu.mjs"
|
|
219
219
|
},
|
|
220
|
+
"./popover-menu": {
|
|
221
|
+
"types": "./popover-menu/index.d.ts",
|
|
222
|
+
"esm2022": "./esm2022/popover-menu/agorapulse-ui-components-popover-menu.mjs",
|
|
223
|
+
"esm": "./esm2022/popover-menu/agorapulse-ui-components-popover-menu.mjs",
|
|
224
|
+
"default": "./fesm2022/agorapulse-ui-components-popover-menu.mjs"
|
|
225
|
+
},
|
|
220
226
|
"./radio": {
|
|
221
227
|
"types": "./radio/index.d.ts",
|
|
222
228
|
"esm2022": "./esm2022/radio/agorapulse-ui-components-radio.mjs",
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PopoverMenuComponent, PopoverMenuItem } from './popover-menu.component';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class PopoverMenuTriggerDirective {
|
|
4
|
+
private readonly elementRef;
|
|
5
|
+
apPopoverMenuTrigger: import("@angular/core").InputSignal<PopoverMenuComponent>;
|
|
6
|
+
popoverMenuItems: import("@angular/core").InputSignal<PopoverMenuItem[]>;
|
|
7
|
+
disabled: import("@angular/core").InputSignal<boolean>;
|
|
8
|
+
menuItemClick: import("@angular/core").OutputEmitterRef<PopoverMenuItem>;
|
|
9
|
+
opened: import("@angular/core").OutputEmitterRef<void>;
|
|
10
|
+
closed: import("@angular/core").OutputEmitterRef<void>;
|
|
11
|
+
onClick(event: MouseEvent): void;
|
|
12
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PopoverMenuTriggerDirective, never>;
|
|
14
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<PopoverMenuTriggerDirective, "[apPopoverMenuTrigger]", never, { "apPopoverMenuTrigger": { "alias": "apPopoverMenuTrigger"; "required": true; "isSignal": true; }; "popoverMenuItems": { "alias": "popoverMenuItems"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "menuItemClick": "menuItemClick"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { agorapulseSymbol, SymbolColor } from '@agorapulse/ui-symbol';
|
|
2
|
+
import { TemplateRef } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export interface PopoverMenuItem {
|
|
5
|
+
label?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
badgeLabel?: string;
|
|
8
|
+
symbolId?: agorapulseSymbol;
|
|
9
|
+
symbolColor?: SymbolColor;
|
|
10
|
+
featureLockEnabled?: boolean;
|
|
11
|
+
redModeEnabled?: boolean;
|
|
12
|
+
itemTooltipText?: string;
|
|
13
|
+
iconTooltipText?: string;
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
divider?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare class PopoverMenuComponent {
|
|
18
|
+
private readonly elementRef;
|
|
19
|
+
private readonly overlay;
|
|
20
|
+
private readonly positionBuilder;
|
|
21
|
+
private readonly viewContainerRef;
|
|
22
|
+
menuTemplate: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
|
|
23
|
+
trigger: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
|
|
24
|
+
items: import("@angular/core").InputSignal<PopoverMenuItem[]>;
|
|
25
|
+
disabled: import("@angular/core").InputSignal<boolean>;
|
|
26
|
+
largeMenuEnabled: import("@angular/core").InputSignal<boolean>;
|
|
27
|
+
showBackdrop: import("@angular/core").InputSignal<boolean>;
|
|
28
|
+
customWidth: import("@angular/core").InputSignal<number | null>;
|
|
29
|
+
menuItemClick: import("@angular/core").OutputEmitterRef<PopoverMenuItem>;
|
|
30
|
+
opened: import("@angular/core").OutputEmitterRef<void>;
|
|
31
|
+
closed: import("@angular/core").OutputEmitterRef<void>;
|
|
32
|
+
private overlayRef;
|
|
33
|
+
private portal;
|
|
34
|
+
protected readonly isOpen: import("@angular/core").WritableSignal<boolean>;
|
|
35
|
+
protected readonly focusedIndex: import("@angular/core").WritableSignal<number>;
|
|
36
|
+
protected readonly menuItems: import("@angular/core").Signal<PopoverMenuItem[]>;
|
|
37
|
+
constructor();
|
|
38
|
+
open(triggerElement?: HTMLElement): void;
|
|
39
|
+
close(): void;
|
|
40
|
+
toggle(triggerElement?: HTMLElement): void;
|
|
41
|
+
onMenuItemClick(item: PopoverMenuItem): void;
|
|
42
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
43
|
+
private createPositionStrategy;
|
|
44
|
+
private setupKeyboardNavigation;
|
|
45
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PopoverMenuComponent, never>;
|
|
46
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PopoverMenuComponent, "ap-popover-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "largeMenuEnabled": { "alias": "largeMenuEnabled"; "required": false; "isSignal": true; }; "showBackdrop": { "alias": "showBackdrop"; "required": false; "isSignal": true; }; "customWidth": { "alias": "customWidth"; "required": false; "isSignal": true; }; }, { "menuItemClick": "menuItemClick"; "opened": "opened"; "closed": "closed"; }, ["trigger"], never, true, never>;
|
|
47
|
+
}
|
|
Binary file
|