@koobiq/components 21.0.1 → 21.1.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 (180) hide show
  1. package/badge/_badge-theme.scss +31 -0
  2. package/breadcrumbs/breadcrumbs.scss +5 -1
  3. package/checkbox/_checkbox-theme.scss +0 -17
  4. package/checkbox/checkbox-tokens.scss +0 -4
  5. package/code-block/_code-block-theme.scss +7 -6
  6. package/code-block/code-block-tokens.scss +8 -4
  7. package/code-block/code-block.scss +54 -32
  8. package/content-panel/content-panel-header.scss +2 -3
  9. package/content-panel/content-panel.scss +3 -0
  10. package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +0 -2
  11. package/fesm2022/koobiq-components-accordion.mjs +4 -4
  12. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  13. package/fesm2022/koobiq-components-actions-panel.mjs +10 -2
  14. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  15. package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
  16. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  17. package/fesm2022/koobiq-components-badge.mjs +2 -2
  18. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -2
  20. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-button-toggle.mjs +1 -1
  22. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-checkbox.mjs +18 -8
  24. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-clamped-text.mjs +78 -10
  26. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-code-block.mjs +63 -379
  28. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-content-panel.mjs +4 -4
  30. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-core.mjs +300 -37
  32. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-datepicker.mjs +151 -60
  34. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-divider.mjs +3 -3
  36. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  37. package/fesm2022/koobiq-components-dropdown.mjs +3 -3
  38. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  39. package/fesm2022/koobiq-components-file-upload.mjs +17 -8
  40. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-filter-bar.mjs +115 -36
  42. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-flag.mjs +3 -3
  44. package/fesm2022/koobiq-components-flag.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-form-field.mjs +90 -27
  46. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-icon.mjs +2 -2
  48. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
  50. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-input.mjs +76 -17
  52. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-list.mjs +1 -1
  54. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-modal.mjs +3 -3
  56. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-navbar.mjs +86 -25
  58. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  59. package/fesm2022/koobiq-components-notification-center.mjs +4 -4
  60. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  61. package/fesm2022/koobiq-components-overflow-items.mjs +116 -38
  62. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  63. package/fesm2022/koobiq-components-popover.mjs +86 -7
  64. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-radio.mjs +41 -19
  66. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-search-expandable.mjs +29 -17
  68. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-select.mjs +49 -12
  70. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-sidepanel.mjs +198 -186
  72. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-splitter.mjs +49 -25
  74. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-tabs.mjs +30 -11
  76. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-tags.mjs +1 -1
  78. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-textarea.mjs +28 -11
  80. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-time-range.mjs +2 -2
  82. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-timepicker.mjs +71 -16
  84. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  86. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-toast.mjs +2 -2
  88. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-toggle.mjs +25 -9
  90. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-tooltip.mjs +90 -17
  92. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-top-bar.mjs +27 -7
  94. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-tree-select.mjs +4 -4
  96. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-tree.mjs +71 -27
  98. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  99. package/file-upload/_file-upload-theme.scss +0 -12
  100. package/file-upload/file-upload-tokens.scss +0 -1
  101. package/file-upload/file-upload.scss +0 -1
  102. package/filter-bar/_filter-bar-theme.scss +7 -8
  103. package/filter-bar/filter-bar.scss +0 -1
  104. package/filter-bar/pipes/base-pipe.scss +36 -2
  105. package/filter-bar/pipes/pipe-multi-tree-select.scss +27 -0
  106. package/form-field/_fieldset-theme.scss +2 -7
  107. package/form-field/_form-field-theme.scss +9 -22
  108. package/form-field/_hint-theme.scss +20 -0
  109. package/form-field/fieldset-tokens.scss +0 -1
  110. package/form-field/fieldset.scss +0 -3
  111. package/form-field/form-field-tokens.scss +1 -1
  112. package/form-field/form-field.scss +9 -0
  113. package/form-field/hint-tokens.scss +3 -0
  114. package/modal/modal.scss +2 -0
  115. package/navbar/_navbar-item_vertical.scss +48 -2
  116. package/navbar/_navbar-theme.scss +11 -3
  117. package/navbar/navbar-item.scss +17 -0
  118. package/navbar/navbar-tokens.scss +3 -0
  119. package/package.json +4 -4
  120. package/popover/popover.scss +1 -1
  121. package/radio/_radio-theme.scss +0 -30
  122. package/radio/radio-tokens.scss +0 -2
  123. package/schematics/migrations/deprecated-icons/README.md +21 -5
  124. package/schematics/migrations/deprecated-icons/index.cjs +8 -22
  125. package/schematics/migrations/deprecated-icons/schema.json +1 -1
  126. package/schematics/migrations/icons-replacement/README.md +16 -2
  127. package/schematics/migrations/icons-replacement/index.cjs +18 -16
  128. package/schematics/migrations/icons-replacement/schema.json +12 -3
  129. package/schematics/migrations/new-icons-pack/README.md +37 -25
  130. package/schematics/migrations/new-icons-pack/index.cjs +22 -32
  131. package/schematics/migrations/new-icons-pack/replacement.json +2 -14
  132. package/schematics/migrations/new-icons-pack/schema.json +3 -3
  133. package/schematics/ng-add/index.cjs +4 -4
  134. package/schematics/utils/custom-data.cjs +64 -0
  135. package/schematics/utils/icon-migration.cjs +9 -3
  136. package/schematics/utils/messages.cjs +4 -0
  137. package/schematics/utils/package-config.cjs +19 -0
  138. package/select/select.scss +7 -0
  139. package/tabs/_tabs-common.scss +23 -0
  140. package/textarea/textarea-tokens.scss +4 -1
  141. package/toast/toast.component.scss +1 -0
  142. package/toggle/_toggle-theme.scss +0 -17
  143. package/tooltip/tooltip.scss +1 -1
  144. package/top-bar/top-bar-tokens.scss +1 -0
  145. package/top-bar/top-bar.scss +10 -0
  146. package/types/koobiq-components-accordion.d.ts +25 -0
  147. package/types/koobiq-components-button-toggle.d.ts +6 -0
  148. package/types/koobiq-components-checkbox.d.ts +30 -0
  149. package/types/koobiq-components-clamped-text.d.ts +16 -3
  150. package/types/koobiq-components-code-block.d.ts +17 -3
  151. package/types/koobiq-components-core.d.ts +226 -13
  152. package/types/koobiq-components-datepicker.d.ts +28 -1
  153. package/types/koobiq-components-divider.d.ts +28 -10
  154. package/types/koobiq-components-dropdown.d.ts +19 -0
  155. package/types/koobiq-components-filter-bar.d.ts +77 -4
  156. package/types/koobiq-components-flag.d.ts +18 -0
  157. package/types/koobiq-components-form-field.d.ts +87 -6
  158. package/types/koobiq-components-icon.d.ts +15 -0
  159. package/types/koobiq-components-inline-edit.d.ts +8 -1
  160. package/types/koobiq-components-input.d.ts +22 -3
  161. package/types/koobiq-components-list.d.ts +6 -0
  162. package/types/koobiq-components-modal.d.ts +7 -0
  163. package/types/koobiq-components-navbar.d.ts +71 -7
  164. package/types/koobiq-components-notification-center.d.ts +13 -0
  165. package/types/koobiq-components-overflow-items.d.ts +26 -2
  166. package/types/koobiq-components-popover.d.ts +38 -3
  167. package/types/koobiq-components-radio.d.ts +30 -0
  168. package/types/koobiq-components-search-expandable.d.ts +10 -0
  169. package/types/koobiq-components-select.d.ts +36 -4
  170. package/types/koobiq-components-sidepanel.d.ts +52 -1
  171. package/types/koobiq-components-splitter.d.ts +13 -4
  172. package/types/koobiq-components-tabs.d.ts +4 -0
  173. package/types/koobiq-components-tags.d.ts +6 -0
  174. package/types/koobiq-components-textarea.d.ts +9 -2
  175. package/types/koobiq-components-timepicker.d.ts +15 -0
  176. package/types/koobiq-components-toggle.d.ts +30 -0
  177. package/types/koobiq-components-tooltip.d.ts +55 -10
  178. package/types/koobiq-components-top-bar.d.ts +11 -3
  179. package/types/koobiq-components-tree-select.d.ts +12 -0
  180. package/types/koobiq-components-tree.d.ts +37 -2
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-tooltip.mjs","sources":["../../../packages/components/tooltip/tooltip-registry.ts","../../../packages/components/tooltip/tooltip.component.ts","../../../packages/components/tooltip/tooltip.component.html","../../../packages/components/tooltip/tooltip.module.ts","../../../packages/components/tooltip/koobiq-components-tooltip.ts"],"sourcesContent":["import { Injectable, InjectionToken } from '@angular/core';\n\n/**\n * Default value of the `kbqTooltipSingleInstance` input. Provide `false` at the application level to\n * globally disable the \"only one tooltip is visible at a time\" behavior.\n */\nexport const KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT = new InjectionToken<boolean>('KbqTooltipSingleInstanceDefault', {\n providedIn: 'root',\n factory: () => true\n});\n\n/**\n * Contract of a tooltip taking part in the \"only one tooltip is visible at a time\" group.\n *\n * @docs-private\n */\nexport interface KbqExclusiveTooltip {\n /** Hides the tooltip because another tooltip — or a pop-up on the same element — has taken its place. */\n hideAsInactive(): void;\n}\n\n/**\n * Keeps track of the single tooltip that is currently visible, so that showing a new one hides the\n * previous. Holds the *trigger*, not the overlay component — the latter is re-created on every show.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqTooltipRegistry {\n /** Tooltip that currently owns the screen, or `null` when nothing is visible. */\n private visibleTooltip: KbqExclusiveTooltip | null = null;\n\n /** Marks the tooltip as the only visible one, hiding the previously visible tooltip. */\n setVisible(tooltip: KbqExclusiveTooltip): void {\n if (this.visibleTooltip && this.visibleTooltip !== tooltip) {\n this.visibleTooltip.hideAsInactive();\n }\n\n this.visibleTooltip = tooltip;\n }\n\n /**\n * Clears the registry, but only when the given tooltip is still the registered one. The guard\n * matters because hiding the previous tooltip is asynchronous: its `visibleChange(false)` arrives\n * after the new tooltip has already been registered, and must not wipe that newer entry.\n */\n clearVisible(tooltip: KbqExclusiveTooltip): void {\n if (this.visibleTooltip === tooltip) {\n this.visibleTooltip = null;\n }\n }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Point } from '@angular/cdk/drag-drop';\nimport { Overlay, OverlayConfig, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n Injectable,\n InjectionToken,\n InputSignal,\n OnChanges,\n OnDestroy,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewEncapsulation,\n WritableSignal,\n booleanAttribute,\n effect,\n inject,\n input,\n untracked,\n viewChild\n} from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ESCAPE,\n KBQ_PARENT_POPUP,\n KBQ_SIBLING_POPUP,\n KbqCaretRect,\n KbqComponentColors,\n KbqEnumValues,\n KbqParentPopup,\n KbqPopUp,\n KbqPopUpPlacementValues,\n KbqPopUpTrigger,\n KbqSiblingPopup,\n KbqTextAnchor,\n POSITION_TO_CSS_MAP,\n PopUpPlacements,\n PopUpTriggers,\n applyPopupMargins,\n kbqCreateCaretOrigin,\n kbqGetSelectionRect,\n kbqListenForCaretMoves,\n kbqOptionalNumberAttribute\n} from '@koobiq/components/core';\nimport { EMPTY, merge } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT, KbqExclusiveTooltip, KbqTooltipRegistry } from './tooltip-registry';\n\n/**\n * What the tooltip is vertically anchored to when it is positioned relative to the caret:\n *\n * - `'line'` — the line of text the caret is on.\n * - `'field'` — the whole field, so the tooltip never covers it; horizontally it still follows the caret.\n * - `'auto'` — `'field'` for a single-line `<input>`, `'line'` for everything else.\n */\nexport type KbqCaretVerticalAnchor = 'auto' | 'line' | 'field';\n\nexport enum TooltipModifier {\n Default = 'default',\n Warning = 'warning',\n Extended = 'extended'\n}\n\n/**\n * @deprecated Replaced by {@link KbqTooltipDelayTracker}, which owns the shared timestamp behind a service\n * instead of a mutable `useValue` object. The tooltip no longer reads this token; providing it has no effect. Will be\n * removed in 22.0.0.\n */\nexport const KBQ_TOOLTIP_OPEN_TIME = new InjectionToken<{ value: number }>('kbq-tooltip-open-time');\n\n/**\n * @deprecated Replaced by {@link KbqTooltipDelayTracker}. Providing it has no effect. Will be removed in 22.0.0.\n *\n * @docs-private\n */\nexport const KBQ_TOOLTIP_OPEN_TIME_PROVIDER = {\n provide: KBQ_TOOLTIP_OPEN_TIME,\n useValue: { value: 0 }\n};\n\n/** Default length of the window during which a following tooltip is shown without its enter delay. */\nexport const MIN_TIME_FOR_DELAY = 2000;\n\n/**\n * Length in milliseconds of the window during which a tooltip shown right after another one appears\n * instantly. Defaults to {@link MIN_TIME_FOR_DELAY}.\n */\nexport const KBQ_TOOLTIP_INSTANT_SHOW_WINDOW = new InjectionToken<number>('kbq-tooltip-instant-show-window', {\n providedIn: 'root',\n factory: () => MIN_TIME_FOR_DELAY\n});\n\n/**\n * Remembers when a tooltip was last shown, so that moving between neighbouring triggers does not replay the\n * enter delay for every one of them: the first tooltip waits `kbqEnterDelay`, the ones following it within\n * {@link KBQ_TOOLTIP_INSTANT_SHOW_WINDOW} appear instantly.\n *\n * Application-wide by design — the behavior is part of the component's documented delay rules.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqTooltipDelayTracker {\n private readonly instantShowWindow = inject(KBQ_TOOLTIP_INSTANT_SHOW_WINDOW);\n\n /** Timestamp of the last shown tooltip, or `null` while no tooltip has been shown recently. */\n private lastShownAt: number | null = null;\n\n /** Whether the tooltip that is about to be shown should skip its enter delay. */\n shouldSkipEnterDelay(): boolean {\n return this.lastShownAt !== null && Date.now() - this.lastShownAt < this.instantShowWindow;\n }\n\n /** Records that a tooltip has just been shown. */\n markShown(): void {\n this.lastShownAt = Date.now();\n }\n\n /** Forgets the last shown tooltip, so the next one appears with its full enter delay. */\n reset(): void {\n this.lastShownAt = null;\n }\n}\n\n/** Source of the unique ids that link a tooltip to the `aria-describedby` of its trigger. */\nlet nextTooltipUniqueId = 0;\n\n@Component({\n selector: 'kbq-tooltip-component',\n imports: [\n NgTemplateOutlet\n ],\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.scss', './tooltip-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqTooltipComponent extends KbqPopUp {\n private readonly delayTracker = inject(KbqTooltipDelayTracker);\n\n prefix = 'kbq-tooltip';\n\n /**\n * Id rendered on the tooltip element; the trigger points its `aria-describedby` at it.\n *\n * Public only because the trigger is a separate class and overwrites it with its own id — nothing outside\n * the pair should read or write it, or the accessibility link between them breaks.\n *\n * @docs-private\n */\n id: string = `kbq-tooltip-${nextTooltipUniqueId++}`;\n\n private readonly tooltipElement = viewChild<ElementRef<HTMLElement>>('tooltip');\n\n /** The tooltip panel, which the base pop-up measures and decorates instead of the host. */\n override get elementRef(): ElementRef<HTMLElement> {\n return this.tooltipElement()!;\n }\n\n show(delay: number) {\n if (!this.content) {\n return;\n }\n\n super.show(this.delayTracker.shouldSkipEnterDelay() ? 0 : delay);\n\n this.applyOffset();\n\n this.delayTracker.markShown();\n }\n\n /**\n * Applies `offset` as the gap between the tooltip and its trigger. Called both on show and whenever the\n * trigger pushes new data, so that changing `kbqTooltipOffset` on an open tooltip actually moves it.\n *\n * Public only because the trigger calls it from the outside; it is not part of the supported surface.\n *\n * @docs-private\n */\n applyOffset(): void {\n // An empty value removes a gap applied earlier, handing it back to the stylesheet.\n const margin = this.offset == null ? '' : `${this.offset}px`;\n\n applyPopupMargins(this.renderer, this.elementRef.nativeElement, this.prefix, margin);\n }\n\n updateClassMap(placement: string, customClass: string, { modifier }: { modifier: KbqEnumValues<TooltipModifier> }) {\n const classMap = {\n [`${this.prefix}_${modifier}`]: true\n };\n\n super.updateClassMap(placement, customClass, classMap);\n }\n}\n\n/**\n * Triggers that make a tooltip part of the \"only one tooltip is visible at a time\" group.\n *\n * Values that match none of them (`manual`, `none`, …) bind no listeners at all — that is how the\n * imperatively driven validation tooltips are configured, and they are expected to stay pinned while\n * the user keeps interacting elsewhere.\n */\nconst INTERACTIVE_TRIGGERS = [\n PopUpTriggers.Hover,\n PopUpTriggers.Focus,\n PopUpTriggers.Click,\n PopUpTriggers.Keydown\n];\n\n/**\n * DOM events that mean the user has left the trigger, releasing a tooltip muted by a pop-up on the same\n * element. Both are bound by `KbqPopUpTrigger.initListeners` whenever the matching show trigger is bound.\n */\nconst RELEASE_TRIGGERS = ['mouseleave', 'blur'];\n\n/**\n * Focus origins a focus-triggered tooltip opens for. Everything but `keyboard` is excluded on purpose: a\n * pointer user gets the tooltip from the hover trigger, and showing it again on the focus a click leaves\n * behind makes it linger after the pointer has moved on. `program` cannot be admitted either, because CDK\n * reports it whenever it fails to attribute a focus — including the focus that follows a click outside its\n * detection window — so admitting it would re-open exactly the case above. Focus the application moves on\n * purpose still opens the tooltip: the repo convention is `focusVia(element, 'keyboard')`, which reports\n * `keyboard`.\n */\nconst FOCUS_ORIGINS_THAT_SHOW: FocusOrigin[] = ['keyboard'];\n\n/** Base panel class of the tooltip overlay. */\nconst TOOLTIP_PANEL_CLASS = 'kbq-tooltip-panel';\n\n/** Default `kbqEnterDelay`, in milliseconds. */\nconst defaultEnterDelay = 400;\n\n/** Panel class that makes the tooltip pane transparent to pointer events. */\nconst IGNORE_POINTER_EVENTS_PANEL_CLASS = 'cdk-overlay-pane_ignore-pointer-events';\n\n/** Elements a caret can be located in, and therefore anchored to. */\nconst EDITABLE_SELECTOR = 'input, textarea, [contenteditable=\"\"], [contenteditable=\"true\"]';\n\nexport const KBQ_TOOLTIP_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>('kbq-tooltip-scroll-strategy', {\n providedIn: 'root',\n factory: () => kbqTooltipScrollStrategyFactory(inject(Overlay))\n});\n\n/** @docs-private */\nexport function kbqTooltipScrollStrategyFactory(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.close();\n}\n\n/**\n * Redundant to the root factory of the token; kept so an app can restore the default under its own override (#DS-2196).\n *\n * @docs-private\n */\nexport const KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: KBQ_TOOLTIP_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: kbqTooltipScrollStrategyFactory\n};\n\n/**\n * Trigger directive that shows a `KbqTooltipComponent` for its host element. Extends `KbqPopUpTrigger` with\n * tooltip-specific inputs (content, placement, color, arrow, enter/leave delays, modifier and header) and\n * behavior such as opening on keyboard focus only and positioning relative to the mouse cursor.\n */\n@Directive({\n selector: '[kbqTooltip]',\n host: {\n '[class.kbq-tooltip_open]': 'isOpen',\n\n '(keydown)': 'keydownHandler($event)',\n '(touchend)': 'touchendHandler()',\n '(mouseleave)': 'trackPointerLeave($event)'\n },\n exportAs: 'kbqTooltip'\n})\nexport class KbqTooltipTrigger\n extends KbqPopUpTrigger<KbqTooltipComponent>\n implements AfterViewInit, OnChanges, OnDestroy, KbqExclusiveTooltip\n{\n /** Registry holding the single tooltip that is currently visible. */\n private readonly tooltipRegistry = inject(KbqTooltipRegistry);\n\n private readonly injectedScrollStrategy: () => ScrollStrategy = inject(KBQ_TOOLTIP_SCROLL_STRATEGY);\n\n /**\n * Per-instance override for the scroll strategy, taking precedence over `KBQ_TOOLTIP_SCROLL_STRATEGY`\n * when set. An input rather than a DI override so it applies to this tooltip instance only, without\n * leaking into other `kbqTooltip`s nested inside the same host (DI overrides are visible to every\n * descendant in the element-injector tree, not just the element they're declared on).\n *\n * @docs-private\n */\n readonly scrollStrategyOverride = input<(() => ScrollStrategy) | undefined>(undefined, {\n alias: 'kbqTooltipScrollStrategy'\n });\n\n /** Id of the tooltip element this trigger points its `aria-describedby` at while the tooltip is open. */\n private readonly tooltipId = `kbq-tooltip-${nextTooltipUniqueId++}`;\n\n /** @docs-private */\n protected get scrollStrategy(): () => ScrollStrategy {\n return this.scrollStrategyOverride() ?? this.injectedScrollStrategy;\n }\n /** @docs-private */\n protected parentPopup = inject<KbqParentPopup>(KBQ_PARENT_POPUP, { optional: true });\n\n /**\n * Pop-ups anchored to the very same element — a popover, a dropdown, a select and so on. Resolved with\n * `self` so a pop-up further up the tree (which the tooltip merely lives inside) is not picked up; that\n * case is covered by `parentPopup`.\n */\n private readonly siblingPopups: readonly KbqSiblingPopup[] =\n inject(KBQ_SIBLING_POPUP, { self: true, optional: true }) || [];\n /** @docs-private */\n protected focusMonitor: FocusMonitor = inject(FocusMonitor);\n /** @docs-private */\n protected renderer: Renderer2 = inject(Renderer2);\n\n /**\n * Input for controlling the disabled state of a component.\n *\n * The input expects a component containing `disabledSignal` property, which is\n * a writable signal emitting boolean values.\n */\n readonly forDisabledComponent = input<Record<'disabledSignal', WritableSignal<boolean>>>();\n\n /**\n * Determines whether pointer events should be ignored on tooltips.\n *\n * When set to `true`, the tooltip pane does not receive pointer events, so clicks and hovers pass through\n * to whatever is underneath it. Defaults to `false`, which keeps the tooltip hoverable: a user who needs\n * more time to read it — or who reads at high magnification, where the pointer often ends up over the\n * tooltip itself — can move the pointer onto it without it disappearing (WCAG 1.4.13 \"Content on Hover\").\n *\n * Set it to `true` for tooltips that float over other click targets, such as the overflow hints of a\n * scrolling option list.\n */\n readonly ignoreTooltipPointerEvents = input<boolean>(false);\n\n /**\n * Whether the tooltip takes part in the \"only one tooltip is visible at a time\" group: showing it\n * hides the previously visible tooltip, and it is hidden when another tooltip is shown.\n *\n * Defaults to `true`; the default can be changed application-wide with the\n * `KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT` token.\n *\n * Tooltips without an interactive `kbqTrigger` (`manual`, `none`, …) never take part in the group,\n * regardless of this input — they are shown imperatively and are expected to stay pinned.\n */\n readonly singleInstance = input<boolean, unknown>(inject(KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT), {\n alias: 'kbqTooltipSingleInstance',\n transform: booleanAttribute\n });\n\n /**\n * Changes hiding behavior. By default, tooltip is hidden on mouseleave from trigger.\n * Setting hideWithTimeout to true will delay tooltip hiding and will not hide when the mouse moves from trigger\n * to tooltip.\n */\n hideWithTimeout: boolean = false;\n\n /** Input (`kbqVisible`) that programmatically shows or hides the tooltip; reflects the current `visible` state. */\n get tooltipVisible(): boolean {\n return this.visible;\n }\n\n set tooltipVisible(value: boolean) {\n super.updateVisible(value);\n }\n\n /** Input (`kbqPlacement`) that sets the tooltip placement relative to its trigger; reflects the current `placement`. */\n get tooltipPlacement(): KbqPopUpPlacementValues {\n return this.placement;\n }\n\n set tooltipPlacement(value: KbqPopUpPlacementValues) {\n super.updatePlacement(value);\n }\n\n /**\n * Positions the tooltip relative to the mouse cursor. Only available for top and bottom kbqPlacement.\n * Does not work with kbqPlacementPriority.\n */\n relativeToPointer: boolean = false;\n\n /**\n * Positions the tooltip relative to the text caret of the field it is attached to, following it while the\n * user types, moves the caret and scrolls the field. Anchors to the selection whenever there is one.\n *\n * Every placement is available, unlike with `kbqRelativeToPointer`: the caret is anchored as a rectangle,\n * so the usual fallback placements keep the tooltip on screen. Wins when both inputs are enabled.\n *\n * The field is the host element itself when it is editable, otherwise the first editable it wraps.\n */\n relativeToCaret: boolean = false;\n\n /** What the tooltip is vertically anchored to while `kbqRelativeToCaret` is enabled. */\n relativeToCaretVertical: KbqCaretVerticalAnchor = 'auto';\n\n /** Input (`kbqPlacementPriority`) that sets the ordered fallback placements; reflects the current `placementPriority`. */\n get tooltipPlacementPriority() {\n return this.placementPriority;\n }\n\n set tooltipPlacementPriority(value) {\n super.updatePlacementPriority(value);\n }\n\n /** Input (`kbqTooltip`) with the tooltip content — a string or a template. Updating it refreshes an open tooltip. */\n get content(): string | TemplateRef<unknown> {\n return this._content;\n }\n\n set content(content: string | TemplateRef<unknown>) {\n this._content = content;\n\n this.updateData();\n }\n\n /**\n * Input (`kbqTooltipDisabled`) controlling whether the tooltip is disabled; setting it to `true` hides it.\n * `undefined` leaves the decision to the trigger, like an unset input.\n *\n * Reads back the *effective* state, which for triggers that derive one of their own (see\n * `derivedDisabledWins`) is not necessarily the value that was written.\n */\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: BooleanInput) {\n this.explicitlyDisabled = value === undefined ? undefined : coerceBooleanProperty(value);\n\n this.applyDisabled();\n }\n\n /**\n * Whether the state this trigger derives means *there is nothing to show*, so an explicit\n * `kbqTooltipDisabled=\"false\"` cannot override it, as for a hint that repeats text the host never clipped.\n * Otherwise the explicit value wins in both directions, so `false` on a wrapped control that is not disabled\n * still asks for a tooltip.\n *\n * @docs-private\n */\n protected readonly derivedDisabledWins: boolean = false;\n\n // Kept apart so the consumer's binding and the state the trigger derives cannot overwrite each other,\n // whichever order they are written in; `foldDisabled()` combines them.\n private explicitlyDisabled: boolean | undefined;\n private derivedDisabled: boolean | undefined;\n\n /** Input (`kbqEnterDelay`) — delay in milliseconds before the tooltip is shown. Defaults to `400`. */\n enterDelay = defaultEnterDelay;\n /** Input (`kbqLeaveDelay`) — delay in milliseconds before the tooltip is hidden. Defaults to `0`. */\n leaveDelay = 0;\n\n /** Input (`kbqTrigger`) with the comma-separated trigger events. An empty value resets to hover + focus and rebinds listeners. */\n get trigger(): string {\n return this._trigger;\n }\n\n set trigger(value: string) {\n if (value) {\n this._trigger = value;\n } else {\n this._trigger = `${PopUpTriggers.Hover}, ${PopUpTriggers.Focus}`;\n }\n\n this.initListeners();\n }\n\n /** Backing field for `trigger`; defaults to hover + focus. */\n protected _trigger = `${PopUpTriggers.Hover}, ${PopUpTriggers.Focus}`;\n\n /** Input (`kbqTooltipClass`) with an extra CSS class applied to the tooltip; updating it refreshes the class map. */\n get customClass(): string {\n return this._customClass || '';\n }\n\n set customClass(value: string) {\n if (value) {\n this._customClass = value;\n\n this.updateClassMap();\n } else {\n this._customClass = '';\n }\n }\n\n /** Input (`kbqTooltipContext`) with the context object passed to a template tooltip; updating it refreshes the open tooltip. */\n get context(): unknown {\n return this._context;\n }\n\n set context(ctx: unknown) {\n this._context = ctx;\n this.updateData();\n }\n\n /** Backing field for `context`. */\n private _context: unknown = null;\n\n /** Input (`kbqTooltipColor`) with the tooltip color theme. Defaults to `KbqComponentColors.Contrast`. */\n get color(): KbqComponentColors | string {\n return this._color;\n }\n\n set color(value: KbqComponentColors | string) {\n this._color = value || KbqComponentColors.Contrast;\n }\n\n /** CSS class the current `color` maps to. */\n protected get colorClass(): string {\n return `kbq-${this._color}`;\n }\n\n /** Backing field for `color`; defaults to `KbqComponentColors.Contrast`. */\n private _color: KbqComponentColors | string = KbqComponentColors.Contrast;\n\n /** Input (`kbqTooltipArrow`) — whether to render the tooltip's arrow/pointer. Defaults to `false`. */\n arrow: boolean = false;\n\n /**\n * Input (`kbqTooltipOffset`) — distance in pixels between the tooltip and its trigger. `null`, the default, keeps\n * the gap of the stylesheet.\n */\n offset: number | null = null;\n\n /** Output (`kbqPlacementChange`) that emits the new placement whenever the tooltip repositions. */\n readonly placementChange = new EventEmitter<KbqPopUpPlacementValues>();\n\n /** @docs-private */\n readonly placementChangeOutput = outputFromObservable(this.placementChange, { alias: 'kbqPlacementChange' });\n\n /** Output (`kbqVisibleChange`) that emits when the tooltip's visibility changes. */\n readonly visibleChange = new EventEmitter<boolean>();\n\n /** @docs-private */\n readonly visibleChangeOutput = outputFromObservable(this.visibleChange, { alias: 'kbqVisibleChange' });\n\n /** Whether the configured trigger list includes the `click` trigger. */\n private get hasClickInTrigger(): boolean {\n return this.trigger.includes(PopUpTriggers.Click);\n }\n\n /** @docs-private */\n protected originSelector = '.kbq-tooltip';\n\n /** @docs-private */\n protected overlayConfig: OverlayConfig = {\n panelClass: [TOOLTIP_PANEL_CLASS]\n };\n\n /**\n * Visual variant of the tooltip. Accepts `'default'` | `'warning'` | `'extended'`.\n * Replaces the removed `KbqWarningTooltipTrigger` and `KbqExtendedTooltipTrigger`\n * subclasses — to render a warning tooltip use `kbqTooltipModifier=\"warning\"`,\n * and `kbqTooltipModifier=\"extended\"` for the extended variant (combine with `kbqTooltipHeader`).\n */\n modifier: KbqEnumValues<TooltipModifier> = TooltipModifier.Default;\n\n /**\n * Header text or template, rendered above the tooltip content. Only meaningful with\n * `kbqTooltipModifier=\"extended\"`. Replaces the removed `KbqExtendedTooltipTrigger.header`.\n */\n header: string | TemplateRef<unknown>;\n\n /**\n * Hands each bound input to its member, and pushes a later change of `modifier`, `header`, `arrow` or\n * `offset` — plain fields — into an open tooltip, which would otherwise show stale data until the next\n * show/hide cycle.\n */\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member, a bound `undefined` restoring the\n // member's default; unbound, it leaves what code wrote.\n if (changes['triggerInput']) {\n this.trigger = this.triggerInput() ?? '';\n }\n\n if (changes['hideWithTimeoutInput']) {\n const hideWithTimeout = this.hideWithTimeoutInput();\n\n if (hideWithTimeout !== undefined) this.hideWithTimeout = hideWithTimeout;\n }\n\n if (changes['enterDelayInput']) {\n this.enterDelay = this.enterDelayInput() ?? defaultEnterDelay;\n }\n\n if (changes['leaveDelayInput']) {\n this.leaveDelay = this.leaveDelayInput() ?? 0;\n }\n\n if (changes['relativeToPointerInput']) {\n const relativeToPointer = this.relativeToPointerInput();\n\n if (relativeToPointer !== undefined) this.relativeToPointer = relativeToPointer;\n }\n\n if (changes['relativeToCaretInput']) {\n const relativeToCaret = this.relativeToCaretInput();\n\n if (relativeToCaret !== undefined) this.relativeToCaret = relativeToCaret;\n }\n\n if (changes['relativeToCaretVerticalInput']) {\n this.relativeToCaretVertical = this.relativeToCaretVerticalInput() ?? 'auto';\n }\n\n if (changes['contentInput']) {\n this.content = this.contentInput() ?? '';\n }\n\n if (changes['headerInput']) {\n this.header = this.headerInput() ?? '';\n }\n\n if (changes['modifierInput']) {\n this.modifier = this.modifierInput() ?? TooltipModifier.Default;\n }\n\n if (changes['contextInput']) {\n this.context = this.contextInput();\n }\n\n if (changes['customClassInput']) {\n this.customClass = this.customClassInput() ?? '';\n }\n\n if (changes['colorInput']) {\n this.color = this.colorInput() ?? KbqComponentColors.Contrast;\n }\n\n if (changes['arrowInput']) {\n const arrow = this.arrowInput();\n\n if (arrow !== undefined) this.arrow = arrow;\n }\n\n if (changes['offsetInput']) {\n this.offset = this.offsetInput() ?? null;\n }\n\n if (changes['disabledInput']) {\n // A bound `undefined` hands the decision back to the state the trigger derives.\n this.disabled = this.disabledInput();\n }\n\n if (changes['tooltipPlacementPriorityInput']) {\n this.tooltipPlacementPriority = this.tooltipPlacementPriorityInput() ?? null;\n }\n\n if (changes['tooltipPlacementInput']) {\n this.tooltipPlacement = this.tooltipPlacementInput() ?? PopUpPlacements.Top;\n }\n\n if (changes['tooltipVisibleInput']) {\n this.tooltipVisible = this.tooltipVisibleInput() ?? false;\n }\n\n if (!this.instance) return;\n\n if (changes['modifierInput'] && !changes['modifierInput'].firstChange) {\n this.updateClassMap();\n }\n\n if (\n (changes['headerInput'] && !changes['headerInput'].firstChange) ||\n (changes['arrowInput'] && !changes['arrowInput'].firstChange) ||\n (changes['offsetInput'] && !changes['offsetInput'].firstChange)\n ) {\n this.updateData();\n }\n }\n\n /**\n * Whether this tooltip takes part in the \"only one tooltip is visible at a time\" group.\n *\n * Read through the `trigger` getter on purpose: `KbqTitleDirective` always reports `hover`, so title\n * tooltips participate, while `kbqValidationTooltip` consumers (datepicker, timepicker, inline-edit)\n * assign `trigger = 'manual'` and therefore stay out of the group.\n */\n private get participatesInSingleInstance(): boolean {\n return this.singleInstance() && this.hasInteractiveTrigger;\n }\n\n /**\n * Whether `kbqTrigger` contains at least one user-driven event, i.e. the tooltip is not driven purely\n * imperatively. `manual`/`none` tooltips (the validation hints of datepicker, timepicker and inline-edit)\n * bind no listeners and are expected to stay pinned while the user keeps interacting elsewhere.\n */\n private get hasInteractiveTrigger(): boolean {\n return INTERACTIVE_TRIGGERS.some((name) => this.trigger.includes(name));\n }\n\n /**\n * Whether the tooltip is muted because a pop-up on the same element has taken over the anchor.\n *\n * Set when that pop-up opens and released only once the pointer or the focus genuinely leaves the host,\n * never on the pop-up closing. Both matter: a pop-up restores focus to its trigger when it closes (see\n * `KbqPopoverComponent.onEscape`), and removing its backdrop replays `mouseenter` on the trigger without\n * the pointer having moved — either would otherwise pop the tooltip up out of nowhere. A pointer that left\n * the host while the pop-up was open (see `pointerLeftWhileMuted`) releases it by coming back once the\n * pop-up is closed.\n */\n private mutedBySiblingPopup = false;\n\n /**\n * Whether the pointer left the host while muted. A backdrop inserted under the resting pointer fires\n * `mouseleave` as well, but with the pointer still within the host — that one does not count.\n */\n private pointerLeftWhileMuted = false;\n\n /**\n * Origin of the last focus event on the host, cached from the `FocusMonitor` stream so the focus trigger\n * can tell a keyboard focus from the one a click leaves behind.\n */\n protected lastFocusOrigin: FocusOrigin = null;\n\n /** @docs-private */\n readonly triggerInput = input<string | undefined>(undefined, { alias: 'kbqTrigger' });\n\n /** @docs-private */\n readonly hideWithTimeoutInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'hideWithTimeout',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly enterDelayInput = input<number | undefined>(undefined, { alias: 'kbqEnterDelay' });\n\n /** @docs-private */\n readonly leaveDelayInput = input<number | undefined>(undefined, { alias: 'kbqLeaveDelay' });\n\n /** @docs-private */\n readonly relativeToPointerInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'kbqRelativeToPointer',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly relativeToCaretInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'kbqRelativeToCaret',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly relativeToCaretVerticalInput = input<KbqCaretVerticalAnchor | undefined>(undefined, {\n alias: 'kbqRelativeToCaretVertical'\n });\n\n /** @docs-private */\n readonly contentInput: InputSignal<KbqTooltipTrigger['content'] | undefined> = input<\n KbqTooltipTrigger['content'] | undefined\n >(undefined, {\n alias: 'kbqTooltip'\n });\n\n /** @docs-private */\n readonly headerInput: InputSignal<KbqTooltipTrigger['header'] | undefined> = input<\n KbqTooltipTrigger['header'] | undefined\n >(undefined, {\n alias: 'kbqTooltipHeader'\n });\n\n /** @docs-private */\n readonly modifierInput = input<KbqEnumValues<TooltipModifier> | undefined>(undefined, {\n alias: 'kbqTooltipModifier'\n });\n\n /** @docs-private */\n readonly contextInput = input<NonNullable<unknown> | null | undefined>(undefined, { alias: 'kbqTooltipContext' });\n\n /** @docs-private */\n readonly customClassInput = input<string | undefined>(undefined, { alias: 'kbqTooltipClass' });\n\n /** @docs-private */\n readonly colorInput = input<KbqComponentColors | string | undefined>(undefined, { alias: 'kbqTooltipColor' });\n\n /** @docs-private */\n readonly arrowInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'kbqTooltipArrow',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly offsetInput = input<number | undefined, number | string | null | undefined>(undefined, {\n alias: 'kbqTooltipOffset',\n transform: kbqOptionalNumberAttribute\n });\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'kbqTooltipDisabled',\n // `booleanAttribute` would read a bound `undefined` as `false`, an explicit request for the tooltip.\n transform: (value: boolean | string | null | undefined) =>\n value === undefined ? undefined : booleanAttribute(value)\n });\n\n /** @docs-private */\n readonly tooltipPlacementPriorityInput = input<string | string[] | null | undefined>(undefined, {\n alias: 'kbqPlacementPriority'\n });\n\n /** @docs-private */\n readonly tooltipPlacementInput = input<KbqPopUpPlacementValues | undefined>(undefined, { alias: 'kbqPlacement' });\n\n /** @docs-private */\n readonly tooltipVisibleInput = input<boolean | undefined>(undefined, { alias: 'kbqVisible' });\n\n /**\n * Sets up an effect that mirrors a `forDisabledComponent`'s disabled signal: when that component is disabled it\n * makes the host focusable (so the tooltip can still be triggered) and enables the tooltip, otherwise disables it.\n *\n * Also joins the \"only one tooltip is visible at a time\" group, mutes the tooltip while a pop-up on the\n * same element is open, tracks the focus origin and keeps the trigger's `aria-describedby` in sync with the\n * open tooltip. All of this wiring lives here rather than in `ngAfterViewInit`/`ngOnDestroy` because\n * several subclasses override those hooks: `KbqTitleDirective` and `KbqEllipsisCenterDirective` skip\n * `super.ngAfterViewInit()`, and `KbqPasswordToggle` skips `super` in both hooks entirely. `destroyRef`\n * additionally covers a trigger destroyed while its tooltip is still visible — that path disposes the\n * overlay without emitting `visibleChange(false)`.\n */\n constructor() {\n super();\n\n merge(...this.siblingPopups.map(({ openedChange }) => openedChange))\n .pipe(\n filter(Boolean),\n // A tooltip shown imperatively (`manual`/`none`) is not competing for the anchor with the\n // user — it is pinned on purpose, like the validation hints of datepicker and timepicker.\n filter(() => this.hasInteractiveTrigger),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n this.mutedBySiblingPopup = true;\n this.pointerLeftWhileMuted = false;\n\n this.hideAsInactive();\n });\n\n // CDK dispatches the focus origin from a capture-phase listener on the document, so it is already\n // recorded by the time the trigger's own `focus` listener runs.\n this.focusMonitor\n .monitor(this.elementRef.nativeElement)\n .pipe(takeUntilDestroyed())\n .subscribe((origin) => (this.lastFocusOrigin = origin));\n\n this.visibleChange.pipe(takeUntilDestroyed()).subscribe((visible) => {\n if (visible) {\n this.describeTrigger();\n\n if (this.participatesInSingleInstance) {\n this.tooltipRegistry.setVisible(this);\n }\n } else {\n this.undescribeTrigger();\n this.tooltipRegistry.clearVisible(this);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.undescribeTrigger();\n this.stopListeningForEscape();\n this.tooltipRegistry.clearVisible(this);\n });\n\n effect(() => {\n const forDisabledComponent = this.forDisabledComponent();\n\n if (!forDisabledComponent) return;\n\n const disabled = forDisabledComponent.disabledSignal();\n const nativeElement = this.getNativeElement();\n\n if (disabled) {\n // The wrapped control drops out of the tab order once it is disabled, so the wrapper takes its\n // place — otherwise the explanation for why the control is unavailable is keyboard-unreachable.\n this.renderer.setAttribute(nativeElement, 'tabindex', '0');\n this.renderer.setAttribute(nativeElement, 'role', 'group');\n this.renderer.addClass(nativeElement, 'kbq-tooltip-trigger_for-disabled');\n } else {\n this.renderer.setAttribute(nativeElement, 'tabindex', '-1');\n this.renderer.removeAttribute(nativeElement, 'role');\n this.renderer.removeClass(nativeElement, 'kbq-tooltip-trigger_for-disabled');\n }\n\n // Derived, not assigned: an explicit `kbqTooltipDisabled` binding still wins, whichever of the\n // two runs first.\n this.setDerivedDisabled(!disabled);\n });\n }\n\n /** Hides the tooltip when a parent pop-up closes. */\n ngAfterViewInit(): void {\n this.parentPopup?.closedStream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.hide());\n }\n\n /** Stops focus monitoring on the host element and runs the base-class teardown. */\n ngOnDestroy() {\n this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n\n super.ngOnDestroy();\n }\n\n /**\n * Records the state the subclass derived from its own content and re-folds it with the consumer's\n * `kbqTooltipDisabled`. Subclasses call this instead of writing `disabled`, which would be read back as\n * the consumer's own value and lose whichever of the two was written first.\n *\n * @docs-private\n */\n protected setDerivedDisabled(value: boolean): void {\n this.derivedDisabled = value;\n\n this.applyDisabled();\n }\n\n private foldDisabled(): boolean {\n if (this.derivedDisabledWins) {\n return this.explicitlyDisabled === true || (this.derivedDisabled ?? false);\n }\n\n return this.explicitlyDisabled ?? this.derivedDisabled ?? false;\n }\n\n /** Recomputes the effective `disabled` and closes an open tooltip that just lost its reason to be open. */\n private applyDisabled(): void {\n const next = this.foldDisabled();\n\n // Both producers re-state their verdict on every resize, content mutation and pointer sweep, and\n // most of those repeat the previous answer. Without this the repeats still reach `hide()`, which\n // re-enters the Angular zone from a `ResizeObserver` callback CDK deliberately runs outside it and\n // schedules a tick — once per visible host, on a directive that sits on every dropdown item, list\n // option and tree option.\n if (next === this._disabled) return;\n\n this._disabled = next;\n\n if (this._disabled) {\n this.hide();\n }\n }\n\n /**\n * Shows the tooltip after `delay` ms. Suppresses showing while a pop-up on the same element holds the\n * anchor or on a focus trigger that did not originate from the keyboard, and applies cursor-relative\n * positioning when `relativeToPointer` is enabled.\n */\n show(delay: number = this.enterDelay) {\n if (this.mutedBySiblingPopup) {\n const pointerReturned =\n this.triggerName === 'mouseenter' && this.pointerLeftWhileMuted && !this.siblingPopupAttached;\n\n if (!pointerReturned) return;\n\n this.mutedBySiblingPopup = false;\n }\n\n // Checked before the overlay exists: `KbqTooltipComponent.show` bails on empty content, but by then\n // the trigger has already attached the pane, leaving an empty, invisible overlay latched open — and\n // `KbqPopUpTrigger.show` returns early for as long as it is there, so the tooltip never recovers.\n if (!this.content) {\n return;\n }\n\n // `isAttached` is checked directly, not just the `mutedBySiblingPopup` latch: `openedChange` can lag\n // it by a real delay — e.g. select/tree-select only emit it after the render that shows their panel,\n // and a sibling's own `hide()` can cancel a still-pending `show()` outright so it never emits at all\n // (KbqPopUp.show/hide, pop-up.ts). `isAttached` itself is guaranteed synchronous by the\n // `KbqSiblingPopup` contract, so checking it here closes that gap regardless of the cause. Gated by\n // `hasInteractiveTrigger` for the same reason as the constructor subscription: a `manual`/`none`\n // tooltip is driven imperatively and must not be muted by a sibling at all.\n if (this.hasInteractiveTrigger && this.siblingPopupAttached) {\n return;\n }\n\n if (this.triggerName === 'focus' && !FOCUS_ORIGINS_THAT_SHOW.includes(this.lastFocusOrigin)) {\n return;\n }\n\n super.show(delay);\n\n if (this.relativeToCaret) {\n this.applyRelativeToCaret();\n } else if (this.relativeToPointer) {\n this.applyRelativeToPointer();\n }\n }\n\n /**\n * Hides the tooltip after `delay` ms and, when the user has genuinely left the host, un-mutes a tooltip\n * that a pop-up on the same element had muted.\n *\n * `mouseleave` and `blur` are the release signals because the base class binds `hide` to both regardless\n * of whether the tooltip is currently visible. A pop-up that is still attached does not count: its\n * backdrop steals the hover from the trigger while the pointer stands still, and that `mouseleave` must\n * not be mistaken for the user leaving.\n */\n hide(delay: number = this.leaveDelay) {\n if (RELEASE_TRIGGERS.includes(this.triggerName) && !this.siblingPopupAttached) {\n this.mutedBySiblingPopup = false;\n }\n\n super.hide(delay);\n }\n\n /**\n * Whether a pop-up on the same element is attached. Untracked: the siblings keep it in signals, and a consumer\n * `effect()` that shows or hides the tooltip must not run again whenever one of them opens or closes.\n */\n private get siblingPopupAttached(): boolean {\n return untracked(() => this.siblingPopups.some(({ isAttached }) => isAttached));\n }\n\n /**\n * Records whether the pointer left the host while muted, see `pointerLeftWhileMuted`.\n *\n * @docs-private\n */\n protected trackPointerLeave(event: MouseEvent): void {\n if (!this.mutedBySiblingPopup) return;\n\n const { left, right, top, bottom } = this.elementRef.nativeElement.getBoundingClientRect();\n\n this.pointerLeftWhileMuted =\n // A box covers [left, right) and [top, bottom): a point on its right or bottom edge is outside it.\n event.clientX < left || event.clientX >= right || event.clientY < top || event.clientY >= bottom;\n }\n\n /**\n * Hides the tooltip because something else took its place — another tooltip became visible, or a pop-up\n * anchored to the same element opened.\n *\n * Goes straight to the pop-up instead of `hide()`: `hide()` silently no-ops when the last recorded\n * `triggerName` is `mouseleave` and the pop-up itself is hovered. Hiding through the instance keeps\n * `visibleChange(false)` firing, so `isOpen`, `kbqVisibleChange` and the `kbqVisible` input stay in sync.\n * Does nothing when the tooltip is already detached or when closing is prevented.\n *\n * @docs-private\n */\n hideAsInactive(): void {\n if (this.preventClose) return;\n\n this.ngZone.run(() => this.instance?.hide(0));\n }\n\n /**\n * Shows the tooltip next to the cursor position of the given mouse event, anchoring it to the event's\n * `currentTarget` instead of the directive's own host element.\n *\n * Use it when the trigger cannot be declared in the template — for instance for a tooltip shared by the\n * cells of a virtualized table. The directive still has to be created in an injection context.\n */\n showForMouseEvent(event: MouseEvent) {\n if (!(event.currentTarget instanceof HTMLElement)) return;\n\n // The same guard `show()` carries, repeated because this path reaches `super.show()` directly and\n // would otherwise latch an empty pane open — with it attached, `KbqPopUpTrigger.show` returns early\n // and the tooltip never recovers, while the pane keeps swallowing the document keydown listener.\n if (!this.content) return;\n\n this.triggerName = 'mouseenter';\n this.mouseEvent = event;\n this.undescribeTrigger();\n this.setExternalNativeElement(event.currentTarget);\n\n super.show();\n\n // Re-anchoring an open tooltip has to move the description itself: the `visibleChange(true)` edge that\n // normally drives it is swallowed by `distinctUntilChanged` while the pop-up stays attached. A tooltip\n // that is not open yet is left to that edge, which describes the element anchored by then.\n if (untracked(() => this.isOpen)) {\n this.describeTrigger();\n }\n\n this.applyRelativeToPointer();\n }\n\n /**\n * Shows the tooltip anchored to the given element instead of the directive's own host element.\n *\n * Use it when the trigger cannot be declared in the template. The directive still has to be created in an\n * injection context:\n *\n * ```ts\n * const tooltip = runInInjectionContext(injector, () => new KbqTooltipTrigger());\n * tooltip.showForElement(element);\n * ```\n *\n * Does nothing while the tooltip is disabled or has no content — there is no overlay to anchor then.\n */\n showForElement(element: HTMLElement) {\n this.show();\n\n if (!this.strategy) return;\n\n this.strategy.setOrigin(element);\n }\n\n /**\n * Replaces the CSS classes put on the tooltip's overlay pane.\n *\n * Exists for components that own a tooltip through `hostDirectives` instead of extending this class and\n * therefore cannot reach the protected overlay configuration (e.g. `KbqNavbarItem`).\n *\n * @docs-private\n */\n setOverlayPanelClass(panelClass: string | string[]): void {\n this.overlayConfig.panelClass = panelClass;\n }\n\n /** @docs-private */\n updateData() {\n if (!this.instance) {\n return;\n }\n\n this.instance.id = this.tooltipId;\n this.instance.content = this.content;\n this.instance.header = this.header;\n // `!= null` rather than a truthy check: `0`, `''` and `false` are legitimate template contexts, and\n // dropping them left the template rendering the previous context instead.\n this.instance.context = this.context != null ? { $implicit: this.context } : null;\n this.instance.arrow = this.arrow;\n this.instance.offset = this.offset;\n this.instance.detectChanges();\n // The margins live on the rendered tooltip element, so re-applying them is the only way a changed\n // `kbqTooltipOffset` reaches an already open tooltip.\n this.instance.applyOffset();\n this.updatePosition(true);\n }\n\n /** @docs-private */\n closingActions() {\n return merge(\n this.hasClickInTrigger ? this.overlayRef!.outsidePointerEvents() : EMPTY,\n this.overlayRef!.detachments()\n );\n }\n\n /** @docs-private */\n getOverlayHandleComponentType(): Type<KbqTooltipComponent> {\n return KbqTooltipComponent;\n }\n\n /** @docs-private */\n updateClassMap(newPlacement: string = this.placement) {\n if (!this.instance) {\n return;\n }\n\n this.instance.updateClassMap(POSITION_TO_CSS_MAP[newPlacement], `${this.customClass} ${this.colorClass}`, {\n modifier: this.modifier\n });\n }\n\n /**\n * Arms the `Escape` listener for as long as the tooltip overlay is attached, so that `Escape` dismisses\n * the tooltip.\n *\n * The inherited `keydownHandler` is a host binding on the trigger and therefore only fires while the\n * trigger itself has focus, which a hover-opened tooltip never has.\n *\n * @docs-private\n */\n createOverlay(): OverlayRef {\n if (this.overlayRef) {\n return this.overlayRef;\n }\n\n // Rebuilt here rather than pushed into `overlayConfig` from a lifecycle hook: five subclasses skip\n // `super.ngAfterViewInit()`, and appending to the array made the class impossible to take back off.\n this.overlayConfig = { ...this.overlayConfig, panelClass: this.getPanelClasses() };\n\n const overlayRef = super.createOverlay();\n\n overlayRef\n .attachments()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.listenForEscape();\n this.startTrackingCaret();\n });\n overlayRef\n .detachments()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.stopListeningForEscape();\n this.stopTrackingCaret();\n });\n\n return overlayRef;\n }\n\n /** Teardown of the document-level `Escape` listener, or `null` while the overlay is detached. */\n private unbindEscapeListener: (() => void) | null = null;\n\n /**\n * Binds a document-level `Escape` listener, outside the zone and at most once per attach.\n *\n * An open tooltip is the topmost layer, so `Escape` dismisses it first (WAI-ARIA tooltip pattern, WCAG 1.4.13):\n * the listener captures the key and marks it spent, and a modal or a panel that closes on `Escape` lets it\n * pass. The key is not stopped, so a control that closes a popup of its own on it still does.\n *\n * Deliberately not `overlayRef.keydownEvents()`: CDK hands each key to the last attached overlay that has\n * subscribers and stops there, without re-dispatching. A tooltip is by construction the last overlay\n * attached, so subscribing would make it swallow `Escape` for the modal, sidepanel, dropdown or inline\n * edit underneath it — including for the imperative tooltips that drop the key instead of acting on it.\n */\n private listenForEscape(): void {\n if (this.unbindEscapeListener) return;\n\n this.ngZone.runOutsideAngular(() => {\n this.unbindEscapeListener = this.renderer.listen(\n 'document',\n 'keydown',\n (event: KeyboardEvent) => {\n // An imperatively driven tooltip (`manual`/`none`) is pinned on purpose — the validation hints\n // of datepicker, timepicker and inline-edit must survive an unrelated Escape.\n if (event.keyCode !== ESCAPE || !this.isOpen || !this.hasInteractiveTrigger || this.preventClose) {\n return;\n }\n\n event.preventDefault();\n this.hideAsInactive();\n },\n { capture: true }\n );\n });\n }\n\n /** Removes the document-level `Escape` listener. */\n private stopListeningForEscape(): void {\n this.unbindEscapeListener?.();\n this.unbindEscapeListener = null;\n }\n\n /** Panel classes of the tooltip overlay, including the pointer-events opt-out while it is enabled. */\n private getPanelClasses(): string[] {\n const configured = this.overlayConfig.panelClass;\n const classes = (Array.isArray(configured) ? configured : configured ? [configured] : []).filter(\n (name) => name !== IGNORE_POINTER_EVENTS_PANEL_CLASS\n );\n\n // A tooltip without an interactive trigger opts out regardless of the input: hovering its pane\n // neither keeps it open nor closes it, so the hoverability the default protects does not exist here,\n // and a pointer-capturing pane only blocks what it floats over. The validation hints of datepicker,\n // timepicker and inline-edit sit above their own field for `validationTooltipHideDelay` (3s).\n const ignorePointerEvents = this.ignoreTooltipPointerEvents() || !this.hasInteractiveTrigger;\n\n return ignorePointerEvents ? [...classes, IGNORE_POINTER_EVENTS_PANEL_CLASS] : classes;\n }\n\n /**\n * Points the trigger's `aria-describedby` at the open tooltip, so assistive technology announces the hint\n * together with the control it explains.\n *\n * Written through the renderer rather than a host binding because `showForMouseEvent` re-anchors the\n * trigger to a foreign element, which a host binding would never reach. Existing ids are preserved.\n */\n private describeTrigger(): void {\n if (this.describesHostText) return;\n\n const nativeElement = this.getNativeElement();\n const ids = this.getDescribedByIds(nativeElement);\n\n // Recorded rather than resolved again on the way out: `showForMouseEvent` re-anchors the trigger to\n // another element, and un-describing the current one would leave the id dangling on the previous.\n this.describedElement = nativeElement;\n\n if (ids.includes(this.tooltipId)) return;\n\n this.renderer.setAttribute(nativeElement, 'aria-describedby', [...ids, this.tooltipId].join(' '));\n }\n\n /** Removes this tooltip's id from the described element's `aria-describedby`, keeping any other ids. */\n private undescribeTrigger(): void {\n const nativeElement = this.describedElement;\n\n if (!nativeElement) return;\n\n this.describedElement = null;\n\n const ids = this.getDescribedByIds(nativeElement).filter((id) => id !== this.tooltipId);\n\n if (ids.length) {\n this.renderer.setAttribute(nativeElement, 'aria-describedby', ids.join(' '));\n } else {\n this.renderer.removeAttribute(nativeElement, 'aria-describedby');\n }\n }\n\n /** Element whose `aria-describedby` points at this tooltip, or `null` while nothing is described. */\n private describedElement: HTMLElement | null = null;\n\n /** Ids currently listed in the element's `aria-describedby`. */\n private getDescribedByIds(element: HTMLElement): string[] {\n return (element.getAttribute('aria-describedby') || '').split(/\\s+/).filter(Boolean);\n }\n\n /**\n * Whether the tooltip only repeats the text the host already shows — which is what `kbq-title` does.\n * Describing those would make assistive technology read the same label twice.\n */\n private get describesHostText(): boolean {\n return typeof this.content === 'string' && this.content.trim() === this.getNativeElement().textContent?.trim();\n }\n\n /** Teardown of the listeners following the caret, or `null` while the tooltip is not tracking one. */\n private stopCaretListeners: (() => void) | null = null;\n\n /**\n * Field whose caret the tooltip is anchored to: the host element when it is editable itself — which is\n * how the validation hints are written — otherwise the first editable element it wraps.\n */\n private getCaretAnchor(): KbqTextAnchor | null {\n const host = this.getNativeElement();\n\n return host.matches(EDITABLE_SELECTOR) ? host : host.querySelector<HTMLElement>(EDITABLE_SELECTOR);\n }\n\n /**\n * Origin that stays on the caret of the field while `kbqRelativeToCaret` is enabled, and on the host element\n * otherwise — so switching the input off while the tooltip is open does not leave it on the caret.\n */\n private readonly caretOrigin = kbqCreateCaretOrigin(() => this.measureCaretAnchor());\n\n /**\n * Anchors the overlay to the caret of the field.\n *\n * @docs-private\n */\n protected applyRelativeToCaret() {\n this.strategy?.setOrigin(this.caretOrigin);\n }\n\n /** @docs-private */\n protected getAnchorSize(): { width: number; height: number } {\n return this.relativeToCaret ? this.caretOrigin : super.getAnchorSize();\n }\n\n /**\n * Rectangle the tooltip is anchored to: the caret or selection of the field — spanning the whole field\n * vertically when it anchors to the field — or the host element's box when the caret cannot be located or\n * `kbqRelativeToCaret` is off.\n */\n private measureCaretAnchor(): KbqCaretRect {\n const anchor = this.relativeToCaret ? this.getCaretAnchor() : null;\n const rect = anchor && kbqGetSelectionRect(anchor);\n\n if (!anchor || !rect) {\n const { left, top, width, height } = this.getNativeElement().getBoundingClientRect();\n\n return { x: left, y: top, width, height };\n }\n\n if (!this.anchorsToField(anchor)) return rect;\n\n const { top, height } = anchor.getBoundingClientRect();\n\n return { x: rect.x, width: rect.width, y: top, height };\n }\n\n /** Whether the tooltip takes its vertical position from the whole field rather than the caret's line. */\n private anchorsToField(anchor: KbqTextAnchor): boolean {\n const vertical = this.relativeToCaretVertical;\n\n return vertical === 'field' || (vertical !== 'line' && anchor.tagName === 'INPUT');\n }\n\n /** Follows the caret for as long as the overlay is attached, outside the zone and at most once per attach. */\n private startTrackingCaret(): void {\n if (this.stopCaretListeners || !this.relativeToCaret) return;\n\n const anchor = this.getCaretAnchor();\n\n if (!anchor) return;\n\n this.ngZone.runOutsideAngular(() => {\n this.stopCaretListeners = kbqListenForCaretMoves(this.renderer, anchor, () => this.repositionAtCaret());\n });\n }\n\n private stopTrackingCaret(): void {\n this.stopCaretListeners?.();\n this.stopCaretListeners = null;\n }\n\n /**\n * Picks the placement again for where the caret is now. The position strategy is locked so that an element-anchored\n * pop-up does not jump when its content changes, and a locked strategy only re-applies the placement chosen on\n * opening; a caret walking to the edge of the screen has to be free to flip the tooltip, so the lock is lifted for\n * this pass.\n */\n private repositionAtCaret(): void {\n if (!this.overlayRef) return;\n\n this.strategy.withLockedPosition(false);\n this.overlayRef.updatePosition();\n this.strategy.withLockedPosition(true);\n }\n\n /** @docs-private */\n protected applyRelativeToPointer() {\n if (\n !this.strategy ||\n ![PopUpPlacements.Top, PopUpPlacements.Bottom].includes(this.placement as PopUpPlacements) ||\n this.triggerName !== 'mouseenter'\n ) {\n this.resetOrigin();\n\n return;\n }\n\n const triggerRects = this.getNativeElement().getBoundingClientRect();\n const point: Point = { x: 0, y: 0 };\n\n if (this.placement === PopUpPlacements.Top) {\n point.x = this.mouseEvent!.x;\n point.y = triggerRects.y;\n } else if (this.placement === PopUpPlacements.Bottom) {\n point.x = this.mouseEvent!.x;\n point.y = triggerRects.y + triggerRects.height;\n }\n\n this.strategy.setOrigin(point);\n }\n}\n","<div\n #tooltip\n class=\"kbq-tooltip\"\n role=\"tooltip\"\n [attr.id]=\"id\"\n [class.kbq-tooltip_arrowless]=\"!arrow\"\n [class]=\"classMap\"\n [class.kbq-animations-disabled]=\"animationsDisabled\"\n [class.kbq-tooltip_visible]=\"isVisible()\"\n>\n <div class=\"kbq-tooltip__inner\">\n @if (arrow) {\n <div class=\"kbq-tooltip__arrow\" aria-hidden=\"true\"></div>\n }\n\n @if (header) {\n <div class=\"kbq-tooltip__header\">\n @if (isTemplateRef(header)) {\n <ng-container [ngTemplateOutlet]=\"$any(header)\" [ngTemplateOutletContext]=\"context\" />\n } @else {\n <div>{{ header }}</div>\n }\n </div>\n }\n <div class=\"kbq-tooltip__content\">\n @if (isTemplateRef(content)) {\n <ng-container [ngTemplateOutlet]=\"$any(content)\" [ngTemplateOutletContext]=\"context\" />\n } @else {\n <div>{{ content }}</div>\n }\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { KbqTooltipComponent, KbqTooltipTrigger } from './tooltip.component';\n\nconst COMPONENTS = [\n KbqTooltipComponent,\n KbqTooltipTrigger\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqToolTipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-tooltip.mjs","sources":["../../../packages/components/tooltip/tooltip-config.ts","../../../packages/components/tooltip/tooltip-registry.ts","../../../packages/components/tooltip/tooltip.component.ts","../../../packages/components/tooltip/tooltip.component.html","../../../packages/components/tooltip/tooltip.module.ts","../../../packages/components/tooltip/koobiq-components-tooltip.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Default options inherited by every tooltip in the token's scope. A bound input still wins: `kbqTooltipOffset`\n * overrides `offset`, and a binding that changes to `undefined` restores the inherited value.\n */\nexport interface KbqTooltipDefaultOptions {\n /**\n * Distance in pixels between the tooltip and its trigger, used while `kbqTooltipOffset` is not bound.\n * `null` keeps the gap of the stylesheet.\n */\n readonly offset?: number | null;\n\n /** Extra CSS class applied to the tooltip's overlay panel. */\n readonly panelClass?: string | string[];\n}\n\n/**\n * Default options for the tooltips in the token's scope. Provided in root with an empty-object factory, so\n * behavior stays unchanged unless a component tree — e.g. a navbar, so its items' tooltips inherit the\n * horizontal-navbar panel class and a zero offset — provides its own values.\n *\n * @docs-private\n */\nexport const KBQ_TOOLTIP_DEFAULT_OPTIONS = new InjectionToken<KbqTooltipDefaultOptions>('kbq-tooltip-default-options', {\n providedIn: 'root',\n factory: () => ({})\n});\n","import { Injectable, InjectionToken } from '@angular/core';\n\n/**\n * Default value of the `kbqTooltipSingleInstance` input. Provide `false` at the application level to\n * globally disable the \"only one tooltip is visible at a time\" behavior.\n */\nexport const KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT = new InjectionToken<boolean>('KbqTooltipSingleInstanceDefault', {\n providedIn: 'root',\n factory: () => true\n});\n\n/**\n * Contract of a tooltip taking part in the \"only one tooltip is visible at a time\" group.\n *\n * @docs-private\n */\nexport interface KbqExclusiveTooltip {\n /** Hides the tooltip because another tooltip — or a pop-up on the same element — has taken its place. */\n hideAsInactive(): void;\n}\n\n/**\n * Keeps track of the single tooltip that is currently visible, so that showing a new one hides the\n * previous. Holds the *trigger*, not the overlay component — the latter is re-created on every show.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqTooltipRegistry {\n /** Tooltip that currently owns the screen, or `null` when nothing is visible. */\n private visibleTooltip: KbqExclusiveTooltip | null = null;\n\n /** Marks the tooltip as the only visible one, hiding the previously visible tooltip. */\n setVisible(tooltip: KbqExclusiveTooltip): void {\n if (this.visibleTooltip && this.visibleTooltip !== tooltip) {\n this.visibleTooltip.hideAsInactive();\n }\n\n this.visibleTooltip = tooltip;\n }\n\n /**\n * Clears the registry, but only when the given tooltip is still the registered one. The guard\n * matters because hiding the previous tooltip is asynchronous: its `visibleChange(false)` arrives\n * after the new tooltip has already been registered, and must not wipe that newer entry.\n */\n clearVisible(tooltip: KbqExclusiveTooltip): void {\n if (this.visibleTooltip === tooltip) {\n this.visibleTooltip = null;\n }\n }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Point } from '@angular/cdk/drag-drop';\nimport { Overlay, OverlayConfig, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n Injectable,\n InjectionToken,\n InputSignal,\n OnChanges,\n OnDestroy,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewEncapsulation,\n WritableSignal,\n booleanAttribute,\n effect,\n inject,\n input,\n untracked,\n viewChild\n} from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ESCAPE,\n KBQ_PARENT_POPUP,\n KBQ_SIBLING_POPUP,\n KbqCaretRect,\n KbqComponentColors,\n KbqEnumValues,\n KbqParentPopup,\n KbqPopUp,\n KbqPopUpPlacementValues,\n KbqPopUpTrigger,\n KbqSiblingPopup,\n KbqTextAnchor,\n POSITION_TO_CSS_MAP,\n PopUpPlacements,\n PopUpTriggers,\n applyPopupMargins,\n kbqCreateCaretOrigin,\n kbqGetSelectionRect,\n kbqListenForCaretMoves,\n kbqOptionalNumberAttribute\n} from '@koobiq/components/core';\nimport { EMPTY, merge } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { KBQ_TOOLTIP_DEFAULT_OPTIONS, KbqTooltipDefaultOptions } from './tooltip-config';\nimport { KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT, KbqExclusiveTooltip, KbqTooltipRegistry } from './tooltip-registry';\n\n/**\n * What the tooltip is vertically anchored to when it is positioned relative to the caret:\n *\n * - `'line'` — the line of text the caret is on.\n * - `'field'` — the whole field, so the tooltip never covers it; horizontally it still follows the caret.\n * - `'auto'` — `'field'` for a single-line `<input>`, `'line'` for everything else.\n */\nexport type KbqCaretVerticalAnchor = 'auto' | 'line' | 'field';\n\nexport enum TooltipModifier {\n Default = 'default',\n Warning = 'warning',\n Extended = 'extended'\n}\n\n/**\n * @deprecated Replaced by {@link KbqTooltipDelayTracker}, which owns the shared timestamp behind a service\n * instead of a mutable `useValue` object. The tooltip no longer reads this token; providing it has no effect. Will be\n * removed in 22.0.0.\n */\nexport const KBQ_TOOLTIP_OPEN_TIME = new InjectionToken<{ value: number }>('kbq-tooltip-open-time');\n\n/**\n * @deprecated Replaced by {@link KbqTooltipDelayTracker}. Providing it has no effect. Will be removed in 22.0.0.\n *\n * @docs-private\n */\nexport const KBQ_TOOLTIP_OPEN_TIME_PROVIDER = {\n provide: KBQ_TOOLTIP_OPEN_TIME,\n useValue: { value: 0 }\n};\n\n/** Default length of the window during which a following tooltip is shown without its enter delay. */\nexport const MIN_TIME_FOR_DELAY = 2000;\n\n/**\n * Length in milliseconds of the window during which a tooltip shown right after another one appears\n * instantly. Defaults to {@link MIN_TIME_FOR_DELAY}.\n */\nexport const KBQ_TOOLTIP_INSTANT_SHOW_WINDOW = new InjectionToken<number>('kbq-tooltip-instant-show-window', {\n providedIn: 'root',\n factory: () => MIN_TIME_FOR_DELAY\n});\n\n/**\n * Remembers when a tooltip was last shown, so that moving between neighbouring triggers does not replay the\n * enter delay for every one of them: the first tooltip waits `kbqEnterDelay`, the ones following it within\n * {@link KBQ_TOOLTIP_INSTANT_SHOW_WINDOW} appear instantly.\n *\n * Application-wide by design — the behavior is part of the component's documented delay rules.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqTooltipDelayTracker {\n private readonly instantShowWindow = inject(KBQ_TOOLTIP_INSTANT_SHOW_WINDOW);\n\n /** Timestamp of the last shown tooltip, or `null` while no tooltip has been shown recently. */\n private lastShownAt: number | null = null;\n\n /** Whether the tooltip that is about to be shown should skip its enter delay. */\n shouldSkipEnterDelay(): boolean {\n return this.lastShownAt !== null && Date.now() - this.lastShownAt < this.instantShowWindow;\n }\n\n /** Records that a tooltip has just been shown. */\n markShown(): void {\n this.lastShownAt = Date.now();\n }\n\n /** Forgets the last shown tooltip, so the next one appears with its full enter delay. */\n reset(): void {\n this.lastShownAt = null;\n }\n}\n\n/** Source of the unique ids that link a tooltip to the `aria-describedby` of its trigger. */\nlet nextTooltipUniqueId = 0;\n\n@Component({\n selector: 'kbq-tooltip-component',\n imports: [\n NgTemplateOutlet\n ],\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.scss', './tooltip-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqTooltipComponent extends KbqPopUp implements AfterViewInit {\n private readonly delayTracker = inject(KbqTooltipDelayTracker);\n\n prefix = 'kbq-tooltip';\n\n // Safe arrow inset from tooltip.scss: ($arrow-footprint + $trigger-margin) / 2 with the default arrow token.\n protected override arrowCenterInset = 19;\n\n /**\n * Id rendered on the tooltip element; the trigger points its `aria-describedby` at it.\n *\n * Public only because the trigger is a separate class and overwrites it with its own id — nothing outside\n * the pair should read or write it, or the accessibility link between them breaks.\n *\n * @docs-private\n */\n id: string = `kbq-tooltip-${nextTooltipUniqueId++}`;\n\n private readonly tooltipElement = viewChild<ElementRef<HTMLElement>>('tooltip');\n\n /** The tooltip panel, which the base pop-up measures and decorates instead of the host. */\n override get elementRef(): ElementRef<HTMLElement> {\n return this.tooltipElement()!;\n }\n\n ngAfterViewInit() {\n this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((state) => {\n if (state && this.arrowCentered) {\n this.detectChanges();\n this.updateArrowPosition();\n }\n });\n }\n\n /** Recalculates from the settled geometry: the entrance starts from `scale(0)`, an empty measurement box. */\n protected override afterShowAnimation(): void {\n if (this.arrowCentered) {\n this.updateArrowPosition();\n }\n }\n\n show(delay: number) {\n if (!this.content) {\n return;\n }\n\n super.show(this.delayTracker.shouldSkipEnterDelay() ? 0 : delay);\n\n this.applyOffset();\n\n this.delayTracker.markShown();\n }\n\n /**\n * Applies `offset` as the gap between the tooltip and its trigger. Called both on show and whenever the\n * trigger pushes new data, so that changing `kbqTooltipOffset` on an open tooltip actually moves it.\n *\n * Public only because the trigger calls it from the outside; it is not part of the supported surface.\n *\n * @docs-private\n */\n applyOffset(): void {\n // An empty value removes a gap applied earlier, handing it back to the stylesheet.\n const margin = this.offset == null ? '' : `${this.offset}px`;\n\n applyPopupMargins(this.renderer, this.elementRef.nativeElement, this.prefix, margin);\n }\n\n updateClassMap(placement: string, customClass: string, { modifier }: { modifier: KbqEnumValues<TooltipModifier> }) {\n const classMap = {\n [`${this.prefix}_${modifier}`]: true\n };\n\n super.updateClassMap(placement, customClass, classMap);\n }\n}\n\n/**\n * Triggers that make a tooltip part of the \"only one tooltip is visible at a time\" group.\n *\n * Values that match none of them (`manual`, `none`, …) bind no listeners at all — that is how the\n * imperatively driven validation tooltips are configured, and they are expected to stay pinned while\n * the user keeps interacting elsewhere.\n */\nconst INTERACTIVE_TRIGGERS = [\n PopUpTriggers.Hover,\n PopUpTriggers.Focus,\n PopUpTriggers.Click,\n PopUpTriggers.Keydown\n];\n\n/**\n * DOM events that mean the user has left the trigger, releasing a tooltip muted by a pop-up on the same\n * element. Both are bound by `KbqPopUpTrigger.initListeners` whenever the matching show trigger is bound.\n */\nconst RELEASE_TRIGGERS = ['mouseleave', 'blur'];\n\n/**\n * Focus origins a focus-triggered tooltip opens for. Everything but `keyboard` is excluded on purpose: a\n * pointer user gets the tooltip from the hover trigger, and showing it again on the focus a click leaves\n * behind makes it linger after the pointer has moved on. `program` cannot be admitted either, because CDK\n * reports it whenever it fails to attribute a focus — including the focus that follows a click outside its\n * detection window — so admitting it would re-open exactly the case above. Focus the application moves on\n * purpose still opens the tooltip: the repo convention is `focusVia(element, 'keyboard')`, which reports\n * `keyboard`.\n */\nconst FOCUS_ORIGINS_THAT_SHOW: FocusOrigin[] = ['keyboard'];\n\n/** Base panel class of the tooltip overlay. */\nconst TOOLTIP_PANEL_CLASS = 'kbq-tooltip-panel';\n\n/** Normalizes a `panelClass` value into the array the overlay configuration keeps. */\nfunction coercePanelClasses(panelClass: string | string[] | undefined): string[] {\n if (!panelClass) return [];\n\n return Array.isArray(panelClass) ? panelClass : [panelClass];\n}\n\n/** Default `kbqEnterDelay`, in milliseconds. */\nconst defaultEnterDelay = 400;\n\n/** Panel class that makes the tooltip pane transparent to pointer events. */\nconst IGNORE_POINTER_EVENTS_PANEL_CLASS = 'cdk-overlay-pane_ignore-pointer-events';\n\n/** Elements a caret can be located in, and therefore anchored to. */\nconst EDITABLE_SELECTOR = 'input, textarea, [contenteditable=\"\"], [contenteditable=\"true\"]';\n\nexport const KBQ_TOOLTIP_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>('kbq-tooltip-scroll-strategy', {\n providedIn: 'root',\n factory: () => kbqTooltipScrollStrategyFactory(inject(Overlay))\n});\n\n/** @docs-private */\nexport function kbqTooltipScrollStrategyFactory(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.close();\n}\n\n/**\n * Redundant to the root factory of the token; kept so an app can restore the default under its own override (#DS-2196).\n *\n * @docs-private\n */\nexport const KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: KBQ_TOOLTIP_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: kbqTooltipScrollStrategyFactory\n};\n\n/**\n * Trigger directive that shows a `KbqTooltipComponent` for its host element. Extends `KbqPopUpTrigger` with\n * tooltip-specific inputs (content, placement, color, arrow, enter/leave delays, modifier and header) and\n * behavior such as opening on keyboard focus only and positioning relative to the mouse cursor.\n */\n@Directive({\n selector: '[kbqTooltip]',\n host: {\n '[class.kbq-tooltip_open]': 'isOpen',\n\n '(keydown)': 'keydownHandler($event)',\n '(touchend)': 'touchendHandler()',\n '(mouseleave)': 'trackPointerLeave($event)'\n },\n exportAs: 'kbqTooltip'\n})\nexport class KbqTooltipTrigger\n extends KbqPopUpTrigger<KbqTooltipComponent>\n implements AfterViewInit, OnChanges, OnDestroy, KbqExclusiveTooltip\n{\n /** Registry holding the single tooltip that is currently visible. */\n private readonly tooltipRegistry = inject(KbqTooltipRegistry);\n\n private readonly injectedScrollStrategy: () => ScrollStrategy = inject(KBQ_TOOLTIP_SCROLL_STRATEGY);\n\n /**\n * Default options inherited from the token's scope: the initial `offset` and the overlay `panelClass`,\n * and the value a `kbqTooltipOffset` binding changed to `undefined` restores.\n */\n private readonly defaultOptions: KbqTooltipDefaultOptions = inject(KBQ_TOOLTIP_DEFAULT_OPTIONS);\n\n /**\n * Per-instance override for the scroll strategy, taking precedence over `KBQ_TOOLTIP_SCROLL_STRATEGY`\n * when set. An input rather than a DI override so it applies to this tooltip instance only, without\n * leaking into other `kbqTooltip`s nested inside the same host (DI overrides are visible to every\n * descendant in the element-injector tree, not just the element they're declared on).\n *\n * @docs-private\n */\n readonly scrollStrategyOverride = input<(() => ScrollStrategy) | undefined>(undefined, {\n alias: 'kbqTooltipScrollStrategy'\n });\n\n /** Id of the tooltip element this trigger points its `aria-describedby` at while the tooltip is open. */\n private readonly tooltipId = `kbq-tooltip-${nextTooltipUniqueId++}`;\n\n /** @docs-private */\n protected get scrollStrategy(): () => ScrollStrategy {\n return this.scrollStrategyOverride() ?? this.injectedScrollStrategy;\n }\n /** @docs-private */\n protected parentPopup = inject<KbqParentPopup>(KBQ_PARENT_POPUP, { optional: true });\n\n /**\n * Pop-ups anchored to the very same element — a popover, a dropdown, a select and so on. Resolved with\n * `self` so a pop-up further up the tree (which the tooltip merely lives inside) is not picked up; that\n * case is covered by `parentPopup`.\n */\n private readonly siblingPopups: readonly KbqSiblingPopup[] =\n inject(KBQ_SIBLING_POPUP, { self: true, optional: true }) || [];\n /** @docs-private */\n protected focusMonitor: FocusMonitor = inject(FocusMonitor);\n /** @docs-private */\n protected renderer: Renderer2 = inject(Renderer2);\n\n /**\n * Input for controlling the disabled state of a component.\n *\n * The input expects a component containing `disabledSignal` property, which is\n * a writable signal emitting boolean values.\n */\n readonly forDisabledComponent = input<Record<'disabledSignal', WritableSignal<boolean>>>();\n\n /**\n * Determines whether pointer events should be ignored on tooltips.\n *\n * When set to `true`, the tooltip pane does not receive pointer events, so clicks and hovers pass through\n * to whatever is underneath it. Defaults to `false`, which keeps the tooltip hoverable: a user who needs\n * more time to read it — or who reads at high magnification, where the pointer often ends up over the\n * tooltip itself — can move the pointer onto it without it disappearing (WCAG 1.4.13 \"Content on Hover\").\n *\n * Set it to `true` for tooltips that float over other click targets, such as the overflow hints of a\n * scrolling option list.\n */\n readonly ignoreTooltipPointerEvents = input<boolean>(false);\n\n /**\n * Whether the tooltip takes part in the \"only one tooltip is visible at a time\" group: showing it\n * hides the previously visible tooltip, and it is hidden when another tooltip is shown.\n *\n * Defaults to `true`; the default can be changed application-wide with the\n * `KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT` token.\n *\n * Tooltips without an interactive `kbqTrigger` (`manual`, `none`, …) never take part in the group,\n * regardless of this input — they are shown imperatively and are expected to stay pinned.\n */\n readonly singleInstance = input<boolean, unknown>(inject(KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT), {\n alias: 'kbqTooltipSingleInstance',\n transform: booleanAttribute\n });\n\n /**\n * Changes hiding behavior. By default, tooltip is hidden on mouseleave from trigger.\n * Setting hideWithTimeout to true will delay tooltip hiding and will not hide when the mouse moves from trigger\n * to tooltip.\n */\n hideWithTimeout: boolean = false;\n\n /** Input (`kbqVisible`) that programmatically shows or hides the tooltip; reflects the current `visible` state. */\n get tooltipVisible(): boolean {\n return this.visible;\n }\n\n set tooltipVisible(value: boolean) {\n super.updateVisible(value);\n }\n\n /** Input (`kbqPlacement`) that sets the tooltip placement relative to its trigger; reflects the current `placement`. */\n get tooltipPlacement(): KbqPopUpPlacementValues {\n return this.placement;\n }\n\n set tooltipPlacement(value: KbqPopUpPlacementValues) {\n super.updatePlacement(value);\n }\n\n /**\n * Positions the tooltip relative to the mouse cursor. Only available for top and bottom kbqPlacement.\n * Does not work with kbqPlacementPriority.\n */\n relativeToPointer: boolean = false;\n\n /**\n * Positions the tooltip relative to the text caret of the field it is attached to, following it while the\n * user types, moves the caret and scrolls the field. Anchors to the selection whenever there is one.\n *\n * Every placement is available, unlike with `kbqRelativeToPointer`: the caret is anchored as a rectangle,\n * so the usual fallback placements keep the tooltip on screen. Wins when both inputs are enabled.\n *\n * The field is the host element itself when it is editable, otherwise the first editable it wraps.\n */\n relativeToCaret: boolean = false;\n\n /** What the tooltip is vertically anchored to while `kbqRelativeToCaret` is enabled. */\n relativeToCaretVertical: KbqCaretVerticalAnchor = 'auto';\n\n /** Input (`kbqPlacementPriority`) that sets the ordered fallback placements; reflects the current `placementPriority`. */\n get tooltipPlacementPriority() {\n return this.placementPriority;\n }\n\n set tooltipPlacementPriority(value) {\n super.updatePlacementPriority(value);\n }\n\n /** Input (`kbqTooltip`) with the tooltip content — a string or a template. Updating it refreshes an open tooltip. */\n get content(): string | TemplateRef<unknown> {\n return this._content;\n }\n\n set content(content: string | TemplateRef<unknown>) {\n this._content = content;\n\n this.updateData();\n }\n\n /**\n * Input (`kbqTooltipDisabled`) controlling whether the tooltip is disabled; setting it to `true` hides it.\n * `undefined` leaves the decision to the trigger, like an unset input.\n *\n * Reads back the *effective* state, which for triggers that derive one of their own (see\n * `derivedDisabledWins`) is not necessarily the value that was written.\n */\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: BooleanInput) {\n this.explicitlyDisabled = value === undefined ? undefined : coerceBooleanProperty(value);\n\n this.applyDisabled();\n }\n\n /**\n * Whether the state this trigger derives means *there is nothing to show*, so an explicit\n * `kbqTooltipDisabled=\"false\"` cannot override it, as for a hint that repeats text the host never clipped.\n * Otherwise the explicit value wins in both directions, so `false` on a wrapped control that is not disabled\n * still asks for a tooltip.\n *\n * @docs-private\n */\n protected readonly derivedDisabledWins: boolean = false;\n\n // Kept apart so the consumer's binding and the state the trigger derives cannot overwrite each other,\n // whichever order they are written in; `foldDisabled()` combines them.\n private explicitlyDisabled: boolean | undefined;\n private derivedDisabled: boolean | undefined;\n\n /** Input (`kbqEnterDelay`) — delay in milliseconds before the tooltip is shown. Defaults to `400`. */\n enterDelay = defaultEnterDelay;\n /** Input (`kbqLeaveDelay`) — delay in milliseconds before the tooltip is hidden. Defaults to `0`. */\n leaveDelay = 0;\n\n /** Input (`kbqTrigger`) with the comma-separated trigger events. An empty value resets to hover + focus and rebinds listeners. */\n get trigger(): string {\n return this._trigger;\n }\n\n set trigger(value: string) {\n if (value) {\n this._trigger = value;\n } else {\n this._trigger = `${PopUpTriggers.Hover}, ${PopUpTriggers.Focus}`;\n }\n\n this.initListeners();\n }\n\n /** Backing field for `trigger`; defaults to hover + focus. */\n protected _trigger = `${PopUpTriggers.Hover}, ${PopUpTriggers.Focus}`;\n\n /** Input (`kbqTooltipClass`) with an extra CSS class applied to the tooltip; updating it refreshes the class map. */\n get customClass(): string {\n return this._customClass || '';\n }\n\n set customClass(value: string) {\n if (value) {\n this._customClass = value;\n\n this.updateClassMap();\n } else {\n this._customClass = '';\n }\n }\n\n /** Input (`kbqTooltipContext`) with the context object passed to a template tooltip; updating it refreshes the open tooltip. */\n get context(): unknown {\n return this._context;\n }\n\n set context(ctx: unknown) {\n this._context = ctx;\n this.updateData();\n }\n\n /** Backing field for `context`. */\n private _context: unknown = null;\n\n /** Input (`kbqTooltipColor`) with the tooltip color theme. Defaults to `KbqComponentColors.Contrast`. */\n get color(): KbqComponentColors | string {\n return this._color;\n }\n\n set color(value: KbqComponentColors | string) {\n this._color = value || KbqComponentColors.Contrast;\n }\n\n /** CSS class the current `color` maps to. */\n protected get colorClass(): string {\n return `kbq-${this._color}`;\n }\n\n /** Backing field for `color`; defaults to `KbqComponentColors.Contrast`. */\n private _color: KbqComponentColors | string = KbqComponentColors.Contrast;\n\n /** Input (`kbqTooltipArrow`) — whether to render the tooltip's arrow/pointer. Defaults to `false`. */\n arrow: boolean = false;\n\n /**\n * Input (`kbqTooltipArrowCentered`) — centers the arrow on the trigger while preserving the panel placement.\n * Requires a visible arrow. Defaults to `false`.\n */\n override arrowCentered = false;\n\n /**\n * Input (`kbqTooltipOffset`) — distance in pixels between the tooltip and its trigger. `null` keeps\n * the gap of the stylesheet. Defaults to the `offset` of {@link KBQ_TOOLTIP_DEFAULT_OPTIONS}, when a\n * provider in scope set one. Inside a provider scope such as the navbar's, `null`/`undefined` restores\n * that inherited default.\n */\n offset: number | null = this.defaultOptions.offset ?? null;\n\n /** Output (`kbqPlacementChange`) that emits the new placement whenever the tooltip repositions. */\n readonly placementChange = new EventEmitter<KbqPopUpPlacementValues>();\n\n /** @docs-private */\n readonly placementChangeOutput = outputFromObservable(this.placementChange, { alias: 'kbqPlacementChange' });\n\n /** Output (`kbqVisibleChange`) that emits when the tooltip's visibility changes. */\n readonly visibleChange = new EventEmitter<boolean>();\n\n /** @docs-private */\n readonly visibleChangeOutput = outputFromObservable(this.visibleChange, { alias: 'kbqVisibleChange' });\n\n /** Whether the configured trigger list includes the `click` trigger. */\n private get hasClickInTrigger(): boolean {\n return this.trigger.includes(PopUpTriggers.Click);\n }\n\n /** @docs-private */\n protected originSelector = '.kbq-tooltip';\n\n /** @docs-private */\n protected overlayConfig: OverlayConfig = {\n panelClass: [TOOLTIP_PANEL_CLASS, ...coercePanelClasses(this.defaultOptions.panelClass)]\n };\n\n /**\n * Visual variant of the tooltip. Accepts `'default'` | `'warning'` | `'extended'`.\n * Replaces the removed `KbqWarningTooltipTrigger` and `KbqExtendedTooltipTrigger`\n * subclasses — to render a warning tooltip use `kbqTooltipModifier=\"warning\"`,\n * and `kbqTooltipModifier=\"extended\"` for the extended variant (combine with `kbqTooltipHeader`).\n */\n modifier: KbqEnumValues<TooltipModifier> = TooltipModifier.Default;\n\n /**\n * Header text or template, rendered above the tooltip content. Only meaningful with\n * `kbqTooltipModifier=\"extended\"`. Replaces the removed `KbqExtendedTooltipTrigger.header`.\n */\n header: string | TemplateRef<unknown>;\n\n /**\n * Hands each bound input to its member, and pushes a later change of `modifier`, `header`, `arrow`,\n * `arrowCentered` or `offset` — plain fields — into an open tooltip, which would otherwise show stale data\n * until the next show/hide cycle.\n */\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member, a bound `undefined` restoring the\n // member's default; unbound, it leaves what code wrote.\n if (changes['triggerInput']) {\n this.trigger = this.triggerInput() ?? '';\n }\n\n if (changes['hideWithTimeoutInput']) {\n const hideWithTimeout = this.hideWithTimeoutInput();\n\n if (hideWithTimeout !== undefined) this.hideWithTimeout = hideWithTimeout;\n }\n\n if (changes['enterDelayInput']) {\n this.enterDelay = this.enterDelayInput() ?? defaultEnterDelay;\n }\n\n if (changes['leaveDelayInput']) {\n this.leaveDelay = this.leaveDelayInput() ?? 0;\n }\n\n if (changes['relativeToPointerInput']) {\n const relativeToPointer = this.relativeToPointerInput();\n\n if (relativeToPointer !== undefined) this.relativeToPointer = relativeToPointer;\n }\n\n if (changes['relativeToCaretInput']) {\n const relativeToCaret = this.relativeToCaretInput();\n\n if (relativeToCaret !== undefined) this.relativeToCaret = relativeToCaret;\n }\n\n if (changes['relativeToCaretVerticalInput']) {\n this.relativeToCaretVertical = this.relativeToCaretVerticalInput() ?? 'auto';\n }\n\n if (changes['contentInput']) {\n this.content = this.contentInput() ?? '';\n }\n\n if (changes['headerInput']) {\n this.header = this.headerInput() ?? '';\n }\n\n if (changes['modifierInput']) {\n this.modifier = this.modifierInput() ?? TooltipModifier.Default;\n }\n\n if (changes['contextInput']) {\n this.context = this.contextInput();\n }\n\n if (changes['customClassInput']) {\n this.customClass = this.customClassInput() ?? '';\n }\n\n if (changes['colorInput']) {\n this.color = this.colorInput() ?? KbqComponentColors.Contrast;\n }\n\n if (changes['arrowInput']) {\n const arrow = this.arrowInput();\n\n if (arrow !== undefined) this.arrow = arrow;\n }\n\n if (changes['arrowCenteredInput']) {\n this.arrowCentered = this.arrowCenteredInput() ?? false;\n }\n\n if (changes['offsetInput']) {\n this.offset = this.offsetInput() ?? this.defaultOptions.offset ?? null;\n }\n\n if (changes['disabledInput']) {\n // A bound `undefined` hands the decision back to the state the trigger derives.\n this.disabled = this.disabledInput();\n }\n\n if (changes['tooltipPlacementPriorityInput']) {\n this.tooltipPlacementPriority = this.tooltipPlacementPriorityInput() ?? null;\n }\n\n if (changes['tooltipPlacementInput']) {\n this.tooltipPlacement = this.tooltipPlacementInput() ?? PopUpPlacements.Top;\n }\n\n if (changes['tooltipVisibleInput']) {\n this.tooltipVisible = this.tooltipVisibleInput() ?? false;\n }\n\n if (!this.instance) return;\n\n if (changes['modifierInput'] && !changes['modifierInput'].firstChange) {\n this.updateClassMap();\n }\n\n if (\n (changes['headerInput'] && !changes['headerInput'].firstChange) ||\n (changes['arrowInput'] && !changes['arrowInput'].firstChange) ||\n (changes['arrowCenteredInput'] && !changes['arrowCenteredInput'].firstChange) ||\n (changes['offsetInput'] && !changes['offsetInput'].firstChange)\n ) {\n this.updateData();\n }\n }\n\n /**\n * Whether this tooltip takes part in the \"only one tooltip is visible at a time\" group.\n *\n * Read through the `trigger` getter on purpose: `KbqTitleDirective` always reports `hover`, so title\n * tooltips participate, while `kbqValidationTooltip` consumers (datepicker, timepicker, inline-edit)\n * assign `trigger = 'manual'` and therefore stay out of the group.\n */\n private get participatesInSingleInstance(): boolean {\n return this.singleInstance() && this.hasInteractiveTrigger;\n }\n\n /**\n * Whether `kbqTrigger` contains at least one user-driven event, i.e. the tooltip is not driven purely\n * imperatively. `manual`/`none` tooltips (the validation hints of datepicker, timepicker and inline-edit)\n * bind no listeners and are expected to stay pinned while the user keeps interacting elsewhere.\n */\n private get hasInteractiveTrigger(): boolean {\n return INTERACTIVE_TRIGGERS.some((name) => this.trigger.includes(name));\n }\n\n /**\n * Whether the tooltip is muted because a pop-up on the same element has taken over the anchor.\n *\n * Set when that pop-up opens and released only once the pointer or the focus genuinely leaves the host,\n * never on the pop-up closing. Both matter: a pop-up restores focus to its trigger when it closes (see\n * `KbqPopoverComponent.onEscape`), and removing its backdrop replays `mouseenter` on the trigger without\n * the pointer having moved — either would otherwise pop the tooltip up out of nowhere. A pointer that left\n * the host while the pop-up was open (see `pointerLeftWhileMuted`) releases it by coming back once the\n * pop-up is closed.\n */\n private mutedBySiblingPopup = false;\n\n /**\n * Whether the pointer left the host while muted. A backdrop inserted under the resting pointer fires\n * `mouseleave` as well, but with the pointer still within the host — that one does not count.\n */\n private pointerLeftWhileMuted = false;\n\n /**\n * Origin of the last focus event on the host, cached from the `FocusMonitor` stream so the focus trigger\n * can tell a keyboard focus from the one a click leaves behind.\n */\n protected lastFocusOrigin: FocusOrigin = null;\n\n /** @docs-private */\n readonly triggerInput = input<string | undefined>(undefined, { alias: 'kbqTrigger' });\n\n /** @docs-private */\n readonly hideWithTimeoutInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'hideWithTimeout',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly enterDelayInput = input<number | undefined>(undefined, { alias: 'kbqEnterDelay' });\n\n /** @docs-private */\n readonly leaveDelayInput = input<number | undefined>(undefined, { alias: 'kbqLeaveDelay' });\n\n /** @docs-private */\n readonly relativeToPointerInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'kbqRelativeToPointer',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly relativeToCaretInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'kbqRelativeToCaret',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly relativeToCaretVerticalInput = input<KbqCaretVerticalAnchor | undefined>(undefined, {\n alias: 'kbqRelativeToCaretVertical'\n });\n\n /** @docs-private */\n readonly contentInput: InputSignal<KbqTooltipTrigger['content'] | undefined> = input<\n KbqTooltipTrigger['content'] | undefined\n >(undefined, {\n alias: 'kbqTooltip'\n });\n\n /** @docs-private */\n readonly headerInput: InputSignal<KbqTooltipTrigger['header'] | undefined> = input<\n KbqTooltipTrigger['header'] | undefined\n >(undefined, {\n alias: 'kbqTooltipHeader'\n });\n\n /** @docs-private */\n readonly modifierInput = input<KbqEnumValues<TooltipModifier> | undefined>(undefined, {\n alias: 'kbqTooltipModifier'\n });\n\n /** @docs-private */\n readonly contextInput = input<NonNullable<unknown> | null | undefined>(undefined, { alias: 'kbqTooltipContext' });\n\n /** @docs-private */\n readonly customClassInput = input<string | undefined>(undefined, { alias: 'kbqTooltipClass' });\n\n /** @docs-private */\n readonly colorInput = input<KbqComponentColors | string | undefined>(undefined, { alias: 'kbqTooltipColor' });\n\n /** @docs-private */\n readonly arrowInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'kbqTooltipArrow',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly arrowCenteredInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'kbqTooltipArrowCentered',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly offsetInput = input<number | undefined, number | string | null | undefined>(undefined, {\n alias: 'kbqTooltipOffset',\n transform: kbqOptionalNumberAttribute\n });\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'kbqTooltipDisabled',\n // `booleanAttribute` would read a bound `undefined` as `false`, an explicit request for the tooltip.\n transform: (value: boolean | string | null | undefined) =>\n value === undefined ? undefined : booleanAttribute(value)\n });\n\n /** @docs-private */\n readonly tooltipPlacementPriorityInput = input<string | string[] | null | undefined>(undefined, {\n alias: 'kbqPlacementPriority'\n });\n\n /** @docs-private */\n readonly tooltipPlacementInput = input<KbqPopUpPlacementValues | undefined>(undefined, { alias: 'kbqPlacement' });\n\n /** @docs-private */\n readonly tooltipVisibleInput = input<boolean | undefined>(undefined, { alias: 'kbqVisible' });\n\n /**\n * Sets up an effect that mirrors a `forDisabledComponent`'s disabled signal: when that component is disabled it\n * makes the host focusable (so the tooltip can still be triggered) and enables the tooltip, otherwise disables it.\n *\n * Also joins the \"only one tooltip is visible at a time\" group, mutes the tooltip while a pop-up on the\n * same element is open, tracks the focus origin and keeps the trigger's `aria-describedby` in sync with the\n * open tooltip. All of this wiring lives here rather than in `ngAfterViewInit`/`ngOnDestroy` because\n * several subclasses override those hooks: `KbqTitleDirective` and `KbqEllipsisCenterDirective` skip\n * `super.ngAfterViewInit()`, and `KbqPasswordToggle` skips `super` in both hooks entirely. `destroyRef`\n * additionally covers a trigger destroyed while its tooltip is still visible — that path disposes the\n * overlay without emitting `visibleChange(false)`.\n */\n constructor() {\n super();\n\n merge(...this.siblingPopups.map(({ openedChange }) => openedChange))\n .pipe(\n filter(Boolean),\n // A tooltip shown imperatively (`manual`/`none`) is not competing for the anchor with the\n // user — it is pinned on purpose, like the validation hints of datepicker and timepicker.\n filter(() => this.hasInteractiveTrigger),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n this.mutedBySiblingPopup = true;\n this.pointerLeftWhileMuted = false;\n\n this.hideAsInactive();\n });\n\n // CDK dispatches the focus origin from a capture-phase listener on the document, so it is already\n // recorded by the time the trigger's own `focus` listener runs.\n this.focusMonitor\n .monitor(this.elementRef.nativeElement)\n .pipe(takeUntilDestroyed())\n .subscribe((origin) => (this.lastFocusOrigin = origin));\n\n this.visibleChange.pipe(takeUntilDestroyed()).subscribe((visible) => {\n if (visible) {\n this.describeTrigger();\n\n if (this.participatesInSingleInstance) {\n this.tooltipRegistry.setVisible(this);\n }\n } else {\n this.undescribeTrigger();\n this.tooltipRegistry.clearVisible(this);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.undescribeTrigger();\n this.stopListeningForEscape();\n this.tooltipRegistry.clearVisible(this);\n });\n\n effect(() => {\n const forDisabledComponent = this.forDisabledComponent();\n\n if (!forDisabledComponent) return;\n\n const disabled = forDisabledComponent.disabledSignal();\n const nativeElement = this.getNativeElement();\n\n if (disabled) {\n // The wrapped control drops out of the tab order once it is disabled, so the wrapper takes its\n // place — otherwise the explanation for why the control is unavailable is keyboard-unreachable.\n this.renderer.setAttribute(nativeElement, 'tabindex', '0');\n this.renderer.setAttribute(nativeElement, 'role', 'group');\n this.renderer.addClass(nativeElement, 'kbq-tooltip-trigger_for-disabled');\n } else {\n this.renderer.setAttribute(nativeElement, 'tabindex', '-1');\n this.renderer.removeAttribute(nativeElement, 'role');\n this.renderer.removeClass(nativeElement, 'kbq-tooltip-trigger_for-disabled');\n }\n\n // Derived, not assigned: an explicit `kbqTooltipDisabled` binding still wins, whichever of the\n // two runs first.\n this.setDerivedDisabled(!disabled);\n });\n }\n\n /** Hides the tooltip when a parent pop-up closes. */\n ngAfterViewInit(): void {\n this.parentPopup?.closedStream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.hide());\n }\n\n /** Stops focus monitoring on the host element and runs the base-class teardown. */\n ngOnDestroy() {\n this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n\n super.ngOnDestroy();\n }\n\n /**\n * Records the state the subclass derived from its own content and re-folds it with the consumer's\n * `kbqTooltipDisabled`. Subclasses call this instead of writing `disabled`, which would be read back as\n * the consumer's own value and lose whichever of the two was written first.\n *\n * @docs-private\n */\n protected setDerivedDisabled(value: boolean): void {\n this.derivedDisabled = value;\n\n this.applyDisabled();\n }\n\n private foldDisabled(): boolean {\n if (this.derivedDisabledWins) {\n return this.explicitlyDisabled === true || (this.derivedDisabled ?? false);\n }\n\n return this.explicitlyDisabled ?? this.derivedDisabled ?? false;\n }\n\n /** Recomputes the effective `disabled` and closes an open tooltip that just lost its reason to be open. */\n private applyDisabled(): void {\n const next = this.foldDisabled();\n\n // Both producers re-state their verdict on every resize, content mutation and pointer sweep, and\n // most of those repeat the previous answer. Without this the repeats still reach `hide()`, which\n // re-enters the Angular zone from a `ResizeObserver` callback CDK deliberately runs outside it and\n // schedules a tick — once per visible host, on a directive that sits on every dropdown item, list\n // option and tree option.\n if (next === this._disabled) return;\n\n this._disabled = next;\n\n if (this._disabled) {\n this.hide();\n }\n }\n\n /**\n * Shows the tooltip after `delay` ms. Suppresses showing while a pop-up on the same element holds the\n * anchor or on a focus trigger that did not originate from the keyboard, and applies cursor-relative\n * positioning when `relativeToPointer` is enabled.\n */\n show(delay: number = this.enterDelay) {\n if (this.mutedBySiblingPopup) {\n const pointerReturned =\n this.triggerName === 'mouseenter' && this.pointerLeftWhileMuted && !this.siblingPopupAttached;\n\n if (!pointerReturned) return;\n\n this.mutedBySiblingPopup = false;\n }\n\n // Checked before the overlay exists: `KbqTooltipComponent.show` bails on empty content, but by then\n // the trigger has already attached the pane, leaving an empty, invisible overlay latched open — and\n // `KbqPopUpTrigger.show` returns early for as long as it is there, so the tooltip never recovers.\n if (!this.content) {\n return;\n }\n\n // `isAttached` is checked directly, not just the `mutedBySiblingPopup` latch: `openedChange` can lag\n // it by a real delay — e.g. select/tree-select only emit it after the render that shows their panel,\n // and a sibling's own `hide()` can cancel a still-pending `show()` outright so it never emits at all\n // (KbqPopUp.show/hide, pop-up.ts). `isAttached` itself is guaranteed synchronous by the\n // `KbqSiblingPopup` contract, so checking it here closes that gap regardless of the cause. Gated by\n // `hasInteractiveTrigger` for the same reason as the constructor subscription: a `manual`/`none`\n // tooltip is driven imperatively and must not be muted by a sibling at all.\n if (this.hasInteractiveTrigger && this.siblingPopupAttached) {\n return;\n }\n\n if (this.triggerName === 'focus' && !FOCUS_ORIGINS_THAT_SHOW.includes(this.lastFocusOrigin)) {\n return;\n }\n\n super.show(delay);\n\n if (this.relativeToCaret) {\n this.applyRelativeToCaret();\n } else if (this.relativeToPointer) {\n this.applyRelativeToPointer();\n } else {\n this.setOrigin(null);\n }\n }\n\n /**\n * Hides the tooltip after `delay` ms and, when the user has genuinely left the host, un-mutes a tooltip\n * that a pop-up on the same element had muted.\n *\n * `mouseleave` and `blur` are the release signals because the base class binds `hide` to both regardless\n * of whether the tooltip is currently visible. A pop-up that is still attached does not count: its\n * backdrop steals the hover from the trigger while the pointer stands still, and that `mouseleave` must\n * not be mistaken for the user leaving.\n */\n hide(delay: number = this.leaveDelay) {\n if (RELEASE_TRIGGERS.includes(this.triggerName) && !this.siblingPopupAttached) {\n this.mutedBySiblingPopup = false;\n }\n\n super.hide(delay);\n }\n\n /**\n * Whether a pop-up on the same element is attached. Untracked: the siblings keep it in signals, and a consumer\n * `effect()` that shows or hides the tooltip must not run again whenever one of them opens or closes.\n */\n private get siblingPopupAttached(): boolean {\n return untracked(() => this.siblingPopups.some(({ isAttached }) => isAttached));\n }\n\n /**\n * Records whether the pointer left the host while muted, see `pointerLeftWhileMuted`.\n *\n * @docs-private\n */\n protected trackPointerLeave(event: MouseEvent): void {\n if (!this.mutedBySiblingPopup) return;\n\n const { left, right, top, bottom } = this.elementRef.nativeElement.getBoundingClientRect();\n\n this.pointerLeftWhileMuted =\n // A box covers [left, right) and [top, bottom): a point on its right or bottom edge is outside it.\n event.clientX < left || event.clientX >= right || event.clientY < top || event.clientY >= bottom;\n }\n\n /**\n * Hides the tooltip because something else took its place — another tooltip became visible, or a pop-up\n * anchored to the same element opened.\n *\n * Goes straight to the pop-up instead of `hide()`: `hide()` silently no-ops when the last recorded\n * `triggerName` is `mouseleave` and the pop-up itself is hovered. Hiding through the instance keeps\n * `visibleChange(false)` firing, so `isOpen`, `kbqVisibleChange` and the `kbqVisible` input stay in sync.\n * Does nothing when the tooltip is already detached or when closing is prevented.\n *\n * @docs-private\n */\n hideAsInactive(): void {\n if (this.preventClose) return;\n\n this.ngZone.run(() => this.instance?.hide(0));\n }\n\n /**\n * Shows the tooltip next to the cursor position of the given mouse event, anchoring it to the event's\n * `currentTarget` instead of the directive's own host element.\n *\n * Use it when the trigger cannot be declared in the template — for instance for a tooltip shared by the\n * cells of a virtualized table. The directive still has to be created in an injection context.\n */\n showForMouseEvent(event: MouseEvent) {\n if (!(event.currentTarget instanceof HTMLElement)) return;\n\n // The same guard `show()` carries, repeated because this path reaches `super.show()` directly and\n // would otherwise latch an empty pane open — with it attached, `KbqPopUpTrigger.show` returns early\n // and the tooltip never recovers, while the pane keeps swallowing the document keydown listener.\n if (!this.content) return;\n\n this.triggerName = 'mouseenter';\n this.mouseEvent = event;\n this.undescribeTrigger();\n this.setExternalNativeElement(event.currentTarget);\n\n super.show();\n\n // Re-anchoring an open tooltip has to move the description itself: the `visibleChange(true)` edge that\n // normally drives it is swallowed by `distinctUntilChanged` while the pop-up stays attached. A tooltip\n // that is not open yet is left to that edge, which describes the element anchored by then.\n if (untracked(() => this.isOpen)) {\n this.describeTrigger();\n }\n\n this.applyRelativeToPointer();\n }\n\n /**\n * Shows the tooltip anchored to the given element instead of the directive's own host element.\n *\n * Use it when the trigger cannot be declared in the template. The directive still has to be created in an\n * injection context:\n *\n * ```ts\n * const tooltip = runInInjectionContext(injector, () => new KbqTooltipTrigger());\n * tooltip.showForElement(element);\n * ```\n *\n * Does nothing while the tooltip is disabled or has no content — there is no overlay to anchor then.\n */\n showForElement(element: HTMLElement) {\n this.show();\n\n if (!this.strategy) return;\n\n this.setExternalNativeElement(element);\n this.setOrigin(element);\n\n if (this.overlayRef?.hasAttached()) {\n this.updatePosition();\n this.overlayRef.updatePosition();\n }\n\n if (untracked(() => this.isOpen)) {\n this.describeTrigger();\n }\n }\n\n /**\n * Replaces the CSS classes put on the tooltip's overlay pane.\n *\n * Exists for components that own a tooltip through `hostDirectives` instead of extending this class and\n * therefore cannot reach the protected overlay configuration (e.g. `KbqNavbarItem`).\n *\n * @docs-private\n */\n setOverlayPanelClass(panelClass: string | string[]): void {\n this.overlayConfig.panelClass = panelClass;\n }\n\n /** @docs-private */\n updateData() {\n if (!this.instance) {\n return;\n }\n\n this.instance.id = this.tooltipId;\n this.instance.content = this.content;\n this.instance.header = this.header;\n // `!= null` rather than a truthy check: `0`, `''` and `false` are legitimate template contexts, and\n // dropping them left the template rendering the previous context instead.\n this.instance.context = this.context != null ? { $implicit: this.context } : null;\n this.instance.arrow = this.arrow;\n this.instance.arrowCentered = this.arrowCentered;\n this.instance.offset = this.offset;\n this.instance.detectChanges();\n // The margins live on the rendered tooltip element, so re-applying them is the only way a changed\n // `kbqTooltipOffset` reaches an already open tooltip.\n this.instance.applyOffset();\n this.updatePosition(true);\n }\n\n /** @docs-private */\n closingActions() {\n return merge(\n this.hasClickInTrigger ? this.overlayRef!.outsidePointerEvents() : EMPTY,\n this.overlayRef!.detachments()\n );\n }\n\n /** @docs-private */\n getOverlayHandleComponentType(): Type<KbqTooltipComponent> {\n return KbqTooltipComponent;\n }\n\n /** @docs-private */\n updateClassMap(newPlacement: string = this.placement) {\n if (!this.instance) {\n return;\n }\n\n this.instance.updateClassMap(POSITION_TO_CSS_MAP[newPlacement], `${this.customClass} ${this.colorClass}`, {\n modifier: this.modifier\n });\n }\n\n /**\n * Arms the `Escape` listener for as long as the tooltip overlay is attached, so that `Escape` dismisses\n * the tooltip.\n *\n * The inherited `keydownHandler` is a host binding on the trigger and therefore only fires while the\n * trigger itself has focus, which a hover-opened tooltip never has.\n *\n * @docs-private\n */\n createOverlay(): OverlayRef {\n if (this.overlayRef) {\n return this.overlayRef;\n }\n\n // Rebuilt here rather than pushed into `overlayConfig` from a lifecycle hook: five subclasses skip\n // `super.ngAfterViewInit()`, and appending to the array made the class impossible to take back off.\n this.overlayConfig = { ...this.overlayConfig, panelClass: this.getPanelClasses() };\n\n const overlayRef = super.createOverlay();\n\n overlayRef\n .attachments()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.listenForEscape();\n this.startTrackingCaret();\n });\n overlayRef\n .detachments()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.stopListeningForEscape();\n this.stopTrackingCaret();\n });\n\n return overlayRef;\n }\n\n /** Teardown of the document-level `Escape` listener, or `null` while the overlay is detached. */\n private unbindEscapeListener: (() => void) | null = null;\n\n /**\n * Binds a document-level `Escape` listener, outside the zone and at most once per attach.\n *\n * An open tooltip is the topmost layer, so `Escape` dismisses it first (WAI-ARIA tooltip pattern, WCAG 1.4.13):\n * the listener captures the key and marks it spent, and a modal or a panel that closes on `Escape` lets it\n * pass. The key is not stopped, so a control that closes a popup of its own on it still does.\n *\n * Deliberately not `overlayRef.keydownEvents()`: CDK hands each key to the last attached overlay that has\n * subscribers and stops there, without re-dispatching. A tooltip is by construction the last overlay\n * attached, so subscribing would make it swallow `Escape` for the modal, sidepanel, dropdown or inline\n * edit underneath it — including for the imperative tooltips that drop the key instead of acting on it.\n */\n private listenForEscape(): void {\n if (this.unbindEscapeListener) return;\n\n this.ngZone.runOutsideAngular(() => {\n this.unbindEscapeListener = this.renderer.listen(\n 'document',\n 'keydown',\n (event: KeyboardEvent) => {\n // An imperatively driven tooltip (`manual`/`none`) is pinned on purpose — the validation hints\n // of datepicker, timepicker and inline-edit must survive an unrelated Escape.\n if (event.keyCode !== ESCAPE || !this.isOpen || !this.hasInteractiveTrigger || this.preventClose) {\n return;\n }\n\n event.preventDefault();\n this.hideAsInactive();\n },\n { capture: true }\n );\n });\n }\n\n /** Removes the document-level `Escape` listener. */\n private stopListeningForEscape(): void {\n this.unbindEscapeListener?.();\n this.unbindEscapeListener = null;\n }\n\n /** Panel classes of the tooltip overlay, including the pointer-events opt-out while it is enabled. */\n private getPanelClasses(): string[] {\n const configured = this.overlayConfig.panelClass;\n const classes = (Array.isArray(configured) ? configured : configured ? [configured] : []).filter(\n (name) => name !== IGNORE_POINTER_EVENTS_PANEL_CLASS\n );\n\n // A tooltip without an interactive trigger opts out regardless of the input: hovering its pane\n // neither keeps it open nor closes it, so the hoverability the default protects does not exist here,\n // and a pointer-capturing pane only blocks what it floats over. The validation hints of datepicker,\n // timepicker and inline-edit sit above their own field for `validationTooltipHideDelay` (3s).\n const ignorePointerEvents = this.ignoreTooltipPointerEvents() || !this.hasInteractiveTrigger;\n\n return ignorePointerEvents ? [...classes, IGNORE_POINTER_EVENTS_PANEL_CLASS] : classes;\n }\n\n /**\n * Points the trigger's `aria-describedby` at the open tooltip, so assistive technology announces the hint\n * together with the control it explains.\n *\n * Written through the renderer rather than a host binding because `showForMouseEvent` re-anchors the\n * trigger to a foreign element, which a host binding would never reach. Existing ids are preserved.\n */\n private describeTrigger(): void {\n if (this.describesHostText) return;\n\n const nativeElement = this.getNativeElement();\n const ids = this.getDescribedByIds(nativeElement);\n\n // Recorded rather than resolved again on the way out: `showForMouseEvent` re-anchors the trigger to\n // another element, and un-describing the current one would leave the id dangling on the previous.\n this.describedElement = nativeElement;\n\n if (ids.includes(this.tooltipId)) return;\n\n this.renderer.setAttribute(nativeElement, 'aria-describedby', [...ids, this.tooltipId].join(' '));\n }\n\n /** Removes this tooltip's id from the described element's `aria-describedby`, keeping any other ids. */\n private undescribeTrigger(): void {\n const nativeElement = this.describedElement;\n\n if (!nativeElement) return;\n\n this.describedElement = null;\n\n const ids = this.getDescribedByIds(nativeElement).filter((id) => id !== this.tooltipId);\n\n if (ids.length) {\n this.renderer.setAttribute(nativeElement, 'aria-describedby', ids.join(' '));\n } else {\n this.renderer.removeAttribute(nativeElement, 'aria-describedby');\n }\n }\n\n /** Element whose `aria-describedby` points at this tooltip, or `null` while nothing is described. */\n private describedElement: HTMLElement | null = null;\n\n /** Ids currently listed in the element's `aria-describedby`. */\n private getDescribedByIds(element: HTMLElement): string[] {\n return (element.getAttribute('aria-describedby') || '').split(/\\s+/).filter(Boolean);\n }\n\n /**\n * Whether the tooltip only repeats the text the host already shows — which is what `kbq-title` does.\n * Describing those would make assistive technology read the same label twice.\n */\n private get describesHostText(): boolean {\n return typeof this.content === 'string' && this.content.trim() === this.getNativeElement().textContent?.trim();\n }\n\n /** Teardown of the listeners following the caret, or `null` while the tooltip is not tracking one. */\n private stopCaretListeners: (() => void) | null = null;\n\n /**\n * Field whose caret the tooltip is anchored to: the host element when it is editable itself — which is\n * how the validation hints are written — otherwise the first editable element it wraps.\n */\n private getCaretAnchor(): KbqTextAnchor | null {\n const host = this.getNativeElement();\n\n return host.matches(EDITABLE_SELECTOR) ? host : host.querySelector<HTMLElement>(EDITABLE_SELECTOR);\n }\n\n /**\n * Origin that stays on the caret of the field while `kbqRelativeToCaret` is enabled, and on the host element\n * otherwise — so switching the input off while the tooltip is open does not leave it on the caret.\n */\n private readonly caretOrigin = kbqCreateCaretOrigin(() => this.measureCaretAnchor());\n\n /**\n * Anchors the overlay to the caret of the field.\n *\n * @docs-private\n */\n protected applyRelativeToCaret() {\n this.setOrigin(this.caretOrigin);\n }\n\n /** @docs-private */\n protected getAnchorSize(): { width: number; height: number } {\n return this.relativeToCaret ? this.caretOrigin : super.getAnchorSize();\n }\n\n /** @docs-private */\n protected override getOriginCenter(): { x: number; y: number } {\n if (this.relativeToCaret) {\n const { x, y, width, height } = this.caretOrigin;\n\n return { x: x + width / 2, y: y + height / 2 };\n }\n\n return super.getOriginCenter();\n }\n\n /**\n * Rectangle the tooltip is anchored to: the caret or selection of the field — spanning the whole field\n * vertically when it anchors to the field — or the host element's box when the caret cannot be located or\n * `kbqRelativeToCaret` is off.\n */\n private measureCaretAnchor(): KbqCaretRect {\n const anchor = this.relativeToCaret ? this.getCaretAnchor() : null;\n const rect = anchor && kbqGetSelectionRect(anchor);\n\n if (!anchor || !rect) {\n const { left, top, width, height } = this.getNativeElement().getBoundingClientRect();\n\n return { x: left, y: top, width, height };\n }\n\n if (!this.anchorsToField(anchor)) return rect;\n\n const { top, height } = anchor.getBoundingClientRect();\n\n return { x: rect.x, width: rect.width, y: top, height };\n }\n\n /** Whether the tooltip takes its vertical position from the whole field rather than the caret's line. */\n private anchorsToField(anchor: KbqTextAnchor): boolean {\n const vertical = this.relativeToCaretVertical;\n\n return vertical === 'field' || (vertical !== 'line' && anchor.tagName === 'INPUT');\n }\n\n /** Follows the caret for as long as the overlay is attached, outside the zone and at most once per attach. */\n private startTrackingCaret(): void {\n if (this.stopCaretListeners || !this.relativeToCaret) return;\n\n const anchor = this.getCaretAnchor();\n\n if (!anchor) return;\n\n this.ngZone.runOutsideAngular(() => {\n this.stopCaretListeners = kbqListenForCaretMoves(this.renderer, anchor, () => this.repositionAtCaret());\n });\n }\n\n private stopTrackingCaret(): void {\n this.stopCaretListeners?.();\n this.stopCaretListeners = null;\n }\n\n /**\n * Picks the placement again for where the caret is now. The position strategy is locked so that an element-anchored\n * pop-up does not jump when its content changes, and a locked strategy only re-applies the placement chosen on\n * opening; a caret walking to the edge of the screen has to be free to flip the tooltip, so the lock is lifted for\n * this pass.\n */\n private repositionAtCaret(): void {\n if (!this.overlayRef) return;\n\n this.strategy.withLockedPosition(false);\n this.overlayRef.updatePosition();\n this.strategy.withLockedPosition(true);\n }\n\n /** @docs-private */\n protected applyRelativeToPointer() {\n if (\n !this.strategy ||\n ![PopUpPlacements.Top, PopUpPlacements.Bottom].includes(this.placement as PopUpPlacements) ||\n this.triggerName !== 'mouseenter'\n ) {\n this.resetOrigin();\n\n return;\n }\n\n const triggerRects = this.getNativeElement().getBoundingClientRect();\n const point: Point = { x: 0, y: 0 };\n\n if (this.placement === PopUpPlacements.Top) {\n point.x = this.mouseEvent!.x;\n point.y = triggerRects.y;\n } else if (this.placement === PopUpPlacements.Bottom) {\n point.x = this.mouseEvent!.x;\n point.y = triggerRects.y + triggerRects.height;\n }\n\n this.setOrigin(point);\n }\n}\n","<div\n #tooltip\n class=\"kbq-tooltip\"\n role=\"tooltip\"\n [attr.id]=\"id\"\n [class.kbq-tooltip_arrowless]=\"!arrow\"\n [class]=\"classMap\"\n [class.kbq-animations-disabled]=\"animationsDisabled\"\n [class.kbq-tooltip_visible]=\"isVisible()\"\n>\n <div class=\"kbq-tooltip__inner\">\n @if (arrow) {\n <div class=\"kbq-tooltip__arrow\" aria-hidden=\"true\"></div>\n }\n\n @if (header) {\n <div class=\"kbq-tooltip__header\">\n @if (isTemplateRef(header)) {\n <ng-container [ngTemplateOutlet]=\"$any(header)\" [ngTemplateOutletContext]=\"context\" />\n } @else {\n <div>{{ header }}</div>\n }\n </div>\n }\n <div class=\"kbq-tooltip__content\">\n @if (isTemplateRef(content)) {\n <ng-container [ngTemplateOutlet]=\"$any(content)\" [ngTemplateOutletContext]=\"context\" />\n } @else {\n <div>{{ content }}</div>\n }\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { KbqTooltipComponent, KbqTooltipTrigger } from './tooltip.component';\n\nconst COMPONENTS = [\n KbqTooltipComponent,\n KbqTooltipTrigger\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqToolTipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -43,6 +43,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
43
43
  }
44
44
  }]
45
45
  }], propDecorators: { placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: true }] }] } });
46
+ /**
47
+ * Marks the page title of `kbq-top-bar` and sizes it like `size="big"` breadcrumbs, so the bar keeps
48
+ * its height and the text its baseline when a page swaps the trail for a title.
49
+ */
50
+ class KbqTopBarTitle {
51
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTopBarTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
52
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.25", type: KbqTopBarTitle, isStandalone: true, selector: "[kbqTopBarTitle]", host: { classAttribute: "kbq-top-bar-title" }, ngImport: i0 }); }
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTopBarTitle, decorators: [{
55
+ type: Directive,
56
+ args: [{
57
+ selector: '[kbqTopBarTitle]',
58
+ host: {
59
+ class: 'kbq-top-bar-title'
60
+ }
61
+ }]
62
+ }] });
46
63
  /**
47
64
  * Toolbar row for the top of a page or a panel. It expects two `[kbqTopBarContainer]` slots —
48
65
  * `placement="start"` and `placement="end"` — with an optional `[kbqTopBarSpacer]` between them.
@@ -73,7 +90,7 @@ class KbqTopBar {
73
90
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTopBar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
74
91
  /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.25", type: KbqTopBar, isStandalone: true, selector: "kbq-top-bar", inputs: { withShadow: { classPropertyName: "withShadow", publicName: "withShadow", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.kbq-top-bar_with-shadow": "withShadow()", "class.kbq-animations-disabled": "animationsDisabled", "attr.aria-label": "ariaLabel() || null" }, classAttribute: "kbq-top-bar" }, hostDirectives: [{ directive: i1.KbqOverlayLayerExclude }], ngImport: i0, template: `
75
92
  <ng-content />
76
- `, isInline: true, styles: ["@charset \"UTF-8\";.kbq-top-bar{z-index:var(--kbq-top-bar-z-index);display:flex;align-items:center;justify-content:space-between;flex-direction:row;box-sizing:border-box;position:var(--kbq-top-bar-position);inset-block-start:var(--kbq-top-bar-inset-block-start);background-color:var(--kbq-top-bar-background);padding:var(--kbq-top-bar-padding-vertical) var(--kbq-top-bar-padding-horizontal);border-radius:var(--kbq-top-bar-border-radius)}@supports (corner-shape: squircle){.kbq-top-bar{corner-shape:squircle;border-radius:clamp(var(--kbq-top-bar-border-radius) * 1.85,var(--kbq-top-bar-border-radius) * 2.3 - 3.6px,var(--kbq-top-bar-border-radius) * 2)}}.kbq-top-bar.kbq-top-bar_with-shadow{box-shadow:var(--kbq-top-bar-shadow-bottom);transition:box-shadow var(--kbq-top-bar-shadow-transition)}.kbq-top-bar.kbq-top-bar_with-shadow.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-top-bar.kbq-top-bar_with-shadow{animation:none;transition:none}}.kbq-top-bar .kbq-top-bar-spacer{flex:0 0 var(--kbq-top-bar-spacer-min-width)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items,.kbq-top-bar .kbq-top-bar-container:has(>.kbq-overflow-items){gap:unset;overflow:hidden;margin-block:calc(-1 * var(--kbq-size-border-width))}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items{padding:var(--kbq-size-border-width)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items>.kbq-overflow-item:not(:last-of-type),.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items>.kbq-overflow-item:not(:last-of-type){margin-inline-end:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items>.kbq-overflow-item:last-of-type:is(.kbq-overflow-item_always-visible)+.kbq-overflow-items-result,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items>.kbq-overflow-item:last-of-type:is(.kbq-overflow-item_always-visible)+.kbq-overflow-items-result{margin-inline-start:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items .kbq-overflow-items-result:first-child,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items .kbq-overflow-items-result:first-child{margin-inline-end:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-top-bar-container_start{display:flex;gap:var(--kbq-top-bar-container-start-gap);flex:1 1 auto;justify-content:flex-start;min-width:var(--kbq-top-bar-container-start-min-width)}.kbq-top-bar .kbq-top-bar-container.kbq-top-bar-container_end{display:flex;gap:var(--kbq-top-bar-container-end-gap);justify-content:end}.kbq-top-bar{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", "@charset \"UTF-8\";:where(.kbq-top-bar){--kbq-top-bar-z-index: 990;--kbq-top-bar-position: sticky;--kbq-top-bar-inset-block-start: auto;--kbq-top-bar-spacer-min-width: 80px;--kbq-top-bar-padding-vertical: var(--kbq-size-m);--kbq-top-bar-padding-horizontal: var(--kbq-size-xxl);--kbq-top-bar-border-radius: 0;--kbq-top-bar-container-start-gap: 0;--kbq-top-bar-container-start-min-width: 0;--kbq-top-bar-container-end-gap: var(--kbq-size-s);--kbq-top-bar-background: var(--kbq-background-bg);--kbq-top-bar-shadow-bottom: var(--kbq-shadow-overflow-normal-bottom);--kbq-top-bar-shadow-transition: ease-out .3s}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
93
+ `, isInline: true, styles: ["@charset \"UTF-8\";.kbq-top-bar{z-index:var(--kbq-top-bar-z-index);display:flex;align-items:center;justify-content:space-between;flex-direction:row;box-sizing:border-box;position:var(--kbq-top-bar-position);inset-block-start:var(--kbq-top-bar-inset-block-start);background-color:var(--kbq-top-bar-background);padding:var(--kbq-top-bar-padding-vertical) var(--kbq-top-bar-padding-horizontal);border-radius:var(--kbq-top-bar-border-radius)}@supports (corner-shape: squircle){.kbq-top-bar{corner-shape:squircle;border-radius:clamp(var(--kbq-top-bar-border-radius) * 1.85,var(--kbq-top-bar-border-radius) * 2.3 - 3.6px,var(--kbq-top-bar-border-radius) * 2)}}.kbq-top-bar.kbq-top-bar_with-shadow{box-shadow:var(--kbq-top-bar-shadow-bottom);transition:box-shadow var(--kbq-top-bar-shadow-transition)}.kbq-top-bar.kbq-top-bar_with-shadow.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-top-bar.kbq-top-bar_with-shadow{animation:none;transition:none}}.kbq-top-bar .kbq-top-bar-spacer{flex:0 0 var(--kbq-top-bar-spacer-min-width)}.kbq-top-bar .kbq-top-bar-title{font-size:var(--kbq-typography-subheading-font-size);font-style:var(--kbq-typography-subheading-font-style);font-weight:var(--kbq-typography-subheading-font-weight);line-height:var(--kbq-typography-subheading-line-height);font-family:var(--kbq-typography-subheading-font-family);text-transform:var(--kbq-typography-subheading-text-transform);font-feature-settings:var(--kbq-typography-subheading-font-feature-settings);letter-spacing:var(--kbq-typography-subheading-letter-spacing);min-block-size:var(--kbq-top-bar-title-height);line-height:var(--kbq-top-bar-title-height)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items,.kbq-top-bar .kbq-top-bar-container:has(>.kbq-overflow-items){gap:unset;overflow:hidden;margin-block:calc(-1 * var(--kbq-size-border-width))}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items{padding:var(--kbq-size-border-width)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items>.kbq-overflow-item:not(:last-of-type),.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items>.kbq-overflow-item:not(:last-of-type){margin-inline-end:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items>.kbq-overflow-item:last-of-type:is(.kbq-overflow-item_always-visible)+.kbq-overflow-items-result,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items>.kbq-overflow-item:last-of-type:is(.kbq-overflow-item_always-visible)+.kbq-overflow-items-result{margin-inline-start:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items .kbq-overflow-items-result:first-child,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items .kbq-overflow-items-result:first-child{margin-inline-end:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-top-bar-container_start{display:flex;gap:var(--kbq-top-bar-container-start-gap);flex:1 1 auto;justify-content:flex-start;min-width:var(--kbq-top-bar-container-start-min-width)}.kbq-top-bar .kbq-top-bar-container.kbq-top-bar-container_end{display:flex;gap:var(--kbq-top-bar-container-end-gap);justify-content:end}.kbq-top-bar{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", "@charset \"UTF-8\";:where(.kbq-top-bar){--kbq-top-bar-z-index: 990;--kbq-top-bar-position: sticky;--kbq-top-bar-inset-block-start: auto;--kbq-top-bar-spacer-min-width: 80px;--kbq-top-bar-padding-vertical: var(--kbq-size-m);--kbq-top-bar-padding-horizontal: var(--kbq-size-xxl);--kbq-top-bar-border-radius: 0;--kbq-top-bar-title-height: var(--kbq-size-3xl);--kbq-top-bar-container-start-gap: 0;--kbq-top-bar-container-start-min-width: 0;--kbq-top-bar-container-end-gap: var(--kbq-size-s);--kbq-top-bar-background: var(--kbq-background-bg);--kbq-top-bar-shadow-bottom: var(--kbq-shadow-overflow-normal-bottom);--kbq-top-bar-shadow-transition: ease-out .3s}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
77
94
  }
78
95
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTopBar, decorators: [{
79
96
  type: Component,
@@ -87,25 +104,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
87
104
  // `== null`, so `aria-label=""` would otherwise render as an empty attribute, which nulls the
88
105
  // banner landmark's accessible name per the accname algorithm.
89
106
  '[attr.aria-label]': 'ariaLabel() || null'
90
- }, hostDirectives: [KbqOverlayLayerExclude], styles: ["@charset \"UTF-8\";.kbq-top-bar{z-index:var(--kbq-top-bar-z-index);display:flex;align-items:center;justify-content:space-between;flex-direction:row;box-sizing:border-box;position:var(--kbq-top-bar-position);inset-block-start:var(--kbq-top-bar-inset-block-start);background-color:var(--kbq-top-bar-background);padding:var(--kbq-top-bar-padding-vertical) var(--kbq-top-bar-padding-horizontal);border-radius:var(--kbq-top-bar-border-radius)}@supports (corner-shape: squircle){.kbq-top-bar{corner-shape:squircle;border-radius:clamp(var(--kbq-top-bar-border-radius) * 1.85,var(--kbq-top-bar-border-radius) * 2.3 - 3.6px,var(--kbq-top-bar-border-radius) * 2)}}.kbq-top-bar.kbq-top-bar_with-shadow{box-shadow:var(--kbq-top-bar-shadow-bottom);transition:box-shadow var(--kbq-top-bar-shadow-transition)}.kbq-top-bar.kbq-top-bar_with-shadow.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-top-bar.kbq-top-bar_with-shadow{animation:none;transition:none}}.kbq-top-bar .kbq-top-bar-spacer{flex:0 0 var(--kbq-top-bar-spacer-min-width)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items,.kbq-top-bar .kbq-top-bar-container:has(>.kbq-overflow-items){gap:unset;overflow:hidden;margin-block:calc(-1 * var(--kbq-size-border-width))}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items{padding:var(--kbq-size-border-width)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items>.kbq-overflow-item:not(:last-of-type),.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items>.kbq-overflow-item:not(:last-of-type){margin-inline-end:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items>.kbq-overflow-item:last-of-type:is(.kbq-overflow-item_always-visible)+.kbq-overflow-items-result,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items>.kbq-overflow-item:last-of-type:is(.kbq-overflow-item_always-visible)+.kbq-overflow-items-result{margin-inline-start:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items .kbq-overflow-items-result:first-child,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items .kbq-overflow-items-result:first-child{margin-inline-end:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-top-bar-container_start{display:flex;gap:var(--kbq-top-bar-container-start-gap);flex:1 1 auto;justify-content:flex-start;min-width:var(--kbq-top-bar-container-start-min-width)}.kbq-top-bar .kbq-top-bar-container.kbq-top-bar-container_end{display:flex;gap:var(--kbq-top-bar-container-end-gap);justify-content:end}.kbq-top-bar{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", "@charset \"UTF-8\";:where(.kbq-top-bar){--kbq-top-bar-z-index: 990;--kbq-top-bar-position: sticky;--kbq-top-bar-inset-block-start: auto;--kbq-top-bar-spacer-min-width: 80px;--kbq-top-bar-padding-vertical: var(--kbq-size-m);--kbq-top-bar-padding-horizontal: var(--kbq-size-xxl);--kbq-top-bar-border-radius: 0;--kbq-top-bar-container-start-gap: 0;--kbq-top-bar-container-start-min-width: 0;--kbq-top-bar-container-end-gap: var(--kbq-size-s);--kbq-top-bar-background: var(--kbq-background-bg);--kbq-top-bar-shadow-bottom: var(--kbq-shadow-overflow-normal-bottom);--kbq-top-bar-shadow-transition: ease-out .3s}\n"] }]
107
+ }, hostDirectives: [KbqOverlayLayerExclude], styles: ["@charset \"UTF-8\";.kbq-top-bar{z-index:var(--kbq-top-bar-z-index);display:flex;align-items:center;justify-content:space-between;flex-direction:row;box-sizing:border-box;position:var(--kbq-top-bar-position);inset-block-start:var(--kbq-top-bar-inset-block-start);background-color:var(--kbq-top-bar-background);padding:var(--kbq-top-bar-padding-vertical) var(--kbq-top-bar-padding-horizontal);border-radius:var(--kbq-top-bar-border-radius)}@supports (corner-shape: squircle){.kbq-top-bar{corner-shape:squircle;border-radius:clamp(var(--kbq-top-bar-border-radius) * 1.85,var(--kbq-top-bar-border-radius) * 2.3 - 3.6px,var(--kbq-top-bar-border-radius) * 2)}}.kbq-top-bar.kbq-top-bar_with-shadow{box-shadow:var(--kbq-top-bar-shadow-bottom);transition:box-shadow var(--kbq-top-bar-shadow-transition)}.kbq-top-bar.kbq-top-bar_with-shadow.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-top-bar.kbq-top-bar_with-shadow{animation:none;transition:none}}.kbq-top-bar .kbq-top-bar-spacer{flex:0 0 var(--kbq-top-bar-spacer-min-width)}.kbq-top-bar .kbq-top-bar-title{font-size:var(--kbq-typography-subheading-font-size);font-style:var(--kbq-typography-subheading-font-style);font-weight:var(--kbq-typography-subheading-font-weight);line-height:var(--kbq-typography-subheading-line-height);font-family:var(--kbq-typography-subheading-font-family);text-transform:var(--kbq-typography-subheading-text-transform);font-feature-settings:var(--kbq-typography-subheading-font-feature-settings);letter-spacing:var(--kbq-typography-subheading-letter-spacing);min-block-size:var(--kbq-top-bar-title-height);line-height:var(--kbq-top-bar-title-height)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items,.kbq-top-bar .kbq-top-bar-container:has(>.kbq-overflow-items){gap:unset;overflow:hidden;margin-block:calc(-1 * var(--kbq-size-border-width))}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items{padding:var(--kbq-size-border-width)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items>.kbq-overflow-item:not(:last-of-type),.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items>.kbq-overflow-item:not(:last-of-type){margin-inline-end:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items>.kbq-overflow-item:last-of-type:is(.kbq-overflow-item_always-visible)+.kbq-overflow-items-result,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items>.kbq-overflow-item:last-of-type:is(.kbq-overflow-item_always-visible)+.kbq-overflow-items-result{margin-inline-start:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-overflow-items .kbq-overflow-items-result:first-child,.kbq-top-bar .kbq-top-bar-container>.kbq-overflow-items .kbq-overflow-items-result:first-child{margin-inline-end:var(--kbq-top-bar-container-end-gap)}.kbq-top-bar .kbq-top-bar-container.kbq-top-bar-container_start{display:flex;gap:var(--kbq-top-bar-container-start-gap);flex:1 1 auto;justify-content:flex-start;min-width:var(--kbq-top-bar-container-start-min-width)}.kbq-top-bar .kbq-top-bar-container.kbq-top-bar-container_end{display:flex;gap:var(--kbq-top-bar-container-end-gap);justify-content:end}.kbq-top-bar{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", "@charset \"UTF-8\";:where(.kbq-top-bar){--kbq-top-bar-z-index: 990;--kbq-top-bar-position: sticky;--kbq-top-bar-inset-block-start: auto;--kbq-top-bar-spacer-min-width: 80px;--kbq-top-bar-padding-vertical: var(--kbq-size-m);--kbq-top-bar-padding-horizontal: var(--kbq-size-xxl);--kbq-top-bar-border-radius: 0;--kbq-top-bar-title-height: var(--kbq-size-3xl);--kbq-top-bar-container-start-gap: 0;--kbq-top-bar-container-start-min-width: 0;--kbq-top-bar-container-end-gap: var(--kbq-size-s);--kbq-top-bar-background: var(--kbq-background-bg);--kbq-top-bar-shadow-bottom: var(--kbq-shadow-overflow-normal-bottom);--kbq-top-bar-shadow-transition: ease-out .3s}\n"] }]
91
108
  }], propDecorators: { withShadow: [{ type: i0.Input, args: [{ isSignal: true, alias: "withShadow", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
92
109
 
93
110
  const COMPONENTS = [
94
111
  KbqTopBar,
95
112
  KbqTopBarContainer,
96
- KbqTopBarSpacer
113
+ KbqTopBarSpacer,
114
+ KbqTopBarTitle
97
115
  ];
98
116
  /**
99
117
  * Kept for applications that still declare NgModules. Standalone code imports `KbqTopBar`,
100
- * `KbqTopBarContainer` and `KbqTopBarSpacer` directly instead.
118
+ * `KbqTopBarContainer`, `KbqTopBarSpacer` and `KbqTopBarTitle` directly instead.
101
119
  */
102
120
  class KbqTopBarModule {
103
121
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTopBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
104
122
  /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: KbqTopBarModule, imports: [KbqTopBar,
105
123
  KbqTopBarContainer,
106
- KbqTopBarSpacer], exports: [KbqTopBar,
124
+ KbqTopBarSpacer,
125
+ KbqTopBarTitle], exports: [KbqTopBar,
107
126
  KbqTopBarContainer,
108
- KbqTopBarSpacer] }); }
127
+ KbqTopBarSpacer,
128
+ KbqTopBarTitle] }); }
109
129
  /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTopBarModule }); }
110
130
  }
111
131
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTopBarModule, decorators: [{
@@ -120,5 +140,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
120
140
  * Generated bundle index. Do not edit.
121
141
  */
122
142
 
123
- export { KbqTopBar, KbqTopBarContainer, KbqTopBarModule, KbqTopBarSpacer };
143
+ export { KbqTopBar, KbqTopBarContainer, KbqTopBarModule, KbqTopBarSpacer, KbqTopBarTitle };
124
144
  //# sourceMappingURL=koobiq-components-top-bar.mjs.map