@cocoar/ui-menu 0.1.0-beta.79 → 0.1.0-beta.82

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.
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, inject, input, Directive, ChangeDetectionStrategy, Component, output, HostListener, TemplateRef, DestroyRef, ChangeDetectorRef, Injector, ViewChild, ContentChild, booleanAttribute, signal, computed, effect } from '@angular/core';
3
- import { COAR_OVERLAY_REF, COAR_MENU_PARENT, CoarOverlayService, Overlay, coarHoverMenuPreset } from '@cocoar/ui-overlay';
3
+ import { COAR_OVERLAY_REF, COAR_MENU_PARENT, createOverlayBuilder, coarHoverMenuPreset } from '@cocoar/ui-overlay';
4
4
  import { CoarIconComponent } from '@cocoar/ui-components';
5
5
  import * as i1 from '@angular/common';
6
6
  import { CommonModule } from '@angular/common';
@@ -300,7 +300,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
300
300
  * - Provide root cascade for sibling submenu tracking
301
301
  * - No logic - just a styled wrapper
302
302
  *
303
- * Use standalone for inline menus, or as content in CoarOverlayService for context menus/flyouts.
303
+ * Use standalone for inline menus, or as overlay content (via `createOverlayBuilder`) for context menus/flyouts.
304
304
  *
305
305
  * @example
306
306
  * ```html
@@ -622,12 +622,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
622
622
  * ```
623
623
  */
624
624
  class CoarSubmenuItemComponent {
625
- overlayService = inject(CoarOverlayService);
626
625
  destroyRef = inject(DestroyRef);
627
626
  cdr = inject(ChangeDetectorRef);
628
627
  cascade = inject(COAR_MENU_CASCADE);
629
628
  parentOverlay = inject(COAR_MENU_PARENT, { optional: true });
630
629
  injector = inject(Injector);
630
+ overlayBuilder = createOverlayBuilder();
631
631
  // Ensures the submenu TemplateRef is instantiated with a parent injector that contains
632
632
  // the correct cascade instance for this submenu item. Without this, TemplateRefs declared
633
633
  // outside of this component can end up resolving menu context from the declaration site.
@@ -769,12 +769,11 @@ class CoarSubmenuItemComponent {
769
769
  this.submenuTemplateToRender();
770
770
  // Determine what data to pass to the submenu template
771
771
  const submenuContextData = this.submenuData();
772
- // All overlays use hoverTree preset for proper tree tracking
773
- const spec = Overlay.define((b) => {
774
- b.content((c) => c.fromTemplate(this.overlaySubmenuTemplate));
775
- b.anchor({ kind: 'element', element: anchorElement });
776
- b.position({ placement: ['right-start', 'left-start'], offset: -4, flip: true, shift: true });
777
- }, coarHoverMenuPreset);
772
+ const opener = this.overlayBuilder
773
+ .withPreset(coarHoverMenuPreset)
774
+ .anchor({ kind: 'element', element: anchorElement })
775
+ .position({ placement: ['right-start', 'left-start'], offset: -4, flip: true, shift: true })
776
+ .fromTemplate(this.overlaySubmenuTemplate);
778
777
  // Prefer the cascade parent's overlayRef when available.
779
778
  // With Angular content projection, submenu content can be instantiated in the *root* overlay
780
779
  // injector even when it's rendered inside a child overlay. The cascade chain preserves the
@@ -784,14 +783,14 @@ class CoarSubmenuItemComponent {
784
783
  // Inside an overlay: close siblings (direct children of parent) then open as child
785
784
  // First, create the child overlay
786
785
  // Pass submenuData if provided, otherwise undefined (inherits parent context via $implicit)
787
- this.submenuRef = this.overlayService.openChild(containingOverlay, spec, submenuContextData);
786
+ this.submenuRef = opener.openAsChild(containingOverlay, submenuContextData);
788
787
  // Then close siblings, excluding the newly opened one
789
788
  containingOverlay.closeChildren(this.submenuRef);
790
789
  }
791
790
  else {
792
791
  // Inline menu: use cascade-level sibling closure
793
792
  this.cascade.closeSiblings();
794
- this.submenuRef = this.overlayService.open(spec, submenuContextData);
793
+ this.submenuRef = opener.open(submenuContextData);
795
794
  }
796
795
  // Expose the overlay ref to descendants so they can parent their own flyouts correctly.
797
796
  this.cascade.overlayRef = this.submenuRef;
@@ -1 +1 @@
1
- {"version":3,"file":"cocoar-ui-menu.mjs","sources":["../../../../libs/ui-menu/src/lib/coar-menu-aim.ts","../../../../libs/ui-menu/src/lib/coar-menu-aim-config.ts","../../../../libs/ui-menu/src/lib/coar-menu-cascade.ts","../../../../libs/ui-menu/src/lib/coar-menu-aim-config.directive.ts","../../../../libs/ui-menu/src/lib/coar-menu.component.ts","../../../../libs/ui-menu/src/lib/coar-menu.component.html","../../../../libs/ui-menu/src/lib/coar-menu-item.component.ts","../../../../libs/ui-menu/src/lib/coar-menu-item.component.html","../../../../libs/ui-menu/src/lib/coar-menu-divider.component.ts","../../../../libs/ui-menu/src/lib/coar-menu-heading.component.ts","../../../../libs/ui-menu/src/lib/coar-submenu-template.directive.ts","../../../../libs/ui-menu/src/lib/coar-submenu-item.component.ts","../../../../libs/ui-menu/src/lib/coar-sub-expand.component.ts","../../../../libs/ui-menu/src/cocoar-ui-menu.ts"],"sourcesContent":["export interface CoarMenuAimPoint {\n readonly x: number;\n readonly y: number;\n readonly t: number;\n}\n\nexport type CoarMenuAimDirection = 'right' | 'left';\n\nexport function shouldDelaySubmenuSwitch(\n previous: CoarMenuAimPoint | null,\n current: CoarMenuAimPoint,\n submenuRect: DOMRect,\n direction: CoarMenuAimDirection,\n sampleMaxAgeMs = 200\n): boolean {\n if (!previous) return false;\n\n // If submenu rect is not measurable, don't delay.\n if (!Number.isFinite(submenuRect.left) || submenuRect.width <= 0 || submenuRect.height <= 0) {\n return false;\n }\n\n // If the last movement was long ago, don't apply aim heuristics.\n if (current.t - previous.t > sampleMaxAgeMs) return false;\n\n const dx = current.x - previous.x;\n\n // Require clear horizontal intent toward the submenu.\n if (direction === 'right' && dx <= 2) return false;\n if (direction === 'left' && dx >= -2) return false;\n\n // Use the NEAR edge of the submenu panel (closest to the parent menu).\n // This matches the classic \"menu aim\" wedge used to detect intent to enter the open submenu.\n // Right-opening submenu: use left edge; left-opening submenu: use right edge.\n const edgeX = direction === 'right' ? submenuRect.left : submenuRect.right;\n\n // Expand wedge slightly to be forgiving.\n const padY = 8;\n const cornerA = { x: edgeX, y: submenuRect.top - padY };\n const cornerB = { x: edgeX, y: submenuRect.bottom + padY };\n\n return pointInTriangle(current, previous, cornerA, cornerB);\n}\n\nfunction pointInTriangle(\n p: { x: number; y: number },\n a: { x: number; y: number },\n b: { x: number; y: number },\n c: { x: number; y: number }\n): boolean {\n const d1 = sign(p, a, b);\n const d2 = sign(p, b, c);\n const d3 = sign(p, c, a);\n\n const hasNeg = d1 < 0 || d2 < 0 || d3 < 0;\n const hasPos = d1 > 0 || d2 > 0 || d3 > 0;\n\n return !(hasNeg && hasPos);\n}\n\nfunction sign(\n p1: { x: number; y: number },\n p2: { x: number; y: number },\n p3: { x: number; y: number }\n): number {\n return (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface CoarMenuAimConfig {\n readonly enabled: boolean;\n /** Emits debug events consumed by the showcase to render the aim triangle overlay. */\n readonly debugEnabled: boolean;\n /** Delay before switching to a newly hovered sibling submenu when aim is detected. */\n readonly switchDelayMs: number;\n /** Maximum age of the last pointer sample used for intent detection. */\n readonly sampleMaxAgeMs: number;\n}\n\nexport interface CoarMenuAimConfigProvider {\n getMenuAimConfig(): CoarMenuAimConfig;\n}\n\nexport const DEFAULT_COAR_MENU_AIM_CONFIG: CoarMenuAimConfig = {\n enabled: true,\n debugEnabled: false,\n switchDelayMs: 500,\n sampleMaxAgeMs: 200,\n};\n\nexport const COAR_MENU_AIM_CONFIG = new InjectionToken<CoarMenuAimConfigProvider>(\n 'COAR_MENU_AIM_CONFIG'\n);\n","import { InjectionToken, inject } from '@angular/core';\nimport type { OverlayRef } from '@cocoar/ui-overlay';\nimport { shouldDelaySubmenuSwitch, type CoarMenuAimPoint } from './coar-menu-aim';\nimport {\n COAR_MENU_AIM_CONFIG,\n DEFAULT_COAR_MENU_AIM_CONFIG,\n type CoarMenuAimConfigProvider,\n} from './coar-menu-aim-config';\n\n/**\n * CoarMenuCascade: Tracks parent-child and sibling relationships for menu hierarchies.\n *\n * Responsibilities:\n * - Track overlay refs for nested submenu parenting\n * - Track children to enable sibling closure (for inline menus without a common parent overlay)\n */\nexport class CoarMenuCascade {\n overlayRef: OverlayRef | null = null;\n private children = new Set<CoarMenuCascade>();\n\n private readonly aimConfig: CoarMenuAimConfigProvider | null = inject(COAR_MENU_AIM_CONFIG, {\n optional: true,\n });\n\n private activeChild: CoarMenuCascade | null = null;\n private pointerHistory: CoarMenuAimPoint[] = [];\n private pointerAbort: AbortController | null = null;\n\n private pendingSwitchTimer: ReturnType<typeof setTimeout> | null = null;\n private pendingChild: CoarMenuCascade | null = null;\n private pendingActivate: (() => void) | null = null;\n private activePanelCleanup: (() => void) | null = null;\n\n constructor(readonly parent: CoarMenuCascade | null) {\n // Register with parent to enable sibling tracking\n if (parent) {\n parent.children.add(this);\n }\n }\n\n requestOpenFromChild(\n child: CoarMenuCascade,\n activate: () => void,\n pointer: { x: number; y: number }\n ): void {\n const aim = this.aimConfig?.getMenuAimConfig() ?? DEFAULT_COAR_MENU_AIM_CONFIG;\n if (!aim.enabled) {\n this.activateNow(child, activate);\n return;\n }\n\n if (typeof document === 'undefined') {\n this.activateNow(child, activate);\n return;\n }\n\n const now = Date.now();\n const point: CoarMenuAimPoint = { x: pointer.x, y: pointer.y, t: now };\n this.pushPointerPoint(point);\n\n if (!this.activeChild || this.activeChild === child) {\n this.activateNow(child, activate);\n return;\n }\n\n const submenuRect = this.getActiveChildSubmenuRect();\n if (!submenuRect) {\n this.activateNow(child, activate);\n return;\n }\n\n const previous =\n this.pointerHistory.length >= 2 ? this.pointerHistory[this.pointerHistory.length - 2] : null;\n const direction = this.inferSubmenuDirection(submenuRect, point);\n\n const shouldDelay = shouldDelaySubmenuSwitch(\n previous,\n point,\n submenuRect,\n direction,\n aim.sampleMaxAgeMs\n );\n\n this.emitAimDebugIfEnabled(\n aim.debugEnabled,\n shouldDelay,\n previous,\n point,\n submenuRect,\n direction\n );\n\n if (!shouldDelay) {\n this.activateNow(child, activate);\n return;\n }\n\n this.scheduleSwitch(child, activate, aim.switchDelayMs);\n }\n\n private emitAimDebugIfEnabled(\n debugEnabled: boolean,\n shouldDelay: boolean,\n previous: CoarMenuAimPoint | null,\n current: CoarMenuAimPoint,\n submenuRect: DOMRect,\n direction: 'right' | 'left'\n ): void {\n if (typeof window === 'undefined') return;\n\n // Backward-compatible global override for ad-hoc debugging.\n const w = window as unknown as { __COAR_MENU_AIM_DEBUG__?: boolean };\n if (!debugEnabled && !w.__COAR_MENU_AIM_DEBUG__) return;\n\n try {\n window.dispatchEvent(\n new CustomEvent('coar-menu-aim', {\n detail: {\n shouldDelay,\n previous,\n current,\n submenuRect: {\n left: submenuRect.left,\n top: submenuRect.top,\n right: submenuRect.right,\n bottom: submenuRect.bottom,\n },\n direction,\n },\n })\n );\n } catch {\n // ignore\n }\n }\n\n notifyChildOpened(child: CoarMenuCascade): void {\n if (this.activeChild === child) {\n this.attachActivePanelListener();\n }\n }\n\n notifyChildClosed(child: CoarMenuCascade): void {\n if (this.activeChild === child) {\n this.activeChild = null;\n this.detachActivePanelListener();\n this.cancelPendingSwitch();\n this.stopPointerTracking();\n }\n }\n\n private activateNow(child: CoarMenuCascade, activate: () => void): void {\n this.cancelPendingSwitch();\n this.activeChild = child;\n this.ensurePointerTracking();\n activate();\n }\n\n private scheduleSwitch(child: CoarMenuCascade, activate: () => void, delayMs: number): void {\n this.cancelPendingSwitch();\n\n this.pendingChild = child;\n this.pendingActivate = activate;\n this.pendingSwitchTimer = setTimeout(() => {\n const pendingChild = this.pendingChild;\n const pendingActivate = this.pendingActivate;\n\n this.pendingChild = null;\n this.pendingActivate = null;\n this.pendingSwitchTimer = null;\n\n if (!pendingChild || !pendingActivate) return;\n this.activeChild = pendingChild;\n this.ensurePointerTracking();\n pendingActivate();\n }, delayMs);\n }\n\n private cancelPendingSwitch(): void {\n if (this.pendingSwitchTimer) {\n clearTimeout(this.pendingSwitchTimer);\n this.pendingSwitchTimer = null;\n }\n this.pendingChild = null;\n this.pendingActivate = null;\n }\n\n private ensurePointerTracking(): void {\n if (this.pointerAbort) return;\n if (typeof document === 'undefined') return;\n\n const abort = new AbortController();\n this.pointerAbort = abort;\n\n const onMove = (e: PointerEvent) => {\n this.pushPointerPoint({ x: e.clientX, y: e.clientY, t: Date.now() });\n };\n\n document.addEventListener('pointermove', onMove, { signal: abort.signal, passive: true });\n }\n\n private stopPointerTracking(): void {\n if (!this.pointerAbort) return;\n this.pointerAbort.abort();\n this.pointerAbort = null;\n this.pointerHistory = [];\n }\n\n private pushPointerPoint(point: CoarMenuAimPoint): void {\n this.pointerHistory.push(point);\n if (this.pointerHistory.length > 5) {\n this.pointerHistory = this.pointerHistory.slice(-5);\n }\n }\n\n private getActiveChildSubmenuRect(): DOMRect | null {\n const panelEl = this.activeChild?.overlayRef?.getPanelElement?.();\n if (!panelEl) return null;\n return panelEl.getBoundingClientRect();\n }\n\n private inferSubmenuDirection(rect: DOMRect, point: { x: number; y: number }): 'right' | 'left' {\n // If the submenu's left edge is to the right of the pointer, it's a right-opening flyout.\n // Otherwise, assume left.\n return rect.left >= point.x ? 'right' : 'left';\n }\n\n private attachActivePanelListener(): void {\n this.detachActivePanelListener();\n\n const panelEl = this.activeChild?.overlayRef?.getPanelElement?.();\n if (!panelEl) return;\n\n const onEnter = () => {\n // Once the user reaches the currently open submenu panel, don't allow a delayed switch\n // to steal focus/open another sibling submenu.\n this.cancelPendingSwitch();\n };\n\n panelEl.addEventListener('pointerenter', onEnter);\n this.activePanelCleanup = () => panelEl.removeEventListener('pointerenter', onEnter);\n }\n\n private detachActivePanelListener(): void {\n this.activePanelCleanup?.();\n this.activePanelCleanup = null;\n }\n\n /**\n * Close all sibling submenus at the cascade level.\n * Used for inline menus where siblings don't have a common parent overlay.\n */\n closeSiblings(): void {\n if (this.parent) {\n for (const sibling of this.parent.children) {\n if (sibling !== this && sibling.overlayRef) {\n sibling.overlayRef.close();\n }\n }\n }\n }\n\n destroy(): void {\n this.detachActivePanelListener();\n this.cancelPendingSwitch();\n this.stopPointerTracking();\n if (this.parent) {\n this.parent.children.delete(this);\n }\n }\n}\n\nexport const COAR_MENU_CASCADE = new InjectionToken<CoarMenuCascade>('COAR_MENU_CASCADE');\n","import { Directive, input, inject } from '@angular/core';\nimport {\n COAR_MENU_AIM_CONFIG,\n DEFAULT_COAR_MENU_AIM_CONFIG,\n type CoarMenuAimConfig,\n type CoarMenuAimConfigProvider,\n} from './coar-menu-aim-config';\n\n@Directive({\n selector: '[coarMenuAimConfig]',\n standalone: true,\n providers: [{ provide: COAR_MENU_AIM_CONFIG, useExisting: CoarMenuAimConfigDirective }],\n})\nexport class CoarMenuAimConfigDirective implements CoarMenuAimConfigProvider {\n private readonly parent = inject(COAR_MENU_AIM_CONFIG, { optional: true, skipSelf: true });\n\n /** Enable/disable menu-aim for this menu tree. */\n readonly aimEnabled = input<boolean | undefined>(undefined);\n\n /** Emit debug events for menu-aim visualization (showcase only). */\n readonly aimDebugEnabled = input<boolean | undefined>(undefined);\n\n /** Delay before switching to a newly hovered sibling submenu when aim is detected. */\n readonly aimSwitchDelayMs = input<number | undefined>(undefined);\n\n /** Maximum age of the last pointer sample used for intent detection. */\n readonly aimSampleMaxAgeMs = input<number | undefined>(undefined);\n\n getMenuAimConfig(): CoarMenuAimConfig {\n const base = this.parent?.getMenuAimConfig() ?? DEFAULT_COAR_MENU_AIM_CONFIG;\n\n return {\n enabled: this.aimEnabled() ?? base.enabled,\n debugEnabled: this.aimDebugEnabled() ?? base.debugEnabled,\n switchDelayMs: this.aimSwitchDelayMs() ?? base.switchDelayMs,\n sampleMaxAgeMs: this.aimSampleMaxAgeMs() ?? base.sampleMaxAgeMs,\n };\n }\n}\n","import { Component, ChangeDetectionStrategy, inject, input } from '@angular/core';\nimport { COAR_MENU_CASCADE, CoarMenuCascade } from './coar-menu-cascade';\nimport { COAR_OVERLAY_REF } from '@cocoar/ui-overlay';\nimport { CoarMenuAimConfigDirective } from './coar-menu-aim-config.directive';\n\n/**\n * CoarMenu: Shell component providing menu styling container.\n *\n * Responsibilities:\n * - Apply consistent menu styling via CSS variables\n * - Provide semantic menu container (<menu> or <div role=\"menu\">)\n * - Provide root cascade for sibling submenu tracking\n * - No logic - just a styled wrapper\n *\n * Use standalone for inline menus, or as content in CoarOverlayService for context menus/flyouts.\n *\n * @example\n * ```html\n * <coar-menu>\n * <coar-menu-item>Action 1</coar-menu-item>\n * <coar-menu-item>Action 2</coar-menu-item>\n * <coar-menu-divider></coar-menu-divider>\n * <coar-menu-item>Action 3</coar-menu-item>\n * </coar-menu>\n * ```\n */\n@Component({\n selector: 'coar-menu',\n standalone: true,\n imports: [],\n hostDirectives: [\n {\n directive: CoarMenuAimConfigDirective,\n inputs: ['aimEnabled', 'aimDebugEnabled', 'aimSwitchDelayMs', 'aimSampleMaxAgeMs'],\n },\n ],\n templateUrl: './coar-menu.component.html',\n styleUrl: './coar-menu.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'menu',\n class: 'coar-menu',\n '[class.coar-menu--in-overlay]': 'isInOverlay()',\n '[style.--coar-menu-icon-slot-display]': 'showIconColumn() ? null : \"none\"',\n '[style.--coar-menu-item-icon-slot-size]': 'showIconColumn() ? null : \"0px\"',\n },\n providers: [\n {\n provide: COAR_MENU_CASCADE,\n useFactory: () => {\n // Check if we're inside an overlay\n const inOverlay = inject(COAR_OVERLAY_REF, { optional: true });\n const parentCascade = inject(COAR_MENU_CASCADE, { optional: true, skipSelf: true });\n\n if (inOverlay && parentCascade) {\n // We're a menu inside a submenu overlay\n // Create a new cascade as a child of the parent, so sibling submenu-items\n // at this level can track each other\n return new CoarMenuCascade(parentCascade);\n }\n\n // For root menus (inline or context menu), create a new root cascade\n return new CoarMenuCascade(parentCascade);\n },\n },\n ],\n})\nexport class CoarMenuComponent {\n private readonly overlayRef = inject(COAR_OVERLAY_REF, { optional: true });\n\n /**\n * Controls whether the menu reserves and renders an icon column.\n *\n * Default is enabled to avoid layout shift for stateful icons (e.g. checkmarks).\n * Set to false for text-only menus (icons will not render).\n */\n readonly showIconColumn = input(true);\n\n /**\n * Check if this menu is rendered inside an overlay (flyout).\n * Used to enable border visibility for menu items.\n */\n protected isInOverlay(): boolean {\n return this.overlayRef !== null;\n }\n}\n","<ng-content />\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n HostListener,\n inject,\n} from '@angular/core';\nimport { CoarIconComponent } from '@cocoar/ui-components';\nimport { COAR_MENU_PARENT } from '@cocoar/ui-overlay';\n\n/**\n * Event emitted when a menu item is clicked.\n * Provides control over menu closing behavior.\n */\nexport interface CoarMenuItemClickEvent {\n /** Call this to keep the menu open after clicking (prevents auto-close) */\n keepMenuOpen(): void;\n /** Original mouse event */\n event: MouseEvent;\n}\n\n/**\n * CoarMenuItem: Individual menu item with optional icon and submenu support.\n *\n * Responsibilities:\n * - Render item text and optional icon\n * - Handle click events\n * - Support disabled state\n * - Visual states: hover, active, focus\n * - Trigger submenu (accordion or flyout via parent menu logic)\n *\n * Does NOT manage overlay directly - parent menu handles flyout logic.\n *\n * @example\n * ```html\n * <coar-menu-item (itemClick)=\"onSave()\">Save</coar-menu-item>\n * <coar-menu-item icon=\"copy\">Copy</coar-menu-item>\n * <coar-menu-item [disabled]=\"true\">Unavailable</coar-menu-item>\n *\n * <!-- Prevent menu from closing on click: -->\n * <coar-menu-item (itemClick)=\"toggle($event)\">Toggle Setting</coar-menu-item>\n *\n * toggle(event: CoarMenuItemClickEvent) {\n * event.keepMenuOpen(); // Keep menu open\n * this.setting = !this.setting;\n * }\n * ```\n */\n@Component({\n selector: 'coar-menu-item',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-menu-item.component.html',\n styleUrl: './coar-menu-item.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'menuitem',\n class: 'coar-menu-item',\n '[class.coar-menu-item--disabled]': 'disabled()',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n },\n})\nexport class CoarMenuItemComponent {\n private readonly parentOverlay = inject(COAR_MENU_PARENT, { optional: true });\n\n /** Item text content */\n readonly label = input<string>();\n\n /** Optional icon identifier (rendered via CoarIconComponent) */\n readonly icon = input<string | undefined>(undefined);\n\n /** Disabled state prevents interaction */\n readonly disabled = input(false);\n\n /** Emitted when user clicks/selects the item. Menu closes by default unless preventDefault() is called. */\n readonly itemClick = output<CoarMenuItemClickEvent>();\n\n /** Emitted when user hovers over item (for flyout trigger) */\n readonly itemHover = output<Event>();\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n // Always stop propagation to prevent overlay's outside-click handler\n event.stopPropagation();\n\n let shouldClose = true;\n\n const clickEvent: CoarMenuItemClickEvent = {\n event,\n keepMenuOpen: () => {\n shouldClose = false;\n },\n };\n\n this.itemClick.emit(clickEvent);\n\n // Close root overlay after Angular's change detection and OUTSIDE the hover area\n const parentOverlay = this.parentOverlay;\n if (shouldClose && parentOverlay) {\n setTimeout(() => {\n // Close the ROOT overlay to ensure the entire menu tree closes\n const root = parentOverlay.getRoot();\n root.close();\n }, 10);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n onMouseEnter(event: MouseEvent): void {\n if (!this.disabled()) {\n this.itemHover.emit(event);\n }\n }\n\n @HostListener('keydown.enter')\n @HostListener('keydown.space')\n onKeyboardActivate(): void {\n if (this.disabled()) {\n return;\n }\n\n let shouldClose = true;\n\n const clickEvent: CoarMenuItemClickEvent = {\n event: new MouseEvent('click'), // Synthetic event for keyboard\n keepMenuOpen: () => {\n shouldClose = false;\n },\n };\n\n this.itemClick.emit(clickEvent);\n\n const parentOverlay = this.parentOverlay;\n if (shouldClose && parentOverlay) {\n setTimeout(() => {\n // Close the ROOT overlay to ensure the entire menu tree closes\n const root = parentOverlay.getRoot();\n root.close();\n }, 10);\n }\n }\n}\n","<span class=\"coar-menu-item__icon\" aria-hidden=\"true\">\n <coar-icon [name]=\"icon() || 'square-rounded-dashed'\" size=\"sm\" aria-hidden=\"true\" />\n</span>\n<span class=\"coar-menu-item__label\">\n @if (label()) {\n {{ label() }}\n } @else {\n <ng-content />\n }\n</span>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n/**\n * CoarMenuDivider: Visual separator between menu items.\n *\n * Simple horizontal line for grouping menu items.\n *\n * @example\n * ```html\n * <coar-menu>\n * <coar-menu-item>Cut</coar-menu-item>\n * <coar-menu-item>Copy</coar-menu-item>\n * <coar-menu-divider></coar-menu-divider>\n * <coar-menu-item>Paste</coar-menu-item>\n * </coar-menu>\n * ```\n */\n@Component({\n selector: 'coar-menu-divider',\n standalone: true,\n imports: [],\n template: '',\n styleUrl: './coar-menu-divider.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n class: 'coar-menu-divider',\n },\n})\nexport class CoarMenuDividerComponent {}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n/**\n * CoarMenuHeading: Non-interactive section label for menu groups.\n *\n * Responsibilities:\n * - Display section/group heading text\n * - Provide visual separation between menu sections\n * - Non-interactive (no hover, no click, not focusable)\n *\n * @example\n * ```html\n * <coar-menu>\n * <coar-menu-heading>Foundations</coar-menu-heading>\n * <coar-menu-item routerLink=\"/typography\">Typography</coar-menu-item>\n * <coar-menu-item routerLink=\"/colors\">Colors</coar-menu-item>\n *\n * <coar-menu-heading>Form Controls</coar-menu-heading>\n * <coar-menu-item routerLink=\"/text-input\">Text Input</coar-menu-item>\n * </coar-menu>\n * ```\n */\n@Component({\n selector: 'coar-menu-heading',\n standalone: true,\n imports: [],\n template: `\n <div class=\"coar-menu-heading\">\n @if (label()) {\n {{ label() }}\n } @else {\n <ng-content />\n }\n </div>\n `,\n styleUrl: './coar-menu-heading.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'coar-menu-heading-host',\n },\n})\nexport class CoarMenuHeadingComponent {\n /** Optional explicit label text (alternative to content projection) */\n readonly label = input<string>();\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Marks an inline submenu template for a `coar-submenu-item`.\n *\n * This is optional: if a submenu item contains exactly one direct child `<ng-template>`,\n * that template will be used even without this directive.\n */\n@Directive({\n selector: 'ng-template[coarSubmenu]',\n standalone: true,\n})\nexport class CoarSubmenuTemplateDirective {\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n input,\n ContentChild,\n ViewChild,\n TemplateRef,\n inject,\n DestroyRef,\n Injector,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CoarIconComponent } from '@cocoar/ui-components';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n CoarOverlayService,\n coarHoverMenuPreset,\n Overlay,\n COAR_MENU_PARENT,\n} from '@cocoar/ui-overlay';\nimport { COAR_MENU_CASCADE, CoarMenuCascade } from './coar-menu-cascade';\nimport { CoarSubmenuTemplateDirective } from './coar-submenu-template.directive';\n\n/**\n * CoarSubmenuItem: Menu item that opens a submenu on hover.\n *\n * Responsibilities:\n * - Render parent item with icon and label\n * - Manage submenu overlay lifecycle\n * - Support nested submenus (can contain other submenu-items)\n *\n * @example\n * ```html\n * <coar-submenu-item label=\"Share\" icon=\"🔗\">\n * <ng-template>\n * <coar-menu-item icon=\"✉️\" (itemClick)=\"sendEmail()\">Email</coar-menu-item>\n * <coar-menu-item icon=\"🔗\" (itemClick)=\"copyLink()\">Copy Link</coar-menu-item>\n * </ng-template>\n * </coar-submenu-item>\n *\n * <!-- Optional: explicitly mark the template -->\n * <coar-submenu-item label=\"Share\" icon=\"🔗\">\n * <ng-template coarSubmenu>\n * ...\n * </ng-template>\n * </coar-submenu-item>\n *\n * <!-- Also supported (legacy / external template): -->\n * <coar-submenu-item label=\"Share\" icon=\"🔗\" [submenuTemplate]=\"shareMenu\" />\n * ```\n */\n@Component({\n selector: 'coar-submenu-item, coar-sub-flyout',\n standalone: true,\n imports: [CommonModule, CoarIconComponent],\n template: `\n <div\n class=\"coar-submenu-item\"\n [class.coar-submenu-item--disabled]=\"disabled()\"\n [class.coar-submenu-item--open]=\"isOpen\"\n [attr.role]=\"'menuitem'\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (mouseenter)=\"onMouseEnter($event)\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onKeyboardActivate($event)\"\n (keydown.space)=\"onKeyboardActivate($event)\"\n >\n <span class=\"coar-submenu-item__icon\" aria-hidden=\"true\">\n <coar-icon [name]=\"icon() || 'square-rounded-dashed'\" size=\"sm\" aria-hidden=\"true\" />\n </span>\n <span class=\"coar-submenu-item__label\">{{ label() }}</span>\n <coar-icon\n name=\"chevron-right\"\n size=\"xs\"\n class=\"coar-submenu-item__arrow\"\n aria-hidden=\"true\"\n />\n </div>\n\n <ng-template #overlaySubmenuTemplate>\n <ng-container\n *ngTemplateOutlet=\"submenuTemplateToRender(); injector: submenuTemplateInjector\"\n />\n </ng-template>\n `,\n styleUrl: './coar-submenu-item.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: COAR_MENU_CASCADE,\n useFactory: () =>\n new CoarMenuCascade(inject(COAR_MENU_CASCADE, { optional: true, skipSelf: true })),\n },\n ],\n})\nexport class CoarSubmenuItemComponent {\n private readonly overlayService = inject(CoarOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly cascade = inject(COAR_MENU_CASCADE);\n private readonly parentOverlay = inject(COAR_MENU_PARENT, { optional: true });\n private readonly injector = inject(Injector);\n\n // Ensures the submenu TemplateRef is instantiated with a parent injector that contains\n // the correct cascade instance for this submenu item. Without this, TemplateRefs declared\n // outside of this component can end up resolving menu context from the declaration site.\n protected readonly submenuTemplateInjector = Injector.create({\n providers: [{ provide: COAR_MENU_CASCADE, useValue: this.cascade }],\n parent: this.injector,\n });\n\n constructor() {\n // Cleanup cascade when component is destroyed\n this.destroyRef.onDestroy(() => {\n this.cascade.destroy();\n // Ensure state is cleared on destroy\n if (this.isOpen) {\n this.isOpen = false;\n this.submenuRef = null;\n }\n });\n }\n\n /** Label text for the menu item */\n readonly label = input.required<string>();\n\n /** Optional icon identifier */\n readonly icon = input<string | undefined>(undefined);\n\n /** Disabled state prevents interaction */\n readonly disabled = input(false);\n\n /**\n * Optional external submenu template.\n *\n * Prefer an inline `<ng-template>` child when possible.\n */\n readonly submenuTemplate = input<TemplateRef<unknown> | null>(null);\n\n /**\n * Optional data to pass to the submenu template.\n *\n * If provided, this data will be passed as the context to the submenu template,\n * instead of inheriting the parent overlay's context.\n *\n * Use this to create clean boundaries between parent and submenu:\n * - Simple case: `[submenuData]=\"context\"` (pass full context)\n * - Complex case: `[submenuData]=\"transformData(context)\"` (pass only what submenu needs)\n *\n * @example\n * ```html\n * <!-- Pass specific data contract to submenu -->\n * <coar-submenu-item\n * label=\"Status\"\n * [submenuTemplate]=\"statusMenu\"\n * [submenuData]=\"{ selectedIds: context.selected.map(s => s.Id) }\">\n * </coar-submenu-item>\n * ```\n */\n readonly submenuData = input<unknown>(undefined);\n\n @ContentChild(CoarSubmenuTemplateDirective, { descendants: false })\n private readonly markedInlineTemplate?: CoarSubmenuTemplateDirective;\n\n @ContentChild(TemplateRef, { descendants: false })\n private readonly inlineTemplate?: TemplateRef<unknown>;\n\n @ViewChild('overlaySubmenuTemplate') private overlaySubmenuTemplate!: TemplateRef<unknown>;\n\n private submenuRef: ReturnType<typeof this.overlayService.open> | null = null;\n isOpen = false;\n\n protected submenuTemplateToRender(): TemplateRef<unknown> {\n const template =\n this.markedInlineTemplate?.templateRef ?? this.inlineTemplate ?? this.submenuTemplate();\n\n if (!template) {\n throw new Error(\n 'CoarSubmenuItemComponent: missing submenu content. Provide either an inline <ng-template> child or set [submenuTemplate].'\n );\n }\n\n return template;\n }\n\n onMouseEnter(event: MouseEvent): void {\n if (this.disabled()) {\n return;\n }\n\n // Defensive: sync state with actual overlay status\n if (this.submenuRef) {\n if (this.submenuRef.isClosed) {\n // Overlay is closed, clear everything\n this.submenuRef = null;\n this.isOpen = false;\n this.cdr.markForCheck();\n } else if (!this.isOpen) {\n // Overlay is open but state is wrong - fix it\n this.isOpen = true;\n this.cdr.markForCheck();\n }\n }\n\n // Open submenu if not already open\n if (!this.submenuRef) {\n const anchor = event.currentTarget as HTMLElement;\n\n // Menu-aim: when a different sibling submenu is already open, delay switching\n // if the pointer trajectory suggests the user is heading into the open submenu panel.\n const parent = this.cascade.parent;\n if (parent) {\n parent.requestOpenFromChild(this.cascade, () => this.openSubmenu(anchor), {\n x: event.clientX,\n y: event.clientY,\n });\n } else {\n this.openSubmenu(anchor);\n }\n }\n }\n\n onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (this.submenuRef?.isClosed) {\n this.submenuRef = null;\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n\n // For accessibility: toggle on click/Enter/Space\n if (this.submenuRef) {\n this.closeSubmenu();\n } else {\n this.openSubmenu(event.currentTarget as HTMLElement);\n }\n }\n\n onKeyboardActivate(event: Event): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (this.submenuRef?.isClosed) {\n this.submenuRef = null;\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n\n const target = event.currentTarget as HTMLElement;\n if (this.submenuRef) {\n this.closeSubmenu();\n } else {\n this.openSubmenu(target);\n }\n }\n\n private openSubmenu(anchorElement: HTMLElement): void {\n // Validate early so the error points at the submenu item usage.\n this.submenuTemplateToRender();\n\n // Determine what data to pass to the submenu template\n const submenuContextData = this.submenuData();\n\n // All overlays use hoverTree preset for proper tree tracking\n const spec = Overlay.define<unknown>((b) => {\n b.content((c) => c.fromTemplate(this.overlaySubmenuTemplate));\n b.anchor({ kind: 'element', element: anchorElement });\n b.position({ placement: ['right-start', 'left-start'], offset: -4, flip: true, shift: true });\n }, coarHoverMenuPreset);\n\n // Prefer the cascade parent's overlayRef when available.\n // With Angular content projection, submenu content can be instantiated in the *root* overlay\n // injector even when it's rendered inside a child overlay. The cascade chain preserves the\n // correct containing overlay via overlayRef.\n const containingOverlay = this.cascade.parent?.overlayRef ?? this.parentOverlay;\n\n if (containingOverlay) {\n // Inside an overlay: close siblings (direct children of parent) then open as child\n // First, create the child overlay\n // Pass submenuData if provided, otherwise undefined (inherits parent context via $implicit)\n this.submenuRef = this.overlayService.openChild(containingOverlay, spec, submenuContextData);\n\n // Then close siblings, excluding the newly opened one\n containingOverlay.closeChildren(this.submenuRef);\n } else {\n // Inline menu: use cascade-level sibling closure\n this.cascade.closeSiblings();\n this.submenuRef = this.overlayService.open(spec, submenuContextData);\n }\n\n // Expose the overlay ref to descendants so they can parent their own flyouts correctly.\n this.cascade.overlayRef = this.submenuRef;\n this.cascade.parent?.notifyChildOpened(this.cascade);\n\n this.isOpen = true;\n this.cdr.markForCheck();\n\n const openedRef = this.submenuRef;\n\n // Clear the active styling as soon as a close is initiated (e.g. hoverTree timer,\n // outside click, or sibling submenu switch). Otherwise the item can look \"stuck\"\n // while the overlay finishes its close transition.\n const originalClose = openedRef.close.bind(openedRef);\n openedRef.close = (result?: unknown) => {\n if (this.submenuRef === openedRef && this.isOpen) {\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n\n originalClose(result);\n };\n\n openedRef.afterClosed$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n // Only clear state if this is still the current overlay\n // (prevents race condition when rapidly opening new overlays)\n if (this.submenuRef === openedRef) {\n this.submenuRef = null;\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n\n if (this.cascade.overlayRef === openedRef) {\n this.cascade.overlayRef = null;\n }\n\n this.cascade.parent?.notifyChildClosed(this.cascade);\n });\n }\n\n // Parent overlay is resolved via COAR_OVERLAY_REF when rendered inside an overlay.\n\n private closeSubmenu(): void {\n this.submenuRef?.close();\n this.submenuRef = null;\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n TemplateRef,\n booleanAttribute,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CoarIconComponent } from '@cocoar/ui-components';\nimport { CoarSubmenuTemplateDirective } from './coar-submenu-template.directive';\n\n/**\n * CoarSubExpand: Menu item that expands/collapses a submenu inline.\n *\n * Use this variant when you want nested options to stay visible (e.g. sidebar panels)\n * while still reusing the same menu item types inside the submenu.\n *\n * @example\n * ```html\n * <coar-menu>\n * <coar-sub-expand label=\"Filters\" icon=\"settings\" [(open)]=\"filtersOpen\">\n * <ng-template>\n * <coar-menu>\n * <coar-menu-item icon=\"plus\">Add Filter</coar-menu-item>\n * <coar-menu-item icon=\"trash\">Clear</coar-menu-item>\n * </coar-menu>\n * </ng-template>\n </coar-sub-expand>\n * </coar-menu>\n * ```\n */\n@Component({\n selector: 'coar-sub-expand',\n standalone: true,\n imports: [CommonModule, CoarIconComponent],\n template: `\n <div\n class=\"coar-sub-expand\"\n [class.coar-sub-expand--disabled]=\"disabled()\"\n [class.coar-sub-expand--open]=\"isOpen()\"\n [attr.role]=\"'menuitem'\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"toggle($event)\"\n (keydown.enter)=\"toggle($event)\"\n (keydown.space)=\"toggle($event)\"\n >\n <span class=\"coar-sub-expand__icon\" aria-hidden=\"true\">\n <coar-icon [name]=\"icon() || 'square-rounded-dashed'\" size=\"sm\" aria-hidden=\"true\" />\n </span>\n <span class=\"coar-sub-expand__label\">{{ label() }}</span>\n <coar-icon\n [name]=\"isOpen() ? 'minus' : 'plus'\"\n size=\"xs\"\n class=\"coar-sub-expand__arrow\"\n aria-hidden=\"true\"\n />\n </div>\n\n <div\n class=\"coar-sub-expand__panel\"\n [class.coar-sub-expand__panel--open]=\"isOpen()\"\n [attr.aria-hidden]=\"isOpen() ? null : 'true'\"\n role=\"group\"\n >\n <div class=\"coar-sub-expand__panel-inner\">\n <ng-container *ngTemplateOutlet=\"submenuTemplateToRender()\" />\n </div>\n </div>\n `,\n styleUrl: './coar-sub-expand.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarSubExpandComponent {\n /** Label text for the menu item */\n readonly label = input.required<string>();\n\n /** Optional icon identifier */\n readonly icon = input<string | undefined>(undefined);\n\n /** Disabled state prevents interaction */\n readonly disabled = input(false);\n\n /** Expanded state (two-way bindable with [(open)]) */\n readonly open = input<boolean | undefined, unknown>(undefined, { transform: booleanAttribute });\n\n /** Emits when expanded state changes (for [(open)]) */\n readonly openChange = output<boolean>();\n\n private readonly openInternal = signal(false);\n\n protected readonly isOpen = computed(() => this.open() ?? this.openInternal());\n\n /** Optional external submenu template. Prefer an inline `<ng-template>` child when possible. */\n readonly submenuTemplate = input<TemplateRef<unknown> | null>(null);\n\n @ContentChild(CoarSubmenuTemplateDirective, { descendants: false })\n private readonly markedInlineTemplate?: CoarSubmenuTemplateDirective;\n\n @ContentChild(TemplateRef, { descendants: false })\n private readonly inlineTemplate?: TemplateRef<unknown>;\n\n protected submenuTemplateToRender(): TemplateRef<unknown> {\n const template =\n this.markedInlineTemplate?.templateRef ?? this.inlineTemplate ?? this.submenuTemplate();\n\n if (!template) {\n throw new Error(\n 'CoarSubExpandComponent: missing submenu content. Provide either an inline <ng-template> child or set [submenuTemplate].'\n );\n }\n\n return template;\n }\n\n constructor() {\n effect(() => {\n const value = this.open();\n if (value === undefined) return;\n\n this.openInternal.set(value);\n });\n }\n\n toggle(event: Event): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const next = !this.isOpen();\n this.openInternal.set(next);\n this.openChange.emit(next);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CoarMenuAimConfigDirective"],"mappings":"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"}
1
+ {"version":3,"file":"cocoar-ui-menu.mjs","sources":["../../../../libs/ui-menu/src/lib/coar-menu-aim.ts","../../../../libs/ui-menu/src/lib/coar-menu-aim-config.ts","../../../../libs/ui-menu/src/lib/coar-menu-cascade.ts","../../../../libs/ui-menu/src/lib/coar-menu-aim-config.directive.ts","../../../../libs/ui-menu/src/lib/coar-menu.component.ts","../../../../libs/ui-menu/src/lib/coar-menu.component.html","../../../../libs/ui-menu/src/lib/coar-menu-item.component.ts","../../../../libs/ui-menu/src/lib/coar-menu-item.component.html","../../../../libs/ui-menu/src/lib/coar-menu-divider.component.ts","../../../../libs/ui-menu/src/lib/coar-menu-heading.component.ts","../../../../libs/ui-menu/src/lib/coar-submenu-template.directive.ts","../../../../libs/ui-menu/src/lib/coar-submenu-item.component.ts","../../../../libs/ui-menu/src/lib/coar-sub-expand.component.ts","../../../../libs/ui-menu/src/cocoar-ui-menu.ts"],"sourcesContent":["export interface CoarMenuAimPoint {\n readonly x: number;\n readonly y: number;\n readonly t: number;\n}\n\nexport type CoarMenuAimDirection = 'right' | 'left';\n\nexport function shouldDelaySubmenuSwitch(\n previous: CoarMenuAimPoint | null,\n current: CoarMenuAimPoint,\n submenuRect: DOMRect,\n direction: CoarMenuAimDirection,\n sampleMaxAgeMs = 200\n): boolean {\n if (!previous) return false;\n\n // If submenu rect is not measurable, don't delay.\n if (!Number.isFinite(submenuRect.left) || submenuRect.width <= 0 || submenuRect.height <= 0) {\n return false;\n }\n\n // If the last movement was long ago, don't apply aim heuristics.\n if (current.t - previous.t > sampleMaxAgeMs) return false;\n\n const dx = current.x - previous.x;\n\n // Require clear horizontal intent toward the submenu.\n if (direction === 'right' && dx <= 2) return false;\n if (direction === 'left' && dx >= -2) return false;\n\n // Use the NEAR edge of the submenu panel (closest to the parent menu).\n // This matches the classic \"menu aim\" wedge used to detect intent to enter the open submenu.\n // Right-opening submenu: use left edge; left-opening submenu: use right edge.\n const edgeX = direction === 'right' ? submenuRect.left : submenuRect.right;\n\n // Expand wedge slightly to be forgiving.\n const padY = 8;\n const cornerA = { x: edgeX, y: submenuRect.top - padY };\n const cornerB = { x: edgeX, y: submenuRect.bottom + padY };\n\n return pointInTriangle(current, previous, cornerA, cornerB);\n}\n\nfunction pointInTriangle(\n p: { x: number; y: number },\n a: { x: number; y: number },\n b: { x: number; y: number },\n c: { x: number; y: number }\n): boolean {\n const d1 = sign(p, a, b);\n const d2 = sign(p, b, c);\n const d3 = sign(p, c, a);\n\n const hasNeg = d1 < 0 || d2 < 0 || d3 < 0;\n const hasPos = d1 > 0 || d2 > 0 || d3 > 0;\n\n return !(hasNeg && hasPos);\n}\n\nfunction sign(\n p1: { x: number; y: number },\n p2: { x: number; y: number },\n p3: { x: number; y: number }\n): number {\n return (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface CoarMenuAimConfig {\n readonly enabled: boolean;\n /** Emits debug events consumed by the showcase to render the aim triangle overlay. */\n readonly debugEnabled: boolean;\n /** Delay before switching to a newly hovered sibling submenu when aim is detected. */\n readonly switchDelayMs: number;\n /** Maximum age of the last pointer sample used for intent detection. */\n readonly sampleMaxAgeMs: number;\n}\n\nexport interface CoarMenuAimConfigProvider {\n getMenuAimConfig(): CoarMenuAimConfig;\n}\n\nexport const DEFAULT_COAR_MENU_AIM_CONFIG: CoarMenuAimConfig = {\n enabled: true,\n debugEnabled: false,\n switchDelayMs: 500,\n sampleMaxAgeMs: 200,\n};\n\nexport const COAR_MENU_AIM_CONFIG = new InjectionToken<CoarMenuAimConfigProvider>(\n 'COAR_MENU_AIM_CONFIG'\n);\n","import { InjectionToken, inject } from '@angular/core';\nimport type { OverlayRef } from '@cocoar/ui-overlay';\nimport { shouldDelaySubmenuSwitch, type CoarMenuAimPoint } from './coar-menu-aim';\nimport {\n COAR_MENU_AIM_CONFIG,\n DEFAULT_COAR_MENU_AIM_CONFIG,\n type CoarMenuAimConfigProvider,\n} from './coar-menu-aim-config';\n\n/**\n * CoarMenuCascade: Tracks parent-child and sibling relationships for menu hierarchies.\n *\n * Responsibilities:\n * - Track overlay refs for nested submenu parenting\n * - Track children to enable sibling closure (for inline menus without a common parent overlay)\n */\nexport class CoarMenuCascade {\n overlayRef: OverlayRef | null = null;\n private children = new Set<CoarMenuCascade>();\n\n private readonly aimConfig: CoarMenuAimConfigProvider | null = inject(COAR_MENU_AIM_CONFIG, {\n optional: true,\n });\n\n private activeChild: CoarMenuCascade | null = null;\n private pointerHistory: CoarMenuAimPoint[] = [];\n private pointerAbort: AbortController | null = null;\n\n private pendingSwitchTimer: ReturnType<typeof setTimeout> | null = null;\n private pendingChild: CoarMenuCascade | null = null;\n private pendingActivate: (() => void) | null = null;\n private activePanelCleanup: (() => void) | null = null;\n\n constructor(readonly parent: CoarMenuCascade | null) {\n // Register with parent to enable sibling tracking\n if (parent) {\n parent.children.add(this);\n }\n }\n\n requestOpenFromChild(\n child: CoarMenuCascade,\n activate: () => void,\n pointer: { x: number; y: number }\n ): void {\n const aim = this.aimConfig?.getMenuAimConfig() ?? DEFAULT_COAR_MENU_AIM_CONFIG;\n if (!aim.enabled) {\n this.activateNow(child, activate);\n return;\n }\n\n if (typeof document === 'undefined') {\n this.activateNow(child, activate);\n return;\n }\n\n const now = Date.now();\n const point: CoarMenuAimPoint = { x: pointer.x, y: pointer.y, t: now };\n this.pushPointerPoint(point);\n\n if (!this.activeChild || this.activeChild === child) {\n this.activateNow(child, activate);\n return;\n }\n\n const submenuRect = this.getActiveChildSubmenuRect();\n if (!submenuRect) {\n this.activateNow(child, activate);\n return;\n }\n\n const previous =\n this.pointerHistory.length >= 2 ? this.pointerHistory[this.pointerHistory.length - 2] : null;\n const direction = this.inferSubmenuDirection(submenuRect, point);\n\n const shouldDelay = shouldDelaySubmenuSwitch(\n previous,\n point,\n submenuRect,\n direction,\n aim.sampleMaxAgeMs\n );\n\n this.emitAimDebugIfEnabled(\n aim.debugEnabled,\n shouldDelay,\n previous,\n point,\n submenuRect,\n direction\n );\n\n if (!shouldDelay) {\n this.activateNow(child, activate);\n return;\n }\n\n this.scheduleSwitch(child, activate, aim.switchDelayMs);\n }\n\n private emitAimDebugIfEnabled(\n debugEnabled: boolean,\n shouldDelay: boolean,\n previous: CoarMenuAimPoint | null,\n current: CoarMenuAimPoint,\n submenuRect: DOMRect,\n direction: 'right' | 'left'\n ): void {\n if (typeof window === 'undefined') return;\n\n // Backward-compatible global override for ad-hoc debugging.\n const w = window as unknown as { __COAR_MENU_AIM_DEBUG__?: boolean };\n if (!debugEnabled && !w.__COAR_MENU_AIM_DEBUG__) return;\n\n try {\n window.dispatchEvent(\n new CustomEvent('coar-menu-aim', {\n detail: {\n shouldDelay,\n previous,\n current,\n submenuRect: {\n left: submenuRect.left,\n top: submenuRect.top,\n right: submenuRect.right,\n bottom: submenuRect.bottom,\n },\n direction,\n },\n })\n );\n } catch {\n // ignore\n }\n }\n\n notifyChildOpened(child: CoarMenuCascade): void {\n if (this.activeChild === child) {\n this.attachActivePanelListener();\n }\n }\n\n notifyChildClosed(child: CoarMenuCascade): void {\n if (this.activeChild === child) {\n this.activeChild = null;\n this.detachActivePanelListener();\n this.cancelPendingSwitch();\n this.stopPointerTracking();\n }\n }\n\n private activateNow(child: CoarMenuCascade, activate: () => void): void {\n this.cancelPendingSwitch();\n this.activeChild = child;\n this.ensurePointerTracking();\n activate();\n }\n\n private scheduleSwitch(child: CoarMenuCascade, activate: () => void, delayMs: number): void {\n this.cancelPendingSwitch();\n\n this.pendingChild = child;\n this.pendingActivate = activate;\n this.pendingSwitchTimer = setTimeout(() => {\n const pendingChild = this.pendingChild;\n const pendingActivate = this.pendingActivate;\n\n this.pendingChild = null;\n this.pendingActivate = null;\n this.pendingSwitchTimer = null;\n\n if (!pendingChild || !pendingActivate) return;\n this.activeChild = pendingChild;\n this.ensurePointerTracking();\n pendingActivate();\n }, delayMs);\n }\n\n private cancelPendingSwitch(): void {\n if (this.pendingSwitchTimer) {\n clearTimeout(this.pendingSwitchTimer);\n this.pendingSwitchTimer = null;\n }\n this.pendingChild = null;\n this.pendingActivate = null;\n }\n\n private ensurePointerTracking(): void {\n if (this.pointerAbort) return;\n if (typeof document === 'undefined') return;\n\n const abort = new AbortController();\n this.pointerAbort = abort;\n\n const onMove = (e: PointerEvent) => {\n this.pushPointerPoint({ x: e.clientX, y: e.clientY, t: Date.now() });\n };\n\n document.addEventListener('pointermove', onMove, { signal: abort.signal, passive: true });\n }\n\n private stopPointerTracking(): void {\n if (!this.pointerAbort) return;\n this.pointerAbort.abort();\n this.pointerAbort = null;\n this.pointerHistory = [];\n }\n\n private pushPointerPoint(point: CoarMenuAimPoint): void {\n this.pointerHistory.push(point);\n if (this.pointerHistory.length > 5) {\n this.pointerHistory = this.pointerHistory.slice(-5);\n }\n }\n\n private getActiveChildSubmenuRect(): DOMRect | null {\n const panelEl = this.activeChild?.overlayRef?.getPanelElement?.();\n if (!panelEl) return null;\n return panelEl.getBoundingClientRect();\n }\n\n private inferSubmenuDirection(rect: DOMRect, point: { x: number; y: number }): 'right' | 'left' {\n // If the submenu's left edge is to the right of the pointer, it's a right-opening flyout.\n // Otherwise, assume left.\n return rect.left >= point.x ? 'right' : 'left';\n }\n\n private attachActivePanelListener(): void {\n this.detachActivePanelListener();\n\n const panelEl = this.activeChild?.overlayRef?.getPanelElement?.();\n if (!panelEl) return;\n\n const onEnter = () => {\n // Once the user reaches the currently open submenu panel, don't allow a delayed switch\n // to steal focus/open another sibling submenu.\n this.cancelPendingSwitch();\n };\n\n panelEl.addEventListener('pointerenter', onEnter);\n this.activePanelCleanup = () => panelEl.removeEventListener('pointerenter', onEnter);\n }\n\n private detachActivePanelListener(): void {\n this.activePanelCleanup?.();\n this.activePanelCleanup = null;\n }\n\n /**\n * Close all sibling submenus at the cascade level.\n * Used for inline menus where siblings don't have a common parent overlay.\n */\n closeSiblings(): void {\n if (this.parent) {\n for (const sibling of this.parent.children) {\n if (sibling !== this && sibling.overlayRef) {\n sibling.overlayRef.close();\n }\n }\n }\n }\n\n destroy(): void {\n this.detachActivePanelListener();\n this.cancelPendingSwitch();\n this.stopPointerTracking();\n if (this.parent) {\n this.parent.children.delete(this);\n }\n }\n}\n\nexport const COAR_MENU_CASCADE = new InjectionToken<CoarMenuCascade>('COAR_MENU_CASCADE');\n","import { Directive, input, inject } from '@angular/core';\nimport {\n COAR_MENU_AIM_CONFIG,\n DEFAULT_COAR_MENU_AIM_CONFIG,\n type CoarMenuAimConfig,\n type CoarMenuAimConfigProvider,\n} from './coar-menu-aim-config';\n\n@Directive({\n selector: '[coarMenuAimConfig]',\n standalone: true,\n providers: [{ provide: COAR_MENU_AIM_CONFIG, useExisting: CoarMenuAimConfigDirective }],\n})\nexport class CoarMenuAimConfigDirective implements CoarMenuAimConfigProvider {\n private readonly parent = inject(COAR_MENU_AIM_CONFIG, { optional: true, skipSelf: true });\n\n /** Enable/disable menu-aim for this menu tree. */\n readonly aimEnabled = input<boolean | undefined>(undefined);\n\n /** Emit debug events for menu-aim visualization (showcase only). */\n readonly aimDebugEnabled = input<boolean | undefined>(undefined);\n\n /** Delay before switching to a newly hovered sibling submenu when aim is detected. */\n readonly aimSwitchDelayMs = input<number | undefined>(undefined);\n\n /** Maximum age of the last pointer sample used for intent detection. */\n readonly aimSampleMaxAgeMs = input<number | undefined>(undefined);\n\n getMenuAimConfig(): CoarMenuAimConfig {\n const base = this.parent?.getMenuAimConfig() ?? DEFAULT_COAR_MENU_AIM_CONFIG;\n\n return {\n enabled: this.aimEnabled() ?? base.enabled,\n debugEnabled: this.aimDebugEnabled() ?? base.debugEnabled,\n switchDelayMs: this.aimSwitchDelayMs() ?? base.switchDelayMs,\n sampleMaxAgeMs: this.aimSampleMaxAgeMs() ?? base.sampleMaxAgeMs,\n };\n }\n}\n","import { Component, ChangeDetectionStrategy, inject, input } from '@angular/core';\nimport { COAR_MENU_CASCADE, CoarMenuCascade } from './coar-menu-cascade';\nimport { COAR_OVERLAY_REF } from '@cocoar/ui-overlay';\nimport { CoarMenuAimConfigDirective } from './coar-menu-aim-config.directive';\n\n/**\n * CoarMenu: Shell component providing menu styling container.\n *\n * Responsibilities:\n * - Apply consistent menu styling via CSS variables\n * - Provide semantic menu container (<menu> or <div role=\"menu\">)\n * - Provide root cascade for sibling submenu tracking\n * - No logic - just a styled wrapper\n *\n * Use standalone for inline menus, or as overlay content (via `createOverlayBuilder`) for context menus/flyouts.\n *\n * @example\n * ```html\n * <coar-menu>\n * <coar-menu-item>Action 1</coar-menu-item>\n * <coar-menu-item>Action 2</coar-menu-item>\n * <coar-menu-divider></coar-menu-divider>\n * <coar-menu-item>Action 3</coar-menu-item>\n * </coar-menu>\n * ```\n */\n@Component({\n selector: 'coar-menu',\n standalone: true,\n imports: [],\n hostDirectives: [\n {\n directive: CoarMenuAimConfigDirective,\n inputs: ['aimEnabled', 'aimDebugEnabled', 'aimSwitchDelayMs', 'aimSampleMaxAgeMs'],\n },\n ],\n templateUrl: './coar-menu.component.html',\n styleUrl: './coar-menu.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'menu',\n class: 'coar-menu',\n '[class.coar-menu--in-overlay]': 'isInOverlay()',\n '[style.--coar-menu-icon-slot-display]': 'showIconColumn() ? null : \"none\"',\n '[style.--coar-menu-item-icon-slot-size]': 'showIconColumn() ? null : \"0px\"',\n },\n providers: [\n {\n provide: COAR_MENU_CASCADE,\n useFactory: () => {\n // Check if we're inside an overlay\n const inOverlay = inject(COAR_OVERLAY_REF, { optional: true });\n const parentCascade = inject(COAR_MENU_CASCADE, { optional: true, skipSelf: true });\n\n if (inOverlay && parentCascade) {\n // We're a menu inside a submenu overlay\n // Create a new cascade as a child of the parent, so sibling submenu-items\n // at this level can track each other\n return new CoarMenuCascade(parentCascade);\n }\n\n // For root menus (inline or context menu), create a new root cascade\n return new CoarMenuCascade(parentCascade);\n },\n },\n ],\n})\nexport class CoarMenuComponent {\n private readonly overlayRef = inject(COAR_OVERLAY_REF, { optional: true });\n\n /**\n * Controls whether the menu reserves and renders an icon column.\n *\n * Default is enabled to avoid layout shift for stateful icons (e.g. checkmarks).\n * Set to false for text-only menus (icons will not render).\n */\n readonly showIconColumn = input(true);\n\n /**\n * Check if this menu is rendered inside an overlay (flyout).\n * Used to enable border visibility for menu items.\n */\n protected isInOverlay(): boolean {\n return this.overlayRef !== null;\n }\n}\n","<ng-content />\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n HostListener,\n inject,\n} from '@angular/core';\nimport { CoarIconComponent } from '@cocoar/ui-components';\nimport { COAR_MENU_PARENT } from '@cocoar/ui-overlay';\n\n/**\n * Event emitted when a menu item is clicked.\n * Provides control over menu closing behavior.\n */\nexport interface CoarMenuItemClickEvent {\n /** Call this to keep the menu open after clicking (prevents auto-close) */\n keepMenuOpen(): void;\n /** Original mouse event */\n event: MouseEvent;\n}\n\n/**\n * CoarMenuItem: Individual menu item with optional icon and submenu support.\n *\n * Responsibilities:\n * - Render item text and optional icon\n * - Handle click events\n * - Support disabled state\n * - Visual states: hover, active, focus\n * - Trigger submenu (accordion or flyout via parent menu logic)\n *\n * Does NOT manage overlay directly - parent menu handles flyout logic.\n *\n * @example\n * ```html\n * <coar-menu-item (itemClick)=\"onSave()\">Save</coar-menu-item>\n * <coar-menu-item icon=\"copy\">Copy</coar-menu-item>\n * <coar-menu-item [disabled]=\"true\">Unavailable</coar-menu-item>\n *\n * <!-- Prevent menu from closing on click: -->\n * <coar-menu-item (itemClick)=\"toggle($event)\">Toggle Setting</coar-menu-item>\n *\n * toggle(event: CoarMenuItemClickEvent) {\n * event.keepMenuOpen(); // Keep menu open\n * this.setting = !this.setting;\n * }\n * ```\n */\n@Component({\n selector: 'coar-menu-item',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-menu-item.component.html',\n styleUrl: './coar-menu-item.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'menuitem',\n class: 'coar-menu-item',\n '[class.coar-menu-item--disabled]': 'disabled()',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n },\n})\nexport class CoarMenuItemComponent {\n private readonly parentOverlay = inject(COAR_MENU_PARENT, { optional: true });\n\n /** Item text content */\n readonly label = input<string>();\n\n /** Optional icon identifier (rendered via CoarIconComponent) */\n readonly icon = input<string | undefined>(undefined);\n\n /** Disabled state prevents interaction */\n readonly disabled = input(false);\n\n /** Emitted when user clicks/selects the item. Menu closes by default unless preventDefault() is called. */\n readonly itemClick = output<CoarMenuItemClickEvent>();\n\n /** Emitted when user hovers over item (for flyout trigger) */\n readonly itemHover = output<Event>();\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n // Always stop propagation to prevent overlay's outside-click handler\n event.stopPropagation();\n\n let shouldClose = true;\n\n const clickEvent: CoarMenuItemClickEvent = {\n event,\n keepMenuOpen: () => {\n shouldClose = false;\n },\n };\n\n this.itemClick.emit(clickEvent);\n\n // Close root overlay after Angular's change detection and OUTSIDE the hover area\n const parentOverlay = this.parentOverlay;\n if (shouldClose && parentOverlay) {\n setTimeout(() => {\n // Close the ROOT overlay to ensure the entire menu tree closes\n const root = parentOverlay.getRoot();\n root.close();\n }, 10);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n onMouseEnter(event: MouseEvent): void {\n if (!this.disabled()) {\n this.itemHover.emit(event);\n }\n }\n\n @HostListener('keydown.enter')\n @HostListener('keydown.space')\n onKeyboardActivate(): void {\n if (this.disabled()) {\n return;\n }\n\n let shouldClose = true;\n\n const clickEvent: CoarMenuItemClickEvent = {\n event: new MouseEvent('click'), // Synthetic event for keyboard\n keepMenuOpen: () => {\n shouldClose = false;\n },\n };\n\n this.itemClick.emit(clickEvent);\n\n const parentOverlay = this.parentOverlay;\n if (shouldClose && parentOverlay) {\n setTimeout(() => {\n // Close the ROOT overlay to ensure the entire menu tree closes\n const root = parentOverlay.getRoot();\n root.close();\n }, 10);\n }\n }\n}\n","<span class=\"coar-menu-item__icon\" aria-hidden=\"true\">\n <coar-icon [name]=\"icon() || 'square-rounded-dashed'\" size=\"sm\" aria-hidden=\"true\" />\n</span>\n<span class=\"coar-menu-item__label\">\n @if (label()) {\n {{ label() }}\n } @else {\n <ng-content />\n }\n</span>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n/**\n * CoarMenuDivider: Visual separator between menu items.\n *\n * Simple horizontal line for grouping menu items.\n *\n * @example\n * ```html\n * <coar-menu>\n * <coar-menu-item>Cut</coar-menu-item>\n * <coar-menu-item>Copy</coar-menu-item>\n * <coar-menu-divider></coar-menu-divider>\n * <coar-menu-item>Paste</coar-menu-item>\n * </coar-menu>\n * ```\n */\n@Component({\n selector: 'coar-menu-divider',\n standalone: true,\n imports: [],\n template: '',\n styleUrl: './coar-menu-divider.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n class: 'coar-menu-divider',\n },\n})\nexport class CoarMenuDividerComponent {}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n/**\n * CoarMenuHeading: Non-interactive section label for menu groups.\n *\n * Responsibilities:\n * - Display section/group heading text\n * - Provide visual separation between menu sections\n * - Non-interactive (no hover, no click, not focusable)\n *\n * @example\n * ```html\n * <coar-menu>\n * <coar-menu-heading>Foundations</coar-menu-heading>\n * <coar-menu-item routerLink=\"/typography\">Typography</coar-menu-item>\n * <coar-menu-item routerLink=\"/colors\">Colors</coar-menu-item>\n *\n * <coar-menu-heading>Form Controls</coar-menu-heading>\n * <coar-menu-item routerLink=\"/text-input\">Text Input</coar-menu-item>\n * </coar-menu>\n * ```\n */\n@Component({\n selector: 'coar-menu-heading',\n standalone: true,\n imports: [],\n template: `\n <div class=\"coar-menu-heading\">\n @if (label()) {\n {{ label() }}\n } @else {\n <ng-content />\n }\n </div>\n `,\n styleUrl: './coar-menu-heading.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'coar-menu-heading-host',\n },\n})\nexport class CoarMenuHeadingComponent {\n /** Optional explicit label text (alternative to content projection) */\n readonly label = input<string>();\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Marks an inline submenu template for a `coar-submenu-item`.\n *\n * This is optional: if a submenu item contains exactly one direct child `<ng-template>`,\n * that template will be used even without this directive.\n */\n@Directive({\n selector: 'ng-template[coarSubmenu]',\n standalone: true,\n})\nexport class CoarSubmenuTemplateDirective {\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n input,\n ContentChild,\n ViewChild,\n TemplateRef,\n inject,\n DestroyRef,\n Injector,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CoarIconComponent } from '@cocoar/ui-components';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n COAR_MENU_PARENT,\n coarHoverMenuPreset,\n createOverlayBuilder,\n type OverlayRef,\n} from '@cocoar/ui-overlay';\nimport { COAR_MENU_CASCADE, CoarMenuCascade } from './coar-menu-cascade';\nimport { CoarSubmenuTemplateDirective } from './coar-submenu-template.directive';\n\n/**\n * CoarSubmenuItem: Menu item that opens a submenu on hover.\n *\n * Responsibilities:\n * - Render parent item with icon and label\n * - Manage submenu overlay lifecycle\n * - Support nested submenus (can contain other submenu-items)\n *\n * @example\n * ```html\n * <coar-submenu-item label=\"Share\" icon=\"🔗\">\n * <ng-template>\n * <coar-menu-item icon=\"✉️\" (itemClick)=\"sendEmail()\">Email</coar-menu-item>\n * <coar-menu-item icon=\"🔗\" (itemClick)=\"copyLink()\">Copy Link</coar-menu-item>\n * </ng-template>\n * </coar-submenu-item>\n *\n * <!-- Optional: explicitly mark the template -->\n * <coar-submenu-item label=\"Share\" icon=\"🔗\">\n * <ng-template coarSubmenu>\n * ...\n * </ng-template>\n * </coar-submenu-item>\n *\n * <!-- Also supported (legacy / external template): -->\n * <coar-submenu-item label=\"Share\" icon=\"🔗\" [submenuTemplate]=\"shareMenu\" />\n * ```\n */\n@Component({\n selector: 'coar-submenu-item, coar-sub-flyout',\n standalone: true,\n imports: [CommonModule, CoarIconComponent],\n template: `\n <div\n class=\"coar-submenu-item\"\n [class.coar-submenu-item--disabled]=\"disabled()\"\n [class.coar-submenu-item--open]=\"isOpen\"\n [attr.role]=\"'menuitem'\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (mouseenter)=\"onMouseEnter($event)\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onKeyboardActivate($event)\"\n (keydown.space)=\"onKeyboardActivate($event)\"\n >\n <span class=\"coar-submenu-item__icon\" aria-hidden=\"true\">\n <coar-icon [name]=\"icon() || 'square-rounded-dashed'\" size=\"sm\" aria-hidden=\"true\" />\n </span>\n <span class=\"coar-submenu-item__label\">{{ label() }}</span>\n <coar-icon\n name=\"chevron-right\"\n size=\"xs\"\n class=\"coar-submenu-item__arrow\"\n aria-hidden=\"true\"\n />\n </div>\n\n <ng-template #overlaySubmenuTemplate>\n <ng-container\n *ngTemplateOutlet=\"submenuTemplateToRender(); injector: submenuTemplateInjector\"\n />\n </ng-template>\n `,\n styleUrl: './coar-submenu-item.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: COAR_MENU_CASCADE,\n useFactory: () =>\n new CoarMenuCascade(inject(COAR_MENU_CASCADE, { optional: true, skipSelf: true })),\n },\n ],\n})\nexport class CoarSubmenuItemComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly cascade = inject(COAR_MENU_CASCADE);\n private readonly parentOverlay = inject(COAR_MENU_PARENT, { optional: true });\n private readonly injector = inject(Injector);\n private readonly overlayBuilder = createOverlayBuilder();\n\n // Ensures the submenu TemplateRef is instantiated with a parent injector that contains\n // the correct cascade instance for this submenu item. Without this, TemplateRefs declared\n // outside of this component can end up resolving menu context from the declaration site.\n protected readonly submenuTemplateInjector = Injector.create({\n providers: [{ provide: COAR_MENU_CASCADE, useValue: this.cascade }],\n parent: this.injector,\n });\n\n constructor() {\n // Cleanup cascade when component is destroyed\n this.destroyRef.onDestroy(() => {\n this.cascade.destroy();\n // Ensure state is cleared on destroy\n if (this.isOpen) {\n this.isOpen = false;\n this.submenuRef = null;\n }\n });\n }\n\n /** Label text for the menu item */\n readonly label = input.required<string>();\n\n /** Optional icon identifier */\n readonly icon = input<string | undefined>(undefined);\n\n /** Disabled state prevents interaction */\n readonly disabled = input(false);\n\n /**\n * Optional external submenu template.\n *\n * Prefer an inline `<ng-template>` child when possible.\n */\n readonly submenuTemplate = input<TemplateRef<unknown> | null>(null);\n\n /**\n * Optional data to pass to the submenu template.\n *\n * If provided, this data will be passed as the context to the submenu template,\n * instead of inheriting the parent overlay's context.\n *\n * Use this to create clean boundaries between parent and submenu:\n * - Simple case: `[submenuData]=\"context\"` (pass full context)\n * - Complex case: `[submenuData]=\"transformData(context)\"` (pass only what submenu needs)\n *\n * @example\n * ```html\n * <!-- Pass specific data contract to submenu -->\n * <coar-submenu-item\n * label=\"Status\"\n * [submenuTemplate]=\"statusMenu\"\n * [submenuData]=\"{ selectedIds: context.selected.map(s => s.Id) }\">\n * </coar-submenu-item>\n * ```\n */\n readonly submenuData = input<unknown>(undefined);\n\n @ContentChild(CoarSubmenuTemplateDirective, { descendants: false })\n private readonly markedInlineTemplate?: CoarSubmenuTemplateDirective;\n\n @ContentChild(TemplateRef, { descendants: false })\n private readonly inlineTemplate?: TemplateRef<unknown>;\n\n @ViewChild('overlaySubmenuTemplate') private overlaySubmenuTemplate!: TemplateRef<unknown>;\n\n private submenuRef: OverlayRef | null = null;\n isOpen = false;\n\n protected submenuTemplateToRender(): TemplateRef<unknown> {\n const template =\n this.markedInlineTemplate?.templateRef ?? this.inlineTemplate ?? this.submenuTemplate();\n\n if (!template) {\n throw new Error(\n 'CoarSubmenuItemComponent: missing submenu content. Provide either an inline <ng-template> child or set [submenuTemplate].'\n );\n }\n\n return template;\n }\n\n onMouseEnter(event: MouseEvent): void {\n if (this.disabled()) {\n return;\n }\n\n // Defensive: sync state with actual overlay status\n if (this.submenuRef) {\n if (this.submenuRef.isClosed) {\n // Overlay is closed, clear everything\n this.submenuRef = null;\n this.isOpen = false;\n this.cdr.markForCheck();\n } else if (!this.isOpen) {\n // Overlay is open but state is wrong - fix it\n this.isOpen = true;\n this.cdr.markForCheck();\n }\n }\n\n // Open submenu if not already open\n if (!this.submenuRef) {\n const anchor = event.currentTarget as HTMLElement;\n\n // Menu-aim: when a different sibling submenu is already open, delay switching\n // if the pointer trajectory suggests the user is heading into the open submenu panel.\n const parent = this.cascade.parent;\n if (parent) {\n parent.requestOpenFromChild(this.cascade, () => this.openSubmenu(anchor), {\n x: event.clientX,\n y: event.clientY,\n });\n } else {\n this.openSubmenu(anchor);\n }\n }\n }\n\n onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (this.submenuRef?.isClosed) {\n this.submenuRef = null;\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n\n // For accessibility: toggle on click/Enter/Space\n if (this.submenuRef) {\n this.closeSubmenu();\n } else {\n this.openSubmenu(event.currentTarget as HTMLElement);\n }\n }\n\n onKeyboardActivate(event: Event): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (this.submenuRef?.isClosed) {\n this.submenuRef = null;\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n\n const target = event.currentTarget as HTMLElement;\n if (this.submenuRef) {\n this.closeSubmenu();\n } else {\n this.openSubmenu(target);\n }\n }\n\n private openSubmenu(anchorElement: HTMLElement): void {\n // Validate early so the error points at the submenu item usage.\n this.submenuTemplateToRender();\n\n // Determine what data to pass to the submenu template\n const submenuContextData = this.submenuData();\n\n const opener = this.overlayBuilder\n .withPreset(coarHoverMenuPreset)\n .anchor({ kind: 'element', element: anchorElement })\n .position({ placement: ['right-start', 'left-start'], offset: -4, flip: true, shift: true })\n .fromTemplate(this.overlaySubmenuTemplate);\n\n // Prefer the cascade parent's overlayRef when available.\n // With Angular content projection, submenu content can be instantiated in the *root* overlay\n // injector even when it's rendered inside a child overlay. The cascade chain preserves the\n // correct containing overlay via overlayRef.\n const containingOverlay = this.cascade.parent?.overlayRef ?? this.parentOverlay;\n\n if (containingOverlay) {\n // Inside an overlay: close siblings (direct children of parent) then open as child\n // First, create the child overlay\n // Pass submenuData if provided, otherwise undefined (inherits parent context via $implicit)\n this.submenuRef = opener.openAsChild(containingOverlay, submenuContextData);\n\n // Then close siblings, excluding the newly opened one\n containingOverlay.closeChildren(this.submenuRef);\n } else {\n // Inline menu: use cascade-level sibling closure\n this.cascade.closeSiblings();\n this.submenuRef = opener.open(submenuContextData);\n }\n\n // Expose the overlay ref to descendants so they can parent their own flyouts correctly.\n this.cascade.overlayRef = this.submenuRef;\n this.cascade.parent?.notifyChildOpened(this.cascade);\n\n this.isOpen = true;\n this.cdr.markForCheck();\n\n const openedRef = this.submenuRef;\n\n // Clear the active styling as soon as a close is initiated (e.g. hoverTree timer,\n // outside click, or sibling submenu switch). Otherwise the item can look \"stuck\"\n // while the overlay finishes its close transition.\n const originalClose = openedRef.close.bind(openedRef);\n openedRef.close = (result?: unknown) => {\n if (this.submenuRef === openedRef && this.isOpen) {\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n\n originalClose(result);\n };\n\n openedRef.afterClosed$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n // Only clear state if this is still the current overlay\n // (prevents race condition when rapidly opening new overlays)\n if (this.submenuRef === openedRef) {\n this.submenuRef = null;\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n\n if (this.cascade.overlayRef === openedRef) {\n this.cascade.overlayRef = null;\n }\n\n this.cascade.parent?.notifyChildClosed(this.cascade);\n });\n }\n\n // Parent overlay is resolved via COAR_OVERLAY_REF when rendered inside an overlay.\n\n private closeSubmenu(): void {\n this.submenuRef?.close();\n this.submenuRef = null;\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n TemplateRef,\n booleanAttribute,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CoarIconComponent } from '@cocoar/ui-components';\nimport { CoarSubmenuTemplateDirective } from './coar-submenu-template.directive';\n\n/**\n * CoarSubExpand: Menu item that expands/collapses a submenu inline.\n *\n * Use this variant when you want nested options to stay visible (e.g. sidebar panels)\n * while still reusing the same menu item types inside the submenu.\n *\n * @example\n * ```html\n * <coar-menu>\n * <coar-sub-expand label=\"Filters\" icon=\"settings\" [(open)]=\"filtersOpen\">\n * <ng-template>\n * <coar-menu>\n * <coar-menu-item icon=\"plus\">Add Filter</coar-menu-item>\n * <coar-menu-item icon=\"trash\">Clear</coar-menu-item>\n * </coar-menu>\n * </ng-template>\n </coar-sub-expand>\n * </coar-menu>\n * ```\n */\n@Component({\n selector: 'coar-sub-expand',\n standalone: true,\n imports: [CommonModule, CoarIconComponent],\n template: `\n <div\n class=\"coar-sub-expand\"\n [class.coar-sub-expand--disabled]=\"disabled()\"\n [class.coar-sub-expand--open]=\"isOpen()\"\n [attr.role]=\"'menuitem'\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"toggle($event)\"\n (keydown.enter)=\"toggle($event)\"\n (keydown.space)=\"toggle($event)\"\n >\n <span class=\"coar-sub-expand__icon\" aria-hidden=\"true\">\n <coar-icon [name]=\"icon() || 'square-rounded-dashed'\" size=\"sm\" aria-hidden=\"true\" />\n </span>\n <span class=\"coar-sub-expand__label\">{{ label() }}</span>\n <coar-icon\n [name]=\"isOpen() ? 'minus' : 'plus'\"\n size=\"xs\"\n class=\"coar-sub-expand__arrow\"\n aria-hidden=\"true\"\n />\n </div>\n\n <div\n class=\"coar-sub-expand__panel\"\n [class.coar-sub-expand__panel--open]=\"isOpen()\"\n [attr.aria-hidden]=\"isOpen() ? null : 'true'\"\n role=\"group\"\n >\n <div class=\"coar-sub-expand__panel-inner\">\n <ng-container *ngTemplateOutlet=\"submenuTemplateToRender()\" />\n </div>\n </div>\n `,\n styleUrl: './coar-sub-expand.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarSubExpandComponent {\n /** Label text for the menu item */\n readonly label = input.required<string>();\n\n /** Optional icon identifier */\n readonly icon = input<string | undefined>(undefined);\n\n /** Disabled state prevents interaction */\n readonly disabled = input(false);\n\n /** Expanded state (two-way bindable with [(open)]) */\n readonly open = input<boolean | undefined, unknown>(undefined, { transform: booleanAttribute });\n\n /** Emits when expanded state changes (for [(open)]) */\n readonly openChange = output<boolean>();\n\n private readonly openInternal = signal(false);\n\n protected readonly isOpen = computed(() => this.open() ?? this.openInternal());\n\n /** Optional external submenu template. Prefer an inline `<ng-template>` child when possible. */\n readonly submenuTemplate = input<TemplateRef<unknown> | null>(null);\n\n @ContentChild(CoarSubmenuTemplateDirective, { descendants: false })\n private readonly markedInlineTemplate?: CoarSubmenuTemplateDirective;\n\n @ContentChild(TemplateRef, { descendants: false })\n private readonly inlineTemplate?: TemplateRef<unknown>;\n\n protected submenuTemplateToRender(): TemplateRef<unknown> {\n const template =\n this.markedInlineTemplate?.templateRef ?? this.inlineTemplate ?? this.submenuTemplate();\n\n if (!template) {\n throw new Error(\n 'CoarSubExpandComponent: missing submenu content. Provide either an inline <ng-template> child or set [submenuTemplate].'\n );\n }\n\n return template;\n }\n\n constructor() {\n effect(() => {\n const value = this.open();\n if (value === undefined) return;\n\n this.openInternal.set(value);\n });\n }\n\n toggle(event: Event): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const next = !this.isOpen();\n this.openInternal.set(next);\n this.openChange.emit(next);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CoarMenuAimConfigDirective"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocoar/ui-menu",
3
- "version": "0.1.0-beta.79",
3
+ "version": "0.1.0-beta.82",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0",
@@ -40,7 +40,7 @@ declare class CoarMenuAimConfigDirective implements CoarMenuAimConfigProvider {
40
40
  * - Provide root cascade for sibling submenu tracking
41
41
  * - No logic - just a styled wrapper
42
42
  *
43
- * Use standalone for inline menus, or as content in CoarOverlayService for context menus/flyouts.
43
+ * Use standalone for inline menus, or as overlay content (via `createOverlayBuilder`) for context menus/flyouts.
44
44
  *
45
45
  * @example
46
46
  * ```html
@@ -202,12 +202,12 @@ declare class CoarMenuHeadingComponent {
202
202
  * ```
203
203
  */
204
204
  declare class CoarSubmenuItemComponent {
205
- private readonly overlayService;
206
205
  private readonly destroyRef;
207
206
  private readonly cdr;
208
207
  private readonly cascade;
209
208
  private readonly parentOverlay;
210
209
  private readonly injector;
210
+ private readonly overlayBuilder;
211
211
  protected readonly submenuTemplateInjector: _angular_core.DestroyableInjector;
212
212
  constructor();
213
213
  /** Label text for the menu item */