forty-cdk 0.2.0 → 0.3.0

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 (220) hide show
  1. package/accordion/README.md +122 -0
  2. package/aspect-ratio/README.md +76 -0
  3. package/avatar/README.md +100 -0
  4. package/breadcrumbs/README.md +49 -0
  5. package/breakpoints/README.md +81 -0
  6. package/button/README.md +49 -0
  7. package/calendar/README.md +458 -0
  8. package/carousel/README.md +358 -0
  9. package/checkbox/README.md +146 -0
  10. package/combobox/README.md +535 -0
  11. package/context-menu/README.md +139 -0
  12. package/date-field/README.md +184 -0
  13. package/date-picker/README.md +338 -0
  14. package/dialog/README.md +388 -0
  15. package/disclosure/README.md +114 -0
  16. package/drag-drop/README.md +359 -0
  17. package/drawer/README.md +560 -0
  18. package/dropdown-menu/README.md +176 -0
  19. package/fesm2022/forty-cdk-accordion.mjs +348 -0
  20. package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
  21. package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
  22. package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
  23. package/fesm2022/forty-cdk-avatar.mjs +308 -0
  24. package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
  25. package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
  26. package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
  27. package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
  28. package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
  29. package/fesm2022/forty-cdk-button.mjs +134 -0
  30. package/fesm2022/forty-cdk-button.mjs.map +1 -0
  31. package/fesm2022/forty-cdk-calendar.mjs +2034 -0
  32. package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
  33. package/fesm2022/forty-cdk-carousel.mjs +968 -0
  34. package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
  35. package/fesm2022/forty-cdk-checkbox.mjs +226 -0
  36. package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
  37. package/fesm2022/forty-cdk-combobox.mjs +2596 -0
  38. package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
  39. package/fesm2022/forty-cdk-context-menu.mjs +413 -0
  40. package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
  41. package/fesm2022/forty-cdk-core.mjs +9022 -0
  42. package/fesm2022/forty-cdk-core.mjs.map +1 -0
  43. package/fesm2022/forty-cdk-date-field.mjs +744 -0
  44. package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
  45. package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
  46. package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
  47. package/fesm2022/forty-cdk-dialog.mjs +707 -0
  48. package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
  49. package/fesm2022/forty-cdk-disclosure.mjs +190 -0
  50. package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
  51. package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
  52. package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
  53. package/fesm2022/forty-cdk-drawer.mjs +1641 -0
  54. package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
  55. package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
  56. package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
  57. package/fesm2022/forty-cdk-field.mjs +425 -0
  58. package/fesm2022/forty-cdk-field.mjs.map +1 -0
  59. package/fesm2022/forty-cdk-fieldset.mjs +164 -0
  60. package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
  61. package/fesm2022/forty-cdk-file-upload.mjs +221 -0
  62. package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
  63. package/fesm2022/forty-cdk-hover-card.mjs +496 -0
  64. package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
  65. package/fesm2022/forty-cdk-input.mjs +274 -0
  66. package/fesm2022/forty-cdk-input.mjs.map +1 -0
  67. package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
  68. package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
  69. package/fesm2022/forty-cdk-listbox.mjs +1279 -0
  70. package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
  71. package/fesm2022/forty-cdk-menu.mjs +1439 -0
  72. package/fesm2022/forty-cdk-menu.mjs.map +1 -0
  73. package/fesm2022/forty-cdk-menubar.mjs +787 -0
  74. package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
  75. package/fesm2022/forty-cdk-meter.mjs +211 -0
  76. package/fesm2022/forty-cdk-meter.mjs.map +1 -0
  77. package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
  78. package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
  79. package/fesm2022/forty-cdk-number-input.mjs +559 -0
  80. package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
  81. package/fesm2022/forty-cdk-otp-input.mjs +527 -0
  82. package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
  83. package/fesm2022/forty-cdk-pagination.mjs +323 -0
  84. package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
  85. package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
  86. package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
  87. package/fesm2022/forty-cdk-popover.mjs +698 -0
  88. package/fesm2022/forty-cdk-popover.mjs.map +1 -0
  89. package/fesm2022/forty-cdk-progress.mjs +226 -0
  90. package/fesm2022/forty-cdk-progress.mjs.map +1 -0
  91. package/fesm2022/forty-cdk-radio-group.mjs +378 -0
  92. package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
  93. package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
  94. package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
  95. package/fesm2022/forty-cdk-search.mjs +205 -0
  96. package/fesm2022/forty-cdk-search.mjs.map +1 -0
  97. package/fesm2022/forty-cdk-select.mjs +1661 -0
  98. package/fesm2022/forty-cdk-select.mjs.map +1 -0
  99. package/fesm2022/forty-cdk-separator.mjs +82 -0
  100. package/fesm2022/forty-cdk-separator.mjs.map +1 -0
  101. package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
  102. package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
  103. package/fesm2022/forty-cdk-slider.mjs +803 -0
  104. package/fesm2022/forty-cdk-slider.mjs.map +1 -0
  105. package/fesm2022/forty-cdk-stepper.mjs +886 -0
  106. package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
  107. package/fesm2022/forty-cdk-switch.mjs +137 -0
  108. package/fesm2022/forty-cdk-switch.mjs.map +1 -0
  109. package/fesm2022/forty-cdk-table.mjs +1518 -0
  110. package/fesm2022/forty-cdk-table.mjs.map +1 -0
  111. package/fesm2022/forty-cdk-tabs.mjs +400 -0
  112. package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
  113. package/fesm2022/forty-cdk-time-field.mjs +593 -0
  114. package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
  115. package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
  116. package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
  117. package/fesm2022/forty-cdk-toast.mjs +1153 -0
  118. package/fesm2022/forty-cdk-toast.mjs.map +1 -0
  119. package/fesm2022/forty-cdk-toggle.mjs +516 -0
  120. package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
  121. package/fesm2022/forty-cdk-toolbar.mjs +374 -0
  122. package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
  123. package/fesm2022/forty-cdk-tooltip.mjs +672 -0
  124. package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
  125. package/fesm2022/forty-cdk-tree.mjs +2007 -0
  126. package/fesm2022/forty-cdk-tree.mjs.map +1 -0
  127. package/fesm2022/forty-cdk-virtualization.mjs +1 -1
  128. package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
  129. package/fesm2022/forty-cdk.mjs +0 -43310
  130. package/fesm2022/forty-cdk.mjs.map +1 -1
  131. package/field/README.md +97 -0
  132. package/fieldset/README.md +86 -0
  133. package/file-upload/README.md +73 -0
  134. package/hover-card/README.md +171 -0
  135. package/input/README.md +156 -0
  136. package/listbox/README.md +424 -0
  137. package/menu/README.md +181 -0
  138. package/menubar/README.md +140 -0
  139. package/meter/README.md +128 -0
  140. package/navigation-menu/README.md +253 -0
  141. package/number-input/README.md +171 -0
  142. package/otp-input/README.md +198 -0
  143. package/package.json +213 -1
  144. package/pagination/README.md +61 -0
  145. package/pane-resizer/README.md +136 -0
  146. package/popover/README.md +262 -0
  147. package/progress/README.md +115 -0
  148. package/radio-group/README.md +129 -0
  149. package/scroll-area/README.md +184 -0
  150. package/search/README.md +42 -0
  151. package/select/README.md +488 -0
  152. package/separator/README.md +84 -0
  153. package/signal-forms/README.md +72 -0
  154. package/slider/README.md +152 -0
  155. package/stepper/README.md +292 -0
  156. package/switch/README.md +116 -0
  157. package/table/README.md +769 -0
  158. package/tabs/README.md +130 -0
  159. package/time-field/README.md +157 -0
  160. package/time-picker/README.md +172 -0
  161. package/toast/README.md +398 -0
  162. package/toggle/README.md +224 -0
  163. package/toolbar/README.md +109 -0
  164. package/tooltip/README.md +274 -0
  165. package/tree/README.md +708 -0
  166. package/types/forty-cdk-accordion.d.ts +242 -0
  167. package/types/forty-cdk-aspect-ratio.d.ts +59 -0
  168. package/types/forty-cdk-avatar.d.ts +133 -0
  169. package/types/forty-cdk-breadcrumbs.d.ts +92 -0
  170. package/types/forty-cdk-breakpoints.d.ts +141 -0
  171. package/types/forty-cdk-button.d.ts +80 -0
  172. package/types/forty-cdk-calendar.d.ts +914 -0
  173. package/types/forty-cdk-carousel.d.ts +530 -0
  174. package/types/forty-cdk-checkbox.d.ts +141 -0
  175. package/types/forty-cdk-combobox.d.ts +1259 -0
  176. package/types/forty-cdk-context-menu.d.ts +313 -0
  177. package/types/forty-cdk-core.d.ts +5774 -0
  178. package/types/forty-cdk-date-field.d.ts +307 -0
  179. package/types/forty-cdk-date-picker.d.ts +622 -0
  180. package/types/forty-cdk-dialog.d.ts +546 -0
  181. package/types/forty-cdk-disclosure.d.ts +127 -0
  182. package/types/forty-cdk-drag-drop.d.ts +456 -0
  183. package/types/forty-cdk-drawer.d.ts +871 -0
  184. package/types/forty-cdk-dropdown-menu.d.ts +242 -0
  185. package/types/forty-cdk-field.d.ts +236 -0
  186. package/types/forty-cdk-fieldset.d.ts +119 -0
  187. package/types/forty-cdk-file-upload.d.ts +124 -0
  188. package/types/forty-cdk-hover-card.d.ts +320 -0
  189. package/types/forty-cdk-input.d.ts +169 -0
  190. package/types/forty-cdk-internationalized-date.d.ts +1 -1
  191. package/types/forty-cdk-listbox.d.ts +513 -0
  192. package/types/forty-cdk-menu.d.ts +629 -0
  193. package/types/forty-cdk-menubar.d.ts +451 -0
  194. package/types/forty-cdk-meter.d.ts +122 -0
  195. package/types/forty-cdk-navigation-menu.d.ts +514 -0
  196. package/types/forty-cdk-number-input.d.ts +319 -0
  197. package/types/forty-cdk-otp-input.d.ts +248 -0
  198. package/types/forty-cdk-pagination.d.ts +214 -0
  199. package/types/forty-cdk-pane-resizer.d.ts +145 -0
  200. package/types/forty-cdk-popover.d.ts +509 -0
  201. package/types/forty-cdk-progress.d.ts +143 -0
  202. package/types/forty-cdk-radio-group.d.ts +222 -0
  203. package/types/forty-cdk-scroll-area.d.ts +258 -0
  204. package/types/forty-cdk-search.d.ts +142 -0
  205. package/types/forty-cdk-select.d.ts +899 -0
  206. package/types/forty-cdk-separator.d.ts +59 -0
  207. package/types/forty-cdk-signal-forms.d.ts +58 -0
  208. package/types/forty-cdk-slider.d.ts +379 -0
  209. package/types/forty-cdk-stepper.d.ts +650 -0
  210. package/types/forty-cdk-switch.d.ts +87 -0
  211. package/types/forty-cdk-table.d.ts +723 -0
  212. package/types/forty-cdk-tabs.d.ts +235 -0
  213. package/types/forty-cdk-time-field.d.ts +307 -0
  214. package/types/forty-cdk-time-picker.d.ts +578 -0
  215. package/types/forty-cdk-toast.d.ts +598 -0
  216. package/types/forty-cdk-toggle.d.ts +310 -0
  217. package/types/forty-cdk-toolbar.d.ts +217 -0
  218. package/types/forty-cdk-tooltip.d.ts +436 -0
  219. package/types/forty-cdk-tree.d.ts +688 -0
  220. package/types/forty-cdk.d.ts +1 -19743
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forty-cdk-tooltip.mjs","sources":["../../../projects/forty-cdk/tooltip/src/tooltip-context.ts","../../../projects/forty-cdk/tooltip/src/tooltip-defaults.ts","../../../projects/forty-cdk/tooltip/src/tooltip.ts","../../../projects/forty-cdk/tooltip/src/tooltip-trigger.ts","../../../projects/forty-cdk/tooltip/src/tooltip-content.ts","../../../projects/forty-cdk/tooltip/src/tooltip-arrow.ts","../../../projects/forty-cdk/tooltip/src/forty-cdk-tooltip.ts"],"sourcesContent":["import { computed, inject, InjectionToken, type Signal } from '@angular/core';\n\nimport { type AnchoredPositioningContext, type Point } from 'forty-cdk/core';\n\n/** Reason a show / hide was scheduled — escape bypasses the close delay. */\nexport type TooltipScheduleReason = 'hover' | 'focus' | 'escape';\n\n/**\n * Coordination contract owned by `ForTooltip`. Trigger and content register\n * their host elements so floating-ui can compute position; the optional arrow\n * registers itself so the `arrow` middleware can offset it inside the bubble.\n *\n * The trigger and content forward their host hover / focus events through the\n * `pointerEnter*` / `pointerLeave*` / `focusTrigger` / `blurTrigger` methods;\n * the root owns the single open / close decision so all keep-alive sources\n * (trigger hover, trigger focus, and — under `hoverableContent` — content\n * hover) are reconciled in one place.\n */\nexport interface ForTooltipContext extends AnchoredPositioningContext {\n readonly open: Signal<boolean>;\n readonly disabled: Signal<boolean>;\n /** Whether the pointer may move into the content without dismissing the tooltip. */\n readonly hoverableContent: Signal<boolean>;\n /** Whether `prefers-reduced-motion: reduce` is active — reflected as `data-reduced-motion`. */\n readonly reducedMotion: Signal<boolean>;\n /** Trigger element id — a consumer-set host `id` is adopted, else a generated one. */\n readonly triggerId: Signal<string>;\n /** Content element id — a consumer-set host `id` is adopted, else a generated one. Referenced by the trigger's `aria-describedby` while open. */\n readonly contentId: Signal<string>;\n readonly trigger: Signal<HTMLElement | null>;\n\n registerTrigger(el: HTMLElement): void;\n unregisterTrigger(el: HTMLElement): void;\n /** Registers the content host element so the hoverable-content grace polygon can measure it. */\n registerContent(el: HTMLElement): void;\n unregisterContent(el: HTMLElement): void;\n /** Adopts a consumer-set static `id` on the content host into `contentId`. */\n adoptContentId(el: HTMLElement): void;\n registerArrow(el: HTMLElement): void;\n unregisterArrow(el: HTMLElement): void;\n\n /** The pointer entered the trigger; opens after the resolved open delay (gated by `showOnOverflow`). */\n pointerEnterTrigger(): void;\n /** The pointer left the trigger; closes, or arms the hoverable-content bridge from `cursor`. */\n pointerLeaveTrigger(cursor: Point): void;\n /** The trigger received focus; opens after the resolved open delay (gated by `showOnOverflow`). */\n focusTrigger(): void;\n /** The trigger lost focus; closes when nothing else keeps the tooltip alive. */\n blurTrigger(): void;\n /** The pointer entered the content (`hoverableContent`); holds the tooltip open. */\n pointerEnterContent(): void;\n /** The pointer left the content (`hoverableContent`); closes when nothing else keeps it alive. */\n pointerLeaveContent(): void;\n\n /** Schedule the tooltip to open after `openDelay` ms (instant when delay is 0). */\n scheduleOpen(reason: TooltipScheduleReason): void;\n /** Schedule the tooltip to close after `closeDelay` ms (instant on `escape`). */\n scheduleClose(reason: TooltipScheduleReason): void;\n /** Cancel any pending open/close timer without changing state. */\n cancelPending(): void;\n}\n\nexport const FOR_TOOLTIP_CONTEXT = new InjectionToken<ForTooltipContext>('FOR_TOOLTIP_CONTEXT');\n\nexport function injectTooltipContext(piece: string): ForTooltipContext {\n const ctx = inject(FOR_TOOLTIP_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(\n `[forty-cdk/tooltip] ${piece} must be used inside a [forTooltip] element. ` +\n \"If it is declared inside an ng-template, DI resolves at the template's declaration site — \" +\n 'not where it is stamped (e.g. via ngTemplateOutlet) — so declare the template inside the ' +\n '[forTooltip] root.',\n );\n }\n return ctx;\n}\n\n/**\n * Resolves the trigger's root context: the explicit reference when the\n * `[forTooltipTrigger]` input carries one, the injected `FOR_TOOLTIP_CONTEXT`\n * otherwise. The orphan error only fires when neither resolves, on first read\n * of the returned signal. Must be called in an injection context.\n */\nexport function injectTooltipTriggerContext(\n explicitRoot: Signal<ForTooltipContext | ''>,\n): Signal<ForTooltipContext> {\n const injected = inject(FOR_TOOLTIP_CONTEXT, { optional: true });\n return computed(() => {\n const explicit = explicitRoot();\n if (explicit !== '') {\n return explicit;\n }\n if (injected) {\n return injected;\n }\n throw new Error(\n '[forty-cdk/tooltip] ForTooltipTrigger could not resolve its [forTooltip] root: ' +\n 'no FOR_TOOLTIP_CONTEXT provider is visible and no explicit root reference was passed. ' +\n \"If this trigger is declared inside an ng-template, DI resolves at the template's declaration \" +\n 'site — not where it is stamped — so either declare the template inside the root or pass the ' +\n 'root explicitly: [forTooltipTrigger]=\"root\" with #root=\"forTooltip\".',\n );\n });\n}\n","import { inject, Injectable, type Provider } from '@angular/core';\n\nimport {\n createDefaults,\n type FloatingAlign,\n type FloatingSide,\n SkipDelayCoordinator,\n} from 'forty-cdk/core';\n\n/**\n * Defaults that descendant tooltips inherit from their injector scope.\n * Configure with `provideForTooltipDefaults` either at the application root\n * or in any component's `providers` array; partial overrides merge with\n * the parent scope.\n */\nexport interface ForTooltipDefaults {\n /** Open delay (ms) for tooltips that don't override `openDelay` locally. */\n openDelay: number;\n /** Close delay (ms) for tooltips that don't override `closeDelay` locally. */\n closeDelay: number;\n /**\n * Window (ms) after a peer tooltip in this scope closes during which\n * the next open is instant — keeps toolbar-style tooltips from feeling\n * sluggish on cursor movement between targets.\n */\n skipDelayDuration: number;\n /**\n * Side the tooltip is anchored to for tooltips that don't override\n * `side` locally. Library fallback `'top'`.\n */\n side: FloatingSide;\n /**\n * Alignment along the chosen `side` for tooltips that don't override\n * `align` locally. Library fallback `'center'`.\n */\n align: FloatingAlign;\n /**\n * Gap (px) between trigger and content along the main axis for tooltips\n * that don't override `sideOffset` locally.\n * Library fallback `8`.\n */\n sideOffset: number;\n /**\n * Padding (px) applied uniformly to the `flip`, `shift`, and `size`\n * middlewares for tooltips that don't override `collisionPadding`\n * locally. Library fallback `8`.\n */\n collisionPadding: number;\n /**\n * Whether tooltips show only when the trigger's own text is truncated\n * (`scrollWidth > clientWidth`), for tooltips that don't override\n * `showOnOverflow` locally. Library fallback `false`.\n */\n showOnOverflow: boolean;\n /**\n * Whether the pointer may move into the content without dismissing the\n * tooltip, for tooltips that don't override `hoverableContent` locally.\n * Library fallback `false`.\n */\n hoverableContent: boolean;\n}\n\n/**\n * Library fallback for tooltip defaults, read at the root injector when no\n * consumer has called `provideForTooltipDefaults`. Exported for the shared\n * defaults contract spec; not re-exported from the primitive's public entry.\n */\nexport const FOR_TOOLTIP_FALLBACK_DEFAULTS: ForTooltipDefaults = {\n openDelay: 700,\n closeDelay: 300,\n skipDelayDuration: 300,\n side: 'top',\n align: 'center',\n sideOffset: 8,\n collisionPadding: 8,\n showOnOverflow: false,\n hoverableContent: false,\n};\n\nconst { token, provideDefaults } = createDefaults<ForTooltipDefaults>(\n 'FOR_TOOLTIP_DEFAULTS',\n FOR_TOOLTIP_FALLBACK_DEFAULTS,\n);\n\n/** Token holding the resolved tooltip defaults for the current scope. */\nexport const FOR_TOOLTIP_DEFAULTS = token;\n\n/**\n * Per-injector-scope state owned by forty-cdk tooltip. Thin subclass of the\n * shared `SkipDelayCoordinator` bound to this primitive's own DI token, so\n * each call to `provideForTooltipDefaults` re-provides it and the\n * corresponding subtree gets its own skip-delay window, independent from any\n * hover-card scope. Tooltips inject it on construction.\n */\n@Injectable({ providedIn: 'root' })\nexport class TooltipCoordinator extends SkipDelayCoordinator {\n constructor() {\n super(inject(FOR_TOOLTIP_DEFAULTS));\n }\n}\n\n/**\n * Configures forty-cdk tooltip defaults for this injector scope.\n * Partial overrides inherit unspecified keys from the parent scope (or\n * library defaults at the root). Each call establishes a new\n * coordinator scope: peer tooltips inside the scope share a skip-delay\n * window; tooltips in other scopes don't.\n *\n * @example\n * ```ts\n * // application-level\n * bootstrapApplication(App, {\n * providers: [provideForTooltipDefaults({ openDelay: 500 })],\n * });\n *\n * // component-level override (e.g. a toolbar with its own cadence)\n * @Component({\n * providers: [provideForTooltipDefaults({ skipDelayDuration: 100 })],\n * ...\n * })\n * class Toolbar {}\n * ```\n */\nexport function provideForTooltipDefaults(defaults: Partial<ForTooltipDefaults> = {}): Provider[] {\n return [...provideDefaults(defaults), TooltipCoordinator];\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n} from '@angular/core';\n\nimport {\n ANCHORED_POSITIONING_DEFAULTS,\n type FloatingAlign,\n type FloatingSide,\n forceCloseWhenDisabled,\n createHoverIntent,\n type HoverIntentScheduler,\n adoptHostId,\n IdGenerator,\n injectPrefersReducedMotion,\n attachPointerGrace,\n buildSubmenuGracePolygon,\n type Point,\n resolveGraceSide,\n} from 'forty-cdk/core';\nimport {\n FOR_TOOLTIP_CONTEXT,\n type ForTooltipContext,\n type TooltipScheduleReason,\n} from './tooltip-context';\nimport { FOR_TOOLTIP_DEFAULTS, TooltipCoordinator } from './tooltip-defaults';\n\n/**\n * Headless implementation of the [WAI-ARIA Tooltip pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/).\n *\n * Wrapper directive that owns open / closed state, hover / focus delays, and\n * placement. Provides the shared context to `ForTooltipTrigger`,\n * `ForTooltipContent`, and the optional `ForTooltipArrow`.\n *\n * Tooltip content is portaled to `document.body` and positioned via\n * `@floating-ui/dom`. Per APG, content must NOT be interactive — for\n * interactive popups use a Popover primitive (not yet shipped).\n */\n@Directive({\n selector: '[forTooltip]',\n exportAs: 'forTooltip',\n host: {\n '[attr.data-state]': 'open() ? \"open\" : \"closed\"',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.data-reduced-motion]': 'reducedMotion() ? \"\" : null',\n },\n providers: [{ provide: FOR_TOOLTIP_CONTEXT, useExisting: ForTooltip }],\n})\nexport class ForTooltip implements ForTooltipContext {\n readonly #idGen = inject(IdGenerator);\n readonly #defaults = inject(FOR_TOOLTIP_DEFAULTS);\n\n /**\n * Two-way bindable. Whether the tooltip is currently shown. The `model()`\n * change emitter (`(openChange)`) fires only on internal transitions\n * (hover/focus delays, Escape, and the force-close that runs when `disabled`\n * flips to true), never on consumer writes through `[(open)]` — observe\n * state changes without binding back.\n */\n readonly open = model<boolean>(false);\n\n /**\n * Per-tooltip override for the side the tooltip is anchored to. Pair with\n * `align` for the full positioning API. When `undefined` (default), falls\n * back to `ForTooltipDefaults.side` from the surrounding\n * `provideForTooltipDefaults` scope (`'top'` unless configured).\n *\n * The input is aliased to `side`; consumers bind `[side]=\"...\"` and read\n * the effective value via the public `side` computed below.\n */\n readonly _sideInput = input<FloatingSide | undefined>(undefined, { alias: 'side' });\n\n /** Effective anchor side: the `side` input when set, else the scope default. */\n readonly side = computed<FloatingSide>(() => this._sideInput() ?? this.#defaults.side);\n\n /**\n * Per-tooltip override for the alignment along the chosen `side`. When\n * `undefined` (default), falls back to `ForTooltipDefaults.align` from the\n * surrounding `provideForTooltipDefaults` scope (`'center'` unless\n * configured).\n *\n * The input is aliased to `align`; consumers bind `[align]=\"...\"` and read\n * the effective value via the public `align` computed below.\n */\n readonly _alignInput = input<FloatingAlign | undefined>(undefined, { alias: 'align' });\n\n /** Effective alignment: the `align` input when set, else the scope default. */\n readonly align = computed<FloatingAlign>(() => this._alignInput() ?? this.#defaults.align);\n\n /**\n * Per-tooltip override for the gap (px) between trigger and content along\n * the main axis. When `undefined` (default),\n * falls back to `ForTooltipDefaults.sideOffset` from the surrounding\n * `provideForTooltipDefaults` scope (`8` unless configured).\n *\n * The input is aliased to `sideOffset`; consumers bind `[sideOffset]=\"...\"`\n * and read the effective value via the public `sideOffset` computed below.\n */\n readonly _sideOffsetInput = input(undefined, {\n alias: 'sideOffset',\n transform: (v: unknown): number | undefined => (v == null ? undefined : numberAttribute(v)),\n });\n\n /** Effective main-axis gap (px): the `sideOffset` input when set, else the scope default. */\n readonly sideOffset = computed<number>(\n () => this._sideOffsetInput() ?? this.#defaults.sideOffset,\n );\n\n /** Gap (px) along the cross axis (parallel to `side`). Default `0`. */\n readonly alignOffset = input(ANCHORED_POSITIONING_DEFAULTS.alignOffset, {\n transform: numberAttribute,\n });\n\n /**\n * When `true` (default), `flip` and `shift` keep the tooltip inside the\n * viewport. Disable for strict positioning where overflow is acceptable.\n */\n readonly avoidCollisions = input(ANCHORED_POSITIONING_DEFAULTS.avoidCollisions, {\n transform: booleanAttribute,\n });\n\n /**\n * Per-tooltip override for the padding (px) applied uniformly to the\n * `flip`, `shift`, and `size` middlewares. When `undefined` (default),\n * falls back to `ForTooltipDefaults.collisionPadding` from the surrounding\n * `provideForTooltipDefaults` scope (`8` unless configured).\n *\n * The input is aliased to `collisionPadding`; consumers bind\n * `[collisionPadding]=\"...\"` and read the effective value via the public\n * `collisionPadding` computed below.\n */\n readonly _collisionPaddingInput = input(undefined, {\n alias: 'collisionPadding',\n transform: (v: unknown): number | undefined => (v == null ? undefined : numberAttribute(v)),\n });\n\n /** Effective collision padding (px): the `collisionPadding` input when set, else the scope default. */\n readonly collisionPadding = computed<number>(\n () => this._collisionPaddingInput() ?? this.#defaults.collisionPadding,\n );\n\n /** Padding (px) for the `arrow` middleware. Default `0`. */\n readonly arrowPadding = input(ANCHORED_POSITIONING_DEFAULTS.arrowPadding, {\n transform: numberAttribute,\n });\n\n /**\n * Stickiness behaviour for `shift`. `'partial'` (default) lets the\n * tooltip shift to stay visible. `'always'` keeps the requested\n * placement even off-screen.\n */\n readonly sticky = input<'partial' | 'always' | false>(ANCHORED_POSITIONING_DEFAULTS.sticky);\n\n /**\n * When `true`, sets `data-detached=\"\"` while the trigger has scrolled\n * off all clipping ancestors.\n */\n readonly hideWhenDetached = input(ANCHORED_POSITIONING_DEFAULTS.hideWhenDetached, {\n transform: booleanAttribute,\n });\n\n /**\n * When `true` (default), the content is clipped until floating-ui resolves\n * its first position, preventing a flash at the viewport corner. Set to\n * `false` so a dramatic `animate.enter` plays from its first frame (the\n * surface may flash briefly at the unresolved position while positioning\n * computes).\n */\n readonly clipUntilPositioned = input(ANCHORED_POSITIONING_DEFAULTS.clipUntilPositioned, {\n transform: booleanAttribute,\n });\n\n /**\n * Per-tooltip override for the open delay (ms). When `undefined`\n * (default), falls back to `ForTooltipDefaults.openDelay` from the\n * surrounding `provideForTooltipDefaults` scope (700ms unless configured).\n */\n readonly openDelay = input<number | undefined>(undefined);\n\n /**\n * Per-tooltip override for the close delay (ms) after hover or focus\n * leaves. `Escape` ignores this. When `undefined` (default), falls back to\n * `ForTooltipDefaults.closeDelay` from the surrounding\n * `provideForTooltipDefaults` scope (300ms unless configured).\n */\n readonly closeDelay = input<number | undefined>(undefined);\n\n /** When true, all hover / focus interaction is ignored and any open tooltip is forced closed. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Per-tooltip override for whether the tooltip shows only when the\n * trigger's own text is truncated (`scrollWidth > clientWidth`) — the\n * common pattern for ellipsized labels where the tooltip adds nothing once\n * the full text is visible. When `undefined` (default), falls back to\n * `ForTooltipDefaults.showOnOverflow` from the surrounding\n * `provideForTooltipDefaults` scope (`false` unless configured).\n *\n * The input is aliased to `showOnOverflow`; consumers bind\n * `[showOnOverflow]=\"...\"` (or the bare attribute) and read the effective\n * value via the public `showOnOverflow` computed below.\n */\n readonly _showOnOverflowInput = input(undefined, {\n alias: 'showOnOverflow',\n transform: (v: unknown): boolean | undefined => (v == null ? undefined : booleanAttribute(v)),\n });\n\n /** Effective overflow gate: the `showOnOverflow` input when set, else the scope default. */\n readonly showOnOverflow = computed<boolean>(\n () => this._showOnOverflowInput() ?? this.#defaults.showOnOverflow,\n );\n\n /**\n * Per-tooltip override for whether the pointer may move into the content\n * without dismissing the tooltip. When `true`, the content drops its\n * default `pointer-events: none` while open and a pointer-grace \"safe\n * triangle\" bridges the gap between trigger and content so a slow diagonal\n * traversal doesn't close it. When `undefined` (default), falls back to\n * `ForTooltipDefaults.hoverableContent` from the surrounding\n * `provideForTooltipDefaults` scope (`false` unless configured).\n *\n * Per APG the content must stay non-interactive; this only allows the\n * pointer to rest over descriptive text (e.g. to select it).\n *\n * The input is aliased to `hoverableContent`; consumers bind\n * `[hoverableContent]=\"...\"` (or the bare attribute) and read the effective\n * value via the public `hoverableContent` computed below.\n */\n readonly _hoverableContentInput = input(undefined, {\n alias: 'hoverableContent',\n transform: (v: unknown): boolean | undefined => (v == null ? undefined : booleanAttribute(v)),\n });\n\n /** Effective hoverable-content flag: the `hoverableContent` input when set, else the scope default. */\n readonly hoverableContent = computed<boolean>(\n () => this._hoverableContentInput() ?? this.#defaults.hoverableContent,\n );\n\n /**\n * Whether the user has requested reduced motion via the OS\n * `prefers-reduced-motion: reduce` media query. Reflected as the boolean\n * `data-reduced-motion` attribute on the root and content so consumers can\n * disable their own `animate.enter` / `animate.leave` and CSS transitions\n * without re-deriving the media query. Tooltip's JS-coordinated timing (the\n * open / close hover-intent delays) is intent debouncing, not motion, so it\n * is deliberately unchanged under reduced motion.\n */\n readonly reducedMotion = injectPrefersReducedMotion();\n\n readonly #generatedTriggerId = this.#idGen.next('for-tooltip-trigger');\n\n /**\n * Id of the trigger element. A consumer-set `id` on the trigger host is\n * adopted at registration and preserved; the generated\n * `for-tooltip-trigger-*` id is only assigned when the host has none.\n */\n readonly triggerId = signal(this.#generatedTriggerId);\n\n /** Generated id of the content element, wired to the trigger's `aria-describedby` while open. */\n readonly contentId = signal(this.#idGen.next('for-tooltip-content'));\n\n readonly #triggerEl = signal<HTMLElement | null>(null);\n readonly trigger = this.#triggerEl.asReadonly();\n\n readonly #contentEl = signal<HTMLElement | null>(null);\n\n readonly #arrowEl = signal<HTMLElement | null>(null);\n readonly arrow = this.#arrowEl.asReadonly();\n\n readonly #coordinator = inject(TooltipCoordinator);\n readonly #hoverIntent: HoverIntentScheduler;\n\n #triggerHovered = false;\n #triggerFocused = false;\n #contentHovered = false;\n #detachGrace: (() => void) | null = null;\n\n constructor() {\n forceCloseWhenDisabled({\n open: this.open,\n disabled: this.disabled,\n onForceClose: () => this.cancelPending(),\n });\n\n this.#hoverIntent = createHoverIntent({\n open: this.open,\n isDisabled: () => this.disabled(),\n openDelay: () => this.openDelay() ?? this.#coordinator.openDelay,\n closeDelay: () => this.closeDelay() ?? this.#coordinator.closeDelay,\n coordinator: this.#coordinator,\n });\n\n inject(DestroyRef).onDestroy(() => this.cancelPending());\n }\n\n /**\n * Registers the trigger host element. Adopts a pre-existing consumer-set\n * `id` as the trigger id so external references (anchors, `aria-labelledby`,\n * label `for`) keep resolving; falls back to the generated id otherwise.\n */\n registerTrigger(el: HTMLElement): void {\n adoptHostId(el, this.triggerId);\n this.#triggerEl.set(el);\n }\n\n unregisterTrigger(el: HTMLElement): void {\n if (this.#triggerEl() === el) {\n this.#triggerEl.set(null);\n }\n }\n\n /** Registers the content host element so the hoverable-content grace polygon can measure it. */\n registerContent(el: HTMLElement): void {\n this.#contentEl.set(el);\n }\n\n unregisterContent(el: HTMLElement): void {\n if (this.#contentEl() === el) {\n this.#contentEl.set(null);\n }\n }\n\n /** Adopts a consumer-set static `id` on the content host into `contentId`. */\n adoptContentId(el: HTMLElement): void {\n adoptHostId(el, this.contentId);\n }\n\n registerArrow(el: HTMLElement): void {\n this.#arrowEl.set(el);\n }\n\n unregisterArrow(el: HTMLElement): void {\n if (this.#arrowEl() === el) {\n this.#arrowEl.set(null);\n }\n }\n\n pointerEnterTrigger(): void {\n this.#triggerHovered = true;\n this.#disarmContentGrace();\n if (this.#suppressedByOverflow()) {\n return;\n }\n this.#hoverIntent.scheduleOpen();\n }\n\n pointerLeaveTrigger(cursor: Point): void {\n this.#triggerHovered = false;\n if (this.#triggerFocused) {\n return;\n }\n if (this.hoverableContent() && this.open() && this.#contentEl()) {\n this.#armContentGrace(cursor);\n return;\n }\n this.#scheduleCloseIfInactive();\n }\n\n focusTrigger(): void {\n this.#triggerFocused = true;\n if (this.#suppressedByOverflow()) {\n return;\n }\n this.#hoverIntent.scheduleOpen();\n }\n\n blurTrigger(): void {\n this.#triggerFocused = false;\n this.#scheduleCloseIfInactive();\n }\n\n pointerEnterContent(): void {\n if (!this.hoverableContent()) {\n return;\n }\n this.#contentHovered = true;\n this.#disarmContentGrace();\n this.#hoverIntent.cancelPending();\n }\n\n pointerLeaveContent(): void {\n if (!this.hoverableContent()) {\n return;\n }\n this.#contentHovered = false;\n this.#scheduleCloseIfInactive();\n }\n\n scheduleOpen(_reason: TooltipScheduleReason): void {\n this.#hoverIntent.scheduleOpen();\n }\n\n scheduleClose(reason: TooltipScheduleReason): void {\n this.#disarmContentGrace();\n this.#hoverIntent.scheduleClose(reason === 'escape');\n }\n\n cancelPending(): void {\n this.#disarmContentGrace();\n this.#hoverIntent.cancelPending();\n }\n\n /**\n * Imperatively opens the tooltip — for programmatic control beyond hover and\n * focus (e.g. a design-system wrapper driving the tooltip from a\n * text-truncation observer). Schedules the show after the resolved\n * `openDelay` (instant when the delay is `0` or the scope's skip-delay window\n * is active) and applies the same gates as a hover / focus open: a no-op\n * while `disabled`, and a no-op under `showOnOverflow` when the trigger's own\n * text is not truncated. For an instant, unconditional open that bypasses the\n * delay and both gates, write the `[(open)]` model directly (`open.set(true)`).\n */\n show(): void {\n if (this.#suppressedByOverflow()) {\n return;\n }\n this.#hoverIntent.scheduleOpen();\n }\n\n /**\n * Imperatively closes the tooltip, mirroring a hover-leave / blur close:\n * schedules the hide after the resolved `closeDelay` (instant when the delay\n * is `0`) and disarms the hoverable-content grace bridge. For an instant\n * close that ignores `closeDelay`, write the `[(open)]` model directly\n * (`open.set(false)`).\n */\n hide(): void {\n this.scheduleClose('hover');\n }\n\n /** Close only when no keep-alive source (trigger hover/focus, content hover) is active. */\n #scheduleCloseIfInactive(): void {\n if (this.#triggerHovered || this.#triggerFocused || this.#contentHovered) {\n return;\n }\n this.#hoverIntent.scheduleClose(false);\n }\n\n /** True when `showOnOverflow` is on and the trigger's text is NOT truncated. */\n #suppressedByOverflow(): boolean {\n if (!this.showOnOverflow()) {\n return false;\n }\n const el = this.#triggerEl();\n return el !== null && el.scrollWidth <= el.clientWidth;\n }\n\n /**\n * Arms a pointer-grace \"safe triangle\" from `cursor` toward the content so\n * the pointer can travel across the trigger / content gap without closing.\n * On exit (or when content hover takes over) the grace disarms and a close\n * is scheduled if nothing else keeps the tooltip alive.\n */\n #armContentGrace(cursor: Point): void {\n const content = this.#contentEl();\n if (!content) {\n this.#scheduleCloseIfInactive();\n return;\n }\n const rect = content.getBoundingClientRect();\n const trigger = this.#triggerEl();\n const side = trigger ? resolveGraceSide(trigger.getBoundingClientRect(), rect) : this.side();\n const polygon = buildSubmenuGracePolygon(cursor, rect, side);\n this.#disarmContentGrace();\n this.#detachGrace = attachPointerGrace(content.ownerDocument, polygon, () => {\n this.#disarmContentGrace();\n this.#scheduleCloseIfInactive();\n });\n }\n\n #disarmContentGrace(): void {\n if (this.#detachGrace) {\n this.#detachGrace();\n this.#detachGrace = null;\n }\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\n\nimport { type ForTooltipContext, injectTooltipTriggerContext } from './tooltip-context';\n\n/**\n * Element that activates the tooltip on mouse hover or keyboard focus. Apply on\n * a focusable element — preferably a `<button>` so keyboard users can reach it.\n * Receives `aria-describedby` only while the tooltip is open, per APG.\n *\n * A touch tap does NOT open the tooltip: touch pointers are filtered out of\n * both the hover-open path and the focus-open path, because a tap is not a\n * hover and the APG flags hover-tooltips as problematic on touch (no hover, no\n * separate focus affordance, no obvious dismiss). Keyboard focus stays the\n * touch-accessible fallback for descriptive content.\n *\n * The root is normally resolved via DI from the enclosing `[forTooltip]`.\n * When the trigger is declared inside an `ng-template` stamped into the root\n * (e.g. via `ngTemplateOutlet`), DI resolves at the template's declaration\n * site and misses the root — pass it explicitly through the selector input,\n * `routerLink`-style: `[forTooltipTrigger]=\"root\"` with `#root=\"forTooltip\"`.\n */\n@Directive({\n selector: '[forTooltipTrigger]',\n exportAs: 'forTooltipTrigger',\n host: {\n '[id]': 'ctx().triggerId()',\n '[attr.aria-describedby]': 'ctx().open() ? ctx().contentId() : null',\n '[attr.data-state]': 'ctx().open() ? \"open\" : \"closed\"',\n '(pointerenter)': 'onPointerEnter($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointerleave)': 'onPointerLeave($event)',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(keydown.escape)': 'onEscape($event)',\n },\n})\nexport class ForTooltipTrigger {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Optional explicit reference to the `[forTooltip]` root, named after the\n * selector `routerLink`-style. The bare valueless attribute keeps resolving\n * the enclosing root via DI; pass the root explicitly\n * (`[forTooltipTrigger]=\"root\"`, with `#root=\"forTooltip\"`) when the trigger\n * is declared in an `ng-template` stamped inside the root — DI resolves at\n * the template's declaration site, so the enclosing root is invisible there.\n * The empty string (what the valueless attribute yields) is treated as unset.\n */\n readonly forTooltipTrigger = input<ForTooltipContext | ''>('');\n\n protected readonly ctx = injectTooltipTriggerContext(this.forTooltipTrigger);\n\n #lastPointerType: string | null = null;\n\n constructor() {\n const el = this.#host.nativeElement;\n // Registration is an imperative call into the resolved root's registry,\n // not state derivation — the effect only re-registers the element when the\n // resolved root changes (explicit reference swapped at runtime).\n effect((onCleanup) => {\n const ctx = this.ctx();\n ctx.registerTrigger(el);\n onCleanup(() => ctx.unregisterTrigger(el));\n });\n }\n\n protected onPointerEnter(event: PointerEvent): void {\n if (event.pointerType === 'touch') {\n return;\n }\n this.ctx().pointerEnterTrigger();\n }\n\n protected onPointerDown(event: PointerEvent): void {\n this.#lastPointerType = event.pointerType;\n }\n\n protected onPointerLeave(event: PointerEvent): void {\n this.ctx().pointerLeaveTrigger({ x: event.clientX, y: event.clientY });\n }\n\n protected onFocus(): void {\n const touchInduced = this.#lastPointerType === 'touch';\n this.#lastPointerType = null;\n if (touchInduced) {\n return;\n }\n this.ctx().focusTrigger();\n }\n\n protected onBlur(): void {\n this.#lastPointerType = null;\n this.ctx().blurTrigger();\n }\n\n protected onEscape(event: Event): void {\n if (this.ctx().open()) {\n event.preventDefault();\n event.stopPropagation();\n this.ctx().scheduleClose('escape');\n }\n }\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\n\nimport { toFloatingPositioner, injectOverlayShell } from 'forty-cdk/core';\nimport { injectTooltipContext } from './tooltip-context';\n\n/**\n * The tooltip bubble. Carries `role=\"tooltip\"`, is portaled to\n * `document.body`, and is positioned by `@floating-ui/dom` (via the shared\n * `injectOverlayShell` helper) while mounted.\n *\n * Default `pointer-events: none` is applied via host styles so the bubble\n * layers above content without intercepting hover. When the root opts in with\n * `hoverableContent`, `pointer-events` is dropped while open so the pointer\n * can rest over the bubble without dismissing it. Override with your own CSS\n * if needed — but per APG, do not put interactive elements inside.\n *\n * The directive does not manage DOM presence — wrap with\n * `@if (tip.open())` (using a template ref on `[forTooltip]`) so the\n * bubble mounts and unmounts with the open state and `animate.enter` /\n * `animate.leave` work natively.\n *\n * Tooltips have no dismissable layer (Escape is a tooltip controller\n * concern, not an outside-pointer/focus one), no initial focus move, and\n * no return focus on destroy — only the floating positioner is wired.\n */\n@Directive({\n selector: '[forTooltipContent]',\n exportAs: 'forTooltipContent',\n host: {\n role: 'tooltip',\n '[id]': 'ctx.contentId()',\n '[attr.data-state]': 'ctx.open() ? \"open\" : \"closed\"',\n '[attr.data-reduced-motion]': 'ctx.reducedMotion() ? \"\" : null',\n '[style.pointer-events]': 'ctx.hoverableContent() ? null : \"none\"',\n '(pointerenter)': 'ctx.pointerEnterContent()',\n '(pointerleave)': 'ctx.pointerLeaveContent()',\n },\n})\nexport class ForTooltipContent {\n protected readonly ctx = injectTooltipContext('ForTooltipContent');\n\n constructor() {\n const el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n this.ctx.adoptContentId(el);\n this.ctx.registerContent(el);\n inject(DestroyRef).onDestroy(() => this.ctx.unregisterContent(el));\n injectOverlayShell({\n positioner: toFloatingPositioner(this.ctx, this.ctx.trigger),\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\nimport { registerHandle } from 'forty-cdk/core';\nimport { injectTooltipContext } from './tooltip-context';\n\n/**\n * Optional visual arrow inside `ForTooltipContent`. Registers itself with\n * the tooltip context so floating-ui's `arrow` middleware can position it\n * along the bubble edge that points at the trigger. Style size and color\n * yourself — the directive only sets `position`, `left`/`top`, and the\n * opposite-side offset.\n */\n@Directive({\n selector: '[forTooltipArrow]',\n exportAs: 'forTooltipArrow',\n host: {\n 'aria-hidden': 'true',\n 'data-tooltip-arrow': '',\n },\n})\nexport class ForTooltipArrow {\n readonly #ctx = injectTooltipContext('ForTooltipArrow');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n registerHandle(\n this.#host.nativeElement,\n (el) => this.#ctx.registerArrow(el),\n (el) => this.#ctx.unregisterArrow(el),\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}