@koobiq/components 20.4.2 → 21.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (798) hide show
  1. package/accordion/accordion-trigger.scss +3 -10
  2. package/accordion/accordion.scss +4 -6
  3. package/actions-panel/actions-panel-container.scss +45 -1
  4. package/alert/alert.component.scss +3 -2
  5. package/app-switcher/_app-switcher-theme.scss +0 -4
  6. package/app-switcher/app-switcher-dropdown-app.scss +3 -2
  7. package/app-switcher/app-switcher-dropdown-site.scss +2 -1
  8. package/app-switcher/{kbq-app-switcher-list-item.scss → app-switcher-list-item.scss} +18 -4
  9. package/app-switcher/app-switcher-tokens.scss +15 -0
  10. package/app-switcher/app-switcher.scss +14 -4
  11. package/autocomplete/autocomplete.scss +7 -6
  12. package/badge/badge.component.scss +5 -8
  13. package/breadcrumbs/breadcrumbs.scss +25 -10
  14. package/button/_button-base.scss +30 -7
  15. package/button/_button-theme.scss +16 -0
  16. package/button/button-group.scss +7 -0
  17. package/button/button-tokens.scss +0 -2
  18. package/button/button.scss +34 -2
  19. package/button-toggle/_button-toggle-theme.scss +7 -2
  20. package/button-toggle/button-toggle.scss +65 -15
  21. package/checkbox/_checkbox-theme.scss +4 -3
  22. package/checkbox/checkbox.scss +3 -6
  23. package/clamped-text/clamped-text.scss +6 -2
  24. package/code-block/code-block-tokens.scss +0 -224
  25. package/code-block/code-block.scss +20 -9
  26. package/content-panel/content-panel-aside.scss +3 -2
  27. package/content-panel/content-panel-container.scss +37 -0
  28. package/content-panel/content-panel.scss +4 -3
  29. package/core/highlight/_highlight-theme.scss +3 -1
  30. package/core/option/action-container.scss +2 -2
  31. package/core/option/action.scss +2 -1
  32. package/core/option/option.scss +2 -1
  33. package/core/pop-up/_pop-up.scss +0 -37
  34. package/core/selection/pseudo-checkbox/pseudo-checkbox.scss +5 -10
  35. package/core/styles/_core.scss +3 -0
  36. package/core/styles/_koobiq-theme.scss +5 -6
  37. package/core/styles/common/_animation.scss +44 -16
  38. package/core/styles/common/_groups-mixins.scss +21 -19
  39. package/core/styles/common/_groups.scss +4 -32
  40. package/core/styles/common/_index.scss +0 -2
  41. package/core/styles/common/_link.scss +117 -0
  42. package/core/styles/common/_list.scss +0 -26
  43. package/core/styles/common/_overlay.scss +8 -10
  44. package/core/styles/common/_rtl.scss +0 -14
  45. package/core/styles/common/_select.scss +33 -15
  46. package/core/styles/common/_squircle.scss +63 -0
  47. package/core/styles/common/_tokens.scss +0 -11
  48. package/core/styles/common/_vendor-prefixes.scss +0 -20
  49. package/core/styles/functions/_timing.scss +0 -22
  50. package/core/styles/theming/_scrollbar-theme.scss +6 -1
  51. package/core/styles/theming/_theming.scss +13 -65
  52. package/core/styles/typography/_index.scss +0 -1
  53. package/core/styles/typography/_typography.scss +0 -143
  54. package/core/styles/visual/_body.scss +1 -6
  55. package/core/styles/visual/_layout.scss +0 -12
  56. package/datepicker/calendar-body.scss +3 -1
  57. package/datepicker/calendar-header.scss +0 -1
  58. package/datepicker/datepicker-content.scss +33 -1
  59. package/datepicker/datepicker-toggle.scss +0 -38
  60. package/dl/dl-tokens.scss +10 -0
  61. package/dl/dl.scss +113 -13
  62. package/dropdown/_dropdown-theme.scss +4 -16
  63. package/dropdown/dropdown-item.scss +4 -10
  64. package/dropdown/dropdown.scss +2 -1
  65. package/empty-state/_empty-state-theme.scss +10 -4
  66. package/empty-state/empty-state-tokens.scss +4 -4
  67. package/empty-state/empty-state.scss +4 -0
  68. package/fesm2022/koobiq-components-accordion.mjs +347 -229
  69. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-actions-panel.mjs +302 -187
  71. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  72. package/fesm2022/koobiq-components-alert.mjs +39 -39
  73. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  74. package/fesm2022/koobiq-components-app-switcher.mjs +677 -367
  75. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-autocomplete.mjs +620 -253
  77. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  78. package/fesm2022/koobiq-components-badge.mjs +46 -48
  79. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  80. package/fesm2022/koobiq-components-breadcrumbs.mjs +221 -169
  81. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  82. package/fesm2022/koobiq-components-button-toggle.mjs +565 -196
  83. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  84. package/fesm2022/koobiq-components-button.mjs +332 -116
  85. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-checkbox.mjs +172 -132
  87. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-clamped-text.mjs +165 -158
  89. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-code-block.mjs +791 -609
  91. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-content-panel.mjs +260 -143
  93. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-core.mjs +4342 -1595
  95. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-datepicker.mjs +1713 -1606
  97. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-divider.mjs +73 -36
  99. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-dl.mjs +447 -89
  101. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-dropdown.mjs +703 -599
  103. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-dynamic-translation.mjs +20 -20
  105. package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-ellipsis-center.mjs +46 -31
  107. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-empty-state.mjs +116 -60
  109. package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-file-upload.mjs +550 -290
  111. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-filter-bar.mjs +2871 -2595
  113. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-flag.mjs +79 -24
  115. package/fesm2022/koobiq-components-flag.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-form-field.mjs +389 -525
  117. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-icon.mjs +400 -149
  119. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  120. package/fesm2022/koobiq-components-inline-edit.mjs +429 -212
  121. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  122. package/fesm2022/koobiq-components-input.mjs +601 -459
  123. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  124. package/fesm2022/koobiq-components-link-deprecated.mjs +196 -0
  125. package/fesm2022/koobiq-components-link-deprecated.mjs.map +1 -0
  126. package/fesm2022/koobiq-components-link.mjs +328 -125
  127. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-list.mjs +583 -433
  129. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-loader-overlay.mjs +167 -68
  131. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-markdown.mjs +55 -78
  133. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-modal.mjs +853 -475
  135. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-navbar.mjs +895 -556
  137. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-notification-center.mjs +680 -310
  139. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-overflow-items.mjs +46 -64
  141. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  142. package/fesm2022/koobiq-components-popover.mjs +684 -285
  143. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  144. package/fesm2022/koobiq-components-progress-bar.mjs +87 -33
  145. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-progress-spinner.mjs +52 -43
  147. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-radio.mjs +450 -231
  149. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-resizer.mjs +127 -21
  151. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  152. package/fesm2022/koobiq-components-scrollbar-deprecated.mjs +299 -0
  153. package/fesm2022/koobiq-components-scrollbar-deprecated.mjs.map +1 -0
  154. package/fesm2022/koobiq-components-scrollbar.mjs +745 -222
  155. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  156. package/fesm2022/koobiq-components-search-expandable.mjs +288 -126
  157. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  158. package/fesm2022/koobiq-components-select.mjs +883 -693
  159. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  160. package/fesm2022/koobiq-components-sidebar.mjs +207 -88
  161. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  162. package/fesm2022/koobiq-components-sidepanel.mjs +689 -296
  163. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  164. package/fesm2022/koobiq-components-skeleton.mjs +815 -41
  165. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
  166. package/fesm2022/koobiq-components-split-button.mjs +109 -88
  167. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  168. package/fesm2022/koobiq-components-splitter-deprecated.mjs +591 -0
  169. package/fesm2022/koobiq-components-splitter-deprecated.mjs.map +1 -0
  170. package/fesm2022/koobiq-components-splitter.mjs +890 -501
  171. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  172. package/fesm2022/koobiq-components-table.mjs +63 -49
  173. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  174. package/fesm2022/koobiq-components-tabs.mjs +1062 -603
  175. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  176. package/fesm2022/koobiq-components-tags.mjs +886 -733
  177. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  178. package/fesm2022/koobiq-components-textarea.mjs +213 -185
  179. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  180. package/fesm2022/koobiq-components-time-range.mjs +299 -147
  181. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  182. package/fesm2022/koobiq-components-timepicker.mjs +233 -245
  183. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  184. package/fesm2022/koobiq-components-timezone.mjs +344 -142
  185. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  186. package/fesm2022/koobiq-components-title.mjs +229 -145
  187. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  188. package/fesm2022/koobiq-components-toast.mjs +463 -143
  189. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  190. package/fesm2022/koobiq-components-toggle.mjs +177 -130
  191. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  192. package/fesm2022/koobiq-components-tooltip.mjs +657 -214
  193. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  194. package/fesm2022/koobiq-components-top-bar.mjs +61 -32
  195. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  196. package/fesm2022/koobiq-components-tree-select.mjs +734 -488
  197. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  198. package/fesm2022/koobiq-components-tree.mjs +1700 -617
  199. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  200. package/fesm2022/koobiq-components-username.mjs +290 -135
  201. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  202. package/file-upload/dropzone.scss +31 -3
  203. package/file-upload/file-upload-tokens.scss +2 -22
  204. package/file-upload/file-upload.scss +6 -0
  205. package/file-upload/multiple-file-upload.component.scss +14 -12
  206. package/file-upload/single-file-upload.component.scss +3 -2
  207. package/filter-bar/filters.scss +7 -0
  208. package/filter-bar/pipes/base-pipe.scss +3 -3
  209. package/filter-bar/pipes/pipe-date.scss +8 -1
  210. package/flag/flag-tokens.scss +22 -0
  211. package/flag/flag.scss +34 -21
  212. package/form-field/{_fiedset-theme.scss → _fieldset-theme.scss} +1 -5
  213. package/form-field/_form-field-theme.scss +4 -9
  214. package/form-field/cleaner.scss +3 -1
  215. package/form-field/fieldset.scss +3 -4
  216. package/form-field/form-field.scss +26 -21
  217. package/form-field/password-toggle.scss +3 -1
  218. package/icon/_icon-button-theme.scss +7 -0
  219. package/icon/_icon-theme.scss +10 -7
  220. package/icon/icon-button.scss +0 -2
  221. package/icon/icon-tokens.scss +12 -9
  222. package/inline-edit/inline-edit.scss +40 -54
  223. package/input/input.scss +4 -0
  224. package/link/{_link-theme.scss → deprecated/_link-theme.scss} +11 -6
  225. package/link/deprecated/link-tokens.scss +27 -0
  226. package/link/link-tokens.scss +6 -25
  227. package/link/link.scss +137 -0
  228. package/list/list.scss +3 -2
  229. package/loader-overlay/_loader-overlay-theme.scss +19 -10
  230. package/loader-overlay/loader-overlay-tokens.scss +0 -2
  231. package/loader-overlay/loader-overlay.scss +7 -1
  232. package/markdown/_markdown-theme.scss +16 -0
  233. package/markdown/markdown-tokens.scss +5 -0
  234. package/markdown/markdown.scss +2 -1
  235. package/modal/_modal-animation.scss +23 -14
  236. package/modal/modal-tokens.scss +2 -1
  237. package/modal/modal.scss +35 -31
  238. package/navbar/_navbar-item_horizontal.scss +8 -6
  239. package/navbar/_navbar-item_vertical.scss +18 -6
  240. package/navbar/_navbar-theme.scss +9 -1
  241. package/navbar/navbar-brand.scss +8 -6
  242. package/navbar/navbar-divider.scss +1 -1
  243. package/navbar/navbar-item.scss +8 -9
  244. package/navbar/navbar-toggle.scss +3 -3
  245. package/navbar/navbar-tokens.scss +14 -0
  246. package/navbar/navbar.scss +1 -2
  247. package/navbar/vertical-navbar.scss +2 -2
  248. package/notification-center/_notification-center-theme.scss +11 -6
  249. package/notification-center/notification-center-tokens.scss +33 -0
  250. package/notification-center/notification-center.scss +58 -20
  251. package/notification-center/notification-item.scss +15 -6
  252. package/package.json +112 -81
  253. package/popover/popover-tokens.scss +0 -2
  254. package/popover/popover.scss +41 -19
  255. package/prebuilt-themes/theme.css +1 -1
  256. package/progress-bar/_progress-bar-theme.scss +20 -3
  257. package/progress-bar/progress-bar-tokens.scss +3 -0
  258. package/progress-bar/progress-bar.scss +36 -8
  259. package/progress-spinner/progress-spinner.scss +4 -3
  260. package/radio/_radio-theme.scss +21 -4
  261. package/radio/radio-tokens.scss +7 -3
  262. package/radio/radio.scss +55 -8
  263. package/schematics/collection.json +415 -18
  264. package/schematics/migrations/accordion-state-saving-default/README.md +60 -0
  265. package/schematics/migrations/accordion-state-saving-default/data.cjs +75 -0
  266. package/schematics/migrations/accordion-state-saving-default/index.cjs +61 -0
  267. package/schematics/migrations/accordion-state-saving-default/schema.json +15 -0
  268. package/schematics/migrations/actions-panel-overlay-container/README.md +35 -0
  269. package/schematics/migrations/actions-panel-overlay-container/data.cjs +47 -0
  270. package/schematics/migrations/actions-panel-overlay-container/index.cjs +55 -0
  271. package/schematics/migrations/actions-panel-overlay-container/schema.json +15 -0
  272. package/schematics/migrations/alert-signals/README.md +13 -7
  273. package/schematics/migrations/alert-signals/{data.js → data.cjs} +3 -0
  274. package/schematics/migrations/alert-signals/index.cjs +221 -0
  275. package/schematics/migrations/angular-animations-removal/README.md +46 -0
  276. package/schematics/migrations/angular-animations-removal/data.cjs +150 -0
  277. package/schematics/migrations/angular-animations-removal/index.cjs +21 -0
  278. package/schematics/migrations/angular-animations-removal/schema.json +15 -0
  279. package/schematics/migrations/app-switcher-signals/README.md +88 -0
  280. package/schematics/migrations/app-switcher-signals/data.cjs +136 -0
  281. package/schematics/migrations/app-switcher-signals/index.cjs +366 -0
  282. package/schematics/migrations/app-switcher-signals/schema.json +20 -0
  283. package/schematics/migrations/autocomplete-panel-width-auto/README.md +2 -2
  284. package/schematics/migrations/autocomplete-panel-width-auto/{index.js → index.cjs} +6 -5
  285. package/schematics/migrations/autocomplete-signals/README.md +92 -0
  286. package/schematics/migrations/autocomplete-signals/data.cjs +149 -0
  287. package/schematics/migrations/autocomplete-signals/index.cjs +707 -0
  288. package/schematics/migrations/autocomplete-signals/schema.json +20 -0
  289. package/schematics/migrations/badge-signals/README.md +77 -0
  290. package/schematics/migrations/badge-signals/data.cjs +109 -0
  291. package/schematics/migrations/badge-signals/index.cjs +694 -0
  292. package/schematics/migrations/badge-signals/schema.json +20 -0
  293. package/schematics/migrations/button-state-and-styles/README.md +129 -0
  294. package/schematics/migrations/button-state-and-styles/data.cjs +136 -0
  295. package/schematics/migrations/button-state-and-styles/index.cjs +221 -0
  296. package/schematics/migrations/button-state-and-styles/schema.json +20 -0
  297. package/schematics/migrations/button-supported-colors/README.md +73 -0
  298. package/schematics/migrations/button-supported-colors/data.cjs +106 -0
  299. package/schematics/migrations/button-supported-colors/index.cjs +261 -0
  300. package/schematics/migrations/button-supported-colors/schema.json +20 -0
  301. package/schematics/migrations/button-toggle-signals-and-aria/README.md +137 -0
  302. package/schematics/migrations/button-toggle-signals-and-aria/data.cjs +200 -0
  303. package/schematics/migrations/button-toggle-signals-and-aria/index.cjs +497 -0
  304. package/schematics/migrations/button-toggle-signals-and-aria/schema.json +20 -0
  305. package/schematics/migrations/button-truncation/README.md +110 -0
  306. package/schematics/migrations/button-truncation/data.cjs +88 -0
  307. package/schematics/migrations/button-truncation/index.cjs +270 -0
  308. package/schematics/migrations/button-truncation/schema.json +20 -0
  309. package/schematics/migrations/checkbox-signals/README.md +76 -0
  310. package/schematics/migrations/checkbox-signals/data.cjs +114 -0
  311. package/schematics/migrations/checkbox-signals/index.cjs +635 -0
  312. package/schematics/migrations/checkbox-signals/schema.json +20 -0
  313. package/schematics/migrations/clamped-text-disclosure/README.md +62 -0
  314. package/schematics/migrations/clamped-text-disclosure/data.cjs +101 -0
  315. package/schematics/migrations/clamped-text-disclosure/index.cjs +60 -0
  316. package/schematics/migrations/clamped-text-disclosure/schema.json +15 -0
  317. package/schematics/migrations/code-block-highlight-js-core/README.md +53 -0
  318. package/schematics/migrations/code-block-highlight-js-core/data.cjs +64 -0
  319. package/schematics/migrations/code-block-highlight-js-core/index.cjs +319 -0
  320. package/schematics/migrations/code-block-highlight-js-core/schema.json +20 -0
  321. package/schematics/migrations/code-block-signals/README.md +84 -0
  322. package/schematics/migrations/code-block-signals/data.cjs +121 -0
  323. package/schematics/migrations/code-block-signals/index.cjs +701 -0
  324. package/schematics/migrations/code-block-signals/schema.json +20 -0
  325. package/schematics/migrations/color-signals/README.md +46 -0
  326. package/schematics/migrations/color-signals/data.cjs +131 -0
  327. package/schematics/migrations/color-signals/index.cjs +20 -0
  328. package/schematics/migrations/color-signals/schema.json +20 -0
  329. package/schematics/migrations/core-mixins-removal/README.md +20 -0
  330. package/schematics/migrations/core-mixins-removal/data.cjs +27 -0
  331. package/schematics/migrations/core-mixins-removal/index.cjs +18 -0
  332. package/schematics/migrations/core-mixins-removal/schema.json +15 -0
  333. package/schematics/migrations/css-selectors/README.md +2 -2
  334. package/schematics/migrations/css-selectors/{index.js → index.cjs} +4 -3
  335. package/schematics/migrations/datepicker-signals/README.md +24 -0
  336. package/schematics/migrations/datepicker-signals/data.cjs +49 -0
  337. package/schematics/migrations/datepicker-signals/index.cjs +18 -0
  338. package/schematics/migrations/datepicker-signals/schema.json +15 -0
  339. package/schematics/migrations/deprecated-icons/README.md +2 -2
  340. package/schematics/migrations/deprecated-icons/{index.js → index.cjs} +8 -7
  341. package/schematics/migrations/design-tokens-v4/README.md +75 -0
  342. package/schematics/migrations/design-tokens-v4/index.cjs +60 -0
  343. package/schematics/migrations/design-tokens-v4/schema.json +15 -0
  344. package/schematics/migrations/divider-signals-and-aria/README.md +47 -0
  345. package/schematics/migrations/divider-signals-and-aria/data.cjs +62 -0
  346. package/schematics/migrations/divider-signals-and-aria/index.cjs +212 -0
  347. package/schematics/migrations/divider-signals-and-aria/schema.json +15 -0
  348. package/schematics/migrations/dl-attribute-coercion/README.md +59 -0
  349. package/schematics/migrations/dl-attribute-coercion/data.cjs +85 -0
  350. package/schematics/migrations/dl-attribute-coercion/index.cjs +162 -0
  351. package/schematics/migrations/dl-attribute-coercion/schema.json +15 -0
  352. package/schematics/migrations/dl-standalone-names/README.md +49 -0
  353. package/schematics/migrations/dl-standalone-names/data.cjs +44 -0
  354. package/schematics/migrations/dl-standalone-names/index.cjs +322 -0
  355. package/schematics/migrations/dl-standalone-names/schema.json +20 -0
  356. package/schematics/migrations/dropdown-demote-overlay/README.md +137 -0
  357. package/schematics/migrations/dropdown-demote-overlay/data.cjs +84 -0
  358. package/schematics/migrations/dropdown-demote-overlay/index.cjs +289 -0
  359. package/schematics/migrations/dropdown-demote-overlay/schema.json +20 -0
  360. package/schematics/migrations/dropdown-signals/README.md +83 -0
  361. package/schematics/migrations/dropdown-signals/data.cjs +152 -0
  362. package/schematics/migrations/dropdown-signals/index.cjs +20 -0
  363. package/schematics/migrations/dropdown-signals/schema.json +20 -0
  364. package/schematics/migrations/empty-state-error-color/README.md +84 -0
  365. package/schematics/migrations/empty-state-error-color/data.cjs +85 -0
  366. package/schematics/migrations/empty-state-error-color/index.cjs +72 -0
  367. package/schematics/migrations/empty-state-error-color/schema.json +15 -0
  368. package/schematics/migrations/empty-state-size-attr/README.md +2 -2
  369. package/schematics/migrations/empty-state-size-attr/{index.js → index.cjs} +6 -5
  370. package/schematics/migrations/file-upload-cva-and-primitives/README.md +70 -0
  371. package/schematics/migrations/file-upload-cva-and-primitives/data.cjs +97 -0
  372. package/schematics/migrations/file-upload-cva-and-primitives/index.cjs +61 -0
  373. package/schematics/migrations/file-upload-cva-and-primitives/schema.json +15 -0
  374. package/schematics/migrations/file-upload-deprecated-outputs/README.md +90 -0
  375. package/schematics/migrations/file-upload-deprecated-outputs/data.cjs +20 -0
  376. package/schematics/migrations/file-upload-deprecated-outputs/index.cjs +71 -0
  377. package/schematics/migrations/file-upload-deprecated-outputs/schema.json +20 -0
  378. package/schematics/migrations/filter-bar-rename-action/README.md +183 -0
  379. package/schematics/migrations/filter-bar-rename-action/data.cjs +151 -0
  380. package/schematics/migrations/filter-bar-rename-action/index.cjs +178 -0
  381. package/schematics/migrations/filter-bar-rename-action/schema.json +20 -0
  382. package/schematics/migrations/filter-bar-signals/README.md +27 -16
  383. package/schematics/migrations/filter-bar-signals/{data.js → data.cjs} +1 -2
  384. package/schematics/migrations/filter-bar-signals/index.cjs +225 -0
  385. package/schematics/migrations/filter-bar-state-saving-default/README.md +53 -0
  386. package/schematics/migrations/filter-bar-state-saving-default/data.cjs +87 -0
  387. package/schematics/migrations/filter-bar-state-saving-default/index.cjs +62 -0
  388. package/schematics/migrations/filter-bar-state-saving-default/schema.json +15 -0
  389. package/schematics/migrations/flag-inner-html/README.md +67 -0
  390. package/schematics/migrations/flag-inner-html/data.cjs +58 -0
  391. package/schematics/migrations/flag-inner-html/index.cjs +62 -0
  392. package/schematics/migrations/flag-inner-html/schema.json +15 -0
  393. package/schematics/migrations/form-field-signals/README.md +125 -0
  394. package/schematics/migrations/form-field-signals/data.cjs +288 -0
  395. package/schematics/migrations/form-field-signals/index.cjs +383 -0
  396. package/schematics/migrations/form-field-signals/schema.json +20 -0
  397. package/schematics/migrations/icon-semantics-and-api/README.md +65 -0
  398. package/schematics/migrations/icon-semantics-and-api/data.cjs +97 -0
  399. package/schematics/migrations/icon-semantics-and-api/index.cjs +65 -0
  400. package/schematics/migrations/icon-semantics-and-api/schema.json +15 -0
  401. package/schematics/migrations/icons-replacement/README.md +5 -5
  402. package/schematics/migrations/icons-replacement/{index.js → index.cjs} +4 -3
  403. package/schematics/migrations/inline-edit-a11y-and-types/README.md +82 -0
  404. package/schematics/migrations/inline-edit-a11y-and-types/data.cjs +117 -0
  405. package/schematics/migrations/inline-edit-a11y-and-types/index.cjs +98 -0
  406. package/schematics/migrations/inline-edit-a11y-and-types/schema.json +20 -0
  407. package/schematics/migrations/input-number-surface/README.md +140 -0
  408. package/schematics/migrations/input-number-surface/data.cjs +135 -0
  409. package/schematics/migrations/input-number-surface/index.cjs +293 -0
  410. package/schematics/migrations/input-number-surface/schema.json +20 -0
  411. package/schematics/migrations/input-signals/README.md +20 -0
  412. package/schematics/migrations/input-signals/data.cjs +30 -0
  413. package/schematics/migrations/input-signals/index.cjs +18 -0
  414. package/schematics/migrations/input-signals/schema.json +15 -0
  415. package/schematics/migrations/link-deprecated-path/README.md +144 -0
  416. package/schematics/migrations/link-deprecated-path/index.cjs +20 -0
  417. package/schematics/migrations/link-deprecated-path/schema.json +20 -0
  418. package/schematics/migrations/link-signals/README.md +71 -0
  419. package/schematics/migrations/link-signals/data.cjs +116 -0
  420. package/schematics/migrations/link-signals/index.cjs +416 -0
  421. package/schematics/migrations/link-signals/schema.json +20 -0
  422. package/schematics/migrations/list-signals/README.md +22 -0
  423. package/schematics/migrations/list-signals/data.cjs +35 -0
  424. package/schematics/migrations/list-signals/index.cjs +18 -0
  425. package/schematics/migrations/list-signals/schema.json +15 -0
  426. package/schematics/migrations/list-tree-multiple-input/README.md +105 -0
  427. package/schematics/migrations/list-tree-multiple-input/data.cjs +74 -0
  428. package/schematics/migrations/list-tree-multiple-input/index.cjs +222 -0
  429. package/schematics/migrations/list-tree-multiple-input/schema.json +20 -0
  430. package/schematics/migrations/loader-overlay-signals/README.md +62 -0
  431. package/schematics/migrations/loader-overlay-signals/data.cjs +101 -0
  432. package/schematics/migrations/loader-overlay-signals/index.cjs +698 -0
  433. package/schematics/migrations/loader-overlay-signals/schema.json +20 -0
  434. package/schematics/migrations/loader-overlay-size-attr/README.md +2 -2
  435. package/schematics/migrations/loader-overlay-size-attr/{index.js → index.cjs} +6 -5
  436. package/schematics/migrations/locale-configuration-providers/README.md +163 -0
  437. package/schematics/migrations/locale-configuration-providers/data.cjs +257 -0
  438. package/schematics/migrations/locale-configuration-providers/index.cjs +295 -0
  439. package/schematics/migrations/locale-configuration-providers/schema.json +20 -0
  440. package/schematics/migrations/mandatory-peer-dependencies/README.md +70 -0
  441. package/schematics/migrations/mandatory-peer-dependencies/index.cjs +43 -0
  442. package/schematics/migrations/mandatory-peer-dependencies/schema.json +15 -0
  443. package/schematics/migrations/markdown-signals/README.md +58 -0
  444. package/schematics/migrations/markdown-signals/data.cjs +79 -0
  445. package/schematics/migrations/markdown-signals/index.cjs +640 -0
  446. package/schematics/migrations/markdown-signals/schema.json +20 -0
  447. package/schematics/migrations/modal-dialog-semantics/README.md +106 -0
  448. package/schematics/migrations/modal-dialog-semantics/data.cjs +110 -0
  449. package/schematics/migrations/modal-dialog-semantics/index.cjs +59 -0
  450. package/schematics/migrations/modal-dialog-semantics/schema.json +15 -0
  451. package/schematics/migrations/modal-signals/README.md +88 -0
  452. package/schematics/migrations/modal-signals/data.cjs +132 -0
  453. package/schematics/migrations/modal-signals/index.cjs +20 -0
  454. package/schematics/migrations/modal-signals/schema.json +20 -0
  455. package/schematics/migrations/navbar-signals-and-aria/README.md +111 -0
  456. package/schematics/migrations/navbar-signals-and-aria/data.cjs +198 -0
  457. package/schematics/migrations/navbar-signals-and-aria/index.cjs +569 -0
  458. package/schematics/migrations/navbar-signals-and-aria/schema.json +20 -0
  459. package/schematics/migrations/new-icons-pack/README.md +10 -10
  460. package/schematics/migrations/new-icons-pack/{index.js → index.cjs} +8 -7
  461. package/schematics/migrations/notification-center-signals/README.md +67 -0
  462. package/schematics/migrations/notification-center-signals/data.cjs +66 -0
  463. package/schematics/migrations/notification-center-signals/index.cjs +62 -0
  464. package/schematics/migrations/notification-center-signals/schema.json +15 -0
  465. package/schematics/migrations/option-signals/README.md +37 -0
  466. package/schematics/migrations/option-signals/data.cjs +86 -0
  467. package/schematics/migrations/option-signals/index.cjs +20 -0
  468. package/schematics/migrations/option-signals/schema.json +20 -0
  469. package/schematics/migrations/popover-leave-delay/README.md +51 -0
  470. package/schematics/migrations/popover-leave-delay/data.cjs +61 -0
  471. package/schematics/migrations/popover-leave-delay/index.cjs +55 -0
  472. package/schematics/migrations/popover-leave-delay/schema.json +15 -0
  473. package/schematics/migrations/progress-bar-percentage-and-aria/README.md +54 -0
  474. package/schematics/migrations/progress-bar-percentage-and-aria/data.cjs +76 -0
  475. package/schematics/migrations/progress-bar-percentage-and-aria/index.cjs +59 -0
  476. package/schematics/migrations/progress-bar-percentage-and-aria/schema.json +15 -0
  477. package/schematics/migrations/progress-spinner-signals/README.md +72 -0
  478. package/schematics/migrations/progress-spinner-signals/data.cjs +83 -0
  479. package/schematics/migrations/progress-spinner-signals/index.cjs +695 -0
  480. package/schematics/migrations/progress-spinner-signals/schema.json +20 -0
  481. package/schematics/migrations/query-list-signals/README.md +32 -0
  482. package/schematics/migrations/query-list-signals/data.cjs +70 -0
  483. package/schematics/migrations/query-list-signals/index.cjs +18 -0
  484. package/schematics/migrations/query-list-signals/schema.json +15 -0
  485. package/schematics/migrations/radio-signals-and-aria/README.md +82 -0
  486. package/schematics/migrations/radio-signals-and-aria/data.cjs +163 -0
  487. package/schematics/migrations/radio-signals-and-aria/index.cjs +40 -0
  488. package/schematics/migrations/radio-signals-and-aria/schema.json +20 -0
  489. package/schematics/migrations/read-state-dwell-handlers/README.md +125 -0
  490. package/schematics/migrations/read-state-dwell-handlers/data.cjs +45 -0
  491. package/schematics/migrations/read-state-dwell-handlers/index.cjs +216 -0
  492. package/schematics/migrations/read-state-dwell-handlers/schema.json +20 -0
  493. package/schematics/migrations/scrollbar-deprecated-path/README.md +128 -0
  494. package/schematics/migrations/scrollbar-deprecated-path/index.cjs +21 -0
  495. package/schematics/migrations/scrollbar-deprecated-path/schema.json +20 -0
  496. package/schematics/migrations/select-signal-inputs/README.md +61 -0
  497. package/schematics/migrations/select-signal-inputs/data.cjs +99 -0
  498. package/schematics/migrations/select-signal-inputs/index.cjs +58 -0
  499. package/schematics/migrations/select-signal-inputs/schema.json +15 -0
  500. package/schematics/migrations/sidepanel-non-modal-behavior/README.md +57 -0
  501. package/schematics/migrations/sidepanel-non-modal-behavior/data.cjs +111 -0
  502. package/schematics/migrations/sidepanel-non-modal-behavior/index.cjs +58 -0
  503. package/schematics/migrations/sidepanel-non-modal-behavior/schema.json +15 -0
  504. package/schematics/migrations/signal-inputs-subclasses/README.md +28 -0
  505. package/schematics/migrations/signal-inputs-subclasses/data.cjs +69 -0
  506. package/schematics/migrations/signal-inputs-subclasses/index.cjs +18 -0
  507. package/schematics/migrations/signal-inputs-subclasses/schema.json +15 -0
  508. package/schematics/migrations/split-button-optional-disabled/README.md +47 -0
  509. package/schematics/migrations/split-button-optional-disabled/data.cjs +53 -0
  510. package/schematics/migrations/split-button-optional-disabled/index.cjs +58 -0
  511. package/schematics/migrations/split-button-optional-disabled/schema.json +15 -0
  512. package/schematics/migrations/splitter-deprecated-path/README.md +136 -0
  513. package/schematics/migrations/splitter-deprecated-path/index.cjs +21 -0
  514. package/schematics/migrations/splitter-deprecated-path/schema.json +20 -0
  515. package/schematics/migrations/state-saving-default/README.md +67 -0
  516. package/schematics/migrations/state-saving-default/data.cjs +88 -0
  517. package/schematics/migrations/state-saving-default/index.cjs +63 -0
  518. package/schematics/migrations/state-saving-default/schema.json +15 -0
  519. package/schematics/migrations/table-cell-content/README.md +55 -0
  520. package/schematics/migrations/table-cell-content/data.cjs +66 -0
  521. package/schematics/migrations/table-cell-content/index.cjs +67 -0
  522. package/schematics/migrations/table-cell-content/schema.json +15 -0
  523. package/schematics/migrations/tabs-signals-and-aria/README.md +93 -0
  524. package/schematics/migrations/tabs-signals-and-aria/data.cjs +139 -0
  525. package/schematics/migrations/tabs-signals-and-aria/index.cjs +66 -0
  526. package/schematics/migrations/tabs-signals-and-aria/schema.json +15 -0
  527. package/schematics/migrations/tag-list-cleaner/README.md +58 -0
  528. package/schematics/migrations/tag-list-cleaner/data.cjs +42 -0
  529. package/schematics/migrations/tag-list-cleaner/index.cjs +197 -0
  530. package/schematics/migrations/tag-list-cleaner/schema.json +20 -0
  531. package/schematics/migrations/tag-slots/README.md +41 -0
  532. package/schematics/migrations/tag-slots/index.cjs +191 -0
  533. package/schematics/migrations/tag-slots/schema.json +20 -0
  534. package/schematics/migrations/tags-signals/README.md +85 -0
  535. package/schematics/migrations/tags-signals/data.cjs +103 -0
  536. package/schematics/migrations/tags-signals/index.cjs +674 -0
  537. package/schematics/migrations/tags-signals/schema.json +20 -0
  538. package/schematics/migrations/textarea-signals/README.md +72 -0
  539. package/schematics/migrations/textarea-signals/data.cjs +121 -0
  540. package/schematics/migrations/textarea-signals/index.cjs +380 -0
  541. package/schematics/migrations/textarea-signals/schema.json +20 -0
  542. package/schematics/migrations/time-range-title-for/README.md +164 -0
  543. package/schematics/migrations/time-range-title-for/data.cjs +139 -0
  544. package/schematics/migrations/time-range-title-for/index.cjs +164 -0
  545. package/schematics/migrations/time-range-title-for/schema.json +20 -0
  546. package/schematics/migrations/timepicker-signals/README.md +78 -0
  547. package/schematics/migrations/timepicker-signals/data.cjs +82 -0
  548. package/schematics/migrations/timepicker-signals/index.cjs +710 -0
  549. package/schematics/migrations/timepicker-signals/schema.json +20 -0
  550. package/schematics/migrations/timezone-grouping-utils/README.md +73 -0
  551. package/schematics/migrations/timezone-grouping-utils/data.cjs +101 -0
  552. package/schematics/migrations/timezone-grouping-utils/index.cjs +65 -0
  553. package/schematics/migrations/timezone-grouping-utils/schema.json +15 -0
  554. package/schematics/migrations/title-encapsulation/README.md +49 -0
  555. package/schematics/migrations/title-encapsulation/data.cjs +69 -0
  556. package/schematics/migrations/title-encapsulation/index.cjs +58 -0
  557. package/schematics/migrations/title-encapsulation/schema.json +15 -0
  558. package/schematics/migrations/toast-stack-and-defaults/README.md +102 -0
  559. package/schematics/migrations/toast-stack-and-defaults/data.cjs +79 -0
  560. package/schematics/migrations/toast-stack-and-defaults/index.cjs +54 -0
  561. package/schematics/migrations/toast-stack-and-defaults/schema.json +15 -0
  562. package/schematics/migrations/tooltip-pointer-events-and-types/README.md +53 -0
  563. package/schematics/migrations/tooltip-pointer-events-and-types/data.cjs +89 -0
  564. package/schematics/migrations/tooltip-pointer-events-and-types/index.cjs +61 -0
  565. package/schematics/migrations/tooltip-pointer-events-and-types/schema.json +15 -0
  566. package/schematics/migrations/top-bar-container-selectors/README.md +111 -0
  567. package/schematics/migrations/top-bar-container-selectors/data.cjs +56 -0
  568. package/schematics/migrations/top-bar-container-selectors/index.cjs +85 -0
  569. package/schematics/migrations/top-bar-container-selectors/schema.json +20 -0
  570. package/schematics/migrations/tree-select-signals/README.md +61 -0
  571. package/schematics/migrations/tree-select-signals/data.cjs +106 -0
  572. package/schematics/migrations/tree-select-signals/index.cjs +59 -0
  573. package/schematics/migrations/tree-select-signals/schema.json +15 -0
  574. package/schematics/migrations/tree-signals/README.md +82 -0
  575. package/schematics/migrations/tree-signals/data.cjs +123 -0
  576. package/schematics/migrations/tree-signals/index.cjs +55 -0
  577. package/schematics/migrations/tree-signals/schema.json +15 -0
  578. package/schematics/migrations/tree-state-saving-default/README.md +66 -0
  579. package/schematics/migrations/tree-state-saving-default/data.cjs +78 -0
  580. package/schematics/migrations/tree-state-saving-default/index.cjs +61 -0
  581. package/schematics/migrations/tree-state-saving-default/schema.json +15 -0
  582. package/schematics/migrations/username-pipe-injection/README.md +59 -0
  583. package/schematics/migrations/username-pipe-injection/data.cjs +78 -0
  584. package/schematics/migrations/username-pipe-injection/index.cjs +59 -0
  585. package/schematics/migrations/username-pipe-injection/schema.json +15 -0
  586. package/schematics/migrations/v20-upgrade/README.md +36 -16
  587. package/schematics/migrations/v20-upgrade/{data.js → data.cjs} +124 -77
  588. package/schematics/migrations/v20-upgrade/index.cjs +19 -0
  589. package/schematics/migrations/v21-upgrade/README.md +271 -0
  590. package/schematics/migrations/v21-upgrade/data.cjs +1371 -0
  591. package/schematics/migrations/v21-upgrade/index.cjs +95 -0
  592. package/schematics/migrations/v21-upgrade/schema.json +20 -0
  593. package/schematics/migrations/zoneless-change-detection/README.md +30 -0
  594. package/schematics/migrations/zoneless-change-detection/data.cjs +29 -0
  595. package/schematics/migrations/zoneless-change-detection/index.cjs +21 -0
  596. package/schematics/migrations/zoneless-change-detection/schema.json +15 -0
  597. package/schematics/migrations.json +401 -6
  598. package/schematics/ng-add/index.cjs +266 -0
  599. package/schematics/ng-add/schema.json +15 -0
  600. package/schematics/utils/{angular-parsing.js → angular-parsing.cjs} +2 -2
  601. package/schematics/utils/deprecated-path-migration.cjs +62 -0
  602. package/schematics/utils/html-config.cjs +148 -0
  603. package/schematics/utils/{icon-migration.js → icon-migration.cjs} +2 -2
  604. package/schematics/utils/list-item-pattern.cjs +16 -0
  605. package/schematics/utils/{package-config.js → package-config.cjs} +3 -32
  606. package/schematics/utils/project-files.cjs +25 -0
  607. package/schematics/utils/replacement-driver.cjs +337 -0
  608. package/schematics/utils/safe-rule.cjs +23 -0
  609. package/schematics/utils/signal-members-migration.cjs +779 -0
  610. package/schematics/utils/tag-patterns.cjs +21 -0
  611. package/schematics/utils/template-ref-access.cjs +155 -0
  612. package/schematics/utils/{typescript.js → typescript.cjs} +1 -1
  613. package/schematics/utils/warn-only-migration.cjs +52 -0
  614. package/schematics/utils/workspace-styles.cjs +123 -0
  615. package/scrollbar/{_scrollbar-component-theme.scss → deprecated/_scrollbar-component-theme.scss} +1 -1
  616. package/scrollbar/{scrollbar.component.scss → deprecated/scrollbar.component.scss} +1 -1
  617. package/scrollbar/native-scrollbar.scss +68 -0
  618. package/scrollbar/scrollbar-tokens.scss +13 -22
  619. package/scrollbar/scrollbar-track.scss +94 -0
  620. package/scrollbar/scrollbar-viewport.scss +33 -0
  621. package/scrollbar/scrollbar.scss +24 -0
  622. package/search-expandable/search-expandable-tokens.scss +4 -0
  623. package/search-expandable/search-expandable.scss +4 -2
  624. package/select/_select-theme.scss +3 -16
  625. package/select/select.scss +0 -6
  626. package/sidebar/sidebar.scss +20 -0
  627. package/sidepanel/_sidepanel-theme.scss +1 -1
  628. package/sidepanel/sidepanel-tokens.scss +7 -1
  629. package/sidepanel/sidepanel.scss +41 -5
  630. package/skeleton/skeleton-presets.scss +350 -0
  631. package/skeleton/skeleton-tokens.scss +127 -0
  632. package/skeleton/skeleton.scss +53 -45
  633. package/split-button/_split-button-theme.scss +4 -4
  634. package/split-button/split-button.scss +2 -6
  635. package/splitter/{_splitter-theme.scss → deprecated/_splitter-theme.scss} +1 -1
  636. package/splitter/deprecated/splitter.scss +51 -0
  637. package/splitter/splitter-tokens.scss +19 -0
  638. package/splitter/splitter.scss +148 -28
  639. package/table/_table-theme.scss +13 -12
  640. package/table/table-tokens.scss +8 -0
  641. package/table/table.scss +47 -22
  642. package/tabs/_tabs-common.scss +14 -14
  643. package/tabs/_tabs-theme.scss +4 -5
  644. package/tabs/tab-body.scss +49 -1
  645. package/tabs/tab-header.scss +2 -1
  646. package/tags/tag-list.scss +4 -0
  647. package/tags/tag.scss +19 -1
  648. package/time-range/time-range.scss +9 -0
  649. package/timezone/timezone-option.component.scss +4 -7
  650. package/timezone/timezone-select.component.scss +3 -0
  651. package/toast/_toast-theme.scss +1 -4
  652. package/toast/toast-container.component.scss +19 -13
  653. package/toast/toast-tokens.scss +12 -6
  654. package/toast/toast.component.scss +42 -19
  655. package/toggle/_toggle-theme.scss +4 -10
  656. package/toggle/toggle.scss +67 -26
  657. package/tooltip/_tooltip-theme.scss +7 -1
  658. package/tooltip/tooltip-tokens.scss +1 -2
  659. package/tooltip/tooltip.scss +55 -9
  660. package/top-bar/top-bar-tokens.scss +13 -2
  661. package/top-bar/top-bar.scss +24 -19
  662. package/tree/_tree-theme.scss +0 -1
  663. package/tree/toggle.scss +5 -9
  664. package/tree/tree-option.scss +2 -4
  665. package/tree/tree-tokens.scss +2 -1
  666. package/tree/tree.scss +3 -5
  667. package/tree-select/_tree-select-theme.scss +4 -15
  668. package/tree-select/tree-select-tokens.scss +16 -0
  669. package/tree-select/tree-select.scss +0 -6
  670. package/{accordion/index.d.ts → types/koobiq-components-accordion.d.ts} +102 -84
  671. package/{actions-panel/index.d.ts → types/koobiq-components-actions-panel.d.ts} +44 -59
  672. package/{alert/index.d.ts → types/koobiq-components-alert.d.ts} +8 -3
  673. package/types/koobiq-components-app-switcher.d.ts +406 -0
  674. package/types/koobiq-components-autocomplete.d.ts +443 -0
  675. package/{badge/index.d.ts → types/koobiq-components-badge.d.ts} +25 -20
  676. package/{breadcrumbs/index.d.ts → types/koobiq-components-breadcrumbs.d.ts} +97 -46
  677. package/types/koobiq-components-button-toggle.d.ts +340 -0
  678. package/types/koobiq-components-button.d.ts +296 -0
  679. package/types/koobiq-components-checkbox.d.ts +172 -0
  680. package/types/koobiq-components-clamped-text.d.ts +184 -0
  681. package/{code-block/index.d.ts → types/koobiq-components-code-block.d.ts} +150 -88
  682. package/{content-panel/index.d.ts → types/koobiq-components-content-panel.d.ts} +81 -25
  683. package/{core/index.d.ts → types/koobiq-components-core.d.ts} +2827 -865
  684. package/{datepicker/index.d.ts → types/koobiq-components-datepicker.d.ts} +161 -116
  685. package/types/koobiq-components-divider.d.ts +43 -0
  686. package/types/koobiq-components-dl.d.ts +235 -0
  687. package/{dropdown/index.d.ts → types/koobiq-components-dropdown.d.ts} +245 -239
  688. package/types/koobiq-components-ellipsis-center.d.ts +85 -0
  689. package/types/koobiq-components-empty-state.d.ts +106 -0
  690. package/{file-upload/index.d.ts → types/koobiq-components-file-upload.d.ts} +214 -107
  691. package/{filter-bar/index.d.ts → types/koobiq-components-filter-bar.d.ts} +410 -495
  692. package/types/koobiq-components-flag.d.ts +68 -0
  693. package/{form-field/index.d.ts → types/koobiq-components-form-field.d.ts} +167 -191
  694. package/types/koobiq-components-icon.d.ts +333 -0
  695. package/{inline-edit/index.d.ts → types/koobiq-components-inline-edit.d.ts} +109 -46
  696. package/types/koobiq-components-input.d.ts +477 -0
  697. package/types/koobiq-components-link-deprecated.d.ts +101 -0
  698. package/types/koobiq-components-link.d.ts +176 -0
  699. package/{list/index.d.ts → types/koobiq-components-list.d.ts} +162 -99
  700. package/types/koobiq-components-loader-overlay.d.ts +101 -0
  701. package/{markdown/index.d.ts → types/koobiq-components-markdown.d.ts} +16 -24
  702. package/types/koobiq-components-modal.d.ts +666 -0
  703. package/types/koobiq-components-navbar.d.ts +569 -0
  704. package/types/koobiq-components-notification-center.d.ts +500 -0
  705. package/{overflow-items/index.d.ts → types/koobiq-components-overflow-items.d.ts} +8 -22
  706. package/types/koobiq-components-popover.d.ts +468 -0
  707. package/types/koobiq-components-progress-bar.d.ts +67 -0
  708. package/{progress-spinner/index.d.ts → types/koobiq-components-progress-spinner.d.ts} +33 -10
  709. package/types/koobiq-components-radio.d.ts +294 -0
  710. package/{resizer/index.d.ts → types/koobiq-components-resizer.d.ts} +37 -2
  711. package/{scrollbar/index.d.ts → types/koobiq-components-scrollbar-deprecated.d.ts} +18 -1
  712. package/types/koobiq-components-scrollbar.d.ts +154 -0
  713. package/types/koobiq-components-search-expandable.d.ts +164 -0
  714. package/{select/index.d.ts → types/koobiq-components-select.d.ts} +360 -167
  715. package/types/koobiq-components-sidebar.d.ts +152 -0
  716. package/types/koobiq-components-sidepanel.d.ts +436 -0
  717. package/types/koobiq-components-skeleton.d.ts +234 -0
  718. package/types/koobiq-components-split-button.d.ts +65 -0
  719. package/{splitter/index.d.ts → types/koobiq-components-splitter-deprecated.d.ts} +44 -1
  720. package/types/koobiq-components-splitter.d.ts +406 -0
  721. package/types/koobiq-components-table.d.ts +44 -0
  722. package/types/koobiq-components-tabs.d.ts +888 -0
  723. package/{tags/index.d.ts → types/koobiq-components-tags.d.ts} +249 -133
  724. package/types/koobiq-components-textarea.d.ts +178 -0
  725. package/{time-range/index.d.ts → types/koobiq-components-time-range.d.ts} +135 -62
  726. package/types/koobiq-components-timepicker.d.ts +223 -0
  727. package/types/koobiq-components-timezone.d.ts +266 -0
  728. package/types/koobiq-components-title.d.ts +184 -0
  729. package/types/koobiq-components-toast.d.ts +289 -0
  730. package/types/koobiq-components-toggle.d.ts +121 -0
  731. package/types/koobiq-components-tooltip.d.ts +610 -0
  732. package/types/koobiq-components-top-bar.d.ts +61 -0
  733. package/types/koobiq-components-tree-select.d.ts +670 -0
  734. package/types/koobiq-components-tree.d.ts +1339 -0
  735. package/types/koobiq-components-username.d.ts +340 -0
  736. package/username/_username-theme.scss +35 -0
  737. package/username/username.scss +10 -34
  738. package/app-switcher/index.d.ts +0 -276
  739. package/autocomplete/index.d.ts +0 -286
  740. package/button/index.d.ts +0 -153
  741. package/button-toggle/index.d.ts +0 -162
  742. package/checkbox/index.d.ts +0 -163
  743. package/clamped-text/index.d.ts +0 -146
  744. package/core/styles/_tokens.scss +0 -7
  745. package/core/styles/common/_clearfix.scss +0 -13
  746. package/core/styles/common/_popup.scss +0 -6
  747. package/core/styles/functions/_index.scss +0 -3
  748. package/core/styles/functions/_number.scss +0 -60
  749. package/core/styles/functions/_string.scss +0 -18
  750. package/core/styles/theming/scrollbar-tokens.scss +0 -25
  751. package/core/styles/typography/_typography-utils.scss +0 -84
  752. package/divider/index.d.ts +0 -20
  753. package/dl/index.d.ts +0 -45
  754. package/ellipsis-center/index.d.ts +0 -71
  755. package/empty-state/index.d.ts +0 -45
  756. package/flag/index.d.ts +0 -44
  757. package/icon/index.d.ts +0 -200
  758. package/input/index.d.ts +0 -354
  759. package/link/index.d.ts +0 -56
  760. package/loader-overlay/index.d.ts +0 -57
  761. package/modal/index.d.ts +0 -339
  762. package/navbar/index.d.ts +0 -372
  763. package/notification-center/index.d.ts +0 -323
  764. package/popover/index.d.ts +0 -182
  765. package/prebuilt-themes/dark-theme.css +0 -1
  766. package/prebuilt-themes/light-theme.css +0 -1
  767. package/progress-bar/index.d.ts +0 -31
  768. package/radio/index.d.ts +0 -203
  769. package/schematics/migrations/alert-signals/index.js +0 -353
  770. package/schematics/migrations/filter-bar-signals/index.js +0 -319
  771. package/schematics/migrations/v20-upgrade/index.js +0 -225
  772. package/schematics/ng-add/index.js +0 -39
  773. package/search-expandable/index.d.ts +0 -101
  774. package/sidebar/index.d.ts +0 -94
  775. package/sidepanel/index.d.ts +0 -272
  776. package/skeleton/index.d.ts +0 -26
  777. package/split-button/index.d.ts +0 -46
  778. package/table/index.d.ts +0 -25
  779. package/tabs/index.d.ts +0 -677
  780. package/textarea/index.d.ts +0 -138
  781. package/timepicker/index.d.ts +0 -197
  782. package/timezone/index.d.ts +0 -125
  783. package/title/index.d.ts +0 -139
  784. package/toast/index.d.ts +0 -178
  785. package/toggle/index.d.ts +0 -104
  786. package/tooltip/index.d.ts +0 -335
  787. package/top-bar/index.d.ts +0 -33
  788. package/tree/index.d.ts +0 -802
  789. package/tree-select/index.d.ts +0 -475
  790. package/username/index.d.ts +0 -194
  791. /package/schematics/migrations/css-selectors/{data.js → data.cjs} +0 -0
  792. /package/schematics/migrations/deprecated-icons/{data.js → data.cjs} +0 -0
  793. /package/schematics/migrations/icons-replacement/{data.js → data.cjs} +0 -0
  794. /package/schematics/migrations/new-icons-pack/{data.js → data.cjs} +0 -0
  795. /package/schematics/utils/{ast.js → ast.cjs} +0 -0
  796. /package/schematics/utils/{messages.js → messages.cjs} +0 -0
  797. /package/{dynamic-translation/index.d.ts → types/koobiq-components-dynamic-translation.d.ts} +0 -0
  798. /package/{index.d.ts → types/koobiq-components.d.ts} +0 -0
@@ -1,14 +1,13 @@
1
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';
2
+ import { InjectionToken, Injectable, inject, viewChild, ViewEncapsulation, ChangeDetectionStrategy, Component, input, Renderer2, booleanAttribute, EventEmitter, effect, untracked, Directive, NgModule } from '@angular/core';
3
3
  import { FocusMonitor } from '@angular/cdk/a11y';
4
4
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
5
5
  import { Overlay } from '@angular/cdk/overlay';
6
6
  import { NgTemplateOutlet } from '@angular/common';
7
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
- import { KbqPopUp, applyPopupMargins, PopUpTriggers, KbqPopUpTrigger, KbqComponentColors, KBQ_PARENT_POPUP, KBQ_SIBLING_POPUP, POSITION_TO_CSS_MAP, PopUpPlacements } from '@koobiq/components/core';
7
+ import { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
+ import { KbqPopUp, applyPopupMargins, PopUpTriggers, KbqPopUpTrigger, KbqComponentColors, PopUpPlacements, KBQ_PARENT_POPUP, KBQ_SIBLING_POPUP, kbqOptionalNumberAttribute, kbqCreateCaretOrigin, POSITION_TO_CSS_MAP, ESCAPE, kbqGetSelectionRect, kbqListenForCaretMoves } from '@koobiq/components/core';
9
9
  import { merge, EMPTY } from 'rxjs';
10
10
  import { filter } from 'rxjs/operators';
11
- import { trigger, state, style, transition, animate, keyframes } from '@angular/animations';
12
11
 
13
12
  /**
14
13
  * Default value of the `kbqTooltipSingleInstance` input. Provide `false` at the application level to
@@ -44,60 +43,119 @@ class KbqTooltipRegistry {
44
43
  this.visibleTooltip = null;
45
44
  }
46
45
  }
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' }); }
46
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTooltipRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
47
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTooltipRegistry, providedIn: 'root' }); }
49
48
  }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipRegistry, decorators: [{
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTooltipRegistry, decorators: [{
51
50
  type: Injectable,
52
51
  args: [{ providedIn: 'root' }]
53
52
  }] });
54
53
 
55
- /**
56
- * Animations used by KbqTooltip.
57
- * @docs-private
58
- */
59
- const kbqTooltipAnimations = {
60
- /** Animation that transitions a tooltip in and out. */
61
- tooltipState: trigger('state', [
62
- state('initial, void, hidden', style({ opacity: 0, transform: 'scale(0)' })),
63
- state('visible', style({ transform: 'scale(0.99)' })),
64
- transition('* => visible', animate('200ms cubic-bezier(0, 0, 0.2, 1)', keyframes([
65
- style({ opacity: 0, transform: 'scale(0)', offset: 0 }),
66
- style({ opacity: 0.5, transform: 'scale(0.9)', offset: 0.5 }),
67
- style({ opacity: 1, transform: 'scale(0.99)', offset: 1 })
68
- ]))),
69
- transition('* => hidden', animate('100ms cubic-bezier(0, 0, 0.2, 1)', style({ opacity: 0 })))
70
- ])
71
- };
72
-
73
54
  var TooltipModifier;
74
55
  (function (TooltipModifier) {
75
56
  TooltipModifier["Default"] = "default";
76
57
  TooltipModifier["Warning"] = "warning";
77
58
  TooltipModifier["Extended"] = "extended";
78
59
  })(TooltipModifier || (TooltipModifier = {}));
60
+ /**
61
+ * @deprecated Replaced by {@link KbqTooltipDelayTracker}, which owns the shared timestamp behind a service
62
+ * instead of a mutable `useValue` object. The tooltip no longer reads this token; providing it has no effect. Will be
63
+ * removed in 22.0.0.
64
+ */
79
65
  const KBQ_TOOLTIP_OPEN_TIME = new InjectionToken('kbq-tooltip-open-time');
80
- /** @docs-private */
66
+ /**
67
+ * @deprecated Replaced by {@link KbqTooltipDelayTracker}. Providing it has no effect. Will be removed in 22.0.0.
68
+ *
69
+ * @docs-private
70
+ */
81
71
  const KBQ_TOOLTIP_OPEN_TIME_PROVIDER = {
82
72
  provide: KBQ_TOOLTIP_OPEN_TIME,
83
73
  useValue: { value: 0 }
84
74
  };
75
+ /** Default length of the window during which a following tooltip is shown without its enter delay. */
85
76
  const MIN_TIME_FOR_DELAY = 2000;
77
+ /**
78
+ * Length in milliseconds of the window during which a tooltip shown right after another one appears
79
+ * instantly. Defaults to {@link MIN_TIME_FOR_DELAY}.
80
+ */
81
+ const KBQ_TOOLTIP_INSTANT_SHOW_WINDOW = new InjectionToken('kbq-tooltip-instant-show-window', {
82
+ providedIn: 'root',
83
+ factory: () => MIN_TIME_FOR_DELAY
84
+ });
85
+ /**
86
+ * Remembers when a tooltip was last shown, so that moving between neighbouring triggers does not replay the
87
+ * enter delay for every one of them: the first tooltip waits `kbqEnterDelay`, the ones following it within
88
+ * {@link KBQ_TOOLTIP_INSTANT_SHOW_WINDOW} appear instantly.
89
+ *
90
+ * Application-wide by design — the behavior is part of the component's documented delay rules.
91
+ */
92
+ class KbqTooltipDelayTracker {
93
+ constructor() {
94
+ this.instantShowWindow = inject(KBQ_TOOLTIP_INSTANT_SHOW_WINDOW);
95
+ /** Timestamp of the last shown tooltip, or `null` while no tooltip has been shown recently. */
96
+ this.lastShownAt = null;
97
+ }
98
+ /** Whether the tooltip that is about to be shown should skip its enter delay. */
99
+ shouldSkipEnterDelay() {
100
+ return this.lastShownAt !== null && Date.now() - this.lastShownAt < this.instantShowWindow;
101
+ }
102
+ /** Records that a tooltip has just been shown. */
103
+ markShown() {
104
+ this.lastShownAt = Date.now();
105
+ }
106
+ /** Forgets the last shown tooltip, so the next one appears with its full enter delay. */
107
+ reset() {
108
+ this.lastShownAt = null;
109
+ }
110
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTooltipDelayTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
111
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTooltipDelayTracker, providedIn: 'root' }); }
112
+ }
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTooltipDelayTracker, decorators: [{
114
+ type: Injectable,
115
+ args: [{ providedIn: 'root' }]
116
+ }] });
117
+ /** Source of the unique ids that link a tooltip to the `aria-describedby` of its trigger. */
118
+ let nextTooltipUniqueId = 0;
86
119
  class KbqTooltipComponent extends KbqPopUp {
87
120
  constructor() {
88
121
  super(...arguments);
89
- this.openTime = inject(KBQ_TOOLTIP_OPEN_TIME);
122
+ this.delayTracker = inject(KbqTooltipDelayTracker);
90
123
  this.prefix = 'kbq-tooltip';
124
+ /**
125
+ * Id rendered on the tooltip element; the trigger points its `aria-describedby` at it.
126
+ *
127
+ * Public only because the trigger is a separate class and overwrites it with its own id — nothing outside
128
+ * the pair should read or write it, or the accessibility link between them breaks.
129
+ *
130
+ * @docs-private
131
+ */
132
+ this.id = `kbq-tooltip-${nextTooltipUniqueId++}`;
133
+ this.tooltipElement = viewChild('tooltip', ...(ngDevMode ? [{ debugName: "tooltipElement" }] : /* istanbul ignore next */ []));
134
+ }
135
+ /** The tooltip panel, which the base pop-up measures and decorates instead of the host. */
136
+ get elementRef() {
137
+ return this.tooltipElement();
91
138
  }
92
139
  show(delay) {
93
140
  if (!this.content) {
94
141
  return;
95
142
  }
96
- super.show(Date.now() - this.openTime.value < MIN_TIME_FOR_DELAY ? 0 : delay);
97
- if (this.offset !== null) {
98
- applyPopupMargins(this.renderer, this.elementRef.nativeElement, this.prefix, `${this.offset.toString()}px`);
99
- }
100
- this.openTime.value = Date.now();
143
+ super.show(this.delayTracker.shouldSkipEnterDelay() ? 0 : delay);
144
+ this.applyOffset();
145
+ this.delayTracker.markShown();
146
+ }
147
+ /**
148
+ * Applies `offset` as the gap between the tooltip and its trigger. Called both on show and whenever the
149
+ * trigger pushes new data, so that changing `kbqTooltipOffset` on an open tooltip actually moves it.
150
+ *
151
+ * Public only because the trigger calls it from the outside; it is not part of the supported surface.
152
+ *
153
+ * @docs-private
154
+ */
155
+ applyOffset() {
156
+ // An empty value removes a gap applied earlier, handing it back to the stylesheet.
157
+ const margin = this.offset == null ? '' : `${this.offset}px`;
158
+ applyPopupMargins(this.renderer, this.elementRef.nativeElement, this.prefix, margin);
101
159
  }
102
160
  updateClassMap(placement, customClass, { modifier }) {
103
161
  const classMap = {
@@ -105,18 +163,15 @@ class KbqTooltipComponent extends KbqPopUp {
105
163
  };
106
164
  super.updateClassMap(placement, customClass, classMap);
107
165
  }
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 }); }
166
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTooltipComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
167
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: KbqTooltipComponent, isStandalone: true, selector: "kbq-tooltip-component", viewQueries: [{ propertyName: "tooltipElement", first: true, predicate: ["tooltip"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #tooltip\n class=\"kbq-tooltip\"\n role=\"tooltip\"\n [attr.id]=\"id\"\n [class.kbq-tooltip_arrowless]=\"!arrow\"\n [class]=\"classMap\"\n [class.kbq-animations-disabled]=\"animationsDisabled\"\n [class.kbq-tooltip_visible]=\"isVisible()\"\n>\n <div class=\"kbq-tooltip__inner\">\n @if (arrow) {\n <div class=\"kbq-tooltip__arrow\" aria-hidden=\"true\"></div>\n }\n\n @if (header) {\n <div class=\"kbq-tooltip__header\">\n @if (isTemplateRef(header)) {\n <ng-container [ngTemplateOutlet]=\"$any(header)\" [ngTemplateOutletContext]=\"context\" />\n } @else {\n <div>{{ header }}</div>\n }\n </div>\n }\n <div class=\"kbq-tooltip__content\">\n @if (isTemplateRef(content)) {\n <ng-container [ngTemplateOutlet]=\"$any(content)\" [ngTemplateOutletContext]=\"context\" />\n } @else {\n <div>{{ content }}</div>\n }\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.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-trigger_for-disabled{outline-color:var(--kbq-states-line-focus-theme)}.kbq-tooltip__inner{border-radius:var(--kbq-tooltip-size-border-radius)}@supports (corner-shape: squircle){.kbq-tooltip__inner{corner-shape:squircle;border-radius:clamp(var(--kbq-tooltip-size-border-radius) * 1.85,var(--kbq-tooltip-size-border-radius) * 2.3 - 3.6px,var(--kbq-tooltip-size-border-radius) * 2)}}.kbq-tooltip__inner{overflow-wrap:break-word}.kbq-tooltip{box-sizing:border-box;border-radius:var(--kbq-tooltip-size-border-radius)}@supports (corner-shape: squircle){.kbq-tooltip{corner-shape:squircle;border-radius:clamp(var(--kbq-tooltip-size-border-radius) * 1.85,var(--kbq-tooltip-size-border-radius) * 2.3 - 3.6px,var(--kbq-tooltip-size-border-radius) * 2)}}.kbq-tooltip{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);opacity:0;transform:scale(0)}.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-tooltip_visible{opacity:1;transform:scale(1);animation:kbq-tooltip-enter .2s cubic-bezier(0,0,.2,1)}.kbq-tooltip.kbq-tooltip_visible.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-tooltip.kbq-tooltip_visible{animation:none;transition:none}}@keyframes kbq-tooltip-enter{0%{opacity:0;transform:scale(0)}50%{opacity:.5;transform:scale(.9)}}.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-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_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-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_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-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_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-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_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-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_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}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
110
168
  }
111
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipComponent, decorators: [{
169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTooltipComponent, decorators: [{
112
170
  type: Component,
113
171
  args: [{ selector: 'kbq-tooltip-component', imports: [
114
172
  NgTemplateOutlet
115
- ], providers: [KBQ_TOOLTIP_OPEN_TIME_PROVIDER], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, animations: [kbqTooltipAnimations.tooltipState], 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"] }]
116
- }], propDecorators: { elementRef: [{
117
- type: ViewChild,
118
- args: ['tooltip']
119
- }] } });
173
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n #tooltip\n class=\"kbq-tooltip\"\n role=\"tooltip\"\n [attr.id]=\"id\"\n [class.kbq-tooltip_arrowless]=\"!arrow\"\n [class]=\"classMap\"\n [class.kbq-animations-disabled]=\"animationsDisabled\"\n [class.kbq-tooltip_visible]=\"isVisible()\"\n>\n <div class=\"kbq-tooltip__inner\">\n @if (arrow) {\n <div class=\"kbq-tooltip__arrow\" aria-hidden=\"true\"></div>\n }\n\n @if (header) {\n <div class=\"kbq-tooltip__header\">\n @if (isTemplateRef(header)) {\n <ng-container [ngTemplateOutlet]=\"$any(header)\" [ngTemplateOutletContext]=\"context\" />\n } @else {\n <div>{{ header }}</div>\n }\n </div>\n }\n <div class=\"kbq-tooltip__content\">\n @if (isTemplateRef(content)) {\n <ng-container [ngTemplateOutlet]=\"$any(content)\" [ngTemplateOutletContext]=\"context\" />\n } @else {\n <div>{{ content }}</div>\n }\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.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-trigger_for-disabled{outline-color:var(--kbq-states-line-focus-theme)}.kbq-tooltip__inner{border-radius:var(--kbq-tooltip-size-border-radius)}@supports (corner-shape: squircle){.kbq-tooltip__inner{corner-shape:squircle;border-radius:clamp(var(--kbq-tooltip-size-border-radius) * 1.85,var(--kbq-tooltip-size-border-radius) * 2.3 - 3.6px,var(--kbq-tooltip-size-border-radius) * 2)}}.kbq-tooltip__inner{overflow-wrap:break-word}.kbq-tooltip{box-sizing:border-box;border-radius:var(--kbq-tooltip-size-border-radius)}@supports (corner-shape: squircle){.kbq-tooltip{corner-shape:squircle;border-radius:clamp(var(--kbq-tooltip-size-border-radius) * 1.85,var(--kbq-tooltip-size-border-radius) * 2.3 - 3.6px,var(--kbq-tooltip-size-border-radius) * 2)}}.kbq-tooltip{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);opacity:0;transform:scale(0)}.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-tooltip_visible{opacity:1;transform:scale(1);animation:kbq-tooltip-enter .2s cubic-bezier(0,0,.2,1)}.kbq-tooltip.kbq-tooltip_visible.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-tooltip.kbq-tooltip_visible{animation:none;transition:none}}@keyframes kbq-tooltip-enter{0%{opacity:0;transform:scale(0)}50%{opacity:.5;transform:scale(.9)}}.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-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_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-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_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-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_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-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_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-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_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}\n"] }]
174
+ }], propDecorators: { tooltipElement: [{ type: i0.ViewChild, args: ['tooltip', { isSignal: true }] }] } });
120
175
  /**
121
176
  * Triggers that make a tooltip part of the "only one tooltip is visible at a time" group.
122
177
  *
@@ -135,6 +190,24 @@ const INTERACTIVE_TRIGGERS = [
135
190
  * element. Both are bound by `KbqPopUpTrigger.initListeners` whenever the matching show trigger is bound.
136
191
  */
137
192
  const RELEASE_TRIGGERS = ['mouseleave', 'blur'];
193
+ /**
194
+ * Focus origins a focus-triggered tooltip opens for. Everything but `keyboard` is excluded on purpose: a
195
+ * pointer user gets the tooltip from the hover trigger, and showing it again on the focus a click leaves
196
+ * behind makes it linger after the pointer has moved on. `program` cannot be admitted either, because CDK
197
+ * reports it whenever it fails to attribute a focus — including the focus that follows a click outside its
198
+ * detection window — so admitting it would re-open exactly the case above. Focus the application moves on
199
+ * purpose still opens the tooltip: the repo convention is `focusVia(element, 'keyboard')`, which reports
200
+ * `keyboard`.
201
+ */
202
+ const FOCUS_ORIGINS_THAT_SHOW = ['keyboard'];
203
+ /** Base panel class of the tooltip overlay. */
204
+ const TOOLTIP_PANEL_CLASS = 'kbq-tooltip-panel';
205
+ /** Default `kbqEnterDelay`, in milliseconds. */
206
+ const defaultEnterDelay = 400;
207
+ /** Panel class that makes the tooltip pane transparent to pointer events. */
208
+ const IGNORE_POINTER_EVENTS_PANEL_CLASS = 'cdk-overlay-pane_ignore-pointer-events';
209
+ /** Elements a caret can be located in, and therefore anchored to. */
210
+ const EDITABLE_SELECTOR = 'input, textarea, [contenteditable=""], [contenteditable="true"]';
138
211
  const KBQ_TOOLTIP_SCROLL_STRATEGY = new InjectionToken('kbq-tooltip-scroll-strategy', {
139
212
  providedIn: 'root',
140
213
  factory: () => kbqTooltipScrollStrategyFactory(inject(Overlay))
@@ -143,7 +216,11 @@ const KBQ_TOOLTIP_SCROLL_STRATEGY = new InjectionToken('kbq-tooltip-scroll-strat
143
216
  function kbqTooltipScrollStrategyFactory(overlay) {
144
217
  return () => overlay.scrollStrategies.close();
145
218
  }
146
- /** @docs-private */
219
+ /**
220
+ * Redundant to the root factory of the token; kept so an app can restore the default under its own override (#DS-2196).
221
+ *
222
+ * @docs-private
223
+ */
147
224
  const KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {
148
225
  provide: KBQ_TOOLTIP_SCROLL_STRATEGY,
149
226
  deps: [Overlay],
@@ -160,8 +237,6 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
160
237
  return this.scrollStrategyOverride() ?? this.injectedScrollStrategy;
161
238
  }
162
239
  /** Input (`kbqVisible`) that programmatically shows or hides the tooltip; reflects the current `visible` state. */
163
- // TODO: Skipped for migration because:
164
- // Accessor inputs cannot be migrated as they are too complex.
165
240
  get tooltipVisible() {
166
241
  return this.visible;
167
242
  }
@@ -169,8 +244,6 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
169
244
  super.updateVisible(value);
170
245
  }
171
246
  /** Input (`kbqPlacement`) that sets the tooltip placement relative to its trigger; reflects the current `placement`. */
172
- // TODO: Skipped for migration because:
173
- // Accessor inputs cannot be migrated as they are too complex.
174
247
  get tooltipPlacement() {
175
248
  return this.placement;
176
249
  }
@@ -178,8 +251,6 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
178
251
  super.updatePlacement(value);
179
252
  }
180
253
  /** Input (`kbqPlacementPriority`) that sets the ordered fallback placements; reflects the current `placementPriority`. */
181
- // TODO: Skipped for migration because:
182
- // Accessor inputs cannot be migrated as they are too complex.
183
254
  get tooltipPlacementPriority() {
184
255
  return this.placementPriority;
185
256
  }
@@ -187,8 +258,6 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
187
258
  super.updatePlacementPriority(value);
188
259
  }
189
260
  /** Input (`kbqTooltip`) with the tooltip content — a string or a template. Updating it refreshes an open tooltip. */
190
- // TODO: Skipped for migration because:
191
- // Accessor inputs cannot be migrated as they are too complex.
192
261
  get content() {
193
262
  return this._content;
194
263
  }
@@ -196,21 +265,21 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
196
265
  this._content = content;
197
266
  this.updateData();
198
267
  }
199
- /** Input (`kbqTooltipDisabled`) controlling whether the tooltip is disabled; setting it to `true` hides it. */
200
- // TODO: Skipped for migration because:
201
- // Accessor inputs cannot be migrated as they are too complex.
268
+ /**
269
+ * Input (`kbqTooltipDisabled`) controlling whether the tooltip is disabled; setting it to `true` hides it.
270
+ * `undefined` leaves the decision to the trigger, like an unset input.
271
+ *
272
+ * Reads back the *effective* state, which for triggers that derive one of their own (see
273
+ * `derivedDisabledWins`) is not necessarily the value that was written.
274
+ */
202
275
  get disabled() {
203
276
  return this._disabled;
204
277
  }
205
278
  set disabled(value) {
206
- this._disabled = coerceBooleanProperty(value);
207
- if (this._disabled) {
208
- this.hide();
209
- }
279
+ this.explicitlyDisabled = value === undefined ? undefined : coerceBooleanProperty(value);
280
+ this.applyDisabled();
210
281
  }
211
282
  /** Input (`kbqTrigger`) with the comma-separated trigger events. An empty value resets to hover + focus and rebinds listeners. */
212
- // TODO: Skipped for migration because:
213
- // Accessor inputs cannot be migrated as they are too complex.
214
283
  get trigger() {
215
284
  return this._trigger;
216
285
  }
@@ -224,8 +293,6 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
224
293
  this.initListeners();
225
294
  }
226
295
  /** Input (`kbqTooltipClass`) with an extra CSS class applied to the tooltip; updating it refreshes the class map. */
227
- // TODO: Skipped for migration because:
228
- // Accessor inputs cannot be migrated as they are too complex.
229
296
  get customClass() {
230
297
  return this._customClass || '';
231
298
  }
@@ -239,8 +306,6 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
239
306
  }
240
307
  }
241
308
  /** Input (`kbqTooltipContext`) with the context object passed to a template tooltip; updating it refreshes the open tooltip. */
242
- // TODO: Skipped for migration because:
243
- // Accessor inputs cannot be migrated as they are too complex.
244
309
  get context() {
245
310
  return this._context;
246
311
  }
@@ -248,34 +313,103 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
248
313
  this._context = ctx;
249
314
  this.updateData();
250
315
  }
251
- /** Input (`kbqTooltipColor`) with the tooltip color theme; the getter returns the `kbq-`-prefixed CSS class. */
252
- // TODO: Skipped for migration because:
253
- // Accessor inputs cannot be migrated as they are too complex.
316
+ /** Input (`kbqTooltipColor`) with the tooltip color theme. Defaults to `KbqComponentColors.Contrast`. */
254
317
  get color() {
255
- return `kbq-${this._color}`;
318
+ return this._color;
256
319
  }
257
320
  set color(value) {
258
321
  this._color = value || KbqComponentColors.Contrast;
259
322
  }
323
+ /** CSS class the current `color` maps to. */
324
+ get colorClass() {
325
+ return `kbq-${this._color}`;
326
+ }
260
327
  /** Whether the configured trigger list includes the `click` trigger. */
261
328
  get hasClickInTrigger() {
262
329
  return this.trigger.includes(PopUpTriggers.Click);
263
330
  }
264
331
  /**
265
- * The old `KbqWarningTooltipTrigger` / `KbqExtendedTooltipTrigger` subclasses had
266
- * setters on their content/header inputs that pushed updates into the open tooltip.
267
- * Now that `modifier` and `header` are plain `@Input` fields on this base class,
268
- * we need to mirror that reactivity manually — without it, changing the inputs
269
- * while a tooltip is open silently leaves the overlay showing stale data until
270
- * the next show/hide cycle.
332
+ * Hands each bound input to its member, and pushes a later change of `modifier`, `header`, `arrow` or
333
+ * `offset` — plain fields — into an open tooltip, which would otherwise show stale data until the next
334
+ * show/hide cycle.
271
335
  */
272
336
  ngOnChanges(changes) {
337
+ // A bound input is handed to its member, a bound `undefined` restoring the
338
+ // member's default; unbound, it leaves what code wrote.
339
+ if (changes['triggerInput']) {
340
+ this.trigger = this.triggerInput() ?? '';
341
+ }
342
+ if (changes['hideWithTimeoutInput']) {
343
+ const hideWithTimeout = this.hideWithTimeoutInput();
344
+ if (hideWithTimeout !== undefined)
345
+ this.hideWithTimeout = hideWithTimeout;
346
+ }
347
+ if (changes['enterDelayInput']) {
348
+ this.enterDelay = this.enterDelayInput() ?? defaultEnterDelay;
349
+ }
350
+ if (changes['leaveDelayInput']) {
351
+ this.leaveDelay = this.leaveDelayInput() ?? 0;
352
+ }
353
+ if (changes['relativeToPointerInput']) {
354
+ const relativeToPointer = this.relativeToPointerInput();
355
+ if (relativeToPointer !== undefined)
356
+ this.relativeToPointer = relativeToPointer;
357
+ }
358
+ if (changes['relativeToCaretInput']) {
359
+ const relativeToCaret = this.relativeToCaretInput();
360
+ if (relativeToCaret !== undefined)
361
+ this.relativeToCaret = relativeToCaret;
362
+ }
363
+ if (changes['relativeToCaretVerticalInput']) {
364
+ this.relativeToCaretVertical = this.relativeToCaretVerticalInput() ?? 'auto';
365
+ }
366
+ if (changes['contentInput']) {
367
+ this.content = this.contentInput() ?? '';
368
+ }
369
+ if (changes['headerInput']) {
370
+ this.header = this.headerInput() ?? '';
371
+ }
372
+ if (changes['modifierInput']) {
373
+ this.modifier = this.modifierInput() ?? TooltipModifier.Default;
374
+ }
375
+ if (changes['contextInput']) {
376
+ this.context = this.contextInput();
377
+ }
378
+ if (changes['customClassInput']) {
379
+ this.customClass = this.customClassInput() ?? '';
380
+ }
381
+ if (changes['colorInput']) {
382
+ this.color = this.colorInput() ?? KbqComponentColors.Contrast;
383
+ }
384
+ if (changes['arrowInput']) {
385
+ const arrow = this.arrowInput();
386
+ if (arrow !== undefined)
387
+ this.arrow = arrow;
388
+ }
389
+ if (changes['offsetInput']) {
390
+ this.offset = this.offsetInput() ?? null;
391
+ }
392
+ if (changes['disabledInput']) {
393
+ // A bound `undefined` hands the decision back to the state the trigger derives.
394
+ this.disabled = this.disabledInput();
395
+ }
396
+ if (changes['tooltipPlacementPriorityInput']) {
397
+ this.tooltipPlacementPriority = this.tooltipPlacementPriorityInput() ?? null;
398
+ }
399
+ if (changes['tooltipPlacementInput']) {
400
+ this.tooltipPlacement = this.tooltipPlacementInput() ?? PopUpPlacements.Top;
401
+ }
402
+ if (changes['tooltipVisibleInput']) {
403
+ this.tooltipVisible = this.tooltipVisibleInput() ?? false;
404
+ }
273
405
  if (!this.instance)
274
406
  return;
275
- if (changes.modifier && !changes.modifier.firstChange) {
407
+ if (changes['modifierInput'] && !changes['modifierInput'].firstChange) {
276
408
  this.updateClassMap();
277
409
  }
278
- if (changes.header && !changes.header.firstChange) {
410
+ if ((changes['headerInput'] && !changes['headerInput'].firstChange) ||
411
+ (changes['arrowInput'] && !changes['arrowInput'].firstChange) ||
412
+ (changes['offsetInput'] && !changes['offsetInput'].firstChange)) {
279
413
  this.updateData();
280
414
  }
281
415
  }
@@ -301,8 +435,9 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
301
435
  * Sets up an effect that mirrors a `forDisabledComponent`'s disabled signal: when that component is disabled it
302
436
  * makes the host focusable (so the tooltip can still be triggered) and enables the tooltip, otherwise disables it.
303
437
  *
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
438
+ * Also joins the "only one tooltip is visible at a time" group, mutes the tooltip while a pop-up on the
439
+ * same element is open, tracks the focus origin and keeps the trigger's `aria-describedby` in sync with the
440
+ * open tooltip. All of this wiring lives here rather than in `ngAfterViewInit`/`ngOnDestroy` because
306
441
  * several subclasses override those hooks: `KbqTitleDirective` and `KbqEllipsisCenterDirective` skip
307
442
  * `super.ngAfterViewInit()`, and `KbqPasswordToggle` skips `super` in both hooks entirely. `destroyRef`
308
443
  * additionally covers a trigger destroyed while its tooltip is still visible — that path disposes the
@@ -315,14 +450,15 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
315
450
  this.injectedScrollStrategy = inject(KBQ_TOOLTIP_SCROLL_STRATEGY);
316
451
  /**
317
452
  * 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
453
+ * when set. An input rather than a DI override so it applies to this tooltip instance only, without
319
454
  * leaking into other `kbqTooltip`s nested inside the same host (DI overrides are visible to every
320
455
  * descendant in the element-injector tree, not just the element they're declared on).
456
+ *
321
457
  * @docs-private
322
458
  */
323
- this.scrollStrategyOverride = input(undefined, ...(ngDevMode ? [{ debugName: "scrollStrategyOverride", alias: 'kbqTooltipScrollStrategy' }] : [{
324
- alias: 'kbqTooltipScrollStrategy'
325
- }]));
459
+ this.scrollStrategyOverride = input(undefined, { ...(ngDevMode ? { debugName: "scrollStrategyOverride" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipScrollStrategy' });
460
+ /** Id of the tooltip element this trigger points its `aria-describedby` at while the tooltip is open. */
461
+ this.tooltipId = `kbq-tooltip-${nextTooltipUniqueId++}`;
326
462
  /** @docs-private */
327
463
  this.parentPopup = inject(KBQ_PARENT_POPUP, { optional: true });
328
464
  /**
@@ -341,15 +477,19 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
341
477
  * The input expects a component containing `disabledSignal` property, which is
342
478
  * a writable signal emitting boolean values.
343
479
  */
344
- this.forDisabledComponent = input(...(ngDevMode ? [undefined, { debugName: "forDisabledComponent" }] : []));
480
+ this.forDisabledComponent = input(...(ngDevMode ? [undefined, { debugName: "forDisabledComponent" }] : /* istanbul ignore next */ []));
345
481
  /**
346
482
  * Determines whether pointer events should be ignored on tooltips.
347
483
  *
348
- * When set to `true`, tooltip elements will not receive pointer events,
349
- * allowing interactions to pass through to underlying elements.
350
- * Defaults to `true`.
484
+ * When set to `true`, the tooltip pane does not receive pointer events, so clicks and hovers pass through
485
+ * to whatever is underneath it. Defaults to `false`, which keeps the tooltip hoverable: a user who needs
486
+ * more time to read it — or who reads at high magnification, where the pointer often ends up over the
487
+ * tooltip itself — can move the pointer onto it without it disappearing (WCAG 1.4.13 "Content on Hover").
488
+ *
489
+ * Set it to `true` for tooltips that float over other click targets, such as the overflow hints of a
490
+ * scrolling option list.
351
491
  */
352
- this.ignoreTooltipPointerEvents = input(true, ...(ngDevMode ? [{ debugName: "ignoreTooltipPointerEvents" }] : []));
492
+ this.ignoreTooltipPointerEvents = input(false, ...(ngDevMode ? [{ debugName: "ignoreTooltipPointerEvents" }] : /* istanbul ignore next */ []));
353
493
  /**
354
494
  * Whether the tooltip takes part in the "only one tooltip is visible at a time" group: showing it
355
495
  * hides the previously visible tooltip, and it is hidden when another tooltip is shown.
@@ -360,36 +500,43 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
360
500
  * Tooltips without an interactive `kbqTrigger` (`manual`, `none`, …) never take part in the group,
361
501
  * regardless of this input — they are shown imperatively and are expected to stay pinned.
362
502
  */
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
- }]));
503
+ this.singleInstance = input(inject(KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT), { ...(ngDevMode ? { debugName: "singleInstance" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipSingleInstance',
504
+ transform: booleanAttribute });
368
505
  /**
369
506
  * Changes hiding behavior. By default, tooltip is hidden on mouseleave from trigger.
370
507
  * Setting hideWithTimeout to true will delay tooltip hiding and will not hide when the mouse moves from trigger
371
508
  * to tooltip.
372
509
  */
373
- // TODO: Skipped for migration because:
374
- // This input overrides a field from a superclass, while the superclass field
375
- // is not migrated.
376
510
  this.hideWithTimeout = false;
377
511
  /**
378
512
  * Positions the tooltip relative to the mouse cursor. Only available for top and bottom kbqPlacement.
379
513
  * Does not work with kbqPlacementPriority.
380
514
  */
381
- // TODO: Skipped for migration because:
382
- // Class of this input is manually instantiated. This is discouraged and prevents
383
- // migration.
384
515
  this.relativeToPointer = false;
516
+ /**
517
+ * Positions the tooltip relative to the text caret of the field it is attached to, following it while the
518
+ * user types, moves the caret and scrolls the field. Anchors to the selection whenever there is one.
519
+ *
520
+ * Every placement is available, unlike with `kbqRelativeToPointer`: the caret is anchored as a rectangle,
521
+ * so the usual fallback placements keep the tooltip on screen. Wins when both inputs are enabled.
522
+ *
523
+ * The field is the host element itself when it is editable, otherwise the first editable it wraps.
524
+ */
525
+ this.relativeToCaret = false;
526
+ /** What the tooltip is vertically anchored to while `kbqRelativeToCaret` is enabled. */
527
+ this.relativeToCaretVertical = 'auto';
528
+ /**
529
+ * Whether the state this trigger derives means *there is nothing to show*, so an explicit
530
+ * `kbqTooltipDisabled="false"` cannot override it, as for a hint that repeats text the host never clipped.
531
+ * Otherwise the explicit value wins in both directions, so `false` on a wrapped control that is not disabled
532
+ * still asks for a tooltip.
533
+ *
534
+ * @docs-private
535
+ */
536
+ this.derivedDisabledWins = false;
385
537
  /** Input (`kbqEnterDelay`) — delay in milliseconds before the tooltip is shown. Defaults to `400`. */
386
- // TODO: Skipped for migration because:
387
- // Your application code writes to the input. This prevents migration.
388
- this.enterDelay = 400;
538
+ this.enterDelay = defaultEnterDelay;
389
539
  /** Input (`kbqLeaveDelay`) — delay in milliseconds before the tooltip is hidden. Defaults to `0`. */
390
- // TODO: Skipped for migration because:
391
- // This input overrides a field from a superclass, while the superclass field
392
- // is not migrated.
393
540
  this.leaveDelay = 0;
394
541
  /** Backing field for `trigger`; defaults to hover + focus. */
395
542
  this._trigger = `${PopUpTriggers.Hover}, ${PopUpTriggers.Focus}`;
@@ -398,22 +545,25 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
398
545
  /** Backing field for `color`; defaults to `KbqComponentColors.Contrast`. */
399
546
  this._color = KbqComponentColors.Contrast;
400
547
  /** Input (`kbqTooltipArrow`) — whether to render the tooltip's arrow/pointer. Defaults to `false`. */
401
- // TODO: Skipped for migration because:
402
- // Your application code writes to the input. This prevents migration.
403
548
  this.arrow = false;
404
- /** Input (`kbqTooltipOffset`) — distance in pixels between the tooltip and its trigger; `null` uses the default. */
405
- // TODO: Skipped for migration because:
406
- // Your application code writes to the input. This prevents migration.
549
+ /**
550
+ * Input (`kbqTooltipOffset`) — distance in pixels between the tooltip and its trigger. `null`, the default, keeps
551
+ * the gap of the stylesheet.
552
+ */
407
553
  this.offset = null;
408
554
  /** Output (`kbqPlacementChange`) that emits the new placement whenever the tooltip repositions. */
409
555
  this.placementChange = new EventEmitter();
556
+ /** @docs-private */
557
+ this.placementChangeOutput = outputFromObservable(this.placementChange, { alias: 'kbqPlacementChange' });
410
558
  /** Output (`kbqVisibleChange`) that emits when the tooltip's visibility changes. */
411
559
  this.visibleChange = new EventEmitter();
412
560
  /** @docs-private */
561
+ this.visibleChangeOutput = outputFromObservable(this.visibleChange, { alias: 'kbqVisibleChange' });
562
+ /** @docs-private */
413
563
  this.originSelector = '.kbq-tooltip';
414
564
  /** @docs-private */
415
565
  this.overlayConfig = {
416
- panelClass: ['kbq-tooltip-panel']
566
+ panelClass: [TOOLTIP_PANEL_CLASS]
417
567
  };
418
568
  /**
419
569
  * Visual variant of the tooltip. Accepts `'default'` | `'warning'` | `'extended'`.
@@ -421,9 +571,6 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
421
571
  * subclasses — to render a warning tooltip use `kbqTooltipModifier="warning"`,
422
572
  * and `kbqTooltipModifier="extended"` for the extended variant (combine with `kbqTooltipHeader`).
423
573
  */
424
- // TODO: Skipped for migration because:
425
- // Class of this input is manually instantiated. This is discouraged and prevents
426
- // migration.
427
574
  this.modifier = TooltipModifier.Default;
428
575
  /**
429
576
  * Whether the tooltip is muted because a pop-up on the same element has taken over the anchor.
@@ -441,6 +588,67 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
441
588
  * `mouseleave` as well, but with the pointer still within the host — that one does not count.
442
589
  */
443
590
  this.pointerLeftWhileMuted = false;
591
+ /**
592
+ * Origin of the last focus event on the host, cached from the `FocusMonitor` stream so the focus trigger
593
+ * can tell a keyboard focus from the one a click leaves behind.
594
+ */
595
+ this.lastFocusOrigin = null;
596
+ /** @docs-private */
597
+ this.triggerInput = input(undefined, { ...(ngDevMode ? { debugName: "triggerInput" } : /* istanbul ignore next */ {}), alias: 'kbqTrigger' });
598
+ /** @docs-private */
599
+ this.hideWithTimeoutInput = input(undefined, { ...(ngDevMode ? { debugName: "hideWithTimeoutInput" } : /* istanbul ignore next */ {}), alias: 'hideWithTimeout',
600
+ transform: booleanAttribute });
601
+ /** @docs-private */
602
+ this.enterDelayInput = input(undefined, { ...(ngDevMode ? { debugName: "enterDelayInput" } : /* istanbul ignore next */ {}), alias: 'kbqEnterDelay' });
603
+ /** @docs-private */
604
+ this.leaveDelayInput = input(undefined, { ...(ngDevMode ? { debugName: "leaveDelayInput" } : /* istanbul ignore next */ {}), alias: 'kbqLeaveDelay' });
605
+ /** @docs-private */
606
+ this.relativeToPointerInput = input(undefined, { ...(ngDevMode ? { debugName: "relativeToPointerInput" } : /* istanbul ignore next */ {}), alias: 'kbqRelativeToPointer',
607
+ transform: booleanAttribute });
608
+ /** @docs-private */
609
+ this.relativeToCaretInput = input(undefined, { ...(ngDevMode ? { debugName: "relativeToCaretInput" } : /* istanbul ignore next */ {}), alias: 'kbqRelativeToCaret',
610
+ transform: booleanAttribute });
611
+ /** @docs-private */
612
+ this.relativeToCaretVerticalInput = input(undefined, { ...(ngDevMode ? { debugName: "relativeToCaretVerticalInput" } : /* istanbul ignore next */ {}), alias: 'kbqRelativeToCaretVertical' });
613
+ /** @docs-private */
614
+ this.contentInput = input(undefined, { ...(ngDevMode ? { debugName: "contentInput" } : /* istanbul ignore next */ {}), alias: 'kbqTooltip' });
615
+ /** @docs-private */
616
+ this.headerInput = input(undefined, { ...(ngDevMode ? { debugName: "headerInput" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipHeader' });
617
+ /** @docs-private */
618
+ this.modifierInput = input(undefined, { ...(ngDevMode ? { debugName: "modifierInput" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipModifier' });
619
+ /** @docs-private */
620
+ this.contextInput = input(undefined, { ...(ngDevMode ? { debugName: "contextInput" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipContext' });
621
+ /** @docs-private */
622
+ this.customClassInput = input(undefined, { ...(ngDevMode ? { debugName: "customClassInput" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipClass' });
623
+ /** @docs-private */
624
+ this.colorInput = input(undefined, { ...(ngDevMode ? { debugName: "colorInput" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipColor' });
625
+ /** @docs-private */
626
+ this.arrowInput = input(undefined, { ...(ngDevMode ? { debugName: "arrowInput" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipArrow',
627
+ transform: booleanAttribute });
628
+ /** @docs-private */
629
+ this.offsetInput = input(undefined, { ...(ngDevMode ? { debugName: "offsetInput" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipOffset',
630
+ transform: kbqOptionalNumberAttribute });
631
+ /** @docs-private */
632
+ this.disabledInput = input(undefined, { ...(ngDevMode ? { debugName: "disabledInput" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipDisabled',
633
+ // `booleanAttribute` would read a bound `undefined` as `false`, an explicit request for the tooltip.
634
+ transform: (value) => value === undefined ? undefined : booleanAttribute(value) });
635
+ /** @docs-private */
636
+ this.tooltipPlacementPriorityInput = input(undefined, { ...(ngDevMode ? { debugName: "tooltipPlacementPriorityInput" } : /* istanbul ignore next */ {}), alias: 'kbqPlacementPriority' });
637
+ /** @docs-private */
638
+ this.tooltipPlacementInput = input(undefined, { ...(ngDevMode ? { debugName: "tooltipPlacementInput" } : /* istanbul ignore next */ {}), alias: 'kbqPlacement' });
639
+ /** @docs-private */
640
+ this.tooltipVisibleInput = input(undefined, { ...(ngDevMode ? { debugName: "tooltipVisibleInput" } : /* istanbul ignore next */ {}), alias: 'kbqVisible' });
641
+ /** Teardown of the document-level `Escape` listener, or `null` while the overlay is detached. */
642
+ this.unbindEscapeListener = null;
643
+ /** Element whose `aria-describedby` points at this tooltip, or `null` while nothing is described. */
644
+ this.describedElement = null;
645
+ /** Teardown of the listeners following the caret, or `null` while the tooltip is not tracking one. */
646
+ this.stopCaretListeners = null;
647
+ /**
648
+ * Origin that stays on the caret of the field while `kbqRelativeToCaret` is enabled, and on the host element
649
+ * otherwise — so switching the input off while the tooltip is open does not leave it on the caret.
650
+ */
651
+ this.caretOrigin = kbqCreateCaretOrigin(() => this.measureCaretAnchor());
444
652
  merge(...this.siblingPopups.map(({ openedChange }) => openedChange))
445
653
  .pipe(filter(Boolean),
446
654
  // A tooltip shown imperatively (`manual`/`none`) is not competing for the anchor with the
@@ -451,47 +659,93 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
451
659
  this.pointerLeftWhileMuted = false;
452
660
  this.hideAsInactive();
453
661
  });
662
+ // CDK dispatches the focus origin from a capture-phase listener on the document, so it is already
663
+ // recorded by the time the trigger's own `focus` listener runs.
664
+ this.focusMonitor
665
+ .monitor(this.elementRef.nativeElement)
666
+ .pipe(takeUntilDestroyed())
667
+ .subscribe((origin) => (this.lastFocusOrigin = origin));
454
668
  this.visibleChange.pipe(takeUntilDestroyed()).subscribe((visible) => {
455
669
  if (visible) {
670
+ this.describeTrigger();
456
671
  if (this.participatesInSingleInstance) {
457
672
  this.tooltipRegistry.setVisible(this);
458
673
  }
459
674
  }
460
675
  else {
676
+ this.undescribeTrigger();
461
677
  this.tooltipRegistry.clearVisible(this);
462
678
  }
463
679
  });
464
- this.destroyRef.onDestroy(() => this.tooltipRegistry.clearVisible(this));
680
+ this.destroyRef.onDestroy(() => {
681
+ this.undescribeTrigger();
682
+ this.stopListeningForEscape();
683
+ this.tooltipRegistry.clearVisible(this);
684
+ });
465
685
  effect(() => {
466
- if (!this.forDisabledComponent())
686
+ const forDisabledComponent = this.forDisabledComponent();
687
+ if (!forDisabledComponent)
467
688
  return;
468
- const disabled = this.forDisabledComponent().disabledSignal();
689
+ const disabled = forDisabledComponent.disabledSignal();
690
+ const nativeElement = this.getNativeElement();
469
691
  if (disabled) {
470
- this.renderer.setAttribute(this.getNativeElement(), 'tabindex', '0');
471
- this.renderer.setStyle(this.getNativeElement(), 'outline-color', 'var(--kbq-states-line-focus-theme)');
692
+ // The wrapped control drops out of the tab order once it is disabled, so the wrapper takes its
693
+ // place — otherwise the explanation for why the control is unavailable is keyboard-unreachable.
694
+ this.renderer.setAttribute(nativeElement, 'tabindex', '0');
695
+ this.renderer.setAttribute(nativeElement, 'role', 'group');
696
+ this.renderer.addClass(nativeElement, 'kbq-tooltip-trigger_for-disabled');
472
697
  }
473
698
  else {
474
- this.renderer.setAttribute(this.getNativeElement(), 'tabindex', '-1');
699
+ this.renderer.setAttribute(nativeElement, 'tabindex', '-1');
700
+ this.renderer.removeAttribute(nativeElement, 'role');
701
+ this.renderer.removeClass(nativeElement, 'kbq-tooltip-trigger_for-disabled');
475
702
  }
476
- this.disabled = !disabled;
703
+ // Derived, not assigned: an explicit `kbqTooltipDisabled` binding still wins, whichever of the
704
+ // two runs first.
705
+ this.setDerivedDisabled(!disabled);
477
706
  });
478
707
  }
479
- /**
480
- * Hides the tooltip when a parent pop-up closes, starts focus monitoring on the host, and—when
481
- * `ignoreTooltipPointerEvents` is set—adds the panel class that makes the tooltip ignore pointer events.
482
- */
708
+ /** Hides the tooltip when a parent pop-up closes. */
483
709
  ngAfterViewInit() {
484
710
  this.parentPopup?.closedStream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.hide());
485
- this.focusMonitor.monitor(this.elementRef.nativeElement);
486
- if (this.ignoreTooltipPointerEvents() && Array.isArray(this.overlayConfig.panelClass)) {
487
- this.overlayConfig.panelClass.push('cdk-overlay-pane_ignore-pointer-events');
488
- }
489
711
  }
490
712
  /** Stops focus monitoring on the host element and runs the base-class teardown. */
491
713
  ngOnDestroy() {
492
714
  this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);
493
715
  super.ngOnDestroy();
494
716
  }
717
+ /**
718
+ * Records the state the subclass derived from its own content and re-folds it with the consumer's
719
+ * `kbqTooltipDisabled`. Subclasses call this instead of writing `disabled`, which would be read back as
720
+ * the consumer's own value and lose whichever of the two was written first.
721
+ *
722
+ * @docs-private
723
+ */
724
+ setDerivedDisabled(value) {
725
+ this.derivedDisabled = value;
726
+ this.applyDisabled();
727
+ }
728
+ foldDisabled() {
729
+ if (this.derivedDisabledWins) {
730
+ return this.explicitlyDisabled === true || (this.derivedDisabled ?? false);
731
+ }
732
+ return this.explicitlyDisabled ?? this.derivedDisabled ?? false;
733
+ }
734
+ /** Recomputes the effective `disabled` and closes an open tooltip that just lost its reason to be open. */
735
+ applyDisabled() {
736
+ const next = this.foldDisabled();
737
+ // Both producers re-state their verdict on every resize, content mutation and pointer sweep, and
738
+ // most of those repeat the previous answer. Without this the repeats still reach `hide()`, which
739
+ // re-enters the Angular zone from a `ResizeObserver` callback CDK deliberately runs outside it and
740
+ // schedules a tick — once per visible host, on a directive that sits on every dropdown item, list
741
+ // option and tree option.
742
+ if (next === this._disabled)
743
+ return;
744
+ this._disabled = next;
745
+ if (this._disabled) {
746
+ this.hide();
747
+ }
748
+ }
495
749
  /**
496
750
  * Shows the tooltip after `delay` ms. Suppresses showing while a pop-up on the same element holds the
497
751
  * anchor or on a focus trigger that did not originate from the keyboard, and applies cursor-relative
@@ -499,28 +753,35 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
499
753
  */
500
754
  show(delay = this.enterDelay) {
501
755
  if (this.mutedBySiblingPopup) {
502
- const pointerReturned = this.triggerName === 'mouseenter' &&
503
- this.pointerLeftWhileMuted &&
504
- !this.siblingPopups.some(({ isAttached }) => isAttached);
756
+ const pointerReturned = this.triggerName === 'mouseenter' && this.pointerLeftWhileMuted && !this.siblingPopupAttached;
505
757
  if (!pointerReturned)
506
758
  return;
507
759
  this.mutedBySiblingPopup = false;
508
760
  }
761
+ // Checked before the overlay exists: `KbqTooltipComponent.show` bails on empty content, but by then
762
+ // the trigger has already attached the pane, leaving an empty, invisible overlay latched open — and
763
+ // `KbqPopUpTrigger.show` returns early for as long as it is there, so the tooltip never recovers.
764
+ if (!this.content) {
765
+ return;
766
+ }
509
767
  // `isAttached` is checked directly, not just the `mutedBySiblingPopup` latch: `openedChange` can lag
510
- // it by a real delay — e.g. select/tree-select only emit it once their open CSS animation finishes,
768
+ // it by a real delay — e.g. select/tree-select only emit it after the render that shows their panel,
511
769
  // and a sibling's own `hide()` can cancel a still-pending `show()` outright so it never emits at all
512
770
  // (KbqPopUp.show/hide, pop-up.ts). `isAttached` itself is guaranteed synchronous by the
513
771
  // `KbqSiblingPopup` contract, so checking it here closes that gap regardless of the cause. Gated by
514
772
  // `hasInteractiveTrigger` for the same reason as the constructor subscription: a `manual`/`none`
515
773
  // tooltip is driven imperatively and must not be muted by a sibling at all.
516
- if (this.hasInteractiveTrigger && this.siblingPopups.some(({ isAttached }) => isAttached)) {
774
+ if (this.hasInteractiveTrigger && this.siblingPopupAttached) {
517
775
  return;
518
776
  }
519
- if (this.triggerName === 'focus' && this.focusMonitor['_lastFocusOrigin'] !== 'keyboard') {
777
+ if (this.triggerName === 'focus' && !FOCUS_ORIGINS_THAT_SHOW.includes(this.lastFocusOrigin)) {
520
778
  return;
521
779
  }
522
780
  super.show(delay);
523
- if (this.relativeToPointer) {
781
+ if (this.relativeToCaret) {
782
+ this.applyRelativeToCaret();
783
+ }
784
+ else if (this.relativeToPointer) {
524
785
  this.applyRelativeToPointer();
525
786
  }
526
787
  }
@@ -534,13 +795,21 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
534
795
  * not be mistaken for the user leaving.
535
796
  */
536
797
  hide(delay = this.leaveDelay) {
537
- if (RELEASE_TRIGGERS.includes(this.triggerName) && !this.siblingPopups.some(({ isAttached }) => isAttached)) {
798
+ if (RELEASE_TRIGGERS.includes(this.triggerName) && !this.siblingPopupAttached) {
538
799
  this.mutedBySiblingPopup = false;
539
800
  }
540
801
  super.hide(delay);
541
802
  }
803
+ /**
804
+ * Whether a pop-up on the same element is attached. Untracked: the siblings keep it in signals, and a consumer
805
+ * `effect()` that shows or hides the tooltip must not run again whenever one of them opens or closes.
806
+ */
807
+ get siblingPopupAttached() {
808
+ return untracked(() => this.siblingPopups.some(({ isAttached }) => isAttached));
809
+ }
542
810
  /**
543
811
  * Records whether the pointer left the host while muted, see `pointerLeftWhileMuted`.
812
+ *
544
813
  * @docs-private
545
814
  */
546
815
  trackPointerLeave(event) {
@@ -548,7 +817,8 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
548
817
  return;
549
818
  const { left, right, top, bottom } = this.elementRef.nativeElement.getBoundingClientRect();
550
819
  this.pointerLeftWhileMuted =
551
- event.clientX < left || event.clientX > right || event.clientY < top || event.clientY > bottom;
820
+ // A box covers [left, right) and [top, bottom): a point on its right or bottom edge is outside it.
821
+ event.clientX < left || event.clientX >= right || event.clientY < top || event.clientY >= bottom;
552
822
  }
553
823
  /**
554
824
  * Hides the tooltip because something else took its place — another tooltip became visible, or a pop-up
@@ -558,46 +828,89 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
558
828
  * `triggerName` is `mouseleave` and the pop-up itself is hovered. Hiding through the instance keeps
559
829
  * `visibleChange(false)` firing, so `isOpen`, `kbqVisibleChange` and the `kbqVisible` input stay in sync.
560
830
  * Does nothing when the tooltip is already detached or when closing is prevented.
561
- * @docs-private */
831
+ *
832
+ * @docs-private
833
+ */
562
834
  hideAsInactive() {
563
835
  if (this.preventClose)
564
836
  return;
565
837
  this.ngZone.run(() => this.instance?.hide(0));
566
838
  }
567
- /** method allows to show the tooltip relative to the given mouse event.
568
- * @docs-private */
839
+ /**
840
+ * Shows the tooltip next to the cursor position of the given mouse event, anchoring it to the event's
841
+ * `currentTarget` instead of the directive's own host element.
842
+ *
843
+ * Use it when the trigger cannot be declared in the template — for instance for a tooltip shared by the
844
+ * cells of a virtualized table. The directive still has to be created in an injection context.
845
+ */
569
846
  showForMouseEvent(event) {
570
847
  if (!(event.currentTarget instanceof HTMLElement))
571
848
  return;
849
+ // The same guard `show()` carries, repeated because this path reaches `super.show()` directly and
850
+ // would otherwise latch an empty pane open — with it attached, `KbqPopUpTrigger.show` returns early
851
+ // and the tooltip never recovers, while the pane keeps swallowing the document keydown listener.
852
+ if (!this.content)
853
+ return;
572
854
  this.triggerName = 'mouseenter';
573
855
  this.mouseEvent = event;
856
+ this.undescribeTrigger();
574
857
  this.setExternalNativeElement(event.currentTarget);
575
858
  super.show();
859
+ // Re-anchoring an open tooltip has to move the description itself: the `visibleChange(true)` edge that
860
+ // normally drives it is swallowed by `distinctUntilChanged` while the pop-up stays attached. A tooltip
861
+ // that is not open yet is left to that edge, which describes the element anchored by then.
862
+ if (untracked(() => this.isOpen)) {
863
+ this.describeTrigger();
864
+ }
576
865
  this.applyRelativeToPointer();
577
866
  }
578
867
  /**
579
- * method allows to show the tooltip relative to the element
580
- * Use this approach when it is not possible to define a trigger in the template.
868
+ * Shows the tooltip anchored to the given element instead of the directive's own host element.
869
+ *
870
+ * Use it when the trigger cannot be declared in the template. The directive still has to be created in an
871
+ * injection context:
581
872
  *
582
- * For example:
583
- * const tooltip = new KbqTooltipTrigger();
873
+ * ```ts
874
+ * const tooltip = runInInjectionContext(injector, () => new KbqTooltipTrigger());
584
875
  * tooltip.showForElement(element);
585
- * @docs-private */
876
+ * ```
877
+ *
878
+ * Does nothing while the tooltip is disabled or has no content — there is no overlay to anchor then.
879
+ */
586
880
  showForElement(element) {
587
881
  this.show();
882
+ if (!this.strategy)
883
+ return;
588
884
  this.strategy.setOrigin(element);
589
885
  }
886
+ /**
887
+ * Replaces the CSS classes put on the tooltip's overlay pane.
888
+ *
889
+ * Exists for components that own a tooltip through `hostDirectives` instead of extending this class and
890
+ * therefore cannot reach the protected overlay configuration (e.g. `KbqNavbarItem`).
891
+ *
892
+ * @docs-private
893
+ */
894
+ setOverlayPanelClass(panelClass) {
895
+ this.overlayConfig.panelClass = panelClass;
896
+ }
590
897
  /** @docs-private */
591
898
  updateData() {
592
899
  if (!this.instance) {
593
900
  return;
594
901
  }
902
+ this.instance.id = this.tooltipId;
595
903
  this.instance.content = this.content;
596
904
  this.instance.header = this.header;
597
- this.instance.context = this.context && { $implicit: this.context };
905
+ // `!= null` rather than a truthy check: `0`, `''` and `false` are legitimate template contexts, and
906
+ // dropping them left the template rendering the previous context instead.
907
+ this.instance.context = this.context != null ? { $implicit: this.context } : null;
598
908
  this.instance.arrow = this.arrow;
599
909
  this.instance.offset = this.offset;
600
910
  this.instance.detectChanges();
911
+ // The margins live on the rendered tooltip element, so re-applying them is the only way a changed
912
+ // `kbqTooltipOffset` reaches an already open tooltip.
913
+ this.instance.applyOffset();
601
914
  this.updatePosition(true);
602
915
  }
603
916
  /** @docs-private */
@@ -613,10 +926,199 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
613
926
  if (!this.instance) {
614
927
  return;
615
928
  }
616
- this.instance.updateClassMap(POSITION_TO_CSS_MAP[newPlacement], `${this.customClass} ${this.color}`, {
929
+ this.instance.updateClassMap(POSITION_TO_CSS_MAP[newPlacement], `${this.customClass} ${this.colorClass}`, {
617
930
  modifier: this.modifier
618
931
  });
619
- this.instance.markForCheck();
932
+ }
933
+ /**
934
+ * Arms the `Escape` listener for as long as the tooltip overlay is attached, so that `Escape` dismisses
935
+ * the tooltip.
936
+ *
937
+ * The inherited `keydownHandler` is a host binding on the trigger and therefore only fires while the
938
+ * trigger itself has focus, which a hover-opened tooltip never has.
939
+ *
940
+ * @docs-private
941
+ */
942
+ createOverlay() {
943
+ if (this.overlayRef) {
944
+ return this.overlayRef;
945
+ }
946
+ // Rebuilt here rather than pushed into `overlayConfig` from a lifecycle hook: five subclasses skip
947
+ // `super.ngAfterViewInit()`, and appending to the array made the class impossible to take back off.
948
+ this.overlayConfig = { ...this.overlayConfig, panelClass: this.getPanelClasses() };
949
+ const overlayRef = super.createOverlay();
950
+ overlayRef
951
+ .attachments()
952
+ .pipe(takeUntilDestroyed(this.destroyRef))
953
+ .subscribe(() => {
954
+ this.listenForEscape();
955
+ this.startTrackingCaret();
956
+ });
957
+ overlayRef
958
+ .detachments()
959
+ .pipe(takeUntilDestroyed(this.destroyRef))
960
+ .subscribe(() => {
961
+ this.stopListeningForEscape();
962
+ this.stopTrackingCaret();
963
+ });
964
+ return overlayRef;
965
+ }
966
+ /**
967
+ * Binds a document-level `Escape` listener, outside the zone and at most once per attach.
968
+ *
969
+ * An open tooltip is the topmost layer, so `Escape` dismisses it first (WAI-ARIA tooltip pattern, WCAG 1.4.13):
970
+ * the listener captures the key and marks it spent, and a modal or a panel that closes on `Escape` lets it
971
+ * pass. The key is not stopped, so a control that closes a popup of its own on it still does.
972
+ *
973
+ * Deliberately not `overlayRef.keydownEvents()`: CDK hands each key to the last attached overlay that has
974
+ * subscribers and stops there, without re-dispatching. A tooltip is by construction the last overlay
975
+ * attached, so subscribing would make it swallow `Escape` for the modal, sidepanel, dropdown or inline
976
+ * edit underneath it — including for the imperative tooltips that drop the key instead of acting on it.
977
+ */
978
+ listenForEscape() {
979
+ if (this.unbindEscapeListener)
980
+ return;
981
+ this.ngZone.runOutsideAngular(() => {
982
+ this.unbindEscapeListener = this.renderer.listen('document', 'keydown', (event) => {
983
+ // An imperatively driven tooltip (`manual`/`none`) is pinned on purpose — the validation hints
984
+ // of datepicker, timepicker and inline-edit must survive an unrelated Escape.
985
+ if (event.keyCode !== ESCAPE || !this.isOpen || !this.hasInteractiveTrigger || this.preventClose) {
986
+ return;
987
+ }
988
+ event.preventDefault();
989
+ this.hideAsInactive();
990
+ }, { capture: true });
991
+ });
992
+ }
993
+ /** Removes the document-level `Escape` listener. */
994
+ stopListeningForEscape() {
995
+ this.unbindEscapeListener?.();
996
+ this.unbindEscapeListener = null;
997
+ }
998
+ /** Panel classes of the tooltip overlay, including the pointer-events opt-out while it is enabled. */
999
+ getPanelClasses() {
1000
+ const configured = this.overlayConfig.panelClass;
1001
+ const classes = (Array.isArray(configured) ? configured : configured ? [configured] : []).filter((name) => name !== IGNORE_POINTER_EVENTS_PANEL_CLASS);
1002
+ // A tooltip without an interactive trigger opts out regardless of the input: hovering its pane
1003
+ // neither keeps it open nor closes it, so the hoverability the default protects does not exist here,
1004
+ // and a pointer-capturing pane only blocks what it floats over. The validation hints of datepicker,
1005
+ // timepicker and inline-edit sit above their own field for `validationTooltipHideDelay` (3s).
1006
+ const ignorePointerEvents = this.ignoreTooltipPointerEvents() || !this.hasInteractiveTrigger;
1007
+ return ignorePointerEvents ? [...classes, IGNORE_POINTER_EVENTS_PANEL_CLASS] : classes;
1008
+ }
1009
+ /**
1010
+ * Points the trigger's `aria-describedby` at the open tooltip, so assistive technology announces the hint
1011
+ * together with the control it explains.
1012
+ *
1013
+ * Written through the renderer rather than a host binding because `showForMouseEvent` re-anchors the
1014
+ * trigger to a foreign element, which a host binding would never reach. Existing ids are preserved.
1015
+ */
1016
+ describeTrigger() {
1017
+ if (this.describesHostText)
1018
+ return;
1019
+ const nativeElement = this.getNativeElement();
1020
+ const ids = this.getDescribedByIds(nativeElement);
1021
+ // Recorded rather than resolved again on the way out: `showForMouseEvent` re-anchors the trigger to
1022
+ // another element, and un-describing the current one would leave the id dangling on the previous.
1023
+ this.describedElement = nativeElement;
1024
+ if (ids.includes(this.tooltipId))
1025
+ return;
1026
+ this.renderer.setAttribute(nativeElement, 'aria-describedby', [...ids, this.tooltipId].join(' '));
1027
+ }
1028
+ /** Removes this tooltip's id from the described element's `aria-describedby`, keeping any other ids. */
1029
+ undescribeTrigger() {
1030
+ const nativeElement = this.describedElement;
1031
+ if (!nativeElement)
1032
+ return;
1033
+ this.describedElement = null;
1034
+ const ids = this.getDescribedByIds(nativeElement).filter((id) => id !== this.tooltipId);
1035
+ if (ids.length) {
1036
+ this.renderer.setAttribute(nativeElement, 'aria-describedby', ids.join(' '));
1037
+ }
1038
+ else {
1039
+ this.renderer.removeAttribute(nativeElement, 'aria-describedby');
1040
+ }
1041
+ }
1042
+ /** Ids currently listed in the element's `aria-describedby`. */
1043
+ getDescribedByIds(element) {
1044
+ return (element.getAttribute('aria-describedby') || '').split(/\s+/).filter(Boolean);
1045
+ }
1046
+ /**
1047
+ * Whether the tooltip only repeats the text the host already shows — which is what `kbq-title` does.
1048
+ * Describing those would make assistive technology read the same label twice.
1049
+ */
1050
+ get describesHostText() {
1051
+ return typeof this.content === 'string' && this.content.trim() === this.getNativeElement().textContent?.trim();
1052
+ }
1053
+ /**
1054
+ * Field whose caret the tooltip is anchored to: the host element when it is editable itself — which is
1055
+ * how the validation hints are written — otherwise the first editable element it wraps.
1056
+ */
1057
+ getCaretAnchor() {
1058
+ const host = this.getNativeElement();
1059
+ return host.matches(EDITABLE_SELECTOR) ? host : host.querySelector(EDITABLE_SELECTOR);
1060
+ }
1061
+ /**
1062
+ * Anchors the overlay to the caret of the field.
1063
+ *
1064
+ * @docs-private
1065
+ */
1066
+ applyRelativeToCaret() {
1067
+ this.strategy?.setOrigin(this.caretOrigin);
1068
+ }
1069
+ /** @docs-private */
1070
+ getAnchorSize() {
1071
+ return this.relativeToCaret ? this.caretOrigin : super.getAnchorSize();
1072
+ }
1073
+ /**
1074
+ * Rectangle the tooltip is anchored to: the caret or selection of the field — spanning the whole field
1075
+ * vertically when it anchors to the field — or the host element's box when the caret cannot be located or
1076
+ * `kbqRelativeToCaret` is off.
1077
+ */
1078
+ measureCaretAnchor() {
1079
+ const anchor = this.relativeToCaret ? this.getCaretAnchor() : null;
1080
+ const rect = anchor && kbqGetSelectionRect(anchor);
1081
+ if (!anchor || !rect) {
1082
+ const { left, top, width, height } = this.getNativeElement().getBoundingClientRect();
1083
+ return { x: left, y: top, width, height };
1084
+ }
1085
+ if (!this.anchorsToField(anchor))
1086
+ return rect;
1087
+ const { top, height } = anchor.getBoundingClientRect();
1088
+ return { x: rect.x, width: rect.width, y: top, height };
1089
+ }
1090
+ /** Whether the tooltip takes its vertical position from the whole field rather than the caret's line. */
1091
+ anchorsToField(anchor) {
1092
+ const vertical = this.relativeToCaretVertical;
1093
+ return vertical === 'field' || (vertical !== 'line' && anchor.tagName === 'INPUT');
1094
+ }
1095
+ /** Follows the caret for as long as the overlay is attached, outside the zone and at most once per attach. */
1096
+ startTrackingCaret() {
1097
+ if (this.stopCaretListeners || !this.relativeToCaret)
1098
+ return;
1099
+ const anchor = this.getCaretAnchor();
1100
+ if (!anchor)
1101
+ return;
1102
+ this.ngZone.runOutsideAngular(() => {
1103
+ this.stopCaretListeners = kbqListenForCaretMoves(this.renderer, anchor, () => this.repositionAtCaret());
1104
+ });
1105
+ }
1106
+ stopTrackingCaret() {
1107
+ this.stopCaretListeners?.();
1108
+ this.stopCaretListeners = null;
1109
+ }
1110
+ /**
1111
+ * Picks the placement again for where the caret is now. The position strategy is locked so that an element-anchored
1112
+ * pop-up does not jump when its content changes, and a locked strategy only re-applies the placement chosen on
1113
+ * opening; a caret walking to the edge of the screen has to be free to flip the tooltip, so the lock is lifted for
1114
+ * this pass.
1115
+ */
1116
+ repositionAtCaret() {
1117
+ if (!this.overlayRef)
1118
+ return;
1119
+ this.strategy.withLockedPosition(false);
1120
+ this.overlayRef.updatePosition();
1121
+ this.strategy.withLockedPosition(true);
620
1122
  }
621
1123
  /** @docs-private */
622
1124
  applyRelativeToPointer() {
@@ -628,7 +1130,6 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
628
1130
  }
629
1131
  const triggerRects = this.getNativeElement().getBoundingClientRect();
630
1132
  const point = { x: 0, y: 0 };
631
- this.placementPriority = null;
632
1133
  if (this.placement === PopUpPlacements.Top) {
633
1134
  point.x = this.mouseEvent.x;
634
1135
  point.y = triggerRects.y;
@@ -639,10 +1140,10 @@ class KbqTooltipTrigger extends KbqPopUpTrigger {
639
1140
  }
640
1141
  this.strategy.setOrigin(point);
641
1142
  }
642
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
643
- /** @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()", "mouseleave": "trackPointerLeave($event)" }, properties: { "class.kbq-tooltip_open": "isOpen" } }, exportAs: ["kbqTooltip"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
1143
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTooltipTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1144
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.25", 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 }, triggerInput: { classPropertyName: "triggerInput", publicName: "kbqTrigger", isSignal: true, isRequired: false, transformFunction: null }, hideWithTimeoutInput: { classPropertyName: "hideWithTimeoutInput", publicName: "hideWithTimeout", isSignal: true, isRequired: false, transformFunction: null }, enterDelayInput: { classPropertyName: "enterDelayInput", publicName: "kbqEnterDelay", isSignal: true, isRequired: false, transformFunction: null }, leaveDelayInput: { classPropertyName: "leaveDelayInput", publicName: "kbqLeaveDelay", isSignal: true, isRequired: false, transformFunction: null }, relativeToPointerInput: { classPropertyName: "relativeToPointerInput", publicName: "kbqRelativeToPointer", isSignal: true, isRequired: false, transformFunction: null }, relativeToCaretInput: { classPropertyName: "relativeToCaretInput", publicName: "kbqRelativeToCaret", isSignal: true, isRequired: false, transformFunction: null }, relativeToCaretVerticalInput: { classPropertyName: "relativeToCaretVerticalInput", publicName: "kbqRelativeToCaretVertical", isSignal: true, isRequired: false, transformFunction: null }, contentInput: { classPropertyName: "contentInput", publicName: "kbqTooltip", isSignal: true, isRequired: false, transformFunction: null }, headerInput: { classPropertyName: "headerInput", publicName: "kbqTooltipHeader", isSignal: true, isRequired: false, transformFunction: null }, modifierInput: { classPropertyName: "modifierInput", publicName: "kbqTooltipModifier", isSignal: true, isRequired: false, transformFunction: null }, contextInput: { classPropertyName: "contextInput", publicName: "kbqTooltipContext", isSignal: true, isRequired: false, transformFunction: null }, customClassInput: { classPropertyName: "customClassInput", publicName: "kbqTooltipClass", isSignal: true, isRequired: false, transformFunction: null }, colorInput: { classPropertyName: "colorInput", publicName: "kbqTooltipColor", isSignal: true, isRequired: false, transformFunction: null }, arrowInput: { classPropertyName: "arrowInput", publicName: "kbqTooltipArrow", isSignal: true, isRequired: false, transformFunction: null }, offsetInput: { classPropertyName: "offsetInput", publicName: "kbqTooltipOffset", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "kbqTooltipDisabled", isSignal: true, isRequired: false, transformFunction: null }, tooltipPlacementPriorityInput: { classPropertyName: "tooltipPlacementPriorityInput", publicName: "kbqPlacementPriority", isSignal: true, isRequired: false, transformFunction: null }, tooltipPlacementInput: { classPropertyName: "tooltipPlacementInput", publicName: "kbqPlacement", isSignal: true, isRequired: false, transformFunction: null }, tooltipVisibleInput: { classPropertyName: "tooltipVisibleInput", publicName: "kbqVisible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { placementChangeOutput: "kbqPlacementChange", visibleChangeOutput: "kbqVisibleChange" }, host: { listeners: { "keydown": "keydownHandler($event)", "touchend": "touchendHandler()", "mouseleave": "trackPointerLeave($event)" }, properties: { "class.kbq-tooltip_open": "isOpen" } }, exportAs: ["kbqTooltip"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
644
1145
  }
645
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqTooltipTrigger, decorators: [{
1146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqTooltipTrigger, decorators: [{
646
1147
  type: Directive,
647
1148
  args: [{
648
1149
  selector: '[kbqTooltip]',
@@ -654,81 +1155,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
654
1155
  },
655
1156
  exportAs: 'kbqTooltip'
656
1157
  }]
657
- }], 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: [{
658
- type: Input,
659
- args: [{ transform: booleanAttribute }]
660
- }], tooltipVisible: [{
661
- type: Input,
662
- args: ['kbqVisible']
663
- }], tooltipPlacement: [{
664
- type: Input,
665
- args: ['kbqPlacement']
666
- }], relativeToPointer: [{
667
- type: Input,
668
- args: [{ alias: 'kbqRelativeToPointer', transform: booleanAttribute }]
669
- }], tooltipPlacementPriority: [{
670
- type: Input,
671
- args: ['kbqPlacementPriority']
672
- }], content: [{
673
- type: Input,
674
- args: ['kbqTooltip']
675
- }], disabled: [{
676
- type: Input,
677
- args: ['kbqTooltipDisabled']
678
- }], enterDelay: [{
679
- type: Input,
680
- args: ['kbqEnterDelay']
681
- }], leaveDelay: [{
682
- type: Input,
683
- args: ['kbqLeaveDelay']
684
- }], trigger: [{
685
- type: Input,
686
- args: ['kbqTrigger']
687
- }], customClass: [{
688
- type: Input,
689
- args: ['kbqTooltipClass']
690
- }], context: [{
691
- type: Input,
692
- args: ['kbqTooltipContext']
693
- }], color: [{
694
- type: Input,
695
- args: ['kbqTooltipColor']
696
- }], arrow: [{
697
- type: Input,
698
- args: [{ alias: 'kbqTooltipArrow', transform: booleanAttribute }]
699
- }], offset: [{
700
- type: Input,
701
- args: [{ alias: 'kbqTooltipOffset', transform: numberAttribute }]
702
- }], placementChange: [{
703
- type: Output,
704
- args: ['kbqPlacementChange']
705
- }], visibleChange: [{
706
- type: Output,
707
- args: ['kbqVisibleChange']
708
- }], modifier: [{
709
- type: Input,
710
- args: ['kbqTooltipModifier']
711
- }], header: [{
712
- type: Input,
713
- args: ['kbqTooltipHeader']
714
- }] } });
1158
+ }], 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 }] }], placementChangeOutput: [{ type: i0.Output, args: ["kbqPlacementChange"] }], visibleChangeOutput: [{ type: i0.Output, args: ["kbqVisibleChange"] }], triggerInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTrigger", required: false }] }], hideWithTimeoutInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideWithTimeout", required: false }] }], enterDelayInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqEnterDelay", required: false }] }], leaveDelayInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqLeaveDelay", required: false }] }], relativeToPointerInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqRelativeToPointer", required: false }] }], relativeToCaretInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqRelativeToCaret", required: false }] }], relativeToCaretVerticalInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqRelativeToCaretVertical", required: false }] }], contentInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltip", required: false }] }], headerInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipHeader", required: false }] }], modifierInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipModifier", required: false }] }], contextInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipContext", required: false }] }], customClassInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipClass", required: false }] }], colorInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipColor", required: false }] }], arrowInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipArrow", required: false }] }], offsetInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipOffset", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipDisabled", required: false }] }], tooltipPlacementPriorityInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqPlacementPriority", required: false }] }], tooltipPlacementInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqPlacement", required: false }] }], tooltipVisibleInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqVisible", required: false }] }] } });
715
1159
 
716
1160
  const COMPONENTS = [
717
1161
  KbqTooltipComponent,
718
1162
  KbqTooltipTrigger
719
1163
  ];
720
1164
  class KbqToolTipModule {
721
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToolTipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
722
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.30", ngImport: i0, type: KbqToolTipModule, imports: [KbqTooltipComponent,
1165
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToolTipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1166
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: KbqToolTipModule, imports: [KbqTooltipComponent,
723
1167
  KbqTooltipTrigger], exports: [KbqTooltipComponent,
724
1168
  KbqTooltipTrigger] }); }
725
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToolTipModule, providers: [KBQ_TOOLTIP_OPEN_TIME_PROVIDER] }); }
1169
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToolTipModule }); }
726
1170
  }
727
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToolTipModule, decorators: [{
1171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToolTipModule, decorators: [{
728
1172
  type: NgModule,
729
1173
  args: [{
730
1174
  imports: COMPONENTS,
731
- providers: [KBQ_TOOLTIP_OPEN_TIME_PROVIDER],
732
1175
  exports: COMPONENTS
733
1176
  }]
734
1177
  }] });
@@ -737,5 +1180,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
737
1180
  * Generated bundle index. Do not edit.
738
1181
  */
739
1182
 
740
- 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 };
1183
+ export { KBQ_TOOLTIP_INSTANT_SHOW_WINDOW, 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, KbqTooltipDelayTracker, KbqTooltipRegistry, KbqTooltipTrigger, MIN_TIME_FOR_DELAY, TooltipModifier, kbqTooltipScrollStrategyFactory };
741
1184
  //# sourceMappingURL=koobiq-components-tooltip.mjs.map