ng-primitives 0.99.2 → 0.99.3

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.
@@ -40,7 +40,7 @@ function injectMenuConfig() {
40
40
  return inject(NgpMenuConfigToken, { optional: true }) ?? defaultMenuConfig;
41
41
  }
42
42
 
43
- const [NgpMenuTriggerStateToken, ngpMenuTrigger, injectMenuTriggerState, provideMenuTriggerState,] = createPrimitive('NgpMenuTrigger', ({ disabled: _disabled = signal(false), menu: _menu = signal(undefined), placement: _placement = signal('bottom-start'), offset: _offset = signal(4), flip: _flip = signal(true), context: _context = signal(undefined), container, scrollBehavior, }) => {
43
+ const [NgpMenuTriggerStateToken, ngpMenuTrigger, _injectMenuTriggerState, provideMenuTriggerState,] = createPrimitive('NgpMenuTrigger', ({ disabled: _disabled = signal(false), menu: _menu = signal(undefined), placement: _placement = signal('bottom-start'), offset: _offset = signal(4), flip: _flip = signal(true), context: _context = signal(undefined), container, scrollBehavior, }) => {
44
44
  const element = injectElementRef();
45
45
  const injector = inject(Injector);
46
46
  const viewContainerRef = inject(ViewContainerRef);
@@ -158,6 +158,9 @@ const [NgpMenuTriggerStateToken, ngpMenuTrigger, injectMenuTriggerState, provide
158
158
  flip,
159
159
  };
160
160
  });
161
+ function injectMenuTriggerState() {
162
+ return _injectMenuTriggerState();
163
+ }
161
164
 
162
165
  const [NgpMenuStateToken, ngpMenu, injectMenuState, provideMenuState] = createPrimitive('NgpMenu', ({}) => {
163
166
  const element = injectElementRef();
@@ -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-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 { NgpOffset, NgpShift } from 'ng-primitives/portal';\nimport type { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\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 * @default true\n */\n flip: boolean;\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';\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\nexport const defaultMenuConfig: NgpMenuConfig = {\n offset: 4,\n placement: 'bottom-start',\n flip: true,\n container: 'body',\n scrollBehavior: 'block',\n shift: undefined,\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 {\n computed,\n inject,\n Injector,\n signal,\n Signal,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\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} from 'ng-primitives/state';\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<boolean>;\n\n /**\n * The context provided to the menu.\n */\n readonly context?: WritableSignal<T | undefined>;\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: boolean): 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 | undefined): void;\n\n /**\n * Show the menu.\n */\n show(): 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\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<boolean>;\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 * 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 * How the menu behaves when the window is scrolled.\n */\n readonly scrollBehavior?: Signal<'reposition' | 'block'>;\n /**\n * Context to provide to the menu.\n */\n readonly context?: Signal<T | undefined>;\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 context: _context = signal<T | undefined>(undefined),\n container,\n scrollBehavior,\n }: NgpMenuTriggerProps<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 placement = controlled(_placement);\n const flip = controlled(_flip);\n const offset = controlled(_offset);\n const context = controlled(_context);\n\n // Internal state\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\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\n listener(element, 'click', onClick);\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();\n }\n }\n\n function show(): void {\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 (!open()) {\n return;\n }\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 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 closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: true,\n scrollBehaviour: scrollBehavior?.() ?? 'block',\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: boolean): 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 | undefined): void {\n context.set(newContext);\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 show,\n hide,\n toggle,\n setDisabled,\n setMenu,\n setFlip,\n setPlacement,\n setOffset,\n setContext,\n flip,\n } satisfies NgpMenuTriggerState<T>;\n },\n);\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectOverlay } from 'ng-primitives/portal';\nimport { attrBinding, createPrimitive, 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 menuTrigger = injectMenuTriggerState();\n const parentMenu = injectMenuState({ optional: true, skipSelf: true });\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\n // Subject to notify children to close submenus\n const closeSubmenus = new Subject<HTMLElement>();\n\n // Methods\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 { 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 { injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\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 { 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<boolean>;\n\n /**\n * Show the menu.\n */\n show(): 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: 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<boolean>;\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 }: NgpSubmenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n const parentMenu = injectMenuState({ optional: true });\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\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\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 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\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();\n }\n }\n\n function show(): void {\n // If the trigger is disabled, don't show the menu\n if (disabled?.()) {\n return;\n }\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 // 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 const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n injector,\n placement,\n offset: offset(),\n flip: flip(),\n closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: true,\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();\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 show();\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: boolean): void {\n flip.set(shouldFlip);\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 show,\n hide,\n toggle,\n setDisabled,\n setMenu,\n setFlip,\n setPlacement,\n setOffset,\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 { coerceOffset, NgpOffset, NgpOffsetInput, NgpOverlayContent } from 'ng-primitives/portal';\nimport { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\nimport { ngpSubmenuTrigger, provideSubmenuTriggerState } from './submenu-trigger-state';\n\n@Directive({\n selector: '[ngpSubmenuTrigger]',\n exportAs: 'ngpSubmenuTrigger',\n providers: [provideSubmenuTriggerState()],\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 * @default true\n */\n readonly flip = input<boolean, BooleanInput>(true, {\n alias: 'ngpSubmenuTriggerFlip',\n transform: booleanAttribute,\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 });\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","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\nexport const [NgpMenuItemStateToken, ngpMenuItem, injectMenuItemState, provideMenuItemState] =\n createPrimitive('NgpMenuItem', ({ disabled = signal(false) }: 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', 'menuitem');\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 (!trigger) {\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 }\n }\n }\n\n function showSubmenuOnHover(): void {\n parentMenu()?.closeSubmenus.next(element.nativeElement);\n }\n\n return {} satisfies NgpMenuItemState;\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 constructor() {\n ngpMenuItem({ disabled: this.disabled });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport {\n coerceOffset,\n coerceShift,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n NgpShift,\n NgpShiftInput,\n} from 'ng-primitives/portal';\nimport { injectMenuConfig } 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 * @default true\n */\n readonly flip = input<boolean, BooleanInput>(this.config.flip, {\n alias: 'ngpMenuTriggerFlip',\n transform: booleanAttribute,\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'>(this.config.scrollBehavior, {\n alias: 'ngpMenuTriggerScrollBehavior',\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 * 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 context: this.context,\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 { Directive } from '@angular/core';\nimport { ngpFocusTrap, provideFocusTrapState } from 'ng-primitives/focus-trap';\nimport { ngpRovingFocusGroup, provideRovingFocusGroupState } from 'ng-primitives/roving-focus';\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 ],\n})\nexport class NgpMenu {\n private readonly state = ngpMenu({});\n\n constructor() {\n ngpRovingFocusGroup({ inherit: false });\n ngpFocusTrap({});\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":";;;;;;;;;;;;AA4CO,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;CACjB;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;;ACmFO,MAAM,CACX,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,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,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAgB,SAAS,CAAC,EACpD,SAAS,EACT,cAAc,GACS,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;;AAGjD,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;AAClC,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC;;AAGpC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAuB,IAAI,mDAAC;AAClD,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,KAAK,gDAAC;;AAGzD,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;;IAGnC,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;AACL,YAAA,IAAI,EAAE;QACR;IACF;AAEA,IAAA,SAAS,IAAI,GAAA;;AAEX,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;;AAE3C,QAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YACX;QACF;;QAGA,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;;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,IAAI;AACxB,YAAA,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,IAAI,EAAE;AACZ,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,eAAe,EAAE,cAAc,IAAI,IAAI,OAAO;SAC/C;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,UAAyB,EAAA;AAC3C,QAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzB;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,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,WAAW;QACX,OAAO;QACP,OAAO;QACP,YAAY;QACZ,SAAS;QACT,UAAU;QACV,IAAI;KAC4B;AACpC,CAAC;;ACnSI,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,WAAW,GAAG,sBAAsB,EAAE;AAC5C,IAAA,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAGtE,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;;AAG7E,IAAA,MAAM,aAAa,GAAG,IAAI,OAAO,EAAe;;IAGhD,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;;ACgFI,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,GACA,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;;AAGtD,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;AAElC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAuB,IAAI,mDAAC;AAClD,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,KAAK,gDAAC;;AAGzD,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;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;;IAGrD,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;AACL,YAAA,IAAI,EAAE;QACR;IACF;AAEA,IAAA,SAAS,IAAI,GAAA;;AAEX,QAAA,IAAI,QAAQ,IAAI,EAAE;YAChB;QACF;;AAGA,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,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;;AAGA,QAAA,MAAM,MAAM,GAAwB;AAClC,YAAA,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,OAAO,CAAC,aAAa;YACrC,QAAQ;YACR,SAAS;YACT,MAAM,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,IAAI,EAAE;AACZ,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;YAClB,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;AACtB,YAAA,IAAI,EAAE;QACR;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,IAAI,EAAE;IACR;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,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,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,WAAW;QACX,OAAO;QACP,OAAO;QACP,YAAY;QACZ,SAAS;KACuB;AACpC,CAAC;;MCvTU,iBAAiB,CAAA;AAL9B,IAAA,WAAA,GAAA;AAME;;AAEG;QACM,IAAA,CAAA,IAAI,GAAG,KAAK,CAAuB,SAAS,wCACnD,KAAK,EAAE,mBAAmB,EAAA,CAAA,GAAA,CAD2B;AACrD,gBAAA,KAAK,EAAE,mBAAmB;AAC3B,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EACpD,KAAK,EAAE,2BAA2B;gBAClC,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAF2B;AACtD,gBAAA,KAAK,EAAE,2BAA2B;AAClC,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAmB,aAAa,6CACxD,KAAK,EAAE,4BAA4B,EAAA,CAAA,GAAA,CADuB;AAC1D,gBAAA,KAAK,EAAE,4BAA4B;AACpC,aAAA,CAAA,CAAA,CAAC;AAEF;;;;AAIG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAA4B,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAClD,KAAK,EAAE,yBAAyB;gBAChC,SAAS,EAAE,YAAY,EAAA,CAAA,GAAA,CAF6B;AACpD,gBAAA,KAAK,EAAE,yBAAyB;AAChC,gBAAA,SAAS,EAAE,YAAY;AACxB,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAwB,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAC/C,KAAK,EAAE,uBAAuB;gBAC9B,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAFsB;AACjD,gBAAA,KAAK,EAAE,uBAAuB;AAC9B,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;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;AAChB,SAAA,CAAC;AAuBH,IAAA;AArBC;;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;8GA3EW,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,QAAA,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,EAAA,SAAA,EAFjB,CAAC,0BAA0B,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAE9B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,SAAS,EAAE,CAAC,0BAA0B,EAAE,CAAC;AAC1C,iBAAA;;;ACMM,MAAM,CAAC,qBAAqB,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,CAAC,GAC1F,eAAe,CAAC,aAAa,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EAAoB,KAAI;AAChF,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,UAAU,CAAC;;AAGxC,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;;QAGrE,IAAI,CAAC,OAAO,EAAE;AACZ,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;YAC1B;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;;ACzEH;;AAEG;MAMU,WAAW,CAAA;AAOtB,IAAA,WAAA,GAAA;;AALS,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EACpD,KAAK,EAAE,qBAAqB;gBAC5B,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAF2B;AACtD,gBAAA,KAAK,EAAE,qBAAqB;AAC5B,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;QAGA,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjD;8GAVW,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,QAAA,EAAA,IAAA,EAAA,WAAW,oNAFX,CAAC,oBAAoB,EAAE,EAAE,2BAA2B,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEvD,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;;;ACGD;;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,wCACnD,KAAK,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAD8B;AACrD,gBAAA,KAAK,EAAE,gBAAgB;AACxB,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EACpD,KAAK,EAAE,wBAAwB;gBAC/B,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAF2B;AACtD,gBAAA,KAAK,EAAE,wBAAwB;AAC/B,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAChE,KAAK,EAAE,yBAAyB,EAAA,CAAA,GAAA,CADkC;AAClE,gBAAA,KAAK,EAAE,yBAAyB;AACjC,aAAA,CAAA,CAAA,CAAC;AAEF;;;;AAIG;QACM,IAAA,CAAA,MAAM,GAAG,KAAK,CAA4B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EACnE,KAAK,EAAE,sBAAsB;gBAC7B,SAAS,EAAE,YAAY,EAAA,CAAA,GAAA,CAF8C;AACrE,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,SAAS,EAAE,YAAY;AACxB,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;QACM,IAAA,CAAA,IAAI,GAAG,KAAK,CAAwB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAC3D,KAAK,EAAE,oBAAoB;gBAC3B,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAFkC;AAC7D,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;AAEF;;;;AAIG;QACM,IAAA,CAAA,KAAK,GAAG,KAAK,CAA0B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAC/D,KAAK,EAAE,qBAAqB;gBAC5B,SAAS,EAAE,WAAW,EAAA,CAAA,GAAA,CAF2C;AACjE,gBAAA,KAAK,EAAE,qBAAqB;AAC5B,gBAAA,SAAS,EAAE,WAAW;AACvB,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAA8B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAC3E,KAAK,EAAE,yBAAyB,EAAA,CAAA,GAAA,CAD6C;AAC7E,gBAAA,KAAK,EAAE,yBAAyB;AACjC,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAyB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAChF,KAAK,EAAE,8BAA8B,EAAA,CAAA,GAAA,CAD6C;AAClF,gBAAA,KAAK,EAAE,8BAA8B;AACtC,aAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;QACM,IAAA,CAAA,OAAO,GAAG,KAAK,CAAI,SAAS,2CACnC,KAAK,EAAE,uBAAuB,EAAA,CAAA,GAAA,CADO;AACrC,gBAAA,KAAK,EAAE,uBAAuB;AAC/B,aAAA,CAAA,CAAA,CAAC;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;AACf,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,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;8GAvHW,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,QAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,uBAAA,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;;2FAE3B,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;MAWU,OAAO,CAAA;AAGlB,IAAA,WAAA,GAAA;AAFiB,QAAA,IAAA,CAAA,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;AAGlC,QAAA,mBAAmB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvC,YAAY,CAAC,EAAE,CAAC;IAClB;;AAGA,IAAA,aAAa,CAAC,MAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;IAClC;8GAXW,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,QAAA,EAAA,IAAA,EAAA,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAPP;;AAET,YAAA,4BAA4B,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAChD,YAAA,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACpC,YAAA,qBAAqB,EAAE;AACxB,SAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEU,OAAO,EAAA,UAAA,EAAA,CAAA;kBAVnB,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;AACxB,qBAAA;AACF,iBAAA;;;AClBD;;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-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 { NgpOffset, NgpShift } from 'ng-primitives/portal';\nimport type { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\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 * @default true\n */\n flip: boolean;\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';\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\nexport const defaultMenuConfig: NgpMenuConfig = {\n offset: 4,\n placement: 'bottom-start',\n flip: true,\n container: 'body',\n scrollBehavior: 'block',\n shift: undefined,\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 {\n computed,\n inject,\n Injector,\n signal,\n Signal,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\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} from 'ng-primitives/state';\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<boolean>;\n\n /**\n * The context provided to the menu.\n */\n readonly context?: WritableSignal<T>;\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: boolean): 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 * Show the menu.\n */\n show(): 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\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<boolean>;\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 * 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 * How the menu behaves when the window is scrolled.\n */\n readonly scrollBehavior?: Signal<'reposition' | 'block'>;\n /**\n * Context to provide to the menu.\n */\n readonly context?: Signal<T>;\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 context: _context = signal<T>(undefined as T),\n container,\n scrollBehavior,\n }: NgpMenuTriggerProps<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 placement = controlled(_placement);\n const flip = controlled(_flip);\n const offset = controlled(_offset);\n const context = controlled(_context);\n\n // Internal state\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\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\n listener(element, 'click', onClick);\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();\n }\n }\n\n function show(): void {\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 (!open()) {\n return;\n }\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 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 closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: true,\n scrollBehaviour: scrollBehavior?.() ?? 'block',\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: boolean): 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 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 show,\n hide,\n toggle,\n setDisabled,\n setMenu,\n setFlip,\n setPlacement,\n setOffset,\n setContext,\n flip,\n } satisfies NgpMenuTriggerState<T>;\n },\n);\n\nexport function injectMenuTriggerState<T>(): Signal<NgpMenuTriggerState<T>> {\n return _injectMenuTriggerState() as Signal<NgpMenuTriggerState<T>>;\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectOverlay } from 'ng-primitives/portal';\nimport { attrBinding, createPrimitive, 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 menuTrigger = injectMenuTriggerState();\n const parentMenu = injectMenuState({ optional: true, skipSelf: true });\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\n // Subject to notify children to close submenus\n const closeSubmenus = new Subject<HTMLElement>();\n\n // Methods\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 { 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 { injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\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 { 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<boolean>;\n\n /**\n * Show the menu.\n */\n show(): 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: 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<boolean>;\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 }: NgpSubmenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n const parentMenu = injectMenuState({ optional: true });\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\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\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 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\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();\n }\n }\n\n function show(): void {\n // If the trigger is disabled, don't show the menu\n if (disabled?.()) {\n return;\n }\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 // 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 const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n injector,\n placement,\n offset: offset(),\n flip: flip(),\n closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: true,\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();\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 show();\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: boolean): void {\n flip.set(shouldFlip);\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 show,\n hide,\n toggle,\n setDisabled,\n setMenu,\n setFlip,\n setPlacement,\n setOffset,\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 { coerceOffset, NgpOffset, NgpOffsetInput, NgpOverlayContent } from 'ng-primitives/portal';\nimport { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\nimport { ngpSubmenuTrigger, provideSubmenuTriggerState } from './submenu-trigger-state';\n\n@Directive({\n selector: '[ngpSubmenuTrigger]',\n exportAs: 'ngpSubmenuTrigger',\n providers: [provideSubmenuTriggerState()],\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 * @default true\n */\n readonly flip = input<boolean, BooleanInput>(true, {\n alias: 'ngpSubmenuTriggerFlip',\n transform: booleanAttribute,\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 });\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","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\nexport const [NgpMenuItemStateToken, ngpMenuItem, injectMenuItemState, provideMenuItemState] =\n createPrimitive('NgpMenuItem', ({ disabled = signal(false) }: 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', 'menuitem');\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 (!trigger) {\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 }\n }\n }\n\n function showSubmenuOnHover(): void {\n parentMenu()?.closeSubmenus.next(element.nativeElement);\n }\n\n return {} satisfies NgpMenuItemState;\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 constructor() {\n ngpMenuItem({ disabled: this.disabled });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, Signal } from '@angular/core';\nimport {\n coerceOffset,\n coerceShift,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n NgpShift,\n NgpShiftInput,\n} from 'ng-primitives/portal';\nimport { injectMenuConfig } 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 * @default true\n */\n readonly flip = input<boolean, BooleanInput>(this.config.flip, {\n alias: 'ngpMenuTriggerFlip',\n transform: booleanAttribute,\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'>(this.config.scrollBehavior, {\n alias: 'ngpMenuTriggerScrollBehavior',\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 * 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 context: this.context as Signal<T>,\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 { Directive } from '@angular/core';\nimport { ngpFocusTrap, provideFocusTrapState } from 'ng-primitives/focus-trap';\nimport { ngpRovingFocusGroup, provideRovingFocusGroupState } from 'ng-primitives/roving-focus';\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 ],\n})\nexport class NgpMenu {\n private readonly state = ngpMenu({});\n\n constructor() {\n ngpRovingFocusGroup({ inherit: false });\n ngpFocusTrap({});\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/menu/index.d.ts CHANGED
@@ -188,7 +188,7 @@ interface NgpMenuTriggerState<T = unknown> {
188
188
  /**
189
189
  * The context provided to the menu.
190
190
  */
191
- readonly context?: WritableSignal<T | undefined>;
191
+ readonly context?: WritableSignal<T>;
192
192
  /**
193
193
  * Set whether the trigger is disabled.
194
194
  * @param isDisabled - Whether the trigger is disabled
@@ -213,7 +213,7 @@ interface NgpMenuTriggerState<T = unknown> {
213
213
  * Set the context provided to the menu.
214
214
  * @param context - The new context
215
215
  */
216
- setContext(context: T | undefined): void;
216
+ setContext(context: T): void;
217
217
  /**
218
218
  * Show the menu.
219
219
  */
@@ -273,92 +273,12 @@ interface NgpMenuTriggerProps<T = unknown> {
273
273
  /**
274
274
  * Context to provide to the menu.
275
275
  */
276
- readonly context?: Signal<T | undefined>;
276
+ readonly context?: Signal<T>;
277
277
  }
278
- declare const injectMenuTriggerState: {
279
- (): Signal<{
280
- menu: WritableSignal<NgpOverlayContent<unknown> | undefined>;
281
- placement: WritableSignal<NgpMenuPlacement>;
282
- offset: WritableSignal<NgpOffset>;
283
- disabled: WritableSignal<boolean>;
284
- context: WritableSignal<unknown>;
285
- open: Signal<boolean>;
286
- show: () => void;
287
- hide: (origin?: FocusOrigin) => void;
288
- toggle: (event: MouseEvent) => void;
289
- setDisabled: (isDisabled: boolean) => void;
290
- setMenu: (newMenu: NgpOverlayContent<unknown> | undefined) => void;
291
- setFlip: (shouldFlip: boolean) => void;
292
- setPlacement: (newPlacement: NgpMenuPlacement) => void;
293
- setOffset: (newOffset: NgpOffset) => void;
294
- setContext: (newContext: unknown) => void;
295
- flip: WritableSignal<boolean>;
296
- }>;
297
- (options: {
298
- hoisted: true;
299
- optional?: boolean;
300
- skipSelf?: boolean;
301
- }): Signal<{
302
- menu: WritableSignal<NgpOverlayContent<unknown> | undefined>;
303
- placement: WritableSignal<NgpMenuPlacement>;
304
- offset: WritableSignal<NgpOffset>;
305
- disabled: WritableSignal<boolean>;
306
- context: WritableSignal<unknown>;
307
- open: Signal<boolean>;
308
- show: () => void;
309
- hide: (origin?: FocusOrigin) => void;
310
- toggle: (event: MouseEvent) => void;
311
- setDisabled: (isDisabled: boolean) => void;
312
- setMenu: (newMenu: NgpOverlayContent<unknown> | undefined) => void;
313
- setFlip: (shouldFlip: boolean) => void;
314
- setPlacement: (newPlacement: NgpMenuPlacement) => void;
315
- setOffset: (newOffset: NgpOffset) => void;
316
- setContext: (newContext: unknown) => void;
317
- flip: WritableSignal<boolean>;
318
- } | null>;
319
- (options?: {
320
- hoisted?: boolean;
321
- optional?: boolean;
322
- skipSelf?: boolean;
323
- }): Signal<{
324
- menu: WritableSignal<NgpOverlayContent<unknown> | undefined>;
325
- placement: WritableSignal<NgpMenuPlacement>;
326
- offset: WritableSignal<NgpOffset>;
327
- disabled: WritableSignal<boolean>;
328
- context: WritableSignal<unknown>;
329
- open: Signal<boolean>;
330
- show: () => void;
331
- hide: (origin?: FocusOrigin) => void;
332
- toggle: (event: MouseEvent) => void;
333
- setDisabled: (isDisabled: boolean) => void;
334
- setMenu: (newMenu: NgpOverlayContent<unknown> | undefined) => void;
335
- setFlip: (shouldFlip: boolean) => void;
336
- setPlacement: (newPlacement: NgpMenuPlacement) => void;
337
- setOffset: (newOffset: NgpOffset) => void;
338
- setContext: (newContext: unknown) => void;
339
- flip: WritableSignal<boolean>;
340
- }> | Signal<{
341
- menu: WritableSignal<NgpOverlayContent<unknown> | undefined>;
342
- placement: WritableSignal<NgpMenuPlacement>;
343
- offset: WritableSignal<NgpOffset>;
344
- disabled: WritableSignal<boolean>;
345
- context: WritableSignal<unknown>;
346
- open: Signal<boolean>;
347
- show: () => void;
348
- hide: (origin?: FocusOrigin) => void;
349
- toggle: (event: MouseEvent) => void;
350
- setDisabled: (isDisabled: boolean) => void;
351
- setMenu: (newMenu: NgpOverlayContent<unknown> | undefined) => void;
352
- setFlip: (shouldFlip: boolean) => void;
353
- setPlacement: (newPlacement: NgpMenuPlacement) => void;
354
- setOffset: (newOffset: NgpOffset) => void;
355
- setContext: (newContext: unknown) => void;
356
- flip: WritableSignal<boolean>;
357
- } | null>;
358
- };
359
278
  declare const provideMenuTriggerState: (opts?: {
360
279
  inherit?: boolean;
361
280
  }) => _angular_core.FactoryProvider;
281
+ declare function injectMenuTriggerState<T>(): Signal<NgpMenuTriggerState<T>>;
362
282
 
363
283
  /**
364
284
  * The `NgpMenu` is a container for menu items.
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.99.2",
5
+ "version": "0.99.3",
6
6
  "keywords": [
7
7
  "angular",
8
8
  "primitives",