@koobiq/components 20.1.0 → 20.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/accordion/_accordion-theme.scss +6 -2
  2. package/accordion/accordion-tokens.scss +3 -0
  3. package/accordion/{accordion-trigger.component.scss → accordion-trigger.scss} +10 -0
  4. package/accordion/accordion.scss +71 -0
  5. package/accordion/index.d.ts +264 -121
  6. package/actions-panel/index.d.ts +25 -13
  7. package/alert/_alert-theme.scss +14 -0
  8. package/alert/alert.component.scss +24 -13
  9. package/alert/index.d.ts +63 -29
  10. package/app-switcher/app-switcher-dropdown-app.scss +7 -5
  11. package/app-switcher/app-switcher-dropdown-site.scss +6 -4
  12. package/app-switcher/index.d.ts +41 -4
  13. package/app-switcher/kbq-app-switcher-list-item.scss +6 -8
  14. package/autocomplete/autocomplete.scss +2 -1
  15. package/autocomplete/index.d.ts +58 -37
  16. package/badge/index.d.ts +2 -3
  17. package/breadcrumbs/index.d.ts +1 -1
  18. package/button/index.d.ts +2 -2
  19. package/button-toggle/button-toggle-tokens.scss +2 -0
  20. package/button-toggle/button-toggle.scss +9 -0
  21. package/button-toggle/index.d.ts +5 -0
  22. package/checkbox/index.d.ts +33 -29
  23. package/clamped-text/index.d.ts +3 -2
  24. package/code-block/index.d.ts +24 -19
  25. package/content-panel/index.d.ts +1 -1
  26. package/core/index.d.ts +1217 -186
  27. package/core/option/_action-container-mixins.scss +28 -0
  28. package/core/option/_option-theme.scss +24 -0
  29. package/core/option/action.scss +7 -0
  30. package/core/styles/_core.scss +2 -0
  31. package/core/styles/_koobiq-theme.scss +2 -0
  32. package/core/styles/_tokens.scss +1 -0
  33. package/core/styles/common/_animation.scss +31 -24
  34. package/core/styles/common/_connected-overlay.scss +39 -0
  35. package/core/styles/common/_select.scss +19 -2
  36. package/core/styles/common/_tokens.scss +0 -9
  37. package/core/styles/theming/_index.scss +0 -1
  38. package/core/styles/theming/_theming.scss +34 -5
  39. package/datepicker/index.d.ts +46 -15
  40. package/dl/dl.scss +26 -0
  41. package/dl/index.d.ts +8 -1
  42. package/dropdown/_dropdown-theme.scss +28 -2
  43. package/dropdown/dropdown-item.scss +29 -0
  44. package/dropdown/dropdown-tokens.scss +2 -1
  45. package/dropdown/dropdown.scss +16 -1
  46. package/dropdown/index.d.ts +331 -17
  47. package/dynamic-translation/index.d.ts +1 -1
  48. package/fesm2022/koobiq-components-accordion.mjs +480 -317
  49. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-actions-panel.mjs +57 -46
  51. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-alert.mjs +98 -58
  53. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-app-switcher.mjs +233 -38
  55. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-autocomplete.mjs +89 -52
  57. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-badge.mjs +18 -17
  59. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
  61. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-button-toggle.mjs +17 -12
  63. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-button.mjs +25 -25
  65. package/fesm2022/koobiq-components-checkbox.mjs +69 -92
  66. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-clamped-text.mjs +18 -13
  68. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-code-block.mjs +56 -69
  70. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-content-panel.mjs +29 -29
  72. package/fesm2022/koobiq-components-core.mjs +2485 -735
  73. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  74. package/fesm2022/koobiq-components-datepicker.mjs +168 -126
  75. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-divider.mjs +7 -7
  77. package/fesm2022/koobiq-components-dl.mjs +23 -15
  78. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-dropdown.mjs +814 -136
  80. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  82. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  83. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  84. package/fesm2022/koobiq-components-file-upload.mjs +74 -42
  85. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-filter-bar.mjs +783 -199
  87. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-flag.mjs +7 -7
  89. package/fesm2022/koobiq-components-form-field.mjs +350 -162
  90. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-icon.mjs +52 -25
  92. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-inline-edit.mjs +175 -28
  94. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-input.mjs +41 -24
  96. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-link.mjs +8 -8
  98. package/fesm2022/koobiq-components-list.mjs +657 -143
  99. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  101. package/fesm2022/koobiq-components-markdown.mjs +14 -11
  102. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  103. package/fesm2022/koobiq-components-modal.mjs +59 -35
  104. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  105. package/fesm2022/koobiq-components-navbar.mjs +177 -67
  106. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  107. package/fesm2022/koobiq-components-notification-center.mjs +40 -24
  108. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  109. package/fesm2022/koobiq-components-overflow-items.mjs +16 -17
  110. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  111. package/fesm2022/koobiq-components-popover.mjs +31 -21
  112. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  113. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  114. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  115. package/fesm2022/koobiq-components-radio.mjs +10 -10
  116. package/fesm2022/koobiq-components-resizer.mjs +33 -14
  117. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
  119. package/fesm2022/koobiq-components-search-expandable.mjs +49 -14
  120. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  121. package/fesm2022/koobiq-components-select.mjs +450 -146
  122. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  123. package/fesm2022/koobiq-components-sidebar.mjs +14 -14
  124. package/fesm2022/koobiq-components-sidepanel.mjs +26 -26
  125. package/fesm2022/koobiq-components-skeleton.mjs +10 -10
  126. package/fesm2022/koobiq-components-split-button.mjs +10 -17
  127. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-splitter.mjs +17 -17
  129. package/fesm2022/koobiq-components-table.mjs +15 -13
  130. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  131. package/fesm2022/koobiq-components-tabs.mjs +80 -68
  132. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  133. package/fesm2022/koobiq-components-tags.mjs +283 -122
  134. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  135. package/fesm2022/koobiq-components-textarea.mjs +13 -8
  136. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  137. package/fesm2022/koobiq-components-time-range.mjs +29 -24
  138. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  139. package/fesm2022/koobiq-components-timepicker.mjs +61 -30
  140. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  141. package/fesm2022/koobiq-components-timezone.mjs +77 -42
  142. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  143. package/fesm2022/koobiq-components-title.mjs +7 -7
  144. package/fesm2022/koobiq-components-toast.mjs +51 -26
  145. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-toggle.mjs +72 -64
  147. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-tooltip.mjs +219 -28
  149. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-top-bar.mjs +13 -13
  151. package/fesm2022/koobiq-components-tree-select.mjs +222 -80
  152. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  153. package/fesm2022/koobiq-components-tree.mjs +302 -81
  154. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  155. package/fesm2022/koobiq-components-username.mjs +27 -27
  156. package/file-upload/index.d.ts +25 -6
  157. package/file-upload/multiple-file-upload.component.scss +14 -0
  158. package/filter-bar/_filter-bar-theme.scss +0 -10
  159. package/filter-bar/filter-bar-tokens.scss +3 -0
  160. package/filter-bar/filters.scss +3 -2
  161. package/filter-bar/index.d.ts +281 -9
  162. package/filter-bar/pipes/base-pipe.scss +0 -11
  163. package/filter-bar/pipes/pipe-input.scss +10 -0
  164. package/filter-bar/pipes/pipe-multi-tree-select.scss +0 -6
  165. package/filter-bar/pipes/pipe-multiselect.scss +0 -6
  166. package/filter-bar/pipes/pipe-tree-select.scss +0 -6
  167. package/form-field/_form-field-theme.scss +76 -20
  168. package/form-field/fieldset.scss +10 -0
  169. package/form-field/form-field-tokens.scss +15 -1
  170. package/form-field/form-field.scss +15 -19
  171. package/form-field/index.d.ts +147 -65
  172. package/icon/icon-button.scss +3 -1
  173. package/icon/index.d.ts +45 -7
  174. package/inline-edit/index.d.ts +57 -4
  175. package/inline-edit/inline-edit.scss +10 -0
  176. package/input/index.d.ts +17 -2
  177. package/list/_list-theme.scss +42 -10
  178. package/list/index.d.ts +326 -79
  179. package/list/list-tokens.scss +43 -8
  180. package/list/list.scss +186 -12
  181. package/markdown/index.d.ts +1 -1
  182. package/modal/index.d.ts +21 -4
  183. package/modal/modal-tokens.scss +1 -1
  184. package/navbar/_navbar-item_vertical.scss +7 -5
  185. package/navbar/index.d.ts +54 -5
  186. package/navbar/navbar-brand.scss +23 -7
  187. package/navbar/vertical-navbar.scss +6 -0
  188. package/notification-center/index.d.ts +2 -1
  189. package/notification-center/notification-item.scss +6 -0
  190. package/package.json +3 -6
  191. package/popover/index.d.ts +2 -2
  192. package/prebuilt-themes/dark-theme.css +1 -1
  193. package/prebuilt-themes/light-theme.css +1 -1
  194. package/prebuilt-themes/theme.css +1 -1
  195. package/resizer/index.d.ts +12 -0
  196. package/schematics/collection.json +10 -0
  197. package/schematics/migrations/alert-signals/README.md +64 -0
  198. package/schematics/migrations/alert-signals/data.js +70 -0
  199. package/schematics/migrations/alert-signals/index.js +350 -0
  200. package/schematics/migrations/alert-signals/schema.json +20 -0
  201. package/schematics/migrations/autocomplete-panel-width-auto/README.md +68 -0
  202. package/schematics/migrations/autocomplete-panel-width-auto/index.js +70 -0
  203. package/schematics/migrations/autocomplete-panel-width-auto/schema.json +15 -0
  204. package/schematics/migrations/deprecated-icons/README.md +29 -4
  205. package/schematics/migrations/deprecated-icons/data.js +7 -0
  206. package/schematics/migrations/deprecated-icons/index.js +62 -35
  207. package/schematics/migrations/filter-bar-signals/README.md +1 -1
  208. package/schematics/migrations/new-icons-pack/README.md +37 -2
  209. package/schematics/migrations/new-icons-pack/data.js +8 -0
  210. package/schematics/migrations/new-icons-pack/index.js +144 -53
  211. package/schematics/migrations.json +11 -1
  212. package/schematics/ng-add/index.js +3 -3
  213. package/schematics/utils/angular-parsing.js +41 -14
  214. package/schematics/utils/ast.js +31 -0
  215. package/schematics/utils/icon-migration.js +530 -0
  216. package/schematics/utils/typescript.js +44 -0
  217. package/scrollbar/index.d.ts +1 -1
  218. package/search-expandable/index.d.ts +3 -0
  219. package/select/index.d.ts +212 -40
  220. package/select/select-tokens.scss +0 -1
  221. package/select/select.scss +0 -2
  222. package/splitter/index.d.ts +1 -1
  223. package/table/_table-theme.scss +4 -0
  224. package/table/index.d.ts +2 -1
  225. package/table/table.scss +8 -0
  226. package/tabs/_tabs-common.scss +60 -31
  227. package/tabs/_tabs-theme.scss +12 -0
  228. package/tabs/index.d.ts +2 -2
  229. package/tabs/tab-header.scss +14 -0
  230. package/tabs/tab-nav-bar.scss +4 -0
  231. package/tabs/tabs-tokens.scss +1 -0
  232. package/tags/index.d.ts +128 -29
  233. package/textarea/index.d.ts +5 -0
  234. package/time-range/index.d.ts +1 -1
  235. package/timepicker/index.d.ts +4 -0
  236. package/timezone/index.d.ts +10 -8
  237. package/toast/index.d.ts +26 -3
  238. package/toggle/index.d.ts +34 -14
  239. package/tooltip/index.d.ts +119 -7
  240. package/tree/_tree-theme.scss +25 -5
  241. package/tree/index.d.ts +71 -3
  242. package/tree/tree-option.scss +2 -8
  243. package/tree-select/_tree-select-theme.scss +22 -0
  244. package/tree-select/index.d.ts +127 -36
  245. package/accordion/accordion.component.scss +0 -50
  246. package/core/styles/_tokens.kbq.import.scss +0 -4
  247. package/core/styles/theming/_components-theming.scss +0 -1927
  248. package/filter-bar/pipes/pipe-select.scss +0 -5
  249. package/overflow-items/overflow-items.scss +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-toggle.mjs","sources":["../../../packages/components/toggle/toggle.component.ts","../../../packages/components/toggle/toggle.component.html","../../../packages/components/toggle/toggle.module.ts","../../../packages/components/toggle/koobiq-components-toggle.ts"],"sourcesContent":["import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { CdkObserveContent } from '@angular/cdk/observers';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n inject,\n Input,\n input,\n numberAttribute,\n OnDestroy,\n output,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KBQ_CHECKBOX_CLICK_ACTION, KbqCheckboxClickAction, TransitionCheckState } from '@koobiq/components/checkbox';\nimport { KbqAnimationCurves, KbqAnimationDurations, KbqCheckedState, KbqColorDirective } from '@koobiq/components/core';\n\nlet nextUniqueId = 0;\n\ntype ToggleLabelPositionType = 'left' | 'right';\n\nexport class KbqToggleChange {\n source: KbqToggleComponent;\n checked: boolean;\n}\n\n@Component({\n selector: 'kbq-toggle',\n imports: [\n CdkObserveContent\n ],\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.scss', './toggle-tokens.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqToggleComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-toggle',\n '[class.kbq-toggle_big]': 'big()',\n '[id]': 'id',\n '[attr.id]': 'id',\n '[class.kbq-disabled]': 'disabled || loading()',\n '[class.kbq-active]': 'checked',\n '[class.kbq-indeterminate]': 'indeterminate'\n },\n animations: [\n trigger('switch', [\n state(TransitionCheckState.Init, style({ left: '3px' })),\n state(TransitionCheckState.Unchecked, style({ left: '3px' })),\n state(TransitionCheckState.Indeterminate, style({ left: '10px', visibility: 'hidden' })),\n state(TransitionCheckState.Checked, style({ left: 'calc(100% - 11px)' })),\n transition(\n `${TransitionCheckState.Init} => ${TransitionCheckState.Checked}`,\n animate(KbqAnimationDurations.Entering)\n ),\n transition(\n `${TransitionCheckState.Checked} <=> ${TransitionCheckState.Unchecked}`,\n animate(KbqAnimationDurations.Rapid)\n ),\n transition(\n `${TransitionCheckState.Indeterminate} => *`,\n animate(`${KbqAnimationDurations.Instant} ${KbqAnimationCurves.EaseInOut}`)\n )\n ])\n ],\n exportAs: 'kbqToggle'\n})\nexport class KbqToggleComponent extends KbqColorDirective implements AfterViewInit, ControlValueAccessor, OnDestroy {\n private focusMonitor = inject(FocusMonitor);\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n readonly big = input<boolean>(false);\n\n readonly inputElement = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n readonly labelPosition = input<ToggleLabelPositionType>('right');\n\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input() id: string;\n\n get inputId(): string {\n return `${this.id || this.uniqueId}-input`;\n }\n\n readonly name = input<string | null>(null);\n\n readonly value = input<string>(undefined!);\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get disabled() {\n return this._disabled;\n }\n\n set disabled(value: any) {\n if (value !== this._disabled) {\n this._disabled = value;\n this.changeDetectorRef.markForCheck();\n }\n }\n\n private _disabled: boolean = false;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: numberAttribute })\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this._tabIndex = value;\n }\n\n private _tabIndex = 0;\n\n get checked() {\n return this._checked;\n }\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n set checked(value: boolean) {\n if (value !== this._checked) {\n this._checked = value;\n this.setTransitionCheckState();\n this.changeDetectorRef.markForCheck();\n }\n }\n\n private _checked: boolean = false;\n\n /**\n * Whether the toggle is indeterminate. This is also known as \"mixed\" mode and can be used to\n * represent a checkbox with three states, e.g. a checkbox that represents a nested list of\n * checkable items. Note that whenever checkbox is manually clicked, indeterminate is immediately\n * set to false.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get indeterminate(): boolean {\n return this._indeterminate;\n }\n\n set indeterminate(value: boolean) {\n const changed = value !== this._indeterminate;\n\n this._indeterminate = value;\n\n if (changed) {\n this.setTransitionCheckState();\n this.indeterminateChange.emit(this._indeterminate);\n }\n }\n\n private _indeterminate: boolean = false;\n /**\n * Property for manually set loading state.\n */\n readonly loading = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n readonly change = output<KbqToggleChange>();\n\n /** Event emitted when the toggle's `indeterminate` value changes. */\n readonly indeterminateChange = output<boolean>();\n\n /** @docs-private */\n protected currentCheckState: TransitionCheckState = TransitionCheckState.Init;\n\n /** Defines the behavior when a user clicks on the toggle. */\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input() clickAction: KbqCheckboxClickAction = inject(KBQ_CHECKBOX_CLICK_ACTION, { optional: true }) || undefined;\n\n private uniqueId: string = `kbq-toggle-${++nextUniqueId}`;\n\n constructor() {\n super();\n\n this.id = this.uniqueId;\n }\n\n ngAfterViewInit(): void {\n this.focusMonitor.monitor(this.elementRef.nativeElement, true);\n }\n\n ngOnDestroy() {\n this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n }\n\n focus(): void {\n this.focusMonitor.focusVia(this.inputElement().nativeElement, 'keyboard');\n }\n\n getAriaChecked(): KbqCheckedState {\n return this.checked ? 'true' : this.indeterminate ? 'mixed' : 'false';\n }\n\n onChangeEvent(event: Event) {\n event.stopPropagation();\n }\n\n onLabelTextChange() {\n this.changeDetectorRef.markForCheck();\n }\n\n onInputClick(event: MouseEvent) {\n if (this.loading()) return;\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `toggle` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n\n if (!this.disabled && this.clickAction !== 'noop') {\n // When user manually click on the toggle, `indeterminate` is set to false.\n if (this.indeterminate && this.clickAction !== 'check') {\n Promise.resolve().then(() => {\n this._indeterminate = false;\n this.indeterminateChange.emit(this._indeterminate);\n });\n }\n\n this._checked = !this.checked;\n this.onTouchedCallback();\n this.transitionCheckState(this._checked ? TransitionCheckState.Checked : TransitionCheckState.Unchecked);\n // Emit our custom change event if the native input emitted one.\n // It is important to only emit it, if the native input triggered one, because\n // we don't want to trigger a change event, when the `checked` variable changes for example.\n this.emitChangeEvent();\n } else if (!this.disabled && this.clickAction === 'noop') {\n // Reset native input when clicked with noop. The native checkbox becomes checked after\n // click, reset it to be align with `checked` value of `kbq-toggle`.\n const inputElement = this.inputElement();\n\n inputElement.nativeElement.checked = this.checked;\n inputElement.nativeElement.indeterminate = this.indeterminate;\n }\n }\n\n writeValue(value: any) {\n this.checked = !!value;\n }\n\n registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n private setTransitionCheckState() {\n if (this.indeterminate) {\n this.transitionCheckState(TransitionCheckState.Indeterminate);\n } else {\n this.transitionCheckState(this.checked ? TransitionCheckState.Checked : TransitionCheckState.Unchecked);\n }\n }\n\n private onTouchedCallback = () => {};\n\n private onChangeCallback = (_: any) => {};\n\n private transitionCheckState(newState: TransitionCheckState) {\n const oldState = this.currentCheckState;\n\n if (oldState === newState) return;\n\n this.currentCheckState = newState;\n }\n\n private emitChangeEvent() {\n const event = new KbqToggleChange();\n\n event.source = this;\n event.checked = this.checked;\n\n this.onChangeCallback(this.checked);\n this.change.emit(event);\n }\n}\n","<label class=\"kbq-toggle-layout\" [attr.for]=\"inputId\" [class.kbq-toggle-layout_left]=\"labelPosition() === 'left'\">\n <input\n #input\n role=\"switch\"\n type=\"checkbox\"\n class=\"kbq-toggle-input cdk-visually-hidden\"\n [attr.aria-checked]=\"getAriaChecked()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.name]=\"name()\"\n [attr.value]=\"value()\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [id]=\"inputId\"\n [indeterminate]=\"indeterminate\"\n [tabIndex]=\"tabIndex\"\n (change)=\"onChangeEvent($event)\"\n (click)=\"onInputClick($event)\"\n (keydown.enter)=\"input.click()\"\n />\n <div class=\"kbq-toggle-bar-container\">\n <div class=\"kbq-toggle-bar\" [class.kbq-progress]=\"loading()\">\n <div class=\"kbq-toggle__circle\" [@switch]=\"currentCheckState\"></div>\n <div class=\"kbq-toggle__thumb\"></div>\n </div>\n </div>\n\n <div\n class=\"kbq-toggle__content\"\n [class.kbq-toggle__content_left]=\"labelPosition() === 'left'\"\n [class.kbq-toggle__content_right]=\"labelPosition() === 'right'\"\n >\n <span class=\"kbq-toggle-label\" (cdkObserveContent)=\"onLabelTextChange()\">\n <ng-content />\n </span>\n\n <ng-content select=\"kbq-hint\" />\n </div>\n</label>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { NgModule } from '@angular/core';\nimport { KbqToggleComponent } from './toggle.component';\n\n@NgModule({\n imports: [A11yModule, KbqToggleComponent],\n exports: [KbqToggleComponent]\n})\nexport class KbqToggleModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-toggle.mjs","sources":["../../../packages/components/toggle/toggle.component.ts","../../../packages/components/toggle/toggle.component.html","../../../packages/components/toggle/toggle.module.ts","../../../packages/components/toggle/koobiq-components-toggle.ts"],"sourcesContent":["import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { CdkObserveContent } from '@angular/cdk/observers';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n effect,\n ElementRef,\n inject,\n Input,\n input,\n numberAttribute,\n OnDestroy,\n output,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { KBQ_CHECKBOX_CLICK_ACTION } from '@koobiq/components/checkbox';\nimport {\n KBQ_CHECKABLE_CLICK_ACTION,\n KbqAnimationCurves,\n KbqAnimationDurations,\n KbqCheckable,\n KbqCheckableClickAction,\n KbqCheckedState,\n KbqColorDirective,\n TransitionCheckState\n} from '@koobiq/components/core';\n\nlet nextUniqueId = 0;\n\ntype ToggleLabelPositionType = 'left' | 'right';\n\nexport class KbqToggleChange {\n source: KbqToggleComponent;\n checked: boolean;\n}\n\n/**\n * Toggle click action when user click on input element. Alias of `KbqCheckableClickAction`.\n */\nexport type KbqToggleClickAction = KbqCheckableClickAction;\n\n@Component({\n selector: 'kbq-toggle',\n imports: [\n CdkObserveContent\n ],\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.scss', './toggle-tokens.scss'],\n providers: [\n // Falls back to `KBQ_CHECKBOX_CLICK_ACTION` for backwards compatibility with apps that already\n // configure it globally to control click behavior for both checkbox and toggle.\n { provide: KBQ_CHECKABLE_CLICK_ACTION, useFactory: () => inject(KBQ_CHECKBOX_CLICK_ACTION, { optional: true }) }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-toggle',\n '[class.kbq-toggle_big]': 'big()',\n '[id]': 'id',\n '[attr.id]': 'id',\n '[class.kbq-disabled]': 'disabled || loading()',\n '[class.kbq-active]': 'checked',\n '[class.kbq-indeterminate]': 'indeterminate'\n },\n hostDirectives: [KbqCheckable],\n animations: [\n trigger('switch', [\n state(TransitionCheckState.Init, style({ left: '3px' })),\n state(TransitionCheckState.Unchecked, style({ left: '3px' })),\n state(TransitionCheckState.Indeterminate, style({ left: '10px', visibility: 'hidden' })),\n state(TransitionCheckState.Checked, style({ left: 'calc(100% - 11px)' })),\n transition(\n `${TransitionCheckState.Init} => ${TransitionCheckState.Checked}`,\n animate(KbqAnimationDurations.Entering)\n ),\n transition(\n `${TransitionCheckState.Checked} <=> ${TransitionCheckState.Unchecked}`,\n animate(KbqAnimationDurations.Rapid)\n ),\n transition(\n `${TransitionCheckState.Indeterminate} => *`,\n animate(`${KbqAnimationDurations.Instant} ${KbqAnimationCurves.EaseInOut}`)\n )\n ])\n ],\n exportAs: 'kbqToggle'\n})\nexport class KbqToggleComponent extends KbqColorDirective implements AfterViewInit, ControlValueAccessor, OnDestroy {\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly checkable = inject(KbqCheckable, { self: true });\n\n readonly big = input<boolean>(false);\n\n readonly inputElement = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n readonly labelPosition = input<ToggleLabelPositionType>('right');\n\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input() id: string;\n\n get inputId(): string {\n return `${this.id || this.uniqueId}-input`;\n }\n\n readonly name = input<string | null>(null);\n\n readonly value = input<string>(undefined!);\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get disabled() {\n return this.checkable.disabled();\n }\n\n set disabled(value: any) {\n this.checkable.disabled.set(value);\n }\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: numberAttribute })\n get tabIndex(): number {\n return this.checkable.effectiveTabIndex();\n }\n\n set tabIndex(value: number) {\n this.checkable.tabIndex.set(value);\n }\n\n get checked() {\n return this.checkable.checked();\n }\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n set checked(value: boolean) {\n if (value !== this.checkable.checked()) {\n this.checkable.checked.set(value);\n this.setTransitionCheckState();\n }\n }\n\n /**\n * Whether the toggle is indeterminate. This is also known as \"mixed\" mode and can be used to\n * represent a checkbox with three states, e.g. a checkbox that represents a nested list of\n * checkable items. Note that whenever checkbox is manually clicked, indeterminate is immediately\n * set to false.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get indeterminate(): boolean {\n return this.checkable.indeterminate();\n }\n\n set indeterminate(value: boolean) {\n const changed = value !== this.checkable.indeterminate();\n\n this.checkable.indeterminate.set(value);\n\n if (changed) {\n this.setTransitionCheckState();\n this.indeterminateChange.emit(value);\n }\n }\n\n /**\n * Property for manually set loading state.\n */\n readonly loading = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n readonly change = output<KbqToggleChange>();\n\n /** Event emitted when the toggle's `indeterminate` value changes. */\n readonly indeterminateChange = output<boolean>();\n\n /** @docs-private */\n protected currentCheckState: TransitionCheckState = TransitionCheckState.Init;\n\n /** Defines the behavior when a user clicks on the toggle. */\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input() clickAction: KbqToggleClickAction = inject(KBQ_CHECKABLE_CLICK_ACTION, { optional: true }) || undefined;\n\n private uniqueId: string = `kbq-toggle-${++nextUniqueId}`;\n\n constructor() {\n super();\n\n this.id = this.uniqueId;\n\n // `writeValue` (ngModel/formControl) now runs on `KbqCheckable`, bypassing the `checked`/`indeterminate`\n // setters below, so this keeps the `[@switch]` animation state in sync for form-driven value changes too.\n effect(() => this.setTransitionCheckState());\n }\n\n ngAfterViewInit(): void {\n this.focusMonitor.monitor(this.elementRef.nativeElement, true);\n }\n\n ngOnDestroy() {\n this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n }\n\n focus(): void {\n this.focusMonitor.focusVia(this.inputElement().nativeElement, 'keyboard');\n }\n\n getAriaChecked(): KbqCheckedState {\n return this.checkable.getAriaChecked();\n }\n\n onChangeEvent(event: Event) {\n event.stopPropagation();\n }\n\n onLabelTextChange() {\n this.changeDetectorRef.markForCheck();\n }\n\n onInputClick(event: MouseEvent) {\n if (this.loading()) return;\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `toggle` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n\n const { shouldToggle, shouldClearIndeterminate } = this.checkable.resolveClick(this.clickAction);\n\n if (shouldToggle) {\n // When user manually click on the toggle, `indeterminate` is set to false.\n if (shouldClearIndeterminate) {\n Promise.resolve().then(() => {\n this.checkable.indeterminate.set(false);\n this.indeterminateChange.emit(false);\n });\n }\n\n this.checkable.toggle();\n this.checkable.onTouched();\n this.transitionCheckState(this.checked ? TransitionCheckState.Checked : TransitionCheckState.Unchecked);\n // Emit our custom change event if the native input emitted one.\n // It is important to only emit it, if the native input triggered one, because\n // we don't want to trigger a change event, when the `checked` variable changes for example.\n this.emitChangeEvent();\n } else if (!this.disabled) {\n // Reset native input when clicked with noop. The native checkbox becomes checked after\n // click, reset it to be align with `checked` value of `kbq-toggle`.\n this.checkable.resetNativeInput(this.inputElement().nativeElement);\n }\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n * @deprecated Unused - `ControlValueAccessor` is now implemented by the `KbqCheckable` host directive,\n * so this is never called by Angular forms. Will be removed in the next major version.\n */\n writeValue(value: any) {\n this.checked = !!value;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n * @deprecated Unused - `ControlValueAccessor` is now implemented by the `KbqCheckable` host directive,\n * so this is never called by Angular forms. Will be removed in the next major version.\n */\n registerOnChange(fn: any) {\n this.checkable.registerOnChange(fn);\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n * @deprecated Unused - `ControlValueAccessor` is now implemented by the `KbqCheckable` host directive,\n * so this is never called by Angular forms. Will be removed in the next major version.\n */\n registerOnTouched(fn: any) {\n this.checkable.registerOnTouched(fn);\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n * @deprecated Unused - `ControlValueAccessor` is now implemented by the `KbqCheckable` host directive,\n * so this is never called by Angular forms. Will be removed in the next major version.\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n private setTransitionCheckState() {\n if (this.indeterminate) {\n this.transitionCheckState(TransitionCheckState.Indeterminate);\n } else {\n this.transitionCheckState(this.checked ? TransitionCheckState.Checked : TransitionCheckState.Unchecked);\n }\n }\n\n private transitionCheckState(newState: TransitionCheckState) {\n if (this.currentCheckState === newState) return;\n\n this.currentCheckState = newState;\n }\n\n private emitChangeEvent() {\n // Note: `toggle()` already notifies the ControlValueAccessor change handler via `KbqCheckable.toggle()`.\n const event = new KbqToggleChange();\n\n event.source = this;\n event.checked = this.checked;\n\n this.change.emit(event);\n }\n}\n","<label class=\"kbq-toggle-layout\" [attr.for]=\"inputId\" [class.kbq-toggle-layout_left]=\"labelPosition() === 'left'\">\n <input\n #input\n role=\"switch\"\n type=\"checkbox\"\n class=\"kbq-toggle-input cdk-visually-hidden\"\n [attr.aria-checked]=\"getAriaChecked()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.name]=\"name()\"\n [attr.value]=\"value()\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [id]=\"inputId\"\n [indeterminate]=\"indeterminate\"\n [tabIndex]=\"tabIndex\"\n (change)=\"onChangeEvent($event)\"\n (click)=\"onInputClick($event)\"\n (keydown.enter)=\"input.click()\"\n />\n <div class=\"kbq-toggle-bar-container\">\n <div class=\"kbq-toggle-bar\" [class.kbq-progress]=\"loading()\">\n <div class=\"kbq-toggle__circle\" [@switch]=\"currentCheckState\"></div>\n <div class=\"kbq-toggle__thumb\"></div>\n </div>\n </div>\n\n <div\n class=\"kbq-toggle__content\"\n [class.kbq-toggle__content_left]=\"labelPosition() === 'left'\"\n [class.kbq-toggle__content_right]=\"labelPosition() === 'right'\"\n >\n <span class=\"kbq-toggle-label\" (cdkObserveContent)=\"onLabelTextChange()\">\n <ng-content />\n </span>\n\n <ng-content select=\"kbq-hint\" />\n </div>\n</label>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { NgModule } from '@angular/core';\nimport { KbqToggleComponent } from './toggle.component';\n\n@NgModule({\n imports: [A11yModule, KbqToggleComponent],\n exports: [KbqToggleComponent]\n})\nexport class KbqToggleModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,13 +1,56 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Injectable, inject, ViewChild, ViewEncapsulation, ChangeDetectionStrategy, Component, input, Renderer2, 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, KBQ_SIBLING_POPUP, POSITION_TO_CSS_MAP, PopUpPlacements } from '@koobiq/components/core';
9
9
  import { merge, EMPTY } from 'rxjs';
10
- import { trigger, state, transition, style, animate, keyframes } from '@angular/animations';
10
+ import { filter } from 'rxjs/operators';
11
+ import { trigger, state, style, transition, animate, keyframes } from '@angular/animations';
12
+
13
+ /**
14
+ * Default value of the `kbqTooltipSingleInstance` input. Provide `false` at the application level to
15
+ * globally disable the "only one tooltip is visible at a time" behavior.
16
+ */
17
+ const KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT = new InjectionToken('KbqTooltipSingleInstanceDefault', {
18
+ providedIn: 'root',
19
+ factory: () => true
20
+ });
21
+ /**
22
+ * Keeps track of the single tooltip that is currently visible, so that showing a new one hides the
23
+ * previous. Holds the *trigger*, not the overlay component — the latter is re-created on every show.
24
+ */
25
+ class KbqTooltipRegistry {
26
+ constructor() {
27
+ /** Tooltip that currently owns the screen, or `null` when nothing is visible. */
28
+ this.visibleTooltip = null;
29
+ }
30
+ /** Marks the tooltip as the only visible one, hiding the previously visible tooltip. */
31
+ setVisible(tooltip) {
32
+ if (this.visibleTooltip && this.visibleTooltip !== tooltip) {
33
+ this.visibleTooltip.hideAsInactive();
34
+ }
35
+ this.visibleTooltip = tooltip;
36
+ }
37
+ /**
38
+ * Clears the registry, but only when the given tooltip is still the registered one. The guard
39
+ * matters because hiding the previous tooltip is asynchronous: its `visibleChange(false)` arrives
40
+ * after the new tooltip has already been registered, and must not wipe that newer entry.
41
+ */
42
+ clearVisible(tooltip) {
43
+ if (this.visibleTooltip === tooltip) {
44
+ this.visibleTooltip = null;
45
+ }
46
+ }
47
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
48
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipRegistry, providedIn: 'root' }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipRegistry, decorators: [{
51
+ type: Injectable,
52
+ args: [{ providedIn: 'root' }]
53
+ }] });
11
54
 
12
55
  /**
13
56
  * Animations used by KbqTooltip.
@@ -62,10 +105,10 @@ class KbqTooltipComponent extends KbqPopUp {
62
105
  };
63
106
  super.updateClassMap(placement, customClass, classMap);
64
107
  }
65
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTooltipComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
66
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: KbqTooltipComponent, isStandalone: true, selector: "kbq-tooltip-component", providers: [KBQ_TOOLTIP_OPEN_TIME_PROVIDER], viewQueries: [{ propertyName: "elementRef", first: true, predicate: ["tooltip"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<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", styles: [".kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-top),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-top-left),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-top-right){margin-bottom:9px}.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-right),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-right-top),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-right-bottom){margin-left:9px}.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-bottom),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-bottom-left),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-bottom-right){margin-top:9px}.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-left),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-left-top),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-left-bottom){margin-right:9px}.kbq-tooltip__inner{border-radius:var(--kbq-tooltip-size-border-radius);word-break:break-word}.kbq-tooltip{box-sizing:border-box;border-radius:var(--kbq-tooltip-size-border-radius);white-space:pre-line}.kbq-tooltip.kbq-tooltip_placement-top,.kbq-tooltip.kbq-tooltip_placement-top-left,.kbq-tooltip.kbq-tooltip_placement-top-right{margin-bottom:8px}.kbq-tooltip.kbq-tooltip_placement-right,.kbq-tooltip.kbq-tooltip_placement-right-top,.kbq-tooltip.kbq-tooltip_placement-right-bottom{margin-left:8px}.kbq-tooltip.kbq-tooltip_placement-bottom,.kbq-tooltip.kbq-tooltip_placement-bottom-left,.kbq-tooltip.kbq-tooltip_placement-bottom-right{margin-top:8px}.kbq-tooltip.kbq-tooltip_placement-left,.kbq-tooltip.kbq-tooltip_placement-left-top,.kbq-tooltip.kbq-tooltip_placement-left-bottom{margin-right:8px}.kbq-tooltip{max-width:var(--kbq-tooltip-size-max-width)}.kbq-tooltip .kbq-tooltip__inner{padding:var(--kbq-tooltip-size-padding-vertical) var(--kbq-tooltip-size-padding-horizontal)}.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-top,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-top-left,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-top-right{margin-bottom:4px}.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-right,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-right-top,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-right-bottom{margin-left:4px}.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-bottom,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-bottom-left,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-bottom-right{margin-top:4px}.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-left,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-left-top,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-left-bottom{margin-right:4px}.kbq-tooltip.kbq-theme .kbq-tooltip__inner{color:var(--kbq-tooltip-theme-fade-off-text);background-image:linear-gradient(var(--kbq-tooltip-theme-fade-off-background),var(--kbq-tooltip-theme-fade-off-background));background-color:var(--kbq-background-bg)}.kbq-tooltip.kbq-theme .kbq-tooltip__arrow{background-color:var(--kbq-tooltip-theme-fade-off-background)}.kbq-tooltip.kbq-theme.kbq-tooltip_arrowless{box-shadow:var(--kbq-tooltip-theme-fade-off-shadow)}.kbq-tooltip.kbq-contrast .kbq-tooltip__inner{color:var(--kbq-tooltip-contrast-fade-off-text);background-image:linear-gradient(var(--kbq-tooltip-contrast-fade-off-background),var(--kbq-tooltip-contrast-fade-off-background));background-color:var(--kbq-background-bg)}.kbq-tooltip.kbq-contrast .kbq-tooltip__arrow{background-color:var(--kbq-tooltip-contrast-fade-off-background)}.kbq-tooltip.kbq-contrast.kbq-tooltip_arrowless{box-shadow:var(--kbq-tooltip-contrast-fade-off-shadow)}.kbq-tooltip.kbq-contrast-fade .kbq-tooltip__inner{color:var(--kbq-tooltip-contrast-fade-on-text);background-image:linear-gradient(var(--kbq-tooltip-contrast-fade-on-background),var(--kbq-tooltip-contrast-fade-on-background));background-color:var(--kbq-background-bg)}.kbq-tooltip.kbq-contrast-fade .kbq-tooltip__arrow{background-color:var(--kbq-tooltip-contrast-fade-on-background)}.kbq-tooltip.kbq-contrast-fade.kbq-tooltip_arrowless{box-shadow:var(--kbq-tooltip-contrast-fade-on-shadow)}.kbq-tooltip.kbq-contrast-fade.kbq-tooltip,.kbq-tooltip.kbq-contrast-fade .kbq-tooltip__arrow{box-shadow:var(--kbq-shadow-popup)}.kbq-tooltip.kbq-warning .kbq-tooltip__inner{color:var(--kbq-tooltip-warning-fade-off-text);background-image:linear-gradient(var(--kbq-tooltip-warning-fade-off-background),var(--kbq-tooltip-warning-fade-off-background));background-color:var(--kbq-background-bg)}.kbq-tooltip.kbq-warning .kbq-tooltip__arrow{background-color:var(--kbq-tooltip-warning-fade-off-background)}.kbq-tooltip.kbq-warning.kbq-tooltip_arrowless{box-shadow:var(--kbq-tooltip-warning-fade-off-shadow)}.kbq-tooltip.kbq-error .kbq-tooltip__inner{color:var(--kbq-tooltip-error-fade-off-text);background-image:linear-gradient(var(--kbq-tooltip-error-fade-off-background),var(--kbq-tooltip-error-fade-off-background));background-color:var(--kbq-background-bg)}.kbq-tooltip.kbq-error .kbq-tooltip__arrow{background-color:var(--kbq-tooltip-error-fade-off-background)}.kbq-tooltip.kbq-error.kbq-tooltip_arrowless{box-shadow:var(--kbq-tooltip-error-fade-off-shadow)}.kbq-tooltip,.kbq-tooltip .kbq-tooltip__header{font-size:var(--kbq-typography-text-compact-font-size);font-style:var(--kbq-typography-text-compact-font-style);font-weight:var(--kbq-typography-text-compact-font-weight);line-height:var(--kbq-typography-text-compact-line-height);font-family:var(--kbq-typography-text-compact-font-family);text-transform:var(--kbq-typography-text-compact-text-transform);font-feature-settings:var(--kbq-typography-text-compact-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-letter-spacing)}.kbq-tooltip__arrow{position:absolute;width:var(--kbq-tooltip-size-arrow-size);height:var(--kbq-tooltip-size-arrow-size);transform:rotate(45deg);z-index:-1}.kbq-tooltip_placement-top .kbq-tooltip__arrow{bottom:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);left:50%;margin-left:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2)}.kbq-tooltip_placement-top-left .kbq-tooltip__arrow{bottom:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);left:13px}.kbq-tooltip_placement-top-right .kbq-tooltip__arrow{bottom:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);right:13px}.kbq-tooltip_placement-right .kbq-tooltip__arrow{left:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);top:50%;margin-top:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2)}.kbq-tooltip_placement-right-top .kbq-tooltip__arrow{left:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);top:13px}.kbq-tooltip_placement-right-bottom .kbq-tooltip__arrow{left:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);bottom:13px}.kbq-tooltip_placement-left .kbq-tooltip__arrow{right:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);top:50%;margin-top:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2)}.kbq-tooltip_placement-left-top .kbq-tooltip__arrow{right:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);top:13px}.kbq-tooltip_placement-left-bottom .kbq-tooltip__arrow{right:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);bottom:13px}.kbq-tooltip_placement-bottom .kbq-tooltip__arrow{top:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);left:50%;margin-left:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2)}.kbq-tooltip_placement-bottom-left .kbq-tooltip__arrow{top:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);left:13px}.kbq-tooltip_placement-bottom-right .kbq-tooltip__arrow{top:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);right:13px}\n", ".kbq-tooltip{--kbq-tooltip-size-max-width: 300px;--kbq-tooltip-size-border-radius: var(--kbq-size-s);--kbq-tooltip-size-padding-horizontal: var(--kbq-size-m);--kbq-tooltip-size-padding-vertical: var(--kbq-size-s);--kbq-tooltip-size-arrow-size: var(--kbq-size-m);--kbq-tooltip-contrast-fade-on-background: var(--kbq-background-card);--kbq-tooltip-contrast-fade-on-text: var(--kbq-foreground-contrast);--kbq-tooltip-contrast-fade-on-shadow: var(--kbq-shadow-popup);--kbq-tooltip-contrast-fade-off-background: var(--kbq-background-night);--kbq-tooltip-contrast-fade-off-text: var(--kbq-foreground-white);--kbq-tooltip-contrast-fade-off-shadow: var(--kbq-shadow-popup);--kbq-tooltip-theme-fade-off-background: var(--kbq-background-theme);--kbq-tooltip-theme-fade-off-text: var(--kbq-foreground-white);--kbq-tooltip-theme-fade-off-shadow: none;--kbq-tooltip-warning-fade-off-background: var(--kbq-background-warning);--kbq-tooltip-warning-fade-off-text: var(--kbq-foreground-contrast);--kbq-tooltip-warning-fade-off-shadow: none;--kbq-tooltip-error-fade-off-background: var(--kbq-background-error);--kbq-tooltip-error-fade-off-text: var(--kbq-foreground-white);--kbq-tooltip-error-fade-off-shadow: none;--kbq-tooltip-borderless-shadow: 0 2px 8px var(--kbq-shadow-key), 0 3px 8px var(--kbq-shadow-ambient)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [kbqTooltipAnimations.tooltipState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
108
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
109
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.30", type: KbqTooltipComponent, isStandalone: true, selector: "kbq-tooltip-component", providers: [KBQ_TOOLTIP_OPEN_TIME_PROVIDER], viewQueries: [{ propertyName: "elementRef", first: true, predicate: ["tooltip"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<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", styles: [".kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-top),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-top-left),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-top-right){margin-bottom:9px}.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-right),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-right-top),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-right-bottom){margin-left:9px}.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-bottom),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-bottom-left),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-bottom-right){margin-top:9px}.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-left),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-left-top),.kbq-tooltip-panel_horizontal-navbar:has(.kbq-tooltip_placement-left-bottom){margin-right:9px}.kbq-tooltip__inner{border-radius:var(--kbq-tooltip-size-border-radius);word-break:break-word}.kbq-tooltip{box-sizing:border-box;border-radius:var(--kbq-tooltip-size-border-radius);white-space:pre-line}.kbq-tooltip.kbq-tooltip_placement-top,.kbq-tooltip.kbq-tooltip_placement-top-left,.kbq-tooltip.kbq-tooltip_placement-top-right{margin-bottom:8px}.kbq-tooltip.kbq-tooltip_placement-right,.kbq-tooltip.kbq-tooltip_placement-right-top,.kbq-tooltip.kbq-tooltip_placement-right-bottom{margin-left:8px}.kbq-tooltip.kbq-tooltip_placement-bottom,.kbq-tooltip.kbq-tooltip_placement-bottom-left,.kbq-tooltip.kbq-tooltip_placement-bottom-right{margin-top:8px}.kbq-tooltip.kbq-tooltip_placement-left,.kbq-tooltip.kbq-tooltip_placement-left-top,.kbq-tooltip.kbq-tooltip_placement-left-bottom{margin-right:8px}.kbq-tooltip{max-width:var(--kbq-tooltip-size-max-width)}.kbq-tooltip .kbq-tooltip__inner{padding:var(--kbq-tooltip-size-padding-vertical) var(--kbq-tooltip-size-padding-horizontal)}.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-top,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-top-left,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-top-right{margin-bottom:4px}.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-right,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-right-top,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-right-bottom{margin-left:4px}.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-bottom,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-bottom-left,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-bottom-right{margin-top:4px}.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-left,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-left-top,.kbq-tooltip.kbq-tooltip_arrowless.kbq-tooltip_placement-left-bottom{margin-right:4px}.kbq-tooltip.kbq-theme .kbq-tooltip__inner{color:var(--kbq-tooltip-theme-fade-off-text);background-image:linear-gradient(var(--kbq-tooltip-theme-fade-off-background),var(--kbq-tooltip-theme-fade-off-background));background-color:var(--kbq-background-bg)}.kbq-tooltip.kbq-theme .kbq-tooltip__arrow{background-color:var(--kbq-tooltip-theme-fade-off-background)}.kbq-tooltip.kbq-theme.kbq-tooltip_arrowless{box-shadow:var(--kbq-tooltip-theme-fade-off-shadow)}.kbq-tooltip.kbq-contrast .kbq-tooltip__inner{color:var(--kbq-tooltip-contrast-fade-off-text);background-image:linear-gradient(var(--kbq-tooltip-contrast-fade-off-background),var(--kbq-tooltip-contrast-fade-off-background));background-color:var(--kbq-background-bg)}.kbq-tooltip.kbq-contrast .kbq-tooltip__arrow{background-color:var(--kbq-tooltip-contrast-fade-off-background)}.kbq-tooltip.kbq-contrast.kbq-tooltip_arrowless{box-shadow:var(--kbq-tooltip-contrast-fade-off-shadow)}.kbq-tooltip.kbq-contrast-fade .kbq-tooltip__inner{color:var(--kbq-tooltip-contrast-fade-on-text);background-image:linear-gradient(var(--kbq-tooltip-contrast-fade-on-background),var(--kbq-tooltip-contrast-fade-on-background));background-color:var(--kbq-background-bg)}.kbq-tooltip.kbq-contrast-fade .kbq-tooltip__arrow{background-color:var(--kbq-tooltip-contrast-fade-on-background)}.kbq-tooltip.kbq-contrast-fade.kbq-tooltip_arrowless{box-shadow:var(--kbq-tooltip-contrast-fade-on-shadow)}.kbq-tooltip.kbq-contrast-fade.kbq-tooltip,.kbq-tooltip.kbq-contrast-fade .kbq-tooltip__arrow{box-shadow:var(--kbq-shadow-popup)}.kbq-tooltip.kbq-warning .kbq-tooltip__inner{color:var(--kbq-tooltip-warning-fade-off-text);background-image:linear-gradient(var(--kbq-tooltip-warning-fade-off-background),var(--kbq-tooltip-warning-fade-off-background));background-color:var(--kbq-background-bg)}.kbq-tooltip.kbq-warning .kbq-tooltip__arrow{background-color:var(--kbq-tooltip-warning-fade-off-background)}.kbq-tooltip.kbq-warning.kbq-tooltip_arrowless{box-shadow:var(--kbq-tooltip-warning-fade-off-shadow)}.kbq-tooltip.kbq-error .kbq-tooltip__inner{color:var(--kbq-tooltip-error-fade-off-text);background-image:linear-gradient(var(--kbq-tooltip-error-fade-off-background),var(--kbq-tooltip-error-fade-off-background));background-color:var(--kbq-background-bg)}.kbq-tooltip.kbq-error .kbq-tooltip__arrow{background-color:var(--kbq-tooltip-error-fade-off-background)}.kbq-tooltip.kbq-error.kbq-tooltip_arrowless{box-shadow:var(--kbq-tooltip-error-fade-off-shadow)}.kbq-tooltip,.kbq-tooltip .kbq-tooltip__header{font-size:var(--kbq-typography-text-compact-font-size);font-style:var(--kbq-typography-text-compact-font-style);font-weight:var(--kbq-typography-text-compact-font-weight);line-height:var(--kbq-typography-text-compact-line-height);font-family:var(--kbq-typography-text-compact-font-family);text-transform:var(--kbq-typography-text-compact-text-transform);font-feature-settings:var(--kbq-typography-text-compact-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-letter-spacing)}.kbq-tooltip__arrow{position:absolute;width:var(--kbq-tooltip-size-arrow-size);height:var(--kbq-tooltip-size-arrow-size);transform:rotate(45deg);z-index:-1}.kbq-tooltip_placement-top .kbq-tooltip__arrow{bottom:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);left:50%;margin-left:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2)}.kbq-tooltip_placement-top-left .kbq-tooltip__arrow{bottom:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);left:13px}.kbq-tooltip_placement-top-right .kbq-tooltip__arrow{bottom:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);right:13px}.kbq-tooltip_placement-right .kbq-tooltip__arrow{left:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);top:50%;margin-top:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2)}.kbq-tooltip_placement-right-top .kbq-tooltip__arrow{left:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);top:13px}.kbq-tooltip_placement-right-bottom .kbq-tooltip__arrow{left:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);bottom:13px}.kbq-tooltip_placement-left .kbq-tooltip__arrow{right:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);top:50%;margin-top:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2)}.kbq-tooltip_placement-left-top .kbq-tooltip__arrow{right:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);top:13px}.kbq-tooltip_placement-left-bottom .kbq-tooltip__arrow{right:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);bottom:13px}.kbq-tooltip_placement-bottom .kbq-tooltip__arrow{top:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);left:50%;margin-left:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2)}.kbq-tooltip_placement-bottom-left .kbq-tooltip__arrow{top:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);left:13px}.kbq-tooltip_placement-bottom-right .kbq-tooltip__arrow{top:calc((var(--kbq-tooltip-size-arrow-size) - 1px) / -2);right:13px}\n", ".kbq-tooltip{--kbq-tooltip-size-max-width: 300px;--kbq-tooltip-size-border-radius: var(--kbq-size-s);--kbq-tooltip-size-padding-horizontal: var(--kbq-size-m);--kbq-tooltip-size-padding-vertical: var(--kbq-size-s);--kbq-tooltip-size-arrow-size: var(--kbq-size-m);--kbq-tooltip-contrast-fade-on-background: var(--kbq-background-card);--kbq-tooltip-contrast-fade-on-text: var(--kbq-foreground-contrast);--kbq-tooltip-contrast-fade-on-shadow: var(--kbq-shadow-popup);--kbq-tooltip-contrast-fade-off-background: var(--kbq-background-night);--kbq-tooltip-contrast-fade-off-text: var(--kbq-foreground-white);--kbq-tooltip-contrast-fade-off-shadow: var(--kbq-shadow-popup);--kbq-tooltip-theme-fade-off-background: var(--kbq-background-theme);--kbq-tooltip-theme-fade-off-text: var(--kbq-foreground-white);--kbq-tooltip-theme-fade-off-shadow: none;--kbq-tooltip-warning-fade-off-background: var(--kbq-background-warning);--kbq-tooltip-warning-fade-off-text: var(--kbq-foreground-contrast);--kbq-tooltip-warning-fade-off-shadow: none;--kbq-tooltip-error-fade-off-background: var(--kbq-background-error);--kbq-tooltip-error-fade-off-text: var(--kbq-foreground-white);--kbq-tooltip-error-fade-off-shadow: none;--kbq-tooltip-borderless-shadow: 0 2px 8px var(--kbq-shadow-key), 0 3px 8px var(--kbq-shadow-ambient)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [kbqTooltipAnimations.tooltipState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
67
110
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTooltipComponent, decorators: [{
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipComponent, decorators: [{
69
112
  type: Component,
70
113
  args: [{ selector: 'kbq-tooltip-component', imports: [
71
114
  NgTemplateOutlet
@@ -74,7 +117,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
74
117
  type: ViewChild,
75
118
  args: ['tooltip']
76
119
  }] } });
77
- const KBQ_TOOLTIP_SCROLL_STRATEGY = new InjectionToken('kbq-tooltip-scroll-strategy');
120
+ /**
121
+ * Triggers that make a tooltip part of the "only one tooltip is visible at a time" group.
122
+ *
123
+ * Values that match none of them (`manual`, `none`, …) bind no listeners at all — that is how the
124
+ * imperatively driven validation tooltips are configured, and they are expected to stay pinned while
125
+ * the user keeps interacting elsewhere.
126
+ */
127
+ const INTERACTIVE_TRIGGERS = [
128
+ PopUpTriggers.Hover,
129
+ PopUpTriggers.Focus,
130
+ PopUpTriggers.Click,
131
+ PopUpTriggers.Keydown
132
+ ];
133
+ /**
134
+ * DOM events that mean the user has left the trigger, releasing a tooltip muted by a pop-up on the same
135
+ * element. Both are bound by `KbqPopUpTrigger.initListeners` whenever the matching show trigger is bound.
136
+ */
137
+ const RELEASE_TRIGGERS = ['mouseleave', 'blur'];
138
+ const KBQ_TOOLTIP_SCROLL_STRATEGY = new InjectionToken('kbq-tooltip-scroll-strategy', {
139
+ providedIn: 'root',
140
+ factory: () => kbqTooltipScrollStrategyFactory(inject(Overlay))
141
+ });
78
142
  /** @docs-private */
79
143
  function kbqTooltipScrollStrategyFactory(overlay) {
80
144
  return () => overlay.scrollStrategies.close();
@@ -91,6 +155,10 @@ const KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {
91
155
  * behavior such as opening on keyboard focus only and positioning relative to the mouse cursor.
92
156
  */
93
157
  class KbqTooltipTrigger extends KbqPopUpTrigger {
158
+ /** @docs-private */
159
+ get scrollStrategy() {
160
+ return this.scrollStrategyOverride() ?? this.injectedScrollStrategy;
161
+ }
94
162
  /** Input (`kbqVisible`) that programmatically shows or hides the tooltip; reflects the current `visible` state. */
95
163
  // TODO: Skipped for migration because:
96
164
  // Accessor inputs cannot be migrated as they are too complex.
@@ -211,16 +279,58 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
211
279
  this.updateData();
212
280
  }
213
281
  }
282
+ /**
283
+ * Whether this tooltip takes part in the "only one tooltip is visible at a time" group.
284
+ *
285
+ * Read through the `trigger` getter on purpose: `KbqTitleDirective` always reports `hover`, so title
286
+ * tooltips participate, while `kbqValidationTooltip` consumers (datepicker, timepicker, inline-edit)
287
+ * assign `trigger = 'manual'` and therefore stay out of the group.
288
+ */
289
+ get participatesInSingleInstance() {
290
+ return this.singleInstance() && this.hasInteractiveTrigger;
291
+ }
292
+ /**
293
+ * Whether `kbqTrigger` contains at least one user-driven event, i.e. the tooltip is not driven purely
294
+ * imperatively. `manual`/`none` tooltips (the validation hints of datepicker, timepicker and inline-edit)
295
+ * bind no listeners and are expected to stay pinned while the user keeps interacting elsewhere.
296
+ */
297
+ get hasInteractiveTrigger() {
298
+ return INTERACTIVE_TRIGGERS.some((name) => this.trigger.includes(name));
299
+ }
214
300
  /**
215
301
  * Sets up an effect that mirrors a `forDisabledComponent`'s disabled signal: when that component is disabled it
216
302
  * makes the host focusable (so the tooltip can still be triggered) and enables the tooltip, otherwise disables it.
303
+ *
304
+ * Also joins the "only one tooltip is visible at a time" group and mutes the tooltip while a pop-up on the
305
+ * same element is open. All of this wiring lives here rather than in `ngAfterViewInit`/`ngOnDestroy` because
306
+ * several subclasses override those hooks: `KbqTitleDirective` and `KbqEllipsisCenterDirective` skip
307
+ * `super.ngAfterViewInit()`, and `KbqPasswordToggle` skips `super` in both hooks entirely. `destroyRef`
308
+ * additionally covers a trigger destroyed while its tooltip is still visible — that path disposes the
309
+ * overlay without emitting `visibleChange(false)`.
217
310
  */
218
311
  constructor() {
219
312
  super();
220
- /** @docs-private */
221
- this.scrollStrategy = inject(KBQ_TOOLTIP_SCROLL_STRATEGY);
313
+ /** Registry holding the single tooltip that is currently visible. */
314
+ this.tooltipRegistry = inject(KbqTooltipRegistry);
315
+ this.injectedScrollStrategy = inject(KBQ_TOOLTIP_SCROLL_STRATEGY);
316
+ /**
317
+ * Per-instance override for the scroll strategy, taking precedence over `KBQ_TOOLTIP_SCROLL_STRATEGY`
318
+ * when set. An `@Input` rather than a DI override so it applies to this tooltip instance only, without
319
+ * leaking into other `kbqTooltip`s nested inside the same host (DI overrides are visible to every
320
+ * descendant in the element-injector tree, not just the element they're declared on).
321
+ * @docs-private
322
+ */
323
+ this.scrollStrategyOverride = input(undefined, ...(ngDevMode ? [{ debugName: "scrollStrategyOverride", alias: 'kbqTooltipScrollStrategy' }] : [{
324
+ alias: 'kbqTooltipScrollStrategy'
325
+ }]));
222
326
  /** @docs-private */
223
327
  this.parentPopup = inject(KBQ_PARENT_POPUP, { optional: true });
328
+ /**
329
+ * Pop-ups anchored to the very same element — a popover, a dropdown, a select and so on. Resolved with
330
+ * `self` so a pop-up further up the tree (which the tooltip merely lives inside) is not picked up; that
331
+ * case is covered by `parentPopup`.
332
+ */
333
+ this.siblingPopups = inject(KBQ_SIBLING_POPUP, { self: true, optional: true }) || [];
224
334
  /** @docs-private */
225
335
  this.focusMonitor = inject(FocusMonitor);
226
336
  /** @docs-private */
@@ -240,6 +350,21 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
240
350
  * Defaults to `true`.
241
351
  */
242
352
  this.ignoreTooltipPointerEvents = input(true, ...(ngDevMode ? [{ debugName: "ignoreTooltipPointerEvents" }] : []));
353
+ /**
354
+ * Whether the tooltip takes part in the "only one tooltip is visible at a time" group: showing it
355
+ * hides the previously visible tooltip, and it is hidden when another tooltip is shown.
356
+ *
357
+ * Defaults to `true`; the default can be changed application-wide with the
358
+ * `KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT` token.
359
+ *
360
+ * Tooltips without an interactive `kbqTrigger` (`manual`, `none`, …) never take part in the group,
361
+ * regardless of this input — they are shown imperatively and are expected to stay pinned.
362
+ */
363
+ this.singleInstance = input(inject(KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT), ...(ngDevMode ? [{ debugName: "singleInstance", alias: 'kbqTooltipSingleInstance',
364
+ transform: booleanAttribute }] : [{
365
+ alias: 'kbqTooltipSingleInstance',
366
+ transform: booleanAttribute
367
+ }]));
243
368
  /**
244
369
  * Changes hiding behavior. By default, tooltip is hidden on mouseleave from trigger.
245
370
  * Setting hideWithTimeout to true will delay tooltip hiding and will not hide when the mouse moves from trigger
@@ -300,6 +425,35 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
300
425
  // Class of this input is manually instantiated. This is discouraged and prevents
301
426
  // migration.
302
427
  this.modifier = TooltipModifier.Default;
428
+ /**
429
+ * Whether the tooltip is muted because a pop-up on the same element has taken over the anchor.
430
+ *
431
+ * Set when that pop-up opens and released only once the pointer or the focus genuinely leaves the host,
432
+ * never on the pop-up closing. Both matter: a pop-up restores focus to its trigger when it closes (see
433
+ * `KbqPopoverComponent.onEscape`), and removing its backdrop replays `mouseenter` on the trigger without
434
+ * the pointer having moved — either would otherwise pop the tooltip up out of nowhere.
435
+ */
436
+ this.mutedBySiblingPopup = false;
437
+ merge(...this.siblingPopups.map(({ openedChange }) => openedChange))
438
+ .pipe(filter(Boolean),
439
+ // A tooltip shown imperatively (`manual`/`none`) is not competing for the anchor with the
440
+ // user — it is pinned on purpose, like the validation hints of datepicker and timepicker.
441
+ filter(() => this.hasInteractiveTrigger), takeUntilDestroyed())
442
+ .subscribe(() => {
443
+ this.mutedBySiblingPopup = true;
444
+ this.hideAsInactive();
445
+ });
446
+ this.visibleChange.pipe(takeUntilDestroyed()).subscribe((visible) => {
447
+ if (visible) {
448
+ if (this.participatesInSingleInstance) {
449
+ this.tooltipRegistry.setVisible(this);
450
+ }
451
+ }
452
+ else {
453
+ this.tooltipRegistry.clearVisible(this);
454
+ }
455
+ });
456
+ this.destroyRef.onDestroy(() => this.tooltipRegistry.clearVisible(this));
303
457
  effect(() => {
304
458
  if (!this.forDisabledComponent())
305
459
  return;
@@ -331,10 +485,24 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
331
485
  super.ngOnDestroy();
332
486
  }
333
487
  /**
334
- * Shows the tooltip after `delay` ms. Suppresses showing on a focus trigger that did not originate from
335
- * the keyboard, and applies cursor-relative positioning when `relativeToPointer` is enabled.
488
+ * Shows the tooltip after `delay` ms. Suppresses showing while a pop-up on the same element holds the
489
+ * anchor or on a focus trigger that did not originate from the keyboard, and applies cursor-relative
490
+ * positioning when `relativeToPointer` is enabled.
336
491
  */
337
492
  show(delay = this.enterDelay) {
493
+ if (this.mutedBySiblingPopup) {
494
+ return;
495
+ }
496
+ // `isAttached` is checked directly, not just the `mutedBySiblingPopup` latch: `openedChange` can lag
497
+ // it by a real delay — e.g. select/tree-select only emit it once their open CSS animation finishes,
498
+ // and a sibling's own `hide()` can cancel a still-pending `show()` outright so it never emits at all
499
+ // (KbqPopUp.show/hide, pop-up.ts). `isAttached` itself is guaranteed synchronous by the
500
+ // `KbqSiblingPopup` contract, so checking it here closes that gap regardless of the cause. Gated by
501
+ // `hasInteractiveTrigger` for the same reason as the constructor subscription: a `manual`/`none`
502
+ // tooltip is driven imperatively and must not be muted by a sibling at all.
503
+ if (this.hasInteractiveTrigger && this.siblingPopups.some(({ isAttached }) => isAttached)) {
504
+ return;
505
+ }
338
506
  if (this.triggerName === 'focus' && this.focusMonitor['_lastFocusOrigin'] !== 'keyboard') {
339
507
  return;
340
508
  }
@@ -343,6 +511,35 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
343
511
  this.applyRelativeToPointer();
344
512
  }
345
513
  }
514
+ /**
515
+ * Hides the tooltip after `delay` ms and, when the user has genuinely left the host, un-mutes a tooltip
516
+ * that a pop-up on the same element had muted.
517
+ *
518
+ * `mouseleave` and `blur` are the release signals because the base class binds `hide` to both regardless
519
+ * of whether the tooltip is currently visible. A pop-up that is still attached does not count: its
520
+ * backdrop steals the hover from the trigger while the pointer stands still, and that `mouseleave` must
521
+ * not be mistaken for the user leaving.
522
+ */
523
+ hide(delay = this.leaveDelay) {
524
+ if (RELEASE_TRIGGERS.includes(this.triggerName) && !this.siblingPopups.some(({ isAttached }) => isAttached)) {
525
+ this.mutedBySiblingPopup = false;
526
+ }
527
+ super.hide(delay);
528
+ }
529
+ /**
530
+ * Hides the tooltip because something else took its place — another tooltip became visible, or a pop-up
531
+ * anchored to the same element opened.
532
+ *
533
+ * Goes straight to the pop-up instead of `hide()`: `hide()` silently no-ops when the last recorded
534
+ * `triggerName` is `mouseleave` and the pop-up itself is hovered. Hiding through the instance keeps
535
+ * `visibleChange(false)` firing, so `isOpen`, `kbqVisibleChange` and the `kbqVisible` input stay in sync.
536
+ * Does nothing when the tooltip is already detached or when closing is prevented.
537
+ * @docs-private */
538
+ hideAsInactive() {
539
+ if (this.preventClose)
540
+ return;
541
+ this.ngZone.run(() => this.instance?.hide(0));
542
+ }
346
543
  /** method allows to show the tooltip relative to the given mouse event.
347
544
  * @docs-private */
348
545
  showForMouseEvent(event) {
@@ -418,10 +615,10 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
418
615
  }
419
616
  this.strategy.setOrigin(point);
420
617
  }
421
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTooltipTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
422
- /** @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 }); }
618
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
619
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.30", type: KbqTooltipTrigger, isStandalone: true, selector: "[kbqTooltip]", inputs: { scrollStrategyOverride: { classPropertyName: "scrollStrategyOverride", publicName: "kbqTooltipScrollStrategy", isSignal: true, isRequired: false, transformFunction: null }, 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 }); }
423
620
  }
424
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTooltipTrigger, decorators: [{
621
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipTrigger, decorators: [{
425
622
  type: Directive,
426
623
  args: [{
427
624
  selector: '[kbqTooltip]',
@@ -432,7 +629,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
432
629
  },
433
630
  exportAs: 'kbqTooltip'
434
631
  }]
435
- }], 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: [{
632
+ }], ctorParameters: () => [], propDecorators: { scrollStrategyOverride: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipScrollStrategy", required: false }] }], 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: [{
436
633
  type: Input,
437
634
  args: [{ transform: booleanAttribute }]
438
635
  }], tooltipVisible: [{
@@ -496,23 +693,17 @@ const COMPONENTS = [
496
693
  KbqTooltipTrigger
497
694
  ];
498
695
  class KbqToolTipModule {
499
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqToolTipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
500
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: KbqToolTipModule, imports: [KbqTooltipComponent,
696
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToolTipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
697
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.30", ngImport: i0, type: KbqToolTipModule, imports: [KbqTooltipComponent,
501
698
  KbqTooltipTrigger], exports: [KbqTooltipComponent,
502
699
  KbqTooltipTrigger] }); }
503
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqToolTipModule, providers: [
504
- KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,
505
- KBQ_TOOLTIP_OPEN_TIME_PROVIDER
506
- ] }); }
700
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToolTipModule, providers: [KBQ_TOOLTIP_OPEN_TIME_PROVIDER] }); }
507
701
  }
508
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqToolTipModule, decorators: [{
702
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToolTipModule, decorators: [{
509
703
  type: NgModule,
510
704
  args: [{
511
705
  imports: COMPONENTS,
512
- providers: [
513
- KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,
514
- KBQ_TOOLTIP_OPEN_TIME_PROVIDER
515
- ],
706
+ providers: [KBQ_TOOLTIP_OPEN_TIME_PROVIDER],
516
707
  exports: COMPONENTS
517
708
  }]
518
709
  }] });
@@ -521,5 +712,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
521
712
  * Generated bundle index. Do not edit.
522
713
  */
523
714
 
524
- 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 };
715
+ 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 };
525
716
  //# sourceMappingURL=koobiq-components-tooltip.mjs.map