ng-primitives 0.123.0 → 0.123.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.
@@ -266,7 +266,11 @@ class NgpContextMenuSubmenuTrigger {
266
266
  }
267
267
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpContextMenuSubmenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
268
268
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpContextMenuSubmenuTrigger, isStandalone: true, selector: "[ngpContextMenuSubmenuTrigger]", inputs: { menu: { classPropertyName: "menu", publicName: "ngpContextMenuSubmenuTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpContextMenuSubmenuTriggerDisabled", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "ngpContextMenuSubmenuTriggerPlacement", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "ngpContextMenuSubmenuTriggerOffset", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "ngpContextMenuSubmenuTriggerFlip", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
269
- provideSubmenuTriggerState(),
269
+ // inherit: false - a nested submenu trigger lives inside the DI scope of its
270
+ // parent submenu trigger (via the overlay's injector). Inheriting would reuse
271
+ // the parent trigger's state signal and overwrite it with this trigger's
272
+ // state, so the parent's menu would start talking to the wrong trigger.
273
+ provideSubmenuTriggerState({ inherit: false }),
270
274
  { provide: NgpMenuTriggerStateToken, useExisting: NgpSubmenuTriggerStateToken },
271
275
  // Provide as NgpSubmenuTrigger so ngpMenuItem can detect this is a submenu trigger
272
276
  { provide: NgpSubmenuTrigger, useExisting: NgpContextMenuSubmenuTrigger },
@@ -278,7 +282,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
278
282
  selector: '[ngpContextMenuSubmenuTrigger]',
279
283
  exportAs: 'ngpContextMenuSubmenuTrigger',
280
284
  providers: [
281
- provideSubmenuTriggerState(),
285
+ // inherit: false - a nested submenu trigger lives inside the DI scope of its
286
+ // parent submenu trigger (via the overlay's injector). Inheriting would reuse
287
+ // the parent trigger's state signal and overwrite it with this trigger's
288
+ // state, so the parent's menu would start talking to the wrong trigger.
289
+ provideSubmenuTriggerState({ inherit: false }),
282
290
  { provide: NgpMenuTriggerStateToken, useExisting: NgpSubmenuTriggerStateToken },
283
291
  // Provide as NgpSubmenuTrigger so ngpMenuItem can detect this is a submenu trigger
284
292
  { provide: NgpSubmenuTrigger, useExisting: NgpContextMenuSubmenuTrigger },
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-context-menu.mjs","sources":["../../../../packages/ng-primitives/context-menu/src/config/context-menu-config.ts","../../../../packages/ng-primitives/context-menu/src/context-menu/context-menu.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-item/context-menu-item.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-item-checkbox/context-menu-item-checkbox.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-item-indicator/context-menu-item-indicator.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-item-radio/context-menu-item-radio.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-item-radio-group/context-menu-item-radio-group.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-submenu-trigger/context-menu-submenu-trigger.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-trigger/context-menu-trigger-state.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-trigger/context-menu-trigger.ts","../../../../packages/ng-primitives/context-menu/src/ng-primitives-context-menu.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core';\nimport { NgpFlip, NgpOffset, NgpShift } from 'ng-primitives/portal';\n\nexport interface NgpContextMenuConfig {\n /**\n * Define the offset of the context menu relative to the cursor position.\n * @default 2\n */\n offset: NgpOffset;\n\n /**\n * Define whether the context menu should flip when there is not enough space.\n * @default true\n */\n flip: NgpFlip;\n\n /**\n * Define the container element or selector in which the context menu should be attached.\n * @default 'body'\n */\n container: HTMLElement | string | null;\n\n /**\n * Defines how the context menu behaves when the window is scrolled.\n * @default 'close'\n */\n scrollBehavior: 'reposition' | 'block' | 'close';\n\n /**\n * Configure shift behavior to keep the context menu in view.\n * @default undefined\n */\n shift: NgpShift;\n}\n\nexport const defaultContextMenuConfig: NgpContextMenuConfig = {\n offset: 2,\n flip: true,\n container: 'body',\n scrollBehavior: 'close',\n shift: undefined,\n};\n\nexport const NgpContextMenuConfigToken = new InjectionToken<NgpContextMenuConfig>(\n 'NgpContextMenuConfigToken',\n);\n\n/**\n * Provide the default Context Menu configuration\n * @param config The Context Menu configuration\n * @returns The provider\n */\nexport function provideContextMenuConfig(config: Partial<NgpContextMenuConfig>): Provider[] {\n return [\n {\n provide: NgpContextMenuConfigToken,\n useValue: { ...defaultContextMenuConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Context Menu configuration\n * @returns The global Context Menu configuration\n */\nexport function injectContextMenuConfig(): NgpContextMenuConfig {\n return inject(NgpContextMenuConfigToken, { optional: true }) ?? defaultContextMenuConfig;\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { provideFocusTrapState } from 'ng-primitives/focus-trap';\nimport { ngpMenu, provideMenuState } from 'ng-primitives/menu';\nimport { provideControlContainerIsolation } from 'ng-primitives/portal';\nimport { ngpRovingFocusGroup, provideRovingFocusGroupState } from 'ng-primitives/roving-focus';\n\n/**\n * The `NgpContextMenu` is a container for context menu items.\n */\n@Directive({\n selector: '[ngpContextMenu]',\n exportAs: 'ngpContextMenu',\n providers: [\n provideRovingFocusGroupState({ inherit: false }),\n provideMenuState({ inherit: false }),\n provideFocusTrapState(),\n provideControlContainerIsolation(),\n ],\n})\nexport class NgpContextMenu {\n /**\n * Whether focus should wrap around when reaching the end of the menu.\n * @default true\n */\n readonly wrap = input<boolean, BooleanInput>(true, {\n alias: 'ngpContextMenuWrap',\n transform: booleanAttribute,\n });\n\n private readonly state = ngpMenu({ wrap: this.wrap });\n\n constructor() {\n ngpRovingFocusGroup({ inherit: false, wrap: this.wrap });\n }\n\n /** @internal Close the menu and any parent menus */\n closeAllMenus(origin: FocusOrigin): void {\n this.state.closeAllMenus(origin);\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpMenuItem, provideMenuItemState } from 'ng-primitives/menu';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\n\n/**\n * The `NgpContextMenuItem` directive represents a context menu item.\n */\n@Directive({\n selector: '[ngpContextMenuItem]',\n exportAs: 'ngpContextMenuItem',\n providers: [provideMenuItemState(), provideRovingFocusItemState()],\n})\nexport class NgpContextMenuItem {\n /** Whether the menu item is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuItemDisabled',\n transform: booleanAttribute,\n });\n\n /** Whether the menu should close when this item is selected */\n readonly closeOnSelect = input<boolean, BooleanInput>(true, {\n alias: 'ngpContextMenuItemCloseOnSelect',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItem({ disabled: this.disabled, closeOnSelect: this.closeOnSelect });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, output } from '@angular/core';\nimport { ngpMenuItemCheckbox, provideMenuItemCheckboxState } from 'ng-primitives/menu';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\n\n/**\n * The `NgpContextMenuItemCheckbox` directive represents a context menu item that can be toggled on and off.\n */\n@Directive({\n selector: '[ngpContextMenuItemCheckbox]',\n exportAs: 'ngpContextMenuItemCheckbox',\n providers: [provideMenuItemCheckboxState(), provideRovingFocusItemState()],\n})\nexport class NgpContextMenuItemCheckbox {\n /** Whether the checkbox is checked */\n readonly checked = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuItemCheckboxChecked',\n transform: booleanAttribute,\n });\n\n /** Event emitted when the checked state changes */\n readonly checkedChange = output<boolean>({\n alias: 'ngpContextMenuItemCheckboxCheckedChange',\n });\n\n /** Whether the menu item checkbox is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuItemCheckboxDisabled',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItemCheckbox({\n checked: this.checked,\n disabled: this.disabled,\n onCheckedChange: value => this.checkedChange.emit(value),\n });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { computed, Directive } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectMenuItemCheckboxState, injectMenuItemRadioState } from 'ng-primitives/menu';\nimport { dataBinding } from 'ng-primitives/state';\n\n/**\n * The `NgpContextMenuItemIndicator` directive renders inside a checkbox or radio context menu item\n * and exposes `data-checked` based on the parent item's checked state.\n */\n@Directive({\n selector: '[ngpContextMenuItemIndicator]',\n exportAs: 'ngpContextMenuItemIndicator',\n})\nexport class NgpContextMenuItemIndicator {\n constructor() {\n const element = injectElementRef();\n const checkboxState = injectMenuItemCheckboxState({ optional: true });\n const radioState = injectMenuItemRadioState({ optional: true });\n\n const checked = computed(() => checkboxState()?.checked() ?? radioState()?.checked() ?? false);\n\n dataBinding(element, 'data-checked', checked);\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpMenuItemRadio, provideMenuItemRadioState } from 'ng-primitives/menu';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\n\n/**\n * The `NgpContextMenuItemRadio` directive represents a radio context menu item within a radio group.\n */\n@Directive({\n selector: '[ngpContextMenuItemRadio]',\n exportAs: 'ngpContextMenuItemRadio',\n providers: [provideMenuItemRadioState(), provideRovingFocusItemState()],\n})\nexport class NgpContextMenuItemRadio {\n /** The value this radio item represents */\n readonly value = input.required<string>({\n alias: 'ngpContextMenuItemRadioValue',\n });\n\n /** Whether the radio item is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuItemRadioDisabled',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItemRadio({ value: this.value, disabled: this.disabled });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { Directive, input, output } from '@angular/core';\nimport { ngpMenuItemRadioGroup, provideMenuItemRadioGroupState } from 'ng-primitives/menu';\n\n/**\n * The `NgpContextMenuItemRadioGroup` directive represents a group of radio context menu items.\n */\n@Directive({\n selector: '[ngpContextMenuItemRadioGroup]',\n exportAs: 'ngpContextMenuItemRadioGroup',\n providers: [provideMenuItemRadioGroupState()],\n})\nexport class NgpContextMenuItemRadioGroup {\n /** The current value of the radio group */\n readonly value = input<string | null>(null, {\n alias: 'ngpContextMenuItemRadioGroupValue',\n });\n\n /** Event emitted when the value changes */\n readonly valueChange = output<string>({\n alias: 'ngpContextMenuItemRadioGroupValueChange',\n });\n\n constructor() {\n ngpMenuItemRadioGroup({\n value: this.value,\n onValueChange: value => this.valueChange.emit(value),\n });\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport {\n NgpMenuTriggerStateToken,\n NgpSubmenuTrigger,\n NgpSubmenuTriggerStateToken,\n ngpSubmenuTrigger,\n provideSubmenuTriggerState,\n type NgpMenuPlacement,\n} from 'ng-primitives/menu';\nimport {\n coerceFlip,\n coerceOffset,\n NgpFlip,\n NgpFlipInput,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n} from 'ng-primitives/portal';\n\n/**\n * The `NgpContextMenuSubmenuTrigger` directive turns a context menu item into a submenu trigger.\n */\n@Directive({\n selector: '[ngpContextMenuSubmenuTrigger]',\n exportAs: 'ngpContextMenuSubmenuTrigger',\n providers: [\n provideSubmenuTriggerState(),\n { provide: NgpMenuTriggerStateToken, useExisting: NgpSubmenuTriggerStateToken },\n // Provide as NgpSubmenuTrigger so ngpMenuItem can detect this is a submenu trigger\n { provide: NgpSubmenuTrigger, useExisting: NgpContextMenuSubmenuTrigger },\n ],\n})\nexport class NgpContextMenuSubmenuTrigger<T = unknown> {\n /**\n * Access the submenu template ref.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpContextMenuSubmenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuSubmenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the placement of the submenu relative to the trigger.\n * @default 'right-start'\n */\n readonly placement = input<NgpMenuPlacement>('right-start', {\n alias: 'ngpContextMenuSubmenuTriggerPlacement',\n });\n\n /**\n * Define the offset of the submenu relative to the trigger.\n * @default 0\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(0, {\n alias: 'ngpContextMenuSubmenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the submenu should flip when there is not enough space.\n * @default true\n */\n readonly flip = input<NgpFlip, NgpFlipInput>(true, {\n alias: 'ngpContextMenuSubmenuTriggerFlip',\n transform: coerceFlip,\n });\n\n private readonly state = ngpSubmenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n });\n\n show(): void {\n this.state.show();\n }\n\n hide(origin: FocusOrigin = 'program'): void {\n this.state.hide(origin);\n }\n\n toggle(event: MouseEvent): void {\n this.state.toggle(event);\n }\n\n focus(origin: FocusOrigin = 'program'): void {\n this.state.focus(origin);\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport {\n computed,\n inject,\n Injector,\n signal,\n Signal,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { Placement } from '@floating-ui/dom';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { NgpMenuTriggerStateToken } from 'ng-primitives/menu';\nimport {\n createOverlay,\n NgpFlip,\n NgpOffset,\n NgpOverlay,\n NgpOverlayConfig,\n NgpOverlayContent,\n NgpPosition,\n NgpShift,\n} from 'ng-primitives/portal';\nimport {\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n listener,\n onDestroy,\n StateInjectionOptions,\n styleBinding,\n} from 'ng-primitives/state';\n\nexport interface NgpContextMenuTriggerState {\n /**\n * Whether the context menu is open.\n */\n readonly open: Signal<boolean>;\n\n /**\n * The focus origin that was used to open the menu.\n */\n readonly openOrigin: Signal<FocusOrigin>;\n\n /**\n * The container in which the menu should be attached.\n * @default document.body\n */\n readonly container: WritableSignal<HTMLElement | string | null>;\n\n /**\n * Show the context menu.\n */\n show(origin?: FocusOrigin): void;\n\n /**\n * Hide the context menu.\n */\n hide(origin?: FocusOrigin): void;\n\n /**\n * Set the container in which the menu should be attached. Takes effect the\n * next time the menu is opened; it does not move a menu that is already open.\n * @param container - The new container\n */\n setContainer(container: HTMLElement | string | null): void;\n\n /**\n * Set whether the pointer is over the menu content.\n */\n setPointerOverContent(isOver: boolean): void;\n}\n\nexport interface NgpContextMenuTriggerProps<T = unknown> {\n /**\n * The menu template or component.\n */\n readonly menu?: Signal<NgpOverlayContent<T> | undefined>;\n\n /**\n * Whether the trigger is disabled.\n */\n readonly disabled?: Signal<boolean>;\n\n /**\n * The offset of the menu.\n */\n readonly offset?: Signal<NgpOffset>;\n\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip?: Signal<NgpFlip>;\n\n /**\n * The container in which the menu should be attached.\n */\n readonly container?: Signal<HTMLElement | string | null>;\n\n /**\n * Configure shift behavior.\n */\n shift: NgpShift;\n\n /**\n * How the menu behaves when the window is scrolled.\n */\n readonly scrollBehavior?: Signal<'reposition' | 'block' | 'close'>;\n\n /**\n * Context to provide to the menu.\n */\n readonly context?: Signal<T>;\n}\n\n/** Duration in ms before a long-press fires. */\nconst LONG_PRESS_DURATION = 700;\n\n/** Movement threshold in px to cancel a long-press. */\nconst LONG_PRESS_MOVE_THRESHOLD = 10;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-function\nconst noop = (): any => {};\n\nexport const [\n NgpContextMenuTriggerStateToken,\n ngpContextMenuTrigger,\n _injectContextMenuTriggerState,\n provideContextMenuTriggerState,\n] = createPrimitive(\n 'NgpContextMenuTrigger',\n <T>({\n disabled: _disabled = signal(false),\n menu: _menu = signal<NgpOverlayContent<T> | undefined>(undefined),\n offset: _offset = signal(2),\n flip: _flip = signal(true),\n context: _context = signal<T>(undefined as T),\n container: _container,\n scrollBehavior,\n shift,\n }: NgpContextMenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n\n // Controlled properties\n const menu = controlled(_menu);\n const disabled = controlled(_disabled);\n const flip = controlled(_flip);\n const offset = controlled(_offset);\n const context = controlled(_context);\n const container = controlled(_container, 'body');\n\n // Internal state\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\n const openOrigin = signal<FocusOrigin>('program');\n const cursorPosition = signal<NgpPosition | null>(null);\n\n // Host bindings\n dataBinding(element, 'data-open', open);\n\n // Prevent iOS text selection and callout on long-press.\n // Only apply when the trigger is enabled so disabled triggers retain native behavior.\n styleBinding(element, '-webkit-touch-callout', () => (disabled?.() ? null : 'none'));\n\n // Long-press state\n let longPressTimer: ReturnType<typeof setTimeout> | null = null;\n let longPressStartX = 0;\n let longPressStartY = 0;\n let longPressTriggered = false;\n\n // Event listeners\n listener(element, 'contextmenu', onContextMenu);\n listener(element, 'pointerdown', onPointerDown);\n listener(element, 'pointermove', onPointerMove);\n listener(element, 'pointerup', onPointerUp);\n listener(element, 'pointercancel', onPointerCancel);\n\n function onContextMenu(event: MouseEvent): void {\n if (disabled?.()) {\n return;\n }\n\n event.preventDefault();\n\n // If long-press already triggered, don't re-open\n if (longPressTriggered) {\n longPressTriggered = false;\n return;\n }\n\n cursorPosition.set({ x: event.clientX, y: event.clientY });\n openOrigin.set('mouse');\n\n if (open()) {\n // Already open - reposition by updating cursor position and triggering reposition\n overlay()?.updatePosition();\n } else {\n showMenu();\n }\n }\n\n function onPointerDown(event: PointerEvent): void {\n if (event.pointerType !== 'touch' || disabled?.()) {\n return;\n }\n\n longPressTriggered = false;\n longPressStartX = event.clientX;\n longPressStartY = event.clientY;\n\n longPressTimer = setTimeout(() => {\n longPressTriggered = true;\n cursorPosition.set({ x: longPressStartX, y: longPressStartY });\n openOrigin.set('touch');\n showMenu();\n }, LONG_PRESS_DURATION);\n }\n\n function onPointerMove(event: PointerEvent): void {\n if (event.pointerType !== 'touch' || !longPressTimer) {\n return;\n }\n\n const dx = event.clientX - longPressStartX;\n const dy = event.clientY - longPressStartY;\n if (Math.sqrt(dx * dx + dy * dy) > LONG_PRESS_MOVE_THRESHOLD) {\n cancelLongPress();\n }\n }\n\n function onPointerUp(event: PointerEvent): void {\n if (event.pointerType !== 'touch') {\n return;\n }\n cancelLongPress();\n }\n\n function onPointerCancel(event: PointerEvent): void {\n if (event.pointerType !== 'touch') {\n return;\n }\n cancelLongPress();\n }\n\n function cancelLongPress(): void {\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n longPressTriggered = false;\n }\n\n onDestroy(() => cancelLongPress());\n\n function showMenu(): void {\n if (!overlay()) {\n createOverlayInstance();\n }\n overlay()?.show();\n }\n\n function show(origin: FocusOrigin = 'program'): void {\n openOrigin.set(origin);\n showMenu();\n }\n\n function hide(origin: FocusOrigin = 'program'): void {\n const currentOverlay = overlay();\n if (!currentOverlay) {\n return;\n }\n currentOverlay.hide({ origin });\n }\n\n function createOverlayInstance(): void {\n const menuContent = menu?.();\n\n if (!menuContent) {\n throw new Error('Context menu must be either a TemplateRef or a ComponentType');\n }\n\n const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n viewContainerRef,\n injector,\n context,\n container: container(),\n offset: offset(),\n flip: flip(),\n shift,\n placement: signal<Placement>('right-start'),\n closeOnOutsideClick: true,\n closeOnEscape: true,\n treatTriggerClickAsOutside: true,\n restoreFocus: false,\n scrollBehaviour: scrollBehavior?.() ?? 'close',\n overlayType: 'menu',\n position: cursorPosition,\n trackPosition: true,\n };\n\n overlay.set(createOverlay(config));\n }\n\n function setContainer(newContainer: HTMLElement | string | null): void {\n container.set(newContainer);\n }\n\n function setPointerOverContent(_isOver: boolean): void {\n // No-op for context menu\n }\n\n // Set the compat state on NgpMenuTriggerStateToken so NgpMenu can find it.\n // NgpMenu injects this token and calls hide(), openOrigin(), setPointerOverContent() on it.\n const menuTriggerToken = inject(NgpMenuTriggerStateToken, { optional: true });\n // eslint-disable-next-line @angular-eslint/no-uncalled-signals -- checking inject() nullability, not signal value\n if (menuTriggerToken) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (menuTriggerToken as any).set({\n menu,\n placement: signal('bottom-start'),\n open,\n offset,\n disabled,\n flip,\n context,\n openOrigin,\n setDisabled: noop,\n setFlip: noop,\n setPlacement: noop,\n setOffset: noop,\n setContext: noop,\n show,\n hide,\n toggle: noop,\n setMenu: noop,\n setPointerOverContent,\n });\n }\n\n return {\n open,\n openOrigin,\n container: deprecatedSetter(container, 'setContainer', setContainer),\n show,\n hide,\n setContainer,\n setPointerOverContent,\n } satisfies NgpContextMenuTriggerState;\n },\n);\n\nexport function injectContextMenuTriggerState(\n options?: StateInjectionOptions,\n): Signal<NgpContextMenuTriggerState> {\n return _injectContextMenuTriggerState(options) as Signal<NgpContextMenuTriggerState>;\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, Signal } from '@angular/core';\nimport { provideMenuTriggerState } from 'ng-primitives/menu';\nimport {\n coerceFlip,\n coerceOffset,\n coerceShift,\n NgpFlip,\n NgpFlipInput,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n NgpShift,\n NgpShiftInput,\n} from 'ng-primitives/portal';\nimport { injectContextMenuConfig } from '../config/context-menu-config';\nimport {\n ngpContextMenuTrigger,\n provideContextMenuTriggerState,\n} from './context-menu-trigger-state';\n\n/**\n * The `NgpContextMenuTrigger` directive allows you to turn an element into a context menu trigger.\n * Right-clicking or long-pressing the element will open the specified menu at the cursor position.\n */\n@Directive({\n selector: '[ngpContextMenuTrigger]',\n exportAs: 'ngpContextMenuTrigger',\n providers: [provideContextMenuTriggerState(), provideMenuTriggerState()],\n})\nexport class NgpContextMenuTrigger<T = unknown> {\n /**\n * Access the global context menu configuration.\n */\n private readonly config = injectContextMenuConfig();\n\n /**\n * The menu template ref or ComponentType to display.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpContextMenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the offset of the context menu relative to the cursor position.\n * @default 2\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(this.config.offset, {\n alias: 'ngpContextMenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the context menu should flip when there is not enough space.\n * @default true\n */\n readonly flip = input<NgpFlip, NgpFlipInput>(this.config.flip, {\n alias: 'ngpContextMenuTriggerFlip',\n transform: coerceFlip,\n });\n\n /**\n * Configure shift behavior to keep the context menu in view.\n * @default undefined\n */\n readonly shift = input<NgpShift, NgpShiftInput>(this.config.shift, {\n alias: 'ngpContextMenuTriggerShift',\n transform: coerceShift,\n });\n\n /**\n * Define the container in which the context menu should be attached.\n * @default document.body\n */\n readonly container = input<HTMLElement | string | null>(this.config.container, {\n alias: 'ngpContextMenuTriggerContainer',\n });\n\n /**\n * Defines how the context menu behaves when the window is scrolled.\n * @default 'close'\n */\n readonly scrollBehavior = input<'reposition' | 'block' | 'close'>(this.config.scrollBehavior, {\n alias: 'ngpContextMenuTriggerScrollBehavior',\n });\n\n /**\n * Provide context to the menu. This can be used to pass data to the menu content.\n */\n readonly context = input<T>(undefined, {\n alias: 'ngpContextMenuTriggerContext',\n });\n\n /**\n * The context menu trigger state.\n */\n private readonly state = ngpContextMenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n offset: this.offset,\n flip: this.flip,\n shift: this.shift(),\n container: this.container,\n scrollBehavior: this.scrollBehavior,\n context: this.context as Signal<T>,\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-primitives-context-menu.mjs","sources":["../../../../packages/ng-primitives/context-menu/src/config/context-menu-config.ts","../../../../packages/ng-primitives/context-menu/src/context-menu/context-menu.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-item/context-menu-item.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-item-checkbox/context-menu-item-checkbox.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-item-indicator/context-menu-item-indicator.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-item-radio/context-menu-item-radio.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-item-radio-group/context-menu-item-radio-group.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-submenu-trigger/context-menu-submenu-trigger.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-trigger/context-menu-trigger-state.ts","../../../../packages/ng-primitives/context-menu/src/context-menu-trigger/context-menu-trigger.ts","../../../../packages/ng-primitives/context-menu/src/ng-primitives-context-menu.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core';\nimport { NgpFlip, NgpOffset, NgpShift } from 'ng-primitives/portal';\n\nexport interface NgpContextMenuConfig {\n /**\n * Define the offset of the context menu relative to the cursor position.\n * @default 2\n */\n offset: NgpOffset;\n\n /**\n * Define whether the context menu should flip when there is not enough space.\n * @default true\n */\n flip: NgpFlip;\n\n /**\n * Define the container element or selector in which the context menu should be attached.\n * @default 'body'\n */\n container: HTMLElement | string | null;\n\n /**\n * Defines how the context menu behaves when the window is scrolled.\n * @default 'close'\n */\n scrollBehavior: 'reposition' | 'block' | 'close';\n\n /**\n * Configure shift behavior to keep the context menu in view.\n * @default undefined\n */\n shift: NgpShift;\n}\n\nexport const defaultContextMenuConfig: NgpContextMenuConfig = {\n offset: 2,\n flip: true,\n container: 'body',\n scrollBehavior: 'close',\n shift: undefined,\n};\n\nexport const NgpContextMenuConfigToken = new InjectionToken<NgpContextMenuConfig>(\n 'NgpContextMenuConfigToken',\n);\n\n/**\n * Provide the default Context Menu configuration\n * @param config The Context Menu configuration\n * @returns The provider\n */\nexport function provideContextMenuConfig(config: Partial<NgpContextMenuConfig>): Provider[] {\n return [\n {\n provide: NgpContextMenuConfigToken,\n useValue: { ...defaultContextMenuConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Context Menu configuration\n * @returns The global Context Menu configuration\n */\nexport function injectContextMenuConfig(): NgpContextMenuConfig {\n return inject(NgpContextMenuConfigToken, { optional: true }) ?? defaultContextMenuConfig;\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { provideFocusTrapState } from 'ng-primitives/focus-trap';\nimport { ngpMenu, provideMenuState } from 'ng-primitives/menu';\nimport { provideControlContainerIsolation } from 'ng-primitives/portal';\nimport { ngpRovingFocusGroup, provideRovingFocusGroupState } from 'ng-primitives/roving-focus';\n\n/**\n * The `NgpContextMenu` is a container for context menu items.\n */\n@Directive({\n selector: '[ngpContextMenu]',\n exportAs: 'ngpContextMenu',\n providers: [\n provideRovingFocusGroupState({ inherit: false }),\n provideMenuState({ inherit: false }),\n provideFocusTrapState(),\n provideControlContainerIsolation(),\n ],\n})\nexport class NgpContextMenu {\n /**\n * Whether focus should wrap around when reaching the end of the menu.\n * @default true\n */\n readonly wrap = input<boolean, BooleanInput>(true, {\n alias: 'ngpContextMenuWrap',\n transform: booleanAttribute,\n });\n\n private readonly state = ngpMenu({ wrap: this.wrap });\n\n constructor() {\n ngpRovingFocusGroup({ inherit: false, wrap: this.wrap });\n }\n\n /** @internal Close the menu and any parent menus */\n closeAllMenus(origin: FocusOrigin): void {\n this.state.closeAllMenus(origin);\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpMenuItem, provideMenuItemState } from 'ng-primitives/menu';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\n\n/**\n * The `NgpContextMenuItem` directive represents a context menu item.\n */\n@Directive({\n selector: '[ngpContextMenuItem]',\n exportAs: 'ngpContextMenuItem',\n providers: [provideMenuItemState(), provideRovingFocusItemState()],\n})\nexport class NgpContextMenuItem {\n /** Whether the menu item is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuItemDisabled',\n transform: booleanAttribute,\n });\n\n /** Whether the menu should close when this item is selected */\n readonly closeOnSelect = input<boolean, BooleanInput>(true, {\n alias: 'ngpContextMenuItemCloseOnSelect',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItem({ disabled: this.disabled, closeOnSelect: this.closeOnSelect });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, output } from '@angular/core';\nimport { ngpMenuItemCheckbox, provideMenuItemCheckboxState } from 'ng-primitives/menu';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\n\n/**\n * The `NgpContextMenuItemCheckbox` directive represents a context menu item that can be toggled on and off.\n */\n@Directive({\n selector: '[ngpContextMenuItemCheckbox]',\n exportAs: 'ngpContextMenuItemCheckbox',\n providers: [provideMenuItemCheckboxState(), provideRovingFocusItemState()],\n})\nexport class NgpContextMenuItemCheckbox {\n /** Whether the checkbox is checked */\n readonly checked = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuItemCheckboxChecked',\n transform: booleanAttribute,\n });\n\n /** Event emitted when the checked state changes */\n readonly checkedChange = output<boolean>({\n alias: 'ngpContextMenuItemCheckboxCheckedChange',\n });\n\n /** Whether the menu item checkbox is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuItemCheckboxDisabled',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItemCheckbox({\n checked: this.checked,\n disabled: this.disabled,\n onCheckedChange: value => this.checkedChange.emit(value),\n });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { computed, Directive } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectMenuItemCheckboxState, injectMenuItemRadioState } from 'ng-primitives/menu';\nimport { dataBinding } from 'ng-primitives/state';\n\n/**\n * The `NgpContextMenuItemIndicator` directive renders inside a checkbox or radio context menu item\n * and exposes `data-checked` based on the parent item's checked state.\n */\n@Directive({\n selector: '[ngpContextMenuItemIndicator]',\n exportAs: 'ngpContextMenuItemIndicator',\n})\nexport class NgpContextMenuItemIndicator {\n constructor() {\n const element = injectElementRef();\n const checkboxState = injectMenuItemCheckboxState({ optional: true });\n const radioState = injectMenuItemRadioState({ optional: true });\n\n const checked = computed(() => checkboxState()?.checked() ?? radioState()?.checked() ?? false);\n\n dataBinding(element, 'data-checked', checked);\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpMenuItemRadio, provideMenuItemRadioState } from 'ng-primitives/menu';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\n\n/**\n * The `NgpContextMenuItemRadio` directive represents a radio context menu item within a radio group.\n */\n@Directive({\n selector: '[ngpContextMenuItemRadio]',\n exportAs: 'ngpContextMenuItemRadio',\n providers: [provideMenuItemRadioState(), provideRovingFocusItemState()],\n})\nexport class NgpContextMenuItemRadio {\n /** The value this radio item represents */\n readonly value = input.required<string>({\n alias: 'ngpContextMenuItemRadioValue',\n });\n\n /** Whether the radio item is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuItemRadioDisabled',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItemRadio({ value: this.value, disabled: this.disabled });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { Directive, input, output } from '@angular/core';\nimport { ngpMenuItemRadioGroup, provideMenuItemRadioGroupState } from 'ng-primitives/menu';\n\n/**\n * The `NgpContextMenuItemRadioGroup` directive represents a group of radio context menu items.\n */\n@Directive({\n selector: '[ngpContextMenuItemRadioGroup]',\n exportAs: 'ngpContextMenuItemRadioGroup',\n providers: [provideMenuItemRadioGroupState()],\n})\nexport class NgpContextMenuItemRadioGroup {\n /** The current value of the radio group */\n readonly value = input<string | null>(null, {\n alias: 'ngpContextMenuItemRadioGroupValue',\n });\n\n /** Event emitted when the value changes */\n readonly valueChange = output<string>({\n alias: 'ngpContextMenuItemRadioGroupValueChange',\n });\n\n constructor() {\n ngpMenuItemRadioGroup({\n value: this.value,\n onValueChange: value => this.valueChange.emit(value),\n });\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport {\n NgpMenuTriggerStateToken,\n NgpSubmenuTrigger,\n NgpSubmenuTriggerStateToken,\n ngpSubmenuTrigger,\n provideSubmenuTriggerState,\n type NgpMenuPlacement,\n} from 'ng-primitives/menu';\nimport {\n coerceFlip,\n coerceOffset,\n NgpFlip,\n NgpFlipInput,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n} from 'ng-primitives/portal';\n\n/**\n * The `NgpContextMenuSubmenuTrigger` directive turns a context menu item into a submenu trigger.\n */\n@Directive({\n selector: '[ngpContextMenuSubmenuTrigger]',\n exportAs: 'ngpContextMenuSubmenuTrigger',\n providers: [\n // inherit: false - a nested submenu trigger lives inside the DI scope of its\n // parent submenu trigger (via the overlay's injector). Inheriting would reuse\n // the parent trigger's state signal and overwrite it with this trigger's\n // state, so the parent's menu would start talking to the wrong trigger.\n provideSubmenuTriggerState({ inherit: false }),\n { provide: NgpMenuTriggerStateToken, useExisting: NgpSubmenuTriggerStateToken },\n // Provide as NgpSubmenuTrigger so ngpMenuItem can detect this is a submenu trigger\n { provide: NgpSubmenuTrigger, useExisting: NgpContextMenuSubmenuTrigger },\n ],\n})\nexport class NgpContextMenuSubmenuTrigger<T = unknown> {\n /**\n * Access the submenu template ref.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpContextMenuSubmenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuSubmenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the placement of the submenu relative to the trigger.\n * @default 'right-start'\n */\n readonly placement = input<NgpMenuPlacement>('right-start', {\n alias: 'ngpContextMenuSubmenuTriggerPlacement',\n });\n\n /**\n * Define the offset of the submenu relative to the trigger.\n * @default 0\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(0, {\n alias: 'ngpContextMenuSubmenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the submenu should flip when there is not enough space.\n * @default true\n */\n readonly flip = input<NgpFlip, NgpFlipInput>(true, {\n alias: 'ngpContextMenuSubmenuTriggerFlip',\n transform: coerceFlip,\n });\n\n private readonly state = ngpSubmenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n });\n\n show(): void {\n this.state.show();\n }\n\n hide(origin: FocusOrigin = 'program'): void {\n this.state.hide(origin);\n }\n\n toggle(event: MouseEvent): void {\n this.state.toggle(event);\n }\n\n focus(origin: FocusOrigin = 'program'): void {\n this.state.focus(origin);\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport {\n computed,\n inject,\n Injector,\n signal,\n Signal,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { Placement } from '@floating-ui/dom';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { NgpMenuTriggerStateToken } from 'ng-primitives/menu';\nimport {\n createOverlay,\n NgpFlip,\n NgpOffset,\n NgpOverlay,\n NgpOverlayConfig,\n NgpOverlayContent,\n NgpPosition,\n NgpShift,\n} from 'ng-primitives/portal';\nimport {\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n listener,\n onDestroy,\n StateInjectionOptions,\n styleBinding,\n} from 'ng-primitives/state';\n\nexport interface NgpContextMenuTriggerState {\n /**\n * Whether the context menu is open.\n */\n readonly open: Signal<boolean>;\n\n /**\n * The focus origin that was used to open the menu.\n */\n readonly openOrigin: Signal<FocusOrigin>;\n\n /**\n * The container in which the menu should be attached.\n * @default document.body\n */\n readonly container: WritableSignal<HTMLElement | string | null>;\n\n /**\n * Show the context menu.\n */\n show(origin?: FocusOrigin): void;\n\n /**\n * Hide the context menu.\n */\n hide(origin?: FocusOrigin): void;\n\n /**\n * Set the container in which the menu should be attached. Takes effect the\n * next time the menu is opened; it does not move a menu that is already open.\n * @param container - The new container\n */\n setContainer(container: HTMLElement | string | null): void;\n\n /**\n * Set whether the pointer is over the menu content.\n */\n setPointerOverContent(isOver: boolean): void;\n}\n\nexport interface NgpContextMenuTriggerProps<T = unknown> {\n /**\n * The menu template or component.\n */\n readonly menu?: Signal<NgpOverlayContent<T> | undefined>;\n\n /**\n * Whether the trigger is disabled.\n */\n readonly disabled?: Signal<boolean>;\n\n /**\n * The offset of the menu.\n */\n readonly offset?: Signal<NgpOffset>;\n\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip?: Signal<NgpFlip>;\n\n /**\n * The container in which the menu should be attached.\n */\n readonly container?: Signal<HTMLElement | string | null>;\n\n /**\n * Configure shift behavior.\n */\n shift: NgpShift;\n\n /**\n * How the menu behaves when the window is scrolled.\n */\n readonly scrollBehavior?: Signal<'reposition' | 'block' | 'close'>;\n\n /**\n * Context to provide to the menu.\n */\n readonly context?: Signal<T>;\n}\n\n/** Duration in ms before a long-press fires. */\nconst LONG_PRESS_DURATION = 700;\n\n/** Movement threshold in px to cancel a long-press. */\nconst LONG_PRESS_MOVE_THRESHOLD = 10;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-function\nconst noop = (): any => {};\n\nexport const [\n NgpContextMenuTriggerStateToken,\n ngpContextMenuTrigger,\n _injectContextMenuTriggerState,\n provideContextMenuTriggerState,\n] = createPrimitive(\n 'NgpContextMenuTrigger',\n <T>({\n disabled: _disabled = signal(false),\n menu: _menu = signal<NgpOverlayContent<T> | undefined>(undefined),\n offset: _offset = signal(2),\n flip: _flip = signal(true),\n context: _context = signal<T>(undefined as T),\n container: _container,\n scrollBehavior,\n shift,\n }: NgpContextMenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n\n // Controlled properties\n const menu = controlled(_menu);\n const disabled = controlled(_disabled);\n const flip = controlled(_flip);\n const offset = controlled(_offset);\n const context = controlled(_context);\n const container = controlled(_container, 'body');\n\n // Internal state\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\n const openOrigin = signal<FocusOrigin>('program');\n const cursorPosition = signal<NgpPosition | null>(null);\n\n // Host bindings\n dataBinding(element, 'data-open', open);\n\n // Prevent iOS text selection and callout on long-press.\n // Only apply when the trigger is enabled so disabled triggers retain native behavior.\n styleBinding(element, '-webkit-touch-callout', () => (disabled?.() ? null : 'none'));\n\n // Long-press state\n let longPressTimer: ReturnType<typeof setTimeout> | null = null;\n let longPressStartX = 0;\n let longPressStartY = 0;\n let longPressTriggered = false;\n\n // Event listeners\n listener(element, 'contextmenu', onContextMenu);\n listener(element, 'pointerdown', onPointerDown);\n listener(element, 'pointermove', onPointerMove);\n listener(element, 'pointerup', onPointerUp);\n listener(element, 'pointercancel', onPointerCancel);\n\n function onContextMenu(event: MouseEvent): void {\n if (disabled?.()) {\n return;\n }\n\n event.preventDefault();\n\n // If long-press already triggered, don't re-open\n if (longPressTriggered) {\n longPressTriggered = false;\n return;\n }\n\n cursorPosition.set({ x: event.clientX, y: event.clientY });\n openOrigin.set('mouse');\n\n if (open()) {\n // Already open - reposition by updating cursor position and triggering reposition\n overlay()?.updatePosition();\n } else {\n showMenu();\n }\n }\n\n function onPointerDown(event: PointerEvent): void {\n if (event.pointerType !== 'touch' || disabled?.()) {\n return;\n }\n\n longPressTriggered = false;\n longPressStartX = event.clientX;\n longPressStartY = event.clientY;\n\n longPressTimer = setTimeout(() => {\n longPressTriggered = true;\n cursorPosition.set({ x: longPressStartX, y: longPressStartY });\n openOrigin.set('touch');\n showMenu();\n }, LONG_PRESS_DURATION);\n }\n\n function onPointerMove(event: PointerEvent): void {\n if (event.pointerType !== 'touch' || !longPressTimer) {\n return;\n }\n\n const dx = event.clientX - longPressStartX;\n const dy = event.clientY - longPressStartY;\n if (Math.sqrt(dx * dx + dy * dy) > LONG_PRESS_MOVE_THRESHOLD) {\n cancelLongPress();\n }\n }\n\n function onPointerUp(event: PointerEvent): void {\n if (event.pointerType !== 'touch') {\n return;\n }\n cancelLongPress();\n }\n\n function onPointerCancel(event: PointerEvent): void {\n if (event.pointerType !== 'touch') {\n return;\n }\n cancelLongPress();\n }\n\n function cancelLongPress(): void {\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n longPressTriggered = false;\n }\n\n onDestroy(() => cancelLongPress());\n\n function showMenu(): void {\n if (!overlay()) {\n createOverlayInstance();\n }\n overlay()?.show();\n }\n\n function show(origin: FocusOrigin = 'program'): void {\n openOrigin.set(origin);\n showMenu();\n }\n\n function hide(origin: FocusOrigin = 'program'): void {\n const currentOverlay = overlay();\n if (!currentOverlay) {\n return;\n }\n currentOverlay.hide({ origin });\n }\n\n function createOverlayInstance(): void {\n const menuContent = menu?.();\n\n if (!menuContent) {\n throw new Error('Context menu must be either a TemplateRef or a ComponentType');\n }\n\n const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n viewContainerRef,\n injector,\n context,\n container: container(),\n offset: offset(),\n flip: flip(),\n shift,\n placement: signal<Placement>('right-start'),\n closeOnOutsideClick: true,\n closeOnEscape: true,\n treatTriggerClickAsOutside: true,\n restoreFocus: false,\n scrollBehaviour: scrollBehavior?.() ?? 'close',\n overlayType: 'menu',\n position: cursorPosition,\n trackPosition: true,\n };\n\n overlay.set(createOverlay(config));\n }\n\n function setContainer(newContainer: HTMLElement | string | null): void {\n container.set(newContainer);\n }\n\n function setPointerOverContent(_isOver: boolean): void {\n // No-op for context menu\n }\n\n // Set the compat state on NgpMenuTriggerStateToken so NgpMenu can find it.\n // NgpMenu injects this token and calls hide(), openOrigin(), setPointerOverContent() on it.\n const menuTriggerToken = inject(NgpMenuTriggerStateToken, { optional: true });\n // eslint-disable-next-line @angular-eslint/no-uncalled-signals -- checking inject() nullability, not signal value\n if (menuTriggerToken) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (menuTriggerToken as any).set({\n menu,\n placement: signal('bottom-start'),\n open,\n offset,\n disabled,\n flip,\n context,\n openOrigin,\n setDisabled: noop,\n setFlip: noop,\n setPlacement: noop,\n setOffset: noop,\n setContext: noop,\n show,\n hide,\n toggle: noop,\n setMenu: noop,\n setPointerOverContent,\n });\n }\n\n return {\n open,\n openOrigin,\n container: deprecatedSetter(container, 'setContainer', setContainer),\n show,\n hide,\n setContainer,\n setPointerOverContent,\n } satisfies NgpContextMenuTriggerState;\n },\n);\n\nexport function injectContextMenuTriggerState(\n options?: StateInjectionOptions,\n): Signal<NgpContextMenuTriggerState> {\n return _injectContextMenuTriggerState(options) as Signal<NgpContextMenuTriggerState>;\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, Signal } from '@angular/core';\nimport { provideMenuTriggerState } from 'ng-primitives/menu';\nimport {\n coerceFlip,\n coerceOffset,\n coerceShift,\n NgpFlip,\n NgpFlipInput,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n NgpShift,\n NgpShiftInput,\n} from 'ng-primitives/portal';\nimport { injectContextMenuConfig } from '../config/context-menu-config';\nimport {\n ngpContextMenuTrigger,\n provideContextMenuTriggerState,\n} from './context-menu-trigger-state';\n\n/**\n * The `NgpContextMenuTrigger` directive allows you to turn an element into a context menu trigger.\n * Right-clicking or long-pressing the element will open the specified menu at the cursor position.\n */\n@Directive({\n selector: '[ngpContextMenuTrigger]',\n exportAs: 'ngpContextMenuTrigger',\n providers: [provideContextMenuTriggerState(), provideMenuTriggerState()],\n})\nexport class NgpContextMenuTrigger<T = unknown> {\n /**\n * Access the global context menu configuration.\n */\n private readonly config = injectContextMenuConfig();\n\n /**\n * The menu template ref or ComponentType to display.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpContextMenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpContextMenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the offset of the context menu relative to the cursor position.\n * @default 2\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(this.config.offset, {\n alias: 'ngpContextMenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the context menu should flip when there is not enough space.\n * @default true\n */\n readonly flip = input<NgpFlip, NgpFlipInput>(this.config.flip, {\n alias: 'ngpContextMenuTriggerFlip',\n transform: coerceFlip,\n });\n\n /**\n * Configure shift behavior to keep the context menu in view.\n * @default undefined\n */\n readonly shift = input<NgpShift, NgpShiftInput>(this.config.shift, {\n alias: 'ngpContextMenuTriggerShift',\n transform: coerceShift,\n });\n\n /**\n * Define the container in which the context menu should be attached.\n * @default document.body\n */\n readonly container = input<HTMLElement | string | null>(this.config.container, {\n alias: 'ngpContextMenuTriggerContainer',\n });\n\n /**\n * Defines how the context menu behaves when the window is scrolled.\n * @default 'close'\n */\n readonly scrollBehavior = input<'reposition' | 'block' | 'close'>(this.config.scrollBehavior, {\n alias: 'ngpContextMenuTriggerScrollBehavior',\n });\n\n /**\n * Provide context to the menu. This can be used to pass data to the menu content.\n */\n readonly context = input<T>(undefined, {\n alias: 'ngpContextMenuTriggerContext',\n });\n\n /**\n * The context menu trigger state.\n */\n private readonly state = ngpContextMenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n offset: this.offset,\n flip: this.flip,\n shift: this.shift(),\n container: this.container,\n scrollBehavior: this.scrollBehavior,\n context: this.context as Signal<T>,\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -784,7 +784,11 @@ class NgpSubmenuTrigger {
784
784
  }
785
785
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpSubmenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
786
786
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpSubmenuTrigger, isStandalone: true, selector: "[ngpSubmenuTrigger]", inputs: { menu: { classPropertyName: "menu", publicName: "ngpSubmenuTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpSubmenuTriggerDisabled", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "ngpSubmenuTriggerPlacement", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "ngpSubmenuTriggerOffset", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "ngpSubmenuTriggerFlip", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "ngpSubmenuTriggerContainer", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
787
- provideSubmenuTriggerState(),
787
+ // inherit: false - a nested submenu trigger lives inside the DI scope of its
788
+ // parent submenu trigger (via the overlay's injector). Inheriting would reuse
789
+ // the parent trigger's state signal and overwrite it with this trigger's
790
+ // state, so the parent's menu would start talking to the wrong trigger.
791
+ provideSubmenuTriggerState({ inherit: false }),
788
792
  // Also provide as NgpMenuTriggerStateToken so the submenu's menu-state
789
793
  // can find this trigger's openOrigin for :focus-visible styling
790
794
  { provide: NgpMenuTriggerStateToken, useExisting: NgpSubmenuTriggerStateToken },
@@ -796,7 +800,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
796
800
  selector: '[ngpSubmenuTrigger]',
797
801
  exportAs: 'ngpSubmenuTrigger',
798
802
  providers: [
799
- provideSubmenuTriggerState(),
803
+ // inherit: false - a nested submenu trigger lives inside the DI scope of its
804
+ // parent submenu trigger (via the overlay's injector). Inheriting would reuse
805
+ // the parent trigger's state signal and overwrite it with this trigger's
806
+ // state, so the parent's menu would start talking to the wrong trigger.
807
+ provideSubmenuTriggerState({ inherit: false }),
800
808
  // Also provide as NgpMenuTriggerStateToken so the submenu's menu-state
801
809
  // can find this trigger's openOrigin for :focus-visible styling
802
810
  { provide: NgpMenuTriggerStateToken, useExisting: NgpSubmenuTriggerStateToken },
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-menu.mjs","sources":["../../../../packages/ng-primitives/menu/src/config/menu-config.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger-state.ts","../../../../packages/ng-primitives/menu/src/menu/menu-state.ts","../../../../packages/ng-primitives/menu/src/submenu-trigger/submenu-trigger-state.ts","../../../../packages/ng-primitives/menu/src/submenu-trigger/submenu-trigger.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item-state.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item.ts","../../../../packages/ng-primitives/menu/src/menu-item-checkbox/menu-item-checkbox-state.ts","../../../../packages/ng-primitives/menu/src/menu-item-checkbox/menu-item-checkbox.ts","../../../../packages/ng-primitives/menu/src/menu-item-radio-group/menu-item-radio-group-state.ts","../../../../packages/ng-primitives/menu/src/menu-item-radio/menu-item-radio-state.ts","../../../../packages/ng-primitives/menu/src/menu-item-indicator/menu-item-indicator.ts","../../../../packages/ng-primitives/menu/src/menu-item-radio-group/menu-item-radio-group.ts","../../../../packages/ng-primitives/menu/src/menu-item-radio/menu-item-radio.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger.ts","../../../../packages/ng-primitives/menu/src/menu/menu.ts","../../../../packages/ng-primitives/menu/src/ng-primitives-menu.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core';\nimport { NgpFlip, NgpOffset, NgpShift } from 'ng-primitives/portal';\nimport type { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\n\nexport type NgpMenuTriggerType = 'click' | 'hover' | 'focus' | 'enter' | 'arrowkey';\n\nexport interface NgpMenuConfig {\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 4\n */\n offset: NgpOffset;\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'bottom-start'\n */\n placement: NgpMenuPlacement;\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * Can be a boolean to enable/disable, or an object with padding and fallbackPlacements options.\n * @default true\n */\n flip: NgpFlip;\n\n /**\n * Define the container element or selector in to which the menu should be attached.\n * @default 'body'\n */\n container: HTMLElement | string | null;\n\n /**\n * Defines how the menu behaves when the window is scrolled.\n * @default scroll\n */\n scrollBehavior: 'reposition' | 'block' | 'close';\n\n /**\n * Configure shift behavior to keep the menu in view.\n * Can be a boolean to enable/disable, or an object with padding and limiter options.\n * @default undefined (enabled by default in overlay)\n */\n shift: NgpShift;\n\n /**\n * Whether focus should wrap around when reaching the end of the menu.\n * @default true\n */\n wrap: boolean;\n\n /**\n * Cooldown duration in milliseconds.\n * When moving from one menu to another within this duration,\n * the showDelay is skipped for the new menu.\n * @default 0\n */\n cooldown: number;\n\n /**\n * Define which trigger types are enabled for the menu.\n * @default ['click']\n */\n triggers: NgpMenuTriggerType[];\n\n /**\n * Define the delay before the menu is displayed (hover/focus triggers).\n * @default 0\n */\n showDelay: number;\n\n /**\n * Define the delay before the menu is hidden (hover/focus triggers).\n * @default 0\n */\n hideDelay: number;\n}\n\nexport const defaultMenuConfig: NgpMenuConfig = {\n offset: 4,\n placement: 'bottom-start',\n flip: true,\n container: 'body',\n scrollBehavior: 'block',\n shift: undefined,\n wrap: true,\n cooldown: 0,\n triggers: ['click'],\n showDelay: 0,\n hideDelay: 0,\n};\n\nexport const NgpMenuConfigToken = new InjectionToken<NgpMenuConfig>('NgpMenuConfigToken');\n\n/**\n * Provide the default Menu configuration\n * @param config The Menu configuration\n * @returns The provider\n */\nexport function provideMenuConfig(config: Partial<NgpMenuConfig>): Provider[] {\n return [\n {\n provide: NgpMenuConfigToken,\n useValue: { ...defaultMenuConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Menu configuration\n * @returns The global Menu configuration\n */\nexport function injectMenuConfig(): NgpMenuConfig {\n return inject(NgpMenuConfigToken, { optional: true }) ?? defaultMenuConfig;\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport {\n computed,\n effect,\n inject,\n Injector,\n signal,\n Signal,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { createHoverBridge, injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\n NgpFlip,\n NgpOffset,\n NgpOverlay,\n NgpOverlayConfig,\n NgpOverlayContent,\n NgpShift,\n} from 'ng-primitives/portal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n listener,\n StateInjectionOptions,\n} from 'ng-primitives/state';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { NgpMenuTriggerType } from '../config/menu-config';\nimport { NgpMenuPlacement } from './menu-trigger';\n\nexport interface NgpMenuTriggerState<T = unknown> {\n /**\n * The menu template or component.\n */\n readonly menu: WritableSignal<NgpOverlayContent<any> | undefined>;\n /**\n * The computed placement of the menu.\n */\n readonly placement: WritableSignal<NgpMenuPlacement>;\n /**\n * Whether the menu is open.\n */\n readonly open: Signal<boolean>;\n /**\n * The offset of the menu.\n */\n readonly offset: WritableSignal<NgpOffset>;\n\n /**\n * The disabled state of the trigger.\n */\n readonly disabled: WritableSignal<boolean>;\n\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip: WritableSignal<NgpFlip>;\n\n /**\n * The container in which the menu should be attached.\n * @default document.body\n */\n readonly container: WritableSignal<HTMLElement | string | null>;\n\n /**\n * The context provided to the menu.\n */\n readonly context: WritableSignal<T>;\n\n /**\n * The focus origin that was used to open the menu.\n * @internal\n */\n readonly openOrigin: Signal<FocusOrigin>;\n\n /**\n * Set whether the trigger is disabled.\n * @param isDisabled - Whether the trigger is disabled\n */\n setDisabled(isDisabled: boolean): void;\n\n /**\n * Set whether the menu should flip when there is not enough space.\n * @param shouldFlip - Whether the menu should flip\n */\n setFlip(shouldFlip: NgpFlip): void;\n\n /**\n * Set the placement of the menu.\n * @param placement - The new placement\n */\n setPlacement(placement: NgpMenuPlacement): void;\n\n /**\n * Set the offset of the menu.\n * @param offset - The new offset\n */\n setOffset(offset: NgpOffset): void;\n\n /**\n * Set the context provided to the menu.\n * @param context - The new context\n */\n setContext(context: T): void;\n\n /**\n * Set the container in which the menu should be attached. Takes effect the\n * next time the menu is opened; it does not move a menu that is already open.\n * @param container - The new container\n */\n setContainer(container: HTMLElement | string | null): void;\n\n /**\n * Show the menu.\n * @param origin - The focus origin\n */\n show(origin?: FocusOrigin): void;\n /**\n * Hide the menu.\n * @param origin - The focus origin\n * @internal\n */\n hide(origin?: FocusOrigin): void;\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void;\n\n /**\n * Set the menu content.\n * @param menu - The new menu\n */\n setMenu(menu: NgpOverlayContent<any>): void;\n\n /**\n * Set whether the pointer is over the menu content.\n * @param isOver - Whether the pointer is over the content\n * @internal\n */\n setPointerOverContent(isOver: boolean): void;\n}\n\nexport interface NgpMenuTriggerProps<T = unknown> {\n /**\n * Whether the trigger is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * The menu template or component.\n */\n readonly menu?: Signal<NgpOverlayContent<T> | undefined>;\n /**\n * The placement of the menu.\n */\n readonly placement?: Signal<NgpMenuPlacement>;\n /**\n * The offset of the menu.\n */\n readonly offset?: Signal<NgpOffset>;\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip?: Signal<NgpFlip>;\n /**\n * The container in which the menu should be attached.\n */\n readonly container?: Signal<HTMLElement | string | null>;\n\n /**\n * Configure shift behavior to keep the menu in view.\n */\n readonly shift?: Signal<NgpShift>;\n\n /**\n * How the menu behaves when the window is scrolled.\n */\n readonly scrollBehavior?: Signal<'reposition' | 'block' | 'close'>;\n /**\n * Context to provide to the menu.\n */\n readonly context?: Signal<T>;\n /**\n * Cooldown duration in milliseconds.\n */\n readonly cooldown?: Signal<number>;\n\n /**\n * Which trigger types are enabled.\n */\n readonly triggers?: Signal<NgpMenuTriggerType[]>;\n\n /**\n * The delay before showing the menu.\n */\n readonly showDelay?: Signal<number>;\n\n /**\n * The delay before hiding the menu.\n */\n readonly hideDelay?: Signal<number>;\n}\n\nexport const [\n NgpMenuTriggerStateToken,\n ngpMenuTrigger,\n _injectMenuTriggerState,\n provideMenuTriggerState,\n] = createPrimitive(\n 'NgpMenuTrigger',\n <T>({\n disabled: _disabled = signal(false),\n menu: _menu = signal<NgpOverlayContent<T> | undefined>(undefined),\n placement: _placement = signal('bottom-start' as NgpMenuPlacement),\n offset: _offset = signal(4),\n flip: _flip = signal(true),\n shift: _shift = signal(undefined),\n context: _context = signal<T>(undefined as T),\n container: _container,\n scrollBehavior,\n cooldown,\n triggers = signal(['click'] as NgpMenuTriggerType[]),\n showDelay = signal(0),\n hideDelay = signal(0),\n }: NgpMenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n const directionality = inject(Directionality);\n const disposables = injectDisposables();\n\n // Controlled properties\n const menu = controlled(_menu);\n const disabled = controlled(_disabled);\n const placement = controlled(_placement);\n const flip = controlled(_flip);\n const shift = controlled(_shift);\n const offset = controlled(_offset);\n const context = controlled(_context);\n const container = controlled(_container, 'body');\n\n // Internal state\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\n const openOrigin = signal<FocusOrigin>('program');\n const closeOrigin = signal<FocusOrigin>('program');\n\n // Track whether pointer is over trigger or content (for hover triggers)\n const pointerOverTrigger = signal(false);\n const pointerOverContent = signal(false);\n const isPointerOverMenuArea = computed(() => pointerOverTrigger() || pointerOverContent());\n\n // Safe-polygon hover intent: while the pointer travels inside a corridor from\n // the trigger exit point toward the open menu, the menu stays open. Reversing\n // away closes it (requireForwardMovement).\n const hoverBridge = createHoverBridge({\n isPointerInAnchor: isPointerOverMenuArea,\n close: () => hide(),\n requireForwardMovement: true,\n });\n\n // Reset pointer tracking when menu closes\n effect(() => {\n const isOpen = open();\n\n // When menu closes, reset pointer tracking state and tear down any\n // in-progress hover bridge (and its global listener).\n if (!isOpen) {\n hoverBridge.clear();\n pointerOverTrigger.set(false);\n pointerOverContent.set(false);\n }\n });\n\n // Computed signal to determine if focus should be restored\n // Only restore if opened via keyboard OR closed via keyboard\n const shouldRestoreFocus = computed(\n () => openOrigin() === 'keyboard' || closeOrigin() === 'keyboard',\n );\n\n // Host bindings\n attrBinding(element, 'aria-haspopup', 'true');\n attrBinding(element, 'aria-expanded', open);\n dataBinding(element, 'data-open', open);\n dataBinding(element, 'data-placement', placement);\n\n // Event listeners - conditionally add based on enabled triggers\n listener(element, 'click', onClick);\n listener(element, 'pointerenter', onPointerEnter);\n listener(element, 'pointerleave', onPointerLeave);\n listener(element, 'focus', onFocus);\n listener(element, 'blur', onBlur);\n listener(element, 'keydown', onKeydown);\n\n // Methods\n function onClick(event: MouseEvent): void {\n if (disabled?.() || !triggers().includes('click')) {\n return;\n }\n toggle(event);\n }\n\n function onPointerEnter(event: PointerEvent): void {\n if (disabled?.() || !triggers().includes('hover')) {\n return;\n }\n\n // Don't trigger on touch events\n if (event.pointerType === 'touch') {\n return;\n }\n\n pointerOverTrigger.set(true);\n\n // If already open, cancel any pending hide - the pointer is back on the\n // trigger, so any in-progress hover bridge is no longer needed.\n if (open()) {\n hoverBridge.clear();\n overlay()?.cancelPendingClose();\n return;\n }\n\n show('mouse');\n }\n\n function onPointerLeave(event: PointerEvent): void {\n if (disabled?.() || !triggers().includes('hover')) {\n return;\n }\n\n // Don't trigger on touch events\n if (event.pointerType === 'touch') {\n return;\n }\n\n pointerOverTrigger.set(false);\n\n const currentOverlay = overlay();\n\n // If the overlay hasn't been created, there's nothing to cancel\n if (!currentOverlay) {\n return;\n }\n\n // Build a safe-polygon corridor from the pointer exit point toward the\n // open menu. While the pointer stays inside it the menu stays open, so\n // diagonal travel across the offset gap doesn't collapse the menu.\n const menuElement = open() ? currentOverlay.getElements()[0] : undefined;\n const started =\n !!menuElement &&\n hoverBridge.track({\n triggerRect: element.nativeElement.getBoundingClientRect(),\n targetRect: menuElement.getBoundingClientRect(),\n exitPoint: { x: event.clientX, y: event.clientY },\n });\n\n if (started) {\n currentOverlay.cancelPendingClose();\n return;\n }\n\n // Fall back to a small grace period when we can't build the corridor.\n disposables.setTimeout(() => {\n if (!isPointerOverMenuArea()) {\n hide();\n }\n }, 50);\n }\n\n function onFocus(): void {\n if (disabled?.() || !triggers().includes('focus')) {\n return;\n }\n\n // If already open, do nothing\n if (open()) {\n return;\n }\n\n show('keyboard');\n }\n\n function onBlur(event: FocusEvent): void {\n if (disabled?.() || !triggers().includes('focus')) {\n return;\n }\n\n // If the overlay hasn't been created, there's nothing to cancel\n if (!overlay()) {\n return;\n }\n\n // Check if focus is moving to an element inside the menu\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n if (relatedTarget) {\n const menuElements = overlay()?.getElements() ?? [];\n const isFocusInMenu = menuElements.some(el => el.contains(relatedTarget));\n if (isFocusInMenu) {\n return;\n }\n }\n\n hide();\n }\n\n function onKeydown(event: KeyboardEvent): void {\n if (disabled?.()) {\n return;\n }\n\n const enabledTriggers = triggers();\n\n // Handle Enter key - toggle behavior\n if (event.key === 'Enter' && enabledTriggers.includes('enter')) {\n event.preventDefault();\n const origin: FocusOrigin = 'keyboard';\n if (open()) {\n hide(origin);\n } else {\n show(origin);\n }\n return;\n }\n\n // Handle arrow keys - placement-aware\n if (!enabledTriggers.includes('arrowkey')) {\n return;\n }\n\n const isArrowKey =\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight';\n\n if (!isArrowKey) {\n return;\n }\n\n // Get RTL direction\n const isRtl = directionality.value === 'rtl';\n\n // Check if arrow direction matches placement\n const currentPlacement = placement();\n let shouldOpen = false;\n\n if (currentPlacement.startsWith('bottom') && event.key === 'ArrowDown') {\n shouldOpen = true;\n } else if (currentPlacement.startsWith('top') && event.key === 'ArrowUp') {\n shouldOpen = true;\n } else if (currentPlacement.startsWith('right')) {\n const isRightArrow = event.key === 'ArrowRight';\n const isLeftArrow = event.key === 'ArrowLeft';\n shouldOpen = (isRightArrow && !isRtl) || (isLeftArrow && isRtl);\n } else if (currentPlacement.startsWith('left')) {\n const isRightArrow = event.key === 'ArrowRight';\n const isLeftArrow = event.key === 'ArrowLeft';\n shouldOpen = (isLeftArrow && !isRtl) || (isRightArrow && isRtl);\n }\n\n if (shouldOpen && !open()) {\n event.preventDefault();\n show('keyboard');\n }\n }\n\n function toggle(event: MouseEvent): void {\n // determine the origin of the event, 0 is keyboard, 1 is mouse\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if the menu is open then hide it\n if (open()) {\n hide(origin);\n } else {\n show(origin);\n }\n }\n\n function show(origin: FocusOrigin = 'program'): void {\n // Store the origin used to open the menu\n openOrigin.set(origin);\n\n // Create the overlay if it doesn't exist yet\n if (!overlay()) {\n createOverlayInstance();\n }\n\n // Show the overlay\n overlay()?.show();\n }\n\n function hide(origin: FocusOrigin = 'program'): void {\n const currentOverlay = overlay();\n if (!currentOverlay) {\n return;\n }\n\n // Hide the overlay (this will trigger onClose callback which updates closeOrigin)\n currentOverlay.hide({ origin });\n }\n\n function createOverlayInstance(): void {\n const menuContent = menu?.();\n\n if (!menuContent) {\n throw new Error('Menu must be either a TemplateRef or a ComponentType');\n }\n\n // Create config for the overlay\n const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n viewContainerRef,\n injector,\n context,\n container: container(),\n placement: placement,\n offset: offset(),\n flip: flip(),\n shift: shift(),\n closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: shouldRestoreFocus,\n onClose: (origin: FocusOrigin) => closeOrigin.set(origin),\n scrollBehaviour: scrollBehavior?.() ?? 'block',\n overlayType: 'menu',\n cooldown: cooldown?.(),\n showDelay: showDelay(),\n hideDelay: hideDelay(),\n };\n\n overlay.set(createOverlay(config));\n }\n\n function setMenu(newMenu: NgpOverlayContent<T> | undefined): void {\n menu.set(newMenu);\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n\n if (isDisabled && open()) {\n hide();\n }\n }\n\n function setFlip(shouldFlip: NgpFlip): void {\n flip.set(shouldFlip);\n }\n\n function setPlacement(newPlacement: NgpMenuPlacement): void {\n placement.set(newPlacement);\n }\n\n function setOffset(newOffset: NgpOffset): void {\n offset.set(newOffset);\n }\n\n function setContext(newContext: T): void {\n context.set(newContext);\n }\n\n function setContainer(newContainer: HTMLElement | string | null): void {\n container.set(newContainer);\n }\n\n /**\n * Called by menu content when pointer enters/leaves\n * @internal\n */\n function setPointerOverContent(isOver: boolean): void {\n pointerOverContent.set(isOver);\n\n if (isOver) {\n // The pointer reached the menu - the hover bridge has served its purpose.\n hoverBridge.clear();\n return;\n }\n\n if (open() && triggers().includes('hover')) {\n // Use a small delay to allow pointer to move back to trigger\n disposables.setTimeout(() => {\n // Only hide if pointer is not over trigger or content\n if (!isPointerOverMenuArea()) {\n hide();\n }\n }, 50);\n }\n }\n\n return {\n menu: deprecatedSetter(menu, 'setMenu'),\n placement: deprecatedSetter(placement, 'setPlacement'),\n offset: deprecatedSetter(offset, 'setOffset'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n context: deprecatedSetter(context, 'setContext'),\n open,\n openOrigin,\n show,\n hide,\n toggle,\n setDisabled,\n setMenu,\n setFlip,\n setPlacement,\n setOffset,\n setContext,\n setContainer,\n setPointerOverContent,\n flip,\n container: deprecatedSetter(container, 'setContainer', setContainer),\n } satisfies NgpMenuTriggerState<T>;\n },\n);\n\nexport function injectMenuTriggerState<T>(\n options?: StateInjectionOptions,\n): Signal<NgpMenuTriggerState<T>> {\n return _injectMenuTriggerState(options) as Signal<NgpMenuTriggerState<T>>;\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { computed, inject } from '@angular/core';\nimport { ngpFocusTrap } from 'ng-primitives/focus-trap';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectOverlay } from 'ng-primitives/portal';\nimport { attrBinding, createPrimitive, listener, styleBinding } from 'ng-primitives/state';\nimport { Subject } from 'rxjs';\nimport { injectMenuTriggerState } from '../menu-trigger/menu-trigger-state';\n\nexport interface NgpMenuState {\n /**\n * Close the menu and any parent menus.\n * @param origin - The focus origin\n */\n closeAllMenus(origin: FocusOrigin): void;\n /**\n * Subject that emits when submenus should be closed.\n * @internal\n */\n readonly closeSubmenus: Subject<HTMLElement>;\n}\n\nexport interface NgpMenuProps {}\n\nexport const [NgpMenuStateToken, ngpMenu, injectMenuState, provideMenuState] = createPrimitive(\n 'NgpMenu',\n ({}: NgpMenuProps) => {\n const element = injectElementRef();\n const overlay = injectOverlay();\n const directionality = inject(Directionality, { optional: true });\n const menuTrigger = injectMenuTriggerState();\n const parentMenu = injectMenuState({ optional: true, skipSelf: true });\n\n // Always trap focus in menus per WAI-ARIA guidelines (Tab should not navigate within menus)\n // Pass the open origin so focus trap uses the correct origin for :focus-visible styling\n const openOrigin = computed(() => menuTrigger()?.openOrigin() ?? 'program');\n ngpFocusTrap({\n focusOrigin: openOrigin,\n });\n\n // Register this element as the overlay outlet so floating-ui positions it correctly,\n // even when this directive is on a nested child component rather than the portal root.\n overlay.registerOutletElement(element.nativeElement);\n\n // Host bindings\n attrBinding(element, 'role', 'menu');\n attrBinding(element, 'data-placement', overlay.finalPlacement);\n attrBinding(element, 'data-overlay', '');\n styleBinding(element, 'left.px', () => overlay.position().x ?? null);\n styleBinding(element, 'top.px', () => overlay.position().y ?? null);\n styleBinding(element, '--ngp-menu-trigger-width.px', overlay.triggerWidth);\n styleBinding(element, '--ngp-menu-transform-origin', overlay.transformOrigin);\n styleBinding(element, '--ngp-menu-available-width.px', overlay.availableWidth);\n styleBinding(element, '--ngp-menu-available-height.px', overlay.availableHeight);\n\n // Event listeners for pointer tracking and keyboard\n listener(element, 'pointerenter', onPointerEnter);\n listener(element, 'pointerleave', onPointerLeave);\n listener(element, 'keydown', onKeydown);\n\n // Subject to notify children to close submenus\n const closeSubmenus = new Subject<HTMLElement>();\n\n // Methods\n function onPointerEnter(): void {\n menuTrigger()?.setPointerOverContent(true);\n }\n\n function onPointerLeave(): void {\n menuTrigger()?.setPointerOverContent(false);\n }\n\n function onKeydown(event: KeyboardEvent): void {\n // Handle Escape key - close all menus and restore focus to root trigger\n // We handle this here instead of using overlay's closeOnEscape to ensure\n // proper focus restoration through the closeAllMenus chain\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n closeAllMenus('keyboard');\n return;\n }\n\n // Only handle arrow close keys for top-level menus (no parent submenu)\n // Submenus are handled by menu-item-state via NgpSubmenuTrigger\n if (parentMenu()) {\n return;\n }\n\n const placement = overlay.finalPlacement();\n if (!placement) {\n return;\n }\n\n const isRtl = (directionality?.value ?? 'ltr') === 'rtl';\n\n // Determine which arrow key should close based on placement\n // Note: Only Left/Right arrows close menus (for side-placed menus).\n // Up/Down arrows are reserved for roving focus navigation within the menu.\n let shouldClose = false;\n\n if (placement.startsWith('right')) {\n // Right-placed menu: Left Arrow closes (or Right Arrow in RTL)\n shouldClose = event.key === (isRtl ? 'ArrowRight' : 'ArrowLeft');\n } else if (placement.startsWith('left')) {\n // Left-placed menu: Right Arrow closes (or Left Arrow in RTL)\n shouldClose = event.key === (isRtl ? 'ArrowLeft' : 'ArrowRight');\n }\n\n if (shouldClose) {\n event.preventDefault();\n event.stopPropagation();\n menuTrigger()?.hide('keyboard');\n }\n }\n\n function closeAllMenus(origin: FocusOrigin): void {\n menuTrigger().hide(origin);\n parentMenu()?.closeAllMenus(origin);\n }\n\n return {\n closeAllMenus,\n closeSubmenus,\n } satisfies NgpMenuState;\n },\n);\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n computed,\n effect,\n inject,\n Injector,\n signal,\n Signal,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { createHoverBridge, injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\n NgpFlip,\n NgpOffset,\n NgpOverlay,\n NgpOverlayConfig,\n NgpOverlayContent,\n} from 'ng-primitives/portal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n listener,\n} from 'ng-primitives/state';\nimport { injectDisposables, safeTakeUntilDestroyed } from 'ng-primitives/utils';\nimport { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\nimport { injectMenuState } from '../menu/menu-state';\n\nexport interface NgpSubmenuTriggerState {\n /**\n * The menu template or component.\n */\n readonly menu: WritableSignal<NgpOverlayContent<any> | undefined>;\n\n /**\n * The computed placement of the menu.\n */\n readonly placement: WritableSignal<NgpMenuPlacement>;\n\n /**\n * Whether the menu is open.\n */\n readonly open: Signal<boolean>;\n\n /**\n * The offset of the menu.\n */\n readonly offset: WritableSignal<NgpOffset>;\n\n /**\n * The disabled state of the trigger.\n */\n readonly disabled: WritableSignal<boolean>;\n\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip: WritableSignal<NgpFlip>;\n\n /**\n * The container in which the menu should be attached.\n * @default document.body\n */\n readonly container: WritableSignal<HTMLElement | string | null>;\n\n /**\n * The focus origin used to open the submenu.\n * Used by the submenu's focus trap for :focus-visible styling.\n * @internal\n */\n readonly openOrigin: Signal<FocusOrigin>;\n\n /**\n * Show the menu.\n * @param origin - The focus origin (keyboard, mouse, touch, or program)\n */\n show(origin?: FocusOrigin): void;\n\n /**\n * Hide the menu.\n * @param origin - The focus origin\n */\n hide(origin?: FocusOrigin): void;\n\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void;\n\n /**\n * Set whether the trigger is disabled.\n * @param isDisabled - Whether the trigger is disabled\n */\n setDisabled(isDisabled: boolean): void;\n\n /**\n * Set the menu template or component.\n * @param menu - The menu content\n */\n setMenu(menu: NgpOverlayContent<any> | undefined): void;\n\n /**\n * Set the placement of the menu.\n * @param placement - The menu placement\n */\n setPlacement(placement: NgpMenuPlacement): void;\n\n /**\n * Set the offset of the menu.\n * @param offset - The menu offset\n */\n setOffset(offset: NgpOffset): void;\n\n /**\n * Set whether the menu should flip when there is not enough space.\n * @param shouldFlip - Whether the menu should flip\n */\n setFlip(shouldFlip: NgpFlip): void;\n\n /**\n * Set the container in which the menu should be attached. Takes effect the\n * next time the menu is opened; it does not move a menu that is already open.\n * @param container - The new container\n */\n setContainer(container: HTMLElement | string | null): void;\n\n /**\n * Focus the trigger element.\n * @param origin - The focus origin\n */\n focus(origin: FocusOrigin): void;\n\n /**\n * Set whether the pointer is over the submenu content. Entering the submenu\n * tears down the hover bridge (the pointer arrived safely).\n * @param isOver - Whether the pointer is over the content\n * @internal\n */\n setPointerOverContent(isOver: boolean): void;\n}\n\nexport interface NgpSubmenuTriggerProps<T = unknown> {\n /**\n * Whether the trigger is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * The menu template or component.\n */\n readonly menu?: Signal<NgpOverlayContent<T> | undefined>;\n /**\n * The placement of the menu.\n */\n readonly placement?: Signal<NgpMenuPlacement>;\n /**\n * The offset of the menu.\n */\n readonly offset?: Signal<NgpOffset>;\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip?: Signal<NgpFlip>;\n /**\n * The container in which the menu should be attached.\n */\n readonly container?: Signal<HTMLElement | string | null>;\n}\n\nexport const [\n NgpSubmenuTriggerStateToken,\n ngpSubmenuTrigger,\n injectSubmenuTriggerState,\n provideSubmenuTriggerState,\n] = createPrimitive(\n 'NgpSubmenuTrigger',\n <T>({\n disabled: _disabled = signal(false),\n menu: _menu = signal<NgpOverlayContent<T> | undefined>(undefined),\n placement: _placement = signal('right-start'),\n offset: _offset = signal(0),\n flip: _flip = signal(true),\n container: _container,\n }: NgpSubmenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n const parentMenu = injectMenuState({ optional: true });\n const focusMonitor = inject(FocusMonitor);\n const disposables = injectDisposables();\n\n // Controlled properties\n const menu = controlled(_menu);\n const disabled = controlled(_disabled);\n const placement = controlled(_placement);\n const flip = controlled(_flip);\n const offset = controlled(_offset);\n const container = controlled(_container, 'body');\n\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\n const openOrigin = signal<FocusOrigin>('program');\n\n // Track pointer presence for the safe-polygon hover bridge.\n const pointerOverTrigger = signal(false);\n const pointerOverContent = signal(false);\n const isPointerOverSubmenu = computed(() => pointerOverTrigger() || pointerOverContent());\n\n // Safe-polygon hover intent: while the pointer travels inside a corridor from\n // the submenu trigger toward the open submenu, sibling hover events are\n // ignored so the submenu doesn't collapse mid-traversal.\n const hoverBridge = createHoverBridge({\n isPointerInAnchor: isPointerOverSubmenu,\n close: () => hide('mouse'),\n requireForwardMovement: true,\n });\n\n // Tear down any hover bridge whenever the submenu closes - including close\n // paths that bypass hide() (e.g. an outside click on the overlay), so a\n // stale corridor can't linger or wrongly suppress the next sibling hover.\n // Also reset the pointer flags: destroying the panel under the pointer never\n // fires its pointerleave, and a stuck pointerOverContent would make every\n // future corridor treat the pointer as anchored and never close.\n effect(() => {\n if (!open()) {\n hoverBridge.clear();\n pointerOverTrigger.set(false);\n pointerOverContent.set(false);\n }\n });\n\n // Subscribe to parent menu's closeSubmenus\n parentMenu()\n ?.closeSubmenus.pipe(safeTakeUntilDestroyed())\n .subscribe(submenuElement => {\n // if the element is not the trigger, we want to close the menu\n if (submenuElement === element.nativeElement) {\n return;\n }\n\n // While the pointer is still inside the safe-polygon corridor toward this\n // submenu, ignore sibling hover-driven closes. The pointer-move listener\n // closes the submenu itself once the pointer actually leaves the corridor.\n if (hoverBridge.isActive()) {\n return;\n }\n\n hide('mouse');\n });\n\n // Host bindings\n attrBinding(element, 'aria-haspopup', 'true');\n attrBinding(element, 'aria-expanded', open);\n dataBinding(element, 'data-open', open);\n\n // Event listeners\n listener(element, 'click', onClick);\n listener(element, 'keydown', handleArrowKey);\n listener(element, 'pointerenter', showSubmenuOnHover);\n listener(element, 'pointerleave', onPointerLeave);\n\n // Methods\n function onClick(event: MouseEvent): void {\n if (disabled?.()) {\n return;\n }\n toggle(event);\n }\n\n function toggle(event: MouseEvent): void {\n // determine the origin of the event, 0 is keyboard, 1 is mouse\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if the menu is open then hide it\n if (open()) {\n hide(origin);\n } else {\n show(origin);\n }\n }\n\n function show(origin: FocusOrigin = 'program'): void {\n // If the trigger is disabled, don't show the menu\n if (disabled?.()) {\n return;\n }\n\n // Store the origin used to open the menu (for focus-visible styling in submenu)\n openOrigin.set(origin);\n\n // Create the overlay if it doesn't exist yet\n if (!overlay()) {\n createOverlayInstance();\n }\n\n // Show the overlay\n overlay()?.show();\n }\n\n function hide(origin: FocusOrigin = 'program'): void {\n // If the trigger is disabled or the menu is not open, do nothing\n if (disabled?.() || !open()) {\n return;\n }\n\n // The submenu is closing - any active hover bridge is no longer relevant.\n hoverBridge.clear();\n\n // Hide the overlay\n overlay()?.hide({ origin });\n }\n\n function createOverlayInstance(): void {\n const menuContent = menu?.();\n\n if (!menuContent) {\n throw new Error('Menu must be either a TemplateRef or a ComponentType');\n }\n\n // Create config for the overlay\n // Note: restoreFocus is false because submenus should never auto-restore focus.\n // When closeAllMenus is called, the ROOT menu's overlay handles focus restoration.\n // When closing just the submenu (Left Arrow), the caller handles focus explicitly.\n // closeOnEscape is false because we handle Escape in menu-state.ts to ensure\n // proper focus restoration through closeAllMenus.\n const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n injector,\n container: container(),\n placement,\n offset: offset(),\n flip: flip(),\n closeOnOutsideClick: true,\n closeOnEscape: false,\n restoreFocus: false,\n viewContainerRef,\n };\n\n overlay.set(createOverlay(config));\n }\n\n function handleArrowKey(event: Event): void {\n if (event instanceof KeyboardEvent === false) {\n return;\n }\n\n const direction = getComputedStyle(element.nativeElement).direction;\n const isRtl = direction === 'rtl';\n\n const isRightArrow = event.key === 'ArrowRight';\n const isLeftArrow = event.key === 'ArrowLeft';\n\n if ((isRightArrow && !isRtl) || (isLeftArrow && isRtl)) {\n event.preventDefault();\n show('keyboard');\n }\n }\n\n function showSubmenuOnHover(event: Event): void {\n if (event instanceof PointerEvent === false) {\n return;\n }\n\n // if this was triggered by a touch event, we don't want to show the submenu\n // as it will be shown by the click event - this prevents the submenu from being toggled\n if (event.pointerType === 'touch') {\n return;\n }\n\n pointerOverTrigger.set(true);\n // The pointer is back on the trigger - drop any in-progress hover bridge.\n hoverBridge.clear();\n\n show('mouse');\n }\n\n function onPointerLeave(event: Event): void {\n if (event instanceof PointerEvent === false || event.pointerType === 'touch') {\n return;\n }\n\n pointerOverTrigger.set(false);\n\n const currentOverlay = overlay();\n\n // Only build a corridor while the submenu is actually open.\n if (!open() || !currentOverlay) {\n return;\n }\n\n const submenuElement = currentOverlay.getElements()[0];\n const started =\n !!submenuElement &&\n hoverBridge.track({\n triggerRect: element.nativeElement.getBoundingClientRect(),\n targetRect: submenuElement.getBoundingClientRect(),\n exitPoint: { x: event.clientX, y: event.clientY },\n });\n\n if (!started) {\n // Defensive fallback: if the corridor can't be built, close after a short\n // grace period rather than leaving the submenu stuck open.\n disposables.setTimeout(() => {\n if (!isPointerOverSubmenu()) {\n hide('mouse');\n }\n }, 50);\n }\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n\n if (isDisabled && open()) {\n hide();\n }\n }\n\n function setMenu(newMenu: NgpOverlayContent<T> | undefined): void {\n menu.set(newMenu);\n }\n\n function setPlacement(newPlacement: NgpMenuPlacement): void {\n placement.set(newPlacement);\n }\n\n function setOffset(newOffset: NgpOffset): void {\n offset.set(newOffset);\n }\n\n function setFlip(shouldFlip: NgpFlip): void {\n flip.set(shouldFlip);\n }\n\n function setContainer(newContainer: HTMLElement | string | null): void {\n container.set(newContainer);\n }\n\n function focus(origin: FocusOrigin): void {\n focusMonitor.focusVia(element.nativeElement, origin, { preventScroll: true });\n }\n\n function setPointerOverContent(isOver: boolean): void {\n pointerOverContent.set(isOver);\n\n // Reaching the submenu content means the pointer arrived safely, so the\n // hover bridge corridor is no longer needed.\n if (isOver) {\n hoverBridge.clear();\n }\n }\n\n return {\n placement: deprecatedSetter(placement, 'setPlacement'),\n offset: deprecatedSetter(offset, 'setOffset'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n menu: deprecatedSetter(menu, 'setMenu'),\n flip: deprecatedSetter(flip, 'setFlip'),\n open,\n openOrigin,\n show,\n hide,\n toggle,\n setDisabled,\n setMenu,\n setFlip,\n setPlacement,\n setOffset,\n setContainer,\n focus,\n setPointerOverContent,\n container: deprecatedSetter(container, 'setContainer', setContainer),\n } satisfies NgpSubmenuTriggerState;\n },\n);\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport {\n coerceFlip,\n coerceOffset,\n NgpFlip,\n NgpFlipInput,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n} from 'ng-primitives/portal';\nimport { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\nimport { NgpMenuTriggerStateToken } from '../menu-trigger/menu-trigger-state';\nimport {\n NgpSubmenuTriggerStateToken,\n ngpSubmenuTrigger,\n provideSubmenuTriggerState,\n} from './submenu-trigger-state';\n\n@Directive({\n selector: '[ngpSubmenuTrigger]',\n exportAs: 'ngpSubmenuTrigger',\n providers: [\n provideSubmenuTriggerState(),\n // Also provide as NgpMenuTriggerStateToken so the submenu's menu-state\n // can find this trigger's openOrigin for :focus-visible styling\n { provide: NgpMenuTriggerStateToken, useExisting: NgpSubmenuTriggerStateToken },\n ],\n})\nexport class NgpSubmenuTrigger<T = unknown> {\n /**\n * Access the submenu template ref.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpSubmenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpSubmenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'right-start'\n */\n readonly placement = input<NgpMenuPlacement>('right-start', {\n alias: 'ngpSubmenuTriggerPlacement',\n });\n\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 0\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(0, {\n alias: 'ngpSubmenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * Can be a boolean to enable/disable, or an object with padding and fallbackPlacements options.\n * @default true\n */\n readonly flip = input<NgpFlip, NgpFlipInput>(true, {\n alias: 'ngpSubmenuTriggerFlip',\n transform: coerceFlip,\n });\n\n /**\n * Define the container in which the menu should be attached.\n * @default document.body\n */\n readonly container = input<HTMLElement | string | null>(null, {\n alias: 'ngpSubmenuTriggerContainer',\n });\n\n /**\n * Access the menu trigger state.\n */\n private readonly state = ngpSubmenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n container: this.container,\n });\n\n /**\n * Show the menu.\n */\n show(): void {\n this.state.show();\n }\n\n /**\n * Hide the menu.\n */\n hide(origin: FocusOrigin = 'program'): void {\n this.state.hide(origin);\n }\n\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void {\n this.state.toggle(event);\n }\n\n /**\n * Focus the trigger element.\n * @param origin - The focus origin\n */\n focus(origin: FocusOrigin = 'program'): void {\n this.state.focus(origin);\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { inject, Injector, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, listener } from 'ng-primitives/state';\nimport { injectMenuState } from '../menu/menu-state';\nimport { NgpSubmenuTrigger } from '../submenu-trigger/submenu-trigger';\n\nexport interface NgpMenuItemState {}\n\nexport interface NgpMenuItemProps {\n /**\n * Whether the menu item is disabled.\n */\n readonly disabled?: Signal<boolean>;\n\n /**\n * Whether the menu should close when this item is selected.\n * @default signal(true)\n */\n readonly closeOnSelect?: Signal<boolean>;\n\n /**\n * The ARIA role for the menu item.\n * @default 'menuitem'\n */\n readonly role?: string;\n}\n\nexport const [NgpMenuItemStateToken, ngpMenuItem, injectMenuItemState, provideMenuItemState] =\n createPrimitive(\n 'NgpMenuItem',\n ({\n disabled = signal(false),\n closeOnSelect = signal(true),\n role = 'menuitem',\n }: NgpMenuItemProps) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const parentMenu = injectMenuState({ optional: true });\n\n ngpButton({ disabled });\n\n // Host bindings\n attrBinding(element, 'role', role);\n\n // Event listeners\n listener(element, 'click', onClick);\n listener(element, 'keydown', handleArrowKey);\n listener(element, 'mouseenter', showSubmenuOnHover);\n\n // Methods\n function onClick(event: MouseEvent): void {\n // we do this here to avoid circular dependency issues\n const trigger = injector.get(NgpSubmenuTrigger, null, { self: true, optional: true });\n\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if this is a submenu trigger, we don't want to close the menu, we want to open the submenu\n // if closeOnSelect is false, we don't want to close the menu (e.g., checkbox/radio items)\n if (!trigger && closeOnSelect()) {\n parentMenu()?.closeAllMenus(origin);\n }\n }\n\n function handleArrowKey(event: Event): void {\n if (event instanceof KeyboardEvent === false) {\n return;\n }\n\n // if there is no parent menu, we don't want to do anything\n const trigger = injector.get(NgpSubmenuTrigger, null, { optional: true, skipSelf: true });\n\n if (!trigger) {\n return;\n }\n\n const direction = getComputedStyle(element.nativeElement).direction;\n const isRtl = direction === 'rtl';\n\n const isLeftArrow = event.key === 'ArrowLeft';\n const isRightArrow = event.key === 'ArrowRight';\n\n if ((isLeftArrow && !isRtl) || (isRightArrow && isRtl)) {\n event.preventDefault();\n\n if (trigger) {\n trigger.hide('keyboard');\n // Explicitly focus the submenu trigger since submenus have restoreFocus: false\n trigger.focus('keyboard');\n }\n }\n }\n\n function showSubmenuOnHover(): void {\n parentMenu()?.closeSubmenus.next(element.nativeElement);\n }\n\n return {} satisfies NgpMenuItemState;\n },\n );\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\nimport { ngpMenuItem, provideMenuItemState } from './menu-item-state';\n\n/**\n * The `NgpMenuItem` directive represents a menu item.\n */\n@Directive({\n selector: '[ngpMenuItem]',\n exportAs: 'ngpMenuItem',\n providers: [provideMenuItemState(), provideRovingFocusItemState()],\n})\nexport class NgpMenuItem {\n /** Whether the menu item is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemDisabled',\n transform: booleanAttribute,\n });\n\n /** Whether the menu should close when this item is selected */\n readonly closeOnSelect = input<boolean, BooleanInput>(true, {\n alias: 'ngpMenuItemCloseOnSelect',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItem({ disabled: this.disabled, closeOnSelect: this.closeOnSelect });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { Signal, signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n emitter,\n listener,\n} from 'ng-primitives/state';\nimport { Observable } from 'rxjs';\nimport { ngpMenuItem } from '../menu-item/menu-item-state';\n\nexport interface NgpMenuItemCheckboxState {\n /**\n * Whether the checkbox is checked.\n */\n readonly checked: Signal<boolean>;\n\n /**\n * Emits when the checked state changes.\n */\n readonly checkedChange: Observable<boolean>;\n\n /**\n * Toggle the checkbox value.\n */\n toggle(): void;\n}\n\nexport interface NgpMenuItemCheckboxProps {\n /**\n * Whether the checkbox is checked.\n */\n readonly checked?: Signal<boolean>;\n\n /**\n * Whether the checkbox is disabled.\n */\n readonly disabled?: Signal<boolean>;\n\n /**\n * Callback fired when the checked state changes.\n */\n readonly onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const [\n NgpMenuItemCheckboxStateToken,\n ngpMenuItemCheckbox,\n injectMenuItemCheckboxState,\n provideMenuItemCheckboxState,\n] = createPrimitive(\n 'NgpMenuItemCheckbox',\n ({\n checked: _checked = signal(false),\n disabled = signal(false),\n onCheckedChange,\n }: NgpMenuItemCheckboxProps): NgpMenuItemCheckboxState => {\n const element = injectElementRef();\n const checked = controlled(_checked);\n const checkedChange = emitter<boolean>();\n\n // Use base menu item behavior but don't close on select\n ngpMenuItem({ disabled, closeOnSelect: signal(false), role: 'menuitemcheckbox' });\n\n // Host bindings\n attrBinding(element, 'aria-checked', checked);\n dataBinding(element, 'data-checked', checked);\n\n // Toggle on click\n listener(element, 'click', () => toggle());\n\n function toggle(): void {\n if (disabled()) {\n return;\n }\n\n const nextChecked = !checked();\n checked.set(nextChecked);\n onCheckedChange?.(nextChecked);\n checkedChange.emit(nextChecked);\n }\n\n return {\n checked,\n checkedChange: checkedChange.asObservable(),\n toggle,\n } satisfies NgpMenuItemCheckboxState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, output } from '@angular/core';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\nimport { ngpMenuItemCheckbox, provideMenuItemCheckboxState } from './menu-item-checkbox-state';\n\n/**\n * The `NgpMenuItemCheckbox` directive represents a menu item that can be toggled on and off.\n */\n@Directive({\n selector: '[ngpMenuItemCheckbox]',\n exportAs: 'ngpMenuItemCheckbox',\n providers: [provideMenuItemCheckboxState(), provideRovingFocusItemState()],\n})\nexport class NgpMenuItemCheckbox {\n /** Whether the checkbox is checked */\n readonly checked = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemCheckboxChecked',\n transform: booleanAttribute,\n });\n\n /** Event emitted when the checked state changes */\n readonly checkedChange = output<boolean>({\n alias: 'ngpMenuItemCheckboxCheckedChange',\n });\n\n /** Whether the menu item checkbox is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemCheckboxDisabled',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItemCheckbox({\n checked: this.checked,\n disabled: this.disabled,\n onCheckedChange: value => this.checkedChange.emit(value),\n });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { Signal, signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, controlled, createPrimitive, emitter } from 'ng-primitives/state';\nimport { Observable } from 'rxjs';\n\nexport interface NgpMenuItemRadioGroupState {\n /**\n * The current value of the radio group.\n */\n readonly value: Signal<string | null>;\n\n /**\n * Emits when the value changes.\n */\n readonly valueChange: Observable<string>;\n\n /**\n * Select a radio item by value.\n */\n select(value: string): void;\n}\n\nexport interface NgpMenuItemRadioGroupProps {\n /**\n * The current value of the radio group.\n */\n readonly value?: Signal<string | null>;\n\n /**\n * Callback fired when the value changes.\n */\n readonly onValueChange?: (value: string) => void;\n}\n\nexport const [\n NgpMenuItemRadioGroupStateToken,\n ngpMenuItemRadioGroup,\n injectMenuItemRadioGroupState,\n provideMenuItemRadioGroupState,\n] = createPrimitive(\n 'NgpMenuItemRadioGroup',\n ({\n value: _value = signal(null),\n onValueChange,\n }: NgpMenuItemRadioGroupProps): NgpMenuItemRadioGroupState => {\n const element = injectElementRef();\n const value = controlled(_value);\n const valueChange = emitter<string>();\n\n // Host bindings\n attrBinding(element, 'role', 'group');\n\n function select(newValue: string): void {\n if (value() === newValue) {\n return;\n }\n\n value.set(newValue);\n onValueChange?.(newValue);\n valueChange.emit(newValue);\n }\n\n return {\n value,\n valueChange: valueChange.asObservable(),\n select,\n } satisfies NgpMenuItemRadioGroupState;\n },\n);\n","import { computed, Signal, signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectMenuItemRadioGroupState } from '../menu-item-radio-group/menu-item-radio-group-state';\nimport { ngpMenuItem } from '../menu-item/menu-item-state';\n\nexport interface NgpMenuItemRadioState {\n /**\n * Whether the radio item is checked.\n */\n readonly checked: Signal<boolean>;\n}\n\nexport interface NgpMenuItemRadioProps {\n /**\n * The value this radio item represents.\n */\n readonly value: Signal<string>;\n\n /**\n * Whether the radio item is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpMenuItemRadioStateToken,\n ngpMenuItemRadio,\n injectMenuItemRadioState,\n provideMenuItemRadioState,\n] = createPrimitive(\n 'NgpMenuItemRadio',\n ({ value, disabled = signal(false) }: NgpMenuItemRadioProps): NgpMenuItemRadioState => {\n const element = injectElementRef();\n const radioGroup = injectMenuItemRadioGroupState();\n\n // Use base menu item behavior but don't close on select\n ngpMenuItem({ disabled, closeOnSelect: signal(false), role: 'menuitemradio' });\n\n // Computed checked state\n const checked = computed(() => radioGroup()?.value() === value());\n\n // Host bindings\n attrBinding(element, 'aria-checked', checked);\n dataBinding(element, 'data-checked', checked);\n\n // Select on click\n listener(element, 'click', () => {\n if (disabled()) {\n return;\n }\n radioGroup()?.select(value());\n });\n\n return {\n checked,\n } satisfies NgpMenuItemRadioState;\n },\n);\n","import { computed, Directive } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { dataBinding } from 'ng-primitives/state';\nimport { injectMenuItemCheckboxState } from '../menu-item-checkbox/menu-item-checkbox-state';\nimport { injectMenuItemRadioState } from '../menu-item-radio/menu-item-radio-state';\n\n/**\n * The `NgpMenuItemIndicator` directive renders inside a checkbox or radio menu item\n * and exposes `data-checked` based on the parent item's checked state.\n */\n@Directive({\n selector: '[ngpMenuItemIndicator]',\n exportAs: 'ngpMenuItemIndicator',\n})\nexport class NgpMenuItemIndicator {\n constructor() {\n const element = injectElementRef();\n const checkboxState = injectMenuItemCheckboxState({ optional: true });\n const radioState = injectMenuItemRadioState({ optional: true });\n\n const checked = computed(() => checkboxState()?.checked() ?? radioState()?.checked() ?? false);\n\n dataBinding(element, 'data-checked', checked);\n }\n}\n","import { Directive, input, output } from '@angular/core';\nimport {\n ngpMenuItemRadioGroup,\n provideMenuItemRadioGroupState,\n} from './menu-item-radio-group-state';\n\n/**\n * The `NgpMenuItemRadioGroup` directive represents a group of radio menu items.\n */\n@Directive({\n selector: '[ngpMenuItemRadioGroup]',\n exportAs: 'ngpMenuItemRadioGroup',\n providers: [provideMenuItemRadioGroupState()],\n})\nexport class NgpMenuItemRadioGroup {\n /** The current value of the radio group */\n readonly value = input<string | null>(null, {\n alias: 'ngpMenuItemRadioGroupValue',\n });\n\n /** Event emitted when the value changes */\n readonly valueChange = output<string>({\n alias: 'ngpMenuItemRadioGroupValueChange',\n });\n\n constructor() {\n ngpMenuItemRadioGroup({\n value: this.value,\n onValueChange: value => this.valueChange.emit(value),\n });\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\nimport { ngpMenuItemRadio, provideMenuItemRadioState } from './menu-item-radio-state';\n\n/**\n * The `NgpMenuItemRadio` directive represents a radio menu item within a radio group.\n */\n@Directive({\n selector: '[ngpMenuItemRadio]',\n exportAs: 'ngpMenuItemRadio',\n providers: [provideMenuItemRadioState(), provideRovingFocusItemState()],\n})\nexport class NgpMenuItemRadio {\n /** The value this radio item represents */\n readonly value = input.required<string>({\n alias: 'ngpMenuItemRadioValue',\n });\n\n /** Whether the radio item is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemRadioDisabled',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItemRadio({ value: this.value, disabled: this.disabled });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, numberAttribute, Signal } from '@angular/core';\nimport {\n coerceFlip,\n coerceOffset,\n coerceShift,\n NgpFlip,\n NgpFlipInput,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n NgpShift,\n NgpShiftInput,\n} from 'ng-primitives/portal';\nimport { injectMenuConfig, NgpMenuTriggerType } from '../config/menu-config';\nimport { ngpMenuTrigger, provideMenuTriggerState } from './menu-trigger-state';\n\n/**\n * The `NgpMenuTrigger` directive allows you to turn an element into a menu trigger.\n */\n@Directive({\n selector: '[ngpMenuTrigger]',\n exportAs: 'ngpMenuTrigger',\n providers: [provideMenuTriggerState()],\n})\nexport class NgpMenuTrigger<T = unknown> {\n /**\n * Access the global menu configuration.\n */\n private readonly config = injectMenuConfig();\n\n /**\n * Access the menu template ref or ComponentType.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpMenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'bottom-start'\n */\n readonly placement = input<NgpMenuPlacement>(this.config.placement, {\n alias: 'ngpMenuTriggerPlacement',\n });\n\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 4\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(this.config.offset, {\n alias: 'ngpMenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * Can be a boolean to enable/disable, or an object with padding and fallbackPlacements options.\n * @default true\n */\n readonly flip = input<NgpFlip, NgpFlipInput>(this.config.flip, {\n alias: 'ngpMenuTriggerFlip',\n transform: coerceFlip,\n });\n\n /**\n * Configure shift behavior to keep the menu in view.\n * Can be a boolean to enable/disable, or an object with padding and limiter options.\n * @default undefined (enabled by default in overlay)\n */\n readonly shift = input<NgpShift, NgpShiftInput>(this.config.shift, {\n alias: 'ngpMenuTriggerShift',\n transform: coerceShift,\n });\n\n /**\n * Define the container in which the menu should be attached.\n * @default document.body\n */\n readonly container = input<HTMLElement | string | null>(this.config.container, {\n alias: 'ngpMenuTriggerContainer',\n });\n\n /**\n * Defines how the menu behaves when the window is scrolled.\n * @default 'block'\n */\n readonly scrollBehavior = input<'reposition' | 'block' | 'close'>(this.config.scrollBehavior, {\n alias: 'ngpMenuTriggerScrollBehavior',\n });\n\n /**\n * Define the cooldown duration in milliseconds.\n * When moving from one menu to another within this duration,\n * the showDelay is skipped for the new menu.\n * @default 0\n */\n readonly cooldown = input<number, NumberInput>(this.config.cooldown, {\n alias: 'ngpMenuTriggerCooldown',\n transform: numberAttribute,\n });\n\n /**\n * Provide context to the menu. This can be used to pass data to the menu content.\n */\n readonly context = input<T>(undefined, {\n alias: 'ngpMenuTriggerContext',\n });\n\n /**\n * Define which trigger types are enabled for the menu.\n * @default ['click']\n */\n readonly triggers = input<NgpMenuTriggerType[]>(this.config.triggers, {\n alias: 'ngpMenuTriggerOpenTriggers',\n });\n\n /**\n * Define the delay before the menu is displayed (hover/focus triggers).\n * @default 0\n */\n readonly showDelay = input<number, NumberInput>(this.config.showDelay, {\n alias: 'ngpMenuTriggerShowDelay',\n transform: numberAttribute,\n });\n\n /**\n * Define the delay before the menu is hidden (hover/focus triggers).\n * @default 0\n */\n readonly hideDelay = input<number, NumberInput>(this.config.hideDelay, {\n alias: 'ngpMenuTriggerHideDelay',\n transform: numberAttribute,\n });\n\n /**\n * The menu trigger state.\n */\n private readonly state = ngpMenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n shift: this.shift,\n container: this.container,\n scrollBehavior: this.scrollBehavior,\n cooldown: this.cooldown,\n context: this.context as Signal<T>,\n triggers: this.triggers,\n showDelay: this.showDelay,\n hideDelay: this.hideDelay,\n });\n\n /**\n * Show the menu.\n */\n show(): void {\n this.state.show();\n }\n\n /**\n * Hide the menu.\n * @param origin - The focus origin\n * @internal\n */\n hide(origin?: FocusOrigin): void {\n this.state.hide(origin);\n }\n\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void {\n this.state.toggle(event);\n }\n}\n\nexport type NgpMenuPlacement =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-start'\n | 'top-end'\n | 'right-start'\n | 'right-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'left-start'\n | 'left-end';\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { provideFocusTrapState } from 'ng-primitives/focus-trap';\nimport { provideControlContainerIsolation } from 'ng-primitives/portal';\nimport { ngpRovingFocusGroup, provideRovingFocusGroupState } from 'ng-primitives/roving-focus';\nimport { injectMenuConfig } from '../config/menu-config';\nimport { ngpMenu, provideMenuState } from './menu-state';\n\n/**\n * The `NgpMenu` is a container for menu items.\n */\n@Directive({\n selector: '[ngpMenu]',\n exportAs: 'ngpMenu',\n providers: [\n // ensure we don't inherit the focus group from the parent menu if there is one\n provideRovingFocusGroupState({ inherit: false }),\n provideMenuState({ inherit: false }),\n provideFocusTrapState(),\n provideControlContainerIsolation(),\n ],\n})\nexport class NgpMenu {\n private readonly config = injectMenuConfig();\n\n /**\n * Whether focus should wrap around when reaching the end of the menu.\n * @default true\n */\n readonly wrap = input<boolean, BooleanInput>(this.config.wrap, {\n alias: 'ngpMenuWrap',\n transform: booleanAttribute,\n });\n\n private readonly state = ngpMenu({ wrap: this.wrap });\n\n constructor() {\n ngpRovingFocusGroup({ inherit: false, wrap: this.wrap });\n }\n\n /** @internal Close the menu and any parent menus */\n closeAllMenus(origin: FocusOrigin): void {\n this.state.closeAllMenus(origin);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA+EO,MAAM,iBAAiB,GAAkB;AAC9C,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC,OAAO,CAAC;AACnB,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,SAAS,EAAE,CAAC;CACb;AAEM,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAAgB,oBAAoB,CAAC;AAEzF;;;;AAIG;AACG,SAAU,iBAAiB,CAAC,MAA8B,EAAA;IAC9D,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,kBAAkB;AAC3B,YAAA,QAAQ,EAAE,EAAE,GAAG,iBAAiB,EAAE,GAAG,MAAM,EAAE;AAC9C,SAAA;KACF;AACH;AAEA;;;AAGG;SACa,gBAAgB,GAAA;AAC9B,IAAA,OAAO,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,iBAAiB;AAC5E;;AC6FO,MAAM,CACX,wBAAwB,EACxB,cAAc,EACd,uBAAuB,EACvB,uBAAuB,EACxB,GAAG,eAAe,CACjB,gBAAgB,EAChB,CAAI,EACF,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,EACnC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAmC,SAAS,CAAC,EACjE,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,cAAkC,CAAC,EAClE,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAC3B,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,EACjC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAI,SAAc,CAAC,EAC7C,SAAS,EAAE,UAAU,EACrB,cAAc,EACd,QAAQ,EACR,QAAQ,GAAG,MAAM,CAAC,CAAC,OAAO,CAAyB,CAAC,EACpD,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,EACrB,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GACE,KAAI;AAC3B,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACjD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC7C,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE;;AAGvC,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AAC9B,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;AACtC,IAAA,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC;AACxC,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AAC9B,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;AAChC,IAAA,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;AAClC,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC;IACpC,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC;;AAGhD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAuB,IAAI,8EAAC;AAClD,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,KAAK,2EAAC;AACzD,IAAA,MAAM,UAAU,GAAG,MAAM,CAAc,SAAS,iFAAC;AACjD,IAAA,MAAM,WAAW,GAAG,MAAM,CAAc,SAAS,kFAAC;;AAGlD,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,yFAAC;AACxC,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,yFAAC;AACxC,IAAA,MAAM,qBAAqB,GAAG,QAAQ,CAAC,MAAM,kBAAkB,EAAE,IAAI,kBAAkB,EAAE,4FAAC;;;;IAK1F,MAAM,WAAW,GAAG,iBAAiB,CAAC;AACpC,QAAA,iBAAiB,EAAE,qBAAqB;AACxC,QAAA,KAAK,EAAE,MAAM,IAAI,EAAE;AACnB,QAAA,sBAAsB,EAAE,IAAI;AAC7B,KAAA,CAAC;;IAGF,MAAM,CAAC,MAAK;AACV,QAAA,MAAM,MAAM,GAAG,IAAI,EAAE;;;QAIrB,IAAI,CAAC,MAAM,EAAE;YACX,WAAW,CAAC,KAAK,EAAE;AACnB,YAAA,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,YAAA,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B;AACF,IAAA,CAAC,CAAC;;;AAIF,IAAA,MAAM,kBAAkB,GAAG,QAAQ,CACjC,MAAM,UAAU,EAAE,KAAK,UAAU,IAAI,WAAW,EAAE,KAAK,UAAU,yFAClE;;AAGD,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC;AAC7C,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC;AAC3C,IAAA,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC;AACvC,IAAA,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,SAAS,CAAC;;AAGjD,IAAA,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACnC,IAAA,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;AACjD,IAAA,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;AACjD,IAAA,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACnC,IAAA,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;AACjC,IAAA,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;;IAGvC,SAAS,OAAO,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjD;QACF;QACA,MAAM,CAAC,KAAK,CAAC;IACf;IAEA,SAAS,cAAc,CAAC,KAAmB,EAAA;AACzC,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjD;QACF;;AAGA,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE;YACjC;QACF;AAEA,QAAA,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;;;QAI5B,IAAI,IAAI,EAAE,EAAE;YACV,WAAW,CAAC,KAAK,EAAE;AACnB,YAAA,OAAO,EAAE,EAAE,kBAAkB,EAAE;YAC/B;QACF;QAEA,IAAI,CAAC,OAAO,CAAC;IACf;IAEA,SAAS,cAAc,CAAC,KAAmB,EAAA;AACzC,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjD;QACF;;AAGA,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE;YACjC;QACF;AAEA,QAAA,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;AAE7B,QAAA,MAAM,cAAc,GAAG,OAAO,EAAE;;QAGhC,IAAI,CAAC,cAAc,EAAE;YACnB;QACF;;;;AAKA,QAAA,MAAM,WAAW,GAAG,IAAI,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS;AACxE,QAAA,MAAM,OAAO,GACX,CAAC,CAAC,WAAW;YACb,WAAW,CAAC,KAAK,CAAC;AAChB,gBAAA,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC1D,gBAAA,UAAU,EAAE,WAAW,CAAC,qBAAqB,EAAE;AAC/C,gBAAA,SAAS,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE;AAClD,aAAA,CAAC;QAEJ,IAAI,OAAO,EAAE;YACX,cAAc,CAAC,kBAAkB,EAAE;YACnC;QACF;;AAGA,QAAA,WAAW,CAAC,UAAU,CAAC,MAAK;AAC1B,YAAA,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAC5B,gBAAA,IAAI,EAAE;YACR;QACF,CAAC,EAAE,EAAE,CAAC;IACR;AAEA,IAAA,SAAS,OAAO,GAAA;AACd,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjD;QACF;;QAGA,IAAI,IAAI,EAAE,EAAE;YACV;QACF;QAEA,IAAI,CAAC,UAAU,CAAC;IAClB;IAEA,SAAS,MAAM,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjD;QACF;;AAGA,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE;YACd;QACF;;AAGA,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAAmC;QAC/D,IAAI,aAAa,EAAE;YACjB,MAAM,YAAY,GAAG,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AACnD,YAAA,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACzE,IAAI,aAAa,EAAE;gBACjB;YACF;QACF;AAEA,QAAA,IAAI,EAAE;IACR;IAEA,SAAS,SAAS,CAAC,KAAoB,EAAA;AACrC,QAAA,IAAI,QAAQ,IAAI,EAAE;YAChB;QACF;AAEA,QAAA,MAAM,eAAe,GAAG,QAAQ,EAAE;;AAGlC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC9D,KAAK,CAAC,cAAc,EAAE;YACtB,MAAM,MAAM,GAAgB,UAAU;YACtC,IAAI,IAAI,EAAE,EAAE;gBACV,IAAI,CAAC,MAAM,CAAC;YACd;iBAAO;gBACL,IAAI,CAAC,MAAM,CAAC;YACd;YACA;QACF;;QAGA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACzC;QACF;AAEA,QAAA,MAAM,UAAU,GACd,KAAK,CAAC,GAAG,KAAK,SAAS;YACvB,KAAK,CAAC,GAAG,KAAK,WAAW;YACzB,KAAK,CAAC,GAAG,KAAK,WAAW;AACzB,YAAA,KAAK,CAAC,GAAG,KAAK,YAAY;QAE5B,IAAI,CAAC,UAAU,EAAE;YACf;QACF;;AAGA,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,KAAK,KAAK;;AAG5C,QAAA,MAAM,gBAAgB,GAAG,SAAS,EAAE;QACpC,IAAI,UAAU,GAAG,KAAK;AAEtB,QAAA,IAAI,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YACtE,UAAU,GAAG,IAAI;QACnB;AAAO,aAAA,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACxE,UAAU,GAAG,IAAI;QACnB;AAAO,aAAA,IAAI,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC/C,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,KAAK,YAAY;AAC/C,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW;AAC7C,YAAA,UAAU,GAAG,CAAC,YAAY,IAAI,CAAC,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC;QACjE;AAAO,aAAA,IAAI,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC9C,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,KAAK,YAAY;AAC/C,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW;AAC7C,YAAA,UAAU,GAAG,CAAC,WAAW,IAAI,CAAC,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC;QACjE;AAEA,QAAA,IAAI,UAAU,IAAI,CAAC,IAAI,EAAE,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,UAAU,CAAC;QAClB;IACF;IAEA,SAAS,MAAM,CAAC,KAAiB,EAAA;;AAE/B,QAAA,MAAM,MAAM,GAAgB,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,OAAO;;QAGrE,IAAI,IAAI,EAAE,EAAE;YACV,IAAI,CAAC,MAAM,CAAC;QACd;aAAO;YACL,IAAI,CAAC,MAAM,CAAC;QACd;IACF;IAEA,SAAS,IAAI,CAAC,MAAA,GAAsB,SAAS,EAAA;;AAE3C,QAAA,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;;AAGtB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE;AACd,YAAA,qBAAqB,EAAE;QACzB;;AAGA,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE;IACnB;IAEA,SAAS,IAAI,CAAC,MAAA,GAAsB,SAAS,EAAA;AAC3C,QAAA,MAAM,cAAc,GAAG,OAAO,EAAE;QAChC,IAAI,CAAC,cAAc,EAAE;YACnB;QACF;;AAGA,QAAA,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC;AAEA,IAAA,SAAS,qBAAqB,GAAA;AAC5B,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI;QAE5B,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;QACzE;;AAGA,QAAA,MAAM,MAAM,GAAwB;AAClC,YAAA,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,OAAO,CAAC,aAAa;YACrC,gBAAgB;YAChB,QAAQ;YACR,OAAO;YACP,SAAS,EAAE,SAAS,EAAE;AACtB,YAAA,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,IAAI,EAAE;YACZ,KAAK,EAAE,KAAK,EAAE;AACd,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,kBAAkB;YAChC,OAAO,EAAE,CAAC,MAAmB,KAAK,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;AACzD,YAAA,eAAe,EAAE,cAAc,IAAI,IAAI,OAAO;AAC9C,YAAA,WAAW,EAAE,MAAM;YACnB,QAAQ,EAAE,QAAQ,IAAI;YACtB,SAAS,EAAE,SAAS,EAAE;YACtB,SAAS,EAAE,SAAS,EAAE;SACvB;QAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC;IAEA,SAAS,OAAO,CAAC,OAAyC,EAAA;AACxD,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IACnB;IAEA,SAAS,WAAW,CAAC,UAAmB,EAAA;AACtC,QAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AAExB,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE,EAAE;AACxB,YAAA,IAAI,EAAE;QACR;IACF;IAEA,SAAS,OAAO,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACtB;IAEA,SAAS,YAAY,CAAC,YAA8B,EAAA;AAClD,QAAA,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;IAC7B;IAEA,SAAS,SAAS,CAAC,SAAoB,EAAA;AACrC,QAAA,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACvB;IAEA,SAAS,UAAU,CAAC,UAAa,EAAA;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzB;IAEA,SAAS,YAAY,CAAC,YAAyC,EAAA;AAC7D,QAAA,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;IAC7B;AAEA;;;AAGG;IACH,SAAS,qBAAqB,CAAC,MAAe,EAAA;AAC5C,QAAA,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC;QAE9B,IAAI,MAAM,EAAE;;YAEV,WAAW,CAAC,KAAK,EAAE;YACnB;QACF;QAEA,IAAI,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;;AAE1C,YAAA,WAAW,CAAC,UAAU,CAAC,MAAK;;AAE1B,gBAAA,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAC5B,oBAAA,IAAI,EAAE;gBACR;YACF,CAAC,EAAE,EAAE,CAAC;QACR;IACF;IAEA,OAAO;AACL,QAAA,IAAI,EAAE,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC;AACvC,QAAA,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC;AACtD,QAAA,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,QAAA,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;AACnD,QAAA,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC;QAChD,IAAI;QACJ,UAAU;QACV,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,WAAW;QACX,OAAO;QACP,OAAO;QACP,YAAY;QACZ,SAAS;QACT,UAAU;QACV,YAAY;QACZ,qBAAqB;QACrB,IAAI;QACJ,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC;KACpC;AACpC,CAAC;AAGG,SAAU,sBAAsB,CACpC,OAA+B,EAAA;AAE/B,IAAA,OAAO,uBAAuB,CAAC,OAAO,CAAmC;AAC3E;;ACvlBO,MAAM,CAAC,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,CAAC,GAAG,eAAe,CAC5F,SAAS,EACT,CAAC,EAAgB,KAAI;AACnB,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,OAAO,GAAG,aAAa,EAAE;AAC/B,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjE,IAAA,MAAM,WAAW,GAAG,sBAAsB,EAAE;AAC5C,IAAA,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;;AAItE,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,SAAS,iFAAC;AAC3E,IAAA,YAAY,CAAC;AACX,QAAA,WAAW,EAAE,UAAU;AACxB,KAAA,CAAC;;;AAIF,IAAA,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,aAAa,CAAC;;AAGpD,IAAA,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;IACpC,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC;AAC9D,IAAA,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC;AACxC,IAAA,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;AACpE,IAAA,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;IACnE,YAAY,CAAC,OAAO,EAAE,6BAA6B,EAAE,OAAO,CAAC,YAAY,CAAC;IAC1E,YAAY,CAAC,OAAO,EAAE,6BAA6B,EAAE,OAAO,CAAC,eAAe,CAAC;IAC7E,YAAY,CAAC,OAAO,EAAE,+BAA+B,EAAE,OAAO,CAAC,cAAc,CAAC;IAC9E,YAAY,CAAC,OAAO,EAAE,gCAAgC,EAAE,OAAO,CAAC,eAAe,CAAC;;AAGhF,IAAA,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;AACjD,IAAA,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;AACjD,IAAA,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;;AAGvC,IAAA,MAAM,aAAa,GAAG,IAAI,OAAO,EAAe;;AAGhD,IAAA,SAAS,cAAc,GAAA;AACrB,QAAA,WAAW,EAAE,EAAE,qBAAqB,CAAC,IAAI,CAAC;IAC5C;AAEA,IAAA,SAAS,cAAc,GAAA;AACrB,QAAA,WAAW,EAAE,EAAE,qBAAqB,CAAC,KAAK,CAAC;IAC7C;IAEA,SAAS,SAAS,CAAC,KAAoB,EAAA;;;;AAIrC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB,aAAa,CAAC,UAAU,CAAC;YACzB;QACF;;;QAIA,IAAI,UAAU,EAAE,EAAE;YAChB;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE;QAC1C,IAAI,CAAC,SAAS,EAAE;YACd;QACF;QAEA,MAAM,KAAK,GAAG,CAAC,cAAc,EAAE,KAAK,IAAI,KAAK,MAAM,KAAK;;;;QAKxD,IAAI,WAAW,GAAG,KAAK;AAEvB,QAAA,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;;AAEjC,YAAA,WAAW,GAAG,KAAK,CAAC,GAAG,MAAM,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC;QAClE;AAAO,aAAA,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;;AAEvC,YAAA,WAAW,GAAG,KAAK,CAAC,GAAG,MAAM,KAAK,GAAG,WAAW,GAAG,YAAY,CAAC;QAClE;QAEA,IAAI,WAAW,EAAE;YACf,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,WAAW,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC;QACjC;IACF;IAEA,SAAS,aAAa,CAAC,MAAmB,EAAA;AACxC,QAAA,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1B,QAAA,UAAU,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC;IACrC;IAEA,OAAO;QACL,aAAa;QACb,aAAa;KACS;AAC1B,CAAC;;AC+CI,MAAM,CACX,2BAA2B,EAC3B,iBAAiB,EACjB,yBAAyB,EACzB,0BAA0B,EAC3B,GAAG,eAAe,CACjB,mBAAmB,EACnB,CAAI,EACF,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,EACnC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAmC,SAAS,CAAC,EACjE,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,EAC7C,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAC3B,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAC1B,SAAS,EAAE,UAAU,GACK,KAAI;AAC9B,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACjD,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACzC,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE;;AAGvC,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AAC9B,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;AACtC,IAAA,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC;AACxC,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AAC9B,IAAA,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAClC,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC;AAEhD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAuB,IAAI,8EAAC;AAClD,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,KAAK,2EAAC;AACzD,IAAA,MAAM,UAAU,GAAG,MAAM,CAAc,SAAS,iFAAC;;AAGjD,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,yFAAC;AACxC,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,yFAAC;AACxC,IAAA,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,kBAAkB,EAAE,IAAI,kBAAkB,EAAE,2FAAC;;;;IAKzF,MAAM,WAAW,GAAG,iBAAiB,CAAC;AACpC,QAAA,iBAAiB,EAAE,oBAAoB;AACvC,QAAA,KAAK,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC;AAC1B,QAAA,sBAAsB,EAAE,IAAI;AAC7B,KAAA,CAAC;;;;;;;IAQF,MAAM,CAAC,MAAK;AACV,QAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YACX,WAAW,CAAC,KAAK,EAAE;AACnB,YAAA,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,YAAA,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B;AACF,IAAA,CAAC,CAAC;;AAGF,IAAA,UAAU;AACR,UAAE,aAAa,CAAC,IAAI,CAAC,sBAAsB,EAAE;SAC5C,SAAS,CAAC,cAAc,IAAG;;AAE1B,QAAA,IAAI,cAAc,KAAK,OAAO,CAAC,aAAa,EAAE;YAC5C;QACF;;;;AAKA,QAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE;YAC1B;QACF;QAEA,IAAI,CAAC,OAAO,CAAC;AACf,IAAA,CAAC,CAAC;;AAGJ,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC;AAC7C,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC;AAC3C,IAAA,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC;;AAGvC,IAAA,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACnC,IAAA,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC;AAC5C,IAAA,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,kBAAkB,CAAC;AACrD,IAAA,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;;IAGjD,SAAS,OAAO,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,QAAQ,IAAI,EAAE;YAChB;QACF;QACA,MAAM,CAAC,KAAK,CAAC;IACf;IAEA,SAAS,MAAM,CAAC,KAAiB,EAAA;;AAE/B,QAAA,MAAM,MAAM,GAAgB,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,OAAO;;QAGrE,IAAI,IAAI,EAAE,EAAE;YACV,IAAI,CAAC,MAAM,CAAC;QACd;aAAO;YACL,IAAI,CAAC,MAAM,CAAC;QACd;IACF;IAEA,SAAS,IAAI,CAAC,MAAA,GAAsB,SAAS,EAAA;;AAE3C,QAAA,IAAI,QAAQ,IAAI,EAAE;YAChB;QACF;;AAGA,QAAA,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;;AAGtB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE;AACd,YAAA,qBAAqB,EAAE;QACzB;;AAGA,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE;IACnB;IAEA,SAAS,IAAI,CAAC,MAAA,GAAsB,SAAS,EAAA;;QAE3C,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YAC3B;QACF;;QAGA,WAAW,CAAC,KAAK,EAAE;;QAGnB,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;AAEA,IAAA,SAAS,qBAAqB,GAAA;AAC5B,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI;QAE5B,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;QACzE;;;;;;;AAQA,QAAA,MAAM,MAAM,GAAwB;AAClC,YAAA,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,OAAO,CAAC,aAAa;YACrC,QAAQ;YACR,SAAS,EAAE,SAAS,EAAE;YACtB,SAAS;YACT,MAAM,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,IAAI,EAAE;AACZ,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,YAAY,EAAE,KAAK;YACnB,gBAAgB;SACjB;QAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC;IAEA,SAAS,cAAc,CAAC,KAAY,EAAA;AAClC,QAAA,IAAI,KAAK,YAAY,aAAa,KAAK,KAAK,EAAE;YAC5C;QACF;QAEA,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS;AACnE,QAAA,MAAM,KAAK,GAAG,SAAS,KAAK,KAAK;AAEjC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,KAAK,YAAY;AAC/C,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW;AAE7C,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,EAAE;YACtD,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,UAAU,CAAC;QAClB;IACF;IAEA,SAAS,kBAAkB,CAAC,KAAY,EAAA;AACtC,QAAA,IAAI,KAAK,YAAY,YAAY,KAAK,KAAK,EAAE;YAC3C;QACF;;;AAIA,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE;YACjC;QACF;AAEA,QAAA,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;;QAE5B,WAAW,CAAC,KAAK,EAAE;QAEnB,IAAI,CAAC,OAAO,CAAC;IACf;IAEA,SAAS,cAAc,CAAC,KAAY,EAAA;AAClC,QAAA,IAAI,KAAK,YAAY,YAAY,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE;YAC5E;QACF;AAEA,QAAA,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;AAE7B,QAAA,MAAM,cAAc,GAAG,OAAO,EAAE;;AAGhC,QAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE;YAC9B;QACF;QAEA,MAAM,cAAc,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACtD,QAAA,MAAM,OAAO,GACX,CAAC,CAAC,cAAc;YAChB,WAAW,CAAC,KAAK,CAAC;AAChB,gBAAA,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC1D,gBAAA,UAAU,EAAE,cAAc,CAAC,qBAAqB,EAAE;AAClD,gBAAA,SAAS,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE;AAClD,aAAA,CAAC;QAEJ,IAAI,CAAC,OAAO,EAAE;;;AAGZ,YAAA,WAAW,CAAC,UAAU,CAAC,MAAK;AAC1B,gBAAA,IAAI,CAAC,oBAAoB,EAAE,EAAE;oBAC3B,IAAI,CAAC,OAAO,CAAC;gBACf;YACF,CAAC,EAAE,EAAE,CAAC;QACR;IACF;IAEA,SAAS,WAAW,CAAC,UAAmB,EAAA;AACtC,QAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AAExB,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE,EAAE;AACxB,YAAA,IAAI,EAAE;QACR;IACF;IAEA,SAAS,OAAO,CAAC,OAAyC,EAAA;AACxD,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IACnB;IAEA,SAAS,YAAY,CAAC,YAA8B,EAAA;AAClD,QAAA,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;IAC7B;IAEA,SAAS,SAAS,CAAC,SAAoB,EAAA;AACrC,QAAA,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACvB;IAEA,SAAS,OAAO,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACtB;IAEA,SAAS,YAAY,CAAC,YAAyC,EAAA;AAC7D,QAAA,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;IAC7B;IAEA,SAAS,KAAK,CAAC,MAAmB,EAAA;AAChC,QAAA,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC/E;IAEA,SAAS,qBAAqB,CAAC,MAAe,EAAA;AAC5C,QAAA,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC;;;QAI9B,IAAI,MAAM,EAAE;YACV,WAAW,CAAC,KAAK,EAAE;QACrB;IACF;IAEA,OAAO;AACL,QAAA,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC;AACtD,QAAA,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,QAAA,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;AACnD,QAAA,IAAI,EAAE,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC;AACvC,QAAA,IAAI,EAAE,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC;QACvC,IAAI;QACJ,UAAU;QACV,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,WAAW;QACX,OAAO;QACP,OAAO;QACP,YAAY;QACZ,SAAS;QACT,YAAY;QACZ,KAAK;QACL,qBAAqB;QACrB,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC;KACpC;AACpC,CAAC;;MChcU,iBAAiB,CAAA;AAV9B,IAAA,WAAA,GAAA;AAWE;;AAEG;QACM,IAAA,CAAA,IAAI,GAAG,KAAK,CAAuB,SAAS,4EACnD,KAAK,EAAE,mBAAmB,EAAA,CAC1B;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,2BAA2B;YAClC,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAEF;;;AAGG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAmB,aAAa,iFACxD,KAAK,EAAE,4BAA4B,EAAA,CACnC;AAEF;;;;AAIG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAA4B,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,CAAA,EAClD,KAAK,EAAE,yBAAyB;YAChC,SAAS,EAAE,YAAY,EAAA,CACvB;AAEF;;;;AAIG;AACM,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAwB,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,CAAA,EAC/C,KAAK,EAAE,uBAAuB;YAC9B,SAAS,EAAE,UAAU,EAAA,CACrB;AAEF;;;AAGG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAA8B,IAAI,iFAC1D,KAAK,EAAE,4BAA4B,EAAA,CACnC;AAEF;;AAEG;QACc,IAAA,CAAA,KAAK,GAAG,iBAAiB,CAAI;YAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,SAAA,CAAC;AA+BH,IAAA;AA7BC;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;AAEA;;AAEG;IACH,IAAI,CAAC,SAAsB,SAAS,EAAA;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1B;AAEA;;;AAGG;IACH,KAAK,CAAC,SAAsB,SAAS,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1B;+GA7FW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAPjB;AACT,YAAA,0BAA0B,EAAE;;;AAG5B,YAAA,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,2BAA2B,EAAE;AAChF,SAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,SAAS,EAAE;AACT,wBAAA,0BAA0B,EAAE;;;AAG5B,wBAAA,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,2BAA2B,EAAE;AAChF,qBAAA;AACF,iBAAA;;;ACAM,MAAM,CAAC,qBAAqB,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,CAAC,GAC1F,eAAe,CACb,aAAa,EACb,CAAC,EACC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EACxB,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,EAC5B,IAAI,GAAG,UAAU,GACA,KAAI;AACrB,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEtD,IAAA,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;;AAGvB,IAAA,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC;;AAGlC,IAAA,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACnC,IAAA,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC;AAC5C,IAAA,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,kBAAkB,CAAC;;IAGnD,SAAS,OAAO,CAAC,KAAiB,EAAA;;QAEhC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAErF,QAAA,MAAM,MAAM,GAAgB,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,OAAO;;;AAIrE,QAAA,IAAI,CAAC,OAAO,IAAI,aAAa,EAAE,EAAE;AAC/B,YAAA,UAAU,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC;QACrC;IACF;IAEA,SAAS,cAAc,CAAC,KAAY,EAAA;AAClC,QAAA,IAAI,KAAK,YAAY,aAAa,KAAK,KAAK,EAAE;YAC5C;QACF;;QAGA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAEzF,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;QAEA,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS;AACnE,QAAA,MAAM,KAAK,GAAG,SAAS,KAAK,KAAK;AAEjC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW;AAC7C,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,KAAK,YAAY;AAE/C,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,EAAE;YACtD,KAAK,CAAC,cAAc,EAAE;YAEtB,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;;AAExB,gBAAA,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;YAC3B;QACF;IACF;AAEA,IAAA,SAAS,kBAAkB,GAAA;QACzB,UAAU,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IACzD;AAEA,IAAA,OAAO,EAA6B;AACtC,CAAC;;AC9FL;;AAEG;MAMU,WAAW,CAAA;AAatB,IAAA,WAAA,GAAA;;AAXS,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,qBAAqB;YAC5B,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;AAGO,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAwB,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EACxD,KAAK,EAAE,0BAA0B;YACjC,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAGA,QAAA,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3E,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjD;+GAhBW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,+WAFX,CAAC,oBAAoB,EAAE,EAAE,2BAA2B,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEvD,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,SAAS,EAAE,CAAC,oBAAoB,EAAE,EAAE,2BAA2B,EAAE,CAAC;AACnE,iBAAA;;;ACmCM,MAAM,CACX,6BAA6B,EAC7B,mBAAmB,EACnB,2BAA2B,EAC3B,4BAA4B,EAC7B,GAAG,eAAe,CACjB,qBAAqB,EACrB,CAAC,EACC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EACjC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EACxB,eAAe,GACU,KAA8B;AACvD,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC;AACpC,IAAA,MAAM,aAAa,GAAG,OAAO,EAAW;;AAGxC,IAAA,WAAW,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;AAGjF,IAAA,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC;AAC7C,IAAA,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC;;IAG7C,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,EAAE,CAAC;AAE1C,IAAA,SAAS,MAAM,GAAA;QACb,IAAI,QAAQ,EAAE,EAAE;YACd;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AACxB,QAAA,eAAe,GAAG,WAAW,CAAC;AAC9B,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;IACjC;IAEA,OAAO;QACL,OAAO;AACP,QAAA,aAAa,EAAE,aAAa,CAAC,YAAY,EAAE;QAC3C,MAAM;KAC4B;AACtC,CAAC;;ACpFH;;AAEG;MAMU,mBAAmB,CAAA;AAkB9B,IAAA,WAAA,GAAA;;AAhBS,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,EACnD,KAAK,EAAE,4BAA4B;YACnC,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;QAGO,IAAA,CAAA,aAAa,GAAG,MAAM,CAAU;AACvC,YAAA,KAAK,EAAE,kCAAkC;AAC1C,SAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,6BAA6B;YACpC,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAGA,QAAA,mBAAmB,CAAC;YAClB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,eAAe,EAAE,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AACzD,SAAA,CAAC;QACF,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjD;+GAzBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,qbAFnB,CAAC,4BAA4B,EAAE,EAAE,2BAA2B,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAE/D,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,SAAS,EAAE,CAAC,4BAA4B,EAAE,EAAE,2BAA2B,EAAE,CAAC;AAC3E,iBAAA;;;ACsBM,MAAM,CACX,+BAA+B,EAC/B,qBAAqB,EACrB,6BAA6B,EAC7B,8BAA8B,EAC/B,GAAG,eAAe,CACjB,uBAAuB,EACvB,CAAC,EACC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAC5B,aAAa,GACc,KAAgC;AAC3D,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;AAChC,IAAA,MAAM,WAAW,GAAG,OAAO,EAAU;;AAGrC,IAAA,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;IAErC,SAAS,MAAM,CAAC,QAAgB,EAAA;AAC9B,QAAA,IAAI,KAAK,EAAE,KAAK,QAAQ,EAAE;YACxB;QACF;AAEA,QAAA,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnB,QAAA,aAAa,GAAG,QAAQ,CAAC;AACzB,QAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5B;IAEA,OAAO;QACL,KAAK;AACL,QAAA,WAAW,EAAE,WAAW,CAAC,YAAY,EAAE;QACvC,MAAM;KAC8B;AACxC,CAAC;;AC1CI,MAAM,CACX,0BAA0B,EAC1B,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EAC1B,GAAG,eAAe,CACjB,kBAAkB,EAClB,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EAAyB,KAA2B;AACpF,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,UAAU,GAAG,6BAA6B,EAAE;;AAGlD,IAAA,WAAW,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AAG9E,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,8EAAC;;AAGjE,IAAA,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC;AAC7C,IAAA,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC;;AAG7C,IAAA,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,MAAK;QAC9B,IAAI,QAAQ,EAAE,EAAE;YACd;QACF;AACA,QAAA,UAAU,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AAC/B,IAAA,CAAC,CAAC;IAEF,OAAO;QACL,OAAO;KACwB;AACnC,CAAC;;ACnDH;;;AAGG;MAKU,oBAAoB,CAAA;AAC/B,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;QAClC,MAAM,aAAa,GAAG,2BAA2B,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACrE,MAAM,UAAU,GAAG,wBAAwB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAE/D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAE9F,QAAA,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC;IAC/C;+GATW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,QAAQ,EAAE,sBAAsB;AACjC,iBAAA;;;ACPD;;AAEG;MAMU,qBAAqB,CAAA;AAWhC,IAAA,WAAA,GAAA;;QATS,IAAA,CAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,6EACxC,KAAK,EAAE,4BAA4B,EAAA,CACnC;;QAGO,IAAA,CAAA,WAAW,GAAG,MAAM,CAAS;AACpC,YAAA,KAAK,EAAE,kCAAkC;AAC1C,SAAA,CAAC;AAGA,QAAA,qBAAqB,CAAC;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,aAAa,EAAE,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AACrD,SAAA,CAAC;IACJ;+GAhBW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,kCAAA,EAAA,EAAA,SAAA,EAFrB,CAAC,8BAA8B,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAElC,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,SAAS,EAAE,CAAC,8BAA8B,EAAE,CAAC;AAC9C,iBAAA;;;ACRD;;AAEG;MAMU,gBAAgB,CAAA;AAY3B,IAAA,WAAA,GAAA;;QAVS,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,4EAC7B,KAAK,EAAE,uBAAuB,EAAA,CAC9B;;AAGO,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,0BAA0B;YACjC,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAGA,QAAA,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChE,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjD;+GAfW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,qWAFhB,CAAC,yBAAyB,EAAE,EAAE,2BAA2B,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAE5D,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,SAAS,EAAE,CAAC,yBAAyB,EAAE,EAAE,2BAA2B,EAAE,CAAC;AACxE,iBAAA;;;ACMD;;AAEG;MAMU,cAAc,CAAA;AAL3B,IAAA,WAAA,GAAA;AAME;;AAEG;QACc,IAAA,CAAA,MAAM,GAAG,gBAAgB,EAAE;AAE5C;;AAEG;QACM,IAAA,CAAA,IAAI,GAAG,KAAK,CAAuB,SAAS,4EACnD,KAAK,EAAE,gBAAgB,EAAA,CACvB;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,wBAAwB;YAC/B,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAChE,KAAK,EAAE,yBAAyB,GAChC;AAEF;;;;AAIG;QACM,IAAA,CAAA,MAAM,GAAG,KAAK,CAA4B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,CAAA,EACnE,KAAK,EAAE,sBAAsB;YAC7B,SAAS,EAAE,YAAY,EAAA,CACvB;AAEF;;;;AAIG;QACM,IAAA,CAAA,IAAI,GAAG,KAAK,CAAwB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,CAAA,EAC3D,KAAK,EAAE,oBAAoB;YAC3B,SAAS,EAAE,UAAU,EAAA,CACrB;AAEF;;;;AAIG;QACM,IAAA,CAAA,KAAK,GAAG,KAAK,CAA0B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EAC/D,KAAK,EAAE,qBAAqB;YAC5B,SAAS,EAAE,WAAW,EAAA,CACtB;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAA8B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAC3E,KAAK,EAAE,yBAAyB,GAChC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAmC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAC1F,KAAK,EAAE,8BAA8B,GACrC;AAEF;;;;;AAKG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAsB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACjE,KAAK,EAAE,wBAAwB;YAC/B,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;AAEG;QACM,IAAA,CAAA,OAAO,GAAG,KAAK,CAAI,SAAS,+EACnC,KAAK,EAAE,uBAAuB,EAAA,CAC9B;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAuB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAClE,KAAK,EAAE,4BAA4B,GACnC;AAEF;;;AAGG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAsB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EACnE,KAAK,EAAE,yBAAyB;YAChC,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;;AAGG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAsB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EACnE,KAAK,EAAE,yBAAyB;YAChC,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;AAEG;QACc,IAAA,CAAA,KAAK,GAAG,cAAc,CAAI;YACzC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAoB;YAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,SAAA,CAAC;AAyBH,IAAA;AAvBC;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;AAEA;;;;AAIG;AACH,IAAA,IAAI,CAAC,MAAoB,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1B;+GAjKW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFd,CAAC,uBAAuB,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAE3B,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,SAAS,EAAE,CAAC,uBAAuB,EAAE,CAAC;AACvC,iBAAA;;;AChBD;;AAEG;MAYU,OAAO,CAAA;AAclB,IAAA,WAAA,GAAA;QAbiB,IAAA,CAAA,MAAM,GAAG,gBAAgB,EAAE;AAE5C;;;AAGG;QACM,IAAA,CAAA,IAAI,GAAG,KAAK,CAAwB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,CAAA,EAC3D,KAAK,EAAE,aAAa;YACpB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;QAEe,IAAA,CAAA,KAAK,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAGnD,QAAA,mBAAmB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1D;;AAGA,IAAA,aAAa,CAAC,MAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;IAClC;+GArBW,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EARP;;AAET,YAAA,4BAA4B,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAChD,YAAA,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACpC,YAAA,qBAAqB,EAAE;AACvB,YAAA,gCAAgC,EAAE;AACnC,SAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEU,OAAO,EAAA,UAAA,EAAA,CAAA;kBAXnB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,SAAS,EAAE;;AAET,wBAAA,4BAA4B,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAChD,wBAAA,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACpC,wBAAA,qBAAqB,EAAE;AACvB,wBAAA,gCAAgC,EAAE;AACnC,qBAAA;AACF,iBAAA;;;ACtBD;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-primitives-menu.mjs","sources":["../../../../packages/ng-primitives/menu/src/config/menu-config.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger-state.ts","../../../../packages/ng-primitives/menu/src/menu/menu-state.ts","../../../../packages/ng-primitives/menu/src/submenu-trigger/submenu-trigger-state.ts","../../../../packages/ng-primitives/menu/src/submenu-trigger/submenu-trigger.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item-state.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item.ts","../../../../packages/ng-primitives/menu/src/menu-item-checkbox/menu-item-checkbox-state.ts","../../../../packages/ng-primitives/menu/src/menu-item-checkbox/menu-item-checkbox.ts","../../../../packages/ng-primitives/menu/src/menu-item-radio-group/menu-item-radio-group-state.ts","../../../../packages/ng-primitives/menu/src/menu-item-radio/menu-item-radio-state.ts","../../../../packages/ng-primitives/menu/src/menu-item-indicator/menu-item-indicator.ts","../../../../packages/ng-primitives/menu/src/menu-item-radio-group/menu-item-radio-group.ts","../../../../packages/ng-primitives/menu/src/menu-item-radio/menu-item-radio.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger.ts","../../../../packages/ng-primitives/menu/src/menu/menu.ts","../../../../packages/ng-primitives/menu/src/ng-primitives-menu.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core';\nimport { NgpFlip, NgpOffset, NgpShift } from 'ng-primitives/portal';\nimport type { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\n\nexport type NgpMenuTriggerType = 'click' | 'hover' | 'focus' | 'enter' | 'arrowkey';\n\nexport interface NgpMenuConfig {\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 4\n */\n offset: NgpOffset;\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'bottom-start'\n */\n placement: NgpMenuPlacement;\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * Can be a boolean to enable/disable, or an object with padding and fallbackPlacements options.\n * @default true\n */\n flip: NgpFlip;\n\n /**\n * Define the container element or selector in to which the menu should be attached.\n * @default 'body'\n */\n container: HTMLElement | string | null;\n\n /**\n * Defines how the menu behaves when the window is scrolled.\n * @default scroll\n */\n scrollBehavior: 'reposition' | 'block' | 'close';\n\n /**\n * Configure shift behavior to keep the menu in view.\n * Can be a boolean to enable/disable, or an object with padding and limiter options.\n * @default undefined (enabled by default in overlay)\n */\n shift: NgpShift;\n\n /**\n * Whether focus should wrap around when reaching the end of the menu.\n * @default true\n */\n wrap: boolean;\n\n /**\n * Cooldown duration in milliseconds.\n * When moving from one menu to another within this duration,\n * the showDelay is skipped for the new menu.\n * @default 0\n */\n cooldown: number;\n\n /**\n * Define which trigger types are enabled for the menu.\n * @default ['click']\n */\n triggers: NgpMenuTriggerType[];\n\n /**\n * Define the delay before the menu is displayed (hover/focus triggers).\n * @default 0\n */\n showDelay: number;\n\n /**\n * Define the delay before the menu is hidden (hover/focus triggers).\n * @default 0\n */\n hideDelay: number;\n}\n\nexport const defaultMenuConfig: NgpMenuConfig = {\n offset: 4,\n placement: 'bottom-start',\n flip: true,\n container: 'body',\n scrollBehavior: 'block',\n shift: undefined,\n wrap: true,\n cooldown: 0,\n triggers: ['click'],\n showDelay: 0,\n hideDelay: 0,\n};\n\nexport const NgpMenuConfigToken = new InjectionToken<NgpMenuConfig>('NgpMenuConfigToken');\n\n/**\n * Provide the default Menu configuration\n * @param config The Menu configuration\n * @returns The provider\n */\nexport function provideMenuConfig(config: Partial<NgpMenuConfig>): Provider[] {\n return [\n {\n provide: NgpMenuConfigToken,\n useValue: { ...defaultMenuConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Menu configuration\n * @returns The global Menu configuration\n */\nexport function injectMenuConfig(): NgpMenuConfig {\n return inject(NgpMenuConfigToken, { optional: true }) ?? defaultMenuConfig;\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport {\n computed,\n effect,\n inject,\n Injector,\n signal,\n Signal,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { createHoverBridge, injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\n NgpFlip,\n NgpOffset,\n NgpOverlay,\n NgpOverlayConfig,\n NgpOverlayContent,\n NgpShift,\n} from 'ng-primitives/portal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n listener,\n StateInjectionOptions,\n} from 'ng-primitives/state';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { NgpMenuTriggerType } from '../config/menu-config';\nimport { NgpMenuPlacement } from './menu-trigger';\n\nexport interface NgpMenuTriggerState<T = unknown> {\n /**\n * The menu template or component.\n */\n readonly menu: WritableSignal<NgpOverlayContent<any> | undefined>;\n /**\n * The computed placement of the menu.\n */\n readonly placement: WritableSignal<NgpMenuPlacement>;\n /**\n * Whether the menu is open.\n */\n readonly open: Signal<boolean>;\n /**\n * The offset of the menu.\n */\n readonly offset: WritableSignal<NgpOffset>;\n\n /**\n * The disabled state of the trigger.\n */\n readonly disabled: WritableSignal<boolean>;\n\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip: WritableSignal<NgpFlip>;\n\n /**\n * The container in which the menu should be attached.\n * @default document.body\n */\n readonly container: WritableSignal<HTMLElement | string | null>;\n\n /**\n * The context provided to the menu.\n */\n readonly context: WritableSignal<T>;\n\n /**\n * The focus origin that was used to open the menu.\n * @internal\n */\n readonly openOrigin: Signal<FocusOrigin>;\n\n /**\n * Set whether the trigger is disabled.\n * @param isDisabled - Whether the trigger is disabled\n */\n setDisabled(isDisabled: boolean): void;\n\n /**\n * Set whether the menu should flip when there is not enough space.\n * @param shouldFlip - Whether the menu should flip\n */\n setFlip(shouldFlip: NgpFlip): void;\n\n /**\n * Set the placement of the menu.\n * @param placement - The new placement\n */\n setPlacement(placement: NgpMenuPlacement): void;\n\n /**\n * Set the offset of the menu.\n * @param offset - The new offset\n */\n setOffset(offset: NgpOffset): void;\n\n /**\n * Set the context provided to the menu.\n * @param context - The new context\n */\n setContext(context: T): void;\n\n /**\n * Set the container in which the menu should be attached. Takes effect the\n * next time the menu is opened; it does not move a menu that is already open.\n * @param container - The new container\n */\n setContainer(container: HTMLElement | string | null): void;\n\n /**\n * Show the menu.\n * @param origin - The focus origin\n */\n show(origin?: FocusOrigin): void;\n /**\n * Hide the menu.\n * @param origin - The focus origin\n * @internal\n */\n hide(origin?: FocusOrigin): void;\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void;\n\n /**\n * Set the menu content.\n * @param menu - The new menu\n */\n setMenu(menu: NgpOverlayContent<any>): void;\n\n /**\n * Set whether the pointer is over the menu content.\n * @param isOver - Whether the pointer is over the content\n * @internal\n */\n setPointerOverContent(isOver: boolean): void;\n}\n\nexport interface NgpMenuTriggerProps<T = unknown> {\n /**\n * Whether the trigger is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * The menu template or component.\n */\n readonly menu?: Signal<NgpOverlayContent<T> | undefined>;\n /**\n * The placement of the menu.\n */\n readonly placement?: Signal<NgpMenuPlacement>;\n /**\n * The offset of the menu.\n */\n readonly offset?: Signal<NgpOffset>;\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip?: Signal<NgpFlip>;\n /**\n * The container in which the menu should be attached.\n */\n readonly container?: Signal<HTMLElement | string | null>;\n\n /**\n * Configure shift behavior to keep the menu in view.\n */\n readonly shift?: Signal<NgpShift>;\n\n /**\n * How the menu behaves when the window is scrolled.\n */\n readonly scrollBehavior?: Signal<'reposition' | 'block' | 'close'>;\n /**\n * Context to provide to the menu.\n */\n readonly context?: Signal<T>;\n /**\n * Cooldown duration in milliseconds.\n */\n readonly cooldown?: Signal<number>;\n\n /**\n * Which trigger types are enabled.\n */\n readonly triggers?: Signal<NgpMenuTriggerType[]>;\n\n /**\n * The delay before showing the menu.\n */\n readonly showDelay?: Signal<number>;\n\n /**\n * The delay before hiding the menu.\n */\n readonly hideDelay?: Signal<number>;\n}\n\nexport const [\n NgpMenuTriggerStateToken,\n ngpMenuTrigger,\n _injectMenuTriggerState,\n provideMenuTriggerState,\n] = createPrimitive(\n 'NgpMenuTrigger',\n <T>({\n disabled: _disabled = signal(false),\n menu: _menu = signal<NgpOverlayContent<T> | undefined>(undefined),\n placement: _placement = signal('bottom-start' as NgpMenuPlacement),\n offset: _offset = signal(4),\n flip: _flip = signal(true),\n shift: _shift = signal(undefined),\n context: _context = signal<T>(undefined as T),\n container: _container,\n scrollBehavior,\n cooldown,\n triggers = signal(['click'] as NgpMenuTriggerType[]),\n showDelay = signal(0),\n hideDelay = signal(0),\n }: NgpMenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n const directionality = inject(Directionality);\n const disposables = injectDisposables();\n\n // Controlled properties\n const menu = controlled(_menu);\n const disabled = controlled(_disabled);\n const placement = controlled(_placement);\n const flip = controlled(_flip);\n const shift = controlled(_shift);\n const offset = controlled(_offset);\n const context = controlled(_context);\n const container = controlled(_container, 'body');\n\n // Internal state\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\n const openOrigin = signal<FocusOrigin>('program');\n const closeOrigin = signal<FocusOrigin>('program');\n\n // Track whether pointer is over trigger or content (for hover triggers)\n const pointerOverTrigger = signal(false);\n const pointerOverContent = signal(false);\n const isPointerOverMenuArea = computed(() => pointerOverTrigger() || pointerOverContent());\n\n // Safe-polygon hover intent: while the pointer travels inside a corridor from\n // the trigger exit point toward the open menu, the menu stays open. Reversing\n // away closes it (requireForwardMovement).\n const hoverBridge = createHoverBridge({\n isPointerInAnchor: isPointerOverMenuArea,\n close: () => hide(),\n requireForwardMovement: true,\n });\n\n // Reset pointer tracking when menu closes\n effect(() => {\n const isOpen = open();\n\n // When menu closes, reset pointer tracking state and tear down any\n // in-progress hover bridge (and its global listener).\n if (!isOpen) {\n hoverBridge.clear();\n pointerOverTrigger.set(false);\n pointerOverContent.set(false);\n }\n });\n\n // Computed signal to determine if focus should be restored\n // Only restore if opened via keyboard OR closed via keyboard\n const shouldRestoreFocus = computed(\n () => openOrigin() === 'keyboard' || closeOrigin() === 'keyboard',\n );\n\n // Host bindings\n attrBinding(element, 'aria-haspopup', 'true');\n attrBinding(element, 'aria-expanded', open);\n dataBinding(element, 'data-open', open);\n dataBinding(element, 'data-placement', placement);\n\n // Event listeners - conditionally add based on enabled triggers\n listener(element, 'click', onClick);\n listener(element, 'pointerenter', onPointerEnter);\n listener(element, 'pointerleave', onPointerLeave);\n listener(element, 'focus', onFocus);\n listener(element, 'blur', onBlur);\n listener(element, 'keydown', onKeydown);\n\n // Methods\n function onClick(event: MouseEvent): void {\n if (disabled?.() || !triggers().includes('click')) {\n return;\n }\n toggle(event);\n }\n\n function onPointerEnter(event: PointerEvent): void {\n if (disabled?.() || !triggers().includes('hover')) {\n return;\n }\n\n // Don't trigger on touch events\n if (event.pointerType === 'touch') {\n return;\n }\n\n pointerOverTrigger.set(true);\n\n // If already open, cancel any pending hide - the pointer is back on the\n // trigger, so any in-progress hover bridge is no longer needed.\n if (open()) {\n hoverBridge.clear();\n overlay()?.cancelPendingClose();\n return;\n }\n\n show('mouse');\n }\n\n function onPointerLeave(event: PointerEvent): void {\n if (disabled?.() || !triggers().includes('hover')) {\n return;\n }\n\n // Don't trigger on touch events\n if (event.pointerType === 'touch') {\n return;\n }\n\n pointerOverTrigger.set(false);\n\n const currentOverlay = overlay();\n\n // If the overlay hasn't been created, there's nothing to cancel\n if (!currentOverlay) {\n return;\n }\n\n // Build a safe-polygon corridor from the pointer exit point toward the\n // open menu. While the pointer stays inside it the menu stays open, so\n // diagonal travel across the offset gap doesn't collapse the menu.\n const menuElement = open() ? currentOverlay.getElements()[0] : undefined;\n const started =\n !!menuElement &&\n hoverBridge.track({\n triggerRect: element.nativeElement.getBoundingClientRect(),\n targetRect: menuElement.getBoundingClientRect(),\n exitPoint: { x: event.clientX, y: event.clientY },\n });\n\n if (started) {\n currentOverlay.cancelPendingClose();\n return;\n }\n\n // Fall back to a small grace period when we can't build the corridor.\n disposables.setTimeout(() => {\n if (!isPointerOverMenuArea()) {\n hide();\n }\n }, 50);\n }\n\n function onFocus(): void {\n if (disabled?.() || !triggers().includes('focus')) {\n return;\n }\n\n // If already open, do nothing\n if (open()) {\n return;\n }\n\n show('keyboard');\n }\n\n function onBlur(event: FocusEvent): void {\n if (disabled?.() || !triggers().includes('focus')) {\n return;\n }\n\n // If the overlay hasn't been created, there's nothing to cancel\n if (!overlay()) {\n return;\n }\n\n // Check if focus is moving to an element inside the menu\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n if (relatedTarget) {\n const menuElements = overlay()?.getElements() ?? [];\n const isFocusInMenu = menuElements.some(el => el.contains(relatedTarget));\n if (isFocusInMenu) {\n return;\n }\n }\n\n hide();\n }\n\n function onKeydown(event: KeyboardEvent): void {\n if (disabled?.()) {\n return;\n }\n\n const enabledTriggers = triggers();\n\n // Handle Enter key - toggle behavior\n if (event.key === 'Enter' && enabledTriggers.includes('enter')) {\n event.preventDefault();\n const origin: FocusOrigin = 'keyboard';\n if (open()) {\n hide(origin);\n } else {\n show(origin);\n }\n return;\n }\n\n // Handle arrow keys - placement-aware\n if (!enabledTriggers.includes('arrowkey')) {\n return;\n }\n\n const isArrowKey =\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight';\n\n if (!isArrowKey) {\n return;\n }\n\n // Get RTL direction\n const isRtl = directionality.value === 'rtl';\n\n // Check if arrow direction matches placement\n const currentPlacement = placement();\n let shouldOpen = false;\n\n if (currentPlacement.startsWith('bottom') && event.key === 'ArrowDown') {\n shouldOpen = true;\n } else if (currentPlacement.startsWith('top') && event.key === 'ArrowUp') {\n shouldOpen = true;\n } else if (currentPlacement.startsWith('right')) {\n const isRightArrow = event.key === 'ArrowRight';\n const isLeftArrow = event.key === 'ArrowLeft';\n shouldOpen = (isRightArrow && !isRtl) || (isLeftArrow && isRtl);\n } else if (currentPlacement.startsWith('left')) {\n const isRightArrow = event.key === 'ArrowRight';\n const isLeftArrow = event.key === 'ArrowLeft';\n shouldOpen = (isLeftArrow && !isRtl) || (isRightArrow && isRtl);\n }\n\n if (shouldOpen && !open()) {\n event.preventDefault();\n show('keyboard');\n }\n }\n\n function toggle(event: MouseEvent): void {\n // determine the origin of the event, 0 is keyboard, 1 is mouse\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if the menu is open then hide it\n if (open()) {\n hide(origin);\n } else {\n show(origin);\n }\n }\n\n function show(origin: FocusOrigin = 'program'): void {\n // Store the origin used to open the menu\n openOrigin.set(origin);\n\n // Create the overlay if it doesn't exist yet\n if (!overlay()) {\n createOverlayInstance();\n }\n\n // Show the overlay\n overlay()?.show();\n }\n\n function hide(origin: FocusOrigin = 'program'): void {\n const currentOverlay = overlay();\n if (!currentOverlay) {\n return;\n }\n\n // Hide the overlay (this will trigger onClose callback which updates closeOrigin)\n currentOverlay.hide({ origin });\n }\n\n function createOverlayInstance(): void {\n const menuContent = menu?.();\n\n if (!menuContent) {\n throw new Error('Menu must be either a TemplateRef or a ComponentType');\n }\n\n // Create config for the overlay\n const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n viewContainerRef,\n injector,\n context,\n container: container(),\n placement: placement,\n offset: offset(),\n flip: flip(),\n shift: shift(),\n closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: shouldRestoreFocus,\n onClose: (origin: FocusOrigin) => closeOrigin.set(origin),\n scrollBehaviour: scrollBehavior?.() ?? 'block',\n overlayType: 'menu',\n cooldown: cooldown?.(),\n showDelay: showDelay(),\n hideDelay: hideDelay(),\n };\n\n overlay.set(createOverlay(config));\n }\n\n function setMenu(newMenu: NgpOverlayContent<T> | undefined): void {\n menu.set(newMenu);\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n\n if (isDisabled && open()) {\n hide();\n }\n }\n\n function setFlip(shouldFlip: NgpFlip): void {\n flip.set(shouldFlip);\n }\n\n function setPlacement(newPlacement: NgpMenuPlacement): void {\n placement.set(newPlacement);\n }\n\n function setOffset(newOffset: NgpOffset): void {\n offset.set(newOffset);\n }\n\n function setContext(newContext: T): void {\n context.set(newContext);\n }\n\n function setContainer(newContainer: HTMLElement | string | null): void {\n container.set(newContainer);\n }\n\n /**\n * Called by menu content when pointer enters/leaves\n * @internal\n */\n function setPointerOverContent(isOver: boolean): void {\n pointerOverContent.set(isOver);\n\n if (isOver) {\n // The pointer reached the menu - the hover bridge has served its purpose.\n hoverBridge.clear();\n return;\n }\n\n if (open() && triggers().includes('hover')) {\n // Use a small delay to allow pointer to move back to trigger\n disposables.setTimeout(() => {\n // Only hide if pointer is not over trigger or content\n if (!isPointerOverMenuArea()) {\n hide();\n }\n }, 50);\n }\n }\n\n return {\n menu: deprecatedSetter(menu, 'setMenu'),\n placement: deprecatedSetter(placement, 'setPlacement'),\n offset: deprecatedSetter(offset, 'setOffset'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n context: deprecatedSetter(context, 'setContext'),\n open,\n openOrigin,\n show,\n hide,\n toggle,\n setDisabled,\n setMenu,\n setFlip,\n setPlacement,\n setOffset,\n setContext,\n setContainer,\n setPointerOverContent,\n flip,\n container: deprecatedSetter(container, 'setContainer', setContainer),\n } satisfies NgpMenuTriggerState<T>;\n },\n);\n\nexport function injectMenuTriggerState<T>(\n options?: StateInjectionOptions,\n): Signal<NgpMenuTriggerState<T>> {\n return _injectMenuTriggerState(options) as Signal<NgpMenuTriggerState<T>>;\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { computed, inject } from '@angular/core';\nimport { ngpFocusTrap } from 'ng-primitives/focus-trap';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectOverlay } from 'ng-primitives/portal';\nimport { attrBinding, createPrimitive, listener, styleBinding } from 'ng-primitives/state';\nimport { Subject } from 'rxjs';\nimport { injectMenuTriggerState } from '../menu-trigger/menu-trigger-state';\n\nexport interface NgpMenuState {\n /**\n * Close the menu and any parent menus.\n * @param origin - The focus origin\n */\n closeAllMenus(origin: FocusOrigin): void;\n /**\n * Subject that emits when submenus should be closed.\n * @internal\n */\n readonly closeSubmenus: Subject<HTMLElement>;\n}\n\nexport interface NgpMenuProps {}\n\nexport const [NgpMenuStateToken, ngpMenu, injectMenuState, provideMenuState] = createPrimitive(\n 'NgpMenu',\n ({}: NgpMenuProps) => {\n const element = injectElementRef();\n const overlay = injectOverlay();\n const directionality = inject(Directionality, { optional: true });\n const menuTrigger = injectMenuTriggerState();\n const parentMenu = injectMenuState({ optional: true, skipSelf: true });\n\n // Always trap focus in menus per WAI-ARIA guidelines (Tab should not navigate within menus)\n // Pass the open origin so focus trap uses the correct origin for :focus-visible styling\n const openOrigin = computed(() => menuTrigger()?.openOrigin() ?? 'program');\n ngpFocusTrap({\n focusOrigin: openOrigin,\n });\n\n // Register this element as the overlay outlet so floating-ui positions it correctly,\n // even when this directive is on a nested child component rather than the portal root.\n overlay.registerOutletElement(element.nativeElement);\n\n // Host bindings\n attrBinding(element, 'role', 'menu');\n attrBinding(element, 'data-placement', overlay.finalPlacement);\n attrBinding(element, 'data-overlay', '');\n styleBinding(element, 'left.px', () => overlay.position().x ?? null);\n styleBinding(element, 'top.px', () => overlay.position().y ?? null);\n styleBinding(element, '--ngp-menu-trigger-width.px', overlay.triggerWidth);\n styleBinding(element, '--ngp-menu-transform-origin', overlay.transformOrigin);\n styleBinding(element, '--ngp-menu-available-width.px', overlay.availableWidth);\n styleBinding(element, '--ngp-menu-available-height.px', overlay.availableHeight);\n\n // Event listeners for pointer tracking and keyboard\n listener(element, 'pointerenter', onPointerEnter);\n listener(element, 'pointerleave', onPointerLeave);\n listener(element, 'keydown', onKeydown);\n\n // Subject to notify children to close submenus\n const closeSubmenus = new Subject<HTMLElement>();\n\n // Methods\n function onPointerEnter(): void {\n menuTrigger()?.setPointerOverContent(true);\n }\n\n function onPointerLeave(): void {\n menuTrigger()?.setPointerOverContent(false);\n }\n\n function onKeydown(event: KeyboardEvent): void {\n // Handle Escape key - close all menus and restore focus to root trigger\n // We handle this here instead of using overlay's closeOnEscape to ensure\n // proper focus restoration through the closeAllMenus chain\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n closeAllMenus('keyboard');\n return;\n }\n\n // Only handle arrow close keys for top-level menus (no parent submenu)\n // Submenus are handled by menu-item-state via NgpSubmenuTrigger\n if (parentMenu()) {\n return;\n }\n\n const placement = overlay.finalPlacement();\n if (!placement) {\n return;\n }\n\n const isRtl = (directionality?.value ?? 'ltr') === 'rtl';\n\n // Determine which arrow key should close based on placement\n // Note: Only Left/Right arrows close menus (for side-placed menus).\n // Up/Down arrows are reserved for roving focus navigation within the menu.\n let shouldClose = false;\n\n if (placement.startsWith('right')) {\n // Right-placed menu: Left Arrow closes (or Right Arrow in RTL)\n shouldClose = event.key === (isRtl ? 'ArrowRight' : 'ArrowLeft');\n } else if (placement.startsWith('left')) {\n // Left-placed menu: Right Arrow closes (or Left Arrow in RTL)\n shouldClose = event.key === (isRtl ? 'ArrowLeft' : 'ArrowRight');\n }\n\n if (shouldClose) {\n event.preventDefault();\n event.stopPropagation();\n menuTrigger()?.hide('keyboard');\n }\n }\n\n function closeAllMenus(origin: FocusOrigin): void {\n menuTrigger().hide(origin);\n parentMenu()?.closeAllMenus(origin);\n }\n\n return {\n closeAllMenus,\n closeSubmenus,\n } satisfies NgpMenuState;\n },\n);\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n computed,\n effect,\n inject,\n Injector,\n signal,\n Signal,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { createHoverBridge, injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\n NgpFlip,\n NgpOffset,\n NgpOverlay,\n NgpOverlayConfig,\n NgpOverlayContent,\n} from 'ng-primitives/portal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n listener,\n} from 'ng-primitives/state';\nimport { injectDisposables, safeTakeUntilDestroyed } from 'ng-primitives/utils';\nimport { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\nimport { injectMenuState } from '../menu/menu-state';\n\nexport interface NgpSubmenuTriggerState {\n /**\n * The menu template or component.\n */\n readonly menu: WritableSignal<NgpOverlayContent<any> | undefined>;\n\n /**\n * The computed placement of the menu.\n */\n readonly placement: WritableSignal<NgpMenuPlacement>;\n\n /**\n * Whether the menu is open.\n */\n readonly open: Signal<boolean>;\n\n /**\n * The offset of the menu.\n */\n readonly offset: WritableSignal<NgpOffset>;\n\n /**\n * The disabled state of the trigger.\n */\n readonly disabled: WritableSignal<boolean>;\n\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip: WritableSignal<NgpFlip>;\n\n /**\n * The container in which the menu should be attached.\n * @default document.body\n */\n readonly container: WritableSignal<HTMLElement | string | null>;\n\n /**\n * The focus origin used to open the submenu.\n * Used by the submenu's focus trap for :focus-visible styling.\n * @internal\n */\n readonly openOrigin: Signal<FocusOrigin>;\n\n /**\n * Show the menu.\n * @param origin - The focus origin (keyboard, mouse, touch, or program)\n */\n show(origin?: FocusOrigin): void;\n\n /**\n * Hide the menu.\n * @param origin - The focus origin\n */\n hide(origin?: FocusOrigin): void;\n\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void;\n\n /**\n * Set whether the trigger is disabled.\n * @param isDisabled - Whether the trigger is disabled\n */\n setDisabled(isDisabled: boolean): void;\n\n /**\n * Set the menu template or component.\n * @param menu - The menu content\n */\n setMenu(menu: NgpOverlayContent<any> | undefined): void;\n\n /**\n * Set the placement of the menu.\n * @param placement - The menu placement\n */\n setPlacement(placement: NgpMenuPlacement): void;\n\n /**\n * Set the offset of the menu.\n * @param offset - The menu offset\n */\n setOffset(offset: NgpOffset): void;\n\n /**\n * Set whether the menu should flip when there is not enough space.\n * @param shouldFlip - Whether the menu should flip\n */\n setFlip(shouldFlip: NgpFlip): void;\n\n /**\n * Set the container in which the menu should be attached. Takes effect the\n * next time the menu is opened; it does not move a menu that is already open.\n * @param container - The new container\n */\n setContainer(container: HTMLElement | string | null): void;\n\n /**\n * Focus the trigger element.\n * @param origin - The focus origin\n */\n focus(origin: FocusOrigin): void;\n\n /**\n * Set whether the pointer is over the submenu content. Entering the submenu\n * tears down the hover bridge (the pointer arrived safely).\n * @param isOver - Whether the pointer is over the content\n * @internal\n */\n setPointerOverContent(isOver: boolean): void;\n}\n\nexport interface NgpSubmenuTriggerProps<T = unknown> {\n /**\n * Whether the trigger is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * The menu template or component.\n */\n readonly menu?: Signal<NgpOverlayContent<T> | undefined>;\n /**\n * The placement of the menu.\n */\n readonly placement?: Signal<NgpMenuPlacement>;\n /**\n * The offset of the menu.\n */\n readonly offset?: Signal<NgpOffset>;\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip?: Signal<NgpFlip>;\n /**\n * The container in which the menu should be attached.\n */\n readonly container?: Signal<HTMLElement | string | null>;\n}\n\nexport const [\n NgpSubmenuTriggerStateToken,\n ngpSubmenuTrigger,\n injectSubmenuTriggerState,\n provideSubmenuTriggerState,\n] = createPrimitive(\n 'NgpSubmenuTrigger',\n <T>({\n disabled: _disabled = signal(false),\n menu: _menu = signal<NgpOverlayContent<T> | undefined>(undefined),\n placement: _placement = signal('right-start'),\n offset: _offset = signal(0),\n flip: _flip = signal(true),\n container: _container,\n }: NgpSubmenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n const parentMenu = injectMenuState({ optional: true });\n const focusMonitor = inject(FocusMonitor);\n const disposables = injectDisposables();\n\n // Controlled properties\n const menu = controlled(_menu);\n const disabled = controlled(_disabled);\n const placement = controlled(_placement);\n const flip = controlled(_flip);\n const offset = controlled(_offset);\n const container = controlled(_container, 'body');\n\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\n const openOrigin = signal<FocusOrigin>('program');\n\n // Track pointer presence for the safe-polygon hover bridge.\n const pointerOverTrigger = signal(false);\n const pointerOverContent = signal(false);\n const isPointerOverSubmenu = computed(() => pointerOverTrigger() || pointerOverContent());\n\n // Safe-polygon hover intent: while the pointer travels inside a corridor from\n // the submenu trigger toward the open submenu, sibling hover events are\n // ignored so the submenu doesn't collapse mid-traversal.\n const hoverBridge = createHoverBridge({\n isPointerInAnchor: isPointerOverSubmenu,\n close: () => hide('mouse'),\n requireForwardMovement: true,\n });\n\n // Tear down any hover bridge whenever the submenu closes - including close\n // paths that bypass hide() (e.g. an outside click on the overlay), so a\n // stale corridor can't linger or wrongly suppress the next sibling hover.\n // Also reset the pointer flags: destroying the panel under the pointer never\n // fires its pointerleave, and a stuck pointerOverContent would make every\n // future corridor treat the pointer as anchored and never close.\n effect(() => {\n if (!open()) {\n hoverBridge.clear();\n pointerOverTrigger.set(false);\n pointerOverContent.set(false);\n }\n });\n\n // Subscribe to parent menu's closeSubmenus\n parentMenu()\n ?.closeSubmenus.pipe(safeTakeUntilDestroyed())\n .subscribe(submenuElement => {\n // if the element is not the trigger, we want to close the menu\n if (submenuElement === element.nativeElement) {\n return;\n }\n\n // While the pointer is still inside the safe-polygon corridor toward this\n // submenu, ignore sibling hover-driven closes. The pointer-move listener\n // closes the submenu itself once the pointer actually leaves the corridor.\n if (hoverBridge.isActive()) {\n return;\n }\n\n hide('mouse');\n });\n\n // Host bindings\n attrBinding(element, 'aria-haspopup', 'true');\n attrBinding(element, 'aria-expanded', open);\n dataBinding(element, 'data-open', open);\n\n // Event listeners\n listener(element, 'click', onClick);\n listener(element, 'keydown', handleArrowKey);\n listener(element, 'pointerenter', showSubmenuOnHover);\n listener(element, 'pointerleave', onPointerLeave);\n\n // Methods\n function onClick(event: MouseEvent): void {\n if (disabled?.()) {\n return;\n }\n toggle(event);\n }\n\n function toggle(event: MouseEvent): void {\n // determine the origin of the event, 0 is keyboard, 1 is mouse\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if the menu is open then hide it\n if (open()) {\n hide(origin);\n } else {\n show(origin);\n }\n }\n\n function show(origin: FocusOrigin = 'program'): void {\n // If the trigger is disabled, don't show the menu\n if (disabled?.()) {\n return;\n }\n\n // Store the origin used to open the menu (for focus-visible styling in submenu)\n openOrigin.set(origin);\n\n // Create the overlay if it doesn't exist yet\n if (!overlay()) {\n createOverlayInstance();\n }\n\n // Show the overlay\n overlay()?.show();\n }\n\n function hide(origin: FocusOrigin = 'program'): void {\n // If the trigger is disabled or the menu is not open, do nothing\n if (disabled?.() || !open()) {\n return;\n }\n\n // The submenu is closing - any active hover bridge is no longer relevant.\n hoverBridge.clear();\n\n // Hide the overlay\n overlay()?.hide({ origin });\n }\n\n function createOverlayInstance(): void {\n const menuContent = menu?.();\n\n if (!menuContent) {\n throw new Error('Menu must be either a TemplateRef or a ComponentType');\n }\n\n // Create config for the overlay\n // Note: restoreFocus is false because submenus should never auto-restore focus.\n // When closeAllMenus is called, the ROOT menu's overlay handles focus restoration.\n // When closing just the submenu (Left Arrow), the caller handles focus explicitly.\n // closeOnEscape is false because we handle Escape in menu-state.ts to ensure\n // proper focus restoration through closeAllMenus.\n const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n injector,\n container: container(),\n placement,\n offset: offset(),\n flip: flip(),\n closeOnOutsideClick: true,\n closeOnEscape: false,\n restoreFocus: false,\n viewContainerRef,\n };\n\n overlay.set(createOverlay(config));\n }\n\n function handleArrowKey(event: Event): void {\n if (event instanceof KeyboardEvent === false) {\n return;\n }\n\n const direction = getComputedStyle(element.nativeElement).direction;\n const isRtl = direction === 'rtl';\n\n const isRightArrow = event.key === 'ArrowRight';\n const isLeftArrow = event.key === 'ArrowLeft';\n\n if ((isRightArrow && !isRtl) || (isLeftArrow && isRtl)) {\n event.preventDefault();\n show('keyboard');\n }\n }\n\n function showSubmenuOnHover(event: Event): void {\n if (event instanceof PointerEvent === false) {\n return;\n }\n\n // if this was triggered by a touch event, we don't want to show the submenu\n // as it will be shown by the click event - this prevents the submenu from being toggled\n if (event.pointerType === 'touch') {\n return;\n }\n\n pointerOverTrigger.set(true);\n // The pointer is back on the trigger - drop any in-progress hover bridge.\n hoverBridge.clear();\n\n show('mouse');\n }\n\n function onPointerLeave(event: Event): void {\n if (event instanceof PointerEvent === false || event.pointerType === 'touch') {\n return;\n }\n\n pointerOverTrigger.set(false);\n\n const currentOverlay = overlay();\n\n // Only build a corridor while the submenu is actually open.\n if (!open() || !currentOverlay) {\n return;\n }\n\n const submenuElement = currentOverlay.getElements()[0];\n const started =\n !!submenuElement &&\n hoverBridge.track({\n triggerRect: element.nativeElement.getBoundingClientRect(),\n targetRect: submenuElement.getBoundingClientRect(),\n exitPoint: { x: event.clientX, y: event.clientY },\n });\n\n if (!started) {\n // Defensive fallback: if the corridor can't be built, close after a short\n // grace period rather than leaving the submenu stuck open.\n disposables.setTimeout(() => {\n if (!isPointerOverSubmenu()) {\n hide('mouse');\n }\n }, 50);\n }\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n\n if (isDisabled && open()) {\n hide();\n }\n }\n\n function setMenu(newMenu: NgpOverlayContent<T> | undefined): void {\n menu.set(newMenu);\n }\n\n function setPlacement(newPlacement: NgpMenuPlacement): void {\n placement.set(newPlacement);\n }\n\n function setOffset(newOffset: NgpOffset): void {\n offset.set(newOffset);\n }\n\n function setFlip(shouldFlip: NgpFlip): void {\n flip.set(shouldFlip);\n }\n\n function setContainer(newContainer: HTMLElement | string | null): void {\n container.set(newContainer);\n }\n\n function focus(origin: FocusOrigin): void {\n focusMonitor.focusVia(element.nativeElement, origin, { preventScroll: true });\n }\n\n function setPointerOverContent(isOver: boolean): void {\n pointerOverContent.set(isOver);\n\n // Reaching the submenu content means the pointer arrived safely, so the\n // hover bridge corridor is no longer needed.\n if (isOver) {\n hoverBridge.clear();\n }\n }\n\n return {\n placement: deprecatedSetter(placement, 'setPlacement'),\n offset: deprecatedSetter(offset, 'setOffset'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n menu: deprecatedSetter(menu, 'setMenu'),\n flip: deprecatedSetter(flip, 'setFlip'),\n open,\n openOrigin,\n show,\n hide,\n toggle,\n setDisabled,\n setMenu,\n setFlip,\n setPlacement,\n setOffset,\n setContainer,\n focus,\n setPointerOverContent,\n container: deprecatedSetter(container, 'setContainer', setContainer),\n } satisfies NgpSubmenuTriggerState;\n },\n);\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport {\n coerceFlip,\n coerceOffset,\n NgpFlip,\n NgpFlipInput,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n} from 'ng-primitives/portal';\nimport { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\nimport { NgpMenuTriggerStateToken } from '../menu-trigger/menu-trigger-state';\nimport {\n NgpSubmenuTriggerStateToken,\n ngpSubmenuTrigger,\n provideSubmenuTriggerState,\n} from './submenu-trigger-state';\n\n@Directive({\n selector: '[ngpSubmenuTrigger]',\n exportAs: 'ngpSubmenuTrigger',\n providers: [\n // inherit: false - a nested submenu trigger lives inside the DI scope of its\n // parent submenu trigger (via the overlay's injector). Inheriting would reuse\n // the parent trigger's state signal and overwrite it with this trigger's\n // state, so the parent's menu would start talking to the wrong trigger.\n provideSubmenuTriggerState({ inherit: false }),\n // Also provide as NgpMenuTriggerStateToken so the submenu's menu-state\n // can find this trigger's openOrigin for :focus-visible styling\n { provide: NgpMenuTriggerStateToken, useExisting: NgpSubmenuTriggerStateToken },\n ],\n})\nexport class NgpSubmenuTrigger<T = unknown> {\n /**\n * Access the submenu template ref.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpSubmenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpSubmenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'right-start'\n */\n readonly placement = input<NgpMenuPlacement>('right-start', {\n alias: 'ngpSubmenuTriggerPlacement',\n });\n\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 0\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(0, {\n alias: 'ngpSubmenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * Can be a boolean to enable/disable, or an object with padding and fallbackPlacements options.\n * @default true\n */\n readonly flip = input<NgpFlip, NgpFlipInput>(true, {\n alias: 'ngpSubmenuTriggerFlip',\n transform: coerceFlip,\n });\n\n /**\n * Define the container in which the menu should be attached.\n * @default document.body\n */\n readonly container = input<HTMLElement | string | null>(null, {\n alias: 'ngpSubmenuTriggerContainer',\n });\n\n /**\n * Access the menu trigger state.\n */\n private readonly state = ngpSubmenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n container: this.container,\n });\n\n /**\n * Show the menu.\n */\n show(): void {\n this.state.show();\n }\n\n /**\n * Hide the menu.\n */\n hide(origin: FocusOrigin = 'program'): void {\n this.state.hide(origin);\n }\n\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void {\n this.state.toggle(event);\n }\n\n /**\n * Focus the trigger element.\n * @param origin - The focus origin\n */\n focus(origin: FocusOrigin = 'program'): void {\n this.state.focus(origin);\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { inject, Injector, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, listener } from 'ng-primitives/state';\nimport { injectMenuState } from '../menu/menu-state';\nimport { NgpSubmenuTrigger } from '../submenu-trigger/submenu-trigger';\n\nexport interface NgpMenuItemState {}\n\nexport interface NgpMenuItemProps {\n /**\n * Whether the menu item is disabled.\n */\n readonly disabled?: Signal<boolean>;\n\n /**\n * Whether the menu should close when this item is selected.\n * @default signal(true)\n */\n readonly closeOnSelect?: Signal<boolean>;\n\n /**\n * The ARIA role for the menu item.\n * @default 'menuitem'\n */\n readonly role?: string;\n}\n\nexport const [NgpMenuItemStateToken, ngpMenuItem, injectMenuItemState, provideMenuItemState] =\n createPrimitive(\n 'NgpMenuItem',\n ({\n disabled = signal(false),\n closeOnSelect = signal(true),\n role = 'menuitem',\n }: NgpMenuItemProps) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const parentMenu = injectMenuState({ optional: true });\n\n ngpButton({ disabled });\n\n // Host bindings\n attrBinding(element, 'role', role);\n\n // Event listeners\n listener(element, 'click', onClick);\n listener(element, 'keydown', handleArrowKey);\n listener(element, 'mouseenter', showSubmenuOnHover);\n\n // Methods\n function onClick(event: MouseEvent): void {\n // we do this here to avoid circular dependency issues\n const trigger = injector.get(NgpSubmenuTrigger, null, { self: true, optional: true });\n\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if this is a submenu trigger, we don't want to close the menu, we want to open the submenu\n // if closeOnSelect is false, we don't want to close the menu (e.g., checkbox/radio items)\n if (!trigger && closeOnSelect()) {\n parentMenu()?.closeAllMenus(origin);\n }\n }\n\n function handleArrowKey(event: Event): void {\n if (event instanceof KeyboardEvent === false) {\n return;\n }\n\n // if there is no parent menu, we don't want to do anything\n const trigger = injector.get(NgpSubmenuTrigger, null, { optional: true, skipSelf: true });\n\n if (!trigger) {\n return;\n }\n\n const direction = getComputedStyle(element.nativeElement).direction;\n const isRtl = direction === 'rtl';\n\n const isLeftArrow = event.key === 'ArrowLeft';\n const isRightArrow = event.key === 'ArrowRight';\n\n if ((isLeftArrow && !isRtl) || (isRightArrow && isRtl)) {\n event.preventDefault();\n\n if (trigger) {\n trigger.hide('keyboard');\n // Explicitly focus the submenu trigger since submenus have restoreFocus: false\n trigger.focus('keyboard');\n }\n }\n }\n\n function showSubmenuOnHover(): void {\n parentMenu()?.closeSubmenus.next(element.nativeElement);\n }\n\n return {} satisfies NgpMenuItemState;\n },\n );\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\nimport { ngpMenuItem, provideMenuItemState } from './menu-item-state';\n\n/**\n * The `NgpMenuItem` directive represents a menu item.\n */\n@Directive({\n selector: '[ngpMenuItem]',\n exportAs: 'ngpMenuItem',\n providers: [provideMenuItemState(), provideRovingFocusItemState()],\n})\nexport class NgpMenuItem {\n /** Whether the menu item is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemDisabled',\n transform: booleanAttribute,\n });\n\n /** Whether the menu should close when this item is selected */\n readonly closeOnSelect = input<boolean, BooleanInput>(true, {\n alias: 'ngpMenuItemCloseOnSelect',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItem({ disabled: this.disabled, closeOnSelect: this.closeOnSelect });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { Signal, signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n emitter,\n listener,\n} from 'ng-primitives/state';\nimport { Observable } from 'rxjs';\nimport { ngpMenuItem } from '../menu-item/menu-item-state';\n\nexport interface NgpMenuItemCheckboxState {\n /**\n * Whether the checkbox is checked.\n */\n readonly checked: Signal<boolean>;\n\n /**\n * Emits when the checked state changes.\n */\n readonly checkedChange: Observable<boolean>;\n\n /**\n * Toggle the checkbox value.\n */\n toggle(): void;\n}\n\nexport interface NgpMenuItemCheckboxProps {\n /**\n * Whether the checkbox is checked.\n */\n readonly checked?: Signal<boolean>;\n\n /**\n * Whether the checkbox is disabled.\n */\n readonly disabled?: Signal<boolean>;\n\n /**\n * Callback fired when the checked state changes.\n */\n readonly onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const [\n NgpMenuItemCheckboxStateToken,\n ngpMenuItemCheckbox,\n injectMenuItemCheckboxState,\n provideMenuItemCheckboxState,\n] = createPrimitive(\n 'NgpMenuItemCheckbox',\n ({\n checked: _checked = signal(false),\n disabled = signal(false),\n onCheckedChange,\n }: NgpMenuItemCheckboxProps): NgpMenuItemCheckboxState => {\n const element = injectElementRef();\n const checked = controlled(_checked);\n const checkedChange = emitter<boolean>();\n\n // Use base menu item behavior but don't close on select\n ngpMenuItem({ disabled, closeOnSelect: signal(false), role: 'menuitemcheckbox' });\n\n // Host bindings\n attrBinding(element, 'aria-checked', checked);\n dataBinding(element, 'data-checked', checked);\n\n // Toggle on click\n listener(element, 'click', () => toggle());\n\n function toggle(): void {\n if (disabled()) {\n return;\n }\n\n const nextChecked = !checked();\n checked.set(nextChecked);\n onCheckedChange?.(nextChecked);\n checkedChange.emit(nextChecked);\n }\n\n return {\n checked,\n checkedChange: checkedChange.asObservable(),\n toggle,\n } satisfies NgpMenuItemCheckboxState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, output } from '@angular/core';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\nimport { ngpMenuItemCheckbox, provideMenuItemCheckboxState } from './menu-item-checkbox-state';\n\n/**\n * The `NgpMenuItemCheckbox` directive represents a menu item that can be toggled on and off.\n */\n@Directive({\n selector: '[ngpMenuItemCheckbox]',\n exportAs: 'ngpMenuItemCheckbox',\n providers: [provideMenuItemCheckboxState(), provideRovingFocusItemState()],\n})\nexport class NgpMenuItemCheckbox {\n /** Whether the checkbox is checked */\n readonly checked = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemCheckboxChecked',\n transform: booleanAttribute,\n });\n\n /** Event emitted when the checked state changes */\n readonly checkedChange = output<boolean>({\n alias: 'ngpMenuItemCheckboxCheckedChange',\n });\n\n /** Whether the menu item checkbox is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemCheckboxDisabled',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItemCheckbox({\n checked: this.checked,\n disabled: this.disabled,\n onCheckedChange: value => this.checkedChange.emit(value),\n });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { Signal, signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, controlled, createPrimitive, emitter } from 'ng-primitives/state';\nimport { Observable } from 'rxjs';\n\nexport interface NgpMenuItemRadioGroupState {\n /**\n * The current value of the radio group.\n */\n readonly value: Signal<string | null>;\n\n /**\n * Emits when the value changes.\n */\n readonly valueChange: Observable<string>;\n\n /**\n * Select a radio item by value.\n */\n select(value: string): void;\n}\n\nexport interface NgpMenuItemRadioGroupProps {\n /**\n * The current value of the radio group.\n */\n readonly value?: Signal<string | null>;\n\n /**\n * Callback fired when the value changes.\n */\n readonly onValueChange?: (value: string) => void;\n}\n\nexport const [\n NgpMenuItemRadioGroupStateToken,\n ngpMenuItemRadioGroup,\n injectMenuItemRadioGroupState,\n provideMenuItemRadioGroupState,\n] = createPrimitive(\n 'NgpMenuItemRadioGroup',\n ({\n value: _value = signal(null),\n onValueChange,\n }: NgpMenuItemRadioGroupProps): NgpMenuItemRadioGroupState => {\n const element = injectElementRef();\n const value = controlled(_value);\n const valueChange = emitter<string>();\n\n // Host bindings\n attrBinding(element, 'role', 'group');\n\n function select(newValue: string): void {\n if (value() === newValue) {\n return;\n }\n\n value.set(newValue);\n onValueChange?.(newValue);\n valueChange.emit(newValue);\n }\n\n return {\n value,\n valueChange: valueChange.asObservable(),\n select,\n } satisfies NgpMenuItemRadioGroupState;\n },\n);\n","import { computed, Signal, signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectMenuItemRadioGroupState } from '../menu-item-radio-group/menu-item-radio-group-state';\nimport { ngpMenuItem } from '../menu-item/menu-item-state';\n\nexport interface NgpMenuItemRadioState {\n /**\n * Whether the radio item is checked.\n */\n readonly checked: Signal<boolean>;\n}\n\nexport interface NgpMenuItemRadioProps {\n /**\n * The value this radio item represents.\n */\n readonly value: Signal<string>;\n\n /**\n * Whether the radio item is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpMenuItemRadioStateToken,\n ngpMenuItemRadio,\n injectMenuItemRadioState,\n provideMenuItemRadioState,\n] = createPrimitive(\n 'NgpMenuItemRadio',\n ({ value, disabled = signal(false) }: NgpMenuItemRadioProps): NgpMenuItemRadioState => {\n const element = injectElementRef();\n const radioGroup = injectMenuItemRadioGroupState();\n\n // Use base menu item behavior but don't close on select\n ngpMenuItem({ disabled, closeOnSelect: signal(false), role: 'menuitemradio' });\n\n // Computed checked state\n const checked = computed(() => radioGroup()?.value() === value());\n\n // Host bindings\n attrBinding(element, 'aria-checked', checked);\n dataBinding(element, 'data-checked', checked);\n\n // Select on click\n listener(element, 'click', () => {\n if (disabled()) {\n return;\n }\n radioGroup()?.select(value());\n });\n\n return {\n checked,\n } satisfies NgpMenuItemRadioState;\n },\n);\n","import { computed, Directive } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { dataBinding } from 'ng-primitives/state';\nimport { injectMenuItemCheckboxState } from '../menu-item-checkbox/menu-item-checkbox-state';\nimport { injectMenuItemRadioState } from '../menu-item-radio/menu-item-radio-state';\n\n/**\n * The `NgpMenuItemIndicator` directive renders inside a checkbox or radio menu item\n * and exposes `data-checked` based on the parent item's checked state.\n */\n@Directive({\n selector: '[ngpMenuItemIndicator]',\n exportAs: 'ngpMenuItemIndicator',\n})\nexport class NgpMenuItemIndicator {\n constructor() {\n const element = injectElementRef();\n const checkboxState = injectMenuItemCheckboxState({ optional: true });\n const radioState = injectMenuItemRadioState({ optional: true });\n\n const checked = computed(() => checkboxState()?.checked() ?? radioState()?.checked() ?? false);\n\n dataBinding(element, 'data-checked', checked);\n }\n}\n","import { Directive, input, output } from '@angular/core';\nimport {\n ngpMenuItemRadioGroup,\n provideMenuItemRadioGroupState,\n} from './menu-item-radio-group-state';\n\n/**\n * The `NgpMenuItemRadioGroup` directive represents a group of radio menu items.\n */\n@Directive({\n selector: '[ngpMenuItemRadioGroup]',\n exportAs: 'ngpMenuItemRadioGroup',\n providers: [provideMenuItemRadioGroupState()],\n})\nexport class NgpMenuItemRadioGroup {\n /** The current value of the radio group */\n readonly value = input<string | null>(null, {\n alias: 'ngpMenuItemRadioGroupValue',\n });\n\n /** Event emitted when the value changes */\n readonly valueChange = output<string>({\n alias: 'ngpMenuItemRadioGroupValueChange',\n });\n\n constructor() {\n ngpMenuItemRadioGroup({\n value: this.value,\n onValueChange: value => this.valueChange.emit(value),\n });\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\nimport { ngpMenuItemRadio, provideMenuItemRadioState } from './menu-item-radio-state';\n\n/**\n * The `NgpMenuItemRadio` directive represents a radio menu item within a radio group.\n */\n@Directive({\n selector: '[ngpMenuItemRadio]',\n exportAs: 'ngpMenuItemRadio',\n providers: [provideMenuItemRadioState(), provideRovingFocusItemState()],\n})\nexport class NgpMenuItemRadio {\n /** The value this radio item represents */\n readonly value = input.required<string>({\n alias: 'ngpMenuItemRadioValue',\n });\n\n /** Whether the radio item is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemRadioDisabled',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItemRadio({ value: this.value, disabled: this.disabled });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, numberAttribute, Signal } from '@angular/core';\nimport {\n coerceFlip,\n coerceOffset,\n coerceShift,\n NgpFlip,\n NgpFlipInput,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n NgpShift,\n NgpShiftInput,\n} from 'ng-primitives/portal';\nimport { injectMenuConfig, NgpMenuTriggerType } from '../config/menu-config';\nimport { ngpMenuTrigger, provideMenuTriggerState } from './menu-trigger-state';\n\n/**\n * The `NgpMenuTrigger` directive allows you to turn an element into a menu trigger.\n */\n@Directive({\n selector: '[ngpMenuTrigger]',\n exportAs: 'ngpMenuTrigger',\n providers: [provideMenuTriggerState()],\n})\nexport class NgpMenuTrigger<T = unknown> {\n /**\n * Access the global menu configuration.\n */\n private readonly config = injectMenuConfig();\n\n /**\n * Access the menu template ref or ComponentType.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpMenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'bottom-start'\n */\n readonly placement = input<NgpMenuPlacement>(this.config.placement, {\n alias: 'ngpMenuTriggerPlacement',\n });\n\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 4\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(this.config.offset, {\n alias: 'ngpMenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * Can be a boolean to enable/disable, or an object with padding and fallbackPlacements options.\n * @default true\n */\n readonly flip = input<NgpFlip, NgpFlipInput>(this.config.flip, {\n alias: 'ngpMenuTriggerFlip',\n transform: coerceFlip,\n });\n\n /**\n * Configure shift behavior to keep the menu in view.\n * Can be a boolean to enable/disable, or an object with padding and limiter options.\n * @default undefined (enabled by default in overlay)\n */\n readonly shift = input<NgpShift, NgpShiftInput>(this.config.shift, {\n alias: 'ngpMenuTriggerShift',\n transform: coerceShift,\n });\n\n /**\n * Define the container in which the menu should be attached.\n * @default document.body\n */\n readonly container = input<HTMLElement | string | null>(this.config.container, {\n alias: 'ngpMenuTriggerContainer',\n });\n\n /**\n * Defines how the menu behaves when the window is scrolled.\n * @default 'block'\n */\n readonly scrollBehavior = input<'reposition' | 'block' | 'close'>(this.config.scrollBehavior, {\n alias: 'ngpMenuTriggerScrollBehavior',\n });\n\n /**\n * Define the cooldown duration in milliseconds.\n * When moving from one menu to another within this duration,\n * the showDelay is skipped for the new menu.\n * @default 0\n */\n readonly cooldown = input<number, NumberInput>(this.config.cooldown, {\n alias: 'ngpMenuTriggerCooldown',\n transform: numberAttribute,\n });\n\n /**\n * Provide context to the menu. This can be used to pass data to the menu content.\n */\n readonly context = input<T>(undefined, {\n alias: 'ngpMenuTriggerContext',\n });\n\n /**\n * Define which trigger types are enabled for the menu.\n * @default ['click']\n */\n readonly triggers = input<NgpMenuTriggerType[]>(this.config.triggers, {\n alias: 'ngpMenuTriggerOpenTriggers',\n });\n\n /**\n * Define the delay before the menu is displayed (hover/focus triggers).\n * @default 0\n */\n readonly showDelay = input<number, NumberInput>(this.config.showDelay, {\n alias: 'ngpMenuTriggerShowDelay',\n transform: numberAttribute,\n });\n\n /**\n * Define the delay before the menu is hidden (hover/focus triggers).\n * @default 0\n */\n readonly hideDelay = input<number, NumberInput>(this.config.hideDelay, {\n alias: 'ngpMenuTriggerHideDelay',\n transform: numberAttribute,\n });\n\n /**\n * The menu trigger state.\n */\n private readonly state = ngpMenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n shift: this.shift,\n container: this.container,\n scrollBehavior: this.scrollBehavior,\n cooldown: this.cooldown,\n context: this.context as Signal<T>,\n triggers: this.triggers,\n showDelay: this.showDelay,\n hideDelay: this.hideDelay,\n });\n\n /**\n * Show the menu.\n */\n show(): void {\n this.state.show();\n }\n\n /**\n * Hide the menu.\n * @param origin - The focus origin\n * @internal\n */\n hide(origin?: FocusOrigin): void {\n this.state.hide(origin);\n }\n\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void {\n this.state.toggle(event);\n }\n}\n\nexport type NgpMenuPlacement =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-start'\n | 'top-end'\n | 'right-start'\n | 'right-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'left-start'\n | 'left-end';\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { provideFocusTrapState } from 'ng-primitives/focus-trap';\nimport { provideControlContainerIsolation } from 'ng-primitives/portal';\nimport { ngpRovingFocusGroup, provideRovingFocusGroupState } from 'ng-primitives/roving-focus';\nimport { injectMenuConfig } from '../config/menu-config';\nimport { ngpMenu, provideMenuState } from './menu-state';\n\n/**\n * The `NgpMenu` is a container for menu items.\n */\n@Directive({\n selector: '[ngpMenu]',\n exportAs: 'ngpMenu',\n providers: [\n // ensure we don't inherit the focus group from the parent menu if there is one\n provideRovingFocusGroupState({ inherit: false }),\n provideMenuState({ inherit: false }),\n provideFocusTrapState(),\n provideControlContainerIsolation(),\n ],\n})\nexport class NgpMenu {\n private readonly config = injectMenuConfig();\n\n /**\n * Whether focus should wrap around when reaching the end of the menu.\n * @default true\n */\n readonly wrap = input<boolean, BooleanInput>(this.config.wrap, {\n alias: 'ngpMenuWrap',\n transform: booleanAttribute,\n });\n\n private readonly state = ngpMenu({ wrap: this.wrap });\n\n constructor() {\n ngpRovingFocusGroup({ inherit: false, wrap: this.wrap });\n }\n\n /** @internal Close the menu and any parent menus */\n closeAllMenus(origin: FocusOrigin): void {\n this.state.closeAllMenus(origin);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "ng-primitives",
3
3
  "description": "Angular Primitives is a low-level headless UI component library with a focus on accessibility, customization, and developer experience. ",
4
4
  "license": "Apache-2.0",
5
- "version": "0.123.0",
5
+ "version": "0.123.1",
6
6
  "keywords": [
7
7
  "angular",
8
8
  "primitives",