@raqm/ui 0.0.0-stage → 0.1.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 (178) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/LICENSE +21 -0
  3. package/NOTICE.md +28 -0
  4. package/README.md +126 -3
  5. package/combobox/README.md +17 -0
  6. package/fesm2022/raqm-ui-accordion.mjs +414 -0
  7. package/fesm2022/raqm-ui-accordion.mjs.map +1 -0
  8. package/fesm2022/raqm-ui-alert-dialog.mjs +457 -0
  9. package/fesm2022/raqm-ui-alert-dialog.mjs.map +1 -0
  10. package/fesm2022/raqm-ui-alert.mjs +195 -0
  11. package/fesm2022/raqm-ui-alert.mjs.map +1 -0
  12. package/fesm2022/raqm-ui-aspect-ratio.mjs +66 -0
  13. package/fesm2022/raqm-ui-aspect-ratio.mjs.map +1 -0
  14. package/fesm2022/raqm-ui-attachment.mjs +435 -0
  15. package/fesm2022/raqm-ui-attachment.mjs.map +1 -0
  16. package/fesm2022/raqm-ui-avatar.mjs +337 -0
  17. package/fesm2022/raqm-ui-avatar.mjs.map +1 -0
  18. package/fesm2022/raqm-ui-badge.mjs +68 -0
  19. package/fesm2022/raqm-ui-badge.mjs.map +1 -0
  20. package/fesm2022/raqm-ui-breadcrumb.mjs +309 -0
  21. package/fesm2022/raqm-ui-breadcrumb.mjs.map +1 -0
  22. package/fesm2022/raqm-ui-button-group.mjs +138 -0
  23. package/fesm2022/raqm-ui-button-group.mjs.map +1 -0
  24. package/fesm2022/raqm-ui-button.mjs +295 -0
  25. package/fesm2022/raqm-ui-button.mjs.map +1 -0
  26. package/fesm2022/raqm-ui-calendar.mjs +1394 -0
  27. package/fesm2022/raqm-ui-calendar.mjs.map +1 -0
  28. package/fesm2022/raqm-ui-card.mjs +331 -0
  29. package/fesm2022/raqm-ui-card.mjs.map +1 -0
  30. package/fesm2022/raqm-ui-carousel.mjs +410 -0
  31. package/fesm2022/raqm-ui-carousel.mjs.map +1 -0
  32. package/fesm2022/raqm-ui-checkbox.mjs +86 -0
  33. package/fesm2022/raqm-ui-checkbox.mjs.map +1 -0
  34. package/fesm2022/raqm-ui-collapsible.mjs +266 -0
  35. package/fesm2022/raqm-ui-collapsible.mjs.map +1 -0
  36. package/fesm2022/raqm-ui-combobox.mjs +1584 -0
  37. package/fesm2022/raqm-ui-combobox.mjs.map +1 -0
  38. package/fesm2022/raqm-ui-command.mjs +1210 -0
  39. package/fesm2022/raqm-ui-command.mjs.map +1 -0
  40. package/fesm2022/raqm-ui-context-menu.mjs +723 -0
  41. package/fesm2022/raqm-ui-context-menu.mjs.map +1 -0
  42. package/fesm2022/raqm-ui-dialog.mjs +1214 -0
  43. package/fesm2022/raqm-ui-dialog.mjs.map +1 -0
  44. package/fesm2022/raqm-ui-drawer.mjs +687 -0
  45. package/fesm2022/raqm-ui-drawer.mjs.map +1 -0
  46. package/fesm2022/raqm-ui-dropdown-menu.mjs +1168 -0
  47. package/fesm2022/raqm-ui-dropdown-menu.mjs.map +1 -0
  48. package/fesm2022/raqm-ui-empty.mjs +272 -0
  49. package/fesm2022/raqm-ui-empty.mjs.map +1 -0
  50. package/fesm2022/raqm-ui-field.mjs +517 -0
  51. package/fesm2022/raqm-ui-field.mjs.map +1 -0
  52. package/fesm2022/raqm-ui-hover-card.mjs +828 -0
  53. package/fesm2022/raqm-ui-hover-card.mjs.map +1 -0
  54. package/fesm2022/raqm-ui-input-group.mjs +270 -0
  55. package/fesm2022/raqm-ui-input-group.mjs.map +1 -0
  56. package/fesm2022/raqm-ui-input-otp.mjs +788 -0
  57. package/fesm2022/raqm-ui-input-otp.mjs.map +1 -0
  58. package/fesm2022/raqm-ui-input.mjs +73 -0
  59. package/fesm2022/raqm-ui-input.mjs.map +1 -0
  60. package/fesm2022/raqm-ui-item.mjs +495 -0
  61. package/fesm2022/raqm-ui-item.mjs.map +1 -0
  62. package/fesm2022/raqm-ui-kbd.mjs +80 -0
  63. package/fesm2022/raqm-ui-kbd.mjs.map +1 -0
  64. package/fesm2022/raqm-ui-label.mjs +44 -0
  65. package/fesm2022/raqm-ui-label.mjs.map +1 -0
  66. package/fesm2022/raqm-ui-menubar.mjs +536 -0
  67. package/fesm2022/raqm-ui-menubar.mjs.map +1 -0
  68. package/fesm2022/raqm-ui-native-select.mjs +131 -0
  69. package/fesm2022/raqm-ui-native-select.mjs.map +1 -0
  70. package/fesm2022/raqm-ui-navigation-menu.mjs +1399 -0
  71. package/fesm2022/raqm-ui-navigation-menu.mjs.map +1 -0
  72. package/fesm2022/raqm-ui-overlay-internal.mjs +185 -0
  73. package/fesm2022/raqm-ui-overlay-internal.mjs.map +1 -0
  74. package/fesm2022/raqm-ui-pagination.mjs +440 -0
  75. package/fesm2022/raqm-ui-pagination.mjs.map +1 -0
  76. package/fesm2022/raqm-ui-popover.mjs +1495 -0
  77. package/fesm2022/raqm-ui-popover.mjs.map +1 -0
  78. package/fesm2022/raqm-ui-progress.mjs +369 -0
  79. package/fesm2022/raqm-ui-progress.mjs.map +1 -0
  80. package/fesm2022/raqm-ui-questionnaire.mjs +1005 -0
  81. package/fesm2022/raqm-ui-questionnaire.mjs.map +1 -0
  82. package/fesm2022/raqm-ui-radio-group.mjs +151 -0
  83. package/fesm2022/raqm-ui-radio-group.mjs.map +1 -0
  84. package/fesm2022/raqm-ui-resizable.mjs +439 -0
  85. package/fesm2022/raqm-ui-resizable.mjs.map +1 -0
  86. package/fesm2022/raqm-ui-scroll-area.mjs +510 -0
  87. package/fesm2022/raqm-ui-scroll-area.mjs.map +1 -0
  88. package/fesm2022/raqm-ui-select.mjs +1073 -0
  89. package/fesm2022/raqm-ui-select.mjs.map +1 -0
  90. package/fesm2022/raqm-ui-separator.mjs +103 -0
  91. package/fesm2022/raqm-ui-separator.mjs.map +1 -0
  92. package/fesm2022/raqm-ui-sheet.mjs +411 -0
  93. package/fesm2022/raqm-ui-sheet.mjs.map +1 -0
  94. package/fesm2022/raqm-ui-sidebar.mjs +1784 -0
  95. package/fesm2022/raqm-ui-sidebar.mjs.map +1 -0
  96. package/fesm2022/raqm-ui-skeleton.mjs +50 -0
  97. package/fesm2022/raqm-ui-skeleton.mjs.map +1 -0
  98. package/fesm2022/raqm-ui-slider.mjs +609 -0
  99. package/fesm2022/raqm-ui-slider.mjs.map +1 -0
  100. package/fesm2022/raqm-ui-spinner.mjs +137 -0
  101. package/fesm2022/raqm-ui-spinner.mjs.map +1 -0
  102. package/fesm2022/raqm-ui-switch.mjs +109 -0
  103. package/fesm2022/raqm-ui-switch.mjs.map +1 -0
  104. package/fesm2022/raqm-ui-table.mjs +271 -0
  105. package/fesm2022/raqm-ui-table.mjs.map +1 -0
  106. package/fesm2022/raqm-ui-tabs.mjs +536 -0
  107. package/fesm2022/raqm-ui-tabs.mjs.map +1 -0
  108. package/fesm2022/raqm-ui-textarea.mjs +37 -0
  109. package/fesm2022/raqm-ui-textarea.mjs.map +1 -0
  110. package/fesm2022/raqm-ui-toast.mjs +918 -0
  111. package/fesm2022/raqm-ui-toast.mjs.map +1 -0
  112. package/fesm2022/raqm-ui-toggle-group.mjs +462 -0
  113. package/fesm2022/raqm-ui-toggle-group.mjs.map +1 -0
  114. package/fesm2022/raqm-ui-toggle.mjs +158 -0
  115. package/fesm2022/raqm-ui-toggle.mjs.map +1 -0
  116. package/fesm2022/raqm-ui-tooltip.mjs +1226 -0
  117. package/fesm2022/raqm-ui-tooltip.mjs.map +1 -0
  118. package/fesm2022/raqm-ui.mjs +50 -0
  119. package/input-otp/README.md +12 -0
  120. package/package.json +275 -3
  121. package/styles/theme.css +4324 -0
  122. package/types/raqm-ui-accordion.d.ts +124 -0
  123. package/types/raqm-ui-alert-dialog.d.ts +81 -0
  124. package/types/raqm-ui-alert.d.ts +29 -0
  125. package/types/raqm-ui-aspect-ratio.d.ts +13 -0
  126. package/types/raqm-ui-attachment.d.ts +72 -0
  127. package/types/raqm-ui-avatar.d.ts +67 -0
  128. package/types/raqm-ui-badge.d.ts +20 -0
  129. package/types/raqm-ui-breadcrumb.d.ts +35 -0
  130. package/types/raqm-ui-button-group.d.ts +27 -0
  131. package/types/raqm-ui-button.d.ts +80 -0
  132. package/types/raqm-ui-calendar.d.ts +359 -0
  133. package/types/raqm-ui-card.d.ts +34 -0
  134. package/types/raqm-ui-carousel.d.ts +81 -0
  135. package/types/raqm-ui-checkbox.d.ts +24 -0
  136. package/types/raqm-ui-collapsible.d.ts +72 -0
  137. package/types/raqm-ui-combobox.d.ts +405 -0
  138. package/types/raqm-ui-command.d.ts +256 -0
  139. package/types/raqm-ui-context-menu.d.ts +196 -0
  140. package/types/raqm-ui-dialog.d.ts +232 -0
  141. package/types/raqm-ui-drawer.d.ts +121 -0
  142. package/types/raqm-ui-dropdown-menu.d.ts +319 -0
  143. package/types/raqm-ui-empty.d.ts +35 -0
  144. package/types/raqm-ui-field.d.ts +88 -0
  145. package/types/raqm-ui-hover-card.d.ts +139 -0
  146. package/types/raqm-ui-input-group.d.ts +45 -0
  147. package/types/raqm-ui-input-otp.d.ts +197 -0
  148. package/types/raqm-ui-input.d.ts +16 -0
  149. package/types/raqm-ui-item.d.ts +71 -0
  150. package/types/raqm-ui-kbd.d.ts +12 -0
  151. package/types/raqm-ui-label.d.ts +6 -0
  152. package/types/raqm-ui-menubar.d.ts +159 -0
  153. package/types/raqm-ui-native-select.d.ts +23 -0
  154. package/types/raqm-ui-navigation-menu.d.ts +230 -0
  155. package/types/raqm-ui-overlay-internal.d.ts +5 -0
  156. package/types/raqm-ui-pagination.d.ts +84 -0
  157. package/types/raqm-ui-popover.d.ts +235 -0
  158. package/types/raqm-ui-progress.d.ts +79 -0
  159. package/types/raqm-ui-questionnaire.d.ts +217 -0
  160. package/types/raqm-ui-radio-group.d.ts +48 -0
  161. package/types/raqm-ui-resizable.d.ts +98 -0
  162. package/types/raqm-ui-scroll-area.d.ts +132 -0
  163. package/types/raqm-ui-select.d.ts +205 -0
  164. package/types/raqm-ui-separator.d.ts +21 -0
  165. package/types/raqm-ui-sheet.d.ts +79 -0
  166. package/types/raqm-ui-sidebar.d.ts +285 -0
  167. package/types/raqm-ui-skeleton.d.ts +6 -0
  168. package/types/raqm-ui-slider.d.ts +129 -0
  169. package/types/raqm-ui-spinner.d.ts +32 -0
  170. package/types/raqm-ui-switch.d.ts +32 -0
  171. package/types/raqm-ui-table.d.ts +36 -0
  172. package/types/raqm-ui-tabs.d.ts +154 -0
  173. package/types/raqm-ui-textarea.d.ts +6 -0
  174. package/types/raqm-ui-toast.d.ts +190 -0
  175. package/types/raqm-ui-toggle-group.d.ts +167 -0
  176. package/types/raqm-ui-toggle.d.ts +42 -0
  177. package/types/raqm-ui-tooltip.d.ts +207 -0
  178. package/types/raqm-ui.d.ts +50 -0
@@ -0,0 +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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"}
@@ -0,0 +1,270 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, Directive, ElementRef, inject, input } from "@angular/core";
3
+ import * as i1 from "@raqm/ui/textarea";
4
+ import { RaqmTextarea } from "@raqm/ui/textarea";
5
+ var RaqmInputGroupComponent = class RaqmInputGroupComponent {
6
+ static ɵfac = i0.ɵɵngDeclareFactory({
7
+ minVersion: "12.0.0",
8
+ version: "22.2.2",
9
+ ngImport: i0,
10
+ type: RaqmInputGroupComponent,
11
+ deps: [],
12
+ target: i0.ɵɵFactoryTarget.Component
13
+ });
14
+ static ɵcmp = i0.ɵɵngDeclareComponent({
15
+ minVersion: "14.0.0",
16
+ version: "22.2.2",
17
+ type: RaqmInputGroupComponent,
18
+ isStandalone: true,
19
+ selector: "raqm-input-group",
20
+ host: {
21
+ attributes: { "role": "group" },
22
+ classAttribute: "raqm-input-group"
23
+ },
24
+ ngImport: i0,
25
+ template: "<ng-content />",
26
+ isInline: true,
27
+ styles: [":host{display:flex;align-items:center;inline-size:100%;min-inline-size:0;position:relative;block-size:calc(var(--raqm-spacing) * 8);border:1px solid var(--raqm-input);border-radius:var(--raqm-radius-lg);background-color:var(--raqm-control-bg);outline:none;transition-property:color,background-color,border-color,box-shadow;transition-duration:var(--raqm-duration-base);transition-timing-function:var(--raqm-ease-standard);box-sizing:border-box}\n"],
28
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
29
+ });
30
+ };
31
+ i0.ɵɵngDeclareClassMetadata({
32
+ minVersion: "12.0.0",
33
+ version: "22.2.2",
34
+ ngImport: i0,
35
+ type: RaqmInputGroupComponent,
36
+ decorators: [{
37
+ type: Component,
38
+ args: [{
39
+ selector: "raqm-input-group",
40
+ template: "<ng-content />",
41
+ changeDetection: ChangeDetectionStrategy.OnPush,
42
+ host: {
43
+ class: "raqm-input-group",
44
+ role: "group"
45
+ },
46
+ styles: [":host{display:flex;align-items:center;inline-size:100%;min-inline-size:0;position:relative;block-size:calc(var(--raqm-spacing) * 8);border:1px solid var(--raqm-input);border-radius:var(--raqm-radius-lg);background-color:var(--raqm-control-bg);outline:none;transition-property:color,background-color,border-color,box-shadow;transition-duration:var(--raqm-duration-base);transition-timing-function:var(--raqm-ease-standard);box-sizing:border-box}\n"]
47
+ }]
48
+ }]
49
+ });
50
+ const INTERACTIVE_SELECTOR = "button, a[href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])";
51
+ var RaqmInputGroupAddonComponent = class RaqmInputGroupAddonComponent {
52
+ align = input("inline-start", ...ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []);
53
+ host = inject(ElementRef);
54
+ onHostClick(event) {
55
+ const target = event.target;
56
+ if (target instanceof Element && target.closest(INTERACTIVE_SELECTOR)) return;
57
+ const group = this.host.nativeElement.parentElement;
58
+ if (!group?.classList.contains("raqm-input-group")) return;
59
+ const control = Array.from(group.children).find((child) => child instanceof HTMLInputElement || child instanceof HTMLTextAreaElement);
60
+ if ((control instanceof HTMLInputElement || control instanceof HTMLTextAreaElement) && !control.disabled) control.focus();
61
+ }
62
+ static ɵfac = i0.ɵɵngDeclareFactory({
63
+ minVersion: "12.0.0",
64
+ version: "22.2.2",
65
+ ngImport: i0,
66
+ type: RaqmInputGroupAddonComponent,
67
+ deps: [],
68
+ target: i0.ɵɵFactoryTarget.Component
69
+ });
70
+ static ɵcmp = i0.ɵɵngDeclareComponent({
71
+ minVersion: "17.1.0",
72
+ version: "22.2.2",
73
+ type: RaqmInputGroupAddonComponent,
74
+ isStandalone: true,
75
+ selector: "raqm-input-group-addon",
76
+ inputs: { align: {
77
+ classPropertyName: "align",
78
+ publicName: "align",
79
+ isSignal: true,
80
+ isRequired: false,
81
+ transformFunction: null
82
+ } },
83
+ host: {
84
+ listeners: { "click": "onHostClick($event)" },
85
+ properties: { "attr.data-raqm-align": "align()" },
86
+ classAttribute: "raqm-input-group-addon"
87
+ },
88
+ ngImport: i0,
89
+ template: "<ng-content />",
90
+ isInline: true,
91
+ styles: [":host{display:flex;box-sizing:border-box;align-items:center;justify-content:center;cursor:text;-webkit-user-select:none;user-select:none;color:var(--raqm-muted-foreground);gap:calc(var(--raqm-spacing) * 2);padding-block:calc(var(--raqm-spacing) * 1.5);font-size:var(--raqm-font-size-sm);font-weight:var(--raqm-font-weight-medium);block-size:auto}:host([data-raqm-align=inline-start]){order:-1;padding-inline-start:calc(var(--raqm-spacing) * 2)}:host([data-raqm-align=inline-end]){order:1;padding-inline-end:calc(var(--raqm-spacing) * 2)}:host([data-raqm-align=block-start]),:host([data-raqm-align=block-end]){inline-size:100%;justify-content:flex-start;padding-inline:calc(var(--raqm-spacing) * 2.5)}:host([data-raqm-align=block-start]){order:-1;padding-block-start:calc(var(--raqm-spacing) * 2)}:host([data-raqm-align=block-end]){order:1;padding-block-end:calc(var(--raqm-spacing) * 2)}\n"],
92
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
93
+ });
94
+ };
95
+ i0.ɵɵngDeclareClassMetadata({
96
+ minVersion: "12.0.0",
97
+ version: "22.2.2",
98
+ ngImport: i0,
99
+ type: RaqmInputGroupAddonComponent,
100
+ decorators: [{
101
+ type: Component,
102
+ args: [{
103
+ selector: "raqm-input-group-addon",
104
+ template: "<ng-content />",
105
+ changeDetection: ChangeDetectionStrategy.OnPush,
106
+ host: {
107
+ class: "raqm-input-group-addon",
108
+ "[attr.data-raqm-align]": "align()",
109
+ "(click)": "onHostClick($event)"
110
+ },
111
+ styles: [":host{display:flex;box-sizing:border-box;align-items:center;justify-content:center;cursor:text;-webkit-user-select:none;user-select:none;color:var(--raqm-muted-foreground);gap:calc(var(--raqm-spacing) * 2);padding-block:calc(var(--raqm-spacing) * 1.5);font-size:var(--raqm-font-size-sm);font-weight:var(--raqm-font-weight-medium);block-size:auto}:host([data-raqm-align=inline-start]){order:-1;padding-inline-start:calc(var(--raqm-spacing) * 2)}:host([data-raqm-align=inline-end]){order:1;padding-inline-end:calc(var(--raqm-spacing) * 2)}:host([data-raqm-align=block-start]),:host([data-raqm-align=block-end]){inline-size:100%;justify-content:flex-start;padding-inline:calc(var(--raqm-spacing) * 2.5)}:host([data-raqm-align=block-start]){order:-1;padding-block-start:calc(var(--raqm-spacing) * 2)}:host([data-raqm-align=block-end]){order:1;padding-block-end:calc(var(--raqm-spacing) * 2)}\n"]
112
+ }]
113
+ }],
114
+ propDecorators: { align: [{
115
+ type: i0.Input,
116
+ args: [{
117
+ isSignal: true,
118
+ alias: "align",
119
+ required: false
120
+ }]
121
+ }] }
122
+ });
123
+ var RaqmInputGroupTextComponent = class RaqmInputGroupTextComponent {
124
+ static ɵfac = i0.ɵɵngDeclareFactory({
125
+ minVersion: "12.0.0",
126
+ version: "22.2.2",
127
+ ngImport: i0,
128
+ type: RaqmInputGroupTextComponent,
129
+ deps: [],
130
+ target: i0.ɵɵFactoryTarget.Component
131
+ });
132
+ static ɵcmp = i0.ɵɵngDeclareComponent({
133
+ minVersion: "14.0.0",
134
+ version: "22.2.2",
135
+ type: RaqmInputGroupTextComponent,
136
+ isStandalone: true,
137
+ selector: "span[raqm-input-group-text]",
138
+ host: { classAttribute: "raqm-input-group-text" },
139
+ ngImport: i0,
140
+ template: "<ng-content />",
141
+ isInline: true,
142
+ styles: [":host{display:flex;align-items:center;color:var(--raqm-muted-foreground);gap:calc(var(--raqm-spacing) * 2);font-size:var(--raqm-font-size-sm)}\n"],
143
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
144
+ });
145
+ };
146
+ i0.ɵɵngDeclareClassMetadata({
147
+ minVersion: "12.0.0",
148
+ version: "22.2.2",
149
+ ngImport: i0,
150
+ type: RaqmInputGroupTextComponent,
151
+ decorators: [{
152
+ type: Component,
153
+ args: [{
154
+ selector: "span[raqm-input-group-text]",
155
+ template: "<ng-content />",
156
+ changeDetection: ChangeDetectionStrategy.OnPush,
157
+ host: { class: "raqm-input-group-text" },
158
+ styles: [":host{display:flex;align-items:center;color:var(--raqm-muted-foreground);gap:calc(var(--raqm-spacing) * 2);font-size:var(--raqm-font-size-sm)}\n"]
159
+ }]
160
+ }]
161
+ });
162
+ var RaqmInputGroupButtonDirective = class RaqmInputGroupButtonDirective {
163
+ static ɵfac = i0.ɵɵngDeclareFactory({
164
+ minVersion: "12.0.0",
165
+ version: "22.2.2",
166
+ ngImport: i0,
167
+ type: RaqmInputGroupButtonDirective,
168
+ deps: [],
169
+ target: i0.ɵɵFactoryTarget.Directive
170
+ });
171
+ static ɵdir = i0.ɵɵngDeclareDirective({
172
+ minVersion: "14.0.0",
173
+ version: "22.2.2",
174
+ type: RaqmInputGroupButtonDirective,
175
+ isStandalone: true,
176
+ selector: "button[raqm-button][raqm-input-group-button]",
177
+ host: { classAttribute: "raqm-input-group-button" },
178
+ ngImport: i0
179
+ });
180
+ };
181
+ i0.ɵɵngDeclareClassMetadata({
182
+ minVersion: "12.0.0",
183
+ version: "22.2.2",
184
+ ngImport: i0,
185
+ type: RaqmInputGroupButtonDirective,
186
+ decorators: [{
187
+ type: Directive,
188
+ args: [{
189
+ selector: "button[raqm-button][raqm-input-group-button]",
190
+ host: { class: "raqm-input-group-button" }
191
+ }]
192
+ }]
193
+ });
194
+ var RaqmInputGroupControlDirective = class RaqmInputGroupControlDirective {
195
+ static ɵfac = i0.ɵɵngDeclareFactory({
196
+ minVersion: "12.0.0",
197
+ version: "22.2.2",
198
+ ngImport: i0,
199
+ type: RaqmInputGroupControlDirective,
200
+ deps: [],
201
+ target: i0.ɵɵFactoryTarget.Directive
202
+ });
203
+ static ɵdir = i0.ɵɵngDeclareDirective({
204
+ minVersion: "14.0.0",
205
+ version: "22.2.2",
206
+ type: RaqmInputGroupControlDirective,
207
+ isStandalone: true,
208
+ selector: "[raqm-input-group-control]",
209
+ host: { classAttribute: "raqm-input-group-control" },
210
+ ngImport: i0
211
+ });
212
+ };
213
+ i0.ɵɵngDeclareClassMetadata({
214
+ minVersion: "12.0.0",
215
+ version: "22.2.2",
216
+ ngImport: i0,
217
+ type: RaqmInputGroupControlDirective,
218
+ decorators: [{
219
+ type: Directive,
220
+ args: [{
221
+ selector: "[raqm-input-group-control]",
222
+ host: { class: "raqm-input-group-control" }
223
+ }]
224
+ }]
225
+ });
226
+ var RaqmInputGroupTextareaDirective = class RaqmInputGroupTextareaDirective {
227
+ static ɵfac = i0.ɵɵngDeclareFactory({
228
+ minVersion: "12.0.0",
229
+ version: "22.2.2",
230
+ ngImport: i0,
231
+ type: RaqmInputGroupTextareaDirective,
232
+ deps: [],
233
+ target: i0.ɵɵFactoryTarget.Directive
234
+ });
235
+ static ɵdir = i0.ɵɵngDeclareDirective({
236
+ minVersion: "14.0.0",
237
+ version: "22.2.2",
238
+ type: RaqmInputGroupTextareaDirective,
239
+ isStandalone: true,
240
+ selector: "textarea[raqm-input-group-textarea]",
241
+ host: { classAttribute: "raqm-input-group-textarea" },
242
+ hostDirectives: [{ directive: i1.RaqmTextarea }],
243
+ ngImport: i0
244
+ });
245
+ };
246
+ i0.ɵɵngDeclareClassMetadata({
247
+ minVersion: "12.0.0",
248
+ version: "22.2.2",
249
+ ngImport: i0,
250
+ type: RaqmInputGroupTextareaDirective,
251
+ decorators: [{
252
+ type: Directive,
253
+ args: [{
254
+ selector: "textarea[raqm-input-group-textarea]",
255
+ hostDirectives: [RaqmTextarea],
256
+ host: { class: "raqm-input-group-textarea" }
257
+ }]
258
+ }]
259
+ });
260
+ const RaqmInputGroup = [
261
+ RaqmInputGroupComponent,
262
+ RaqmInputGroupAddonComponent,
263
+ RaqmInputGroupTextComponent,
264
+ RaqmInputGroupButtonDirective,
265
+ RaqmInputGroupControlDirective,
266
+ RaqmInputGroupTextareaDirective
267
+ ];
268
+ export { RaqmInputGroup, RaqmInputGroupAddonComponent, RaqmInputGroupButtonDirective, RaqmInputGroupComponent, RaqmInputGroupControlDirective, RaqmInputGroupTextComponent, RaqmInputGroupTextareaDirective };
269
+
270
+ //# sourceMappingURL=raqm-ui-input-group.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raqm-ui-input-group.mjs","names":[],"sources":["../../../projects/ui/input-group/input-group.ts","../../../projects/ui/input-group/public-api.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { RaqmTextarea } from '@raqm/ui/textarea';\r\n\r\n/** Group container; `role=\"group\"` is set, the accessible name is app-owned, and the API is empty. */\r\n@Component({\r\n selector: 'raqm-input-group',\r\n template: '<ng-content />',\r\n styleUrl: './input-group.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-input-group',\r\n role: 'group',\r\n },\r\n})\r\nexport class RaqmInputGroupComponent {}\r\n\r\n// Descendants whose own activation must not be intercepted.\r\nconst INTERACTIVE_SELECTOR =\r\n 'button, a[href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\r\n\r\n/** Passive addon without a `role`; a click on passive space focuses the group control. */\r\n@Component({\r\n selector: 'raqm-input-group-addon',\r\n template: '<ng-content />',\r\n styleUrl: './input-group-addon.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-input-group-addon',\r\n '[attr.data-raqm-align]': 'align()',\r\n '(click)': 'onHostClick($event)',\r\n },\r\n})\r\nexport class RaqmInputGroupAddonComponent {\r\n // Inline alignments flank the control; block alignments stack.\r\n readonly align = input<'inline-start' | 'inline-end' | 'block-start' | 'block-end'>(\r\n 'inline-start',\r\n );\r\n\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n protected onHostClick(event: Event): void {\r\n const target = event.target;\r\n // Interactive descendants keep their own activation.\r\n if (target instanceof Element && target.closest(INTERACTIVE_SELECTOR)) {\r\n return;\r\n }\r\n\r\n const addon = this.host.nativeElement;\r\n const group = addon.parentElement;\r\n if (!group?.classList.contains('raqm-input-group')) return;\r\n const control = Array.from(group.children).find(\r\n (child) => child instanceof HTMLInputElement || child instanceof HTMLTextAreaElement,\r\n );\r\n if (\r\n (control instanceof HTMLInputElement || control instanceof HTMLTextAreaElement) &&\r\n !control.disabled\r\n ) {\r\n control.focus();\r\n }\r\n }\r\n}\r\n\r\n/** Non-interactive prefix/suffix text on a native `<span>` host. */\r\n@Component({\r\n selector: 'span[raqm-input-group-text]',\r\n template: '<ng-content />',\r\n styleUrl: './input-group-text.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-input-group-text',\r\n },\r\n})\r\nexport class RaqmInputGroupTextComponent {}\r\n\r\n/** Styles a host that separately opts into RaqmButton. */\r\n@Directive({\r\n selector: 'button[raqm-button][raqm-input-group-button]',\r\n host: {\r\n class: 'raqm-input-group-button',\r\n },\r\n})\r\nexport class RaqmInputGroupButtonDirective {}\r\n\r\n/** Marks an app-authored control; it must be a direct child and carry `aria-invalid=\"true\"` when invalid. */\r\n@Directive({\r\n selector: '[raqm-input-group-control]',\r\n host: {\r\n class: 'raqm-input-group-control',\r\n },\r\n})\r\nexport class RaqmInputGroupControlDirective {}\r\n\r\n@Directive({\r\n selector: 'textarea[raqm-input-group-textarea]',\r\n hostDirectives: [RaqmTextarea],\r\n host: {\r\n class: 'raqm-input-group-textarea',\r\n },\r\n})\r\nexport class RaqmInputGroupTextareaDirective {}\r\n","// Public API for `@raqm/ui/input-group`.\r\nimport {\r\n RaqmInputGroupAddonComponent,\r\n RaqmInputGroupButtonDirective,\r\n RaqmInputGroupComponent,\r\n RaqmInputGroupControlDirective,\r\n RaqmInputGroupTextareaDirective,\r\n RaqmInputGroupTextComponent,\r\n} from './input-group';\r\n\r\nexport {\r\n RaqmInputGroupAddonComponent,\r\n RaqmInputGroupButtonDirective,\r\n RaqmInputGroupComponent,\r\n RaqmInputGroupControlDirective,\r\n RaqmInputGroupTextareaDirective,\r\n RaqmInputGroupTextComponent,\r\n};\r\n\r\nexport const RaqmInputGroup = [\r\n RaqmInputGroupComponent,\r\n RaqmInputGroupAddonComponent,\r\n RaqmInputGroupTextComponent,\r\n RaqmInputGroupButtonDirective,\r\n RaqmInputGroupControlDirective,\r\n RaqmInputGroupTextareaDirective,\r\n] as const;\r\n"],"mappings":"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"}