@kreash/ngx-contextmenu
Version:
An Angular component to show a context menu on an arbitrary component
1 lines • 44.2 kB
Source Map (JSON)
{"version":3,"file":"kreash-ngx-contextmenu.mjs","sources":["../../../projects/ngx-contextmenu/src/lib/context-menu.tokens.ts","../../../projects/ngx-contextmenu/src/lib/utils/context-menu.utils.ts","../../../projects/ngx-contextmenu/src/lib/components/context-menu-content/context-menu-content.component.ts","../../../projects/ngx-contextmenu/src/lib/components/context-menu-content/context-menu-content.component.html","../../../projects/ngx-contextmenu/src/lib/directives/context-menu-item.directive.ts","../../../projects/ngx-contextmenu/src/lib/context-menu.service.ts","../../../projects/ngx-contextmenu/src/lib/components/context-menu/context-menu.component.ts","../../../projects/ngx-contextmenu/src/lib/directives/context-menu-attach.directive.ts","../../../projects/ngx-contextmenu/src/lib/context-menu.module.ts","../../../projects/ngx-contextmenu/src/public-api.ts","../../../projects/ngx-contextmenu/src/kreash-ngx-contextmenu.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const CONTEXT_MENU_OPTIONS = new InjectionToken('CONTEXT_MENU_OPTIONS');\n","export function evaluateIfFunction<T, TItem>(value: T | ((state: TItem) => T), item: TItem): T {\n return value instanceof Function ? value(item) : value;\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { IContextMenuOptions } from '../../models/context-menu-options.model';\nimport { CloseLeafMenuEvent, IContextMenuClickEvent } from '../../models/context-menu.model';\nimport { CONTEXT_MENU_OPTIONS } from '../../context-menu.tokens';\nimport { ContextMenuItemDirective } from '../../directives/context-menu-item.directive';\nimport { evaluateIfFunction } from '../../utils/context-menu.utils';\n\nexport interface ILinkConfig {\n click: (item: any, $event?: MouseEvent) => void;\n enabled?: (item: any) => boolean;\n html: (item: any) => string;\n}\n\nconst ARROW_LEFT_KEYCODE = 37;\n\n@Component({\n selector: 'context-menu-content',\n styleUrls: ['./context-menu-content.component.scss'],\n templateUrl: './context-menu-content.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ContextMenuContentComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() public menuItems: ContextMenuItemDirective[] = [];\n @Input() public item: any;\n @Input() public event: MouseEvent | KeyboardEvent;\n @Input() public parentContextMenu: ContextMenuContentComponent;\n @Input() public menuClass: string;\n @Input() public overlay: OverlayRef;\n @Input() public isLeaf = false;\n @Output() public execute: EventEmitter<{\n event: MouseEvent | KeyboardEvent;\n item: any;\n menuItem: ContextMenuItemDirective;\n }> = new EventEmitter();\n @Output() public openSubMenu: EventEmitter<IContextMenuClickEvent> = new EventEmitter();\n @Output() public closeLeafMenu: EventEmitter<CloseLeafMenuEvent> = new EventEmitter();\n @Output() public closeAllMenus: EventEmitter<{\n event: MouseEvent;\n }> = new EventEmitter();\n @ViewChild('menu', { static: true }) public menuElement: ElementRef;\n @ViewChildren('li') public menuItemElements: QueryList<ElementRef>;\n\n public autoFocus = false;\n public useBootstrap4 = false;\n private _keyManager: ActiveDescendantKeyManager<ContextMenuItemDirective>;\n private subscription: Subscription = new Subscription();\n constructor(\n @Optional()\n @Inject(CONTEXT_MENU_OPTIONS)\n options: IContextMenuOptions,\n ) {\n if (options) {\n this.autoFocus = options.autoFocus;\n this.useBootstrap4 = options.useBootstrap4;\n }\n }\n\n ngOnInit(): void {\n this.menuItems.forEach((menuItem) => {\n menuItem.currentItem = this.item;\n this.subscription.add(menuItem.execute.subscribe((event) => this.execute.emit({ ...event, menuItem })));\n });\n const queryList = new QueryList<ContextMenuItemDirective>();\n queryList.reset(this.menuItems);\n this._keyManager = new ActiveDescendantKeyManager<ContextMenuItemDirective>(queryList).withWrap();\n }\n\n ngAfterViewInit() {\n if (this.autoFocus) {\n setTimeout(() => this.focus());\n }\n this.overlay.updatePosition();\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n focus(): void {\n if (this.autoFocus) {\n this.menuElement.nativeElement.focus();\n }\n }\n\n stopEvent($event: MouseEvent) {\n $event.stopPropagation();\n }\n\n public isMenuItemEnabled(menuItem: ContextMenuItemDirective): boolean {\n return evaluateIfFunction(menuItem?.enabled, this.item);\n }\n\n public isMenuItemVisible(menuItem: ContextMenuItemDirective): boolean {\n return evaluateIfFunction(menuItem?.visible, this.item);\n }\n\n public isDisabled(link: ILinkConfig): boolean {\n return link.enabled && !link.enabled(this.item);\n }\n\n @HostListener('window:keydown.ArrowDown', ['$event'])\n @HostListener('window:keydown.ArrowUp', ['$event'])\n public onKeyEvent(event: KeyboardEvent): void {\n if (!this.isLeaf) {\n return;\n }\n this._keyManager.onKeydown(event);\n }\n\n @HostListener('window:keydown.ArrowRight', ['$event'])\n public keyboardOpenSubMenu(event?: KeyboardEvent): void {\n if (!this.isLeaf) {\n return;\n }\n this.cancelEvent(event);\n const menuItem = this.menuItems[this._keyManager.activeItemIndex];\n if (menuItem) {\n this.onOpenSubMenu(menuItem);\n }\n }\n\n @HostListener('window:keydown.Enter', ['$event'])\n @HostListener('window:keydown.Space', ['$event'])\n public keyboardMenuItemSelect(event?: KeyboardEvent): void {\n if (!this.isLeaf) {\n return;\n }\n this.cancelEvent(event);\n const menuItem = this.menuItems[this._keyManager.activeItemIndex];\n if (menuItem) {\n this.onMenuItemSelect(menuItem, event);\n }\n }\n\n @HostListener('window:keydown.Escape', ['$event'])\n @HostListener('window:keydown.ArrowLeft', ['$event'])\n public onCloseLeafMenu(event: KeyboardEvent): void {\n if (!this.isLeaf) {\n return;\n }\n this.cancelEvent(event);\n this.closeLeafMenu.emit({\n exceptRootMenu: event.keyCode === ARROW_LEFT_KEYCODE,\n event,\n });\n }\n\n @HostListener('document:click', ['$event'])\n @HostListener('document:contextmenu', ['$event'])\n public closeMenu(event: MouseEvent): void {\n if (event.type === 'click' && event.button === 2) {\n return;\n }\n this.closeAllMenus.emit({ event });\n }\n\n public onOpenSubMenu(menuItem: ContextMenuItemDirective, event?: MouseEvent | KeyboardEvent): void {\n const anchorElementRef = this.menuItemElements.toArray()[this._keyManager.activeItemIndex];\n const anchorElement = anchorElementRef && anchorElementRef.nativeElement;\n this.openSubMenu.emit({\n anchorElement,\n contextMenu: menuItem.subMenu,\n event,\n item: this.item,\n parentContextMenu: this,\n });\n }\n\n public onMenuItemSelect(menuItem: ContextMenuItemDirective, event: MouseEvent | KeyboardEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.onOpenSubMenu(menuItem, event);\n if (!menuItem.subMenu) {\n menuItem.triggerExecute(this.item, event);\n }\n }\n\n private cancelEvent(event): void {\n if (!event) {\n return;\n }\n\n const target: HTMLElement = event.target;\n if (['INPUT', 'TEXTAREA', 'SELECT'].indexOf(target.tagName) > -1 || target.isContentEditable) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","<div class=\"dropdown open show ngx-contextmenu\" [ngClass]=\"menuClass\" tabindex=\"0\">\n <ul #menu class=\"dropdown-menu show\" style=\"position: static; float: none\" tabindex=\"0\">\n @for (menuItem of menuItems; track $index) {\n <li\n #li\n [class.disabled]=\"!isMenuItemEnabled(menuItem)\"\n [class.divider]=\"menuItem.divider\"\n [class.dropdown-divider]=\"useBootstrap4 && menuItem.divider\"\n [class.active]=\"menuItem.isActive && isMenuItemEnabled(menuItem)\"\n [attr.role]=\"menuItem.divider ? 'separator' : undefined\"\n >\n @if (!menuItem.divider && !menuItem.passive) {\n <a\n href\n [class.dropdown-item]=\"useBootstrap4\"\n [class.active]=\"menuItem.isActive && isMenuItemEnabled(menuItem)\"\n [class.disabled]=\"useBootstrap4 && !isMenuItemEnabled(menuItem)\"\n [class.hasSubMenu]=\"!!menuItem.subMenu\"\n (click)=\"onMenuItemSelect(menuItem, $event)\"\n (mouseenter)=\"onOpenSubMenu(menuItem, $event)\"\n >\n <ng-template [ngTemplateOutlet]=\"menuItem.template\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-template>\n </a>\n }\n @if (!menuItem.divider && menuItem.passive) {\n <span\n (click)=\"stopEvent($event)\"\n (contextmenu)=\"stopEvent($event)\"\n class=\"passive\"\n *ngIf=\"!menuItem.divider && menuItem.passive\"\n [class.dropdown-item]=\"useBootstrap4\"\n [class.disabled]=\"useBootstrap4 && !isMenuItemEnabled(menuItem)\"\n >\n <ng-template [ngTemplateOutlet]=\"menuItem.template\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-template>\n </span>\n }\n </li>\n }\n </ul>\n</div>\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { Directive, ElementRef, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport { evaluateIfFunction } from '../utils/context-menu.utils';\n\n@Directive({\n selector: '[contextMenuItem]',\n standalone: false\n})\nexport class ContextMenuItemDirective<TItem = any> implements Highlightable {\n @Input() public subMenu: any;\n @Input() public divider = false;\n @Input() public enabled: boolean | ((item: TItem) => boolean) = true;\n @Input() public passive = false;\n @Input() public visible: boolean | ((item: TItem) => boolean) = true;\n @Output() public execute: EventEmitter<{\n event: MouseEvent | KeyboardEvent;\n item: TItem;\n }> = new EventEmitter();\n\n public currentItem: TItem;\n public isActive = false;\n public get disabled() {\n return this.passive || this.divider || !evaluateIfFunction(this.enabled, this.currentItem);\n }\n\n constructor(public template: TemplateRef<{ item: TItem }>, public elementRef: ElementRef) {}\n\n public setActiveStyles(): void {\n this.isActive = true;\n }\n public setInactiveStyles(): void {\n this.isActive = false;\n }\n\n public triggerExecute(item: TItem, $event?: MouseEvent | KeyboardEvent): void {\n if (!evaluateIfFunction(this.enabled, item)) {\n return;\n }\n this.execute.emit({ event: $event, item });\n }\n}\n","import { ConnectedPosition, Overlay, OverlayRef, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ComponentRef, ElementRef, Injectable } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\n\nimport { ContextMenuContentComponent } from './components/context-menu-content/context-menu-content.component';\nimport {\n CloseContextMenuEvent,\n CloseLeafMenuEvent,\n IContextMenuClickEvent,\n IContextMenuContext,\n OverlayRefWithContextMenu,\n} from './models/context-menu.model';\n\ninterface IFakeElement {\n getBoundingClientRect: () => DOMRect;\n}\n\n@Injectable()\nexport class ContextMenuService {\n public isDestroyingLeafMenu = false;\n\n public show: Subject<IContextMenuClickEvent> = new Subject();\n public close: Subject<CloseContextMenuEvent> = new Subject();\n\n private overlays: OverlayRef[] = [];\n private fakeElement: IFakeElement = {\n getBoundingClientRect: (): DOMRect => new DOMRect(0, 0, 0, 0),\n };\n\n private readonly rootMenuPositionsFor: ConnectedPosition[] = [\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 private readonly subMenuPositions: ConnectedPosition[] = [\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\n constructor(private overlay: Overlay, private scrollStrategy: ScrollStrategyOptions) {}\n\n public openContextMenu(context: IContextMenuContext) {\n const { anchorElement, event, parentContextMenu } = context;\n\n if (!parentContextMenu) {\n const mouseEvent = event as MouseEvent;\n this.fakeElement.getBoundingClientRect = (): DOMRect => new DOMRect(mouseEvent.clientX, mouseEvent.clientY, 0, 0);\n\n this.closeAllContextMenus({ eventType: 'cancel', event });\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(new ElementRef(anchorElement ?? this.fakeElement))\n .withPositions(this.rootMenuPositionsFor)\n .withFlexibleDimensions(false);\n this.overlays = [\n this.overlay.create({\n positionStrategy,\n panelClass: 'ngx-contextmenu',\n scrollStrategy: this.scrollStrategy.close(),\n }),\n ];\n this.attachContextMenu(this.overlays[0], context);\n } else {\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(new ElementRef(event?.target ?? anchorElement))\n .withPositions(this.subMenuPositions)\n .withFlexibleDimensions(false);\n const newOverlay = this.overlay.create({\n positionStrategy,\n panelClass: 'ngx-contextmenu',\n scrollStrategy: this.scrollStrategy.close(),\n });\n this.destroySubMenus(parentContextMenu);\n this.overlays = this.overlays.concat(newOverlay);\n this.attachContextMenu(newOverlay, context);\n }\n }\n\n public attachContextMenu(overlay: OverlayRef, context: IContextMenuContext): void {\n const { event, item, menuItems, menuClass } = context;\n\n const contextMenuContent: ComponentRef<ContextMenuContentComponent> = overlay.attach(new ComponentPortal(ContextMenuContentComponent));\n const contentInstance = contextMenuContent.instance;\n contentInstance.event = event;\n contentInstance.item = item;\n contentInstance.menuItems = menuItems;\n contentInstance.overlay = overlay;\n contentInstance.isLeaf = true;\n contentInstance.menuClass = menuClass;\n (<OverlayRefWithContextMenu>overlay).contextMenu = contentInstance;\n\n const subscriptions: Subscription = new Subscription();\n subscriptions.add(contentInstance.execute.subscribe((executeEvent) => this.closeAllContextMenus({ eventType: 'execute', ...executeEvent })));\n subscriptions.add(\n contentInstance.closeAllMenus.subscribe((closeAllEvent) => this.closeAllContextMenus({ eventType: 'cancel', ...closeAllEvent })),\n );\n subscriptions.add(contentInstance.closeLeafMenu.subscribe((closeLeafMenuEvent) => this.destroyLeafMenu(closeLeafMenuEvent)));\n subscriptions.add(\n contentInstance.openSubMenu.subscribe((subMenuEvent: IContextMenuContext) => {\n this.destroySubMenus(contentInstance);\n if (!subMenuEvent.contextMenu) {\n contentInstance.isLeaf = true;\n return;\n }\n contentInstance.isLeaf = false;\n this.show.next(subMenuEvent);\n }),\n );\n contextMenuContent.onDestroy(() => {\n menuItems.forEach((menuItem) => (menuItem.isActive = false));\n subscriptions.unsubscribe();\n });\n contextMenuContent.changeDetectorRef.detectChanges();\n }\n\n public closeAllContextMenus(closeEvent: CloseContextMenuEvent): void {\n if (this.overlays?.length) {\n this.close.next(closeEvent);\n this.overlays.forEach((overlay) => this.destroyOverlay(overlay));\n }\n this.overlays = [];\n }\n\n public getLastAttachedOverlay(): OverlayRefWithContextMenu {\n let overlay: OverlayRef = this.overlays.at(-1);\n while (this.overlays.length > 1 && overlay && !overlay.hasAttached()) {\n this.destroyOverlay(overlay);\n this.overlays = this.overlays.slice(0, -1);\n overlay = this.overlays.at(-1);\n }\n return overlay;\n }\n\n public destroyLeafMenu({ exceptRootMenu, event }: CloseLeafMenuEvent = {}): void {\n if (this.isDestroyingLeafMenu) {\n return;\n }\n this.isDestroyingLeafMenu = true;\n\n setTimeout(() => {\n const overlay = this.getLastAttachedOverlay();\n if (this.overlays.length > 1 && overlay) {\n this.destroyOverlay(overlay);\n }\n if (!exceptRootMenu && this.overlays.length > 0 && overlay) {\n this.close.next({ eventType: 'cancel', event });\n this.destroyOverlay(overlay);\n }\n\n const newLeaf = this.getLastAttachedOverlay();\n if (newLeaf) {\n newLeaf.contextMenu.isLeaf = true;\n }\n\n this.isDestroyingLeafMenu = false;\n });\n }\n\n public destroySubMenus(contextMenu: ContextMenuContentComponent): void {\n const overlay = contextMenu.overlay;\n const index = this.overlays.indexOf(overlay);\n this.overlays.slice(index + 1).forEach((subMenuOverlay) => {\n this.destroyOverlay(subMenuOverlay);\n });\n }\n\n public isLeafMenu(contextMenuContent: ContextMenuContentComponent): boolean {\n const overlay = this.getLastAttachedOverlay();\n return contextMenuContent.overlay === overlay;\n }\n\n private destroyOverlay(overlay: OverlayRef): void {\n overlay.detach();\n overlay.dispose();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nimport { IContextMenuOptions } from '../../models/context-menu-options.model';\nimport { CloseContextMenuEvent, IContextMenuClickEvent } from '../../models/context-menu.model';\nimport { ContextMenuService } from '../../context-menu.service';\nimport { CONTEXT_MENU_OPTIONS } from '../../context-menu.tokens';\nimport { ContextMenuItemDirective } from '../../directives/context-menu-item.directive';\nimport { evaluateIfFunction } from '../../utils/context-menu.utils';\n\nexport interface ILinkConfig {\n click: (item: any, $event?: MouseEvent) => void;\n enabled?: (item: any) => boolean;\n html: (item: any) => string;\n}\nexport interface MouseLocation {\n left?: string;\n top?: string;\n marginLeft?: string;\n marginTop?: string;\n}\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'context-menu',\n styleUrls: ['./context-menu.component.scss'],\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ContextMenuComponent implements OnDestroy {\n @Input() public menuClass = '';\n @Input() public autoFocus = false;\n @Input() public useBootstrap4 = false;\n @Input() public disabled = false;\n @Output() public close: EventEmitter<CloseContextMenuEvent> = new EventEmitter();\n @Output() public open: EventEmitter<IContextMenuClickEvent> = new EventEmitter();\n\n @ContentChildren(ContextMenuItemDirective) public menuItems: QueryList<ContextMenuItemDirective>;\n public visibleMenuItems: ContextMenuItemDirective[] = [];\n\n @ViewChild('menu', { static: false }) public menuElement: ElementRef;\n\n public links: ILinkConfig[] = [];\n public item: any;\n public event: MouseEvent | KeyboardEvent;\n\n private subscription: Subscription = new Subscription();\n\n constructor(\n private contextMenuService: ContextMenuService,\n @Optional()\n @Inject(CONTEXT_MENU_OPTIONS)\n options: IContextMenuOptions,\n ) {\n if (options) {\n this.autoFocus = options.autoFocus;\n this.useBootstrap4 = options.useBootstrap4;\n }\n this.subscription.add(\n contextMenuService.show.subscribe((menuEvent) => {\n this.onMenuEvent(menuEvent);\n }),\n );\n }\n\n public ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n public onMenuEvent(menuEvent: IContextMenuClickEvent): void {\n if (this.disabled) {\n return;\n }\n const { contextMenu, event, item } = menuEvent;\n if (contextMenu && contextMenu !== this) {\n return;\n }\n this.event = event;\n this.item = item;\n this.setVisibleMenuItems();\n this.contextMenuService.openContextMenu({\n ...menuEvent,\n menuItems: this.visibleMenuItems,\n menuClass: this.menuClass,\n });\n this.contextMenuService.close\n .pipe(first())\n .subscribe((closeEvent) => this.close.emit(closeEvent));\n this.open.next(menuEvent);\n }\n\n public isMenuItemVisible(menuItem: ContextMenuItemDirective): boolean {\n return evaluateIfFunction(menuItem.visible, this.item);\n }\n\n public setVisibleMenuItems(): void {\n this.visibleMenuItems = this.menuItems.filter((menuItem) => this.isMenuItemVisible(menuItem));\n }\n}\n","import { ContextMenuComponent } from '../components/context-menu/context-menu.component';\nimport { ContextMenuService } from '../context-menu.service';\nimport { Directive, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[contextMenu]',\n standalone: false\n})\nexport class ContextMenuAttachDirective {\n @Input() public contextMenuSubject: any;\n @Input() public contextMenu: ContextMenuComponent;\n\n constructor(private contextMenuService: ContextMenuService) {}\n\n @HostListener('contextmenu', ['$event'])\n public onContextMenu(event: MouseEvent): void {\n if (!this.contextMenu.disabled) {\n this.contextMenuService.show.next({\n contextMenu: this.contextMenu,\n event,\n item: this.contextMenuSubject,\n });\n event.preventDefault();\n event.stopPropagation();\n }\n }\n}\n","import { FullscreenOverlayContainer, OverlayContainer, OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { ContextMenuContentComponent } from './components/context-menu-content/context-menu-content.component';\nimport { ContextMenuComponent } from './components/context-menu/context-menu.component';\nimport { IContextMenuOptions } from './models/context-menu-options.model';\nimport { ContextMenuService } from './context-menu.service';\nimport { CONTEXT_MENU_OPTIONS } from './context-menu.tokens';\nimport { ContextMenuAttachDirective } from './directives/context-menu-attach.directive';\nimport { ContextMenuItemDirective } from './directives/context-menu-item.directive';\n\n@NgModule({\n declarations: [ContextMenuComponent, ContextMenuContentComponent, ContextMenuAttachDirective, ContextMenuItemDirective],\n exports: [ContextMenuComponent, ContextMenuAttachDirective, ContextMenuItemDirective],\n imports: [CommonModule, OverlayModule],\n})\nexport class ContextMenuModule {\n public static forRoot(options?: IContextMenuOptions): ModuleWithProviders<ContextMenuModule> {\n return {\n ngModule: ContextMenuModule,\n providers: [\n ContextMenuService,\n {\n provide: CONTEXT_MENU_OPTIONS,\n useValue: options,\n },\n { provide: OverlayContainer, useClass: FullscreenOverlayContainer },\n ],\n };\n }\n}\n","/* Public API Surface of ngx-contextmenu */\n\nexport { ContextMenuModule } from './lib/context-menu.module';\n\nexport * from './lib/components/context-menu/context-menu.component';\nexport * from './lib/context-menu.service';\nexport * from './lib/directives/context-menu-attach.directive';\nexport * from './lib/directives/context-menu-item.directive';\nexport * from './lib/models/context-menu-options.model';\nexport * from './lib/models/context-menu.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.ContextMenuService"],"mappings":"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"}