{"version":3,"file":"forty-cdk-dropdown-menu.mjs","sources":["../../../projects/forty-cdk/dropdown-menu/src/dropdown-menu-defaults.ts","../../../projects/forty-cdk/dropdown-menu/src/dropdown-menu.ts","../../../projects/forty-cdk/dropdown-menu/src/dropdown-menu-trigger.ts","../../../projects/forty-cdk/dropdown-menu/src/forty-cdk-dropdown-menu.ts"],"sourcesContent":["import { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\nimport {\n  type AnchoredPositioningSeedDefaults,\n  type FloatingAlign,\n  type FloatingFallbackAxisSideDirection,\n  type FloatingSide,\n} from 'forty-cdk/core-overlay';\n\n/**\n * Defaults inherited by descendant dropdown menus in the surrounding\n * injector scope. Configure with `provideForDropdownMenuDefaults` either\n * at the application root or in any component's `providers` array; partial\n * overrides merge with the parent scope.\n */\nexport interface ForDropdownMenuDefaults extends AnchoredPositioningSeedDefaults {\n  /**\n   * Side the menu is anchored to for dropdowns that don't override `side`\n   * locally. Library fallback `'bottom'`.\n   */\n  side: FloatingSide;\n  /**\n   * Alignment along the chosen `side` for dropdowns that don't override\n   * `align` locally. Library fallback `'start'`.\n   */\n  align: FloatingAlign;\n  /**\n   * Distance (px) between the dropdown trigger and the floating content\n   * along the resolved `side` axis.\n   */\n  sideOffset: number;\n  /**\n   * Padding (px) added to the viewport edges for collision-aware\n   * positioning. Higher values keep the floating content further from\n   * the edge when `flip` / `shift` runs.\n   */\n  collisionPadding: number;\n  /**\n   * Direction `flip` falls back to on the perpendicular axis when both sides\n   * of the preferred axis overflow. `'none'` (default) keeps only the opposite\n   * same-axis placement; `'start'` / `'end'` let a menu clipped on a narrow\n   * viewport drop to a perpendicular side. Only consulted when\n   * `avoidCollisions` is on.\n   */\n  fallbackAxisSideDirection: FloatingFallbackAxisSideDirection;\n}\n\n/**\n * Library fallback for dropdown menu defaults, read at the root injector when no\n * consumer has called `provideForDropdownMenuDefaults`. Exported for the shared defaults\n * contract spec; not re-exported from the primitive's public entry.\n */\nexport const FOR_DROPDOWN_MENU_FALLBACK_DEFAULTS: ForDropdownMenuDefaults = {\n  side: 'bottom',\n  align: 'start',\n  sideOffset: 4,\n  collisionPadding: 8,\n  fallbackAxisSideDirection: 'none',\n};\n\nconst { token, provideDefaults } = createDefaults<ForDropdownMenuDefaults>(\n  'FOR_DROPDOWN_MENU_DEFAULTS',\n  FOR_DROPDOWN_MENU_FALLBACK_DEFAULTS,\n);\n\n/** Token holding the resolved dropdown-menu defaults for the current scope. */\nexport const FOR_DROPDOWN_MENU_DEFAULTS = token;\n\n/**\n * Configures forty-cdk dropdown-menu defaults for this injector scope.\n * Partial overrides inherit unspecified keys from the parent scope (or\n * library defaults at the root).\n */\nexport function provideForDropdownMenuDefaults(\n  defaults: Partial<ForDropdownMenuDefaults> = {},\n): Provider[] {\n  return provideDefaults(defaults);\n}\n","import { booleanAttribute, Directive, inject, input, model, output } from '@angular/core';\n\nimport {\n  type WritingDirection,\n  injectTextDirection,\n  type VetoableEvent,\n  type VetoableNativeEvent,\n} from 'forty-cdk/core';\nimport {\n  type AnchoredPositioningOverride,\n  type FloatingFallbackAxisSideDirection,\n  createMenuOverlay,\n  MenuOverlayHost,\n  FOR_MENU_CONTEXT,\n  type ForMenuContext,\n} from 'forty-cdk/core-overlay';\nimport { FOR_DROPDOWN_MENU_DEFAULTS } from './dropdown-menu-defaults';\n\n/**\n * Headless implementation of the [WAI-ARIA Menu Button pattern](https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/).\n * Apply on a wrapper that contains the trigger and the `@if`-mounted\n * `[forMenuContent]`. The directive owns open state, ids, and the registries\n * that wire trigger / content / items together.\n *\n * Mount/unmount of the visible menu is the consumer's responsibility — wrap\n * `[forMenuContent]` with `@if (open())` so `animate.enter` / `animate.leave`\n * fire on the natural mount cycle:\n *\n * ```html\n * <div forDropdownMenu [(open)]=\"open\">\n *   <button forDropdownMenuTrigger>Options</button>\n *   @if (open()) {\n *     <div forMenuContent>…</div>\n *   }\n * </div>\n * ```\n *\n * Selecting a `[forMenuItem]` closes the menu (call `event.preventDefault()`\n * on the item's `(activate)` event to keep it open). Escape, pointer-down\n * outside, and focus-outside also close — each emits a vetoable event.\n *\n * Most of the directive's body (id generation, item collection, typeahead,\n * navigate / focus helpers, escape / outside-click veto plumbing) is owned\n * by the shared `_internal/menu-overlay` helper. The directive contributes\n * the inputs / outputs / model that make up the public surface, the\n * trigger-anchored `anchor` and `dismissibleExemptions`, and the\n * `aria-haspopup=\"menu\"` / return-focus semantics specific to the\n * Menu Button pattern.\n */\n@Directive({\n  selector: '[forDropdownMenu]',\n  exportAs: 'forDropdownMenu',\n  host: {\n    '[attr.data-state]': 'open() ? \"open\" : \"closed\"',\n    '[attr.data-disabled]': 'disabled() ? \"\" : null',\n    '[attr.dir]': 'dir()',\n  },\n  providers: [{ provide: FOR_MENU_CONTEXT, useExisting: ForDropdownMenu }],\n})\nexport class ForDropdownMenu extends MenuOverlayHost implements ForMenuContext {\n  protected readonly positioningDefaults = inject(FOR_DROPDOWN_MENU_DEFAULTS);\n\n  /**\n   * Two-way bindable. Whether the menu is currently shown. The `model()`\n   * change emitter (`(openChange)`) fires only on internal transitions\n   * (trigger toggle, Escape, outside dismissal, item selection), never on\n   * consumer writes via `[(open)]`.\n   */\n  readonly open = model<boolean>(false);\n\n  /**\n   * Direction `flip` falls back to on the perpendicular axis when both sides of\n   * the preferred axis overflow. `'none'` (default) keeps only the opposite\n   * same-axis placement; `'start'` / `'end'` let the menu drop to a\n   * perpendicular side on a narrow viewport. Only consulted when\n   * `avoidCollisions` is on. The default is read from\n   * `provideForDropdownMenuDefaults` for the surrounding scope, since dropping\n   * to a perpendicular side is a design-system-wide viewport-degradation policy\n   * rather than a per-menu one.\n   */\n  readonly fallbackAxisSideDirection = input<FloatingFallbackAxisSideDirection>(\n    this.positioningDefaults.fallbackAxisSideDirection,\n  );\n\n  /**\n   * When `true` (default), arrow-key navigation wraps from the last enabled\n   * item back to the first (and vice versa). When `false`, navigation stops\n   * at the ends.\n   */\n  readonly loop = input(true, { transform: booleanAttribute });\n\n  /**\n   * Writing direction. Drives ArrowLeft / ArrowRight semantics on submenu\n   * triggers and items underneath this menu (in RTL, ArrowLeft opens a submenu\n   * and ArrowRight closes it back). When unset (default `null`), the inherited\n   * ambient direction is resolved from the nearest ancestor carrying a `dir`\n   * attribute (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]`\n   * always wins, the resolved value is reflected to the host `dir` attribute,\n   * and it is inherited by descendant submenus.\n   */\n  readonly _dirInput = input<WritingDirection | null>(null, { alias: 'dir' });\n  readonly dir = injectTextDirection(this._dirInput);\n\n  /**\n   * When true, trigger interaction is ignored and any open menu stays open\n   * until the consumer flips `open` themselves. The trigger reflects\n   * `data-disabled`; the items keep their per-item disabled semantics.\n   */\n  readonly disabled = input(false, { transform: booleanAttribute });\n\n  /** When true (default), Escape, pointer-down outside, and focus outside close the menu. */\n  readonly dismissible = input(true, { transform: booleanAttribute });\n\n  /** When true (default), focus returns to the trigger on close. */\n  readonly returnFocus = input(true, { transform: booleanAttribute });\n\n  /** Manual `aria-label` on `[forMenuContent]`. Use when the trigger isn't a meaningful name. */\n  readonly ariaLabel = input<string | null>(null);\n\n  /**\n   * Fires when Escape is pressed while the menu is open, just before it\n   * closes. Call `preventDefault()` on the emitted veto to keep the menu\n   * open and suppress the Escape-driven close.\n   */\n  readonly escapeKeyDown = output<VetoableNativeEvent<KeyboardEvent>>();\n\n  /**\n   * Fires on a pointer-down outside the menu (and outside the exempt\n   * trigger), just before it closes. Call `preventDefault()` on the veto to\n   * keep the menu open.\n   */\n  readonly pointerDownOutside = output<VetoableNativeEvent<PointerEvent>>();\n\n  /**\n   * Fires when focus moves outside the menu, just before it closes. Call\n   * `preventDefault()` on the veto to keep the menu open.\n   */\n  readonly focusOutside = output<VetoableNativeEvent<FocusEvent>>();\n\n  /**\n   * Composite outside-interaction channel: fires for either a\n   * pointer-down-outside or a focus-outside, just before the menu closes.\n   * Call `preventDefault()` on the veto to keep the menu open regardless of\n   * which interaction triggered it.\n   */\n  readonly interactOutside = output<VetoableNativeEvent<PointerEvent | FocusEvent>>();\n\n  /**\n   * Fires just before the menu sends focus to its first / last enabled\n   * item on mount. Call `preventDefault()` on the emitted veto to skip\n   * the imperative focus move — useful when opening a menu from an\n   * input you want to keep focused.\n   */\n  readonly autoFocusOnOpen = output<VetoableEvent>();\n\n  /**\n   * Fires just before focus returns to the trigger on unmount. Call\n   * `preventDefault()` on the veto to suppress the return-focus.\n   */\n  readonly autoFocusOnClose = output<VetoableEvent>();\n\n  protected readonly _overlay = createMenuOverlay('for-dropdown-menu', {\n    open: this.open,\n    disabled: this.disabled,\n    dismissible: this.dismissible,\n    loop: this.loop,\n    escapeKeyDown: this.escapeKeyDown,\n    pointerDownOutside: this.pointerDownOutside,\n    focusOutside: this.focusOutside,\n    interactOutside: this.interactOutside,\n    autoFocusOnOpen: this.autoFocusOnOpen,\n    autoFocusOnClose: this.autoFocusOnClose,\n  });\n\n  /** Trigger-anchored: the single registered opener's element. */\n  readonly anchor = this._overlay.openerAnchor;\n\n  /**\n   * The trigger's own `[menuPositioning]` override, resolved by the base ahead\n   * of this root's `[side]` / `[align]` / `[sideOffset]` / `[alignOffset]`. It\n   * runs through the opener registry so a trigger carries the same override\n   * here as it does under a shared `[forMenu]` root; with no override the four\n   * values are this root's inputs verbatim.\n   */\n  protected override positioningOverride(): AnchoredPositioningOverride | null {\n    return this._overlay.openerPositioning();\n  }\n\n  /**\n   * The trigger button is exempt — its own click handler toggles, so without the\n   * exemption the same pointer-down would also fire pointer-down-outside and\n   * double-close.\n   */\n  readonly dismissibleExemptions = this._overlay.openerExemptions;\n\n  /** Top-level: no parent menu. */\n  readonly parentMenu = null;\n}\n","import {\n  booleanAttribute,\n  computed,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  type Signal,\n} from '@angular/core';\n\nimport { hostButtonType, hostId, reflectDisabled, unresolvedRootError } from 'forty-cdk/core';\nimport {\n  asMenuOpenerRegistration,\n  FOR_MENU_CONTEXT,\n  type ForMenuContext,\n  type MenuActivationModality,\n  type MenuOpenerPositioning,\n} from 'forty-cdk/core-overlay';\n\n/**\n * Resolves the trigger's menu root: the explicit reference when the\n * `[forDropdownMenuTrigger]` input carries one, the injected `FOR_MENU_CONTEXT`\n * otherwise. The orphan error only fires when neither resolves, on first read\n * of the returned signal. Must be called in an injection context.\n */\nfunction injectDropdownMenuTriggerContext(\n  explicitRoot: Signal<ForMenuContext | ''>,\n): Signal<ForMenuContext> {\n  const injected = inject(FOR_MENU_CONTEXT, { optional: true });\n  return computed(() => {\n    const explicit = explicitRoot();\n    if (explicit !== '') {\n      return explicit;\n    }\n    if (injected) {\n      return injected;\n    }\n    throw unresolvedRootError({\n      code: 'FORCDK-DROPDOWN-MENU-001',\n      trigger: '[forDropdownMenuTrigger]',\n      root: '[forDropdownMenu]',\n      token: 'FOR_MENU_CONTEXT',\n      exportAs: 'forDropdownMenu',\n    });\n  });\n}\n\n/**\n * Button that toggles the dropdown menu when clicked, opens via Enter / Space\n * / ArrowDown (focus first item) or ArrowUp (focus last item).\n *\n * Apply on a `<button>`. Wires `aria-haspopup`, `aria-expanded`, and\n * `aria-controls` per the menu-button pattern.\n *\n * The open keys are handled on `keydown` and `preventDefault()`-ed, so Enter /\n * Space never reach the button's native click: per the APG menu-button pattern\n * they only ever *open* (the pointer click keeps its toggle semantics). When the\n * menu is already open they move focus to the requested first / last enabled\n * item instead of being dead keys — for instance after an\n * `(autoFocusOnOpen)`-vetoed open left focus on the trigger.\n *\n * The trigger distinguishes pointer from keyboard activation (a `pointerdown`\n * preceding the click marks it pointer-driven): both move focus to the first\n * item, but only a keyboard open highlights it — a mouse-opened menu carries\n * no `data-highlighted` until keyboard navigation.\n *\n * Disabling: the trigger merges its own `disabled` input OR the root's\n * `disabled`. The native `disabled` attribute is the single reflection channel\n * — no `aria-disabled` is emitted, because on a real single-purpose `<button>`\n * trigger the native attribute already conveys the state to assistive\n * technology. It is reflected imperatively and\n * non-destructively — the directive only removes the attribute when it set it\n * itself, so a consumer-set `disabled` on the same button always survives an\n * enabled menu context. `data-disabled=\"\"` stays as the styling hook.\n *\n * The root is normally resolved via DI from the enclosing `[forDropdownMenu]`.\n * When the trigger is declared inside an `ng-template` stamped into the root\n * (e.g. via `ngTemplateOutlet`), DI resolves at the template's declaration\n * site and misses the root — pass it explicitly through the selector input,\n * `routerLink`-style: `[forDropdownMenuTrigger]=\"root\"` with\n * `#root=\"forDropdownMenu\"`.\n */\n@Directive({\n  selector: '[forDropdownMenuTrigger]',\n  exportAs: 'forDropdownMenuTrigger',\n  host: {\n    '[attr.type]': 'buttonType()',\n    '[id]': 'id()',\n    '[attr.aria-haspopup]': '\"menu\"',\n    '[attr.aria-expanded]': 'ctx().open() ? \"true\" : \"false\"',\n    '[attr.aria-controls]': 'ctx().open() ? ctx().contentId() : null',\n    '[attr.data-state]': 'ctx().open() ? \"open\" : \"closed\"',\n    '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n    '(pointerdown)': 'onPointerDown()',\n    '(click)': 'onClick()',\n    '(keydown)': 'onKeyDown($event)',\n  },\n})\nexport class ForDropdownMenuTrigger {\n  protected readonly buttonType = hostButtonType();\n\n  readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n  #pointerActivation = false;\n\n  /**\n   * The trigger's own aria-wiring id, adopting a consumer-set static `id`. It is\n   * per-opener rather than per-root so a menu shared by several openers\n   * (`[forMenu]`) never emits the same `id` twice; the surface names itself after\n   * whichever opener is active. A button is a discrete labelling control, so the\n   * trigger registers as one and an unnamed surface it opened falls back to\n   * `aria-labelledby` pointing here.\n   */\n  readonly id = hostId('for-dropdown-menu-trigger');\n\n  /**\n   * Optional explicit reference to the `[forDropdownMenu]` root, named after\n   * the selector `routerLink`-style. The bare valueless attribute keeps\n   * resolving the enclosing root via DI; pass the root explicitly\n   * (`[forDropdownMenuTrigger]=\"root\"`, with `#root=\"forDropdownMenu\"`) when\n   * the trigger is declared in an `ng-template` stamped inside the root — DI\n   * resolves at the template's declaration site, so the enclosing root is\n   * invisible there. The empty string (what the valueless attribute yields)\n   * is treated as unset.\n   */\n  readonly forDropdownMenuTrigger = input<ForMenuContext | ''>('');\n\n  protected readonly ctx = injectDropdownMenuTriggerContext(this.forDropdownMenuTrigger);\n\n  readonly #openerRegistration = computed(() => asMenuOpenerRegistration(this.ctx()));\n\n  /** Disables this trigger only, in addition to the root's `disabled`. */\n  readonly disabled = input(false, { transform: booleanAttribute });\n\n  /**\n   * Placement override for the opens this trigger drives, falling back to the\n   * root's inputs for every key it leaves out. Only the four placement values\n   * are overridable (`side`, `align`, `sideOffset`, `alignOffset`); the rest of\n   * the positioning surface is collision policy the root owns.\n   *\n   * It exists for a menu shared by heterogeneous openers, where one root cannot\n   * pick offsets that suit them all — a button opener wants a few pixels of\n   * clearance, a pointer-anchored `[forContextMenuTrigger]` region wants to sit\n   * flush at the cursor:\n   *\n   * ```html\n   * <button [forDropdownMenuTrigger]=\"row\" [menuPositioning]=\"{ sideOffset: 4 }\">⋮</button>\n   * ```\n   *\n   * It resolves identically under a `[forDropdownMenu]` root, where it is\n   * simply a per-trigger spelling of the root's own inputs. A root with no\n   * opener registry (`[forMenubar]`'s multiplexed context, which multiplexes\n   * positioning off its own triggers) ignores it.\n   */\n  readonly menuPositioning = input<MenuOpenerPositioning | null>(null);\n\n  /** Whether the trigger is disabled — its own `disabled` input OR the root's. */\n  readonly effectiveDisabled = computed(() => this.disabled() || this.ctx().disabled());\n\n  constructor() {\n    const el = this.#host.nativeElement;\n    // Registration is an imperative call into the resolved root's registry,\n    // not state derivation — the effect only re-registers the element when the\n    // resolved root changes (explicit reference swapped at runtime).\n    effect((onCleanup) => {\n      const ctx = this.ctx();\n      const openers = this.#openerRegistration();\n      if (openers === null) {\n        ctx.registerTrigger(el);\n        onCleanup(() => ctx.unregisterTrigger(el));\n        return;\n      }\n      openers.registerOpener(el, {\n        id: this.id,\n        dismissibleExempt: true,\n        labelsMenu: true,\n        positioning: this.menuPositioning,\n      });\n      onCleanup(() => openers.unregisterOpener(el));\n    });\n    reflectDisabled(this.effectiveDisabled);\n  }\n\n  protected onPointerDown(): void {\n    this.#pointerActivation = true;\n  }\n\n  protected onClick(): void {\n    const modality: MenuActivationModality = this.#pointerActivation ? 'pointer' : 'keyboard';\n    this.#pointerActivation = false;\n    if (this.effectiveDisabled()) {\n      return;\n    }\n    this.#activate();\n    this.ctx().toggle('first', modality);\n  }\n\n  protected onKeyDown(event: KeyboardEvent): void {\n    this.#pointerActivation = false;\n    if (this.effectiveDisabled()) {\n      return;\n    }\n    if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown') {\n      event.preventDefault();\n      this.#activate();\n      this.ctx().openMenu('first');\n    } else if (event.key === 'ArrowUp') {\n      event.preventDefault();\n      this.#activate();\n      this.ctx().openMenu('last');\n    }\n  }\n\n  #activate(): void {\n    this.#openerRegistration()?.activateOpener(this.#host.nativeElement);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}