{"version":3,"file":"forty-cdk-hover-card.mjs","sources":["../../../projects/forty-cdk/hover-card/src/hover-card-context.ts","../../../projects/forty-cdk/hover-card/src/hover-card-defaults.ts","../../../projects/forty-cdk/hover-card/src/hover-card.ts","../../../projects/forty-cdk/hover-card/src/hover-card-trigger.ts","../../../projects/forty-cdk/hover-card/src/hover-card-content.ts","../../../projects/forty-cdk/hover-card/src/hover-card-arrow.ts","../../../projects/forty-cdk/hover-card/src/forty-cdk-hover-card.ts"],"sourcesContent":["import { computed, inject, InjectionToken, type Signal } from '@angular/core';\n\nimport { orphanContextError, unresolvedRootError } from 'forty-cdk/core';\nimport { type AnchoredPositioningContext, type Point } from 'forty-cdk/core-overlay';\n\n/** Why an open / close was scheduled. */\nexport type HoverCardScheduleReason = 'hover-trigger' | 'hover-content' | 'focus' | 'escape';\n\n/**\n * Read surface `[forHoverCard]` publishes through {@link FOR_HOVER_CARD_CONTEXT},\n * including the shared anchored-positioning members.\n */\nexport interface ForHoverCardContext extends AnchoredPositioningContext {\n  readonly open: Signal<boolean>;\n  readonly disabled: Signal<boolean>;\n  /** Whether `prefers-reduced-motion: reduce` is active — reflected as `data-reduced-motion`. */\n  readonly reducedMotion: Signal<boolean>;\n  readonly trigger: Signal<HTMLElement | null>;\n  readonly content: Signal<HTMLElement | null>;\n\n  registerTrigger(el: HTMLElement): void;\n  unregisterTrigger(el: HTMLElement): void;\n  registerArrow(el: HTMLElement): void;\n  unregisterArrow(el: HTMLElement): void;\n  registerContent(el: HTMLElement): void;\n  unregisterContent(el: HTMLElement): void;\n\n  /** The pointer entered the trigger; opens after the resolved open delay. */\n  pointerEnterTrigger(): void;\n  /** The pointer left the trigger; closes, or arms the pointer-grace bridge from `cursor`. */\n  pointerLeaveTrigger(cursor: Point): void;\n  /** The trigger received keyboard focus; opens after the resolved open delay. */\n  focusTrigger(): void;\n  /** The trigger lost focus; closes when nothing else keeps the card alive. */\n  blurTrigger(): void;\n  /** The pointer entered the content; holds the card open. */\n  pointerEnterContent(): void;\n  /** The pointer left the content; closes when nothing else keeps it alive. */\n  pointerLeaveContent(): void;\n\n  /**\n   * Schedule the card to open after `openDelay` ms (instant when delay is 0).\n   * Hover-driven opens (`'hover-trigger'` / `'hover-content'`) are suppressed\n   * while an ancestor scroll container is moving content under a stationary\n   * cursor, so rows sliding past the pointer can't flicker cards open; the\n   * `'focus'` path is never suppressed.\n   */\n  scheduleOpen(reason: HoverCardScheduleReason): void;\n  /** Schedule the card to close after `closeDelay` ms (instant on `escape`). */\n  scheduleClose(reason: HoverCardScheduleReason): void;\n  /** Cancel any pending open / close timer without changing state. */\n  cancelPending(): void;\n  /**\n   * Emit the public `(escapeKeyDown)` output and, unless prevented, close.\n   * Driven by the content's document-level dismissible layer, so the card\n   * responds to Escape regardless of where focus lives — including a card\n   * opened by hover while focus sits on an unrelated element.\n   */\n  emitEscapeKeyDown(event: KeyboardEvent): void;\n}\n\nexport const FOR_HOVER_CARD_CONTEXT = new InjectionToken<ForHoverCardContext>(\n  'FOR_HOVER_CARD_CONTEXT',\n);\n\nexport function injectHoverCardContext(piece: string): ForHoverCardContext {\n  const ctx = inject(FOR_HOVER_CARD_CONTEXT, { optional: true });\n  if (!ctx) {\n    throw orphanContextError({\n      code: 'FORCDK-HOVER-CARD-001',\n      piece,\n      root: '[forHoverCard]',\n      token: 'FOR_HOVER_CARD_CONTEXT',\n    });\n  }\n  return ctx;\n}\n\n/**\n * Resolves the trigger's root context: the explicit reference when the\n * `[forHoverCardTrigger]` input carries one, the injected\n * `FOR_HOVER_CARD_CONTEXT` otherwise. The orphan error only fires when neither\n * resolves, on first read of the returned signal. Must be called in an\n * injection context.\n */\nexport function injectHoverCardTriggerContext(\n  explicitRoot: Signal<ForHoverCardContext | ''>,\n): Signal<ForHoverCardContext> {\n  const injected = inject(FOR_HOVER_CARD_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-HOVER-CARD-002',\n      trigger: '[forHoverCardTrigger]',\n      root: '[forHoverCard]',\n      token: 'FOR_HOVER_CARD_CONTEXT',\n      exportAs: 'forHoverCard',\n    });\n  });\n}\n","import { inject, Injectable, type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\nimport {\n  type AnchoredPositioningSeedDefaults,\n  type FloatingAlign,\n  type FloatingSide,\n  SkipDelayCoordinator,\n} from 'forty-cdk/core-overlay';\n\n/**\n * Defaults inherited by descendant hover-cards in the surrounding injector\n * scope. Configure with `provideForHoverCardDefaults` at the app root or in\n * any component's `providers`.\n */\nexport interface ForHoverCardDefaults extends AnchoredPositioningSeedDefaults {\n  /** Open delay (ms) for cards that don't override `openDelay` locally. */\n  openDelay: number;\n  /** Close delay (ms) for cards that don't override `closeDelay` locally. */\n  closeDelay: number;\n  /**\n   * Window (ms) after a peer card in this scope closes during which the\n   * next open is instant — useful for adjacent profile cards in a list,\n   * so cursor movement doesn't feel sluggish.\n   */\n  skipDelayDuration: number;\n  /**\n   * Side the card is anchored to for cards that don't override `side`\n   * locally. Library fallback `'top'`.\n   */\n  side: FloatingSide;\n  /**\n   * Alignment along the chosen `side` for cards that don't override `align`\n   * locally. Library fallback `'center'`.\n   */\n  align: FloatingAlign;\n  /**\n   * Gap (px) between trigger and card along the main axis for cards that\n   * don't override `sideOffset` locally.\n   * Library fallback `8`.\n   */\n  sideOffset: number;\n  /**\n   * Padding (px) applied uniformly to the `flip`, `shift`, and `size`\n   * middlewares for cards that don't override `collisionPadding` locally.\n   * Library fallback `8`.\n   */\n  collisionPadding: number;\n  /**\n   * Padding (px) keeping the `[forHoverCardArrow]` element that far from the\n   * edges of the content, for cards that don't override `arrowPadding`\n   * locally. Only consulted when an arrow is registered — floating-ui installs\n   * the `arrow` middleware only then. Library fallback `0`.\n   */\n  arrowPadding: number;\n}\n\n/**\n * Library fallback for hover-card defaults, read at the root injector when no\n * consumer has called `provideForHoverCardDefaults`. Exported for the shared\n * defaults contract spec; not re-exported from the primitive's public entry.\n */\nexport const FOR_HOVER_CARD_FALLBACK_DEFAULTS: ForHoverCardDefaults = {\n  openDelay: 700,\n  closeDelay: 300,\n  skipDelayDuration: 300,\n  side: 'top',\n  align: 'center',\n  sideOffset: 8,\n  collisionPadding: 8,\n  arrowPadding: 0,\n};\n\nconst { token, provideDefaults } = createDefaults<ForHoverCardDefaults>(\n  'FOR_HOVER_CARD_DEFAULTS',\n  FOR_HOVER_CARD_FALLBACK_DEFAULTS,\n);\n\n/** Token holding the resolved hover-card defaults for the current scope. */\nexport const FOR_HOVER_CARD_DEFAULTS = token;\n\n/**\n * Per-injector-scope coordinator: thin subclass of the shared\n * `SkipDelayCoordinator` bound to this primitive's own DI token. Each\n * `provideForHoverCardDefaults` call re-provides it so the corresponding\n * subtree gets its own skip-delay window. Independent from\n * `TooltipCoordinator` — tooltips and hover-cards have different cadences and\n * separate scopes.\n */\n@Injectable({ providedIn: 'root' })\nexport class HoverCardCoordinator extends SkipDelayCoordinator {\n  constructor() {\n    super(inject(FOR_HOVER_CARD_DEFAULTS));\n  }\n}\n\n/**\n * Configures forty-cdk hover-card defaults for this injector scope.\n * Partial overrides inherit unspecified keys from the parent scope (or\n * library defaults at the root). Each call establishes a new coordinator\n * scope.\n */\nexport function provideForHoverCardDefaults(\n  defaults: Partial<ForHoverCardDefaults> = {},\n): Provider[] {\n  return [...provideDefaults(defaults), HoverCardCoordinator];\n}\n","import {\n  booleanAttribute,\n  DestroyRef,\n  Directive,\n  inject,\n  input,\n  model,\n  numberAttribute,\n  output,\n  signal,\n} from '@angular/core';\n\nimport {\n  emitVetoableNativeEvent,\n  injectPrefersReducedMotion,\n  type VetoableNativeEvent,\n} from 'forty-cdk/core';\nimport {\n  AnchoredOverlayPositioningBase,\n  forceCloseWhenDisabled,\n  createHoverIntent,\n  type HoverIntentScheduler,\n  attachPointerGrace,\n  buildSubmenuGracePolygon,\n  type Point,\n  resolveGraceSide,\n  ScrollDismissDispatcher,\n} from 'forty-cdk/core-overlay';\nimport {\n  FOR_HOVER_CARD_CONTEXT,\n  type ForHoverCardContext,\n  type HoverCardScheduleReason,\n} from './hover-card-context';\nimport { FOR_HOVER_CARD_DEFAULTS, HoverCardCoordinator } from './hover-card-defaults';\n\n/**\n * Headless hover-preview card. Use it to surface rich, interactive previews\n * (profile snapshots, link previews, definition cards) on hover or focus\n * of an already-meaningful trigger (a link, a name).\n *\n * **Not a tooltip.** Hover-cards may contain interactive content\n * (clickable links, copy buttons, …); the trigger must convey full meaning\n * on its own so keyboard-only users miss nothing.\n *\n * Open / close delays default to 700 / 300 ms; the per-injector-scope\n * `provideForHoverCardDefaults` configures the cadence and the skip-delay\n * window for adjacent cards.\n *\n * @example\n * ```html\n * <span forHoverCard #card=\"forHoverCard\">\n *   <a forHoverCardTrigger href=\"/users/ada\">Ada Lovelace</a>\n *   @if (card.open()) {\n *     <div forHoverCardContent animate.enter=\"fade-in\" animate.leave=\"fade-out\">\n *       <img src=\"/api/avatar/ada\" alt=\"\" />\n *       <h3>Ada Lovelace</h3>\n *       <p>Mathematician.</p>\n *     </div>\n *   }\n * </span>\n * ```\n */\n@Directive({\n  selector: '[forHoverCard]',\n  exportAs: 'forHoverCard',\n  host: {\n    '[attr.data-state]': 'open() ? \"open\" : \"closed\"',\n    '[attr.data-disabled]': 'disabled() ? \"\" : null',\n    '[attr.data-reduced-motion]': 'reducedMotion() ? \"\" : null',\n  },\n  providers: [{ provide: FOR_HOVER_CARD_CONTEXT, useExisting: ForHoverCard }],\n})\nexport class ForHoverCard extends AnchoredOverlayPositioningBase implements ForHoverCardContext {\n  protected readonly positioningDefaults = inject(FOR_HOVER_CARD_DEFAULTS);\n\n  /**\n   * Two-way bindable. Whether the card is currently shown. The `model()`\n   * change emitter (`(openChange)`) fires only on internal transitions\n   * (delay-driven, escape, blur, and the force-close that runs when `disabled`\n   * flips to true), never on consumer writes through `[(open)]`.\n   */\n  readonly open = model<boolean>(false);\n\n  /**\n   * Padding (px) keeping `[forHoverCardArrow]` that far from the edges of the\n   * content. Only consulted when an arrow is registered, since floating-ui\n   * installs the `arrow` middleware only then — which is why the input is\n   * declared here rather than on the shared positioning base. The default is\n   * read from `provideForHoverCardDefaults` for the surrounding scope, since\n   * arrow geometry is a design-system-wide decision rather than a per-card one.\n   */\n  readonly arrowPadding = input(this.positioningDefaults.arrowPadding, {\n    transform: numberAttribute,\n  });\n\n  /** Per-card override for open delay (ms). Falls back to coordinator (700ms). */\n  readonly openDelay = input<number | undefined>(undefined);\n\n  /** Per-card override for close delay (ms). Falls back to coordinator (300ms). */\n  readonly closeDelay = input<number | undefined>(undefined);\n\n  /** When true, all hover / focus interaction is ignored and any open card is forced closed. */\n  readonly disabled = input(false, { transform: booleanAttribute });\n\n  /**\n   * Fires when the user presses Escape while the card is open, regardless of\n   * where focus currently lives — on the trigger, inside the portaled\n   * content, or on an unrelated element (the common case for a card opened by\n   * hover). Routed through the content's document-level dismissible layer.\n   * Call `preventDefault()` on the emitted veto to suppress the automatic\n   * close. The native `KeyboardEvent` is on `.event`.\n   */\n  readonly escapeKeyDown = output<VetoableNativeEvent<KeyboardEvent>>();\n\n  /**\n   * Whether the user has requested reduced motion via the OS\n   * `prefers-reduced-motion: reduce` media query. Reflected as the boolean\n   * `data-reduced-motion` attribute on the root and content so consumers can\n   * disable their own `animate.enter` / `animate.leave` and CSS transitions\n   * without re-deriving the media query. The card's JS-coordinated timing (the\n   * open / close hover-intent delays) is intent debouncing, not motion, so it\n   * is unchanged under reduced motion.\n   */\n  readonly reducedMotion = injectPrefersReducedMotion();\n\n  readonly #triggerEl = signal<HTMLElement | null>(null);\n  readonly trigger = this.#triggerEl.asReadonly();\n\n  readonly #arrowEl = signal<HTMLElement | null>(null);\n  readonly arrow = this.#arrowEl.asReadonly();\n\n  readonly #contentEl = signal<HTMLElement | null>(null);\n  readonly content = this.#contentEl.asReadonly();\n\n  readonly #coordinator = inject(HoverCardCoordinator);\n  readonly #scrollDismissDispatcher = inject(ScrollDismissDispatcher);\n  readonly #hoverIntent: HoverIntentScheduler;\n\n  #triggerHovered = false;\n  #triggerFocused = false;\n  #contentHovered = false;\n  #detachGrace: (() => void) | null = null;\n  #unregisterScrollDismiss: () => void = () => {};\n\n  constructor() {\n    super();\n    forceCloseWhenDisabled({\n      open: this.open,\n      disabled: this.disabled,\n      onForceClose: () => this.cancelPending(),\n    });\n\n    this.#hoverIntent = createHoverIntent({\n      open: this.open,\n      isDisabled: () => this.disabled(),\n      openDelay: () => this.openDelay() ?? this.#coordinator.openDelay,\n      closeDelay: () => this.closeDelay() ?? this.#coordinator.closeDelay,\n      coordinator: this.#coordinator,\n    });\n\n    this.#unregisterScrollDismiss = this.#scrollDismissDispatcher.register(() =>\n      this.#dismissOnScroll(),\n    );\n\n    inject(DestroyRef).onDestroy(() => {\n      this.cancelPending();\n      this.#unregisterScrollDismiss();\n    });\n  }\n\n  registerTrigger(el: HTMLElement): void {\n    this.#triggerEl.set(el);\n  }\n\n  unregisterTrigger(el: HTMLElement): void {\n    if (this.#triggerEl() === el) {\n      this.#triggerEl.set(null);\n    }\n  }\n\n  registerArrow(el: HTMLElement): void {\n    this.#arrowEl.set(el);\n  }\n\n  unregisterArrow(el: HTMLElement): void {\n    if (this.#arrowEl() === el) {\n      this.#arrowEl.set(null);\n    }\n  }\n\n  registerContent(el: HTMLElement): void {\n    this.#contentEl.set(el);\n  }\n\n  unregisterContent(el: HTMLElement): void {\n    if (this.#contentEl() === el) {\n      this.#contentEl.set(null);\n    }\n  }\n\n  pointerEnterTrigger(): void {\n    this.#triggerHovered = true;\n    this.#disarmContentGrace();\n    this.scheduleOpen('hover-trigger');\n  }\n\n  pointerLeaveTrigger(cursor: Point): void {\n    this.#triggerHovered = false;\n    if (this.#triggerFocused) {\n      return;\n    }\n    if (this.open() && this.#contentEl()) {\n      this.#armContentGrace(cursor);\n      return;\n    }\n    this.#scheduleCloseIfInactive();\n  }\n\n  focusTrigger(): void {\n    this.#triggerFocused = true;\n    this.scheduleOpen('focus');\n  }\n\n  blurTrigger(): void {\n    this.#triggerFocused = false;\n    this.#scheduleCloseIfInactive();\n  }\n\n  pointerEnterContent(): void {\n    this.#contentHovered = true;\n    this.#disarmContentGrace();\n    this.cancelPending();\n  }\n\n  pointerLeaveContent(): void {\n    this.#contentHovered = false;\n    this.#scheduleCloseIfInactive();\n  }\n\n  scheduleOpen(reason: HoverCardScheduleReason): void {\n    if (reason !== 'focus' && this.#scrollSuppressed()) {\n      return;\n    }\n    this.#hoverIntent.scheduleOpen();\n  }\n\n  scheduleClose(reason: HoverCardScheduleReason): void {\n    this.#disarmContentGrace();\n    this.#hoverIntent.scheduleClose(reason === 'escape');\n  }\n\n  cancelPending(): void {\n    this.#disarmContentGrace();\n    this.#hoverIntent.cancelPending();\n  }\n\n  /**\n   * Closes the card immediately when an ancestor scrolls under a stationary\n   * cursor and cancels any pending open / close timer. Closes silently\n   * (bypassing `closeDelay` and without opening the skip-delay window) so a peer\n   * row sliding under the cursor can't reopen instantly while the scroll is in\n   * flight. A no-op when nothing is open or armed.\n   */\n  #dismissOnScroll(): void {\n    this.cancelPending();\n    if (this.open()) {\n      this.open.set(false);\n    }\n  }\n\n  /** True while an ancestor scroll has opened the suppression window (hover opens are no-ops). */\n  #scrollSuppressed(): boolean {\n    return this.#scrollDismissDispatcher.isSuppressed();\n  }\n\n  /**\n   * Emit `(escapeKeyDown)` and, unless the consumer calls `preventDefault()`\n   * on the veto, close immediately. Driven by the content's document-level\n   * dismissible layer so Escape works no matter where focus currently lives\n   * — including a hover-opened card with focus on an unrelated element.\n   */\n  emitEscapeKeyDown(event: KeyboardEvent): void {\n    if (!this.open()) {\n      return;\n    }\n    const vetoed = emitVetoableNativeEvent(this.escapeKeyDown, event);\n    if (!vetoed) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.scheduleClose('escape');\n    }\n  }\n\n  /**\n   * Imperatively opens the card — for programmatic control beyond hover and\n   * focus (e.g. a design-system wrapper opening the card from an external\n   * event). Schedules the show after the resolved `openDelay` (instant when the\n   * delay is `0` or the scope's skip-delay window is active) and applies the\n   * same gates as a hover open: a no-op while `disabled`, and a no-op while an\n   * ancestor is scrolling (the scroll-dismiss suppression window). For an\n   * instant, unconditional open that bypasses the delay and every gate, write\n   * the `[(open)]` model directly (`open.set(true)`).\n   */\n  show(): void {\n    this.scheduleOpen('hover-trigger');\n  }\n\n  /**\n   * Imperatively closes the card, mirroring a hover-leave / blur close:\n   * schedules the hide after the resolved `closeDelay` (instant when the delay\n   * is `0`) and disarms the pointer-grace bridge. For an instant close that\n   * ignores `closeDelay`, write the `[(open)]` model directly\n   * (`open.set(false)`).\n   */\n  hide(): void {\n    this.scheduleClose('hover-trigger');\n  }\n\n  #scheduleCloseIfInactive(): void {\n    if (this.#triggerHovered || this.#triggerFocused || this.#contentHovered) {\n      return;\n    }\n    this.#hoverIntent.scheduleClose(false);\n  }\n\n  #armContentGrace(cursor: Point): void {\n    const content = this.#contentEl();\n    if (!content) {\n      this.#scheduleCloseIfInactive();\n      return;\n    }\n    const rect = content.getBoundingClientRect();\n    const trigger = this.#triggerEl();\n    const side = trigger ? resolveGraceSide(trigger.getBoundingClientRect(), rect) : this.side();\n    const polygon = buildSubmenuGracePolygon(cursor, rect, side);\n    this.#disarmContentGrace();\n    this.#detachGrace = attachPointerGrace(content.ownerDocument, polygon, () => {\n      this.#disarmContentGrace();\n      this.#scheduleCloseIfInactive();\n    });\n  }\n\n  #disarmContentGrace(): void {\n    if (this.#detachGrace) {\n      this.#detachGrace();\n      this.#detachGrace = null;\n    }\n  }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { isNonTouchPointer } from 'forty-cdk/core';\n\nimport { type ForHoverCardContext, injectHoverCardTriggerContext } from './hover-card-context';\n\n/**\n * Element that activates the hover-card on hover or focus. Apply on a link,\n * a button, or any focusable element that already conveys the underlying\n * action (the card adds preview, not meaning).\n *\n * Reflects `data-state` so consumers can style the trigger when its card is\n * open (e.g. an underline that turns solid).\n *\n * A touch tap does not open the card: a `pointerenter` rejected by the shared\n * `isNonTouchPointer` predicate is ignored (a pen still hovers), and the focus\n * that a tap induces is ignored too — only keyboard focus (focus not preceded\n * by a pointer interaction) opens the card. Because the trigger must already convey full\n * meaning on its own, touch / keyboard-only users miss nothing when the\n * preview stays closed, and keyboard focus is the touch-accessible way to\n * reveal it. This mirrors `ForTooltipTrigger`.\n *\n * **Intentional ARIA exception.** The trigger exposes no `aria-controls`,\n * `aria-expanded`, or `aria-describedby`, and `[forHoverCardContent]` carries\n * no role. This is deliberate: the trigger must already be\n * self-meaningful (a link or button that conveys the underlying action on its\n * own — the card adds preview, not meaning), and the card is non-essential\n * supplementary content that is hover/focus-revealed and not part of the\n * accessibility relationship. Popover / Tooltip, whose content is meant to be\n * discovered via the trigger, do wire trigger ARIA — HoverCard intentionally\n * does not.\n *\n * Escape dismissal is owned by the content's document-level dismissible\n * layer (see `ForHoverCardContent`), so it works from the trigger and from\n * unrelated focus alike — the trigger carries no Escape listener of its own.\n *\n * The root is normally resolved via DI from the enclosing `[forHoverCard]`.\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: `[forHoverCardTrigger]=\"root\"` with `#root=\"forHoverCard\"`.\n */\n@Directive({\n  selector: '[forHoverCardTrigger]',\n  exportAs: 'forHoverCardTrigger',\n  host: {\n    '[attr.data-state]': 'ctx().open() ? \"open\" : \"closed\"',\n    '(pointerenter)': 'onPointerEnter($event)',\n    '(pointerdown)': 'onPointerDown($event)',\n    '(pointerleave)': 'onPointerLeave($event)',\n    '(focus)': 'onFocus()',\n    '(blur)': 'onBlur()',\n  },\n})\nexport class ForHoverCardTrigger {\n  readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /**\n   * Optional explicit reference to the `[forHoverCard]` root, named after the\n   * selector `routerLink`-style. The bare valueless attribute keeps resolving\n   * the enclosing root via DI; pass the root explicitly\n   * (`[forHoverCardTrigger]=\"root\"`, with `#root=\"forHoverCard\"`) when the\n   * 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 forHoverCardTrigger = input<ForHoverCardContext | ''>('');\n\n  protected readonly ctx = injectHoverCardTriggerContext(this.forHoverCardTrigger);\n\n  #lastPointerType: string | null = null;\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      ctx.registerTrigger(el);\n      onCleanup(() => ctx.unregisterTrigger(el));\n    });\n  }\n\n  protected onPointerEnter(event: PointerEvent): void {\n    if (!isNonTouchPointer(event)) {\n      return;\n    }\n    this.ctx().pointerEnterTrigger();\n  }\n\n  protected onPointerDown(event: PointerEvent): void {\n    this.#lastPointerType = event.pointerType;\n  }\n\n  protected onPointerLeave(event: PointerEvent): void {\n    this.ctx().pointerLeaveTrigger({ x: event.clientX, y: event.clientY });\n  }\n\n  protected onFocus(): void {\n    const pointerInduced = this.#lastPointerType !== null;\n    this.#lastPointerType = null;\n    if (pointerInduced) {\n      return;\n    }\n    this.ctx().focusTrigger();\n  }\n\n  protected onBlur(): void {\n    this.#lastPointerType = null;\n    this.ctx().blurTrigger();\n  }\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\n\nimport {\n  toFloatingPositioner,\n  injectOverlayShell,\n  warnIfMountedWhileClosed,\n} from 'forty-cdk/core-overlay';\nimport { injectHoverCardContext } from './hover-card-context';\n\n/**\n * The hover-card surface. Portaled to `document.body` and positioned by\n * floating-ui. Pointer-enter\n * on the content cancels the pending close, so the user can move the\n * cursor from the trigger into the card to interact with its content\n * (links, buttons, copy targets).\n *\n * Mount / unmount via `@if (card.open())` on the consumer side so\n * `animate.enter` / `animate.leave` work natively.\n *\n * Escape is handled at the document level (outside dismissal stays\n * implicit, via pointer-leave timing), so it dismisses the card no matter\n * where focus lives when the\n * card was hover-opened. Initial-focus and return-focus bundles are\n * omitted because the surface is informational and never steals focus.\n *\n * **Intentional ARIA exception.** The content carries no role (only\n * `data-state` for styling) and the trigger exposes no ARIA linkage — the\n * card is non-essential supplementary content. See\n * `ForHoverCardTrigger` for the full rationale.\n */\n@Directive({\n  selector: '[forHoverCardContent]',\n  exportAs: 'forHoverCardContent',\n  host: {\n    '[attr.data-state]': 'ctx.open() ? \"open\" : \"closed\"',\n    '[attr.data-reduced-motion]': 'ctx.reducedMotion() ? \"\" : null',\n    '(pointerenter)': 'onPointerEnter()',\n    '(pointerleave)': 'onPointerLeave()',\n  },\n})\nexport class ForHoverCardContent {\n  protected readonly ctx = injectHoverCardContext('ForHoverCardContent');\n\n  constructor() {\n    const el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n    this.ctx.registerContent(el);\n    inject(DestroyRef).onDestroy(() => this.ctx.unregisterContent(el));\n\n    warnIfMountedWhileClosed({\n      primitive: 'hover-card',\n      piece: '[forHoverCardContent]',\n      condition: 'card.open()',\n      open: this.ctx.open,\n    });\n\n    injectOverlayShell({\n      positioner: toFloatingPositioner(this.ctx, this.ctx.trigger),\n      dismiss: {\n        emitEscapeKeyDown: (event) => this.ctx.emitEscapeKeyDown(event),\n      },\n    });\n  }\n\n  protected onPointerEnter(): void {\n    this.ctx.pointerEnterContent();\n  }\n\n  protected onPointerLeave(): void {\n    this.ctx.pointerLeaveContent();\n  }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\nimport { registerHandle } from 'forty-cdk/core';\nimport { injectHoverCardContext } from './hover-card-context';\n\n/**\n * Arrow pointing from the card back to its trigger. Floating-ui places it\n * along the right edge so the consumer only has to give it a size and a\n * background — no positioning math required.\n */\n@Directive({\n  selector: '[forHoverCardArrow]',\n  exportAs: 'forHoverCardArrow',\n  host: {\n    'aria-hidden': 'true',\n    'data-hover-card-arrow': '',\n  },\n})\nexport class ForHoverCardArrow {\n  readonly #ctx = injectHoverCardContext('ForHoverCardArrow');\n  readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  constructor() {\n    registerHandle(\n      this.#host.nativeElement,\n      (el) => this.#ctx.registerArrow(el),\n      (el) => this.#ctx.unregisterArrow(el),\n    );\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}