@koobiq/components 20.0.0 → 20.2.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 (231) hide show
  1. package/accordion/_accordion-theme.scss +1 -1
  2. package/accordion/accordion-tokens.scss +1 -0
  3. package/accordion/{accordion-trigger.component.scss → accordion-trigger.scss} +4 -18
  4. package/accordion/{accordion.component.scss → accordion.scss} +12 -5
  5. package/accordion/index.d.ts +215 -119
  6. package/actions-panel/index.d.ts +1 -0
  7. package/alert/_alert-theme.scss +14 -4
  8. package/alert/alert-tokens.scss +4 -4
  9. package/alert/alert.component.scss +24 -13
  10. package/alert/index.d.ts +63 -29
  11. package/app-switcher/app-switcher-dropdown-app.scss +2 -0
  12. package/autocomplete/autocomplete.scss +2 -1
  13. package/autocomplete/index.d.ts +35 -29
  14. package/badge/index.d.ts +2 -3
  15. package/breadcrumbs/breadcrumbs.scss +4 -0
  16. package/breadcrumbs/index.d.ts +2 -1
  17. package/button/button-group.scss +42 -2
  18. package/button-toggle/button-toggle.scss +23 -0
  19. package/button-toggle/index.d.ts +3 -1
  20. package/checkbox/checkbox.scss +5 -4
  21. package/clamped-text/index.d.ts +4 -2
  22. package/core/index.d.ts +515 -21
  23. package/core/styles/_core.scss +2 -0
  24. package/core/styles/common/_animation.scss +35 -24
  25. package/core/styles/common/_connected-overlay.scss +36 -0
  26. package/core/styles/common/_select.scss +7 -2
  27. package/core/styles/theming/_components-theming.scss +1 -1
  28. package/core/styles/theming/_scrollbar-theme.scss +4 -0
  29. package/datepicker/_datepicker-theme.scss +1 -1
  30. package/datepicker/datepicker-toggle.scss +3 -3
  31. package/dl/index.d.ts +1 -0
  32. package/dropdown/dropdown-item.scss +16 -0
  33. package/dropdown/dropdown-tokens.scss +2 -1
  34. package/dropdown/dropdown.scss +11 -2
  35. package/dropdown/index.d.ts +73 -6
  36. package/fesm2022/koobiq-components-accordion.mjs +406 -303
  37. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  38. package/fesm2022/koobiq-components-actions-panel.mjs +15 -6
  39. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  40. package/fesm2022/koobiq-components-alert.mjs +88 -48
  41. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  42. package/fesm2022/koobiq-components-app-switcher.mjs +7 -7
  43. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  44. package/fesm2022/koobiq-components-autocomplete.mjs +37 -23
  45. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  46. package/fesm2022/koobiq-components-badge.mjs +5 -4
  47. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  48. package/fesm2022/koobiq-components-breadcrumbs.mjs +6 -4
  49. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-button-toggle.mjs +9 -6
  51. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-button.mjs +4 -4
  53. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-checkbox.mjs +2 -2
  55. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-clamped-text.mjs +9 -0
  57. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-code-block.mjs +5 -1
  59. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-core.mjs +544 -113
  61. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-datepicker.mjs +13 -10
  63. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-dl.mjs +3 -2
  65. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  66. package/fesm2022/koobiq-components-dropdown.mjs +105 -31
  67. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  68. package/fesm2022/koobiq-components-file-upload.mjs +33 -22
  69. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-filter-bar.mjs +1169 -782
  71. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  72. package/fesm2022/koobiq-components-flag.mjs +66 -0
  73. package/fesm2022/koobiq-components-flag.mjs.map +1 -0
  74. package/fesm2022/koobiq-components-form-field.mjs +6 -6
  75. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-icon.mjs +16 -7
  77. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  78. package/fesm2022/koobiq-components-inline-edit.mjs +30 -7
  79. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  80. package/fesm2022/koobiq-components-list.mjs +39 -20
  81. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  82. package/fesm2022/koobiq-components-loader-overlay.mjs +2 -2
  83. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  84. package/fesm2022/koobiq-components-modal.mjs +9 -5
  85. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-navbar.mjs +123 -27
  87. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-notification-center.mjs +193 -19
  89. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-overflow-items.mjs +12 -4
  91. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-popover.mjs +9 -4
  93. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-progress-bar.mjs +2 -2
  95. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-progress-spinner.mjs +2 -2
  97. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-radio.mjs +3 -7
  99. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-search-expandable.mjs +43 -8
  101. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-select.mjs +72 -59
  103. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-sidebar.mjs +4 -0
  105. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-sidepanel.mjs +3 -3
  107. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-skeleton.mjs +2 -2
  109. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-split-button.mjs +5 -12
  111. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-splitter.mjs +6 -2
  113. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-table.mjs +8 -6
  115. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-tabs.mjs +42 -18
  117. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-tags.mjs +8 -1
  119. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  120. package/fesm2022/koobiq-components-textarea.mjs +7 -14
  121. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  122. package/fesm2022/koobiq-components-time-range.mjs +4 -4
  123. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  124. package/fesm2022/koobiq-components-timepicker.mjs +3 -4
  125. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  126. package/fesm2022/koobiq-components-timezone.mjs +9 -5
  127. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-title.mjs +132 -14
  129. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-toast.mjs +1 -1
  131. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-toggle.mjs +2 -2
  133. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-tooltip.mjs +168 -8
  135. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-tree-select.mjs +79 -38
  137. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-tree.mjs +67 -41
  139. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-username.mjs +16 -3
  141. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  142. package/file-upload/file-upload-tokens.scss +1 -0
  143. package/file-upload/index.d.ts +10 -7
  144. package/filter-bar/_filter-bar-theme.scss +82 -0
  145. package/filter-bar/filter-bar-tokens.scss +9 -0
  146. package/filter-bar/filter-bar.scss +10 -4
  147. package/filter-bar/filter-refresher.scss +1 -1
  148. package/filter-bar/filters.scss +25 -20
  149. package/filter-bar/index.d.ts +764 -336
  150. package/filter-bar/pipes/base-pipe.scss +12 -44
  151. package/filter-bar/pipes/pipe-date.scss +20 -14
  152. package/filter-bar/pipes/pipe-input.scss +10 -0
  153. package/filter-bar/pipes/pipe-multi-tree-select.scss +5 -3
  154. package/filter-bar/pipes/pipe-multiselect.scss +5 -3
  155. package/filter-bar/pipes/pipe-readonly.scss +4 -13
  156. package/filter-bar/pipes/pipe-select.scss +3 -1
  157. package/filter-bar/pipes/pipe-tree-select.scss +3 -1
  158. package/flag/flag.scss +53 -0
  159. package/flag/index.d.ts +44 -0
  160. package/icon/icon-button.scss +3 -1
  161. package/icon/icon-item-tokens.scss +1 -1
  162. package/icon/index.d.ts +15 -2
  163. package/inline-edit/index.d.ts +5 -0
  164. package/inline-edit/inline-edit.scss +7 -7
  165. package/link/link-tokens.scss +2 -2
  166. package/list/index.d.ts +11 -2
  167. package/loader-overlay/loader-overlay-tokens.scss +1 -1
  168. package/modal/_modal-animation.scss +6 -6
  169. package/modal/_modal-theme.scss +5 -0
  170. package/modal/index.d.ts +3 -1
  171. package/modal/modal.scss +15 -0
  172. package/navbar/_navbar-item_vertical.scss +7 -5
  173. package/navbar/index.d.ts +39 -4
  174. package/navbar/navbar-brand.scss +17 -7
  175. package/navbar/navbar-item.scss +9 -0
  176. package/notification-center/_notification-center-theme.scss +2 -1
  177. package/notification-center/index.d.ts +89 -3
  178. package/notification-center/notification-center.scss +42 -4
  179. package/notification-center/notification-item.scss +3 -2
  180. package/overflow-items/index.d.ts +1 -0
  181. package/package.json +7 -3
  182. package/prebuilt-themes/dark-theme.css +1 -1
  183. package/prebuilt-themes/light-theme.css +1 -1
  184. package/prebuilt-themes/theme.css +1 -1
  185. package/progress-bar/progress-bar.scss +4 -0
  186. package/progress-spinner/progress-spinner.scss +5 -1
  187. package/radio/index.d.ts +1 -5
  188. package/radio/radio.scss +18 -4
  189. package/schematics/collection.json +15 -0
  190. package/schematics/migrations/alert-signals/README.md +64 -0
  191. package/schematics/migrations/alert-signals/data.js +70 -0
  192. package/schematics/migrations/alert-signals/index.js +350 -0
  193. package/schematics/migrations/alert-signals/schema.json +20 -0
  194. package/schematics/migrations/autocomplete-panel-width-auto/README.md +68 -0
  195. package/schematics/migrations/autocomplete-panel-width-auto/index.js +70 -0
  196. package/schematics/migrations/autocomplete-panel-width-auto/schema.json +15 -0
  197. package/schematics/migrations/filter-bar-signals/README.md +66 -0
  198. package/schematics/migrations/filter-bar-signals/data.js +72 -0
  199. package/schematics/migrations/filter-bar-signals/index.js +316 -0
  200. package/schematics/migrations/filter-bar-signals/schema.json +20 -0
  201. package/schematics/migrations.json +15 -0
  202. package/schematics/ng-add/index.js +1 -1
  203. package/schematics/utils/angular-parsing.js +11 -2
  204. package/search-expandable/index.d.ts +3 -0
  205. package/select/index.d.ts +59 -24
  206. package/sidebar/index.d.ts +1 -0
  207. package/skeleton/skeleton.scss +4 -0
  208. package/split-button/_split-button-theme.scss +2 -2
  209. package/splitter/_splitter-theme.scss +2 -2
  210. package/splitter/index.d.ts +1 -0
  211. package/table/_table-theme.scss +4 -0
  212. package/table/index.d.ts +3 -2
  213. package/tabs/_tabs-common.scss +60 -31
  214. package/tabs/_tabs-theme.scss +12 -0
  215. package/tabs/index.d.ts +4 -2
  216. package/tabs/tab-header.scss +15 -0
  217. package/tabs/tab-nav-bar.scss +4 -0
  218. package/tabs/tabs-tokens.scss +2 -1
  219. package/textarea/index.d.ts +0 -1
  220. package/time-range/time-range.scss +0 -8
  221. package/timepicker/timepicker.scss +2 -2
  222. package/timezone/index.d.ts +2 -3
  223. package/title/index.d.ts +92 -2
  224. package/tooltip/index.d.ts +124 -7
  225. package/tree/_tree-theme.scss +2 -7
  226. package/tree/index.d.ts +19 -4
  227. package/tree/toggle.scss +5 -0
  228. package/tree/tree-option.scss +0 -4
  229. package/tree-select/_tree-select-theme.scss +1 -1
  230. package/tree-select/index.d.ts +53 -22
  231. package/username/index.d.ts +20 -2
@@ -1,14 +1,56 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Injectable, inject, ViewChild, ViewEncapsulation, ChangeDetectionStrategy, Component, Renderer2, input, booleanAttribute, EventEmitter, effect, numberAttribute, Input, Output, Directive, NgModule } from '@angular/core';
1
3
  import { FocusMonitor } from '@angular/cdk/a11y';
2
4
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
5
  import { Overlay } from '@angular/cdk/overlay';
4
6
  import { NgTemplateOutlet } from '@angular/common';
5
- import * as i0 from '@angular/core';
6
- import { InjectionToken, inject, ViewChild, ViewEncapsulation, ChangeDetectionStrategy, Component, Renderer2, input, EventEmitter, effect, numberAttribute, booleanAttribute, Input, Output, Directive, NgModule } from '@angular/core';
7
7
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
- import { KbqPopUp, applyPopupMargins, KbqPopUpTrigger, PopUpTriggers, KbqComponentColors, KBQ_PARENT_POPUP, POSITION_TO_CSS_MAP, PopUpPlacements } from '@koobiq/components/core';
8
+ import { KbqPopUp, applyPopupMargins, PopUpTriggers, KbqPopUpTrigger, KbqComponentColors, KBQ_PARENT_POPUP, POSITION_TO_CSS_MAP, PopUpPlacements } from '@koobiq/components/core';
9
9
  import { merge, EMPTY } from 'rxjs';
10
10
  import { trigger, state, transition, style, animate, keyframes } from '@angular/animations';
11
11
 
12
+ /**
13
+ * Default value of the `kbqTooltipSingleInstance` input. Provide `false` at the application level to
14
+ * globally disable the "only one tooltip is visible at a time" behavior.
15
+ */
16
+ const KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT = new InjectionToken('KbqTooltipSingleInstanceDefault', {
17
+ providedIn: 'root',
18
+ factory: () => true
19
+ });
20
+ /**
21
+ * Keeps track of the single tooltip that is currently visible, so that showing a new one hides the
22
+ * previous. Holds the *trigger*, not the overlay component — the latter is re-created on every show.
23
+ */
24
+ class KbqTooltipRegistry {
25
+ constructor() {
26
+ /** Tooltip that currently owns the screen, or `null` when nothing is visible. */
27
+ this.visibleTooltip = null;
28
+ }
29
+ /** Marks the tooltip as the only visible one, hiding the previously visible tooltip. */
30
+ setVisible(tooltip) {
31
+ if (this.visibleTooltip && this.visibleTooltip !== tooltip) {
32
+ this.visibleTooltip.hideAsInactive();
33
+ }
34
+ this.visibleTooltip = tooltip;
35
+ }
36
+ /**
37
+ * Clears the registry, but only when the given tooltip is still the registered one. The guard
38
+ * matters because hiding the previous tooltip is asynchronous: its `visibleChange(false)` arrives
39
+ * after the new tooltip has already been registered, and must not wipe that newer entry.
40
+ */
41
+ clearVisible(tooltip) {
42
+ if (this.visibleTooltip === tooltip) {
43
+ this.visibleTooltip = null;
44
+ }
45
+ }
46
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTooltipRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
47
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTooltipRegistry, providedIn: 'root' }); }
48
+ }
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTooltipRegistry, decorators: [{
50
+ type: Injectable,
51
+ args: [{ providedIn: 'root' }]
52
+ }] });
53
+
12
54
  /**
13
55
  * Animations used by KbqTooltip.
14
56
  * @docs-private
@@ -74,6 +116,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
74
116
  type: ViewChild,
75
117
  args: ['tooltip']
76
118
  }] } });
119
+ /**
120
+ * Triggers that make a tooltip part of the "only one tooltip is visible at a time" group.
121
+ *
122
+ * Values that match none of them (`manual`, `none`, …) bind no listeners at all — that is how the
123
+ * imperatively driven validation tooltips are configured, and they are expected to stay pinned while
124
+ * the user keeps interacting elsewhere.
125
+ */
126
+ const INTERACTIVE_TRIGGERS = [
127
+ PopUpTriggers.Hover,
128
+ PopUpTriggers.Focus,
129
+ PopUpTriggers.Click,
130
+ PopUpTriggers.Keydown
131
+ ];
77
132
  const KBQ_TOOLTIP_SCROLL_STRATEGY = new InjectionToken('kbq-tooltip-scroll-strategy');
78
133
  /** @docs-private */
79
134
  function kbqTooltipScrollStrategyFactory(overlay) {
@@ -85,7 +140,13 @@ const KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {
85
140
  deps: [Overlay],
86
141
  useFactory: kbqTooltipScrollStrategyFactory
87
142
  };
143
+ /**
144
+ * Trigger directive that shows a `KbqTooltipComponent` for its host element. Extends `KbqPopUpTrigger` with
145
+ * tooltip-specific inputs (content, placement, color, arrow, enter/leave delays, modifier and header) and
146
+ * behavior such as opening on keyboard focus only and positioning relative to the mouse cursor.
147
+ */
88
148
  class KbqTooltipTrigger extends KbqPopUpTrigger {
149
+ /** Input (`kbqVisible`) that programmatically shows or hides the tooltip; reflects the current `visible` state. */
89
150
  // TODO: Skipped for migration because:
90
151
  // Accessor inputs cannot be migrated as they are too complex.
91
152
  get tooltipVisible() {
@@ -94,6 +155,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
94
155
  set tooltipVisible(value) {
95
156
  super.updateVisible(value);
96
157
  }
158
+ /** Input (`kbqPlacement`) that sets the tooltip placement relative to its trigger; reflects the current `placement`. */
97
159
  // TODO: Skipped for migration because:
98
160
  // Accessor inputs cannot be migrated as they are too complex.
99
161
  get tooltipPlacement() {
@@ -102,6 +164,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
102
164
  set tooltipPlacement(value) {
103
165
  super.updatePlacement(value);
104
166
  }
167
+ /** Input (`kbqPlacementPriority`) that sets the ordered fallback placements; reflects the current `placementPriority`. */
105
168
  // TODO: Skipped for migration because:
106
169
  // Accessor inputs cannot be migrated as they are too complex.
107
170
  get tooltipPlacementPriority() {
@@ -110,6 +173,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
110
173
  set tooltipPlacementPriority(value) {
111
174
  super.updatePlacementPriority(value);
112
175
  }
176
+ /** Input (`kbqTooltip`) with the tooltip content — a string or a template. Updating it refreshes an open tooltip. */
113
177
  // TODO: Skipped for migration because:
114
178
  // Accessor inputs cannot be migrated as they are too complex.
115
179
  get content() {
@@ -119,6 +183,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
119
183
  this._content = content;
120
184
  this.updateData();
121
185
  }
186
+ /** Input (`kbqTooltipDisabled`) controlling whether the tooltip is disabled; setting it to `true` hides it. */
122
187
  // TODO: Skipped for migration because:
123
188
  // Accessor inputs cannot be migrated as they are too complex.
124
189
  get disabled() {
@@ -130,6 +195,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
130
195
  this.hide();
131
196
  }
132
197
  }
198
+ /** Input (`kbqTrigger`) with the comma-separated trigger events. An empty value resets to hover + focus and rebinds listeners. */
133
199
  // TODO: Skipped for migration because:
134
200
  // Accessor inputs cannot be migrated as they are too complex.
135
201
  get trigger() {
@@ -144,6 +210,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
144
210
  }
145
211
  this.initListeners();
146
212
  }
213
+ /** Input (`kbqTooltipClass`) with an extra CSS class applied to the tooltip; updating it refreshes the class map. */
147
214
  // TODO: Skipped for migration because:
148
215
  // Accessor inputs cannot be migrated as they are too complex.
149
216
  get customClass() {
@@ -158,6 +225,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
158
225
  this._customClass = '';
159
226
  }
160
227
  }
228
+ /** Input (`kbqTooltipContext`) with the context object passed to a template tooltip; updating it refreshes the open tooltip. */
161
229
  // TODO: Skipped for migration because:
162
230
  // Accessor inputs cannot be migrated as they are too complex.
163
231
  get context() {
@@ -167,6 +235,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
167
235
  this._context = ctx;
168
236
  this.updateData();
169
237
  }
238
+ /** Input (`kbqTooltipColor`) with the tooltip color theme; the getter returns the `kbq-`-prefixed CSS class. */
170
239
  // TODO: Skipped for migration because:
171
240
  // Accessor inputs cannot be migrated as they are too complex.
172
241
  get color() {
@@ -175,6 +244,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
175
244
  set color(value) {
176
245
  this._color = value || KbqComponentColors.Contrast;
177
246
  }
247
+ /** Whether the configured trigger list includes the `click` trigger. */
178
248
  get hasClickInTrigger() {
179
249
  return this.trigger.includes(PopUpTriggers.Click);
180
250
  }
@@ -196,10 +266,35 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
196
266
  this.updateData();
197
267
  }
198
268
  }
269
+ /**
270
+ * Whether this tooltip takes part in the "only one tooltip is visible at a time" group.
271
+ *
272
+ * Read through the `trigger` getter on purpose: `KbqTitleDirective` always reports `hover`, so title
273
+ * tooltips participate, while `kbqValidationTooltip` consumers (datepicker, timepicker, inline-edit)
274
+ * assign `trigger = 'manual'` and therefore stay out of the group.
275
+ */
276
+ get participatesInSingleInstance() {
277
+ return this.singleInstance() && INTERACTIVE_TRIGGERS.some((name) => this.trigger.includes(name));
278
+ }
279
+ /**
280
+ * Sets up an effect that mirrors a `forDisabledComponent`'s disabled signal: when that component is disabled it
281
+ * makes the host focusable (so the tooltip can still be triggered) and enables the tooltip, otherwise disables it.
282
+ *
283
+ * Also joins the "only one tooltip is visible at a time" group. Both the subscription and the teardown live
284
+ * here rather than in `ngAfterViewInit`/`ngOnDestroy` because several subclasses override those hooks:
285
+ * `KbqTitleDirective` and `KbqEllipsisCenterDirective` skip `super.ngAfterViewInit()`, and `KbqPasswordToggle`
286
+ * skips `super` in both hooks entirely. `destroyRef` additionally covers a trigger destroyed while its
287
+ * tooltip is still visible — that path disposes the overlay without emitting `visibleChange(false)`.
288
+ */
199
289
  constructor() {
200
290
  super();
291
+ /** Registry holding the single tooltip that is currently visible. */
292
+ this.tooltipRegistry = inject(KbqTooltipRegistry);
293
+ /** @docs-private */
201
294
  this.scrollStrategy = inject(KBQ_TOOLTIP_SCROLL_STRATEGY);
295
+ /** @docs-private */
202
296
  this.parentPopup = inject(KBQ_PARENT_POPUP, { optional: true });
297
+ /** @docs-private */
203
298
  this.focusMonitor = inject(FocusMonitor);
204
299
  /** @docs-private */
205
300
  this.renderer = inject(Renderer2);
@@ -218,6 +313,21 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
218
313
  * Defaults to `true`.
219
314
  */
220
315
  this.ignoreTooltipPointerEvents = input(true, ...(ngDevMode ? [{ debugName: "ignoreTooltipPointerEvents" }] : []));
316
+ /**
317
+ * Whether the tooltip takes part in the "only one tooltip is visible at a time" group: showing it
318
+ * hides the previously visible tooltip, and it is hidden when another tooltip is shown.
319
+ *
320
+ * Defaults to `true`; the default can be changed application-wide with the
321
+ * `KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT` token.
322
+ *
323
+ * Tooltips without an interactive `kbqTrigger` (`manual`, `none`, …) never take part in the group,
324
+ * regardless of this input — they are shown imperatively and are expected to stay pinned.
325
+ */
326
+ this.singleInstance = input(inject(KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT), ...(ngDevMode ? [{ debugName: "singleInstance", alias: 'kbqTooltipSingleInstance',
327
+ transform: booleanAttribute }] : [{
328
+ alias: 'kbqTooltipSingleInstance',
329
+ transform: booleanAttribute
330
+ }]));
221
331
  /**
222
332
  * Changes hiding behavior. By default, tooltip is hidden on mouseleave from trigger.
223
333
  * Setting hideWithTimeout to true will delay tooltip hiding and will not hide when the mouse moves from trigger
@@ -235,25 +345,36 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
235
345
  // Class of this input is manually instantiated. This is discouraged and prevents
236
346
  // migration.
237
347
  this.relativeToPointer = false;
348
+ /** Input (`kbqEnterDelay`) — delay in milliseconds before the tooltip is shown. Defaults to `400`. */
238
349
  // TODO: Skipped for migration because:
239
350
  // Your application code writes to the input. This prevents migration.
240
351
  this.enterDelay = 400;
352
+ /** Input (`kbqLeaveDelay`) — delay in milliseconds before the tooltip is hidden. Defaults to `0`. */
241
353
  // TODO: Skipped for migration because:
242
354
  // This input overrides a field from a superclass, while the superclass field
243
355
  // is not migrated.
244
356
  this.leaveDelay = 0;
357
+ /** Backing field for `trigger`; defaults to hover + focus. */
245
358
  this._trigger = `${PopUpTriggers.Hover}, ${PopUpTriggers.Focus}`;
359
+ /** Backing field for `context`. */
246
360
  this._context = null;
361
+ /** Backing field for `color`; defaults to `KbqComponentColors.Contrast`. */
247
362
  this._color = KbqComponentColors.Contrast;
363
+ /** Input (`kbqTooltipArrow`) — whether to render the tooltip's arrow/pointer. Defaults to `false`. */
248
364
  // TODO: Skipped for migration because:
249
365
  // Your application code writes to the input. This prevents migration.
250
366
  this.arrow = false;
367
+ /** Input (`kbqTooltipOffset`) — distance in pixels between the tooltip and its trigger; `null` uses the default. */
251
368
  // TODO: Skipped for migration because:
252
369
  // Your application code writes to the input. This prevents migration.
253
370
  this.offset = null;
371
+ /** Output (`kbqPlacementChange`) that emits the new placement whenever the tooltip repositions. */
254
372
  this.placementChange = new EventEmitter();
373
+ /** Output (`kbqVisibleChange`) that emits when the tooltip's visibility changes. */
255
374
  this.visibleChange = new EventEmitter();
375
+ /** @docs-private */
256
376
  this.originSelector = '.kbq-tooltip';
377
+ /** @docs-private */
257
378
  this.overlayConfig = {
258
379
  panelClass: ['kbq-tooltip-panel']
259
380
  };
@@ -267,6 +388,17 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
267
388
  // Class of this input is manually instantiated. This is discouraged and prevents
268
389
  // migration.
269
390
  this.modifier = TooltipModifier.Default;
391
+ this.visibleChange.pipe(takeUntilDestroyed()).subscribe((visible) => {
392
+ if (visible) {
393
+ if (this.participatesInSingleInstance) {
394
+ this.tooltipRegistry.setVisible(this);
395
+ }
396
+ }
397
+ else {
398
+ this.tooltipRegistry.clearVisible(this);
399
+ }
400
+ });
401
+ this.destroyRef.onDestroy(() => this.tooltipRegistry.clearVisible(this));
270
402
  effect(() => {
271
403
  if (!this.forDisabledComponent())
272
404
  return;
@@ -281,6 +413,10 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
281
413
  this.disabled = !disabled;
282
414
  });
283
415
  }
416
+ /**
417
+ * Hides the tooltip when a parent pop-up closes, starts focus monitoring on the host, and—when
418
+ * `ignoreTooltipPointerEvents` is set—adds the panel class that makes the tooltip ignore pointer events.
419
+ */
284
420
  ngAfterViewInit() {
285
421
  this.parentPopup?.closedStream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.hide());
286
422
  this.focusMonitor.monitor(this.elementRef.nativeElement);
@@ -288,10 +424,15 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
288
424
  this.overlayConfig.panelClass.push('cdk-overlay-pane_ignore-pointer-events');
289
425
  }
290
426
  }
427
+ /** Stops focus monitoring on the host element and runs the base-class teardown. */
291
428
  ngOnDestroy() {
292
429
  this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);
293
430
  super.ngOnDestroy();
294
431
  }
432
+ /**
433
+ * Shows the tooltip after `delay` ms. Suppresses showing on a focus trigger that did not originate from
434
+ * the keyboard, and applies cursor-relative positioning when `relativeToPointer` is enabled.
435
+ */
295
436
  show(delay = this.enterDelay) {
296
437
  if (this.triggerName === 'focus' && this.focusMonitor['_lastFocusOrigin'] !== 'keyboard') {
297
438
  return;
@@ -301,7 +442,21 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
301
442
  this.applyRelativeToPointer();
302
443
  }
303
444
  }
304
- /** method allows to show the tooltip relative to the given mouse event. */
445
+ /**
446
+ * Hides the tooltip because another tooltip became visible.
447
+ *
448
+ * Goes straight to the pop-up instead of `hide()`: `hide()` silently no-ops when the last recorded
449
+ * `triggerName` is `mouseleave` and the pop-up itself is hovered. Hiding through the instance keeps
450
+ * `visibleChange(false)` firing, so `isOpen`, `kbqVisibleChange` and the `kbqVisible` input stay in sync.
451
+ * Does nothing when the tooltip is already detached or when closing is prevented.
452
+ * @docs-private */
453
+ hideAsInactive() {
454
+ if (this.preventClose)
455
+ return;
456
+ this.ngZone.run(() => this.instance?.hide(0));
457
+ }
458
+ /** method allows to show the tooltip relative to the given mouse event.
459
+ * @docs-private */
305
460
  showForMouseEvent(event) {
306
461
  if (!(event.currentTarget instanceof HTMLElement))
307
462
  return;
@@ -318,11 +473,12 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
318
473
  * For example:
319
474
  * const tooltip = new KbqTooltipTrigger();
320
475
  * tooltip.showForElement(element);
321
- */
476
+ * @docs-private */
322
477
  showForElement(element) {
323
478
  this.show();
324
479
  this.strategy.setOrigin(element);
325
480
  }
481
+ /** @docs-private */
326
482
  updateData() {
327
483
  if (!this.instance) {
328
484
  return;
@@ -335,12 +491,15 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
335
491
  this.instance.detectChanges();
336
492
  this.updatePosition(true);
337
493
  }
494
+ /** @docs-private */
338
495
  closingActions() {
339
496
  return merge(this.hasClickInTrigger ? this.overlayRef.outsidePointerEvents() : EMPTY, this.overlayRef.detachments());
340
497
  }
498
+ /** @docs-private */
341
499
  getOverlayHandleComponentType() {
342
500
  return KbqTooltipComponent;
343
501
  }
502
+ /** @docs-private */
344
503
  updateClassMap(newPlacement = this.placement) {
345
504
  if (!this.instance) {
346
505
  return;
@@ -350,6 +509,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
350
509
  });
351
510
  this.instance.markForCheck();
352
511
  }
512
+ /** @docs-private */
353
513
  applyRelativeToPointer() {
354
514
  if (!this.strategy ||
355
515
  ![PopUpPlacements.Top, PopUpPlacements.Bottom].includes(this.placement) ||
@@ -371,7 +531,7 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
371
531
  this.strategy.setOrigin(point);
372
532
  }
373
533
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTooltipTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
374
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.25", type: KbqTooltipTrigger, isStandalone: true, selector: "[kbqTooltip]", inputs: { forDisabledComponent: { classPropertyName: "forDisabledComponent", publicName: "forDisabledComponent", isSignal: true, isRequired: false, transformFunction: null }, ignoreTooltipPointerEvents: { classPropertyName: "ignoreTooltipPointerEvents", publicName: "ignoreTooltipPointerEvents", isSignal: true, isRequired: false, transformFunction: null }, hideWithTimeout: { classPropertyName: "hideWithTimeout", publicName: "hideWithTimeout", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, tooltipVisible: { classPropertyName: "tooltipVisible", publicName: "kbqVisible", isSignal: false, isRequired: false, transformFunction: null }, tooltipPlacement: { classPropertyName: "tooltipPlacement", publicName: "kbqPlacement", isSignal: false, isRequired: false, transformFunction: null }, relativeToPointer: { classPropertyName: "relativeToPointer", publicName: "kbqRelativeToPointer", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, tooltipPlacementPriority: { classPropertyName: "tooltipPlacementPriority", publicName: "kbqPlacementPriority", isSignal: false, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "kbqTooltip", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "kbqTooltipDisabled", isSignal: false, isRequired: false, transformFunction: null }, enterDelay: { classPropertyName: "enterDelay", publicName: "kbqEnterDelay", isSignal: false, isRequired: false, transformFunction: null }, leaveDelay: { classPropertyName: "leaveDelay", publicName: "kbqLeaveDelay", isSignal: false, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "kbqTrigger", isSignal: false, isRequired: false, transformFunction: null }, customClass: { classPropertyName: "customClass", publicName: "kbqTooltipClass", isSignal: false, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "kbqTooltipContext", isSignal: false, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "kbqTooltipColor", isSignal: false, isRequired: false, transformFunction: null }, arrow: { classPropertyName: "arrow", publicName: "kbqTooltipArrow", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, offset: { classPropertyName: "offset", publicName: "kbqTooltipOffset", isSignal: false, isRequired: false, transformFunction: numberAttribute }, modifier: { classPropertyName: "modifier", publicName: "kbqTooltipModifier", isSignal: false, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "kbqTooltipHeader", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { placementChange: "kbqPlacementChange", visibleChange: "kbqVisibleChange" }, host: { listeners: { "keydown": "keydownHandler($event)", "touchend": "touchendHandler()" }, properties: { "class.kbq-tooltip_open": "isOpen" } }, exportAs: ["kbqTooltip"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
534
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.25", type: KbqTooltipTrigger, isStandalone: true, selector: "[kbqTooltip]", inputs: { forDisabledComponent: { classPropertyName: "forDisabledComponent", publicName: "forDisabledComponent", isSignal: true, isRequired: false, transformFunction: null }, ignoreTooltipPointerEvents: { classPropertyName: "ignoreTooltipPointerEvents", publicName: "ignoreTooltipPointerEvents", isSignal: true, isRequired: false, transformFunction: null }, singleInstance: { classPropertyName: "singleInstance", publicName: "kbqTooltipSingleInstance", isSignal: true, isRequired: false, transformFunction: null }, hideWithTimeout: { classPropertyName: "hideWithTimeout", publicName: "hideWithTimeout", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, tooltipVisible: { classPropertyName: "tooltipVisible", publicName: "kbqVisible", isSignal: false, isRequired: false, transformFunction: null }, tooltipPlacement: { classPropertyName: "tooltipPlacement", publicName: "kbqPlacement", isSignal: false, isRequired: false, transformFunction: null }, relativeToPointer: { classPropertyName: "relativeToPointer", publicName: "kbqRelativeToPointer", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, tooltipPlacementPriority: { classPropertyName: "tooltipPlacementPriority", publicName: "kbqPlacementPriority", isSignal: false, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "kbqTooltip", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "kbqTooltipDisabled", isSignal: false, isRequired: false, transformFunction: null }, enterDelay: { classPropertyName: "enterDelay", publicName: "kbqEnterDelay", isSignal: false, isRequired: false, transformFunction: null }, leaveDelay: { classPropertyName: "leaveDelay", publicName: "kbqLeaveDelay", isSignal: false, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "kbqTrigger", isSignal: false, isRequired: false, transformFunction: null }, customClass: { classPropertyName: "customClass", publicName: "kbqTooltipClass", isSignal: false, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "kbqTooltipContext", isSignal: false, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "kbqTooltipColor", isSignal: false, isRequired: false, transformFunction: null }, arrow: { classPropertyName: "arrow", publicName: "kbqTooltipArrow", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, offset: { classPropertyName: "offset", publicName: "kbqTooltipOffset", isSignal: false, isRequired: false, transformFunction: numberAttribute }, modifier: { classPropertyName: "modifier", publicName: "kbqTooltipModifier", isSignal: false, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "kbqTooltipHeader", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { placementChange: "kbqPlacementChange", visibleChange: "kbqVisibleChange" }, host: { listeners: { "keydown": "keydownHandler($event)", "touchend": "touchendHandler()" }, properties: { "class.kbq-tooltip_open": "isOpen" } }, exportAs: ["kbqTooltip"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
375
535
  }
376
536
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTooltipTrigger, decorators: [{
377
537
  type: Directive,
@@ -384,7 +544,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
384
544
  },
385
545
  exportAs: 'kbqTooltip'
386
546
  }]
387
- }], ctorParameters: () => [], propDecorators: { forDisabledComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDisabledComponent", required: false }] }], ignoreTooltipPointerEvents: [{ type: i0.Input, args: [{ isSignal: true, alias: "ignoreTooltipPointerEvents", required: false }] }], hideWithTimeout: [{
547
+ }], ctorParameters: () => [], propDecorators: { forDisabledComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDisabledComponent", required: false }] }], ignoreTooltipPointerEvents: [{ type: i0.Input, args: [{ isSignal: true, alias: "ignoreTooltipPointerEvents", required: false }] }], singleInstance: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipSingleInstance", required: false }] }], hideWithTimeout: [{
388
548
  type: Input,
389
549
  args: [{ transform: booleanAttribute }]
390
550
  }], tooltipVisible: [{
@@ -473,5 +633,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
473
633
  * Generated bundle index. Do not edit.
474
634
  */
475
635
 
476
- export { KBQ_TOOLTIP_OPEN_TIME, KBQ_TOOLTIP_OPEN_TIME_PROVIDER, KBQ_TOOLTIP_SCROLL_STRATEGY, KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER, KbqToolTipModule, KbqTooltipComponent, KbqTooltipTrigger, MIN_TIME_FOR_DELAY, TooltipModifier, kbqTooltipScrollStrategyFactory };
636
+ export { KBQ_TOOLTIP_OPEN_TIME, KBQ_TOOLTIP_OPEN_TIME_PROVIDER, KBQ_TOOLTIP_SCROLL_STRATEGY, KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER, KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT, KbqToolTipModule, KbqTooltipComponent, KbqTooltipRegistry, KbqTooltipTrigger, MIN_TIME_FOR_DELAY, TooltipModifier, kbqTooltipScrollStrategyFactory };
477
637
  //# sourceMappingURL=koobiq-components-tooltip.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-tooltip.mjs","sources":["../../../packages/components/tooltip/tooltip.animations.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 { animate, AnimationTriggerMetadata, keyframes, state, style, transition, trigger } from '@angular/animations';\n\n/**\n * Animations used by KbqTooltip.\n * @docs-private\n */\nexport const kbqTooltipAnimations: {\n readonly tooltipState: AnimationTriggerMetadata;\n} = {\n /** Animation that transitions a tooltip in and out. */\n tooltipState: trigger('state', [\n state('initial, void, hidden', style({ opacity: 0, transform: 'scale(0)' })),\n state('visible', style({ transform: 'scale(0.99)' })),\n transition(\n '* => visible',\n animate(\n '200ms cubic-bezier(0, 0, 0.2, 1)',\n keyframes([\n style({ opacity: 0, transform: 'scale(0)', offset: 0 }),\n style({ opacity: 0.5, transform: 'scale(0.9)', offset: 0.5 }),\n style({ opacity: 1, transform: 'scale(0.99)', offset: 1 })\n ])\n )\n ),\n transition('* => hidden', animate('100ms cubic-bezier(0, 0, 0.2, 1)', style({ opacity: 0 })))\n ])\n};\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Point } from '@angular/cdk/drag-drop';\nimport { Overlay, OverlayConfig, ScrollStrategy } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewChild,\n ViewEncapsulation,\n WritableSignal,\n booleanAttribute,\n effect,\n inject,\n input,\n numberAttribute\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n KBQ_PARENT_POPUP,\n KbqComponentColors,\n KbqParentPopup,\n KbqPopUp,\n KbqPopUpPlacementValues,\n KbqPopUpTrigger,\n POSITION_TO_CSS_MAP,\n PopUpPlacements,\n PopUpTriggers,\n applyPopupMargins\n} from '@koobiq/components/core';\nimport { EMPTY, merge } from 'rxjs';\nimport { kbqTooltipAnimations } from './tooltip.animations';\n\nexport enum TooltipModifier {\n Default = 'default',\n Warning = 'warning',\n Extended = 'extended'\n}\n\nexport const KBQ_TOOLTIP_OPEN_TIME = new InjectionToken<{ value: number }>('kbq-tooltip-open-time');\n\n/** @docs-private */\nexport const KBQ_TOOLTIP_OPEN_TIME_PROVIDER = {\n provide: KBQ_TOOLTIP_OPEN_TIME,\n useValue: { value: 0 }\n};\n\nexport const MIN_TIME_FOR_DELAY = 2000;\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 providers: [KBQ_TOOLTIP_OPEN_TIME_PROVIDER],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n animations: [kbqTooltipAnimations.tooltipState]\n})\nexport class KbqTooltipComponent extends KbqPopUp {\n private openTime = inject(KBQ_TOOLTIP_OPEN_TIME);\n\n prefix = 'kbq-tooltip';\n\n @ViewChild('tooltip') elementRef: ElementRef;\n\n show(delay: number) {\n if (!this.content) {\n return;\n }\n\n super.show(Date.now() - this.openTime.value < MIN_TIME_FOR_DELAY ? 0 : delay);\n\n if (this.offset !== null) {\n applyPopupMargins(\n this.renderer,\n this.elementRef.nativeElement,\n this.prefix,\n `${this.offset!.toString()}px`\n );\n }\n\n this.openTime.value = Date.now();\n }\n\n updateClassMap(placement: string, customClass: string, { modifier }) {\n const classMap = {\n [`${this.prefix}_${modifier}`]: true\n };\n\n super.updateClassMap(placement, customClass, classMap);\n }\n}\n\nexport const KBQ_TOOLTIP_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>('kbq-tooltip-scroll-strategy');\n\n/** @docs-private */\nexport function kbqTooltipScrollStrategyFactory(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.close();\n}\n\n/** @docs-private */\nexport const KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: KBQ_TOOLTIP_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: kbqTooltipScrollStrategyFactory\n};\n\n@Directive({\n selector: '[kbqTooltip]',\n host: {\n '[class.kbq-tooltip_open]': 'isOpen',\n\n '(keydown)': 'keydownHandler($event)',\n '(touchend)': 'touchendHandler()'\n },\n exportAs: 'kbqTooltip'\n})\nexport class KbqTooltipTrigger\n extends KbqPopUpTrigger<KbqTooltipComponent>\n implements AfterViewInit, OnChanges, OnDestroy\n{\n protected scrollStrategy: () => ScrollStrategy = inject(KBQ_TOOLTIP_SCROLL_STRATEGY);\n protected parentPopup = inject<KbqParentPopup>(KBQ_PARENT_POPUP, { optional: true });\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`, tooltip elements will not receive pointer events,\n * allowing interactions to pass through to underlying elements.\n * Defaults to `true`.\n */\n readonly ignoreTooltipPointerEvents = input<boolean>(true);\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 // TODO: Skipped for migration because:\n // This input overrides a field from a superclass, while the superclass field\n // is not migrated.\n @Input({ transform: booleanAttribute }) hideWithTimeout: boolean = false;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqVisible')\n get tooltipVisible(): boolean {\n return this.visible;\n }\n\n set tooltipVisible(value: boolean) {\n super.updateVisible(value);\n }\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqPlacement')\n get tooltipPlacement(): KbqPopUpPlacementValues {\n return this.placement;\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 // TODO: Skipped for migration because:\n // Class of this input is manually instantiated. This is discouraged and prevents\n // migration.\n @Input({ alias: 'kbqRelativeToPointer', transform: booleanAttribute }) relativeToPointer: boolean = false;\n\n set tooltipPlacement(value: KbqPopUpPlacementValues) {\n super.updatePlacement(value);\n }\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqPlacementPriority')\n get tooltipPlacementPriority() {\n return this.placementPriority;\n }\n\n set tooltipPlacementPriority(value) {\n super.updatePlacementPriority(value);\n }\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTooltip')\n get content(): string | TemplateRef<any> {\n return this._content;\n }\n\n set content(content: string | TemplateRef<any>) {\n this._content = content;\n\n this.updateData();\n }\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTooltipDisabled')\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this._disabled) {\n this.hide();\n }\n }\n\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input('kbqEnterDelay') enterDelay = 400;\n // TODO: Skipped for migration because:\n // This input overrides a field from a superclass, while the superclass field\n // is not migrated.\n @Input('kbqLeaveDelay') leaveDelay = 0;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTrigger')\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 protected _trigger = `${PopUpTriggers.Hover}, ${PopUpTriggers.Focus}`;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTooltipClass')\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 // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTooltipContext')\n get context() {\n return this._context;\n }\n\n set context(ctx) {\n this._context = ctx;\n this.updateData();\n }\n\n private _context: any = null;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTooltipColor')\n get color(): string {\n return `kbq-${this._color}`;\n }\n\n set color(value: KbqComponentColors | string) {\n this._color = value || KbqComponentColors.Contrast;\n }\n\n private _color: KbqComponentColors | string = KbqComponentColors.Contrast;\n\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input({ alias: 'kbqTooltipArrow', transform: booleanAttribute }) arrow: boolean = false;\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input({ alias: 'kbqTooltipOffset', transform: numberAttribute }) offset: number | null = null;\n\n @Output('kbqPlacementChange') readonly placementChange = new EventEmitter();\n\n @Output('kbqVisibleChange') readonly visibleChange = new EventEmitter<boolean>();\n\n private get hasClickInTrigger(): boolean {\n return this.trigger.includes(PopUpTriggers.Click);\n }\n\n protected originSelector = '.kbq-tooltip';\n\n protected overlayConfig: OverlayConfig = {\n panelClass: ['kbq-tooltip-panel']\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 // TODO: Skipped for migration because:\n // Class of this input is manually instantiated. This is discouraged and prevents\n // migration.\n @Input('kbqTooltipModifier') modifier: TooltipModifier | `${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 // TODO: Skipped for migration because:\n // Class of this input is manually instantiated. This is discouraged and prevents\n // migration.\n @Input('kbqTooltipHeader') header: string | TemplateRef<any>;\n\n /**\n * The old `KbqWarningTooltipTrigger` / `KbqExtendedTooltipTrigger` subclasses had\n * setters on their content/header inputs that pushed updates into the open tooltip.\n * Now that `modifier` and `header` are plain `@Input` fields on this base class,\n * we need to mirror that reactivity manually — without it, changing the inputs\n * while a tooltip is open silently leaves the overlay showing stale data until\n * the next show/hide cycle.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.instance) return;\n\n if (changes.modifier && !changes.modifier.firstChange) {\n this.updateClassMap();\n }\n\n if (changes.header && !changes.header.firstChange) {\n this.updateData();\n }\n }\n\n constructor() {\n super();\n\n effect(() => {\n if (!this.forDisabledComponent()) return;\n\n const disabled = this.forDisabledComponent()!.disabledSignal();\n\n if (disabled) {\n this.renderer.setAttribute(this.getNativeElement(), 'tabindex', '0');\n this.renderer.setStyle(this.getNativeElement(), 'outline-color', 'var(--kbq-states-line-focus-theme)');\n } else {\n this.renderer.setAttribute(this.getNativeElement(), 'tabindex', '-1');\n }\n\n this.disabled = !disabled;\n });\n }\n\n ngAfterViewInit(): void {\n this.parentPopup?.closedStream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.hide());\n\n this.focusMonitor.monitor(this.elementRef.nativeElement);\n\n if (this.ignoreTooltipPointerEvents() && Array.isArray(this.overlayConfig.panelClass)) {\n this.overlayConfig.panelClass.push('cdk-overlay-pane_ignore-pointer-events');\n }\n }\n\n ngOnDestroy() {\n this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n\n super.ngOnDestroy();\n }\n\n show(delay: number = this.enterDelay) {\n if (this.triggerName === 'focus' && this.focusMonitor['_lastFocusOrigin'] !== 'keyboard') {\n return;\n }\n\n super.show(delay);\n\n if (this.relativeToPointer) {\n this.applyRelativeToPointer();\n }\n }\n\n /** method allows to show the tooltip relative to the given mouse event. */\n showForMouseEvent(event: MouseEvent) {\n if (!(event.currentTarget instanceof HTMLElement)) return;\n\n this.triggerName = 'mouseenter';\n this.mouseEvent = event;\n this.setExternalNativeElement(event.currentTarget);\n\n super.show();\n\n this.applyRelativeToPointer();\n }\n\n /**\n * method allows to show the tooltip relative to the element\n * Use this approach when it is not possible to define a trigger in the template.\n *\n * For example:\n * const tooltip = new KbqTooltipTrigger();\n * tooltip.showForElement(element);\n */\n showForElement(element: HTMLElement) {\n this.show();\n this.strategy.setOrigin(element);\n }\n\n updateData() {\n if (!this.instance) {\n return;\n }\n\n this.instance.content = this.content;\n this.instance.header = this.header;\n this.instance.context = this.context && { $implicit: this.context };\n this.instance.arrow = this.arrow;\n this.instance.offset = this.offset;\n this.instance.detectChanges();\n this.updatePosition(true);\n }\n\n closingActions() {\n return merge(\n this.hasClickInTrigger ? this.overlayRef!.outsidePointerEvents() : EMPTY,\n this.overlayRef!.detachments()\n );\n }\n\n getOverlayHandleComponentType(): Type<KbqTooltipComponent> {\n return KbqTooltipComponent;\n }\n\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.color}`, {\n modifier: this.modifier\n });\n this.instance.markForCheck();\n }\n\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 this.placementPriority = null;\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 [class.kbq-tooltip_arrowless]=\"!arrow\"\n [class]=\"classMap\"\n [@state]=\"visibility\"\n (@state.done)=\"animationDone($event)\"\n (@state.start)=\"animationStart()\"\n>\n <div class=\"kbq-tooltip__inner\">\n @if (arrow) {\n <div class=\"kbq-tooltip__arrow\"></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 {\n KBQ_TOOLTIP_OPEN_TIME_PROVIDER,\n KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,\n KbqTooltipComponent,\n KbqTooltipTrigger\n} from './tooltip.component';\n\nconst COMPONENTS = [\n KbqTooltipComponent,\n KbqTooltipTrigger\n];\n\n@NgModule({\n imports: COMPONENTS,\n providers: [\n KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,\n KBQ_TOOLTIP_OPEN_TIME_PROVIDER\n ],\n exports: COMPONENTS\n})\nexport class KbqToolTipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;AAEA;;;AAGG;AACI,MAAM,oBAAoB,GAE7B;;AAEA,IAAA,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE;AAC3B,QAAA,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5E,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QACrD,UAAU,CACN,cAAc,EACd,OAAO,CACH,kCAAkC,EAClC,SAAS,CAAC;AACN,YAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACvD,YAAA,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC7D,YAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE;AAC5D,SAAA,CAAC,CACL,CACJ;AACD,QAAA,UAAU,CAAC,aAAa,EAAE,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;KAC/F;CACJ;;ICoBW;AAAZ,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACzB,CAAC,EAJW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;MAMd,qBAAqB,GAAG,IAAI,cAAc,CAAoB,uBAAuB;AAElG;AACO,MAAM,8BAA8B,GAAG;AAC1C,IAAA,OAAO,EAAE,qBAAqB;AAC9B,IAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC;;AAGjB,MAAM,kBAAkB,GAAG;AAc5B,MAAO,mBAAoB,SAAQ,QAAQ,CAAA;AAZjD,IAAA,WAAA,GAAA;;AAaY,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAEhD,IAAA,CAAA,MAAM,GAAG,aAAa;AA8BzB,IAAA;AA1BG,IAAA,IAAI,CAAC,KAAa,EAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf;QACJ;QAEA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,kBAAkB,GAAG,CAAC,GAAG,KAAK,CAAC;AAE7E,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YACtB,iBAAiB,CACb,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,UAAU,CAAC,aAAa,EAC7B,IAAI,CAAC,MAAM,EACX,CAAA,EAAG,IAAI,CAAC,MAAO,CAAC,QAAQ,EAAE,CAAA,EAAA,CAAI,CACjC;QACL;QAEA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;IACpC;AAEA,IAAA,cAAc,CAAC,SAAiB,EAAE,WAAmB,EAAE,EAAE,QAAQ,EAAE,EAAA;AAC/D,QAAA,MAAM,QAAQ,GAAG;YACb,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAA,CAAE,GAAG;SACnC;QAED,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC;IAC1D;kIAhCS,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EALjB,CAAC,8BAA8B,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrE/C,8gCAgCA,EAAA,MAAA,EAAA,CAAA,whPAAA,EAAA,wxCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDiCQ,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAOR,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAEtC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAZ/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACL;AACH,qBAAA,EAAA,SAAA,EAGU,CAAC,8BAA8B,CAAC,EAAA,eAAA,EAC1B,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,UAAA,EACzB,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,8gCAAA,EAAA,MAAA,EAAA,CAAA,whPAAA,EAAA,wxCAAA,CAAA,EAAA;;sBAO9C,SAAS;uBAAC,SAAS;;MA8BX,2BAA2B,GAAG,IAAI,cAAc,CAAuB,6BAA6B;AAEjH;AACM,SAAU,+BAA+B,CAAC,OAAgB,EAAA;IAC5D,OAAO,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACjD;AAEA;AACO,MAAM,4CAA4C,GAAG;AACxD,IAAA,OAAO,EAAE,2BAA2B;IACpC,IAAI,EAAE,CAAC,OAAO,CAAC;AACf,IAAA,UAAU,EAAE;;AAaV,MAAO,iBACT,SAAQ,eAAoC,CAAA;;;AAsC5C,IAAA,IACI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,OAAO;IACvB;IAEA,IAAI,cAAc,CAAC,KAAc,EAAA;AAC7B,QAAA,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;IAC9B;;;AAIA,IAAA,IACI,gBAAgB,GAAA;QAChB,OAAO,IAAI,CAAC,SAAS;IACzB;IAWA,IAAI,gBAAgB,CAAC,KAA8B,EAAA;AAC/C,QAAA,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC;IAChC;;;AAIA,IAAA,IACI,wBAAwB,GAAA;QACxB,OAAO,IAAI,CAAC,iBAAiB;IACjC;IAEA,IAAI,wBAAwB,CAAC,KAAK,EAAA;AAC9B,QAAA,KAAK,CAAC,uBAAuB,CAAC,KAAK,CAAC;IACxC;;;AAIA,IAAA,IACI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ;IACxB;IAEA,IAAI,OAAO,CAAC,OAAkC,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QAEvB,IAAI,CAAC,UAAU,EAAE;IACrB;;;AAIA,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAI,QAAQ,CAAC,KAAK,EAAA;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAE7C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,IAAI,EAAE;QACf;IACJ;;;AAYA,IAAA,IACI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ;IACxB;IAEA,IAAI,OAAO,CAAC,KAAa,EAAA;QACrB,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACzB;aAAO;AACH,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAA,EAAG,aAAa,CAAC,KAAK,CAAA,EAAA,EAAK,aAAa,CAAC,KAAK,CAAA,CAAE;QACpE;QAEA,IAAI,CAAC,aAAa,EAAE;IACxB;;;AAMA,IAAA,IACI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,EAAE;IAClC;IAEA,IAAI,WAAW,CAAC,KAAa,EAAA;QACzB,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YAEzB,IAAI,CAAC,cAAc,EAAE;QACzB;aAAO;AACH,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QAC1B;IACJ;;;AAIA,IAAA,IACI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ;IACxB;IAEA,IAAI,OAAO,CAAC,GAAG,EAAA;AACX,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;QACnB,IAAI,CAAC,UAAU,EAAE;IACrB;;;AAMA,IAAA,IACI,KAAK,GAAA;AACL,QAAA,OAAO,CAAA,IAAA,EAAO,IAAI,CAAC,MAAM,EAAE;IAC/B;IAEA,IAAI,KAAK,CAAC,KAAkC,EAAA;QACxC,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,kBAAkB,CAAC,QAAQ;IACtD;AAeA,IAAA,IAAY,iBAAiB,GAAA;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IACrD;AA4BA;;;;;;;AAOG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;QAEpB,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE;YACnD,IAAI,CAAC,cAAc,EAAE;QACzB;QAEA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;YAC/C,IAAI,CAAC,UAAU,EAAE;QACrB;IACJ;AAEA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AA5OD,QAAA,IAAA,CAAA,cAAc,GAAyB,MAAM,CAAC,2BAA2B,CAAC;QAC1E,IAAA,CAAA,WAAW,GAAG,MAAM,CAAiB,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1E,QAAA,IAAA,CAAA,YAAY,GAAiB,MAAM,CAAC,YAAY,CAAC;;AAEjD,QAAA,IAAA,CAAA,QAAQ,GAAc,MAAM,CAAC,SAAS,CAAC;AAEjD;;;;;AAKG;QACM,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAqD;AAE1F;;;;;;AAMG;AACM,QAAA,IAAA,CAAA,0BAA0B,GAAG,KAAK,CAAU,IAAI,sEAAC;AAE1D;;;;AAIG;;;;QAIqC,IAAA,CAAA,eAAe,GAAY,KAAK;AAoBxE;;;AAGG;;;;QAIoE,IAAA,CAAA,iBAAiB,GAAY,KAAK;;;QA+CjF,IAAA,CAAA,UAAU,GAAG,GAAG;;;;QAIhB,IAAA,CAAA,UAAU,GAAG,CAAC;QAmB5B,IAAA,CAAA,QAAQ,GAAG,CAAA,EAAG,aAAa,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,CAAA,CAAE;QA+B7D,IAAA,CAAA,QAAQ,GAAQ,IAAI;AAapB,QAAA,IAAA,CAAA,MAAM,GAAgC,kBAAkB,CAAC,QAAQ;;;QAIP,IAAA,CAAA,KAAK,GAAY,KAAK;;;QAGtB,IAAA,CAAA,MAAM,GAAkB,IAAI;AAEvD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAE;AAEtC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW;QAMtE,IAAA,CAAA,cAAc,GAAG,cAAc;AAE/B,QAAA,IAAA,CAAA,aAAa,GAAkB;YACrC,UAAU,EAAE,CAAC,mBAAmB;SACnC;AAED;;;;;AAKG;;;;AAI0B,QAAA,IAAA,CAAA,QAAQ,GAA2C,eAAe,CAAC,OAAO;QAkCnG,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAAE;YAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAG,CAAC,cAAc,EAAE;YAE9D,IAAI,QAAQ,EAAE;AACV,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC;AACpE,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,eAAe,EAAE,oCAAoC,CAAC;YAC1G;iBAAO;AACH,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC;YACzE;AAEA,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,QAAQ;AAC7B,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAErG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAExD,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;YACnF,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,wCAAwC,CAAC;QAChF;IACJ;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAE/D,KAAK,CAAC,WAAW,EAAE;IACvB;AAEA,IAAA,IAAI,CAAC,KAAA,GAAgB,IAAI,CAAC,UAAU,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,UAAU,EAAE;YACtF;QACJ;AAEA,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAEjB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,sBAAsB,EAAE;QACjC;IACJ;;AAGA,IAAA,iBAAiB,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,EAAE,KAAK,CAAC,aAAa,YAAY,WAAW,CAAC;YAAE;AAEnD,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,aAAa,CAAC;QAElD,KAAK,CAAC,IAAI,EAAE;QAEZ,IAAI,CAAC,sBAAsB,EAAE;IACjC;AAEA;;;;;;;AAOG;AACH,IAAA,cAAc,CAAC,OAAoB,EAAA;QAC/B,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;IACpC;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB;QACJ;QAEA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;QACnE,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAC7B;IAEA,cAAc,GAAA;QACV,OAAO,KAAK,CACR,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAW,CAAC,oBAAoB,EAAE,GAAG,KAAK,EACxE,IAAI,CAAC,UAAW,CAAC,WAAW,EAAE,CACjC;IACL;IAEA,6BAA6B,GAAA;AACzB,QAAA,OAAO,mBAAmB;IAC9B;AAEA,IAAA,cAAc,CAAC,YAAA,GAAuB,IAAI,CAAC,SAAS,EAAA;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB;QACJ;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YACjG,QAAQ,EAAE,IAAI,CAAC;AAClB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;IAChC;IAEU,sBAAsB,GAAA;QAC5B,IACI,CAAC,IAAI,CAAC,QAAQ;AACd,YAAA,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAA4B,CAAC;AAC1F,YAAA,IAAI,CAAC,WAAW,KAAK,YAAY,EACnC;YACE,IAAI,CAAC,WAAW,EAAE;YAElB;QACJ;QAEA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,qBAAqB,EAAE;QACpE,MAAM,KAAK,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAEnC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAE7B,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,CAAC,GAAG,EAAE;YACxC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAW,CAAC,CAAC;AAC5B,YAAA,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;QAC5B;aAAO,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,CAAC,MAAM,EAAE;YAClD,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAW,CAAC,CAAC;YAC5B,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM;QAClD;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;IAClC;kIArXS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,qiBAmCN,gBAAgB,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EA2Be,gBAAgB,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAsHrB,gBAAgB,kIAGf,eAAe,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAvLrD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACF,wBAAA,0BAA0B,EAAE,QAAQ;AAEpC,wBAAA,WAAW,EAAE,wBAAwB;AACrC,wBAAA,YAAY,EAAE;AACjB,qBAAA;AACD,oBAAA,QAAQ,EAAE;AACb,iBAAA;;sBAoCI,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAIrC,KAAK;uBAAC,YAAY;;sBAWlB,KAAK;uBAAC,cAAc;;sBAYpB,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAQpE,KAAK;uBAAC,sBAAsB;;sBAW5B,KAAK;uBAAC,YAAY;;sBAalB,KAAK;uBAAC,oBAAoB;;sBAe1B,KAAK;uBAAC,eAAe;;sBAIrB,KAAK;uBAAC,eAAe;;sBAIrB,KAAK;uBAAC,YAAY;;sBAmBlB,KAAK;uBAAC,iBAAiB;;sBAiBvB,KAAK;uBAAC,mBAAmB;;sBAczB,KAAK;uBAAC,iBAAiB;;sBAavB,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAG/D,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,eAAe,EAAE;;sBAE/D,MAAM;uBAAC,oBAAoB;;sBAE3B,MAAM;uBAAC,kBAAkB;;sBAqBzB,KAAK;uBAAC,oBAAoB;;sBAS1B,KAAK;uBAAC,kBAAkB;;;AEtV7B,MAAM,UAAU,GAAG;IACf,mBAAmB;IACnB;CACH;MAUY,gBAAgB,CAAA;kIAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAZzB,mBAAmB;AACnB,YAAA,iBAAiB,aADjB,mBAAmB;YACnB,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAWR,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,SAAA,EANd;YACP,4CAA4C;YAC5C;AACH,SAAA,EAAA,CAAA,CAAA;;4FAGQ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAR5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,UAAU;AACnB,oBAAA,SAAS,EAAE;wBACP,4CAA4C;wBAC5C;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;AACZ,iBAAA;;;ACpBD;;AAEG;;;;"}
1
+ {"version":3,"file":"koobiq-components-tooltip.mjs","sources":["../../../packages/components/tooltip/tooltip-registry.ts","../../../packages/components/tooltip/tooltip.animations.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 * @docs-private\n */\nexport interface KbqExclusiveTooltip {\n /** Hides the tooltip because another one 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 { animate, AnimationTriggerMetadata, keyframes, state, style, transition, trigger } from '@angular/animations';\n\n/**\n * Animations used by KbqTooltip.\n * @docs-private\n */\nexport const kbqTooltipAnimations: {\n readonly tooltipState: AnimationTriggerMetadata;\n} = {\n /** Animation that transitions a tooltip in and out. */\n tooltipState: trigger('state', [\n state('initial, void, hidden', style({ opacity: 0, transform: 'scale(0)' })),\n state('visible', style({ transform: 'scale(0.99)' })),\n transition(\n '* => visible',\n animate(\n '200ms cubic-bezier(0, 0, 0.2, 1)',\n keyframes([\n style({ opacity: 0, transform: 'scale(0)', offset: 0 }),\n style({ opacity: 0.5, transform: 'scale(0.9)', offset: 0.5 }),\n style({ opacity: 1, transform: 'scale(0.99)', offset: 1 })\n ])\n )\n ),\n transition('* => hidden', animate('100ms cubic-bezier(0, 0, 0.2, 1)', style({ opacity: 0 })))\n ])\n};\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Point } from '@angular/cdk/drag-drop';\nimport { Overlay, OverlayConfig, ScrollStrategy } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewChild,\n ViewEncapsulation,\n WritableSignal,\n booleanAttribute,\n effect,\n inject,\n input,\n numberAttribute\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n KBQ_PARENT_POPUP,\n KbqComponentColors,\n KbqParentPopup,\n KbqPopUp,\n KbqPopUpPlacementValues,\n KbqPopUpTrigger,\n POSITION_TO_CSS_MAP,\n PopUpPlacements,\n PopUpTriggers,\n applyPopupMargins\n} from '@koobiq/components/core';\nimport { EMPTY, merge } from 'rxjs';\nimport { KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT, KbqExclusiveTooltip, KbqTooltipRegistry } from './tooltip-registry';\nimport { kbqTooltipAnimations } from './tooltip.animations';\n\nexport enum TooltipModifier {\n Default = 'default',\n Warning = 'warning',\n Extended = 'extended'\n}\n\nexport const KBQ_TOOLTIP_OPEN_TIME = new InjectionToken<{ value: number }>('kbq-tooltip-open-time');\n\n/** @docs-private */\nexport const KBQ_TOOLTIP_OPEN_TIME_PROVIDER = {\n provide: KBQ_TOOLTIP_OPEN_TIME,\n useValue: { value: 0 }\n};\n\nexport const MIN_TIME_FOR_DELAY = 2000;\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 providers: [KBQ_TOOLTIP_OPEN_TIME_PROVIDER],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n animations: [kbqTooltipAnimations.tooltipState]\n})\nexport class KbqTooltipComponent extends KbqPopUp {\n private openTime = inject(KBQ_TOOLTIP_OPEN_TIME);\n\n prefix = 'kbq-tooltip';\n\n @ViewChild('tooltip') elementRef: ElementRef;\n\n show(delay: number) {\n if (!this.content) {\n return;\n }\n\n super.show(Date.now() - this.openTime.value < MIN_TIME_FOR_DELAY ? 0 : delay);\n\n if (this.offset !== null) {\n applyPopupMargins(\n this.renderer,\n this.elementRef.nativeElement,\n this.prefix,\n `${this.offset!.toString()}px`\n );\n }\n\n this.openTime.value = Date.now();\n }\n\n updateClassMap(placement: string, customClass: string, { modifier }) {\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\nexport const KBQ_TOOLTIP_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>('kbq-tooltip-scroll-strategy');\n\n/** @docs-private */\nexport function kbqTooltipScrollStrategyFactory(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.close();\n}\n\n/** @docs-private */\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 },\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 /** @docs-private */\n protected scrollStrategy: () => ScrollStrategy = inject(KBQ_TOOLTIP_SCROLL_STRATEGY);\n /** @docs-private */\n protected parentPopup = inject<KbqParentPopup>(KBQ_PARENT_POPUP, { 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`, tooltip elements will not receive pointer events,\n * allowing interactions to pass through to underlying elements.\n * Defaults to `true`.\n */\n readonly ignoreTooltipPointerEvents = input<boolean>(true);\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 // TODO: Skipped for migration because:\n // This input overrides a field from a superclass, while the superclass field\n // is not migrated.\n @Input({ transform: booleanAttribute }) hideWithTimeout: boolean = false;\n\n /** Input (`kbqVisible`) that programmatically shows or hides the tooltip; reflects the current `visible` state. */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqVisible')\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 // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqPlacement')\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 // TODO: Skipped for migration because:\n // Class of this input is manually instantiated. This is discouraged and prevents\n // migration.\n @Input({ alias: 'kbqRelativeToPointer', transform: booleanAttribute }) relativeToPointer: boolean = false;\n\n /** Input (`kbqPlacementPriority`) that sets the ordered fallback placements; reflects the current `placementPriority`. */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqPlacementPriority')\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 // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTooltip')\n get content(): string | TemplateRef<any> {\n return this._content;\n }\n\n set content(content: string | TemplateRef<any>) {\n this._content = content;\n\n this.updateData();\n }\n\n /** Input (`kbqTooltipDisabled`) controlling whether the tooltip is disabled; setting it to `true` hides it. */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTooltipDisabled')\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this._disabled) {\n this.hide();\n }\n }\n\n /** Input (`kbqEnterDelay`) — delay in milliseconds before the tooltip is shown. Defaults to `400`. */\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input('kbqEnterDelay') enterDelay = 400;\n /** Input (`kbqLeaveDelay`) — delay in milliseconds before the tooltip is hidden. Defaults to `0`. */\n // TODO: Skipped for migration because:\n // This input overrides a field from a superclass, while the superclass field\n // is not migrated.\n @Input('kbqLeaveDelay') leaveDelay = 0;\n\n /** Input (`kbqTrigger`) with the comma-separated trigger events. An empty value resets to hover + focus and rebinds listeners. */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTrigger')\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 // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTooltipClass')\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 // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTooltipContext')\n get context() {\n return this._context;\n }\n\n set context(ctx) {\n this._context = ctx;\n this.updateData();\n }\n\n /** Backing field for `context`. */\n private _context: any = null;\n\n /** Input (`kbqTooltipColor`) with the tooltip color theme; the getter returns the `kbq-`-prefixed CSS class. */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTooltipColor')\n get color(): string {\n return `kbq-${this._color}`;\n }\n\n set color(value: KbqComponentColors | string) {\n this._color = value || KbqComponentColors.Contrast;\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 // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input({ alias: 'kbqTooltipArrow', transform: booleanAttribute }) arrow: boolean = false;\n /** Input (`kbqTooltipOffset`) — distance in pixels between the tooltip and its trigger; `null` uses the default. */\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input({ alias: 'kbqTooltipOffset', transform: numberAttribute }) offset: number | null = null;\n\n /** Output (`kbqPlacementChange`) that emits the new placement whenever the tooltip repositions. */\n @Output('kbqPlacementChange') readonly placementChange = new EventEmitter();\n\n /** Output (`kbqVisibleChange`) that emits when the tooltip's visibility changes. */\n @Output('kbqVisibleChange') readonly visibleChange = new EventEmitter<boolean>();\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: ['kbq-tooltip-panel']\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 // TODO: Skipped for migration because:\n // Class of this input is manually instantiated. This is discouraged and prevents\n // migration.\n @Input('kbqTooltipModifier') modifier: TooltipModifier | `${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 // TODO: Skipped for migration because:\n // Class of this input is manually instantiated. This is discouraged and prevents\n // migration.\n @Input('kbqTooltipHeader') header: string | TemplateRef<any>;\n\n /**\n * The old `KbqWarningTooltipTrigger` / `KbqExtendedTooltipTrigger` subclasses had\n * setters on their content/header inputs that pushed updates into the open tooltip.\n * Now that `modifier` and `header` are plain `@Input` fields on this base class,\n * we need to mirror that reactivity manually — without it, changing the inputs\n * while a tooltip is open silently leaves the overlay showing stale data until\n * the next show/hide cycle.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.instance) return;\n\n if (changes.modifier && !changes.modifier.firstChange) {\n this.updateClassMap();\n }\n\n if (changes.header && !changes.header.firstChange) {\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() && INTERACTIVE_TRIGGERS.some((name) => this.trigger.includes(name));\n }\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. Both the subscription and the teardown live\n * here rather than in `ngAfterViewInit`/`ngOnDestroy` because several subclasses override those hooks:\n * `KbqTitleDirective` and `KbqEllipsisCenterDirective` skip `super.ngAfterViewInit()`, and `KbqPasswordToggle`\n * skips `super` in both hooks entirely. `destroyRef` additionally covers a trigger destroyed while its\n * tooltip is still visible — that path disposes the overlay without emitting `visibleChange(false)`.\n */\n constructor() {\n super();\n\n this.visibleChange.pipe(takeUntilDestroyed()).subscribe((visible) => {\n if (visible) {\n if (this.participatesInSingleInstance) {\n this.tooltipRegistry.setVisible(this);\n }\n } else {\n this.tooltipRegistry.clearVisible(this);\n }\n });\n\n this.destroyRef.onDestroy(() => this.tooltipRegistry.clearVisible(this));\n\n effect(() => {\n if (!this.forDisabledComponent()) return;\n\n const disabled = this.forDisabledComponent()!.disabledSignal();\n\n if (disabled) {\n this.renderer.setAttribute(this.getNativeElement(), 'tabindex', '0');\n this.renderer.setStyle(this.getNativeElement(), 'outline-color', 'var(--kbq-states-line-focus-theme)');\n } else {\n this.renderer.setAttribute(this.getNativeElement(), 'tabindex', '-1');\n }\n\n this.disabled = !disabled;\n });\n }\n\n /**\n * Hides the tooltip when a parent pop-up closes, starts focus monitoring on the host, and—when\n * `ignoreTooltipPointerEvents` is set—adds the panel class that makes the tooltip ignore pointer events.\n */\n ngAfterViewInit(): void {\n this.parentPopup?.closedStream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.hide());\n\n this.focusMonitor.monitor(this.elementRef.nativeElement);\n\n if (this.ignoreTooltipPointerEvents() && Array.isArray(this.overlayConfig.panelClass)) {\n this.overlayConfig.panelClass.push('cdk-overlay-pane_ignore-pointer-events');\n }\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 * Shows the tooltip after `delay` ms. Suppresses showing on a focus trigger that did not originate from\n * the keyboard, and applies cursor-relative positioning when `relativeToPointer` is enabled.\n */\n show(delay: number = this.enterDelay) {\n if (this.triggerName === 'focus' && this.focusMonitor['_lastFocusOrigin'] !== 'keyboard') {\n return;\n }\n\n super.show(delay);\n\n if (this.relativeToPointer) {\n this.applyRelativeToPointer();\n }\n }\n\n /**\n * Hides the tooltip because another tooltip became visible.\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 * @docs-private */\n hideAsInactive(): void {\n if (this.preventClose) return;\n\n this.ngZone.run(() => this.instance?.hide(0));\n }\n\n /** method allows to show the tooltip relative to the given mouse event.\n * @docs-private */\n showForMouseEvent(event: MouseEvent) {\n if (!(event.currentTarget instanceof HTMLElement)) return;\n\n this.triggerName = 'mouseenter';\n this.mouseEvent = event;\n this.setExternalNativeElement(event.currentTarget);\n\n super.show();\n\n this.applyRelativeToPointer();\n }\n\n /**\n * method allows to show the tooltip relative to the element\n * Use this approach when it is not possible to define a trigger in the template.\n *\n * For example:\n * const tooltip = new KbqTooltipTrigger();\n * tooltip.showForElement(element);\n * @docs-private */\n showForElement(element: HTMLElement) {\n this.show();\n this.strategy.setOrigin(element);\n }\n\n /** @docs-private */\n updateData() {\n if (!this.instance) {\n return;\n }\n\n this.instance.content = this.content;\n this.instance.header = this.header;\n this.instance.context = this.context && { $implicit: this.context };\n this.instance.arrow = this.arrow;\n this.instance.offset = this.offset;\n this.instance.detectChanges();\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.color}`, {\n modifier: this.modifier\n });\n this.instance.markForCheck();\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 this.placementPriority = null;\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 [class.kbq-tooltip_arrowless]=\"!arrow\"\n [class]=\"classMap\"\n [@state]=\"visibility\"\n (@state.done)=\"animationDone($event)\"\n (@state.start)=\"animationStart()\"\n>\n <div class=\"kbq-tooltip__inner\">\n @if (arrow) {\n <div class=\"kbq-tooltip__arrow\"></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 {\n KBQ_TOOLTIP_OPEN_TIME_PROVIDER,\n KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,\n KbqTooltipComponent,\n KbqTooltipTrigger\n} from './tooltip.component';\n\nconst COMPONENTS = [\n KbqTooltipComponent,\n KbqTooltipTrigger\n];\n\n@NgModule({\n imports: COMPONENTS,\n providers: [\n KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,\n KBQ_TOOLTIP_OPEN_TIME_PROVIDER\n ],\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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"}