@raqm/ui 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +87 -126
  3. package/fesm2022/raqm-ui-badge.mjs +3 -1
  4. package/fesm2022/raqm-ui-badge.mjs.map +1 -1
  5. package/fesm2022/raqm-ui-calendar.mjs +79 -12
  6. package/fesm2022/raqm-ui-calendar.mjs.map +1 -1
  7. package/fesm2022/raqm-ui-combobox.mjs +47 -23
  8. package/fesm2022/raqm-ui-combobox.mjs.map +1 -1
  9. package/fesm2022/raqm-ui-command.mjs +60 -12
  10. package/fesm2022/raqm-ui-command.mjs.map +1 -1
  11. package/fesm2022/raqm-ui-dialog.mjs +1 -3
  12. package/fesm2022/raqm-ui-dialog.mjs.map +1 -1
  13. package/fesm2022/raqm-ui-dropdown-menu.mjs.map +1 -1
  14. package/fesm2022/raqm-ui-hover-card.mjs.map +1 -1
  15. package/fesm2022/raqm-ui-icon.mjs +160 -0
  16. package/fesm2022/raqm-ui-icon.mjs.map +1 -0
  17. package/fesm2022/raqm-ui-input-otp.mjs +7 -4
  18. package/fesm2022/raqm-ui-input-otp.mjs.map +1 -1
  19. package/fesm2022/raqm-ui-menubar.mjs.map +1 -1
  20. package/fesm2022/raqm-ui-overlay-internal.mjs +15 -5
  21. package/fesm2022/raqm-ui-overlay-internal.mjs.map +1 -1
  22. package/fesm2022/raqm-ui-popover.mjs +51 -19
  23. package/fesm2022/raqm-ui-popover.mjs.map +1 -1
  24. package/fesm2022/raqm-ui-resizable.mjs +14 -4
  25. package/fesm2022/raqm-ui-resizable.mjs.map +1 -1
  26. package/fesm2022/raqm-ui-scroll-area.mjs +85 -29
  27. package/fesm2022/raqm-ui-scroll-area.mjs.map +1 -1
  28. package/fesm2022/raqm-ui-select.mjs +46 -19
  29. package/fesm2022/raqm-ui-select.mjs.map +1 -1
  30. package/fesm2022/raqm-ui-sidebar.mjs +13 -3
  31. package/fesm2022/raqm-ui-sidebar.mjs.map +1 -1
  32. package/fesm2022/raqm-ui-slider.mjs +59 -12
  33. package/fesm2022/raqm-ui-slider.mjs.map +1 -1
  34. package/fesm2022/raqm-ui-toast.mjs +60 -20
  35. package/fesm2022/raqm-ui-toast.mjs.map +1 -1
  36. package/fesm2022/raqm-ui-tooltip.mjs +28 -3
  37. package/fesm2022/raqm-ui-tooltip.mjs.map +1 -1
  38. package/fesm2022/raqm-ui.mjs +1 -0
  39. package/package.json +52 -18
  40. package/styles/accordion.css +1 -0
  41. package/styles/alert-dialog.css +1 -0
  42. package/styles/alert.css +1 -0
  43. package/styles/attachment.css +1 -0
  44. package/styles/avatar.css +1 -0
  45. package/styles/badge.css +1 -0
  46. package/styles/base.css +1 -0
  47. package/styles/button-group.css +1 -0
  48. package/styles/button.css +1 -0
  49. package/styles/checkbox.css +1 -0
  50. package/styles/combobox.css +1 -0
  51. package/styles/command.css +1 -0
  52. package/styles/common.css +17 -0
  53. package/styles/context-menu.css +1 -0
  54. package/styles/dialog.css +1 -0
  55. package/styles/drawer.css +1 -0
  56. package/styles/dropdown-menu.css +1 -0
  57. package/styles/empty.css +1 -0
  58. package/styles/field-parts.css +1 -0
  59. package/styles/field-relationships.css +1 -0
  60. package/styles/input-group-button.css +1 -0
  61. package/styles/input-group-relationships.css +1 -0
  62. package/styles/input-otp.css +1 -0
  63. package/styles/input.css +1 -0
  64. package/styles/item.css +1 -0
  65. package/styles/kbd.css +1 -0
  66. package/styles/menubar.css +1 -0
  67. package/styles/native-select.css +1 -0
  68. package/styles/navigation-menu.css +1 -0
  69. package/styles/overlay.css +1 -0
  70. package/styles/pagination.css +1 -0
  71. package/styles/popover.css +1 -0
  72. package/styles/questionnaire.css +1 -0
  73. package/styles/radio-group.css +1 -0
  74. package/styles/resizable.css +1 -0
  75. package/styles/sheet.css +1 -0
  76. package/styles/sidebar.css +1 -0
  77. package/styles/spinner.css +1 -0
  78. package/styles/switch.css +1 -0
  79. package/styles/table.css +1 -0
  80. package/styles/tabs.css +1 -0
  81. package/styles/textarea.css +1 -0
  82. package/styles/theme.css +50 -4324
  83. package/styles/toggle-group.css +1 -0
  84. package/styles/toggle.css +1 -0
  85. package/styles/tooltip.css +1 -0
  86. package/types/raqm-ui-calendar.d.ts +1 -0
  87. package/types/raqm-ui-combobox.d.ts +8 -4
  88. package/types/raqm-ui-command.d.ts +4 -0
  89. package/types/raqm-ui-dialog.d.ts +7 -1
  90. package/types/raqm-ui-icon.d.ts +65 -0
  91. package/types/raqm-ui-input-otp.d.ts +1 -0
  92. package/types/raqm-ui-resizable.d.ts +4 -0
  93. package/types/raqm-ui-rolldown-runtime-C25Le4-w.d.ts +1 -0
  94. package/types/raqm-ui-scroll-area.d.ts +11 -0
  95. package/types/raqm-ui-slider.d.ts +1 -1
  96. package/types/raqm-ui-toast.d.ts +6 -0
  97. package/types/raqm-ui.d.ts +1 -0
  98. package/fesm2022/raqm-ui-carousel.mjs +0 -410
  99. package/fesm2022/raqm-ui-carousel.mjs.map +0 -1
  100. package/types/raqm-ui-carousel.d.ts +0 -81
@@ -1 +1 @@
1
- {"version":3,"file":"raqm-ui-dropdown-menu.mjs","names":[],"sources":["../../../projects/ui/dropdown-menu/menu-overlay.ts","../../../projects/ui/dropdown-menu/dropdown-menu.directive.ts","../../../projects/ui/dropdown-menu/dropdown-menu-trigger.directive.ts","../../../projects/ui/dropdown-menu/dropdown-menu-item.directive.ts","../../../projects/ui/dropdown-menu/dropdown-menu-checkbox-item.directive.ts","../../../projects/ui/dropdown-menu/dropdown-menu-radio-context.ts","../../../projects/ui/dropdown-menu/dropdown-menu-radio.directive.ts","../../../projects/ui/dropdown-menu/public-api.ts"],"sourcesContent":["import { DestroyRef, Directive, ElementRef, forwardRef, inject } from '@angular/core';\r\nimport { Direction, Directionality } from '@angular/cdk/bidi';\r\nimport {\r\n CdkContextMenuTrigger,\r\n CdkMenuTrigger,\r\n CdkMenuTriggerBase,\r\n MENU_STACK,\r\n MENU_TRIGGER,\r\n MenuStack,\r\n PARENT_OR_NEW_MENU_STACK_PROVIDER,\r\n} from '@angular/cdk/menu';\r\nimport {\r\n ConnectedPosition,\r\n FlexibleConnectedPositionStrategy,\r\n OverlayRef,\r\n} from '@angular/cdk/overlay';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { registerOverlayOwnership } from '@raqm/ui/overlay-internal';\r\n\r\n/** @internal Computed CSS direction, including plain ancestors without CDK Dir. */\r\n@Directive({\r\n providers: [{ provide: Directionality, useExisting: forwardRef(() => RaqmMenuDirection) }],\r\n})\r\nexport class RaqmMenuDirection extends Directionality {\r\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n private observer: MutationObserver | null = null;\r\n private disposed = false;\r\n\r\n override get value(): Direction {\r\n const view = this.element.ownerDocument.defaultView;\r\n return view\r\n ? view.getComputedStyle(this.element).direction === 'rtl'\r\n ? 'rtl'\r\n : 'ltr'\r\n : super.value;\r\n }\r\n\r\n constructor() {\r\n super();\r\n queueMicrotask(() => {\r\n if (this.disposed) return;\r\n const view = this.element.ownerDocument.defaultView;\r\n if (!view) return;\r\n const sync = (): void => {\r\n const next = this.value;\r\n if (next !== this.valueSignal()) {\r\n this.valueSignal.set(next);\r\n this.change.emit(next);\r\n }\r\n };\r\n this.observer = new view.MutationObserver(sync);\r\n for (let node: HTMLElement | null = this.element; node; node = node.parentElement) {\r\n this.observer.observe(node, {\r\n attributes: true,\r\n attributeFilter: ['dir', 'class', 'style'],\r\n });\r\n }\r\n sync();\r\n });\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.disposed = true;\r\n this.observer?.disconnect();\r\n super.ngOnDestroy();\r\n }\r\n}\r\n\r\n/** @internal Bridge only the documented protected overlay extension point. */\r\n@Directive({\r\n providers: [\r\n { provide: CdkMenuTrigger, useExisting: forwardRef(() => RaqmMenuTriggerBase) },\r\n { provide: MENU_TRIGGER, useExisting: forwardRef(() => RaqmMenuTriggerBase) },\r\n PARENT_OR_NEW_MENU_STACK_PROVIDER,\r\n ],\r\n})\r\nexport class RaqmMenuTriggerBase extends CdkMenuTrigger {\r\n get menuOverlay(): OverlayRef | null {\r\n return this.overlayRef;\r\n }\r\n}\r\n\r\n@Directive({\r\n providers: [\r\n { provide: CdkContextMenuTrigger, useExisting: forwardRef(() => RaqmContextMenuTriggerBase) },\r\n { provide: MENU_TRIGGER, useExisting: forwardRef(() => RaqmContextMenuTriggerBase) },\r\n { provide: MENU_STACK, useClass: MenuStack },\r\n ],\r\n})\r\nexport class RaqmContextMenuTriggerBase extends CdkContextMenuTrigger {\r\n readonly geometryChanged = new Subject<void>();\r\n get menuOverlay(): OverlayRef | null {\r\n return this.overlayRef;\r\n }\r\n menuAnchorPoint: RaqmMenuAnchorPoint | null = null;\r\n override open(coordinates: { x: number; y: number }): void {\r\n this.menuAnchorPoint = coordinates;\r\n super.open(coordinates);\r\n this.geometryChanged.next();\r\n }\r\n override ngOnDestroy(): void {\r\n this.geometryChanged.complete();\r\n super.ngOnDestroy();\r\n }\r\n}\r\n\r\n/** @internal Pointer anchor coordinates used only by the shipped overlay bridge. */\r\nexport interface RaqmMenuAnchorPoint {\r\n readonly x: number;\r\n readonly y: number;\r\n}\r\n/** @internal Bridge options for shipped menu wrappers, not consumer configuration. */\r\nexport interface RaqmMenuOverlaySyncOptions {\r\n readonly matchAnchorWidth: boolean;\r\n readonly anchorPoint?: () => RaqmMenuAnchorPoint | null;\r\n /** Recompute family defaults only; preserve explicit consumer positions. */\r\n readonly positions?: () => ConnectedPosition[];\r\n}\r\n\r\n/** @internal Synchronizes the exact trigger overlay through public OverlayRef APIs. */\r\nexport class RaqmMenuOverlaySync {\r\n private generation = 0;\r\n private disposed = false;\r\n private frame = 0;\r\n private overlay: OverlayRef | null = null;\r\n private releaseOwnership: (() => void) | undefined;\r\n private resizeObserver: ResizeObserver | null = null;\r\n private connection: ConnectedPosition | undefined;\r\n private readonly subscriptions = new Subscription();\r\n private readonly schedule = (): void => {\r\n const view = this.anchor.ownerDocument.defaultView;\r\n if (!view || !this.overlay || this.frame || this.disposed) return;\r\n this.frame = view.requestAnimationFrame(() => {\r\n this.frame = 0;\r\n this.measure();\r\n });\r\n };\r\n\r\n constructor(\r\n private readonly trigger: CdkMenuTriggerBase & { readonly menuOverlay: OverlayRef | null },\r\n private readonly anchor: HTMLElement,\r\n destroyRef: DestroyRef,\r\n private readonly directionality: Directionality,\r\n private readonly options: RaqmMenuOverlaySyncOptions,\r\n ) {\r\n this.subscriptions.add(\r\n trigger.opened.subscribe(() => {\r\n const generation = ++this.generation;\r\n queueMicrotask(() => {\r\n if (this.disposed || generation !== this.generation || !trigger.isOpen()) return;\r\n this.detach();\r\n this.overlay = trigger.menuOverlay;\r\n if (!this.overlay) return;\r\n this.releaseOwnership = registerOverlayOwnership(this.anchor, this.overlay);\r\n this.observe();\r\n this.measure();\r\n });\r\n }),\r\n );\r\n this.subscriptions.add(\r\n trigger.closed.subscribe(() => {\r\n ++this.generation;\r\n this.detach();\r\n }),\r\n );\r\n this.subscriptions.add(directionality.change.subscribe(this.schedule));\r\n if (trigger instanceof RaqmContextMenuTriggerBase) {\r\n this.subscriptions.add(trigger.geometryChanged.subscribe(this.schedule));\r\n }\r\n destroyRef.onDestroy(() => {\r\n this.disposed = true;\r\n ++this.generation;\r\n this.detach();\r\n this.subscriptions.unsubscribe();\r\n });\r\n }\r\n\r\n refresh(): void {\r\n this.schedule();\r\n }\r\n\r\n private measure(): void {\r\n const overlay = this.overlay;\r\n if (this.disposed || !overlay?.hasAttached()) return;\r\n const strategy = overlay.getConfig().positionStrategy;\r\n if (!(strategy instanceof FlexibleConnectedPositionStrategy)) return;\r\n const pane = overlay.overlayElement;\r\n const height = this.anchor.ownerDocument.documentElement.clientHeight;\r\n overlay.setDirection(this.directionality.value);\r\n const positions = this.options.positions?.() ?? strategy.positions;\r\n strategy.withPositions(positions.map((position) => ({ ...position })));\r\n if (this.options.matchAnchorWidth) {\r\n pane.style.setProperty(\r\n '--raqm-menu-anchor-width',\r\n `${this.anchor.getBoundingClientRect().width}px`,\r\n );\r\n pane.setAttribute('data-raqm-anchor-width', '');\r\n }\r\n pane.style.setProperty('--raqm-menu-available-height', `${Math.max(0, height - 10)}px`);\r\n strategy\r\n .withViewportMargin(5)\r\n .withFlexibleDimensions(false)\r\n .withLockedPosition(false)\r\n .withPush(true);\r\n const selection = strategy.positionChanges.subscribe((event) => {\r\n this.connection = event.connectionPair;\r\n });\r\n overlay.updatePosition();\r\n selection.unsubscribe();\r\n if (!this.connection) return;\r\n const pair = this.connection;\r\n const point = this.options.anchorPoint?.();\r\n const rect = this.anchor.getBoundingClientRect();\r\n const origin = point\r\n ? point.y\r\n : pair.originY === 'top'\r\n ? rect.top\r\n : pair.originY === 'bottom'\r\n ? rect.bottom\r\n : rect.top + rect.height / 2;\r\n const edge = Math.max(5, Math.min(height - 5, origin + (pair.offsetY ?? 0)));\r\n const available =\r\n pair.overlayY === 'bottom'\r\n ? edge - 5\r\n : pair.overlayY === 'center'\r\n ? 2 * Math.min(edge - 5, height - 5 - edge)\r\n : height - 5 - edge;\r\n pane.style.setProperty(\r\n '--raqm-menu-available-height',\r\n `${Math.max(0, Math.min(height - 10, available))}px`,\r\n );\r\n strategy.reapplyLastPosition();\r\n }\r\n\r\n private observe(): void {\r\n const view = this.anchor.ownerDocument.defaultView;\r\n view?.addEventListener('resize', this.schedule, { passive: true });\r\n view?.document.addEventListener('scroll', this.schedule, { capture: true, passive: true });\r\n if (view && typeof view.ResizeObserver !== 'undefined' && this.overlay) {\r\n this.resizeObserver = new view.ResizeObserver(this.schedule);\r\n this.resizeObserver.observe(this.overlay.overlayElement);\r\n this.resizeObserver.observe(this.anchor);\r\n }\r\n }\r\n\r\n private detach(): void {\r\n this.releaseOwnership?.();\r\n this.releaseOwnership = undefined;\r\n const view = this.anchor.ownerDocument.defaultView;\r\n view?.removeEventListener('resize', this.schedule);\r\n view?.document.removeEventListener('scroll', this.schedule, { capture: true });\r\n if (this.frame) view?.cancelAnimationFrame(this.frame);\r\n this.frame = 0;\r\n this.resizeObserver?.disconnect();\r\n this.resizeObserver = null;\r\n this.overlay = null;\r\n this.connection = undefined;\r\n }\r\n}\r\n","import { Directive, booleanAttribute, input } from '@angular/core';\r\n\r\nimport { CdkMenu } from '@angular/cdk/menu';\r\nimport { RaqmMenuDirection } from './menu-overlay';\r\n\r\n@Directive({\r\n selector: '[raqm-menu]',\r\n // The CDK supplies role, focus, keyboard and typeahead; the wrapper adds the class.\r\n hostDirectives: [RaqmMenuDirection, { directive: CdkMenu }],\r\n // Detached from the trigger's DOM scope, the panel publishes its own live direction.\r\n host: {\r\n class: 'raqm-menu',\r\n },\r\n})\r\nexport class RaqmMenuDirective {}\r\n\r\n@Directive({\r\n selector: '[raqm-menu-group]',\r\n host: {\r\n class: 'raqm-menu-group',\r\n // A group inside a `role=\"menu\"` is a real ARIA group; the name is the app's.\r\n role: 'group',\r\n },\r\n})\r\nexport class RaqmMenuGroupDirective {}\r\n\r\n@Directive({\r\n selector: '[raqm-menu-label]',\r\n host: {\r\n class: 'raqm-menu-label',\r\n // Presence-only inset hook (the `data-raqm-inset` attribute exists or not).\r\n '[attr.data-raqm-inset]': 'inset() ? \"\" : null',\r\n },\r\n})\r\nexport class RaqmMenuLabelDirective {\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n}\r\n\r\n/**\r\n * Attribute directive marking a non-focusable decorative 1px rule between menu regions.\r\n *\r\n * @remarks\r\n * Carries `role=\"separator\"`/`aria-orientation` and is never a roving-tabindex item.\r\n */\r\n@Directive({\r\n selector: '[raqm-menu-separator]',\r\n host: {\r\n class: 'raqm-menu-separator',\r\n // A real (non-focusable) ARIA separator in the horizontal orientation.\r\n role: 'separator',\r\n 'aria-orientation': 'horizontal',\r\n },\r\n})\r\nexport class RaqmMenuSeparatorDirective {}\r\n\r\n/**\r\n * Attribute directive styling a passive keyboard-hint span inside a menu row.\r\n *\r\n * @remarks\r\n * Display-only: no accelerator registration, global key listener or command service.\r\n */\r\n@Directive({\r\n selector: '[raqm-menu-shortcut]',\r\n host: {\r\n class: 'raqm-menu-shortcut',\r\n },\r\n})\r\nexport class RaqmMenuShortcutDirective {}\r\n","import { DestroyRef, Directive, ElementRef, InjectionToken, OnInit, inject } from '@angular/core';\r\n\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { CDK_MENU } from '@angular/cdk/menu';\r\nimport { ConnectedPosition } from '@angular/cdk/overlay';\r\n\r\nimport { RaqmMenuDirection, RaqmMenuOverlaySync, RaqmMenuTriggerBase } from './menu-overlay';\r\n\r\nconst ROOT_MENU_SIDE_OFFSET = 4;\r\n\r\n// Opens below the trigger's inline start and flips above when there is no room. The\r\n// CDK resolves logical `start` against the nearest direction, so RTL needs no override;\r\n// `offsetY` is physical and its sign follows the flipped side.\r\nconst ROOT_MENU_POSITIONS: ConnectedPosition[] = [\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: ROOT_MENU_SIDE_OFFSET,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n offsetY: -ROOT_MENU_SIDE_OFFSET,\r\n },\r\n];\r\n\r\n// The submenu is nudged 3px up along its vertical alignment axis. The offset is\r\n// vertical, so its sign is direction-independent (unlike a horizontal align nudge).\r\nconst SUBMENU_ALIGN_OFFSET = -3;\r\n\r\n// Opens at the trigger's inline end, top-aligned with the 3px nudge, and flips to the\r\n// inline start when there is no room. Logical `end`/`start` resolve against the nearest\r\n// direction, so a submenu always opens away from the text direction.\r\nconst SUBMENU_POSITIONS: ConnectedPosition[] = [\r\n {\r\n originX: 'end',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: SUBMENU_ALIGN_OFFSET,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'end',\r\n overlayY: 'top',\r\n offsetY: SUBMENU_ALIGN_OFFSET,\r\n },\r\n];\r\n\r\nexport const RAQM_MENU_SUBMENU_POSITIONS = new InjectionToken<ConnectedPosition[]>(\r\n 'RAQM_MENU_SUBMENU_POSITIONS',\r\n);\r\n\r\n@Directive({\r\n selector: 'button[raqm-menu-trigger-for], a[raqm-menu-trigger-for]',\r\n // The CDK owns the trigger engine; the wrapper renames the surface and adds the class.\r\n hostDirectives: [\r\n RaqmMenuDirection,\r\n {\r\n directive: RaqmMenuTriggerBase,\r\n inputs: ['cdkMenuTriggerFor: raqm-menu-trigger-for', 'cdkMenuPosition: positions'],\r\n outputs: ['cdkMenuOpened: opened', 'cdkMenuClosed: closed'],\r\n },\r\n ],\r\n host: {\r\n class: 'raqm-menu-trigger',\r\n // Presence-only hook marking a trigger inside a menu panel; the chevron rules use it.\r\n '[attr.data-raqm-submenu]': 'submenu ? \"\" : null',\r\n },\r\n})\r\nexport class RaqmMenuTriggerDirective implements OnInit {\r\n private readonly trigger = inject(RaqmMenuTriggerBase);\r\n\r\n // Present only for a submenu trigger (a root trigger sits outside any panel).\r\n private readonly parentMenu = inject(CDK_MENU, { optional: true });\r\n\r\n readonly submenu = this.parentMenu !== null;\r\n\r\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n private readonly directionality = inject(Directionality);\r\n\r\n // A family-owned submenu default (e.g. Context Menu's +4) injected from an ancestor.\r\n private readonly submenuPositionsDefault =\r\n inject(RAQM_MENU_SUBMENU_POSITIONS, { optional: true }) ?? SUBMENU_POSITIONS;\r\n\r\n // Only a root Dropdown panel matches the trigger width; submenus keep `w-auto`.\r\n private readonly overlaySync = new RaqmMenuOverlaySync(\r\n this.trigger,\r\n this.element.nativeElement,\r\n inject(DestroyRef),\r\n this.directionality,\r\n { matchAnchorWidth: !this.submenu },\r\n );\r\n\r\n /**\r\n * Installs the default placement when the application did not supply `positions`.\r\n *\r\n * @remarks\r\n * Runs in `ngOnInit` so host-directive inputs are already applied; a non-null\r\n * `menuPosition` is left untouched, so an application's list always wins.\r\n */\r\n ngOnInit(): void {\r\n if (this.trigger.menuPosition == null) {\r\n this.trigger.menuPosition = this.submenu ? this.submenuPositionsDefault : ROOT_MENU_POSITIONS;\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n DestroyRef,\r\n ElementRef,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\n\r\nimport { CdkMenuItem } from '@angular/cdk/menu';\r\n\r\n// Legacy Space key code: the CDK's own item engine switches on `keyCode` too.\r\nconst SPACE_KEY_CODE = 32;\r\n\r\n@Directive({\r\n selector: 'button[raqm-menu-item], a[raqm-menu-item]',\r\n hostDirectives: [\r\n {\r\n directive: CdkMenuItem,\r\n inputs: ['cdkMenuItemDisabled: disabled'],\r\n outputs: ['cdkMenuItemTriggered: triggered'],\r\n },\r\n ],\r\n host: {\r\n class: 'raqm-menu-item',\r\n // Exposes the active row appearance to the shipped styles, with no DOM mutation.\r\n '[attr.data-raqm-variant]': 'activeAppearance()',\r\n // Presence-only inset hook (the `data-raqm-inset` attribute exists or not).\r\n '[attr.data-raqm-inset]': 'inset() ? \"\" : null',\r\n // Focus-follows-pointer on a real pointer entry (see `onPointerEnter`).\r\n '(pointerenter)': 'onPointerEnter($event)',\r\n },\r\n})\r\nexport class RaqmMenuItemDirective {\r\n // Used only to install the anchor-only capture-phase guards.\r\n private readonly elementRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n\r\n // Scoped teardown, so a destroyed row never leaks listeners on a recycled node.\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n // Moves real DOM focus on pointer entry (the shipped `:focus` rule paints it).\r\n private readonly item = inject(CdkMenuItem);\r\n\r\n // Bare/absent is `default`; `destructive` is the only other treatment.\r\n readonly appearance = input<'default' | 'destructive' | ''>('', { alias: 'raqm-menu-item' });\r\n\r\n // The value marker or the default row treatment.\r\n protected readonly activeAppearance = computed(() => this.appearance() || 'default');\r\n\r\n // Indents the row to line up with indicator-bearing rows.\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n\r\n // Capture-phase guard for a disabled anchor: `preventDefault` blocks the native and\r\n // router destination, `stopImmediatePropagation` later same-element listeners.\r\n private readonly guardDisabledAnchor = (event: Event): void => {\r\n if (!this.item.disabled) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n };\r\n\r\n // Capture-phase Space activation for an anchor row: Space is not native anchor\r\n // activation, so stop the CDK keydown path and page default, then dispatch exactly one\r\n // `click()`; Enter stays native and a repeat never re-activates.\r\n private readonly activateAnchorWithSpace = (event: KeyboardEvent): void => {\r\n if (\r\n event.keyCode !== SPACE_KEY_CODE ||\r\n event.altKey ||\r\n event.ctrlKey ||\r\n event.metaKey ||\r\n event.shiftKey\r\n ) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n if (event.repeat || this.item.disabled) {\r\n return;\r\n }\r\n this.elementRef.nativeElement.click();\r\n };\r\n\r\n // Anchors only: the CDK covers `<button>` hosts; capture phase runs before the CDK's,\r\n // the router's and the app's same-element listeners.\r\n constructor() {\r\n const element = this.elementRef.nativeElement;\r\n if (element.nodeName !== 'A') {\r\n return;\r\n }\r\n element.addEventListener('click', this.guardDisabledAnchor, true);\r\n element.addEventListener('auxclick', this.guardDisabledAnchor, true);\r\n element.addEventListener('keydown', this.activateAnchorWithSpace, true);\r\n this.destroyRef.onDestroy(() => {\r\n element.removeEventListener('click', this.guardDisabledAnchor, true);\r\n element.removeEventListener('auxclick', this.guardDisabledAnchor, true);\r\n element.removeEventListener('keydown', this.activateAnchorWithSpace, true);\r\n });\r\n }\r\n\r\n // Hover highlight: an enabled, non-touch pointer entry goes through the public\r\n // `CdkMenuItem.focus()`, reusing the single `:focus` rule instead of adding a second\r\n // paint. It never activates the row.\r\n protected onPointerEnter(event: Event): void {\r\n if (!(event instanceof PointerEvent) || event.pointerType === 'touch' || this.item.disabled) {\r\n return;\r\n }\r\n this.item.focus();\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n OnDestroy,\r\n booleanAttribute,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n} from '@angular/core';\r\n\r\nimport { CdkMenuItem, CdkMenuItemCheckbox, CdkMenuItemSelectable } from '@angular/cdk/menu';\r\n\r\n@Directive({\r\n providers: [\r\n // The same alias chain the CDK declares on its own subclasses, retargeted here.\r\n { provide: CdkMenuItemSelectable, useExisting: RaqmMenuCheckboxItemBase },\r\n { provide: CdkMenuItem, useExisting: RaqmMenuCheckboxItemBase },\r\n ],\r\n})\r\nexport class RaqmMenuCheckboxItemBase extends CdkMenuItemCheckbox {\r\n // Caller-supplied options are preserved; the CDK still emits and toggles.\r\n override trigger(options?: { keepOpen: boolean }): void {\r\n super.trigger({ ...options, keepOpen: true });\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: 'button[raqm-menu-checkbox-item]',\r\n // The CDK owns the checkbox engine; the internal base adds keep-open.\r\n hostDirectives: [\r\n {\r\n directive: RaqmMenuCheckboxItemBase,\r\n inputs: ['cdkMenuItemDisabled: disabled'],\r\n },\r\n ],\r\n host: {\r\n class: 'raqm-menu-checkbox-item',\r\n // Presence-only inset hook (the `data-raqm-inset` attribute exists or not).\r\n '[attr.data-raqm-inset]': 'inset() ? \"\" : null',\r\n // Focus-follows-pointer, identical to `RaqmMenuItemDirective`.\r\n '(pointerenter)': 'onPointerEnter($event)',\r\n },\r\n})\r\nexport class RaqmMenuCheckboxItemDirective implements OnDestroy {\r\n // Reads the event-time checked value when `triggered` fires.\r\n private readonly checkbox = inject(RaqmMenuCheckboxItemBase);\r\n\r\n // Receives the committed state directly, so the model write paints before the CDK's\r\n // own binding re-runs.\r\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /** Indents the row to line up with indicator-bearing rows. */\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * The public two-way checked model.\r\n *\r\n * @remarks\r\n * Bound-only: the CDK's `checked` attribute transform is not exposed. The model is the\r\n * single state channel.\r\n */\r\n readonly checked = model(false);\r\n\r\n // Typed structurally (no rxjs import), matching the Select component's pattern.\r\n private readonly triggerSubscription: { unsubscribe(): void };\r\n\r\n constructor() {\r\n // Push application writes into the CDK row and paint `aria-checked` in the same pass;\r\n // the CDK's plain-field `checked` would otherwise leave the attribute one pass stale.\r\n effect(() => {\r\n const checked = this.checked();\r\n this.checkbox.checked = checked;\r\n this.element.nativeElement.setAttribute('aria-checked', String(checked));\r\n });\r\n\r\n // Negating the event-time `checked` keeps the write aligned with the CDK's own toggle.\r\n this.triggerSubscription = this.checkbox.triggered.subscribe(() => {\r\n this.checked.set(!this.checkbox.checked);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.triggerSubscription.unsubscribe();\r\n }\r\n\r\n // An enabled, non-touch entry focuses the row through `CdkMenuItem.focus()`, which\r\n // never toggles.\r\n protected onPointerEnter(event: Event): void {\r\n if (\r\n !(event instanceof PointerEvent) ||\r\n event.pointerType === 'touch' ||\r\n this.checkbox.disabled\r\n ) {\r\n return;\r\n }\r\n this.checkbox.focus();\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport interface RaqmMenuRadioGroupContext {\r\n isSelected(value: string): boolean;\r\n /** Commits one user selection using the group's two-way model. */\r\n select(value: string): void;\r\n /** Registers an item value and rejects duplicate claims in development. */\r\n register(value: string): void;\r\n /** Releases a previously registered item value. */\r\n unregister(value: string): void;\r\n}\r\n\r\nexport const RAQM_MENU_RADIO_GROUP = new InjectionToken<RaqmMenuRadioGroupContext>(\r\n 'raqm-menu-radio-group',\r\n);\r\n","import {\r\n Directive,\r\n OnDestroy,\r\n OnChanges,\r\n OnInit,\r\n SimpleChanges,\r\n booleanAttribute,\r\n effect,\r\n inject,\r\n input,\r\n isDevMode,\r\n model,\r\n} from '@angular/core';\r\n\r\nimport {\r\n CdkMenuGroup,\r\n CdkMenuItem,\r\n CdkMenuItemRadio,\r\n CdkMenuItemSelectable,\r\n} from '@angular/cdk/menu';\r\n\r\nimport { RAQM_MENU_RADIO_GROUP, RaqmMenuRadioGroupContext } from './dropdown-menu-radio-context';\r\n\r\n@Directive({\r\n providers: [\r\n { provide: CdkMenuItemSelectable, useExisting: RaqmMenuRadioItemBase },\r\n { provide: CdkMenuItem, useExisting: RaqmMenuRadioItemBase },\r\n ],\r\n})\r\nexport class RaqmMenuRadioItemBase extends CdkMenuItemRadio {\r\n /** Keeps the menu open while retaining the CDK's standard activation path. */\r\n override trigger(options?: { keepOpen: boolean }): void {\r\n super.trigger({ ...options, keepOpen: true });\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[raqm-menu-radio-group]',\r\n hostDirectives: [{ directive: CdkMenuGroup }],\r\n providers: [{ provide: RAQM_MENU_RADIO_GROUP, useExisting: RaqmMenuRadioGroupDirective }],\r\n})\r\nexport class RaqmMenuRadioGroupDirective implements RaqmMenuRadioGroupContext {\r\n /** Selected item value, or null when the group has no current selection. */\r\n readonly value = model<string | null>(null);\r\n\r\n /** Tracks live item claims so duplicate values are rejected within this group. */\r\n private readonly registrations = new Map<string, number>();\r\n\r\n /** Checks the model without normalizing unknown externally supplied values. */\r\n isSelected(value: string): boolean {\r\n return this.value() === value;\r\n }\r\n\r\n /** Commits a user selection; model signals suppress unchanged-value emissions. */\r\n select(value: string): void {\r\n this.value.set(value);\r\n }\r\n\r\n /** Adds a value claim and reports duplicate/nonempty violations clearly in development. */\r\n register(value: string): void {\r\n if (!value && isDevMode()) {\r\n throw new Error('Raqm menu radio item: a non-empty `value` is required.');\r\n }\r\n const count = this.registrations.get(value) ?? 0;\r\n if (count > 0 && isDevMode()) {\r\n throw new Error(\r\n `Raqm menu radio group: duplicate radio item value \"${value}\". ` +\r\n 'Each radio item inside one group needs a unique non-empty value.',\r\n );\r\n }\r\n this.registrations.set(value, count + 1);\r\n }\r\n\r\n /** Removes a value claim and permits later reuse when the last item is destroyed. */\r\n unregister(value: string): void {\r\n const count = this.registrations.get(value) ?? 0;\r\n if (count <= 1) {\r\n this.registrations.delete(value);\r\n } else {\r\n this.registrations.set(value, count - 1);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Menu radio item deriving its checked state from the enclosing group's value.\r\n * CDK owns ARIA, keyboard navigation, dispatch and disabled activation behavior.\r\n */\r\n@Directive({\r\n selector: 'button[raqm-menu-radio-item]',\r\n hostDirectives: [\r\n {\r\n directive: RaqmMenuRadioItemBase,\r\n inputs: ['cdkMenuItemDisabled: disabled'],\r\n },\r\n ],\r\n host: {\r\n class: 'raqm-menu-radio-item',\r\n '[attr.data-raqm-inset]': 'inset() ? \"\" : null',\r\n '(pointerenter)': 'onPointerEnter($event)',\r\n },\r\n})\r\nexport class RaqmMenuRadioItemDirective implements OnInit, OnChanges, OnDestroy {\r\n private readonly radio = inject(RaqmMenuRadioItemBase);\r\n\r\n private readonly group: RaqmMenuRadioGroupContext;\r\n\r\n readonly value = input.required<string>();\r\n\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n\r\n /** CDK triggered subscription, used to make exactly one model commit per activation. */\r\n private readonly triggerSubscription: { unsubscribe(): void };\r\n\r\n /** Registered value retained so input changes and teardown release the correct claim. */\r\n private registeredValue: string | null = null;\r\n\r\n constructor() {\r\n const group = inject(RAQM_MENU_RADIO_GROUP, { optional: true });\r\n if (!group) {\r\n throw new Error('Raqm menu radio item: an enclosing [raqm-menu-radio-group] is required.');\r\n }\r\n this.group = group;\r\n\r\n effect(() => {\r\n this.radio.checked = this.group.isSelected(this.value());\r\n });\r\n\r\n this.triggerSubscription = this.radio.triggered.subscribe(() => {\r\n if (!this.radio.disabled) {\r\n this.group.select(this.value());\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.updateRegistration(this.value());\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['value'] && this.registeredValue !== null) {\r\n this.updateRegistration(this.value());\r\n }\r\n }\r\n\r\n /** Swaps the registered claim only after the proposed value passes group validation. */\r\n private updateRegistration(value: string): void {\r\n if (value === this.registeredValue) {\r\n return;\r\n }\r\n this.group.register(value);\r\n const previousValue = this.registeredValue;\r\n this.registeredValue = value;\r\n if (previousValue !== null) {\r\n this.group.unregister(previousValue);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.registeredValue !== null) {\r\n this.group.unregister(this.registeredValue);\r\n }\r\n this.triggerSubscription.unsubscribe();\r\n }\r\n\r\n protected onPointerEnter(event: Event): void {\r\n if (!(event instanceof PointerEvent) || event.pointerType === 'touch' || this.radio.disabled) {\r\n return;\r\n }\r\n this.radio.focus();\r\n }\r\n}\r\n","import {\r\n RaqmMenuDirective,\r\n RaqmMenuGroupDirective,\r\n RaqmMenuLabelDirective,\r\n RaqmMenuSeparatorDirective,\r\n RaqmMenuShortcutDirective,\r\n} from './dropdown-menu.directive';\r\nimport {\r\n RaqmMenuTriggerDirective,\r\n RAQM_MENU_SUBMENU_POSITIONS,\r\n} from './dropdown-menu-trigger.directive';\r\nimport {\r\n RaqmMenuOverlaySync,\r\n RaqmMenuDirection,\r\n RaqmMenuTriggerBase,\r\n RaqmContextMenuTriggerBase,\r\n} from './menu-overlay';\r\nimport type { RaqmMenuAnchorPoint, RaqmMenuOverlaySyncOptions } from './menu-overlay';\r\nimport { RaqmMenuItemDirective } from './dropdown-menu-item.directive';\r\nimport {\r\n RaqmMenuCheckboxItemBase,\r\n RaqmMenuCheckboxItemDirective,\r\n} from './dropdown-menu-checkbox-item.directive';\r\nimport {\r\n RaqmMenuRadioGroupDirective,\r\n RaqmMenuRadioItemBase,\r\n RaqmMenuRadioItemDirective,\r\n} from './dropdown-menu-radio.directive';\r\n\r\nexport {\r\n RaqmMenuDirective,\r\n RaqmMenuGroupDirective,\r\n RaqmMenuLabelDirective,\r\n RaqmMenuSeparatorDirective,\r\n RaqmMenuShortcutDirective,\r\n};\r\nexport { RaqmMenuTriggerDirective, RAQM_MENU_SUBMENU_POSITIONS };\r\n// INTERNAL — shared across entrypoints; not supported application-facing API.\r\n// NG3001 also requires exported host-directive bases/direction to be visible here.\r\nexport { RaqmMenuOverlaySync, RaqmMenuDirection, RaqmMenuTriggerBase, RaqmContextMenuTriggerBase };\r\nexport type { RaqmMenuAnchorPoint, RaqmMenuOverlaySyncOptions };\r\nexport { RaqmMenuItemDirective };\r\nexport { RaqmMenuCheckboxItemDirective };\r\nexport { RaqmMenuRadioGroupDirective, RaqmMenuRadioItemDirective };\r\n// INTERNAL — do not remove and do not treat as supported API. NG3001 requires classes\r\n// named in exported `hostDirectives` to be exported, so both keep-open bases ship here.\r\nexport { RaqmMenuCheckboxItemBase };\r\nexport { RaqmMenuRadioItemBase };\r\n\r\nexport const RaqmDropdownMenu = [\r\n RaqmMenuDirective,\r\n RaqmMenuTriggerDirective,\r\n RaqmMenuItemDirective,\r\n RaqmMenuCheckboxItemDirective,\r\n RaqmMenuRadioGroupDirective,\r\n RaqmMenuRadioItemDirective,\r\n RaqmMenuGroupDirective,\r\n RaqmMenuLabelDirective,\r\n RaqmMenuSeparatorDirective,\r\n RaqmMenuShortcutDirective,\r\n] as const;\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"raqm-ui-dropdown-menu.mjs","names":["i1.RaqmMenuDirection","i1.RaqmMenuDirection","i1.RaqmMenuTriggerBase","i1","i1"],"sources":["../../../projects/ui/dropdown-menu/menu-overlay.ts","../../../projects/ui/dropdown-menu/dropdown-menu.directive.ts","../../../projects/ui/dropdown-menu/dropdown-menu-trigger.directive.ts","../../../projects/ui/dropdown-menu/dropdown-menu-item.directive.ts","../../../projects/ui/dropdown-menu/dropdown-menu-checkbox-item.directive.ts","../../../projects/ui/dropdown-menu/dropdown-menu-radio-context.ts","../../../projects/ui/dropdown-menu/dropdown-menu-radio.directive.ts","../../../projects/ui/dropdown-menu/public-api.ts"],"sourcesContent":["import { DestroyRef, Directive, ElementRef, forwardRef, inject } from '@angular/core';\r\nimport { Direction, Directionality } from '@angular/cdk/bidi';\r\nimport {\r\n CdkContextMenuTrigger,\r\n CdkMenuTrigger,\r\n CdkMenuTriggerBase,\r\n MENU_STACK,\r\n MENU_TRIGGER,\r\n MenuStack,\r\n PARENT_OR_NEW_MENU_STACK_PROVIDER,\r\n} from '@angular/cdk/menu';\r\nimport {\r\n ConnectedPosition,\r\n FlexibleConnectedPositionStrategy,\r\n OverlayRef,\r\n} from '@angular/cdk/overlay';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { registerOverlayOwnership } from '@raqm/ui/overlay-internal';\r\n\r\n/** @internal Computed CSS direction, including plain ancestors without CDK Dir. */\r\n@Directive({\r\n providers: [{ provide: Directionality, useExisting: forwardRef(() => RaqmMenuDirection) }],\r\n})\r\nexport class RaqmMenuDirection extends Directionality {\r\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n private observer: MutationObserver | null = null;\r\n private disposed = false;\r\n\r\n override get value(): Direction {\r\n const view = this.element.ownerDocument.defaultView;\r\n return view\r\n ? view.getComputedStyle(this.element).direction === 'rtl'\r\n ? 'rtl'\r\n : 'ltr'\r\n : super.value;\r\n }\r\n\r\n constructor() {\r\n super();\r\n queueMicrotask(() => {\r\n if (this.disposed) return;\r\n const view = this.element.ownerDocument.defaultView;\r\n if (!view) return;\r\n const sync = (): void => {\r\n const next = this.value;\r\n if (next !== this.valueSignal()) {\r\n this.valueSignal.set(next);\r\n this.change.emit(next);\r\n }\r\n };\r\n this.observer = new view.MutationObserver(sync);\r\n for (let node: HTMLElement | null = this.element; node; node = node.parentElement) {\r\n this.observer.observe(node, {\r\n attributes: true,\r\n attributeFilter: ['dir', 'class', 'style'],\r\n });\r\n }\r\n sync();\r\n });\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.disposed = true;\r\n this.observer?.disconnect();\r\n super.ngOnDestroy();\r\n }\r\n}\r\n\r\n/** @internal Bridge only the documented protected overlay extension point. */\r\n@Directive({\r\n providers: [\r\n { provide: CdkMenuTrigger, useExisting: forwardRef(() => RaqmMenuTriggerBase) },\r\n { provide: MENU_TRIGGER, useExisting: forwardRef(() => RaqmMenuTriggerBase) },\r\n PARENT_OR_NEW_MENU_STACK_PROVIDER,\r\n ],\r\n})\r\nexport class RaqmMenuTriggerBase extends CdkMenuTrigger {\r\n get menuOverlay(): OverlayRef | null {\r\n return this.overlayRef;\r\n }\r\n}\r\n\r\n@Directive({\r\n providers: [\r\n { provide: CdkContextMenuTrigger, useExisting: forwardRef(() => RaqmContextMenuTriggerBase) },\r\n { provide: MENU_TRIGGER, useExisting: forwardRef(() => RaqmContextMenuTriggerBase) },\r\n { provide: MENU_STACK, useClass: MenuStack },\r\n ],\r\n})\r\nexport class RaqmContextMenuTriggerBase extends CdkContextMenuTrigger {\r\n readonly geometryChanged = new Subject<void>();\r\n get menuOverlay(): OverlayRef | null {\r\n return this.overlayRef;\r\n }\r\n menuAnchorPoint: RaqmMenuAnchorPoint | null = null;\r\n override open(coordinates: { x: number; y: number }): void {\r\n this.menuAnchorPoint = coordinates;\r\n super.open(coordinates);\r\n this.geometryChanged.next();\r\n }\r\n override ngOnDestroy(): void {\r\n this.geometryChanged.complete();\r\n super.ngOnDestroy();\r\n }\r\n}\r\n\r\n/** @internal Pointer anchor coordinates used only by the shipped overlay bridge. */\r\nexport interface RaqmMenuAnchorPoint {\r\n readonly x: number;\r\n readonly y: number;\r\n}\r\n/** @internal Bridge options for shipped menu wrappers, not consumer configuration. */\r\nexport interface RaqmMenuOverlaySyncOptions {\r\n readonly matchAnchorWidth: boolean;\r\n readonly anchorPoint?: () => RaqmMenuAnchorPoint | null;\r\n /** Recompute family defaults only; preserve explicit consumer positions. */\r\n readonly positions?: () => ConnectedPosition[];\r\n}\r\n\r\n/** @internal Synchronizes the exact trigger overlay through public OverlayRef APIs. */\r\nexport class RaqmMenuOverlaySync {\r\n private generation = 0;\r\n private disposed = false;\r\n private frame = 0;\r\n private overlay: OverlayRef | null = null;\r\n private releaseOwnership: (() => void) | undefined;\r\n private resizeObserver: ResizeObserver | null = null;\r\n private connection: ConnectedPosition | undefined;\r\n private readonly subscriptions = new Subscription();\r\n private readonly schedule = (): void => {\r\n const view = this.anchor.ownerDocument.defaultView;\r\n if (!view || !this.overlay || this.frame || this.disposed) return;\r\n this.frame = view.requestAnimationFrame(() => {\r\n this.frame = 0;\r\n this.measure();\r\n });\r\n };\r\n\r\n constructor(\r\n private readonly trigger: CdkMenuTriggerBase & { readonly menuOverlay: OverlayRef | null },\r\n private readonly anchor: HTMLElement,\r\n destroyRef: DestroyRef,\r\n private readonly directionality: Directionality,\r\n private readonly options: RaqmMenuOverlaySyncOptions,\r\n ) {\r\n this.subscriptions.add(\r\n trigger.opened.subscribe(() => {\r\n const generation = ++this.generation;\r\n queueMicrotask(() => {\r\n if (this.disposed || generation !== this.generation || !trigger.isOpen()) return;\r\n this.detach();\r\n this.overlay = trigger.menuOverlay;\r\n if (!this.overlay) return;\r\n this.releaseOwnership = registerOverlayOwnership(this.anchor, this.overlay);\r\n this.observe();\r\n this.measure();\r\n });\r\n }),\r\n );\r\n this.subscriptions.add(\r\n trigger.closed.subscribe(() => {\r\n ++this.generation;\r\n this.detach();\r\n }),\r\n );\r\n this.subscriptions.add(directionality.change.subscribe(this.schedule));\r\n if (trigger instanceof RaqmContextMenuTriggerBase) {\r\n this.subscriptions.add(trigger.geometryChanged.subscribe(this.schedule));\r\n }\r\n destroyRef.onDestroy(() => {\r\n this.disposed = true;\r\n ++this.generation;\r\n this.detach();\r\n this.subscriptions.unsubscribe();\r\n });\r\n }\r\n\r\n refresh(): void {\r\n this.schedule();\r\n }\r\n\r\n private measure(): void {\r\n const overlay = this.overlay;\r\n if (this.disposed || !overlay?.hasAttached()) return;\r\n const strategy = overlay.getConfig().positionStrategy;\r\n if (!(strategy instanceof FlexibleConnectedPositionStrategy)) return;\r\n const pane = overlay.overlayElement;\r\n const height = this.anchor.ownerDocument.documentElement.clientHeight;\r\n overlay.setDirection(this.directionality.value);\r\n const positions = this.options.positions?.() ?? strategy.positions;\r\n strategy.withPositions(positions.map((position) => ({ ...position })));\r\n if (this.options.matchAnchorWidth) {\r\n pane.style.setProperty(\r\n '--raqm-menu-anchor-width',\r\n `${this.anchor.getBoundingClientRect().width}px`,\r\n );\r\n pane.setAttribute('data-raqm-anchor-width', '');\r\n }\r\n pane.style.setProperty('--raqm-menu-available-height', `${Math.max(0, height - 10)}px`);\r\n strategy\r\n .withViewportMargin(5)\r\n .withFlexibleDimensions(false)\r\n .withLockedPosition(false)\r\n .withPush(true);\r\n const selection = strategy.positionChanges.subscribe((event) => {\r\n this.connection = event.connectionPair;\r\n });\r\n overlay.updatePosition();\r\n selection.unsubscribe();\r\n if (!this.connection) return;\r\n const pair = this.connection;\r\n const point = this.options.anchorPoint?.();\r\n const rect = this.anchor.getBoundingClientRect();\r\n const origin = point\r\n ? point.y\r\n : pair.originY === 'top'\r\n ? rect.top\r\n : pair.originY === 'bottom'\r\n ? rect.bottom\r\n : rect.top + rect.height / 2;\r\n const edge = Math.max(5, Math.min(height - 5, origin + (pair.offsetY ?? 0)));\r\n const available =\r\n pair.overlayY === 'bottom'\r\n ? edge - 5\r\n : pair.overlayY === 'center'\r\n ? 2 * Math.min(edge - 5, height - 5 - edge)\r\n : height - 5 - edge;\r\n pane.style.setProperty(\r\n '--raqm-menu-available-height',\r\n `${Math.max(0, Math.min(height - 10, available))}px`,\r\n );\r\n strategy.reapplyLastPosition();\r\n }\r\n\r\n private observe(): void {\r\n const view = this.anchor.ownerDocument.defaultView;\r\n view?.addEventListener('resize', this.schedule, { passive: true });\r\n view?.document.addEventListener('scroll', this.schedule, { capture: true, passive: true });\r\n if (view && typeof view.ResizeObserver !== 'undefined' && this.overlay) {\r\n this.resizeObserver = new view.ResizeObserver(this.schedule);\r\n this.resizeObserver.observe(this.overlay.overlayElement);\r\n this.resizeObserver.observe(this.anchor);\r\n }\r\n }\r\n\r\n private detach(): void {\r\n this.releaseOwnership?.();\r\n this.releaseOwnership = undefined;\r\n const view = this.anchor.ownerDocument.defaultView;\r\n view?.removeEventListener('resize', this.schedule);\r\n view?.document.removeEventListener('scroll', this.schedule, { capture: true });\r\n if (this.frame) view?.cancelAnimationFrame(this.frame);\r\n this.frame = 0;\r\n this.resizeObserver?.disconnect();\r\n this.resizeObserver = null;\r\n this.overlay = null;\r\n this.connection = undefined;\r\n }\r\n}\r\n","import { Directive, booleanAttribute, input } from '@angular/core';\r\n\r\nimport { CdkMenu } from '@angular/cdk/menu';\r\nimport { RaqmMenuDirection } from './menu-overlay';\r\n\r\n@Directive({\r\n selector: '[raqm-menu]',\r\n // The CDK supplies role, focus, keyboard and typeahead; the wrapper adds the class.\r\n hostDirectives: [RaqmMenuDirection, { directive: CdkMenu }],\r\n // Detached from the trigger's DOM scope, the panel publishes its own live direction.\r\n host: {\r\n class: 'raqm-menu',\r\n },\r\n})\r\nexport class RaqmMenuDirective {}\r\n\r\n@Directive({\r\n selector: '[raqm-menu-group]',\r\n host: {\r\n class: 'raqm-menu-group',\r\n // A group inside a `role=\"menu\"` is a real ARIA group; the name is the app's.\r\n role: 'group',\r\n },\r\n})\r\nexport class RaqmMenuGroupDirective {}\r\n\r\n@Directive({\r\n selector: '[raqm-menu-label]',\r\n host: {\r\n class: 'raqm-menu-label',\r\n // Presence-only inset hook (the `data-raqm-inset` attribute exists or not).\r\n '[attr.data-raqm-inset]': 'inset() ? \"\" : null',\r\n },\r\n})\r\nexport class RaqmMenuLabelDirective {\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n}\r\n\r\n/**\r\n * Attribute directive marking a non-focusable decorative 1px rule between menu regions.\r\n *\r\n * @remarks\r\n * Carries `role=\"separator\"`/`aria-orientation` and is never a roving-tabindex item.\r\n */\r\n@Directive({\r\n selector: '[raqm-menu-separator]',\r\n host: {\r\n class: 'raqm-menu-separator',\r\n // A real (non-focusable) ARIA separator in the horizontal orientation.\r\n role: 'separator',\r\n 'aria-orientation': 'horizontal',\r\n },\r\n})\r\nexport class RaqmMenuSeparatorDirective {}\r\n\r\n/**\r\n * Attribute directive styling a passive keyboard-hint span inside a menu row.\r\n *\r\n * @remarks\r\n * Display-only: no accelerator registration, global key listener or command service.\r\n */\r\n@Directive({\r\n selector: '[raqm-menu-shortcut]',\r\n host: {\r\n class: 'raqm-menu-shortcut',\r\n },\r\n})\r\nexport class RaqmMenuShortcutDirective {}\r\n","import { DestroyRef, Directive, ElementRef, InjectionToken, OnInit, inject } from '@angular/core';\r\n\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { CDK_MENU } from '@angular/cdk/menu';\r\nimport { ConnectedPosition } from '@angular/cdk/overlay';\r\n\r\nimport { RaqmMenuDirection, RaqmMenuOverlaySync, RaqmMenuTriggerBase } from './menu-overlay';\r\n\r\nconst ROOT_MENU_SIDE_OFFSET = 4;\r\n\r\n// Opens below the trigger's inline start and flips above when there is no room. The\r\n// CDK resolves logical `start` against the nearest direction, so RTL needs no override;\r\n// `offsetY` is physical and its sign follows the flipped side.\r\nconst ROOT_MENU_POSITIONS: ConnectedPosition[] = [\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: ROOT_MENU_SIDE_OFFSET,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n offsetY: -ROOT_MENU_SIDE_OFFSET,\r\n },\r\n];\r\n\r\n// The submenu is nudged 3px up along its vertical alignment axis. The offset is\r\n// vertical, so its sign is direction-independent (unlike a horizontal align nudge).\r\nconst SUBMENU_ALIGN_OFFSET = -3;\r\n\r\n// Opens at the trigger's inline end, top-aligned with the 3px nudge, and flips to the\r\n// inline start when there is no room. Logical `end`/`start` resolve against the nearest\r\n// direction, so a submenu always opens away from the text direction.\r\nconst SUBMENU_POSITIONS: ConnectedPosition[] = [\r\n {\r\n originX: 'end',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: SUBMENU_ALIGN_OFFSET,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'end',\r\n overlayY: 'top',\r\n offsetY: SUBMENU_ALIGN_OFFSET,\r\n },\r\n];\r\n\r\nexport const RAQM_MENU_SUBMENU_POSITIONS = new InjectionToken<ConnectedPosition[]>(\r\n 'RAQM_MENU_SUBMENU_POSITIONS',\r\n);\r\n\r\n@Directive({\r\n selector: 'button[raqm-menu-trigger-for], a[raqm-menu-trigger-for]',\r\n // The CDK owns the trigger engine; the wrapper renames the surface and adds the class.\r\n hostDirectives: [\r\n RaqmMenuDirection,\r\n {\r\n directive: RaqmMenuTriggerBase,\r\n inputs: ['cdkMenuTriggerFor: raqm-menu-trigger-for', 'cdkMenuPosition: positions'],\r\n outputs: ['cdkMenuOpened: opened', 'cdkMenuClosed: closed'],\r\n },\r\n ],\r\n host: {\r\n class: 'raqm-menu-trigger',\r\n // Presence-only hook marking a trigger inside a menu panel; the chevron rules use it.\r\n '[attr.data-raqm-submenu]': 'submenu ? \"\" : null',\r\n },\r\n})\r\nexport class RaqmMenuTriggerDirective implements OnInit {\r\n private readonly trigger = inject(RaqmMenuTriggerBase);\r\n\r\n // Present only for a submenu trigger (a root trigger sits outside any panel).\r\n private readonly parentMenu = inject(CDK_MENU, { optional: true });\r\n\r\n readonly submenu = this.parentMenu !== null;\r\n\r\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n private readonly directionality = inject(Directionality);\r\n\r\n // A family-owned submenu default (e.g. Context Menu's +4) injected from an ancestor.\r\n private readonly submenuPositionsDefault =\r\n inject(RAQM_MENU_SUBMENU_POSITIONS, { optional: true }) ?? SUBMENU_POSITIONS;\r\n\r\n // Only a root Dropdown panel matches the trigger width; submenus keep `w-auto`.\r\n private readonly overlaySync = new RaqmMenuOverlaySync(\r\n this.trigger,\r\n this.element.nativeElement,\r\n inject(DestroyRef),\r\n this.directionality,\r\n { matchAnchorWidth: !this.submenu },\r\n );\r\n\r\n /**\r\n * Installs the default placement when the application did not supply `positions`.\r\n *\r\n * @remarks\r\n * Runs in `ngOnInit` so host-directive inputs are already applied; a non-null\r\n * `menuPosition` is left untouched, so an application's list always wins.\r\n */\r\n ngOnInit(): void {\r\n if (this.trigger.menuPosition == null) {\r\n this.trigger.menuPosition = this.submenu ? this.submenuPositionsDefault : ROOT_MENU_POSITIONS;\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n DestroyRef,\r\n ElementRef,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\n\r\nimport { CdkMenuItem } from '@angular/cdk/menu';\r\n\r\n// Legacy Space key code: the CDK's own item engine switches on `keyCode` too.\r\nconst SPACE_KEY_CODE = 32;\r\n\r\n@Directive({\r\n selector: 'button[raqm-menu-item], a[raqm-menu-item]',\r\n hostDirectives: [\r\n {\r\n directive: CdkMenuItem,\r\n inputs: ['cdkMenuItemDisabled: disabled'],\r\n outputs: ['cdkMenuItemTriggered: triggered'],\r\n },\r\n ],\r\n host: {\r\n class: 'raqm-menu-item',\r\n // Exposes the active row appearance to the shipped styles, with no DOM mutation.\r\n '[attr.data-raqm-variant]': 'activeAppearance()',\r\n // Presence-only inset hook (the `data-raqm-inset` attribute exists or not).\r\n '[attr.data-raqm-inset]': 'inset() ? \"\" : null',\r\n // Focus-follows-pointer on a real pointer entry (see `onPointerEnter`).\r\n '(pointerenter)': 'onPointerEnter($event)',\r\n },\r\n})\r\nexport class RaqmMenuItemDirective {\r\n // Used only to install the anchor-only capture-phase guards.\r\n private readonly elementRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n\r\n // Scoped teardown, so a destroyed row never leaks listeners on a recycled node.\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n // Moves real DOM focus on pointer entry (the shipped `:focus` rule paints it).\r\n private readonly item = inject(CdkMenuItem);\r\n\r\n // Bare/absent is `default`; `destructive` is the only other treatment.\r\n readonly appearance = input<'default' | 'destructive' | ''>('', { alias: 'raqm-menu-item' });\r\n\r\n // The value marker or the default row treatment.\r\n protected readonly activeAppearance = computed(() => this.appearance() || 'default');\r\n\r\n // Indents the row to line up with indicator-bearing rows.\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n\r\n // Capture-phase guard for a disabled anchor: `preventDefault` blocks the native and\r\n // router destination, `stopImmediatePropagation` later same-element listeners.\r\n private readonly guardDisabledAnchor = (event: Event): void => {\r\n if (!this.item.disabled) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n };\r\n\r\n // Capture-phase Space activation for an anchor row: Space is not native anchor\r\n // activation, so stop the CDK keydown path and page default, then dispatch exactly one\r\n // `click()`; Enter stays native and a repeat never re-activates.\r\n private readonly activateAnchorWithSpace = (event: KeyboardEvent): void => {\r\n if (\r\n event.keyCode !== SPACE_KEY_CODE ||\r\n event.altKey ||\r\n event.ctrlKey ||\r\n event.metaKey ||\r\n event.shiftKey\r\n ) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n if (event.repeat || this.item.disabled) {\r\n return;\r\n }\r\n this.elementRef.nativeElement.click();\r\n };\r\n\r\n // Anchors only: the CDK covers `<button>` hosts; capture phase runs before the CDK's,\r\n // the router's and the app's same-element listeners.\r\n constructor() {\r\n const element = this.elementRef.nativeElement;\r\n if (element.nodeName !== 'A') {\r\n return;\r\n }\r\n element.addEventListener('click', this.guardDisabledAnchor, true);\r\n element.addEventListener('auxclick', this.guardDisabledAnchor, true);\r\n element.addEventListener('keydown', this.activateAnchorWithSpace, true);\r\n this.destroyRef.onDestroy(() => {\r\n element.removeEventListener('click', this.guardDisabledAnchor, true);\r\n element.removeEventListener('auxclick', this.guardDisabledAnchor, true);\r\n element.removeEventListener('keydown', this.activateAnchorWithSpace, true);\r\n });\r\n }\r\n\r\n // Hover highlight: an enabled, non-touch pointer entry goes through the public\r\n // `CdkMenuItem.focus()`, reusing the single `:focus` rule instead of adding a second\r\n // paint. It never activates the row.\r\n protected onPointerEnter(event: Event): void {\r\n if (!(event instanceof PointerEvent) || event.pointerType === 'touch' || this.item.disabled) {\r\n return;\r\n }\r\n this.item.focus();\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n OnDestroy,\r\n booleanAttribute,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n} from '@angular/core';\r\n\r\nimport { CdkMenuItem, CdkMenuItemCheckbox, CdkMenuItemSelectable } from '@angular/cdk/menu';\r\n\r\n@Directive({\r\n providers: [\r\n // The same alias chain the CDK declares on its own subclasses, retargeted here.\r\n { provide: CdkMenuItemSelectable, useExisting: RaqmMenuCheckboxItemBase },\r\n { provide: CdkMenuItem, useExisting: RaqmMenuCheckboxItemBase },\r\n ],\r\n})\r\nexport class RaqmMenuCheckboxItemBase extends CdkMenuItemCheckbox {\r\n // Caller-supplied options are preserved; the CDK still emits and toggles.\r\n override trigger(options?: { keepOpen: boolean }): void {\r\n super.trigger({ ...options, keepOpen: true });\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: 'button[raqm-menu-checkbox-item]',\r\n // The CDK owns the checkbox engine; the internal base adds keep-open.\r\n hostDirectives: [\r\n {\r\n directive: RaqmMenuCheckboxItemBase,\r\n inputs: ['cdkMenuItemDisabled: disabled'],\r\n },\r\n ],\r\n host: {\r\n class: 'raqm-menu-checkbox-item',\r\n // Presence-only inset hook (the `data-raqm-inset` attribute exists or not).\r\n '[attr.data-raqm-inset]': 'inset() ? \"\" : null',\r\n // Focus-follows-pointer, identical to `RaqmMenuItemDirective`.\r\n '(pointerenter)': 'onPointerEnter($event)',\r\n },\r\n})\r\nexport class RaqmMenuCheckboxItemDirective implements OnDestroy {\r\n // Reads the event-time checked value when `triggered` fires.\r\n private readonly checkbox = inject(RaqmMenuCheckboxItemBase);\r\n\r\n // Receives the committed state directly, so the model write paints before the CDK's\r\n // own binding re-runs.\r\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /** Indents the row to line up with indicator-bearing rows. */\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * The public two-way checked model.\r\n *\r\n * @remarks\r\n * Bound-only: the CDK's `checked` attribute transform is not exposed. The model is the\r\n * single state channel.\r\n */\r\n readonly checked = model(false);\r\n\r\n // Typed structurally (no rxjs import), matching the Select component's pattern.\r\n private readonly triggerSubscription: { unsubscribe(): void };\r\n\r\n constructor() {\r\n // Push application writes into the CDK row and paint `aria-checked` in the same pass;\r\n // the CDK's plain-field `checked` would otherwise leave the attribute one pass stale.\r\n effect(() => {\r\n const checked = this.checked();\r\n this.checkbox.checked = checked;\r\n this.element.nativeElement.setAttribute('aria-checked', String(checked));\r\n });\r\n\r\n // Negating the event-time `checked` keeps the write aligned with the CDK's own toggle.\r\n this.triggerSubscription = this.checkbox.triggered.subscribe(() => {\r\n this.checked.set(!this.checkbox.checked);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.triggerSubscription.unsubscribe();\r\n }\r\n\r\n // An enabled, non-touch entry focuses the row through `CdkMenuItem.focus()`, which\r\n // never toggles.\r\n protected onPointerEnter(event: Event): void {\r\n if (\r\n !(event instanceof PointerEvent) ||\r\n event.pointerType === 'touch' ||\r\n this.checkbox.disabled\r\n ) {\r\n return;\r\n }\r\n this.checkbox.focus();\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport interface RaqmMenuRadioGroupContext {\r\n isSelected(value: string): boolean;\r\n /** Commits one user selection using the group's two-way model. */\r\n select(value: string): void;\r\n /** Registers an item value and rejects duplicate claims in development. */\r\n register(value: string): void;\r\n /** Releases a previously registered item value. */\r\n unregister(value: string): void;\r\n}\r\n\r\nexport const RAQM_MENU_RADIO_GROUP = new InjectionToken<RaqmMenuRadioGroupContext>(\r\n 'raqm-menu-radio-group',\r\n);\r\n","import {\r\n Directive,\r\n OnDestroy,\r\n OnChanges,\r\n OnInit,\r\n SimpleChanges,\r\n booleanAttribute,\r\n effect,\r\n inject,\r\n input,\r\n isDevMode,\r\n model,\r\n} from '@angular/core';\r\n\r\nimport {\r\n CdkMenuGroup,\r\n CdkMenuItem,\r\n CdkMenuItemRadio,\r\n CdkMenuItemSelectable,\r\n} from '@angular/cdk/menu';\r\n\r\nimport { RAQM_MENU_RADIO_GROUP, RaqmMenuRadioGroupContext } from './dropdown-menu-radio-context';\r\n\r\n@Directive({\r\n providers: [\r\n { provide: CdkMenuItemSelectable, useExisting: RaqmMenuRadioItemBase },\r\n { provide: CdkMenuItem, useExisting: RaqmMenuRadioItemBase },\r\n ],\r\n})\r\nexport class RaqmMenuRadioItemBase extends CdkMenuItemRadio {\r\n /** Keeps the menu open while retaining the CDK's standard activation path. */\r\n override trigger(options?: { keepOpen: boolean }): void {\r\n super.trigger({ ...options, keepOpen: true });\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[raqm-menu-radio-group]',\r\n hostDirectives: [{ directive: CdkMenuGroup }],\r\n providers: [{ provide: RAQM_MENU_RADIO_GROUP, useExisting: RaqmMenuRadioGroupDirective }],\r\n})\r\nexport class RaqmMenuRadioGroupDirective implements RaqmMenuRadioGroupContext {\r\n /** Selected item value, or null when the group has no current selection. */\r\n readonly value = model<string | null>(null);\r\n\r\n /** Tracks live item claims so duplicate values are rejected within this group. */\r\n private readonly registrations = new Map<string, number>();\r\n\r\n /** Checks the model without normalizing unknown externally supplied values. */\r\n isSelected(value: string): boolean {\r\n return this.value() === value;\r\n }\r\n\r\n /** Commits a user selection; model signals suppress unchanged-value emissions. */\r\n select(value: string): void {\r\n this.value.set(value);\r\n }\r\n\r\n /** Adds a value claim and reports duplicate/nonempty violations clearly in development. */\r\n register(value: string): void {\r\n if (!value && isDevMode()) {\r\n throw new Error('Raqm menu radio item: a non-empty `value` is required.');\r\n }\r\n const count = this.registrations.get(value) ?? 0;\r\n if (count > 0 && isDevMode()) {\r\n throw new Error(\r\n `Raqm menu radio group: duplicate radio item value \"${value}\". ` +\r\n 'Each radio item inside one group needs a unique non-empty value.',\r\n );\r\n }\r\n this.registrations.set(value, count + 1);\r\n }\r\n\r\n /** Removes a value claim and permits later reuse when the last item is destroyed. */\r\n unregister(value: string): void {\r\n const count = this.registrations.get(value) ?? 0;\r\n if (count <= 1) {\r\n this.registrations.delete(value);\r\n } else {\r\n this.registrations.set(value, count - 1);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Menu radio item deriving its checked state from the enclosing group's value.\r\n * CDK owns ARIA, keyboard navigation, dispatch and disabled activation behavior.\r\n */\r\n@Directive({\r\n selector: 'button[raqm-menu-radio-item]',\r\n hostDirectives: [\r\n {\r\n directive: RaqmMenuRadioItemBase,\r\n inputs: ['cdkMenuItemDisabled: disabled'],\r\n },\r\n ],\r\n host: {\r\n class: 'raqm-menu-radio-item',\r\n '[attr.data-raqm-inset]': 'inset() ? \"\" : null',\r\n '(pointerenter)': 'onPointerEnter($event)',\r\n },\r\n})\r\nexport class RaqmMenuRadioItemDirective implements OnInit, OnChanges, OnDestroy {\r\n private readonly radio = inject(RaqmMenuRadioItemBase);\r\n\r\n private readonly group: RaqmMenuRadioGroupContext;\r\n\r\n readonly value = input.required<string>();\r\n\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n\r\n /** CDK triggered subscription, used to make exactly one model commit per activation. */\r\n private readonly triggerSubscription: { unsubscribe(): void };\r\n\r\n /** Registered value retained so input changes and teardown release the correct claim. */\r\n private registeredValue: string | null = null;\r\n\r\n constructor() {\r\n const group = inject(RAQM_MENU_RADIO_GROUP, { optional: true });\r\n if (!group) {\r\n throw new Error('Raqm menu radio item: an enclosing [raqm-menu-radio-group] is required.');\r\n }\r\n this.group = group;\r\n\r\n effect(() => {\r\n this.radio.checked = this.group.isSelected(this.value());\r\n });\r\n\r\n this.triggerSubscription = this.radio.triggered.subscribe(() => {\r\n if (!this.radio.disabled) {\r\n this.group.select(this.value());\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.updateRegistration(this.value());\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['value'] && this.registeredValue !== null) {\r\n this.updateRegistration(this.value());\r\n }\r\n }\r\n\r\n /** Swaps the registered claim only after the proposed value passes group validation. */\r\n private updateRegistration(value: string): void {\r\n if (value === this.registeredValue) {\r\n return;\r\n }\r\n this.group.register(value);\r\n const previousValue = this.registeredValue;\r\n this.registeredValue = value;\r\n if (previousValue !== null) {\r\n this.group.unregister(previousValue);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.registeredValue !== null) {\r\n this.group.unregister(this.registeredValue);\r\n }\r\n this.triggerSubscription.unsubscribe();\r\n }\r\n\r\n protected onPointerEnter(event: Event): void {\r\n if (!(event instanceof PointerEvent) || event.pointerType === 'touch' || this.radio.disabled) {\r\n return;\r\n }\r\n this.radio.focus();\r\n }\r\n}\r\n","import {\r\n RaqmMenuDirective,\r\n RaqmMenuGroupDirective,\r\n RaqmMenuLabelDirective,\r\n RaqmMenuSeparatorDirective,\r\n RaqmMenuShortcutDirective,\r\n} from './dropdown-menu.directive';\r\nimport {\r\n RaqmMenuTriggerDirective,\r\n RAQM_MENU_SUBMENU_POSITIONS,\r\n} from './dropdown-menu-trigger.directive';\r\nimport {\r\n RaqmMenuOverlaySync,\r\n RaqmMenuDirection,\r\n RaqmMenuTriggerBase,\r\n RaqmContextMenuTriggerBase,\r\n} from './menu-overlay';\r\nimport type { RaqmMenuAnchorPoint, RaqmMenuOverlaySyncOptions } from './menu-overlay';\r\nimport { RaqmMenuItemDirective } from './dropdown-menu-item.directive';\r\nimport {\r\n RaqmMenuCheckboxItemBase,\r\n RaqmMenuCheckboxItemDirective,\r\n} from './dropdown-menu-checkbox-item.directive';\r\nimport {\r\n RaqmMenuRadioGroupDirective,\r\n RaqmMenuRadioItemBase,\r\n RaqmMenuRadioItemDirective,\r\n} from './dropdown-menu-radio.directive';\r\n\r\nexport {\r\n RaqmMenuDirective,\r\n RaqmMenuGroupDirective,\r\n RaqmMenuLabelDirective,\r\n RaqmMenuSeparatorDirective,\r\n RaqmMenuShortcutDirective,\r\n};\r\nexport { RaqmMenuTriggerDirective, RAQM_MENU_SUBMENU_POSITIONS };\r\n// INTERNAL — shared across entrypoints; not supported application-facing API.\r\n// NG3001 also requires exported host-directive bases/direction to be visible here.\r\nexport { RaqmMenuOverlaySync, RaqmMenuDirection, RaqmMenuTriggerBase, RaqmContextMenuTriggerBase };\r\nexport type { RaqmMenuAnchorPoint, RaqmMenuOverlaySyncOptions };\r\nexport { RaqmMenuItemDirective };\r\nexport { RaqmMenuCheckboxItemDirective };\r\nexport { RaqmMenuRadioGroupDirective, RaqmMenuRadioItemDirective };\r\n// INTERNAL — do not remove and do not treat as supported API. NG3001 requires classes\r\n// named in exported `hostDirectives` to be exported, so both keep-open bases ship here.\r\nexport { RaqmMenuCheckboxItemBase };\r\nexport { RaqmMenuRadioItemBase };\r\n\r\nexport const RaqmDropdownMenu = [\r\n RaqmMenuDirective,\r\n RaqmMenuTriggerDirective,\r\n RaqmMenuItemDirective,\r\n RaqmMenuCheckboxItemDirective,\r\n RaqmMenuRadioGroupDirective,\r\n RaqmMenuRadioItemDirective,\r\n RaqmMenuGroupDirective,\r\n RaqmMenuLabelDirective,\r\n RaqmMenuSeparatorDirective,\r\n RaqmMenuShortcutDirective,\r\n] as const;\r\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"raqm-ui-hover-card.mjs","names":[],"sources":["../../../projects/ui/hover-card/hover-card-effects.ts","../../../projects/ui/hover-card/hover-card-model.ts","../../../projects/ui/hover-card/hover-card-intent.ts","../../../projects/ui/hover-card/hover-card-keyboard.ts","../../../projects/ui/hover-card/hover-card-overlay.ts","../../../projects/ui/hover-card/hover-card-position.ts","../../../projects/ui/hover-card/hover-card-view-state.ts","../../../projects/ui/hover-card/hover-card.ts","../../../projects/ui/hover-card/hover-card.html","../../../projects/ui/hover-card/hover-card.directive.ts","../../../projects/ui/hover-card/public-api.ts"],"sourcesContent":["// Hover card effects: the single reaction to the derived open state and its placement\r\n// inputs, registered from the component constructor.\r\n\r\nimport { TemplateRef, effect, untracked } from '@angular/core';\r\n\r\nimport type { RaqmHoverCardTriggerDirective } from './hover-card.directive';\r\nimport { RaqmHoverCardAlign, RaqmHoverCardRequestedSide } from './hover-card-model';\r\n\r\nexport interface RaqmHoverCardEffectsHost {\r\n open(): boolean;\r\n trigger(): RaqmHoverCardTriggerDirective | null;\r\n content(): unknown;\r\n panel(): TemplateRef<unknown> | undefined;\r\n side(): RaqmHoverCardRequestedSide;\r\n align(): RaqmHoverCardAlign;\r\n sideOffset(): number;\r\n alignOffset(): number;\r\n attach(): void;\r\n positionPane(): void;\r\n detach(): void;\r\n}\r\n\r\nexport function connectHoverCardEffects(host: RaqmHoverCardEffectsHost): void {\r\n effect(() => {\r\n const ready =\r\n host.open() &&\r\n host.trigger() !== null &&\r\n host.content() !== null &&\r\n host.panel() !== undefined;\r\n host.side();\r\n host.align();\r\n host.sideOffset();\r\n host.alignOffset();\r\n untracked(() => {\r\n if (ready) {\r\n host.attach();\r\n host.positionPane();\r\n } else host.detach();\r\n });\r\n });\r\n}\r\n","// Hover card model: the input value types, the defaults, the focus selector and the\r\n// transition timings every hover-card file reads.\r\n\r\n/** A physical side; logical inputs resolve to one of these before positioning. */\r\nexport type RaqmHoverCardSide = 'top' | 'bottom' | 'left' | 'right';\r\n\r\n/** A side as authored on the input; the two logical sides resolve against the live direction. */\r\nexport type RaqmHoverCardRequestedSide = RaqmHoverCardSide | 'inline-start' | 'inline-end';\r\n\r\n/** The popup alignment along the trigger's cross axis. */\r\nexport type RaqmHoverCardAlign = 'start' | 'center' | 'end';\r\n\r\nexport interface RaqmHoverCardPoint {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport const DEFAULT_SIDE: RaqmHoverCardRequestedSide = 'bottom';\r\nexport const DEFAULT_ALIGN: RaqmHoverCardAlign = 'center';\r\nexport const DEFAULT_SIDE_OFFSET: number = 4;\r\nexport const DEFAULT_ALIGN_OFFSET: number = 4;\r\n\r\n/** Fallback when the trigger supplies no close delay. */\r\nexport const DEFAULT_CLOSE_DELAY = 300;\r\n\r\n/** Content exit duration: equals `--raqm-duration-fast` (100ms) used by the exit transition. */\r\nexport const EXIT_ANIMATION_MS = 100;\r\n\r\n/** Candidates for the focus scans; the CDK `InteractivityChecker` decides actual tabbability. */\r\nexport const TABBABLE_SELECTOR =\r\n 'a[href], button, input, select, textarea, [tabindex], [contenteditable=\"true\"]';\r\n","// Hover card intent: the delayed open, the delayed close, the Escape listener and the\r\n// geometric transit corridor that protects slow or diagonal pointer movement.\r\n\r\nimport type { RaqmHoverCardTriggerDirective } from './hover-card.directive';\r\nimport { DEFAULT_CLOSE_DELAY, RaqmHoverCardPoint, RaqmHoverCardSide } from './hover-card-model';\r\nimport type { RaqmHoverCardOverlay } from './hover-card-overlay';\r\n\r\nexport interface RaqmHoverCardIntentHost {\r\n document: Document;\r\n open(): boolean;\r\n setOpen(value: boolean): void;\r\n destroyed(): boolean;\r\n trigger(): RaqmHoverCardTriggerDirective | null;\r\n overlay(): RaqmHoverCardOverlay;\r\n side(): RaqmHoverCardSide;\r\n detach(): void;\r\n}\r\n\r\nexport class RaqmHoverCardIntent {\r\n private openTimer?: ReturnType<typeof setTimeout>;\r\n private closeTimer?: ReturnType<typeof setTimeout>;\r\n private transit?: (event: PointerEvent) => void;\r\n private focusOwned = false;\r\n\r\n constructor(private readonly host: RaqmHoverCardIntentHost) {}\r\n\r\n requestOpen(fromFocus = false): void {\r\n if (fromFocus) this.focusOwned = true;\r\n this.cancelClose();\r\n this.clearTransit();\r\n const trigger = this.host.trigger();\r\n if (\r\n !trigger ||\r\n trigger.element.matches(':disabled') ||\r\n this.host.open() ||\r\n this.openTimer !== undefined\r\n )\r\n return;\r\n this.listenEscape();\r\n this.openTimer = setTimeout(() => {\r\n this.openTimer = undefined;\r\n if (!this.host.destroyed() && !trigger.element.matches(':disabled')) this.host.setOpen(true);\r\n }, trigger.delay());\r\n }\r\n\r\n /** Closes without restoring, stealing or trapping focus. */\r\n close(): void {\r\n this.focusOwned = false;\r\n this.cancelOpen();\r\n this.cancelClose();\r\n this.clearTransit();\r\n this.unlistenEscape();\r\n this.host.setOpen(false);\r\n this.host.detach();\r\n }\r\n\r\n focusOut(event: FocusEvent): void {\r\n const next = event.relatedTarget as Node | null;\r\n if (\r\n next &&\r\n (this.host.trigger()?.element.contains(next) || this.host.overlay().element?.contains(next))\r\n )\r\n return;\r\n this.close();\r\n }\r\n\r\n pointerEnter(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n this.cancelClose();\r\n this.clearTransit();\r\n }\r\n }\r\n\r\n contentFocus(): void {\r\n this.cancelClose();\r\n this.clearTransit();\r\n }\r\n\r\n /** A geometric corridor protects slow/diagonal transit, not just a short timeout. */\r\n pointerLeave(event: PointerEvent): void {\r\n if (event.pointerType !== 'mouse') return;\r\n if (this.focusOwned || this.host.overlay().element?.contains(this.host.document.activeElement))\r\n return;\r\n this.cancelOpen();\r\n this.clearTransit();\r\n const trigger = this.host.trigger()?.element;\r\n const surface = this.host.overlay().surface();\r\n if (!trigger || !surface) {\r\n this.unlistenEscape();\r\n return;\r\n }\r\n const fromContent = surface.contains(event.target as Node);\r\n const destination = fromContent ? trigger : surface;\r\n if (event.relatedTarget instanceof Node && destination.contains(event.relatedTarget)) return;\r\n const start = { x: event.clientX, y: event.clientY };\r\n this.scheduleClose();\r\n this.transit = (move) => {\r\n const a = trigger.getBoundingClientRect();\r\n const b = surface.getBoundingClientRect();\r\n const inside = (r: DOMRect) =>\r\n move.clientX >= r.left &&\r\n move.clientX <= r.right &&\r\n move.clientY >= r.top &&\r\n move.clientY <= r.bottom;\r\n if (inside(a) || inside(b)) {\r\n this.cancelClose();\r\n this.clearTransit();\r\n return;\r\n }\r\n const target = destination.getBoundingClientRect();\r\n const side = this.host.side();\r\n const vertical = side === 'top' || side === 'bottom';\r\n const edge = vertical\r\n ? fromContent\r\n ? side === 'bottom'\r\n ? target.bottom\r\n : target.top\r\n : side === 'bottom'\r\n ? target.top\r\n : target.bottom\r\n : fromContent\r\n ? side === 'right'\r\n ? target.right\r\n : target.left\r\n : side === 'right'\r\n ? target.left\r\n : target.right;\r\n const p = vertical ? { x: target.left - 1, y: edge } : { x: edge, y: target.top - 1 };\r\n const q = vertical ? { x: target.right + 1, y: edge } : { x: edge, y: target.bottom + 1 };\r\n const cross = (u: RaqmHoverCardPoint, v: RaqmHoverCardPoint, w: RaqmHoverCardPoint) =>\r\n (u.x - w.x) * (v.y - w.y) - (v.x - w.x) * (u.y - w.y);\r\n const point = { x: move.clientX, y: move.clientY };\r\n const signs = [cross(point, start, p), cross(point, p, q), cross(point, q, start)];\r\n const inTriangle = !(signs.some((n) => n < -1) && signs.some((n) => n > 1));\r\n const inTrough = vertical\r\n ? move.clientX >= Math.max(a.left, b.left) &&\r\n move.clientX <= Math.min(a.right, b.right) &&\r\n move.clientY >= Math.min(a.bottom, b.bottom) &&\r\n move.clientY <= Math.max(a.top, b.top)\r\n : move.clientY >= Math.max(a.top, b.top) &&\r\n move.clientY <= Math.min(a.bottom, b.bottom) &&\r\n move.clientX >= Math.min(a.right, b.right) &&\r\n move.clientX <= Math.max(a.left, b.left);\r\n if (inTriangle || inTrough) this.cancelClose();\r\n else {\r\n this.scheduleClose();\r\n this.clearTransit();\r\n }\r\n };\r\n this.host.document.addEventListener('pointermove', this.transit);\r\n }\r\n\r\n listenEscape(): void {\r\n this.host.document.addEventListener('keydown', this.escape);\r\n }\r\n\r\n unlistenEscape(): void {\r\n this.host.document.removeEventListener('keydown', this.escape);\r\n }\r\n\r\n /** Stops every pending intent without touching the model or the pane. */\r\n release(): void {\r\n this.cancelOpen();\r\n this.cancelClose();\r\n this.clearTransit();\r\n this.unlistenEscape();\r\n }\r\n\r\n private scheduleClose(): void {\r\n if (this.closeTimer !== undefined) return;\r\n this.closeTimer = setTimeout(() => {\r\n this.closeTimer = undefined;\r\n this.close();\r\n }, this.host.trigger()?.closeDelay() ?? DEFAULT_CLOSE_DELAY);\r\n }\r\n private cancelOpen(): void {\r\n clearTimeout(this.openTimer);\r\n this.openTimer = undefined;\r\n }\r\n private cancelClose(): void {\r\n clearTimeout(this.closeTimer);\r\n this.closeTimer = undefined;\r\n }\r\n private clearTransit(): void {\r\n if (this.transit) this.host.document.removeEventListener('pointermove', this.transit);\r\n this.transit = undefined;\r\n }\r\n private readonly escape = (event: KeyboardEvent): void => {\r\n if (event.key === 'Escape') {\r\n if (this.host.overlay().ref) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n this.close();\r\n }\r\n };\r\n}\r\n","// Hover card focus and keyboard: the trigger's forward Tab hand-off, the panel's Tab cycle\r\n// and the tabbable scan both rely on.\r\n\r\nimport { InteractivityChecker } from '@angular/cdk/a11y';\r\nimport type { OverlayRef } from '@angular/cdk/overlay';\r\n\r\nimport type { RaqmHoverCardTriggerDirective } from './hover-card.directive';\r\nimport { TABBABLE_SELECTOR } from './hover-card-model';\r\n\r\nexport interface RaqmHoverCardKeyboardHost {\r\n document: Document;\r\n trigger(): RaqmHoverCardTriggerDirective | null;\r\n overlayRef(): OverlayRef | undefined;\r\n}\r\n\r\nexport class RaqmHoverCardKeyboard {\r\n constructor(\r\n private readonly checker: InteractivityChecker,\r\n private readonly host: RaqmHoverCardKeyboardHost,\r\n ) {}\r\n\r\n onTriggerKeydown(event: KeyboardEvent): void {\r\n const ref = this.host.overlayRef();\r\n if (event.key !== 'Tab' || event.shiftKey || !ref) return;\r\n const first = this.tabbables(ref.overlayElement)[0];\r\n if (first) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n\r\n onPanelKeydown(event: KeyboardEvent): void {\r\n const ref = this.host.overlayRef();\r\n if (event.key !== 'Tab' || !ref) return;\r\n const items = this.tabbables(ref.overlayElement);\r\n const active = this.host.document.activeElement;\r\n if (event.shiftKey && active === items[0]) {\r\n event.preventDefault();\r\n this.host.trigger()?.element.focus();\r\n } else if (!event.shiftKey && active === items.at(-1)) {\r\n const trigger = this.host.trigger()?.element;\r\n const all = this.tabbables(this.host.document.body).filter(\r\n (item) => !ref.overlayElement.contains(item),\r\n );\r\n const next = trigger ? all[all.indexOf(trigger) + 1] : undefined;\r\n if (next) {\r\n event.preventDefault();\r\n next.focus();\r\n }\r\n }\r\n }\r\n\r\n private tabbables(root: HTMLElement): HTMLElement[] {\r\n return Array.from(root.querySelectorAll<HTMLElement>(TABBABLE_SELECTOR)).filter((item) =>\r\n this.checker.isTabbable(item),\r\n );\r\n }\r\n}\r\n","// Hover card pane lifecycle: creation, reveal, the exit animation, teardown and the\r\n// subscriptions that keep an open card anchored.\r\n\r\nimport {\r\n AfterRenderRef,\r\n Injector,\r\n TemplateRef,\r\n ViewContainerRef,\r\n afterNextRender,\r\n} from '@angular/core';\r\n\r\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { registerOverlayOwnership } from '@raqm/ui/overlay-internal';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport type { RaqmHoverCardTriggerDirective } from './hover-card.directive';\r\nimport { EXIT_ANIMATION_MS } from './hover-card-model';\r\nimport { RaqmHoverCardPosition } from './hover-card-position';\r\nimport { RaqmHoverCardState } from './hover-card-view-state';\r\n\r\nexport interface RaqmHoverCardOverlayHost {\r\n /** The card root; its computed direction and document drive the pane. */\r\n root: HTMLElement;\r\n document: Document;\r\n container: ViewContainerRef;\r\n injector: Injector;\r\n trigger(): RaqmHoverCardTriggerDirective | null;\r\n panel(): TemplateRef<unknown> | undefined;\r\n close(): void;\r\n listenEscape(): void;\r\n /** Cancels the open/close timers and the transit listener, then drops the Escape listener. */\r\n releaseIntent(): void;\r\n}\r\n\r\nexport class RaqmHoverCardOverlay {\r\n private overlayRef?: OverlayRef;\r\n private strategy?: FlexibleConnectedPositionStrategy;\r\n private subscriptions = new Subscription();\r\n private render?: AfterRenderRef;\r\n private observer?: ResizeObserver;\r\n private exitTimer?: ReturnType<typeof setTimeout>;\r\n private exiting?: OverlayRef;\r\n\r\n constructor(\r\n private readonly overlay: Overlay,\r\n private readonly state: RaqmHoverCardState,\r\n private readonly position: RaqmHoverCardPosition,\r\n private readonly host: RaqmHoverCardOverlayHost,\r\n ) {}\r\n\r\n get element(): HTMLElement | undefined {\r\n return this.overlayRef?.overlayElement;\r\n }\r\n\r\n get ref(): OverlayRef | undefined {\r\n return this.overlayRef;\r\n }\r\n\r\n attach(): void {\r\n if (this.overlayRef || this.state.destroyed) return;\r\n const trigger = this.host.trigger();\r\n const panel = this.host.panel();\r\n if (!trigger || !panel) return;\r\n clearTimeout(this.exitTimer);\r\n this.exiting?.dispose();\r\n this.exiting = undefined;\r\n this.state.direction.set(this.computedDirection());\r\n this.strategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo(trigger.element)\r\n .withFlexibleDimensions(false)\r\n .withPush(true)\r\n .withViewportMargin(5)\r\n .withTransformOriginOn('.raqm-hover-card-content')\r\n .withPositions(this.position.positions());\r\n const ref = this.overlay.create({\r\n positionStrategy: this.strategy,\r\n hasBackdrop: false,\r\n direction: this.state.direction(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n disposeOnNavigation: true,\r\n });\r\n registerOverlayOwnership(trigger.element, ref);\r\n this.overlayRef = ref;\r\n this.subscriptions = new Subscription();\r\n this.subscriptions.add(\r\n this.strategy.positionChanges.subscribe((change) => {\r\n const side = this.position.sideFor(change.connectionPair);\r\n this.state.resolvedSide.set(side);\r\n }),\r\n );\r\n this.subscriptions.add(\r\n ref.outsidePointerEvents().subscribe((event) => {\r\n if (!trigger.element.contains(event.target as Node)) this.host.close();\r\n }),\r\n );\r\n this.subscriptions.add(ref.detachments().subscribe(() => this.host.close()));\r\n this.host.listenEscape();\r\n ref.attach(new TemplatePortal(panel, this.host.container));\r\n ref.overlayElement.style.visibility = 'hidden';\r\n this.render = afterNextRender(\r\n () => {\r\n this.render = undefined;\r\n if (this.overlayRef !== ref) return;\r\n this.positionPane();\r\n ref.overlayElement.style.visibility = '';\r\n this.surface()?.classList.add('raqm-hover-card-content--entering');\r\n if (typeof ResizeObserver !== 'undefined') {\r\n this.observer = new ResizeObserver(() => this.positionPane());\r\n this.observer.observe(trigger.element);\r\n const surface = this.surface();\r\n if (surface) this.observer.observe(surface);\r\n }\r\n },\r\n { injector: this.host.injector },\r\n );\r\n }\r\n\r\n /** Re-resolves direction and re-applies the candidate list before every placement pass. */\r\n positionPane(): void {\r\n const direction = this.computedDirection();\r\n this.state.direction.set(direction);\r\n this.overlayRef?.setDirection(direction);\r\n this.strategy?.withPositions(this.position.positions());\r\n this.overlayRef?.updatePosition();\r\n }\r\n\r\n surface(): HTMLElement | null {\r\n return this.overlayRef?.overlayElement.querySelector('.raqm-hover-card-content') ?? null;\r\n }\r\n\r\n detach(): void {\r\n this.host.releaseIntent();\r\n this.render?.destroy();\r\n this.render = undefined;\r\n this.observer?.disconnect();\r\n this.observer = undefined;\r\n this.subscriptions.unsubscribe();\r\n const ref = this.overlayRef;\r\n this.overlayRef = undefined;\r\n this.strategy = undefined;\r\n if (!ref) return;\r\n ref.overlayElement.setAttribute('inert', '');\r\n ref.overlayElement.setAttribute('aria-hidden', 'true');\r\n const surface = ref.overlayElement.querySelector('.raqm-hover-card-content');\r\n surface?.classList.remove('raqm-hover-card-content--entering');\r\n surface?.classList.add('raqm-hover-card-content--closing');\r\n if (\r\n this.state.destroyed ||\r\n this.host.document.defaultView?.matchMedia('(prefers-reduced-motion: reduce)').matches\r\n )\r\n ref.dispose();\r\n else {\r\n this.exiting = ref;\r\n this.exitTimer = setTimeout(() => {\r\n ref.dispose();\r\n this.exiting = undefined;\r\n this.exitTimer = undefined;\r\n }, EXIT_ANIMATION_MS);\r\n }\r\n }\r\n\r\n destroy(): void {\r\n this.state.destroyed = true;\r\n this.detach();\r\n clearTimeout(this.exitTimer);\r\n this.exiting?.dispose();\r\n this.exiting = undefined;\r\n }\r\n\r\n private computedDirection(): 'ltr' | 'rtl' {\r\n return getComputedStyle(this.host.root).direction === 'rtl' ? 'rtl' : 'ltr';\r\n }\r\n}\r\n","// Hover card placement: the logical sides resolve against the live direction, and the chosen\r\n// candidate is reported back so the transit corridor knows which edge is shared.\r\n\r\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\r\n\r\nimport {\r\n RaqmHoverCardAlign,\r\n RaqmHoverCardRequestedSide,\r\n RaqmHoverCardSide,\r\n} from './hover-card-model';\r\n\r\nexport interface RaqmHoverCardPositionHost {\r\n side(): RaqmHoverCardRequestedSide;\r\n align(): RaqmHoverCardAlign;\r\n sideOffset(): number;\r\n alignOffset(): number;\r\n direction(): 'ltr' | 'rtl';\r\n}\r\n\r\nexport class RaqmHoverCardPosition {\r\n // Candidate order and the matching sides; `positionChanges` reports by candidate identity.\r\n private positionSides: RaqmHoverCardSide[] = [];\r\n private currentPositions: ConnectedPosition[] = [];\r\n\r\n constructor(private readonly host: RaqmHoverCardPositionHost) {}\r\n\r\n /** The real side of a realized candidate pair, for the surface's `data-raqm-side`. */\r\n sideFor(pair: ConnectedPosition): RaqmHoverCardSide {\r\n return this.positionSides[this.currentPositions.indexOf(pair)] ?? 'bottom';\r\n }\r\n\r\n positions(): ConnectedPosition[] {\r\n const rtl = this.host.direction() === 'rtl';\r\n const requested = this.host.side();\r\n const side: RaqmHoverCardSide =\r\n requested === 'inline-start'\r\n ? rtl\r\n ? 'right'\r\n : 'left'\r\n : requested === 'inline-end'\r\n ? rtl\r\n ? 'left'\r\n : 'right'\r\n : requested;\r\n const opposite: Record<RaqmHoverCardSide, RaqmHoverCardSide> = {\r\n top: 'bottom',\r\n bottom: 'top',\r\n left: 'right',\r\n right: 'left',\r\n };\r\n this.positionSides = [side, opposite[side]];\r\n this.currentPositions = this.positionSides.map((value) => {\r\n const align = this.host.align();\r\n const rawMain = this.host.sideOffset();\r\n const rawCross = this.host.alignOffset();\r\n const main = Number.isFinite(rawMain) ? rawMain : 4;\r\n const cross = (Number.isFinite(rawCross) ? rawCross : 4) * (align === 'end' ? -1 : 1);\r\n if (value === 'top' || value === 'bottom')\r\n return {\r\n originX: align,\r\n overlayX: align,\r\n originY: value,\r\n overlayY: value === 'top' ? 'bottom' : 'top',\r\n offsetY: value === 'top' ? -main : main,\r\n offsetX: cross * (rtl ? -1 : 1),\r\n };\r\n const y = align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center';\r\n const end = value === 'right';\r\n return {\r\n originX: end !== rtl ? 'end' : 'start',\r\n overlayX: end !== rtl ? 'start' : 'end',\r\n originY: y,\r\n overlayY: y,\r\n offsetX: end ? main : -main,\r\n offsetY: cross,\r\n };\r\n });\r\n return this.currentPositions;\r\n }\r\n}\r\n","// Hover card state: the signals the template reads and the lifecycle flags shared by the\r\n// overlay, the intent timers and the placement pass.\r\n\r\nimport { signal } from '@angular/core';\r\n\r\nimport { RaqmHoverCardSide } from './hover-card-model';\r\n\r\nexport class RaqmHoverCardState {\r\n /** The live computed direction; re-read at attach and before every placement pass. */\r\n readonly direction = signal<'ltr' | 'rtl'>('ltr');\r\n\r\n /** The side of the realized candidate, so the surface can style the shared edge. */\r\n readonly resolvedSide = signal<RaqmHoverCardSide>('bottom');\r\n\r\n /** Set on destroy so a pending open timer never reopens a destroyed card. */\r\n destroyed = false;\r\n}\r\n","import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\r\nimport { InteractivityChecker } from '@angular/cdk/a11y';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n Injector,\r\n OnDestroy,\r\n TemplateRef,\r\n ViewContainerRef,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n numberAttribute,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { connectHoverCardEffects } from './hover-card-effects';\r\nimport { RaqmHoverCardIntent } from './hover-card-intent';\r\nimport { RaqmHoverCardKeyboard } from './hover-card-keyboard';\r\nimport {\r\n DEFAULT_ALIGN,\r\n DEFAULT_ALIGN_OFFSET,\r\n DEFAULT_SIDE,\r\n DEFAULT_SIDE_OFFSET,\r\n RaqmHoverCardAlign,\r\n RaqmHoverCardRequestedSide,\r\n} from './hover-card-model';\r\nimport { RaqmHoverCardOverlay } from './hover-card-overlay';\r\nimport { RaqmHoverCardPosition } from './hover-card-position';\r\nimport { RaqmHoverCardState } from './hover-card-view-state';\r\nimport type {\r\n RaqmHoverCardContentDirective,\r\n RaqmHoverCardTriggerDirective,\r\n} from './hover-card.directive';\r\n\r\n/** Nonmodal preview root: delayed intent, native activation and no focus theft. */\r\n@Component({\r\n selector: 'raqm-hover-card',\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './hover-card.html',\r\n styleUrl: './hover-card.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RaqmHoverCardComponent implements OnDestroy {\r\n private readonly overlay = inject(Overlay);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly container = inject(ViewContainerRef);\r\n private readonly injector = inject(Injector);\r\n private readonly checker = inject(InteractivityChecker);\r\n private readonly panel = viewChild<TemplateRef<unknown>>('panel');\r\n readonly openValue = model<boolean | undefined>(undefined, { alias: 'open' });\r\n readonly defaultOpen = input(false, { transform: booleanAttribute });\r\n\r\n /** The preferred popup side; logical sides resolve against the live direction. */\r\n readonly side = input<RaqmHoverCardRequestedSide>(DEFAULT_SIDE);\r\n\r\n /** The popup alignment along the trigger's cross axis. */\r\n readonly align = input<RaqmHoverCardAlign>(DEFAULT_ALIGN);\r\n\r\n /** The distance in pixels between the trigger and the card. */\r\n readonly sideOffset = input(DEFAULT_SIDE_OFFSET, { transform: numberAttribute });\r\n\r\n /** The distance in pixels along the alignment axis. */\r\n readonly alignOffset = input(DEFAULT_ALIGN_OFFSET, { transform: numberAttribute });\r\n\r\n readonly open = computed(() => this.openValue() ?? this.defaultOpen());\r\n private readonly trigger = signal<RaqmHoverCardTriggerDirective | null>(null);\r\n protected readonly content = signal<RaqmHoverCardContentDirective | null>(null);\r\n private readonly state = new RaqmHoverCardState();\r\n protected readonly direction = this.state.direction;\r\n protected readonly resolvedSide = this.state.resolvedSide;\r\n\r\n private readonly positionController = new RaqmHoverCardPosition({\r\n side: () => this.side(),\r\n align: () => this.align(),\r\n sideOffset: () => this.sideOffset(),\r\n alignOffset: () => this.alignOffset(),\r\n direction: () => this.state.direction(),\r\n });\r\n\r\n private readonly layer = new RaqmHoverCardOverlay(\r\n this.overlay,\r\n this.state,\r\n this.positionController,\r\n {\r\n root: this.host.nativeElement,\r\n document: this.document,\r\n container: this.container,\r\n injector: this.injector,\r\n trigger: () => this.trigger(),\r\n panel: () => this.panel(),\r\n close: () => this.close(),\r\n listenEscape: () => this.intent.listenEscape(),\r\n releaseIntent: () => this.intent.release(),\r\n },\r\n );\r\n\r\n private readonly keyboard = new RaqmHoverCardKeyboard(this.checker, {\r\n document: this.document,\r\n trigger: () => this.trigger(),\r\n overlayRef: () => this.layer.ref,\r\n });\r\n\r\n private readonly intent = new RaqmHoverCardIntent({\r\n document: this.document,\r\n open: () => this.open(),\r\n setOpen: (value) => this.openValue.set(value),\r\n destroyed: () => this.state.destroyed,\r\n trigger: () => this.trigger(),\r\n overlay: () => this.layer,\r\n side: () => this.state.resolvedSide(),\r\n detach: () => this.layer.detach(),\r\n });\r\n\r\n constructor() {\r\n connectHoverCardEffects({\r\n open: () => this.open(),\r\n trigger: () => this.trigger(),\r\n content: () => this.content(),\r\n panel: () => this.panel(),\r\n side: () => this.side(),\r\n align: () => this.align(),\r\n sideOffset: () => this.sideOffset(),\r\n alignOffset: () => this.alignOffset(),\r\n attach: () => this.layer.attach(),\r\n positionPane: () => this.layer.positionPane(),\r\n detach: () => this.layer.detach(),\r\n });\r\n }\r\n\r\n registerTrigger(trigger: RaqmHoverCardTriggerDirective): void {\r\n if (this.trigger()) throw new Error('Only one Hover Card trigger is supported per root.');\r\n this.trigger.set(trigger);\r\n }\r\n unregisterTrigger(trigger: RaqmHoverCardTriggerDirective): void {\r\n if (this.trigger() === trigger) {\r\n this.close();\r\n this.trigger.set(null);\r\n }\r\n }\r\n registerContent(content: RaqmHoverCardContentDirective): void {\r\n if (this.content())\r\n throw new Error('Only one Hover Card content template is supported per root.');\r\n this.content.set(content);\r\n }\r\n unregisterContent(content: RaqmHoverCardContentDirective): void {\r\n if (this.content() === content) {\r\n this.close();\r\n this.content.set(null);\r\n }\r\n }\r\n\r\n requestOpen(fromFocus = false): void {\r\n this.intent.requestOpen(fromFocus);\r\n }\r\n\r\n /** Closes without restoring, stealing or trapping focus. */\r\n close(): void {\r\n this.intent.close();\r\n }\r\n\r\n focusOut(event: FocusEvent): void {\r\n this.intent.focusOut(event);\r\n }\r\n\r\n triggerKeydown(event: KeyboardEvent): void {\r\n this.keyboard.onTriggerKeydown(event);\r\n }\r\n\r\n protected panelKeydown(event: KeyboardEvent): void {\r\n this.keyboard.onPanelKeydown(event);\r\n }\r\n\r\n protected pointerEnter(event: PointerEvent): void {\r\n this.intent.pointerEnter(event);\r\n }\r\n\r\n protected contentFocus(): void {\r\n this.intent.contentFocus();\r\n }\r\n\r\n /** A geometric corridor protects slow/diagonal transit, not just a short timeout. */\r\n pointerLeave(event: PointerEvent): void {\r\n this.intent.pointerLeave(event);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.layer.destroy();\r\n }\r\n}\r\n","<ng-content />\r\n<ng-template #panel>\r\n <div\r\n class=\"raqm-hover-card-content\"\r\n tabindex=\"-1\"\r\n [dir]=\"direction()\"\r\n [attr.data-raqm-side]=\"resolvedSide()\"\r\n (pointerenter)=\"pointerEnter($event)\"\r\n (pointerleave)=\"pointerLeave($event)\"\r\n (focusout)=\"focusOut($event)\"\r\n (focusin)=\"contentFocus()\"\r\n (keydown)=\"panelKeydown($event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"content()?.template ?? null\" />\r\n </div>\r\n</ng-template>\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n TemplateRef,\r\n inject,\r\n input,\r\n numberAttribute,\r\n} from '@angular/core';\r\nimport { RaqmHoverCardComponent } from './hover-card';\r\n\r\nfunction delay(fallback: number): (value: unknown) => number {\r\n return (value) => {\r\n const parsed = numberAttribute(value, fallback);\r\n return Number.isFinite(parsed) ? Math.max(0, parsed) : fallback;\r\n };\r\n}\r\n\r\n/** A native link or button; hover/focus intent never replaces native activation. */\r\n@Directive({\r\n selector: 'a[raqm-hover-card-trigger], button[raqm-hover-card-trigger]',\r\n host: {\r\n '(pointerenter)': 'enter($event)',\r\n '(pointerleave)': 'leave($event)',\r\n '(focus)': 'focus()',\r\n '(blur)': 'blur($event)',\r\n '(keydown)': 'keydown($event)',\r\n },\r\n})\r\nexport class RaqmHoverCardTriggerDirective {\r\n readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n protected readonly card = inject(RaqmHoverCardComponent);\r\n readonly delay = input(600, { transform: delay(600) });\r\n readonly closeDelay = input(300, { transform: delay(300) });\r\n\r\n constructor() {\r\n if (this.element instanceof HTMLButtonElement && !this.element.hasAttribute('type')) {\r\n this.element.setAttribute('type', 'button');\r\n }\r\n this.card.registerTrigger(this);\r\n inject(DestroyRef).onDestroy(() => this.card.unregisterTrigger(this));\r\n }\r\n\r\n protected enter(event: Event): void {\r\n const pointer = event as PointerEvent;\r\n if (pointer.pointerType === 'mouse') this.card.requestOpen();\r\n }\r\n\r\n protected leave(event: Event): void {\r\n const pointer = event as PointerEvent;\r\n if (pointer.pointerType === 'mouse') this.card.pointerLeave(pointer);\r\n }\r\n\r\n protected blur(event: Event): void {\r\n this.card.focusOut(event as FocusEvent);\r\n }\r\n protected keydown(event: Event): void {\r\n this.card.triggerKeydown(event as KeyboardEvent);\r\n }\r\n\r\n protected focus(): void {\r\n if (this.element.matches(':focus-visible')) this.card.requestOpen(true);\r\n }\r\n}\r\n\r\n/** The portalled content template; the root owns placement. */\r\n@Directive({ selector: 'ng-template[raqm-hover-card-content]' })\r\nexport class RaqmHoverCardContentDirective {\r\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\r\n private readonly card = inject(RaqmHoverCardComponent);\r\n\r\n constructor() {\r\n this.card.registerContent(this);\r\n inject(DestroyRef).onDestroy(() => this.card.unregisterContent(this));\r\n }\r\n}\r\n","import { RaqmHoverCardComponent } from './hover-card';\r\nimport {\r\n RaqmHoverCardTriggerDirective,\r\n RaqmHoverCardContentDirective,\r\n} from './hover-card.directive';\r\n\r\nexport { RaqmHoverCardComponent, RaqmHoverCardTriggerDirective, RaqmHoverCardContentDirective };\r\nexport const RaqmHoverCard = [\r\n RaqmHoverCardComponent,\r\n RaqmHoverCardTriggerDirective,\r\n RaqmHoverCardContentDirective,\r\n] as const;\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"raqm-ui-hover-card.mjs","names":["pointer"],"sources":["../../../projects/ui/hover-card/hover-card-effects.ts","../../../projects/ui/hover-card/hover-card-model.ts","../../../projects/ui/hover-card/hover-card-intent.ts","../../../projects/ui/hover-card/hover-card-keyboard.ts","../../../projects/ui/hover-card/hover-card-overlay.ts","../../../projects/ui/hover-card/hover-card-position.ts","../../../projects/ui/hover-card/hover-card-view-state.ts","../../../projects/ui/hover-card/hover-card.ts","../../../projects/ui/hover-card/hover-card.html","../../../projects/ui/hover-card/hover-card.directive.ts","../../../projects/ui/hover-card/public-api.ts"],"sourcesContent":["// Hover card effects: the single reaction to the derived open state and its placement\r\n// inputs, registered from the component constructor.\r\n\r\nimport { TemplateRef, effect, untracked } from '@angular/core';\r\n\r\nimport type { RaqmHoverCardTriggerDirective } from './hover-card.directive';\r\nimport { RaqmHoverCardAlign, RaqmHoverCardRequestedSide } from './hover-card-model';\r\n\r\nexport interface RaqmHoverCardEffectsHost {\r\n open(): boolean;\r\n trigger(): RaqmHoverCardTriggerDirective | null;\r\n content(): unknown;\r\n panel(): TemplateRef<unknown> | undefined;\r\n side(): RaqmHoverCardRequestedSide;\r\n align(): RaqmHoverCardAlign;\r\n sideOffset(): number;\r\n alignOffset(): number;\r\n attach(): void;\r\n positionPane(): void;\r\n detach(): void;\r\n}\r\n\r\nexport function connectHoverCardEffects(host: RaqmHoverCardEffectsHost): void {\r\n effect(() => {\r\n const ready =\r\n host.open() &&\r\n host.trigger() !== null &&\r\n host.content() !== null &&\r\n host.panel() !== undefined;\r\n host.side();\r\n host.align();\r\n host.sideOffset();\r\n host.alignOffset();\r\n untracked(() => {\r\n if (ready) {\r\n host.attach();\r\n host.positionPane();\r\n } else host.detach();\r\n });\r\n });\r\n}\r\n","// Hover card model: the input value types, the defaults, the focus selector and the\r\n// transition timings every hover-card file reads.\r\n\r\n/** A physical side; logical inputs resolve to one of these before positioning. */\r\nexport type RaqmHoverCardSide = 'top' | 'bottom' | 'left' | 'right';\r\n\r\n/** A side as authored on the input; the two logical sides resolve against the live direction. */\r\nexport type RaqmHoverCardRequestedSide = RaqmHoverCardSide | 'inline-start' | 'inline-end';\r\n\r\n/** The popup alignment along the trigger's cross axis. */\r\nexport type RaqmHoverCardAlign = 'start' | 'center' | 'end';\r\n\r\nexport interface RaqmHoverCardPoint {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport const DEFAULT_SIDE: RaqmHoverCardRequestedSide = 'bottom';\r\nexport const DEFAULT_ALIGN: RaqmHoverCardAlign = 'center';\r\nexport const DEFAULT_SIDE_OFFSET: number = 4;\r\nexport const DEFAULT_ALIGN_OFFSET: number = 4;\r\n\r\n/** Fallback when the trigger supplies no close delay. */\r\nexport const DEFAULT_CLOSE_DELAY = 300;\r\n\r\n/** Content exit duration: equals `--raqm-duration-fast` (100ms) used by the exit transition. */\r\nexport const EXIT_ANIMATION_MS = 100;\r\n\r\n/** Candidates for the focus scans; the CDK `InteractivityChecker` decides actual tabbability. */\r\nexport const TABBABLE_SELECTOR =\r\n 'a[href], button, input, select, textarea, [tabindex], [contenteditable=\"true\"]';\r\n","// Hover card intent: the delayed open, the delayed close, the Escape listener and the\r\n// geometric transit corridor that protects slow or diagonal pointer movement.\r\n\r\nimport type { RaqmHoverCardTriggerDirective } from './hover-card.directive';\r\nimport { DEFAULT_CLOSE_DELAY, RaqmHoverCardPoint, RaqmHoverCardSide } from './hover-card-model';\r\nimport type { RaqmHoverCardOverlay } from './hover-card-overlay';\r\n\r\nexport interface RaqmHoverCardIntentHost {\r\n document: Document;\r\n open(): boolean;\r\n setOpen(value: boolean): void;\r\n destroyed(): boolean;\r\n trigger(): RaqmHoverCardTriggerDirective | null;\r\n overlay(): RaqmHoverCardOverlay;\r\n side(): RaqmHoverCardSide;\r\n detach(): void;\r\n}\r\n\r\nexport class RaqmHoverCardIntent {\r\n private openTimer?: ReturnType<typeof setTimeout>;\r\n private closeTimer?: ReturnType<typeof setTimeout>;\r\n private transit?: (event: PointerEvent) => void;\r\n private focusOwned = false;\r\n\r\n constructor(private readonly host: RaqmHoverCardIntentHost) {}\r\n\r\n requestOpen(fromFocus = false): void {\r\n if (fromFocus) this.focusOwned = true;\r\n this.cancelClose();\r\n this.clearTransit();\r\n const trigger = this.host.trigger();\r\n if (\r\n !trigger ||\r\n trigger.element.matches(':disabled') ||\r\n this.host.open() ||\r\n this.openTimer !== undefined\r\n )\r\n return;\r\n this.listenEscape();\r\n this.openTimer = setTimeout(() => {\r\n this.openTimer = undefined;\r\n if (!this.host.destroyed() && !trigger.element.matches(':disabled')) this.host.setOpen(true);\r\n }, trigger.delay());\r\n }\r\n\r\n /** Closes without restoring, stealing or trapping focus. */\r\n close(): void {\r\n this.focusOwned = false;\r\n this.cancelOpen();\r\n this.cancelClose();\r\n this.clearTransit();\r\n this.unlistenEscape();\r\n this.host.setOpen(false);\r\n this.host.detach();\r\n }\r\n\r\n focusOut(event: FocusEvent): void {\r\n const next = event.relatedTarget as Node | null;\r\n if (\r\n next &&\r\n (this.host.trigger()?.element.contains(next) || this.host.overlay().element?.contains(next))\r\n )\r\n return;\r\n this.close();\r\n }\r\n\r\n pointerEnter(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n this.cancelClose();\r\n this.clearTransit();\r\n }\r\n }\r\n\r\n contentFocus(): void {\r\n this.cancelClose();\r\n this.clearTransit();\r\n }\r\n\r\n /** A geometric corridor protects slow/diagonal transit, not just a short timeout. */\r\n pointerLeave(event: PointerEvent): void {\r\n if (event.pointerType !== 'mouse') return;\r\n if (this.focusOwned || this.host.overlay().element?.contains(this.host.document.activeElement))\r\n return;\r\n this.cancelOpen();\r\n this.clearTransit();\r\n const trigger = this.host.trigger()?.element;\r\n const surface = this.host.overlay().surface();\r\n if (!trigger || !surface) {\r\n this.unlistenEscape();\r\n return;\r\n }\r\n const fromContent = surface.contains(event.target as Node);\r\n const destination = fromContent ? trigger : surface;\r\n if (event.relatedTarget instanceof Node && destination.contains(event.relatedTarget)) return;\r\n const start = { x: event.clientX, y: event.clientY };\r\n this.scheduleClose();\r\n this.transit = (move) => {\r\n const a = trigger.getBoundingClientRect();\r\n const b = surface.getBoundingClientRect();\r\n const inside = (r: DOMRect) =>\r\n move.clientX >= r.left &&\r\n move.clientX <= r.right &&\r\n move.clientY >= r.top &&\r\n move.clientY <= r.bottom;\r\n if (inside(a) || inside(b)) {\r\n this.cancelClose();\r\n this.clearTransit();\r\n return;\r\n }\r\n const target = destination.getBoundingClientRect();\r\n const side = this.host.side();\r\n const vertical = side === 'top' || side === 'bottom';\r\n const edge = vertical\r\n ? fromContent\r\n ? side === 'bottom'\r\n ? target.bottom\r\n : target.top\r\n : side === 'bottom'\r\n ? target.top\r\n : target.bottom\r\n : fromContent\r\n ? side === 'right'\r\n ? target.right\r\n : target.left\r\n : side === 'right'\r\n ? target.left\r\n : target.right;\r\n const p = vertical ? { x: target.left - 1, y: edge } : { x: edge, y: target.top - 1 };\r\n const q = vertical ? { x: target.right + 1, y: edge } : { x: edge, y: target.bottom + 1 };\r\n const cross = (u: RaqmHoverCardPoint, v: RaqmHoverCardPoint, w: RaqmHoverCardPoint) =>\r\n (u.x - w.x) * (v.y - w.y) - (v.x - w.x) * (u.y - w.y);\r\n const point = { x: move.clientX, y: move.clientY };\r\n const signs = [cross(point, start, p), cross(point, p, q), cross(point, q, start)];\r\n const inTriangle = !(signs.some((n) => n < -1) && signs.some((n) => n > 1));\r\n const inTrough = vertical\r\n ? move.clientX >= Math.max(a.left, b.left) &&\r\n move.clientX <= Math.min(a.right, b.right) &&\r\n move.clientY >= Math.min(a.bottom, b.bottom) &&\r\n move.clientY <= Math.max(a.top, b.top)\r\n : move.clientY >= Math.max(a.top, b.top) &&\r\n move.clientY <= Math.min(a.bottom, b.bottom) &&\r\n move.clientX >= Math.min(a.right, b.right) &&\r\n move.clientX <= Math.max(a.left, b.left);\r\n if (inTriangle || inTrough) this.cancelClose();\r\n else {\r\n this.scheduleClose();\r\n this.clearTransit();\r\n }\r\n };\r\n this.host.document.addEventListener('pointermove', this.transit);\r\n }\r\n\r\n listenEscape(): void {\r\n this.host.document.addEventListener('keydown', this.escape);\r\n }\r\n\r\n unlistenEscape(): void {\r\n this.host.document.removeEventListener('keydown', this.escape);\r\n }\r\n\r\n /** Stops every pending intent without touching the model or the pane. */\r\n release(): void {\r\n this.cancelOpen();\r\n this.cancelClose();\r\n this.clearTransit();\r\n this.unlistenEscape();\r\n }\r\n\r\n private scheduleClose(): void {\r\n if (this.closeTimer !== undefined) return;\r\n this.closeTimer = setTimeout(() => {\r\n this.closeTimer = undefined;\r\n this.close();\r\n }, this.host.trigger()?.closeDelay() ?? DEFAULT_CLOSE_DELAY);\r\n }\r\n private cancelOpen(): void {\r\n clearTimeout(this.openTimer);\r\n this.openTimer = undefined;\r\n }\r\n private cancelClose(): void {\r\n clearTimeout(this.closeTimer);\r\n this.closeTimer = undefined;\r\n }\r\n private clearTransit(): void {\r\n if (this.transit) this.host.document.removeEventListener('pointermove', this.transit);\r\n this.transit = undefined;\r\n }\r\n private readonly escape = (event: KeyboardEvent): void => {\r\n if (event.key === 'Escape') {\r\n if (this.host.overlay().ref) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n this.close();\r\n }\r\n };\r\n}\r\n","// Hover card focus and keyboard: the trigger's forward Tab hand-off, the panel's Tab cycle\r\n// and the tabbable scan both rely on.\r\n\r\nimport { InteractivityChecker } from '@angular/cdk/a11y';\r\nimport type { OverlayRef } from '@angular/cdk/overlay';\r\n\r\nimport type { RaqmHoverCardTriggerDirective } from './hover-card.directive';\r\nimport { TABBABLE_SELECTOR } from './hover-card-model';\r\n\r\nexport interface RaqmHoverCardKeyboardHost {\r\n document: Document;\r\n trigger(): RaqmHoverCardTriggerDirective | null;\r\n overlayRef(): OverlayRef | undefined;\r\n}\r\n\r\nexport class RaqmHoverCardKeyboard {\r\n constructor(\r\n private readonly checker: InteractivityChecker,\r\n private readonly host: RaqmHoverCardKeyboardHost,\r\n ) {}\r\n\r\n onTriggerKeydown(event: KeyboardEvent): void {\r\n const ref = this.host.overlayRef();\r\n if (event.key !== 'Tab' || event.shiftKey || !ref) return;\r\n const first = this.tabbables(ref.overlayElement)[0];\r\n if (first) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n\r\n onPanelKeydown(event: KeyboardEvent): void {\r\n const ref = this.host.overlayRef();\r\n if (event.key !== 'Tab' || !ref) return;\r\n const items = this.tabbables(ref.overlayElement);\r\n const active = this.host.document.activeElement;\r\n if (event.shiftKey && active === items[0]) {\r\n event.preventDefault();\r\n this.host.trigger()?.element.focus();\r\n } else if (!event.shiftKey && active === items.at(-1)) {\r\n const trigger = this.host.trigger()?.element;\r\n const all = this.tabbables(this.host.document.body).filter(\r\n (item) => !ref.overlayElement.contains(item),\r\n );\r\n const next = trigger ? all[all.indexOf(trigger) + 1] : undefined;\r\n if (next) {\r\n event.preventDefault();\r\n next.focus();\r\n }\r\n }\r\n }\r\n\r\n private tabbables(root: HTMLElement): HTMLElement[] {\r\n return Array.from(root.querySelectorAll<HTMLElement>(TABBABLE_SELECTOR)).filter((item) =>\r\n this.checker.isTabbable(item),\r\n );\r\n }\r\n}\r\n","// Hover card pane lifecycle: creation, reveal, the exit animation, teardown and the\r\n// subscriptions that keep an open card anchored.\r\n\r\nimport {\r\n AfterRenderRef,\r\n Injector,\r\n TemplateRef,\r\n ViewContainerRef,\r\n afterNextRender,\r\n} from '@angular/core';\r\n\r\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { registerOverlayOwnership } from '@raqm/ui/overlay-internal';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport type { RaqmHoverCardTriggerDirective } from './hover-card.directive';\r\nimport { EXIT_ANIMATION_MS } from './hover-card-model';\r\nimport { RaqmHoverCardPosition } from './hover-card-position';\r\nimport { RaqmHoverCardState } from './hover-card-view-state';\r\n\r\nexport interface RaqmHoverCardOverlayHost {\r\n /** The card root; its computed direction and document drive the pane. */\r\n root: HTMLElement;\r\n document: Document;\r\n container: ViewContainerRef;\r\n injector: Injector;\r\n trigger(): RaqmHoverCardTriggerDirective | null;\r\n panel(): TemplateRef<unknown> | undefined;\r\n close(): void;\r\n listenEscape(): void;\r\n /** Cancels the open/close timers and the transit listener, then drops the Escape listener. */\r\n releaseIntent(): void;\r\n}\r\n\r\nexport class RaqmHoverCardOverlay {\r\n private overlayRef?: OverlayRef;\r\n private strategy?: FlexibleConnectedPositionStrategy;\r\n private subscriptions = new Subscription();\r\n private render?: AfterRenderRef;\r\n private observer?: ResizeObserver;\r\n private exitTimer?: ReturnType<typeof setTimeout>;\r\n private exiting?: OverlayRef;\r\n\r\n constructor(\r\n private readonly overlay: Overlay,\r\n private readonly state: RaqmHoverCardState,\r\n private readonly position: RaqmHoverCardPosition,\r\n private readonly host: RaqmHoverCardOverlayHost,\r\n ) {}\r\n\r\n get element(): HTMLElement | undefined {\r\n return this.overlayRef?.overlayElement;\r\n }\r\n\r\n get ref(): OverlayRef | undefined {\r\n return this.overlayRef;\r\n }\r\n\r\n attach(): void {\r\n if (this.overlayRef || this.state.destroyed) return;\r\n const trigger = this.host.trigger();\r\n const panel = this.host.panel();\r\n if (!trigger || !panel) return;\r\n clearTimeout(this.exitTimer);\r\n this.exiting?.dispose();\r\n this.exiting = undefined;\r\n this.state.direction.set(this.computedDirection());\r\n this.strategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo(trigger.element)\r\n .withFlexibleDimensions(false)\r\n .withPush(true)\r\n .withViewportMargin(5)\r\n .withTransformOriginOn('.raqm-hover-card-content')\r\n .withPositions(this.position.positions());\r\n const ref = this.overlay.create({\r\n positionStrategy: this.strategy,\r\n hasBackdrop: false,\r\n direction: this.state.direction(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n disposeOnNavigation: true,\r\n });\r\n registerOverlayOwnership(trigger.element, ref);\r\n this.overlayRef = ref;\r\n this.subscriptions = new Subscription();\r\n this.subscriptions.add(\r\n this.strategy.positionChanges.subscribe((change) => {\r\n const side = this.position.sideFor(change.connectionPair);\r\n this.state.resolvedSide.set(side);\r\n }),\r\n );\r\n this.subscriptions.add(\r\n ref.outsidePointerEvents().subscribe((event) => {\r\n if (!trigger.element.contains(event.target as Node)) this.host.close();\r\n }),\r\n );\r\n this.subscriptions.add(ref.detachments().subscribe(() => this.host.close()));\r\n this.host.listenEscape();\r\n ref.attach(new TemplatePortal(panel, this.host.container));\r\n ref.overlayElement.style.visibility = 'hidden';\r\n this.render = afterNextRender(\r\n () => {\r\n this.render = undefined;\r\n if (this.overlayRef !== ref) return;\r\n this.positionPane();\r\n ref.overlayElement.style.visibility = '';\r\n this.surface()?.classList.add('raqm-hover-card-content--entering');\r\n if (typeof ResizeObserver !== 'undefined') {\r\n this.observer = new ResizeObserver(() => this.positionPane());\r\n this.observer.observe(trigger.element);\r\n const surface = this.surface();\r\n if (surface) this.observer.observe(surface);\r\n }\r\n },\r\n { injector: this.host.injector },\r\n );\r\n }\r\n\r\n /** Re-resolves direction and re-applies the candidate list before every placement pass. */\r\n positionPane(): void {\r\n const direction = this.computedDirection();\r\n this.state.direction.set(direction);\r\n this.overlayRef?.setDirection(direction);\r\n this.strategy?.withPositions(this.position.positions());\r\n this.overlayRef?.updatePosition();\r\n }\r\n\r\n surface(): HTMLElement | null {\r\n return this.overlayRef?.overlayElement.querySelector('.raqm-hover-card-content') ?? null;\r\n }\r\n\r\n detach(): void {\r\n this.host.releaseIntent();\r\n this.render?.destroy();\r\n this.render = undefined;\r\n this.observer?.disconnect();\r\n this.observer = undefined;\r\n this.subscriptions.unsubscribe();\r\n const ref = this.overlayRef;\r\n this.overlayRef = undefined;\r\n this.strategy = undefined;\r\n if (!ref) return;\r\n ref.overlayElement.setAttribute('inert', '');\r\n ref.overlayElement.setAttribute('aria-hidden', 'true');\r\n const surface = ref.overlayElement.querySelector('.raqm-hover-card-content');\r\n surface?.classList.remove('raqm-hover-card-content--entering');\r\n surface?.classList.add('raqm-hover-card-content--closing');\r\n if (\r\n this.state.destroyed ||\r\n this.host.document.defaultView?.matchMedia('(prefers-reduced-motion: reduce)').matches\r\n )\r\n ref.dispose();\r\n else {\r\n this.exiting = ref;\r\n this.exitTimer = setTimeout(() => {\r\n ref.dispose();\r\n this.exiting = undefined;\r\n this.exitTimer = undefined;\r\n }, EXIT_ANIMATION_MS);\r\n }\r\n }\r\n\r\n destroy(): void {\r\n this.state.destroyed = true;\r\n this.detach();\r\n clearTimeout(this.exitTimer);\r\n this.exiting?.dispose();\r\n this.exiting = undefined;\r\n }\r\n\r\n private computedDirection(): 'ltr' | 'rtl' {\r\n return getComputedStyle(this.host.root).direction === 'rtl' ? 'rtl' : 'ltr';\r\n }\r\n}\r\n","// Hover card placement: the logical sides resolve against the live direction, and the chosen\r\n// candidate is reported back so the transit corridor knows which edge is shared.\r\n\r\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\r\n\r\nimport {\r\n RaqmHoverCardAlign,\r\n RaqmHoverCardRequestedSide,\r\n RaqmHoverCardSide,\r\n} from './hover-card-model';\r\n\r\nexport interface RaqmHoverCardPositionHost {\r\n side(): RaqmHoverCardRequestedSide;\r\n align(): RaqmHoverCardAlign;\r\n sideOffset(): number;\r\n alignOffset(): number;\r\n direction(): 'ltr' | 'rtl';\r\n}\r\n\r\nexport class RaqmHoverCardPosition {\r\n // Candidate order and the matching sides; `positionChanges` reports by candidate identity.\r\n private positionSides: RaqmHoverCardSide[] = [];\r\n private currentPositions: ConnectedPosition[] = [];\r\n\r\n constructor(private readonly host: RaqmHoverCardPositionHost) {}\r\n\r\n /** The real side of a realized candidate pair, for the surface's `data-raqm-side`. */\r\n sideFor(pair: ConnectedPosition): RaqmHoverCardSide {\r\n return this.positionSides[this.currentPositions.indexOf(pair)] ?? 'bottom';\r\n }\r\n\r\n positions(): ConnectedPosition[] {\r\n const rtl = this.host.direction() === 'rtl';\r\n const requested = this.host.side();\r\n const side: RaqmHoverCardSide =\r\n requested === 'inline-start'\r\n ? rtl\r\n ? 'right'\r\n : 'left'\r\n : requested === 'inline-end'\r\n ? rtl\r\n ? 'left'\r\n : 'right'\r\n : requested;\r\n const opposite: Record<RaqmHoverCardSide, RaqmHoverCardSide> = {\r\n top: 'bottom',\r\n bottom: 'top',\r\n left: 'right',\r\n right: 'left',\r\n };\r\n this.positionSides = [side, opposite[side]];\r\n this.currentPositions = this.positionSides.map((value) => {\r\n const align = this.host.align();\r\n const rawMain = this.host.sideOffset();\r\n const rawCross = this.host.alignOffset();\r\n const main = Number.isFinite(rawMain) ? rawMain : 4;\r\n const cross = (Number.isFinite(rawCross) ? rawCross : 4) * (align === 'end' ? -1 : 1);\r\n if (value === 'top' || value === 'bottom')\r\n return {\r\n originX: align,\r\n overlayX: align,\r\n originY: value,\r\n overlayY: value === 'top' ? 'bottom' : 'top',\r\n offsetY: value === 'top' ? -main : main,\r\n offsetX: cross * (rtl ? -1 : 1),\r\n };\r\n const y = align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center';\r\n const end = value === 'right';\r\n return {\r\n originX: end !== rtl ? 'end' : 'start',\r\n overlayX: end !== rtl ? 'start' : 'end',\r\n originY: y,\r\n overlayY: y,\r\n offsetX: end ? main : -main,\r\n offsetY: cross,\r\n };\r\n });\r\n return this.currentPositions;\r\n }\r\n}\r\n","// Hover card state: the signals the template reads and the lifecycle flags shared by the\r\n// overlay, the intent timers and the placement pass.\r\n\r\nimport { signal } from '@angular/core';\r\n\r\nimport { RaqmHoverCardSide } from './hover-card-model';\r\n\r\nexport class RaqmHoverCardState {\r\n /** The live computed direction; re-read at attach and before every placement pass. */\r\n readonly direction = signal<'ltr' | 'rtl'>('ltr');\r\n\r\n /** The side of the realized candidate, so the surface can style the shared edge. */\r\n readonly resolvedSide = signal<RaqmHoverCardSide>('bottom');\r\n\r\n /** Set on destroy so a pending open timer never reopens a destroyed card. */\r\n destroyed = false;\r\n}\r\n","import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\r\nimport { InteractivityChecker } from '@angular/cdk/a11y';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n Injector,\r\n OnDestroy,\r\n TemplateRef,\r\n ViewContainerRef,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n numberAttribute,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { connectHoverCardEffects } from './hover-card-effects';\r\nimport { RaqmHoverCardIntent } from './hover-card-intent';\r\nimport { RaqmHoverCardKeyboard } from './hover-card-keyboard';\r\nimport {\r\n DEFAULT_ALIGN,\r\n DEFAULT_ALIGN_OFFSET,\r\n DEFAULT_SIDE,\r\n DEFAULT_SIDE_OFFSET,\r\n RaqmHoverCardAlign,\r\n RaqmHoverCardRequestedSide,\r\n} from './hover-card-model';\r\nimport { RaqmHoverCardOverlay } from './hover-card-overlay';\r\nimport { RaqmHoverCardPosition } from './hover-card-position';\r\nimport { RaqmHoverCardState } from './hover-card-view-state';\r\nimport type {\r\n RaqmHoverCardContentDirective,\r\n RaqmHoverCardTriggerDirective,\r\n} from './hover-card.directive';\r\n\r\n/** Nonmodal preview root: delayed intent, native activation and no focus theft. */\r\n@Component({\r\n selector: 'raqm-hover-card',\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './hover-card.html',\r\n styleUrl: './hover-card.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RaqmHoverCardComponent implements OnDestroy {\r\n private readonly overlay = inject(Overlay);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly container = inject(ViewContainerRef);\r\n private readonly injector = inject(Injector);\r\n private readonly checker = inject(InteractivityChecker);\r\n private readonly panel = viewChild<TemplateRef<unknown>>('panel');\r\n readonly openValue = model<boolean | undefined>(undefined, { alias: 'open' });\r\n readonly defaultOpen = input(false, { transform: booleanAttribute });\r\n\r\n /** The preferred popup side; logical sides resolve against the live direction. */\r\n readonly side = input<RaqmHoverCardRequestedSide>(DEFAULT_SIDE);\r\n\r\n /** The popup alignment along the trigger's cross axis. */\r\n readonly align = input<RaqmHoverCardAlign>(DEFAULT_ALIGN);\r\n\r\n /** The distance in pixels between the trigger and the card. */\r\n readonly sideOffset = input(DEFAULT_SIDE_OFFSET, { transform: numberAttribute });\r\n\r\n /** The distance in pixels along the alignment axis. */\r\n readonly alignOffset = input(DEFAULT_ALIGN_OFFSET, { transform: numberAttribute });\r\n\r\n readonly open = computed(() => this.openValue() ?? this.defaultOpen());\r\n private readonly trigger = signal<RaqmHoverCardTriggerDirective | null>(null);\r\n protected readonly content = signal<RaqmHoverCardContentDirective | null>(null);\r\n private readonly state = new RaqmHoverCardState();\r\n protected readonly direction = this.state.direction;\r\n protected readonly resolvedSide = this.state.resolvedSide;\r\n\r\n private readonly positionController = new RaqmHoverCardPosition({\r\n side: () => this.side(),\r\n align: () => this.align(),\r\n sideOffset: () => this.sideOffset(),\r\n alignOffset: () => this.alignOffset(),\r\n direction: () => this.state.direction(),\r\n });\r\n\r\n private readonly layer = new RaqmHoverCardOverlay(\r\n this.overlay,\r\n this.state,\r\n this.positionController,\r\n {\r\n root: this.host.nativeElement,\r\n document: this.document,\r\n container: this.container,\r\n injector: this.injector,\r\n trigger: () => this.trigger(),\r\n panel: () => this.panel(),\r\n close: () => this.close(),\r\n listenEscape: () => this.intent.listenEscape(),\r\n releaseIntent: () => this.intent.release(),\r\n },\r\n );\r\n\r\n private readonly keyboard = new RaqmHoverCardKeyboard(this.checker, {\r\n document: this.document,\r\n trigger: () => this.trigger(),\r\n overlayRef: () => this.layer.ref,\r\n });\r\n\r\n private readonly intent = new RaqmHoverCardIntent({\r\n document: this.document,\r\n open: () => this.open(),\r\n setOpen: (value) => this.openValue.set(value),\r\n destroyed: () => this.state.destroyed,\r\n trigger: () => this.trigger(),\r\n overlay: () => this.layer,\r\n side: () => this.state.resolvedSide(),\r\n detach: () => this.layer.detach(),\r\n });\r\n\r\n constructor() {\r\n connectHoverCardEffects({\r\n open: () => this.open(),\r\n trigger: () => this.trigger(),\r\n content: () => this.content(),\r\n panel: () => this.panel(),\r\n side: () => this.side(),\r\n align: () => this.align(),\r\n sideOffset: () => this.sideOffset(),\r\n alignOffset: () => this.alignOffset(),\r\n attach: () => this.layer.attach(),\r\n positionPane: () => this.layer.positionPane(),\r\n detach: () => this.layer.detach(),\r\n });\r\n }\r\n\r\n registerTrigger(trigger: RaqmHoverCardTriggerDirective): void {\r\n if (this.trigger()) throw new Error('Only one Hover Card trigger is supported per root.');\r\n this.trigger.set(trigger);\r\n }\r\n unregisterTrigger(trigger: RaqmHoverCardTriggerDirective): void {\r\n if (this.trigger() === trigger) {\r\n this.close();\r\n this.trigger.set(null);\r\n }\r\n }\r\n registerContent(content: RaqmHoverCardContentDirective): void {\r\n if (this.content())\r\n throw new Error('Only one Hover Card content template is supported per root.');\r\n this.content.set(content);\r\n }\r\n unregisterContent(content: RaqmHoverCardContentDirective): void {\r\n if (this.content() === content) {\r\n this.close();\r\n this.content.set(null);\r\n }\r\n }\r\n\r\n requestOpen(fromFocus = false): void {\r\n this.intent.requestOpen(fromFocus);\r\n }\r\n\r\n /** Closes without restoring, stealing or trapping focus. */\r\n close(): void {\r\n this.intent.close();\r\n }\r\n\r\n focusOut(event: FocusEvent): void {\r\n this.intent.focusOut(event);\r\n }\r\n\r\n triggerKeydown(event: KeyboardEvent): void {\r\n this.keyboard.onTriggerKeydown(event);\r\n }\r\n\r\n protected panelKeydown(event: KeyboardEvent): void {\r\n this.keyboard.onPanelKeydown(event);\r\n }\r\n\r\n protected pointerEnter(event: PointerEvent): void {\r\n this.intent.pointerEnter(event);\r\n }\r\n\r\n protected contentFocus(): void {\r\n this.intent.contentFocus();\r\n }\r\n\r\n /** A geometric corridor protects slow/diagonal transit, not just a short timeout. */\r\n pointerLeave(event: PointerEvent): void {\r\n this.intent.pointerLeave(event);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.layer.destroy();\r\n }\r\n}\r\n","<ng-content />\r\n<ng-template #panel>\r\n <div\r\n class=\"raqm-hover-card-content\"\r\n tabindex=\"-1\"\r\n [dir]=\"direction()\"\r\n [attr.data-raqm-side]=\"resolvedSide()\"\r\n (pointerenter)=\"pointerEnter($event)\"\r\n (pointerleave)=\"pointerLeave($event)\"\r\n (focusout)=\"focusOut($event)\"\r\n (focusin)=\"contentFocus()\"\r\n (keydown)=\"panelKeydown($event)\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"content()?.template ?? null\" />\r\n </div>\r\n</ng-template>\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n TemplateRef,\r\n inject,\r\n input,\r\n numberAttribute,\r\n} from '@angular/core';\r\nimport { RaqmHoverCardComponent } from './hover-card';\r\n\r\nfunction delay(fallback: number): (value: unknown) => number {\r\n return (value) => {\r\n const parsed = numberAttribute(value, fallback);\r\n return Number.isFinite(parsed) ? Math.max(0, parsed) : fallback;\r\n };\r\n}\r\n\r\n/** A native link or button; hover/focus intent never replaces native activation. */\r\n@Directive({\r\n selector: 'a[raqm-hover-card-trigger], button[raqm-hover-card-trigger]',\r\n host: {\r\n '(pointerenter)': 'enter($event)',\r\n '(pointerleave)': 'leave($event)',\r\n '(focus)': 'focus()',\r\n '(blur)': 'blur($event)',\r\n '(keydown)': 'keydown($event)',\r\n },\r\n})\r\nexport class RaqmHoverCardTriggerDirective {\r\n readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n protected readonly card = inject(RaqmHoverCardComponent);\r\n readonly delay = input(600, { transform: delay(600) });\r\n readonly closeDelay = input(300, { transform: delay(300) });\r\n\r\n constructor() {\r\n if (this.element instanceof HTMLButtonElement && !this.element.hasAttribute('type')) {\r\n this.element.setAttribute('type', 'button');\r\n }\r\n this.card.registerTrigger(this);\r\n inject(DestroyRef).onDestroy(() => this.card.unregisterTrigger(this));\r\n }\r\n\r\n protected enter(event: Event): void {\r\n const pointer = event as PointerEvent;\r\n if (pointer.pointerType === 'mouse') this.card.requestOpen();\r\n }\r\n\r\n protected leave(event: Event): void {\r\n const pointer = event as PointerEvent;\r\n if (pointer.pointerType === 'mouse') this.card.pointerLeave(pointer);\r\n }\r\n\r\n protected blur(event: Event): void {\r\n this.card.focusOut(event as FocusEvent);\r\n }\r\n protected keydown(event: Event): void {\r\n this.card.triggerKeydown(event as KeyboardEvent);\r\n }\r\n\r\n protected focus(): void {\r\n if (this.element.matches(':focus-visible')) this.card.requestOpen(true);\r\n }\r\n}\r\n\r\n/** The portalled content template; the root owns placement. */\r\n@Directive({ selector: 'ng-template[raqm-hover-card-content]' })\r\nexport class RaqmHoverCardContentDirective {\r\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\r\n private readonly card = inject(RaqmHoverCardComponent);\r\n\r\n constructor() {\r\n this.card.registerContent(this);\r\n inject(DestroyRef).onDestroy(() => this.card.unregisterContent(this));\r\n }\r\n}\r\n","import { RaqmHoverCardComponent } from './hover-card';\r\nimport {\r\n RaqmHoverCardTriggerDirective,\r\n RaqmHoverCardContentDirective,\r\n} from './hover-card.directive';\r\n\r\nexport { RaqmHoverCardComponent, RaqmHoverCardTriggerDirective, RaqmHoverCardContentDirective };\r\nexport const RaqmHoverCard = [\r\n RaqmHoverCardComponent,\r\n RaqmHoverCardTriggerDirective,\r\n RaqmHoverCardContentDirective,\r\n] as const;\r\n"],"mappings":"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"}