UNPKG

@perfectmemory/ngx-contextmenu

Version:
1 lines 54.3 kB
{"version":3,"file":"perfectmemory-ngx-contextmenu.mjs","sources":["../../../../libs/ngx-contextmenu/src/lib/helper/evaluate.ts","../../../../libs/ngx-contextmenu/src/lib/directives/context-menu-item/context-menu-item.directive.ts","../../../../libs/ngx-contextmenu/src/lib/directives/context-menu-content-item/context-menu-content-item.directive.ts","../../../../libs/ngx-contextmenu/src/lib/services/context-menu-overlays/context-menu-overlays.service.ts","../../../../libs/ngx-contextmenu/src/lib/components/context-menu-content/context-menu-content.component.ts","../../../../libs/ngx-contextmenu/src/lib/components/context-menu-content/context-menu-content.component.html","../../../../libs/ngx-contextmenu/src/lib/components/context-menu/context-menu.component.helpers.ts","../../../../libs/ngx-contextmenu/src/lib/components/context-menu/context-menu.component.ts","../../../../libs/ngx-contextmenu/src/lib/directives/context-menu/context-menu.directive.ts","../../../../libs/ngx-contextmenu/src/lib/ngx-contextmenu.module.ts","../../../../libs/ngx-contextmenu/src/lib/services/context-menu/context-menu.service.ts","../../../../libs/ngx-contextmenu/src/index.ts","../../../../libs/ngx-contextmenu/src/perfectmemory-ngx-contextmenu.ts"],"sourcesContent":["export const evaluateIfFunction = <T>(\n value: boolean | ((value?: T) => boolean) | undefined,\n item?: T\n): boolean => {\n if (value instanceof Function) {\n return value(item);\n }\n return !!value;\n};\n","import {\n Directive,\n EventEmitter,\n Input,\n Optional,\n Output,\n TemplateRef,\n} from '@angular/core';\nimport type { ContextMenuComponent } from '../../components/context-menu/context-menu.component';\nimport { evaluateIfFunction } from '../../helper/evaluate';\n\n@Directive({\n selector: '[contextMenuItem]',\n standalone: false,\n})\nexport class ContextMenuItemDirective<T> {\n /**\n * Optional subMenu component ref\n */\n @Input()\n public subMenu?: ContextMenuComponent<T>;\n\n /**\n * True to make this menu item a divider\n */\n @Input()\n public divider = false;\n\n /**\n * Is this menu item disabled\n */\n @Input()\n public set disabled(disabled: boolean | ((value?: T) => boolean)) {\n this.#disabled = disabled;\n }\n\n public get disabled(): boolean {\n return (\n this.passive ||\n this.divider ||\n evaluateIfFunction(this.#disabled, this.value)\n );\n }\n\n /**\n * Is this menu item passive (for title)\n */\n @Input()\n public passive = false;\n\n /**\n * Is this menu item visible\n */\n @Input()\n public visible: boolean | ((value?: T) => boolean) = true;\n\n /**\n * Emits event and item\n */\n @Output()\n public execute = new EventEmitter<{\n event: MouseEvent | KeyboardEvent;\n value?: T;\n }>();\n\n /**\n * @internal\n */\n public value?: T;\n\n #disabled: boolean | ((value?: T) => boolean) = false;\n\n constructor(\n @Optional()\n public template: TemplateRef<{ $implicit?: T }>\n ) {}\n\n /**\n * @internal\n */\n public triggerExecute(event: MouseEvent | KeyboardEvent, value?: T): void {\n if (evaluateIfFunction(this.#disabled, value)) {\n return;\n }\n\n this.execute.emit({ event, value });\n }\n}\n","import { FocusOrigin, FocusableOption } from '@angular/cdk/a11y';\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { evaluateIfFunction } from '../../helper/evaluate';\nimport { ContextMenuItemDirective } from '../context-menu-item/context-menu-item.directive';\n\n@Directive({\n selector: '[contextMenuContentItem]',\n exportAs: 'contextMenuContentItem',\n host: {\n class: 'ngx-context-menu-item',\n },\n standalone: false,\n})\nexport class ContextMenuContentItemDirective<T> implements FocusableOption {\n @Input()\n public contextMenuContentItem?: ContextMenuItemDirective<T>;\n\n public get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n constructor(private elementRef: ElementRef<HTMLElement>) {}\n\n /**\n * @implements FocusableOption\n */\n public focus(origin?: FocusOrigin | undefined): void {\n this.elementRef.nativeElement.focus();\n }\n\n /**\n * @implements FocusableOption\n */\n public get disabled(): boolean | undefined {\n return evaluateIfFunction(\n this.contextMenuContentItem?.disabled,\n this.contextMenuContentItem?.value\n );\n }\n}\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { EventEmitter, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ContextMenuOverlaysService {\n /**\n * Emits when all context menus are closed\n */\n public allClosed = new EventEmitter<void>();\n\n private stack: OverlayRef[] = [];\n\n /**\n * Add an item to the stack\n */\n public push(value: OverlayRef) {\n this.stack.push(value);\n }\n\n /**\n * Clear the whole stack\n */\n public closeAll(): void {\n this.stack.forEach((item) => this.dispose(item));\n this.stack = [];\n this.allClosed.emit();\n }\n\n public isEmpty(): boolean {\n return this.stack.length === 0;\n }\n\n private dispose(overlayRef: OverlayRef) {\n overlayRef.detach();\n overlayRef.dispose();\n }\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\n\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChildren,\n DOCUMENT,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ContextMenuContentItemDirective } from '../../directives/context-menu-content-item/context-menu-content-item.directive';\nimport type { ContextMenuItemDirective } from '../../directives/context-menu-item/context-menu-item.directive';\nimport { evaluateIfFunction } from '../../helper/evaluate';\nimport { ContextMenuOverlaysService } from '../../services/context-menu-overlays/context-menu-overlays.service';\nimport type { ContextMenuComponent } from '../context-menu/context-menu.component';\n\n/**\n * For testing purpose only\n */\nexport const TESTING_WRAPPER = {\n FocusKeyManager,\n};\n\n@Component({\n selector: 'context-menu-content',\n templateUrl: './context-menu-content.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n tabindex: '0',\n role: 'dialog',\n class: 'ngx-contextmenu',\n },\n standalone: false,\n})\nexport class ContextMenuContentComponent<T>\n implements OnDestroy, AfterViewInit\n{\n /**\n * The list of `IContextMenuItemDirective` that represent each menu items\n */\n @Input()\n public menuDirectives: ContextMenuItemDirective<T>[] = [];\n\n /**\n * The item on which the menu act\n */\n @Input()\n public value?: T;\n\n /**\n * The orientation of the component\n * @see https://developer.mozilla.org/fr/docs/Web/HTML/Global_attributes/dir\n */\n @Input()\n @HostBinding('attr.dir')\n public dir: 'ltr' | 'rtl' | undefined;\n\n /**\n * The parent menu of the instance\n */\n @Input()\n public parentContextMenu!: ContextMenuContentComponent<T>;\n\n /**\n * A CSS class to apply a theme to the the menu\n */\n @HostBinding('class')\n @Input()\n public menuClass = '';\n\n /**\n * Emit when a menu item is selected\n */\n @Output()\n public execute = new EventEmitter<{\n event: MouseEvent | KeyboardEvent;\n value?: T;\n menuDirective: ContextMenuItemDirective<T>;\n }>();\n\n /**\n * Emit when all menus is closed\n */\n @Output()\n public close = new EventEmitter<void>();\n\n /**\n * @internal\n */\n @ViewChildren(ContextMenuContentItemDirective, {\n read: ContextMenuContentItemDirective,\n })\n public contextMenuContentItems!: QueryList<\n ContextMenuContentItemDirective<T>\n >;\n\n /**\n * Accessibility\n *\n * @internal\n */\n @HostBinding('attr.role')\n public role = 'menu';\n /**\n * Accessibility\n *\n * @internal\n */\n @HostBinding('aria-orientation')\n public ariaOrientation = 'vertical';\n\n private focusKeyManager?: FocusKeyManager<ContextMenuContentItemDirective<T>>;\n private subscription: Subscription = new Subscription();\n private activeElement?: HTMLElement | null;\n\n // TODO: should be private but issue in spec with NullInjectorError: No provider for ElementRef!\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n @Inject(DOCUMENT)\n public document: Document,\n private contextMenuOverlaysService: ContextMenuOverlaysService\n ) {}\n\n /**\n * @internal\n */\n public ngAfterViewInit() {\n this.setupDirectives();\n this.activeElement = this.document.activeElement as HTMLElement | null;\n this.elementRef.nativeElement.focus();\n }\n\n /**\n * @internal\n */\n public ngOnDestroy() {\n this.activeElement?.focus();\n this.subscription.unsubscribe();\n this.focusKeyManager?.destroy();\n }\n\n /**\n * @internal\n */\n @HostListener('keydown.ArrowDown', ['$event'])\n @HostListener('keydown.ArrowUp', ['$event'])\n public onKeyArrowDownOrUp(event: KeyboardEvent): void {\n this.focusKeyManager?.onKeydown(event);\n }\n\n /**\n * @internal\n */\n @HostListener('keydown.ArrowRight', ['$event'])\n public onKeyArrowRight(event: KeyboardEvent): void {\n this.openCloseActiveItemSubMenu(this.dir !== 'rtl', event);\n }\n\n /**\n * @internal\n */\n @HostListener('keydown.ArrowLeft', ['$event'])\n public onKeyArrowLeft(event: KeyboardEvent): void {\n this.openCloseActiveItemSubMenu(this.dir === 'rtl', event);\n }\n\n /**\n * @internal\n */\n @HostListener('window:keydown.Enter', ['$event'])\n @HostListener('window:keydown.Space', ['$event'])\n public onKeyEnterOrSpace(event: KeyboardEvent): void {\n if (!this.focusKeyManager?.activeItem) {\n return;\n }\n\n this.onMenuItemSelect(this.focusKeyManager.activeItem, event);\n }\n\n /**\n * @internal\n */\n @HostListener('document:click', ['$event'])\n public onClickOrRightClick(event: MouseEvent): void {\n if (event.type === 'click' && event.button === 2) {\n return;\n }\n\n if (this.elementRef.nativeElement.contains(event.target as Node)) {\n return;\n }\n\n this.contextMenuOverlaysService.closeAll();\n }\n\n /**\n * @internal\n */\n public hideSubMenus(): void {\n this.menuDirectives.forEach((menuDirective) => {\n menuDirective.subMenu?.hide();\n });\n }\n\n /**\n * @internal\n */\n public stopEvent(event: MouseEvent) {\n event.stopPropagation();\n }\n\n /**\n * @internal\n */\n public isMenuItemDisabled(menuItem: ContextMenuItemDirective<T>): boolean {\n return evaluateIfFunction(menuItem.disabled, this.value);\n }\n\n /**\n * @internal\n */\n public isMenuItemVisible(\n menuItem: ContextMenuContentItemDirective<T>\n ): boolean {\n return evaluateIfFunction(\n menuItem.contextMenuContentItem?.visible,\n this.value\n );\n }\n\n /**\n * @internal\n */\n public openSubMenu(\n subMenu: ContextMenuComponent<T> | undefined,\n event: MouseEvent | KeyboardEvent\n ): void {\n if (!subMenu) {\n return;\n }\n\n if (this.focusKeyManager?.activeItemIndex === null) {\n return;\n }\n\n const anchorContextMenuContentItem =\n this.contextMenuContentItems?.toArray()[\n this.focusKeyManager?.activeItemIndex ?? 0\n ];\n const anchorElement =\n anchorContextMenuContentItem &&\n anchorContextMenuContentItem.nativeElement;\n\n if (anchorElement && event instanceof KeyboardEvent) {\n subMenu.show({\n anchoredTo: 'element',\n anchorElement,\n value: this.value,\n parentContextMenu: this,\n });\n\n return;\n }\n\n if (subMenu.isOpen) {\n return;\n }\n\n if (event.currentTarget) {\n subMenu.show({\n anchoredTo: 'element',\n anchorElement: event.currentTarget,\n value: this.value,\n parentContextMenu: this,\n });\n\n return;\n }\n\n subMenu.show({\n anchoredTo: 'position',\n x: (event as MouseEvent).clientX,\n y: (event as MouseEvent).clientY,\n value: this.value,\n });\n }\n\n /**\n * @internal\n */\n public onMenuItemSelect(\n menuContentItem: ContextMenuContentItemDirective<T>,\n event: MouseEvent | KeyboardEvent\n ): void {\n this.cancelEvent(event);\n this.openSubMenu(menuContentItem.contextMenuContentItem?.subMenu, event);\n if (!menuContentItem.contextMenuContentItem?.subMenu) {\n this.triggerExecute(menuContentItem, event);\n }\n }\n\n private triggerExecute(\n menuItem: ContextMenuContentItemDirective<T>,\n event: MouseEvent | KeyboardEvent\n ): void {\n menuItem.contextMenuContentItem?.triggerExecute(event, this.value);\n }\n\n private setupDirectives() {\n this.menuDirectives.forEach((menuDirective) => {\n menuDirective.value = this.value;\n this.subscription.add(\n menuDirective.execute.subscribe((event) => {\n this.execute.emit({ ...event, menuDirective });\n })\n );\n });\n this.focusKeyManager = new TESTING_WRAPPER.FocusKeyManager<\n ContextMenuContentItemDirective<T>\n >(this.contextMenuContentItems).withWrap();\n }\n\n private openCloseActiveItemSubMenu(open: boolean, event: KeyboardEvent) {\n if (open) {\n this.openActiveItemSubMenu(event);\n return;\n }\n\n this.closeActiveItemSubMenu(event);\n }\n\n private openActiveItemSubMenu(event: KeyboardEvent) {\n if (this.focusKeyManager?.activeItemIndex === null) {\n return;\n }\n\n this.cancelEvent(event);\n\n if (this.focusKeyManager?.activeItem) {\n this.openSubMenu(\n this.focusKeyManager.activeItem?.contextMenuContentItem?.subMenu,\n event\n );\n }\n }\n\n private closeActiveItemSubMenu(event: KeyboardEvent) {\n this.hideSubMenus();\n if (!this.focusKeyManager?.activeItemIndex) {\n return;\n }\n\n this.close.emit();\n this.cancelEvent(event);\n }\n\n private cancelEvent(event?: MouseEvent | KeyboardEvent): void {\n if (!event || !event.target) {\n return;\n }\n\n const target = event.target as HTMLElement;\n if (\n ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName) ||\n target.isContentEditable\n ) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","@for (menuDirective of menuDirectives; track menuDirective; let i = $index) {\n@if (menuDirective.divider) {\n<hr\n [contextMenuContentItem]=\"menuDirective\"\n role=\"separator\"\n (mouseenter)=\"hideSubMenus()\"\n/>\n} @if (!menuDirective.divider && !menuDirective.passive) {\n<button\n #buttonContextMenuContentItem=\"contextMenuContentItem\"\n [contextMenuContentItem]=\"menuDirective\"\n type=\"button\"\n role=\"menuitem\"\n [attr.aria-haspopup]=\"!!menuDirective.subMenu ? 'menu' : null\"\n [class.ngx-contextmenu--parent-menu]=\"!!menuDirective.subMenu\"\n [attr.disabled]=\"isMenuItemDisabled(menuDirective) ? 'disabled' : null\"\n (click)=\"onMenuItemSelect(buttonContextMenuContentItem, $event)\"\n (mouseenter)=\"\n hideSubMenus();\n openSubMenu(\n buttonContextMenuContentItem.contextMenuContentItem?.subMenu,\n $event\n )\n \"\n>\n <ng-template\n [ngTemplateOutlet]=\"menuDirective.template\"\n [ngTemplateOutletContext]=\"{ $implicit: value }\"\n ></ng-template>\n</button>\n} @if (!menuDirective.divider && menuDirective.passive) {\n<span\n [contextMenuContentItem]=\"menuDirective\"\n class=\"ngx-contextmenu-item--passive\"\n role=\"menuitem\"\n [attr.aria-disabled]=\"isMenuItemDisabled(menuDirective)\"\n (click)=\"stopEvent($event)\"\n (contextmenu)=\"stopEvent($event)\"\n [class.disabled]=\"isMenuItemDisabled(menuDirective)\"\n (mouseenter)=\"isMenuItemDisabled(menuDirective) ? null : hideSubMenus()\"\n>\n <ng-template\n [ngTemplateOutlet]=\"menuDirective.template\"\n [ngTemplateOutletContext]=\"{ $implicit: value }\"\n ></ng-template>\n</span>\n} }\n","import { ConnectedPosition } from '@angular/cdk/overlay';\n\nexport const getPositionsToXY = (\n dir: 'rtl' | 'ltr' = 'ltr'\n): ConnectedPosition[] => {\n if (dir === 'ltr') {\n return [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n },\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n },\n ];\n }\n\n return [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n },\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n },\n ];\n};\n\nexport const getPositionsToAnchorElement = (\n dir: 'rtl' | 'ltr' = 'ltr'\n): ConnectedPosition[] => {\n if (dir === 'ltr') {\n return [\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n ];\n } else {\n return [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ];\n }\n};\n","import {\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayRef,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ContextMenuItemDirective } from '../../directives/context-menu-item/context-menu-item.directive';\nimport { evaluateIfFunction } from '../../helper/evaluate';\nimport { ContextMenuOverlaysService } from '../../services/context-menu-overlays/context-menu-overlays.service';\nimport { ContextMenuContentComponent } from '../context-menu-content/context-menu-content.component';\nimport {\n getPositionsToAnchorElement,\n getPositionsToXY,\n} from './context-menu.component.helpers';\nimport {\n ContextMenuOpenEvent,\n IContextMenuContext,\n} from './context-menu.component.interface';\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'context-menu',\n template: '',\n standalone: false,\n})\nexport class ContextMenuComponent<T> implements OnInit, OnDestroy {\n /**\n * A CSS class to apply to the context menu overlay, ideal for theming and custom styling\n */\n @Input()\n public menuClass = '';\n\n /**\n * Disable the whole context menu\n */\n @Input()\n public disabled = false;\n\n /**\n * Whether the menu is oriented to the right (default: `ltr`) or to the right (`rtl`)\n */\n @Input()\n public dir: 'ltr' | 'rtl' | undefined;\n\n /**\n * Emit when the menu is opened\n */\n @Output()\n public open = new EventEmitter<ContextMenuOpenEvent<T>>();\n\n /**\n * Emit when the menu is closed\n */\n @Output()\n public close = new EventEmitter<void>();\n\n /**\n * The menu item directives defined inside the component\n */\n @ContentChildren(ContextMenuItemDirective)\n public menuItems?: QueryList<ContextMenuItemDirective<T>>;\n\n /**\n * Returns true if the context menu is opened, false otherwise\n */\n public get isOpen(): boolean {\n return this.#isOpen;\n }\n\n /**\n * @internal\n */\n public visibleMenuItems: ContextMenuItemDirective<T>[] = [];\n /**\n * @internal\n */\n public value?: T;\n\n private subscriptions: Subscription = new Subscription();\n private overlayRef?: OverlayRef;\n private contextMenuContentComponent?: ContextMenuContentComponent<T>;\n #isOpen = false;\n\n constructor(\n private overlay: Overlay,\n private scrollStrategy: ScrollStrategyOptions,\n private contextMenuOverlaysService: ContextMenuOverlaysService\n ) {}\n\n /**\n * @internal\n */\n public ngOnInit(): void {\n const subscription = this.contextMenuOverlaysService.allClosed.subscribe(\n () => {\n this.#isOpen = false;\n }\n );\n\n this.subscriptions.add(subscription);\n }\n\n /**\n * @internal\n */\n public ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n }\n\n /**\n * @internal\n */\n public show(event: ContextMenuOpenEvent<T>): void {\n if (this.disabled) {\n return;\n }\n\n this.value = event.value;\n this.setVisibleMenuItems();\n\n this.openContextMenu({\n ...event,\n menuItemDirectives: this.visibleMenuItems,\n menuClass: this.menuClass,\n dir: this.dir,\n });\n\n this.open.next(event);\n }\n\n /**\n * @internal\n */\n public hide(): void {\n this.contextMenuContentComponent?.menuDirectives.forEach(\n (menuDirective) => {\n menuDirective.subMenu?.hide();\n }\n );\n this.overlayRef?.detach();\n this.overlayRef?.dispose();\n this.#isOpen = false;\n }\n\n /**\n * @internal\n */\n public openContextMenu(context: IContextMenuContext<T>) {\n let positionStrategy: FlexibleConnectedPositionStrategy;\n\n if (context.anchoredTo === 'position') {\n positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo({\n x: context.x,\n y: context.y,\n })\n .withPositions(getPositionsToXY(context.dir));\n } else {\n const { anchorElement, parentContextMenu } = context;\n positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(new ElementRef(anchorElement))\n .withPositions(getPositionsToAnchorElement(parentContextMenu.dir));\n }\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n panelClass: 'ngx-contextmenu-overlay',\n scrollStrategy: this.scrollStrategy.close(),\n });\n this.contextMenuOverlaysService.push(this.overlayRef);\n this.attachContextMenu(context);\n\n this.#isOpen = true;\n }\n\n private attachContextMenu(context: IContextMenuContext<T>): void {\n const { value, menuItemDirectives } = context;\n const contextMenuContentRef = this.overlayRef?.attach(\n new ComponentPortal<ContextMenuContentComponent<T>>(\n ContextMenuContentComponent\n )\n );\n const contextMenuContentComponent = contextMenuContentRef?.instance;\n\n if (!contextMenuContentComponent) {\n return;\n }\n\n this.contextMenuContentComponent = contextMenuContentComponent;\n\n contextMenuContentComponent.value = value;\n contextMenuContentComponent.menuDirectives = menuItemDirectives;\n contextMenuContentComponent.menuClass = this.getMenuClass(context);\n contextMenuContentComponent.dir = this.getDir(context);\n\n const closeSubscription = contextMenuContentComponent.close.subscribe(\n () => {\n this.overlayRef?.detach();\n this.overlayRef?.dispose();\n }\n );\n\n const executeSubscription = contextMenuContentComponent.execute.subscribe(\n () => {\n this.contextMenuOverlaysService.closeAll();\n }\n );\n\n contextMenuContentRef.onDestroy(() => {\n this.close.emit();\n closeSubscription.unsubscribe();\n executeSubscription.unsubscribe();\n });\n contextMenuContentRef.changeDetectorRef.detectChanges();\n }\n\n private getMenuClass(event: IContextMenuContext<T>): string {\n return (\n event.menuClass ||\n (event.anchoredTo === 'element' && event?.parentContextMenu?.menuClass) ||\n ''\n );\n }\n\n private getDir(event: IContextMenuContext<T>): 'ltr' | 'rtl' | undefined {\n return (\n event.dir ||\n (event.anchoredTo === 'element' && event?.parentContextMenu?.dir) ||\n undefined\n );\n }\n\n private isMenuItemVisible(menuItem: ContextMenuItemDirective<T>): boolean {\n return evaluateIfFunction(menuItem.visible, this.value);\n }\n\n private setVisibleMenuItems(): void {\n this.visibleMenuItems =\n this.menuItems?.filter((menuItem) => this.isMenuItemVisible(menuItem)) ??\n [];\n }\n}\n","import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n} from '@angular/core';\nimport type { ContextMenuComponent } from '../../components/context-menu/context-menu.component';\nimport { ContextMenuOverlaysService } from '../../services/context-menu-overlays/context-menu-overlays.service';\n\n@Directive({\n selector: '[contextMenu]',\n exportAs: 'ngxContextMenu',\n host: {\n role: 'button',\n 'attr.aria-haspopup': 'menu',\n },\n standalone: false,\n})\nexport class ContextMenuDirective<T> {\n /**\n * The value related to the context menu\n */\n @Input()\n public contextMenuValue!: T;\n\n /**\n * The component holding the menu item directive templates\n */\n @Input()\n public contextMenu?: ContextMenuComponent<T>;\n\n /**\n * The directive must have a tabindex for being accessible\n */\n @Input()\n @HostBinding('attr.tabindex')\n public tabindex: string | number = '0';\n\n /**\n * Return true if the context menu is opened, false otherwise\n */\n @HostBinding('attr.aria-expanded')\n public get isOpen(): boolean {\n return this.contextMenu?.isOpen ?? false;\n }\n\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n private contextMenuOverlaysService: ContextMenuOverlaysService\n ) {}\n\n /**\n * @internal\n */\n @HostListener('contextmenu', ['$event'])\n public onContextMenu(event: MouseEvent): void {\n if (!this.canOpen()) {\n return;\n }\n\n this.closeAll();\n\n this.contextMenu?.show({\n anchoredTo: 'position',\n x: event.clientX,\n y: event.clientY,\n value: this.contextMenuValue,\n });\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * @internal\n */\n @HostListener('window:contextmenu')\n @HostListener('window:keydown.Escape')\n public onKeyArrowEscape(): void {\n this.close();\n }\n\n /**\n * Programmatically open the context menu\n */\n public open(event?: MouseEvent): void {\n if (!this.canOpen()) {\n return;\n }\n\n if (event instanceof MouseEvent) {\n this.onContextMenu(event);\n return;\n }\n\n const { x, y, height } =\n this.elementRef.nativeElement.getBoundingClientRect();\n\n this.contextMenu?.show({\n anchoredTo: 'position',\n x,\n y: y + height,\n value: this.contextMenuValue,\n });\n }\n\n /**\n * Programmatically close the context menu\n */\n public close(): void {\n this.contextMenu?.hide();\n }\n\n private closeAll(): void {\n this.contextMenuOverlaysService.closeAll();\n }\n\n private canOpen(): boolean {\n return (this.contextMenu && !this.contextMenu.disabled) ?? false;\n }\n}\n","import {\n FullscreenOverlayContainer,\n OverlayContainer,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ContextMenuContentComponent } from './components/context-menu-content/context-menu-content.component';\nimport { ContextMenuComponent } from './components/context-menu/context-menu.component';\nimport { ContextMenuContentItemDirective } from './directives/context-menu-content-item/context-menu-content-item.directive';\nimport { ContextMenuItemDirective } from './directives/context-menu-item/context-menu-item.directive';\nimport { ContextMenuDirective } from './directives/context-menu/context-menu.directive';\n\n@NgModule({\n declarations: [\n ContextMenuComponent,\n ContextMenuContentComponent,\n ContextMenuContentItemDirective,\n ContextMenuDirective,\n ContextMenuItemDirective,\n ],\n providers: [\n { provide: OverlayContainer, useClass: FullscreenOverlayContainer },\n ],\n exports: [\n ContextMenuDirective,\n ContextMenuComponent,\n ContextMenuItemDirective,\n ],\n imports: [CommonModule, OverlayModule],\n})\nexport class ContextMenuModule {}\n","import { Injectable } from '@angular/core';\nimport { ContextMenuComponent } from '../../components/context-menu/context-menu.component';\nimport { ContextMenuOverlaysService } from '../context-menu-overlays/context-menu-overlays.service';\n\nexport interface ContextMenuOpenAtPositionOptions<T> {\n /**\n * Optional associated data to the context menu, will be emitted when a menu item is selected\n */\n value?: T;\n /**\n * The horizontal position of the menu\n */\n x: number;\n /**\n * The vertical position of the menu\n */\n y: number;\n}\n\n/**\n * Programmatically open a ContextMenuComponent to a X/Y position\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ContextMenuService<T> {\n constructor(private contextMenuOverlaysService: ContextMenuOverlaysService) {}\n /**\n * Show the given `ContextMenuComponent` at a specified X/Y position\n */\n public show(\n contextMenu: ContextMenuComponent<T>,\n options: ContextMenuOpenAtPositionOptions<T> = { x: 0, y: 0 }\n ) {\n contextMenu.show({\n anchoredTo: 'position',\n value: options.value,\n x: options.x,\n y: options.y,\n });\n }\n\n /**\n * Close all open `ContextMenuComponent`\n */\n public closeAll(): void {\n this.contextMenuOverlaysService.closeAll();\n }\n\n /**\n * Return true if any `ContextMenuComponent` is open\n */\n public hasOpenMenu(): boolean {\n return !this.contextMenuOverlaysService.isEmpty();\n }\n}\n","/*\n * Public API Surface of @perfectmemory/ngx-contextmenu\n */\n\nexport { ContextMenuModule } from './lib/ngx-contextmenu.module';\n/**\n * Components\n */\nexport { ContextMenuComponent } from './lib/components/context-menu/context-menu.component';\nexport { ContextMenuOpenEvent } from './lib/components/context-menu/context-menu.component.interface';\n/**\n * Directives\n */\nexport { ContextMenuItemDirective } from './lib/directives/context-menu-item/context-menu-item.directive';\nexport { ContextMenuDirective } from './lib/directives/context-menu/context-menu.directive';\n\n/**\n * Services\n */\nexport { ContextMenuService } from './lib/services/context-menu/context-menu.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ContextMenuOverlaysService","i3.ContextMenuContentItemDirective","i2.ContextMenuOverlaysService"],"mappings":"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