@koobiq/components 20.4.1 → 21.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (771) 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 +755 -601
  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 +2810 -2538
  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 +366 -136
  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 +486 -165
  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 +719 -488
  197. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  198. package/fesm2022/koobiq-components-tree.mjs +1506 -558
  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 +399 -7
  264. package/schematics/migrations/accordion-state-saving-default/README.md +60 -0
  265. package/schematics/migrations/accordion-state-saving-default/data.js +75 -0
  266. package/schematics/migrations/accordion-state-saving-default/index.js +60 -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.js +47 -0
  270. package/schematics/migrations/actions-panel-overlay-container/index.js +54 -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 +3 -0
  274. package/schematics/migrations/alert-signals/index.js +70 -203
  275. package/schematics/migrations/angular-animations-removal/README.md +46 -0
  276. package/schematics/migrations/angular-animations-removal/data.js +150 -0
  277. package/schematics/migrations/angular-animations-removal/index.js +20 -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.js +136 -0
  281. package/schematics/migrations/app-switcher-signals/index.js +365 -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 +1 -1
  285. package/schematics/migrations/autocomplete-signals/README.md +92 -0
  286. package/schematics/migrations/autocomplete-signals/data.js +149 -0
  287. package/schematics/migrations/autocomplete-signals/index.js +706 -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.js +109 -0
  291. package/schematics/migrations/badge-signals/index.js +693 -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.js +136 -0
  295. package/schematics/migrations/button-state-and-styles/index.js +220 -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.js +106 -0
  299. package/schematics/migrations/button-supported-colors/index.js +260 -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.js +200 -0
  303. package/schematics/migrations/button-toggle-signals-and-aria/index.js +496 -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.js +88 -0
  307. package/schematics/migrations/button-truncation/index.js +269 -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.js +114 -0
  311. package/schematics/migrations/checkbox-signals/index.js +634 -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.js +101 -0
  315. package/schematics/migrations/clamped-text-disclosure/index.js +59 -0
  316. package/schematics/migrations/clamped-text-disclosure/schema.json +15 -0
  317. package/schematics/migrations/code-block-signals/README.md +84 -0
  318. package/schematics/migrations/code-block-signals/data.js +121 -0
  319. package/schematics/migrations/code-block-signals/index.js +700 -0
  320. package/schematics/migrations/code-block-signals/schema.json +20 -0
  321. package/schematics/migrations/color-signals/README.md +46 -0
  322. package/schematics/migrations/color-signals/data.js +131 -0
  323. package/schematics/migrations/color-signals/index.js +19 -0
  324. package/schematics/migrations/color-signals/schema.json +20 -0
  325. package/schematics/migrations/core-mixins-removal/README.md +20 -0
  326. package/schematics/migrations/core-mixins-removal/data.js +27 -0
  327. package/schematics/migrations/core-mixins-removal/index.js +17 -0
  328. package/schematics/migrations/core-mixins-removal/schema.json +15 -0
  329. package/schematics/migrations/css-selectors/README.md +2 -2
  330. package/schematics/migrations/css-selectors/index.js +1 -1
  331. package/schematics/migrations/datepicker-signals/README.md +24 -0
  332. package/schematics/migrations/datepicker-signals/data.js +49 -0
  333. package/schematics/migrations/datepicker-signals/index.js +17 -0
  334. package/schematics/migrations/datepicker-signals/schema.json +15 -0
  335. package/schematics/migrations/deprecated-icons/README.md +2 -2
  336. package/schematics/migrations/deprecated-icons/index.js +1 -1
  337. package/schematics/migrations/design-tokens-v4/README.md +75 -0
  338. package/schematics/migrations/design-tokens-v4/index.js +59 -0
  339. package/schematics/migrations/design-tokens-v4/schema.json +15 -0
  340. package/schematics/migrations/divider-signals-and-aria/README.md +47 -0
  341. package/schematics/migrations/divider-signals-and-aria/data.js +62 -0
  342. package/schematics/migrations/divider-signals-and-aria/index.js +211 -0
  343. package/schematics/migrations/divider-signals-and-aria/schema.json +15 -0
  344. package/schematics/migrations/dl-attribute-coercion/README.md +59 -0
  345. package/schematics/migrations/dl-attribute-coercion/data.js +85 -0
  346. package/schematics/migrations/dl-attribute-coercion/index.js +161 -0
  347. package/schematics/migrations/dl-attribute-coercion/schema.json +15 -0
  348. package/schematics/migrations/dl-standalone-names/README.md +49 -0
  349. package/schematics/migrations/dl-standalone-names/data.js +44 -0
  350. package/schematics/migrations/dl-standalone-names/index.js +321 -0
  351. package/schematics/migrations/dl-standalone-names/schema.json +20 -0
  352. package/schematics/migrations/dropdown-demote-overlay/README.md +137 -0
  353. package/schematics/migrations/dropdown-demote-overlay/data.js +84 -0
  354. package/schematics/migrations/dropdown-demote-overlay/index.js +288 -0
  355. package/schematics/migrations/dropdown-demote-overlay/schema.json +20 -0
  356. package/schematics/migrations/dropdown-signals/README.md +83 -0
  357. package/schematics/migrations/dropdown-signals/data.js +152 -0
  358. package/schematics/migrations/dropdown-signals/index.js +19 -0
  359. package/schematics/migrations/dropdown-signals/schema.json +20 -0
  360. package/schematics/migrations/empty-state-error-color/README.md +84 -0
  361. package/schematics/migrations/empty-state-error-color/data.js +85 -0
  362. package/schematics/migrations/empty-state-error-color/index.js +71 -0
  363. package/schematics/migrations/empty-state-error-color/schema.json +15 -0
  364. package/schematics/migrations/empty-state-size-attr/README.md +2 -2
  365. package/schematics/migrations/empty-state-size-attr/index.js +1 -1
  366. package/schematics/migrations/file-upload-cva-and-primitives/README.md +70 -0
  367. package/schematics/migrations/file-upload-cva-and-primitives/data.js +97 -0
  368. package/schematics/migrations/file-upload-cva-and-primitives/index.js +60 -0
  369. package/schematics/migrations/file-upload-cva-and-primitives/schema.json +15 -0
  370. package/schematics/migrations/file-upload-deprecated-outputs/README.md +90 -0
  371. package/schematics/migrations/file-upload-deprecated-outputs/data.js +20 -0
  372. package/schematics/migrations/file-upload-deprecated-outputs/index.js +70 -0
  373. package/schematics/migrations/file-upload-deprecated-outputs/schema.json +20 -0
  374. package/schematics/migrations/filter-bar-rename-action/README.md +183 -0
  375. package/schematics/migrations/filter-bar-rename-action/data.js +151 -0
  376. package/schematics/migrations/filter-bar-rename-action/index.js +177 -0
  377. package/schematics/migrations/filter-bar-rename-action/schema.json +20 -0
  378. package/schematics/migrations/filter-bar-signals/README.md +27 -16
  379. package/schematics/migrations/filter-bar-signals/data.js +1 -2
  380. package/schematics/migrations/filter-bar-signals/index.js +100 -195
  381. package/schematics/migrations/filter-bar-state-saving-default/README.md +53 -0
  382. package/schematics/migrations/filter-bar-state-saving-default/data.js +87 -0
  383. package/schematics/migrations/filter-bar-state-saving-default/index.js +61 -0
  384. package/schematics/migrations/filter-bar-state-saving-default/schema.json +15 -0
  385. package/schematics/migrations/flag-inner-html/README.md +67 -0
  386. package/schematics/migrations/flag-inner-html/data.js +58 -0
  387. package/schematics/migrations/flag-inner-html/index.js +61 -0
  388. package/schematics/migrations/flag-inner-html/schema.json +15 -0
  389. package/schematics/migrations/form-field-signals/README.md +125 -0
  390. package/schematics/migrations/form-field-signals/data.js +288 -0
  391. package/schematics/migrations/form-field-signals/index.js +382 -0
  392. package/schematics/migrations/form-field-signals/schema.json +20 -0
  393. package/schematics/migrations/icon-semantics-and-api/README.md +65 -0
  394. package/schematics/migrations/icon-semantics-and-api/data.js +97 -0
  395. package/schematics/migrations/icon-semantics-and-api/index.js +64 -0
  396. package/schematics/migrations/icon-semantics-and-api/schema.json +15 -0
  397. package/schematics/migrations/icons-replacement/README.md +5 -5
  398. package/schematics/migrations/icons-replacement/index.js +1 -1
  399. package/schematics/migrations/inline-edit-a11y-and-types/README.md +82 -0
  400. package/schematics/migrations/inline-edit-a11y-and-types/data.js +117 -0
  401. package/schematics/migrations/inline-edit-a11y-and-types/index.js +97 -0
  402. package/schematics/migrations/inline-edit-a11y-and-types/schema.json +20 -0
  403. package/schematics/migrations/input-number-surface/README.md +140 -0
  404. package/schematics/migrations/input-number-surface/data.js +135 -0
  405. package/schematics/migrations/input-number-surface/index.js +292 -0
  406. package/schematics/migrations/input-number-surface/schema.json +20 -0
  407. package/schematics/migrations/input-signals/README.md +20 -0
  408. package/schematics/migrations/input-signals/data.js +30 -0
  409. package/schematics/migrations/input-signals/index.js +17 -0
  410. package/schematics/migrations/input-signals/schema.json +15 -0
  411. package/schematics/migrations/link-deprecated-path/README.md +144 -0
  412. package/schematics/migrations/link-deprecated-path/index.js +19 -0
  413. package/schematics/migrations/link-deprecated-path/schema.json +20 -0
  414. package/schematics/migrations/link-signals/README.md +71 -0
  415. package/schematics/migrations/link-signals/data.js +116 -0
  416. package/schematics/migrations/link-signals/index.js +415 -0
  417. package/schematics/migrations/link-signals/schema.json +20 -0
  418. package/schematics/migrations/list-signals/README.md +22 -0
  419. package/schematics/migrations/list-signals/data.js +35 -0
  420. package/schematics/migrations/list-signals/index.js +17 -0
  421. package/schematics/migrations/list-signals/schema.json +15 -0
  422. package/schematics/migrations/list-tree-multiple-input/README.md +105 -0
  423. package/schematics/migrations/list-tree-multiple-input/data.js +74 -0
  424. package/schematics/migrations/list-tree-multiple-input/index.js +221 -0
  425. package/schematics/migrations/list-tree-multiple-input/schema.json +20 -0
  426. package/schematics/migrations/loader-overlay-signals/README.md +62 -0
  427. package/schematics/migrations/loader-overlay-signals/data.js +101 -0
  428. package/schematics/migrations/loader-overlay-signals/index.js +697 -0
  429. package/schematics/migrations/loader-overlay-signals/schema.json +20 -0
  430. package/schematics/migrations/loader-overlay-size-attr/README.md +2 -2
  431. package/schematics/migrations/loader-overlay-size-attr/index.js +1 -1
  432. package/schematics/migrations/locale-configuration-providers/README.md +163 -0
  433. package/schematics/migrations/locale-configuration-providers/data.js +257 -0
  434. package/schematics/migrations/locale-configuration-providers/index.js +294 -0
  435. package/schematics/migrations/locale-configuration-providers/schema.json +20 -0
  436. package/schematics/migrations/mandatory-peer-dependencies/README.md +70 -0
  437. package/schematics/migrations/mandatory-peer-dependencies/index.js +42 -0
  438. package/schematics/migrations/mandatory-peer-dependencies/schema.json +15 -0
  439. package/schematics/migrations/markdown-signals/README.md +58 -0
  440. package/schematics/migrations/markdown-signals/data.js +79 -0
  441. package/schematics/migrations/markdown-signals/index.js +639 -0
  442. package/schematics/migrations/markdown-signals/schema.json +20 -0
  443. package/schematics/migrations/modal-dialog-semantics/README.md +106 -0
  444. package/schematics/migrations/modal-dialog-semantics/data.js +110 -0
  445. package/schematics/migrations/modal-dialog-semantics/index.js +58 -0
  446. package/schematics/migrations/modal-dialog-semantics/schema.json +15 -0
  447. package/schematics/migrations/modal-signals/README.md +88 -0
  448. package/schematics/migrations/modal-signals/data.js +132 -0
  449. package/schematics/migrations/modal-signals/index.js +19 -0
  450. package/schematics/migrations/modal-signals/schema.json +20 -0
  451. package/schematics/migrations/navbar-signals-and-aria/README.md +111 -0
  452. package/schematics/migrations/navbar-signals-and-aria/data.js +198 -0
  453. package/schematics/migrations/navbar-signals-and-aria/index.js +568 -0
  454. package/schematics/migrations/navbar-signals-and-aria/schema.json +20 -0
  455. package/schematics/migrations/new-icons-pack/README.md +10 -10
  456. package/schematics/migrations/new-icons-pack/index.js +1 -1
  457. package/schematics/migrations/notification-center-signals/README.md +67 -0
  458. package/schematics/migrations/notification-center-signals/data.js +66 -0
  459. package/schematics/migrations/notification-center-signals/index.js +61 -0
  460. package/schematics/migrations/notification-center-signals/schema.json +15 -0
  461. package/schematics/migrations/option-signals/README.md +37 -0
  462. package/schematics/migrations/option-signals/data.js +86 -0
  463. package/schematics/migrations/option-signals/index.js +19 -0
  464. package/schematics/migrations/option-signals/schema.json +20 -0
  465. package/schematics/migrations/popover-leave-delay/README.md +51 -0
  466. package/schematics/migrations/popover-leave-delay/data.js +61 -0
  467. package/schematics/migrations/popover-leave-delay/index.js +54 -0
  468. package/schematics/migrations/popover-leave-delay/schema.json +15 -0
  469. package/schematics/migrations/progress-bar-percentage-and-aria/README.md +54 -0
  470. package/schematics/migrations/progress-bar-percentage-and-aria/data.js +76 -0
  471. package/schematics/migrations/progress-bar-percentage-and-aria/index.js +58 -0
  472. package/schematics/migrations/progress-bar-percentage-and-aria/schema.json +15 -0
  473. package/schematics/migrations/progress-spinner-signals/README.md +72 -0
  474. package/schematics/migrations/progress-spinner-signals/data.js +83 -0
  475. package/schematics/migrations/progress-spinner-signals/index.js +694 -0
  476. package/schematics/migrations/progress-spinner-signals/schema.json +20 -0
  477. package/schematics/migrations/query-list-signals/README.md +32 -0
  478. package/schematics/migrations/query-list-signals/data.js +70 -0
  479. package/schematics/migrations/query-list-signals/index.js +17 -0
  480. package/schematics/migrations/query-list-signals/schema.json +15 -0
  481. package/schematics/migrations/radio-signals-and-aria/README.md +82 -0
  482. package/schematics/migrations/radio-signals-and-aria/data.js +163 -0
  483. package/schematics/migrations/radio-signals-and-aria/index.js +39 -0
  484. package/schematics/migrations/radio-signals-and-aria/schema.json +20 -0
  485. package/schematics/migrations/read-state-dwell-handlers/README.md +125 -0
  486. package/schematics/migrations/read-state-dwell-handlers/data.js +45 -0
  487. package/schematics/migrations/read-state-dwell-handlers/index.js +215 -0
  488. package/schematics/migrations/read-state-dwell-handlers/schema.json +20 -0
  489. package/schematics/migrations/scrollbar-deprecated-path/README.md +128 -0
  490. package/schematics/migrations/scrollbar-deprecated-path/index.js +20 -0
  491. package/schematics/migrations/scrollbar-deprecated-path/schema.json +20 -0
  492. package/schematics/migrations/select-signal-inputs/README.md +61 -0
  493. package/schematics/migrations/select-signal-inputs/data.js +99 -0
  494. package/schematics/migrations/select-signal-inputs/index.js +57 -0
  495. package/schematics/migrations/select-signal-inputs/schema.json +15 -0
  496. package/schematics/migrations/sidepanel-non-modal-behavior/README.md +57 -0
  497. package/schematics/migrations/sidepanel-non-modal-behavior/data.js +111 -0
  498. package/schematics/migrations/sidepanel-non-modal-behavior/index.js +57 -0
  499. package/schematics/migrations/sidepanel-non-modal-behavior/schema.json +15 -0
  500. package/schematics/migrations/signal-inputs-subclasses/README.md +28 -0
  501. package/schematics/migrations/signal-inputs-subclasses/data.js +69 -0
  502. package/schematics/migrations/signal-inputs-subclasses/index.js +17 -0
  503. package/schematics/migrations/signal-inputs-subclasses/schema.json +15 -0
  504. package/schematics/migrations/split-button-optional-disabled/README.md +47 -0
  505. package/schematics/migrations/split-button-optional-disabled/data.js +53 -0
  506. package/schematics/migrations/split-button-optional-disabled/index.js +57 -0
  507. package/schematics/migrations/split-button-optional-disabled/schema.json +15 -0
  508. package/schematics/migrations/splitter-deprecated-path/README.md +136 -0
  509. package/schematics/migrations/splitter-deprecated-path/index.js +20 -0
  510. package/schematics/migrations/splitter-deprecated-path/schema.json +20 -0
  511. package/schematics/migrations/state-saving-default/README.md +67 -0
  512. package/schematics/migrations/state-saving-default/data.js +88 -0
  513. package/schematics/migrations/state-saving-default/index.js +62 -0
  514. package/schematics/migrations/state-saving-default/schema.json +15 -0
  515. package/schematics/migrations/table-cell-content/README.md +55 -0
  516. package/schematics/migrations/table-cell-content/data.js +66 -0
  517. package/schematics/migrations/table-cell-content/index.js +66 -0
  518. package/schematics/migrations/table-cell-content/schema.json +15 -0
  519. package/schematics/migrations/tabs-signals-and-aria/README.md +93 -0
  520. package/schematics/migrations/tabs-signals-and-aria/data.js +139 -0
  521. package/schematics/migrations/tabs-signals-and-aria/index.js +65 -0
  522. package/schematics/migrations/tabs-signals-and-aria/schema.json +15 -0
  523. package/schematics/migrations/tag-list-cleaner/README.md +58 -0
  524. package/schematics/migrations/tag-list-cleaner/data.js +42 -0
  525. package/schematics/migrations/tag-list-cleaner/index.js +196 -0
  526. package/schematics/migrations/tag-list-cleaner/schema.json +20 -0
  527. package/schematics/migrations/tag-slots/README.md +41 -0
  528. package/schematics/migrations/tag-slots/index.js +190 -0
  529. package/schematics/migrations/tag-slots/schema.json +20 -0
  530. package/schematics/migrations/tags-signals/README.md +85 -0
  531. package/schematics/migrations/tags-signals/data.js +103 -0
  532. package/schematics/migrations/tags-signals/index.js +673 -0
  533. package/schematics/migrations/tags-signals/schema.json +20 -0
  534. package/schematics/migrations/textarea-signals/README.md +72 -0
  535. package/schematics/migrations/textarea-signals/data.js +121 -0
  536. package/schematics/migrations/textarea-signals/index.js +379 -0
  537. package/schematics/migrations/textarea-signals/schema.json +20 -0
  538. package/schematics/migrations/time-range-title-for/README.md +164 -0
  539. package/schematics/migrations/time-range-title-for/data.js +139 -0
  540. package/schematics/migrations/time-range-title-for/index.js +163 -0
  541. package/schematics/migrations/time-range-title-for/schema.json +20 -0
  542. package/schematics/migrations/timepicker-signals/README.md +78 -0
  543. package/schematics/migrations/timepicker-signals/data.js +82 -0
  544. package/schematics/migrations/timepicker-signals/index.js +709 -0
  545. package/schematics/migrations/timepicker-signals/schema.json +20 -0
  546. package/schematics/migrations/timezone-grouping-utils/README.md +73 -0
  547. package/schematics/migrations/timezone-grouping-utils/data.js +101 -0
  548. package/schematics/migrations/timezone-grouping-utils/index.js +64 -0
  549. package/schematics/migrations/timezone-grouping-utils/schema.json +15 -0
  550. package/schematics/migrations/title-encapsulation/README.md +49 -0
  551. package/schematics/migrations/title-encapsulation/data.js +69 -0
  552. package/schematics/migrations/title-encapsulation/index.js +57 -0
  553. package/schematics/migrations/title-encapsulation/schema.json +15 -0
  554. package/schematics/migrations/toast-stack-and-defaults/README.md +102 -0
  555. package/schematics/migrations/toast-stack-and-defaults/data.js +79 -0
  556. package/schematics/migrations/toast-stack-and-defaults/index.js +53 -0
  557. package/schematics/migrations/toast-stack-and-defaults/schema.json +15 -0
  558. package/schematics/migrations/tooltip-pointer-events-and-types/README.md +53 -0
  559. package/schematics/migrations/tooltip-pointer-events-and-types/data.js +89 -0
  560. package/schematics/migrations/tooltip-pointer-events-and-types/index.js +60 -0
  561. package/schematics/migrations/tooltip-pointer-events-and-types/schema.json +15 -0
  562. package/schematics/migrations/top-bar-container-selectors/README.md +111 -0
  563. package/schematics/migrations/top-bar-container-selectors/data.js +56 -0
  564. package/schematics/migrations/top-bar-container-selectors/index.js +84 -0
  565. package/schematics/migrations/top-bar-container-selectors/schema.json +20 -0
  566. package/schematics/migrations/tree-select-signals/README.md +61 -0
  567. package/schematics/migrations/tree-select-signals/data.js +106 -0
  568. package/schematics/migrations/tree-select-signals/index.js +58 -0
  569. package/schematics/migrations/tree-select-signals/schema.json +15 -0
  570. package/schematics/migrations/tree-signals/README.md +82 -0
  571. package/schematics/migrations/tree-signals/data.js +123 -0
  572. package/schematics/migrations/tree-signals/index.js +54 -0
  573. package/schematics/migrations/tree-signals/schema.json +15 -0
  574. package/schematics/migrations/tree-state-saving-default/README.md +66 -0
  575. package/schematics/migrations/tree-state-saving-default/data.js +78 -0
  576. package/schematics/migrations/tree-state-saving-default/index.js +60 -0
  577. package/schematics/migrations/tree-state-saving-default/schema.json +15 -0
  578. package/schematics/migrations/username-pipe-injection/README.md +59 -0
  579. package/schematics/migrations/username-pipe-injection/data.js +78 -0
  580. package/schematics/migrations/username-pipe-injection/index.js +58 -0
  581. package/schematics/migrations/username-pipe-injection/schema.json +15 -0
  582. package/schematics/migrations/v20-upgrade/README.md +36 -16
  583. package/schematics/migrations/v20-upgrade/data.js +124 -77
  584. package/schematics/migrations/v20-upgrade/index.js +6 -213
  585. package/schematics/migrations/v21-upgrade/README.md +271 -0
  586. package/schematics/migrations/v21-upgrade/data.js +1371 -0
  587. package/schematics/migrations/v21-upgrade/index.js +94 -0
  588. package/schematics/migrations/v21-upgrade/schema.json +20 -0
  589. package/schematics/migrations/zoneless-change-detection/README.md +30 -0
  590. package/schematics/migrations/zoneless-change-detection/data.js +29 -0
  591. package/schematics/migrations/zoneless-change-detection/index.js +20 -0
  592. package/schematics/migrations/zoneless-change-detection/schema.json +15 -0
  593. package/schematics/migrations.json +392 -2
  594. package/schematics/ng-add/index.js +515 -14
  595. package/schematics/ng-add/schema.json +15 -0
  596. package/schematics/utils/deprecated-path-migration.js +61 -0
  597. package/schematics/utils/package-config.js +9 -105
  598. package/scrollbar/{_scrollbar-component-theme.scss → deprecated/_scrollbar-component-theme.scss} +1 -1
  599. package/scrollbar/{scrollbar.component.scss → deprecated/scrollbar.component.scss} +1 -1
  600. package/scrollbar/native-scrollbar.scss +68 -0
  601. package/scrollbar/scrollbar-tokens.scss +13 -22
  602. package/scrollbar/scrollbar-track.scss +94 -0
  603. package/scrollbar/scrollbar-viewport.scss +33 -0
  604. package/scrollbar/scrollbar.scss +24 -0
  605. package/search-expandable/search-expandable-tokens.scss +4 -0
  606. package/search-expandable/search-expandable.scss +4 -2
  607. package/select/_select-theme.scss +3 -16
  608. package/select/select.scss +0 -6
  609. package/sidebar/sidebar.scss +20 -0
  610. package/sidepanel/_sidepanel-theme.scss +1 -1
  611. package/sidepanel/sidepanel-tokens.scss +7 -1
  612. package/sidepanel/sidepanel.scss +41 -5
  613. package/skeleton/skeleton-presets.scss +350 -0
  614. package/skeleton/skeleton-tokens.scss +127 -0
  615. package/skeleton/skeleton.scss +53 -45
  616. package/split-button/_split-button-theme.scss +4 -4
  617. package/split-button/split-button.scss +2 -6
  618. package/splitter/{_splitter-theme.scss → deprecated/_splitter-theme.scss} +1 -1
  619. package/splitter/deprecated/splitter.scss +51 -0
  620. package/splitter/splitter-tokens.scss +19 -0
  621. package/splitter/splitter.scss +148 -28
  622. package/table/_table-theme.scss +13 -12
  623. package/table/table-tokens.scss +8 -0
  624. package/table/table.scss +47 -22
  625. package/tabs/_tabs-common.scss +14 -14
  626. package/tabs/_tabs-theme.scss +4 -5
  627. package/tabs/tab-body.scss +49 -1
  628. package/tabs/tab-header.scss +2 -1
  629. package/tags/tag-list.scss +4 -0
  630. package/tags/tag.scss +19 -1
  631. package/time-range/time-range.scss +9 -0
  632. package/timezone/timezone-option.component.scss +4 -7
  633. package/timezone/timezone-select.component.scss +3 -0
  634. package/toast/_toast-theme.scss +1 -4
  635. package/toast/toast-container.component.scss +19 -13
  636. package/toast/toast-tokens.scss +12 -6
  637. package/toast/toast.component.scss +42 -19
  638. package/toggle/_toggle-theme.scss +4 -10
  639. package/toggle/toggle.scss +67 -26
  640. package/tooltip/_tooltip-theme.scss +7 -1
  641. package/tooltip/tooltip-tokens.scss +1 -2
  642. package/tooltip/tooltip.scss +55 -9
  643. package/top-bar/top-bar-tokens.scss +13 -2
  644. package/top-bar/top-bar.scss +24 -19
  645. package/tree/_tree-theme.scss +0 -1
  646. package/tree/toggle.scss +5 -9
  647. package/tree/tree-option.scss +2 -4
  648. package/tree/tree-tokens.scss +2 -1
  649. package/tree/tree.scss +3 -5
  650. package/tree-select/_tree-select-theme.scss +4 -15
  651. package/tree-select/tree-select-tokens.scss +16 -0
  652. package/tree-select/tree-select.scss +0 -6
  653. package/{accordion/index.d.ts → types/koobiq-components-accordion.d.ts} +102 -84
  654. package/{actions-panel/index.d.ts → types/koobiq-components-actions-panel.d.ts} +44 -59
  655. package/{alert/index.d.ts → types/koobiq-components-alert.d.ts} +8 -3
  656. package/types/koobiq-components-app-switcher.d.ts +406 -0
  657. package/types/koobiq-components-autocomplete.d.ts +443 -0
  658. package/{badge/index.d.ts → types/koobiq-components-badge.d.ts} +25 -20
  659. package/{breadcrumbs/index.d.ts → types/koobiq-components-breadcrumbs.d.ts} +97 -46
  660. package/types/koobiq-components-button-toggle.d.ts +340 -0
  661. package/types/koobiq-components-button.d.ts +296 -0
  662. package/types/koobiq-components-checkbox.d.ts +172 -0
  663. package/types/koobiq-components-clamped-text.d.ts +184 -0
  664. package/{code-block/index.d.ts → types/koobiq-components-code-block.d.ts} +114 -79
  665. package/{content-panel/index.d.ts → types/koobiq-components-content-panel.d.ts} +81 -25
  666. package/{core/index.d.ts → types/koobiq-components-core.d.ts} +2827 -865
  667. package/{datepicker/index.d.ts → types/koobiq-components-datepicker.d.ts} +161 -116
  668. package/types/koobiq-components-divider.d.ts +43 -0
  669. package/types/koobiq-components-dl.d.ts +235 -0
  670. package/{dropdown/index.d.ts → types/koobiq-components-dropdown.d.ts} +245 -239
  671. package/types/koobiq-components-ellipsis-center.d.ts +85 -0
  672. package/types/koobiq-components-empty-state.d.ts +106 -0
  673. package/{file-upload/index.d.ts → types/koobiq-components-file-upload.d.ts} +214 -107
  674. package/{filter-bar/index.d.ts → types/koobiq-components-filter-bar.d.ts} +410 -495
  675. package/types/koobiq-components-flag.d.ts +68 -0
  676. package/{form-field/index.d.ts → types/koobiq-components-form-field.d.ts} +167 -191
  677. package/types/koobiq-components-icon.d.ts +333 -0
  678. package/{inline-edit/index.d.ts → types/koobiq-components-inline-edit.d.ts} +109 -46
  679. package/types/koobiq-components-input.d.ts +477 -0
  680. package/types/koobiq-components-link-deprecated.d.ts +101 -0
  681. package/types/koobiq-components-link.d.ts +176 -0
  682. package/{list/index.d.ts → types/koobiq-components-list.d.ts} +162 -99
  683. package/types/koobiq-components-loader-overlay.d.ts +101 -0
  684. package/{markdown/index.d.ts → types/koobiq-components-markdown.d.ts} +16 -24
  685. package/types/koobiq-components-modal.d.ts +666 -0
  686. package/types/koobiq-components-navbar.d.ts +569 -0
  687. package/types/koobiq-components-notification-center.d.ts +500 -0
  688. package/{overflow-items/index.d.ts → types/koobiq-components-overflow-items.d.ts} +8 -22
  689. package/types/koobiq-components-popover.d.ts +468 -0
  690. package/types/koobiq-components-progress-bar.d.ts +67 -0
  691. package/{progress-spinner/index.d.ts → types/koobiq-components-progress-spinner.d.ts} +33 -10
  692. package/types/koobiq-components-radio.d.ts +294 -0
  693. package/{resizer/index.d.ts → types/koobiq-components-resizer.d.ts} +37 -2
  694. package/{scrollbar/index.d.ts → types/koobiq-components-scrollbar-deprecated.d.ts} +18 -1
  695. package/types/koobiq-components-scrollbar.d.ts +154 -0
  696. package/types/koobiq-components-search-expandable.d.ts +164 -0
  697. package/{select/index.d.ts → types/koobiq-components-select.d.ts} +360 -167
  698. package/types/koobiq-components-sidebar.d.ts +152 -0
  699. package/types/koobiq-components-sidepanel.d.ts +436 -0
  700. package/types/koobiq-components-skeleton.d.ts +234 -0
  701. package/types/koobiq-components-split-button.d.ts +65 -0
  702. package/{splitter/index.d.ts → types/koobiq-components-splitter-deprecated.d.ts} +44 -1
  703. package/types/koobiq-components-splitter.d.ts +406 -0
  704. package/types/koobiq-components-table.d.ts +44 -0
  705. package/types/koobiq-components-tabs.d.ts +888 -0
  706. package/{tags/index.d.ts → types/koobiq-components-tags.d.ts} +249 -133
  707. package/types/koobiq-components-textarea.d.ts +178 -0
  708. package/{time-range/index.d.ts → types/koobiq-components-time-range.d.ts} +135 -62
  709. package/types/koobiq-components-timepicker.d.ts +223 -0
  710. package/types/koobiq-components-timezone.d.ts +266 -0
  711. package/types/koobiq-components-title.d.ts +184 -0
  712. package/types/koobiq-components-toast.d.ts +289 -0
  713. package/types/koobiq-components-toggle.d.ts +121 -0
  714. package/types/koobiq-components-tooltip.d.ts +610 -0
  715. package/types/koobiq-components-top-bar.d.ts +61 -0
  716. package/types/koobiq-components-tree-select.d.ts +667 -0
  717. package/types/koobiq-components-tree.d.ts +1290 -0
  718. package/types/koobiq-components-username.d.ts +340 -0
  719. package/username/_username-theme.scss +35 -0
  720. package/username/username.scss +10 -34
  721. package/app-switcher/index.d.ts +0 -276
  722. package/autocomplete/index.d.ts +0 -286
  723. package/button/index.d.ts +0 -153
  724. package/button-toggle/index.d.ts +0 -162
  725. package/checkbox/index.d.ts +0 -163
  726. package/clamped-text/index.d.ts +0 -146
  727. package/core/styles/_tokens.scss +0 -7
  728. package/core/styles/common/_clearfix.scss +0 -13
  729. package/core/styles/common/_popup.scss +0 -6
  730. package/core/styles/functions/_index.scss +0 -3
  731. package/core/styles/functions/_number.scss +0 -60
  732. package/core/styles/functions/_string.scss +0 -18
  733. package/core/styles/theming/scrollbar-tokens.scss +0 -25
  734. package/core/styles/typography/_typography-utils.scss +0 -84
  735. package/divider/index.d.ts +0 -20
  736. package/dl/index.d.ts +0 -45
  737. package/ellipsis-center/index.d.ts +0 -71
  738. package/empty-state/index.d.ts +0 -45
  739. package/flag/index.d.ts +0 -44
  740. package/icon/index.d.ts +0 -200
  741. package/input/index.d.ts +0 -354
  742. package/link/index.d.ts +0 -56
  743. package/loader-overlay/index.d.ts +0 -57
  744. package/modal/index.d.ts +0 -339
  745. package/navbar/index.d.ts +0 -372
  746. package/notification-center/index.d.ts +0 -323
  747. package/popover/index.d.ts +0 -182
  748. package/prebuilt-themes/dark-theme.css +0 -1
  749. package/prebuilt-themes/light-theme.css +0 -1
  750. package/progress-bar/index.d.ts +0 -31
  751. package/radio/index.d.ts +0 -203
  752. package/search-expandable/index.d.ts +0 -101
  753. package/sidebar/index.d.ts +0 -94
  754. package/sidepanel/index.d.ts +0 -272
  755. package/skeleton/index.d.ts +0 -26
  756. package/split-button/index.d.ts +0 -46
  757. package/table/index.d.ts +0 -25
  758. package/tabs/index.d.ts +0 -677
  759. package/textarea/index.d.ts +0 -138
  760. package/timepicker/index.d.ts +0 -197
  761. package/timezone/index.d.ts +0 -125
  762. package/title/index.d.ts +0 -139
  763. package/toast/index.d.ts +0 -187
  764. package/toggle/index.d.ts +0 -104
  765. package/tooltip/index.d.ts +0 -335
  766. package/top-bar/index.d.ts +0 -33
  767. package/tree/index.d.ts +0 -802
  768. package/tree-select/index.d.ts +0 -475
  769. package/username/index.d.ts +0 -194
  770. /package/{dynamic-translation/index.d.ts → types/koobiq-components-dynamic-translation.d.ts} +0 -0
  771. /package/{index.d.ts → types/koobiq-components.d.ts} +0 -0
@@ -1,275 +1,798 @@
1
+ import { _IdGenerator } from '@angular/cdk/a11y';
2
+ import { Directionality } from '@angular/cdk/bidi';
3
+ import { coerceCssPixelValue } from '@angular/cdk/coercion';
4
+ import { MutationObserverFactory } from '@angular/cdk/observers';
5
+ import { SharedResizeObserver } from '@angular/cdk/observers/private';
6
+ import { _CdkPrivateStyleLoader } from '@angular/cdk/private';
7
+ import * as i1 from '@angular/cdk/scrolling';
8
+ import { CdkScrollable, ScrollDispatcher, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
9
+ import { DOCUMENT } from '@angular/common';
1
10
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, NgZone, input, Input, Directive, ElementRef, viewChild, EventEmitter, Injector, afterNextRender, forwardRef, Output, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
- import { KBQ_OVERFLOW_SHADOW_SOURCE } from '@koobiq/components/core';
4
- import * as i1 from '@angular/cdk/overlay';
5
- import { CdkScrollable } from '@angular/cdk/overlay';
6
- import { OverlayScrollbars } from 'overlayscrollbars';
11
+ import { inject, NgZone, InjectionToken, ViewEncapsulation, ChangeDetectionStrategy, Component, input, booleanAttribute, Directive, ApplicationRef, EnvironmentInjector, Injector, DestroyRef, numberAttribute, effect, afterNextRender, createComponent, Injectable, Renderer2, NgModule } from '@angular/core';
12
+ import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
13
+ import { KBQ_WINDOW, kbqInjectNativeElement, kbqAnimationsDisabled } from '@koobiq/components/core';
14
+ import { NEVER, Observable, asyncScheduler, Subject, merge, fromEvent, EMPTY, filter, map, startWith, audit, share, switchMap, takeUntil, distinctUntilChanged, concat, of, timer, observeOn, asapScheduler, take } from 'rxjs';
7
15
 
8
- const KBQ_SCROLLBAR_OPTIONS_DEFAULT_CONFIG = {
9
- scrollbars: {
10
- autoHide: 'leave',
11
- autoHideDelay: 100
16
+ /**
17
+ * The next animation frame, requested on subscription and only then, so an idle page schedules none.
18
+ *
19
+ * One frame per subscriber rather than a shared one: a frame that is already being delivered cannot be
20
+ * joined, so whatever asks for a frame from inside one gets the next.
21
+ */
22
+ function nextAnimationFrame() {
23
+ const window = inject(KBQ_WINDOW);
24
+ const ngZone = inject(NgZone);
25
+ if (typeof window.requestAnimationFrame === 'undefined') {
26
+ return NEVER;
12
27
  }
28
+ return new Observable((subscriber) =>
29
+ // Outside Angular, so waiting for a frame does not keep NgZone unstable.
30
+ ngZone.runOutsideAngular(() => {
31
+ const frameId = window.requestAnimationFrame(() => {
32
+ subscriber.next();
33
+ subscriber.complete();
34
+ });
35
+ return () => window.cancelAnimationFrame(frameId);
36
+ }));
37
+ }
38
+ function zoneFree() {
39
+ const ngZone = inject(NgZone);
40
+ return (source) => new Observable((subscriber) => ngZone.runOutsideAngular(() => source.subscribe(subscriber)));
41
+ }
42
+ function zoneFreeScheduler(scheduler = asyncScheduler) {
43
+ const ngZone = inject(NgZone);
44
+ return {
45
+ now: () => scheduler.now(),
46
+ schedule(work, delay, state) {
47
+ let subscription;
48
+ ngZone.runOutsideAngular(() => {
49
+ subscription = scheduler.schedule(work, delay, state);
50
+ });
51
+ return subscription;
52
+ }
53
+ };
54
+ }
55
+ function zoneOptimized() {
56
+ const ngZone = inject(NgZone);
57
+ return (source) => new Observable((subscriber) => source.subscribe({
58
+ next: (value) => ngZone.run(() => subscriber.next(value)),
59
+ error: (error) => subscriber.error(error),
60
+ complete: () => subscriber.complete()
61
+ }));
62
+ }
63
+ function getElementOffset(ancestor, element) {
64
+ let offsetTop = 0;
65
+ let offsetLeft = 0;
66
+ let current = element;
67
+ while (current && current !== ancestor) {
68
+ offsetTop += current.offsetTop;
69
+ offsetLeft += current.offsetLeft;
70
+ current = current.offsetParent;
71
+ }
72
+ return { offsetTop, offsetLeft };
73
+ }
74
+ const KBQ_SCROLLBAR_DEFAULT_OPTIONS = {
75
+ mode: 'hover',
76
+ hideDelay: 1000
13
77
  };
14
- const KBQ_SCROLLBAR_CONFIG = new InjectionToken('KBQ_SCROLLBAR_CONFIG');
15
- /** Default scroll behavior */
16
- const KBQ_SCROLLBAR_OPTIONS_DEFAULT_CONFIG_PROVIDER = {
17
- provide: KBQ_SCROLLBAR_CONFIG,
18
- useValue: KBQ_SCROLLBAR_OPTIONS_DEFAULT_CONFIG
19
- };
20
-
21
- const createDefer = () => {
22
- // For SSR compatibility
23
- // eslint-disable-next-line no-restricted-globals
24
- if (typeof window === 'undefined') {
25
- const noop = () => { };
26
- return [noop, noop];
27
- }
28
- let idleId;
29
- let rafId;
30
- // eslint-disable-next-line no-restricted-globals
31
- const { requestIdleCallback, requestAnimationFrame, cancelAnimationFrame, cancelIdleCallback } = window;
32
- const idleSupported = typeof requestIdleCallback === 'function';
33
- const rIdle = idleSupported ? requestIdleCallback : requestAnimationFrame;
34
- const cIdle = idleSupported ? cancelIdleCallback : cancelAnimationFrame;
35
- const clear = () => {
36
- cIdle(idleId);
37
- cancelAnimationFrame(rafId);
78
+ /** Injection token holding the current {@link KbqScrollbarOptions}. */
79
+ const KBQ_SCROLLBAR_OPTIONS = new InjectionToken('KBQ_SCROLLBAR_OPTIONS', {
80
+ factory: () => KBQ_SCROLLBAR_DEFAULT_OPTIONS
81
+ });
82
+ /** Overrides the default scrollbar options within the given injector scope. */
83
+ function kbqScrollbarOptionsProvider(options) {
84
+ return {
85
+ provide: KBQ_SCROLLBAR_OPTIONS,
86
+ useValue: { ...KBQ_SCROLLBAR_DEFAULT_OPTIONS, ...options }
38
87
  };
39
- return [
40
- (callback, options) => {
41
- clear();
42
- idleId = rIdle(idleSupported
43
- ? () => {
44
- clear();
45
- // inside idle its best practice to use rAF to change DOM for best performance
46
- rafId = requestAnimationFrame(callback);
47
- }
48
- : callback, typeof options === 'object' ? options : { timeout: 2233 });
49
- },
50
- clear
51
- ];
88
+ }
89
+ const KBQ_NATIVE_SCROLLBAR_DEFAULT_OPTIONS = {
90
+ descendants: false
52
91
  };
92
+ /** Injection token holding the current {@link KbqNativeScrollbarOptions}. */
93
+ const KBQ_NATIVE_SCROLLBAR_OPTIONS = new InjectionToken('KBQ_NATIVE_SCROLLBAR_OPTIONS', { factory: () => KBQ_NATIVE_SCROLLBAR_DEFAULT_OPTIONS });
94
+ /** Overrides the default native scrollbar options within the given injector scope. */
95
+ function kbqNativeScrollbarOptionsProvider(options) {
96
+ return {
97
+ provide: KBQ_NATIVE_SCROLLBAR_OPTIONS,
98
+ useValue: { ...KBQ_NATIVE_SCROLLBAR_DEFAULT_OPTIONS, ...options }
99
+ };
100
+ }
53
101
  /**
54
- * A directive for adding `overlayscrollbars` to an element.
102
+ * Computed `overflow` values that rule out user scrolling. `visible` belongs here as much as the other
103
+ * two: it only computes to `auto` when the other axis scrolls, so a box left at the initial value on
104
+ * both axes is not a scroll container at all. Listed as the exclusions rather than as the scrollable
105
+ * values so an unreadable computed style leaves the scrollbar alone instead of erasing it.
55
106
  */
56
- class KbqScrollbarDirective {
57
- // TODO: Skipped for migration because:
58
- // Accessor inputs cannot be migrated as they are too complex.
59
- set options(value) {
60
- this._options = value;
61
- if (OverlayScrollbars.valid(this.scrollbarInstance)) {
62
- this.scrollbarInstance.options(value || {}, true);
63
- }
64
- }
65
- /** Scrollbar behavior customization object */
66
- get options() {
67
- return this._options;
68
- }
69
- // TODO: Skipped for migration because:
70
- // Accessor inputs cannot be migrated as they are too complex.
71
- set events(value) {
72
- this._events = value;
73
- if (OverlayScrollbars.valid(this.scrollbarInstance)) {
74
- this.scrollbarInstance.on(value || {}, true);
75
- }
107
+ const NON_SCROLLABLE_OVERFLOW = ['clip', 'hidden', 'visible'];
108
+ const TRACK_TAG = 'kbq-scrollbar-track';
109
+ /** Based on --kbq-scrollbar-thumb-min-size */
110
+ const MIN_THUMB_SIZE = 32;
111
+ /** Based on --kbq-scrollbar-thumb-gap */
112
+ const THUMB_GAP = 3;
113
+ // Include the transparent border because CSS applies the minimum to the thumb's border box.
114
+ const MIN_THUMB_BOX_SIZE = MIN_THUMB_SIZE + THUMB_GAP * 2;
115
+ class ScrollbarStyleLoader {
116
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: ScrollbarStyleLoader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
117
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.25", type: ScrollbarStyleLoader, isStandalone: true, selector: "scrollbar-style-loader", ngImport: i0, template: '', isInline: true, styles: [":where(.kbq-scrollbar-viewport,.kbq-native-scrollbar){--kbq-scrollbar-thumb-min-size: var(--kbq-size-3xl);--kbq-scrollbar-thumb-gap: 3px;--kbq-scrollbar-track-size: 14px;--kbq-scrollbar-track-z-index: 1000;--kbq-scrollbar-transition-duration: .15s;--kbq-scrollbar-track-background: transparent}@media(prefers-reduced-motion:reduce){:where(.kbq-scrollbar-viewport,.kbq-native-scrollbar){--kbq-scrollbar-transition-duration: 0s}}\n", "@supports not selector(::-webkit-scrollbar){:where(.kbq-native-scrollbar:not(.kbq-native-scrollbar_descendants) *){scrollbar-color:auto}.kbq-native-scrollbar,.kbq-native-scrollbar_descendants *{scrollbar-color:var(--kbq-scrollbar-thumb-default-background) var(--kbq-scrollbar-track-background);scrollbar-width:auto}}.kbq-native-scrollbar::-webkit-scrollbar,.kbq-native-scrollbar_descendants ::-webkit-scrollbar{width:var(--kbq-scrollbar-track-size);height:var(--kbq-scrollbar-track-size);background-color:var(--kbq-scrollbar-track-background);cursor:default}.kbq-native-scrollbar::-webkit-scrollbar-track,.kbq-native-scrollbar::-webkit-scrollbar-corner,.kbq-native-scrollbar::-webkit-resizer,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-track,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-corner,.kbq-native-scrollbar_descendants ::-webkit-resizer{background-color:var(--kbq-scrollbar-track-background)}.kbq-native-scrollbar::-webkit-scrollbar-thumb,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-thumb{box-sizing:border-box;border:var(--kbq-scrollbar-thumb-gap) solid transparent;border-radius:var(--kbq-size-border-radius);background-color:var(--kbq-scrollbar-thumb-default-background);background-clip:content-box}.kbq-native-scrollbar::-webkit-scrollbar-thumb:vertical,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-thumb:vertical{min-height:calc(var(--kbq-scrollbar-thumb-min-size) + var(--kbq-scrollbar-thumb-gap) * 2)}.kbq-native-scrollbar::-webkit-scrollbar-thumb:horizontal,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-thumb:horizontal{min-width:calc(var(--kbq-scrollbar-thumb-min-size) + var(--kbq-scrollbar-thumb-gap) * 2)}.kbq-native-scrollbar::-webkit-scrollbar-thumb:hover,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-thumb:hover{background-color:var(--kbq-scrollbar-thumb-hover-background)}.kbq-native-scrollbar::-webkit-scrollbar-thumb:active,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-thumb:active{background-color:var(--kbq-scrollbar-thumb-active-background)}.kbq-native-scrollbar::-webkit-scrollbar-button,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-button{display:none}\n", "@charset \"UTF-8\";.kbq-scrollbar-viewport{isolation:isolate}.kbq-scrollbar-viewport_native-scrollbar-hidden{scrollbar-width:none;-ms-overflow-style:none}.kbq-scrollbar-viewport_native-scrollbar-hidden::-webkit-scrollbar,.kbq-scrollbar-viewport_native-scrollbar-hidden::-webkit-scrollbar-thumb{display:none}.kbq-scrollbar-track_hover:not(:active){transition:opacity var(--kbq-scrollbar-transition-duration) ease;opacity:0}.kbq-scrollbar-track_hover:not(:active).kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-scrollbar-track_hover:not(:active){animation:none;transition:none}}.kbq-scrollbar-viewport:hover>.kbq-scrollbar-track_hover,.kbq-scrollbar-track_hover.kbq-scrollbar-track_revealed{transition:opacity var(--kbq-scrollbar-transition-duration) ease;opacity:1}.kbq-scrollbar-viewport:hover>.kbq-scrollbar-track_hover.kbq-animations-disabled,.kbq-scrollbar-track_hover.kbq-scrollbar-track_revealed.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-scrollbar-viewport:hover>.kbq-scrollbar-track_hover,.kbq-scrollbar-track_hover.kbq-scrollbar-track_revealed{animation:none;transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
118
+ }
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: ScrollbarStyleLoader, decorators: [{
120
+ type: Component,
121
+ args: [{ selector: 'scrollbar-style-loader', template: '', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [":where(.kbq-scrollbar-viewport,.kbq-native-scrollbar){--kbq-scrollbar-thumb-min-size: var(--kbq-size-3xl);--kbq-scrollbar-thumb-gap: 3px;--kbq-scrollbar-track-size: 14px;--kbq-scrollbar-track-z-index: 1000;--kbq-scrollbar-transition-duration: .15s;--kbq-scrollbar-track-background: transparent}@media(prefers-reduced-motion:reduce){:where(.kbq-scrollbar-viewport,.kbq-native-scrollbar){--kbq-scrollbar-transition-duration: 0s}}\n", "@supports not selector(::-webkit-scrollbar){:where(.kbq-native-scrollbar:not(.kbq-native-scrollbar_descendants) *){scrollbar-color:auto}.kbq-native-scrollbar,.kbq-native-scrollbar_descendants *{scrollbar-color:var(--kbq-scrollbar-thumb-default-background) var(--kbq-scrollbar-track-background);scrollbar-width:auto}}.kbq-native-scrollbar::-webkit-scrollbar,.kbq-native-scrollbar_descendants ::-webkit-scrollbar{width:var(--kbq-scrollbar-track-size);height:var(--kbq-scrollbar-track-size);background-color:var(--kbq-scrollbar-track-background);cursor:default}.kbq-native-scrollbar::-webkit-scrollbar-track,.kbq-native-scrollbar::-webkit-scrollbar-corner,.kbq-native-scrollbar::-webkit-resizer,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-track,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-corner,.kbq-native-scrollbar_descendants ::-webkit-resizer{background-color:var(--kbq-scrollbar-track-background)}.kbq-native-scrollbar::-webkit-scrollbar-thumb,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-thumb{box-sizing:border-box;border:var(--kbq-scrollbar-thumb-gap) solid transparent;border-radius:var(--kbq-size-border-radius);background-color:var(--kbq-scrollbar-thumb-default-background);background-clip:content-box}.kbq-native-scrollbar::-webkit-scrollbar-thumb:vertical,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-thumb:vertical{min-height:calc(var(--kbq-scrollbar-thumb-min-size) + var(--kbq-scrollbar-thumb-gap) * 2)}.kbq-native-scrollbar::-webkit-scrollbar-thumb:horizontal,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-thumb:horizontal{min-width:calc(var(--kbq-scrollbar-thumb-min-size) + var(--kbq-scrollbar-thumb-gap) * 2)}.kbq-native-scrollbar::-webkit-scrollbar-thumb:hover,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-thumb:hover{background-color:var(--kbq-scrollbar-thumb-hover-background)}.kbq-native-scrollbar::-webkit-scrollbar-thumb:active,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-thumb:active{background-color:var(--kbq-scrollbar-thumb-active-background)}.kbq-native-scrollbar::-webkit-scrollbar-button,.kbq-native-scrollbar_descendants ::-webkit-scrollbar-button{display:none}\n", "@charset \"UTF-8\";.kbq-scrollbar-viewport{isolation:isolate}.kbq-scrollbar-viewport_native-scrollbar-hidden{scrollbar-width:none;-ms-overflow-style:none}.kbq-scrollbar-viewport_native-scrollbar-hidden::-webkit-scrollbar,.kbq-scrollbar-viewport_native-scrollbar-hidden::-webkit-scrollbar-thumb{display:none}.kbq-scrollbar-track_hover:not(:active){transition:opacity var(--kbq-scrollbar-transition-duration) ease;opacity:0}.kbq-scrollbar-track_hover:not(:active).kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-scrollbar-track_hover:not(:active){animation:none;transition:none}}.kbq-scrollbar-viewport:hover>.kbq-scrollbar-track_hover,.kbq-scrollbar-track_hover.kbq-scrollbar-track_revealed{transition:opacity var(--kbq-scrollbar-transition-duration) ease;opacity:1}.kbq-scrollbar-viewport:hover>.kbq-scrollbar-track_hover.kbq-animations-disabled,.kbq-scrollbar-track_hover.kbq-scrollbar-track_revealed.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-scrollbar-viewport:hover>.kbq-scrollbar-track_hover,.kbq-scrollbar-track_hover.kbq-scrollbar-track_revealed{animation:none;transition:none}}\n"] }]
122
+ }] });
123
+ /** Customizes the browser-rendered scrollbar of its host without replacing native scrolling. */
124
+ class KbqNativeScrollbar {
125
+ constructor() {
126
+ this.styleLoader = inject(_CdkPrivateStyleLoader);
127
+ this.options = inject(KBQ_NATIVE_SCROLLBAR_OPTIONS);
128
+ /**
129
+ * Whether browser-rendered scrollbars of descendant elements should also be customized.
130
+ * Defaults to {@link KBQ_NATIVE_SCROLLBAR_OPTIONS}.
131
+ */
132
+ this.descendants = input(this.options.descendants, { ...(ngDevMode ? { debugName: "descendants" } : /* istanbul ignore next */ {}), alias: 'kbqNativeScrollbarDescendants',
133
+ transform: booleanAttribute });
134
+ this.styleLoader.load(ScrollbarStyleLoader);
76
135
  }
77
- get events() {
78
- return this._events;
136
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNativeScrollbar, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
137
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.25", type: KbqNativeScrollbar, isStandalone: true, selector: "[kbqNativeScrollbar]", inputs: { descendants: { classPropertyName: "descendants", publicName: "kbqNativeScrollbarDescendants", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.kbq-native-scrollbar_descendants": "descendants()" }, classAttribute: "kbq-native-scrollbar" }, exportAs: ["kbqNativeScrollbar"], ngImport: i0 }); }
138
+ }
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNativeScrollbar, decorators: [{
140
+ type: Directive,
141
+ args: [{
142
+ selector: '[kbqNativeScrollbar]',
143
+ host: {
144
+ class: 'kbq-native-scrollbar',
145
+ '[class.kbq-native-scrollbar_descendants]': 'descendants()'
146
+ },
147
+ exportAs: 'kbqNativeScrollbar'
148
+ }]
149
+ }], ctorParameters: () => [], propDecorators: { descendants: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqNativeScrollbarDescendants", required: false }] }] } });
150
+ /** Marks its host element as the custom scrollbar's scroll target, hiding its native scrollbar whenever a custom scrollbar track replaces it. */
151
+ class KbqScrollbarViewport {
152
+ // Read live because a bound consumer id is unavailable during construction.
153
+ get id() {
154
+ return this.getNativeElement().id || this.generatedId;
79
155
  }
80
156
  constructor() {
81
- this.ngZone = inject(NgZone);
82
- this.scrollbarConfig = inject(KBQ_SCROLLBAR_CONFIG);
83
- /** Whether to defer the initialization to a point in time when the browser is idle. (or to the next frame if `window.requestIdleCallback` is not supported) */
84
- this.defer = input(...(ngDevMode ? [undefined, { debugName: "defer" }] : []));
85
- const [requestDefer, cancelDefer] = createDefer();
86
- this.requestDefer = requestDefer;
87
- this.cancelDefer = cancelDefer;
88
- }
89
- initialize(target) {
90
- this.ngZone.runOutsideAngular(() => {
91
- const init = () => {
92
- this.scrollbarInstance = OverlayScrollbars(target, this.options || this.scrollbarConfig || {}, this.events || {});
93
- };
94
- const defer = this.defer();
95
- if (defer) {
96
- this.requestDefer(init, defer);
157
+ this.styleLoader = inject(_CdkPrivateStyleLoader);
158
+ this.scrollable = inject(CdkScrollable);
159
+ this.appRef = inject(ApplicationRef);
160
+ this.environmentInjector = inject(EnvironmentInjector);
161
+ this.injector = inject(Injector);
162
+ this.idGenerator = inject(_IdGenerator);
163
+ this.options = inject(KBQ_SCROLLBAR_OPTIONS);
164
+ this.destroyRef = inject(DestroyRef);
165
+ this.scrollDispatcher = inject(ScrollDispatcher);
166
+ this.generatedId = this.idGenerator.getId('kbq-scrollbar-viewport-');
167
+ /** Visibility mode for this viewport's scrollbar. Defaults to the app-wide {@link KBQ_SCROLLBAR_OPTIONS}. */
168
+ this.mode = input(this.options.mode, { ...(ngDevMode ? { debugName: "mode" } : /* istanbul ignore next */ {}), alias: 'kbqScrollbarMode' });
169
+ /**
170
+ * How long the scroll-revealed `hover`-mode track stays visible after scrolling stops, in milliseconds.
171
+ * Defaults to the app-wide {@link KBQ_SCROLLBAR_OPTIONS}.
172
+ */
173
+ this.hideDelay = input(this.options.hideDelay, { ...(ngDevMode ? { debugName: "hideDelay" } : /* istanbul ignore next */ {}), alias: 'kbqScrollbarHideDelay',
174
+ transform: numberAttribute });
175
+ this.trackRef = null;
176
+ this.flashSubject = new Subject();
177
+ /** Emits when {@link flashScrollIndicators} is called. */
178
+ this.flashes = this.flashSubject.asObservable();
179
+ /** Emits on every native `scroll` event of the viewport. Emits outside Angular's zone — see `CdkScrollable.elementScrolled`. */
180
+ this.scrollChanges = this.scrollable.elementScrolled();
181
+ this.styleLoader.load(ScrollbarStyleLoader);
182
+ effect(() => {
183
+ const mode = this.mode();
184
+ const hideDelay = this.hideDelay();
185
+ const showTrack = mode !== 'native' && mode !== 'hidden';
186
+ if (!showTrack) {
187
+ this.destroyTrack();
188
+ return;
97
189
  }
98
- else {
99
- init();
190
+ if (!this.trackRef) {
191
+ this.trackRef = this.createTrack();
192
+ }
193
+ this.trackRef.setInput('mode', mode);
194
+ this.trackRef.setInput('hideDelay', hideDelay);
195
+ });
196
+ // ApplicationRef owns the track view, so the viewport must destroy it explicitly.
197
+ this.destroyRef.onDestroy(() => this.destroyTrack());
198
+ if (this.scrollable instanceof CdkVirtualScrollViewport) {
199
+ afterNextRender(() => this.dropDuplicateScrollableRegistration(), { injector: this.injector });
200
+ }
201
+ }
202
+ // Virtual scroll provides its own CdkScrollable while the host directive still registers another
203
+ // instance for the same element. Keep only the instance used by this directive.
204
+ dropDuplicateScrollableRegistration() {
205
+ const element = this.getNativeElement();
206
+ for (const scrollable of this.scrollDispatcher.getAncestorScrollContainers(element)) {
207
+ if (scrollable !== this.scrollable && scrollable.getElementRef().nativeElement === element) {
208
+ this.scrollDispatcher.deregister(scrollable);
100
209
  }
210
+ }
211
+ }
212
+ /** Briefly reveals an overflowing `hover`-mode scrollbar. */
213
+ flashScrollIndicators() {
214
+ this.flashSubject.next();
215
+ }
216
+ /** Scrolls to the specified offsets. RTL-normalized — see `CdkScrollable.scrollTo`. */
217
+ scrollTo(options) {
218
+ this.scrollable.scrollTo(options);
219
+ }
220
+ /** Scrolls to the start of the vertical axis. */
221
+ scrollToTop(behavior) {
222
+ this.scrollTo({ top: 0, behavior });
223
+ }
224
+ /** Scrolls to the end of the vertical axis. */
225
+ scrollToBottom(behavior) {
226
+ this.scrollTo({ top: this.getNativeElement().scrollHeight, behavior });
227
+ }
228
+ /** Scrolls to the logical start of the horizontal axis — the right edge in RTL, left in LTR. */
229
+ scrollStart(behavior) {
230
+ this.scrollTo({ start: 0, behavior });
231
+ }
232
+ /** Scrolls to the logical end of the horizontal axis — the left edge in RTL, right in LTR. */
233
+ scrollEnd(behavior) {
234
+ this.scrollTo({ end: 0, behavior });
235
+ }
236
+ /** Scrolls `target` (an element, or a selector resolved against this viewport) into view. */
237
+ scrollToElement(target, options) {
238
+ const _target = typeof target === 'string' ? this.getNativeElement().querySelector(target) : target;
239
+ if (!_target)
240
+ return;
241
+ const { offsetTop, offsetLeft } = getElementOffset(this.getNativeElement(), _target);
242
+ this.scrollTo({
243
+ top: offsetTop - (options?.top ?? 0),
244
+ left: offsetLeft - (options?.left ?? 0),
245
+ behavior: options?.behavior
246
+ });
247
+ }
248
+ /** Scrolls `target` to the center of the viewport. */
249
+ scrollIntoView(target, behavior) {
250
+ const { offsetHeight, offsetWidth } = target;
251
+ const { offsetTop, offsetLeft } = getElementOffset(this.getNativeElement(), target);
252
+ this.scrollTo({
253
+ top: offsetTop + offsetHeight / 2 - this.getNativeElement().clientHeight / 2,
254
+ left: offsetLeft + offsetWidth / 2 - this.getNativeElement().clientWidth / 2,
255
+ behavior
256
+ });
257
+ }
258
+ createTrack() {
259
+ // A ViewContainerRef-owned view is moved back to its anchor when virtual scroll rebuilds its DOM.
260
+ // ApplicationRef lets the track remain a direct child of the scrollable element.
261
+ const track = createComponent(KbqScrollbarTrack, {
262
+ environmentInjector: this.environmentInjector,
263
+ elementInjector: this.injector
101
264
  });
265
+ this.appRef.attachView(track.hostView);
266
+ // The field may point to a replacement by the time the render callback runs.
267
+ afterNextRender(() => {
268
+ this.getNativeElement().insertBefore(track.location.nativeElement, this.getNativeElement().firstChild);
269
+ }, { injector: this.injector });
270
+ return track;
271
+ }
272
+ destroyTrack() {
273
+ if (!this.trackRef) {
274
+ return;
275
+ }
276
+ this.appRef.detachView(this.trackRef.hostView);
277
+ this.trackRef.destroy();
278
+ this.trackRef = null;
102
279
  }
103
- ngOnDestroy() {
104
- this.cancelDefer();
280
+ /** The viewport's native scrollable element — the host this directive is applied to. */
281
+ getNativeElement() {
282
+ return this.scrollable.getElementRef().nativeElement;
105
283
  }
106
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqScrollbarDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
107
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.30", type: KbqScrollbarDirective, isStandalone: true, selector: "[kbqScrollbar]", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: false, isRequired: false, transformFunction: null }, events: { classPropertyName: "events", publicName: "events", isSignal: false, isRequired: false, transformFunction: null }, defer: { classPropertyName: "defer", publicName: "defer", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: i1.CdkScrollable }], ngImport: i0 }); }
284
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
285
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.25", type: KbqScrollbarViewport, isStandalone: true, selector: "[kbqScrollbarViewport]", inputs: { mode: { classPropertyName: "mode", publicName: "kbqScrollbarMode", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "kbqScrollbarHideDelay", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.kbq-scrollbar-viewport_native-scrollbar-hidden": "mode() !== \"native\"", "attr.id": "id" }, classAttribute: "kbq-scrollbar-viewport" }, hostDirectives: [{ directive: i1.CdkScrollable }], ngImport: i0 }); }
108
286
  }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqScrollbarDirective, decorators: [{
287
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarViewport, decorators: [{
110
288
  type: Directive,
111
289
  args: [{
112
- selector: '[kbqScrollbar]',
290
+ selector: '[kbqScrollbarViewport]',
291
+ host: {
292
+ class: 'kbq-scrollbar-viewport',
293
+ '[class.kbq-scrollbar-viewport_native-scrollbar-hidden]': 'mode() !== "native"',
294
+ '[attr.id]': 'id'
295
+ },
113
296
  hostDirectives: [CdkScrollable]
114
297
  }]
115
- }], ctorParameters: () => [], propDecorators: { options: [{
116
- type: Input
117
- }], events: [{
118
- type: Input
119
- }], defer: [{ type: i0.Input, args: [{ isSignal: true, alias: "defer", required: false }] }] } });
120
-
121
- const filterEvents = (emits, events) => Object.keys(emits).reduce((obj, name) => {
122
- const emitListener = emits[name];
123
- const eventListener = events[name];
124
- // merge & check listeners
125
- obj[name] = [
126
- emitListener,
127
- ...(Array.isArray(eventListener) ? eventListener : [eventListener]).filter(Boolean)
128
- ];
129
- return obj;
130
- }, {});
298
+ }], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqScrollbarMode", required: false }] }], hideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqScrollbarHideDelay", required: false }] }] } });
131
299
  /**
132
- * The component-wrapper for `overlayscrollbars` library.
300
+ * Emits, at most once a frame, whenever the viewport's scrollable size may have changed.
301
+ *
302
+ * Nothing fires when `scrollHeight` itself changes, and polling it would keep an otherwise idle page
303
+ * rendering for as long as the viewport exists. What changes that size does fire something: the viewport
304
+ * or a box directly inside its content resizes; the DOM inside changes — nodes, text or attributes; an
305
+ * image or a font loads; a transition or an animation ends.
306
+ *
307
+ * What still escapes — a style applied from outside the viewport that grows only the content of an
308
+ * inline element, a transform reaching past the content — is caught once the viewport is hovered or
309
+ * focused, and the track also re-measures whenever the viewport scrolls, which it only does once there
310
+ * is something to scroll.
133
311
  */
134
- class KbqScrollbar {
312
+ class KbqScrollbarContentObserver {
135
313
  constructor() {
136
- this.ngZone = inject(NgZone);
137
- this.targetElement = inject(ElementRef);
138
- /** Element that is being overflowed */
139
- this.contentElement = viewChild.required('content');
140
- this.kbqScrollbarDirective = viewChild.required('content', { read: KbqScrollbarDirective });
141
- /** Elements scrollbar applied on */
142
- this.initializationTarget = input(...(ngDevMode ? [undefined, { debugName: "initializationTarget" }] : []));
143
- /** Scrollbar behavior customization object */
144
- this.options = input(undefined, ...(ngDevMode ? [{ debugName: "options" }] : []));
145
- this.events = input(undefined, ...(ngDevMode ? [{ debugName: "events" }] : []));
146
- /** Whether to defer the initialization to a point in time when the browser is idle. (or to the next frame if `window.requestIdleCallback` is not supported) */
147
- this.defer = input(...(ngDevMode ? [undefined, { debugName: "defer" }] : []));
148
- this.onInitialize = new EventEmitter();
149
- /** Event triggered when options or event listeners updated */
150
- this.onUpdate = new EventEmitter();
151
- /** Event triggered when scrollbar instance destroyed */
152
- this.onDestroy = new EventEmitter();
153
- this.onScroll = new EventEmitter();
154
- this.injector = inject(Injector);
155
- }
156
- get element() {
157
- return this.targetElement.nativeElement;
314
+ this.viewport = inject(KbqScrollbarViewport);
315
+ this.viewportElement = this.viewport.getNativeElement();
316
+ this.document = inject(DOCUMENT);
317
+ this.resizeObserver = inject(SharedResizeObserver);
318
+ this.mutationObserverFactory = inject(MutationObserverFactory);
319
+ this.nextFrame = nextAnimationFrame();
320
+ this.changes = merge(this.resizeObserver.observe(this.viewportElement), this.domChanges(), this.document.fonts ? fromEvent(this.document.fonts, 'loadingdone') : EMPTY,
321
+ // `load` does not bubble, so it is caught on its way down. The other two end a change that a
322
+ // mutation only started: content transitioning open, an element animating in.
323
+ merge(...['load', 'transitionend', 'animationend'].map((type) => fromEvent(this.viewportElement, type, { capture: true }))).pipe(filter(({ target }) => !this.isInsideTrack(target))), fromEvent(this.viewportElement, 'pointerenter'), fromEvent(this.viewportElement, 'focusin'), this.viewport.flashes).pipe(
324
+ // Ahead of the audit, which holds the last value until the frame — and no frame comes while the tab
325
+ // is hidden, so a batch of removed nodes would stay reachable all that time.
326
+ map(() => undefined), startWith(undefined), audit(() => this.nextFrame), zoneFree(), share());
158
327
  }
159
- ngAfterViewInit() {
160
- afterNextRender(() => {
161
- const contentElement = this.contentElement();
162
- if (this.element && contentElement?.nativeElement) {
163
- this.kbqScrollbarDirective()?.initialize(this.initializationTarget() || {
164
- target: this.targetElement.nativeElement,
165
- elements: {
166
- viewport: contentElement.nativeElement,
167
- content: contentElement.nativeElement
328
+ // Mutations inside the viewport and resizes of the boxes directly inside its content, as one stream.
329
+ domChanges() {
330
+ return new Observable((subscriber) => {
331
+ const notify = () => subscriber.next();
332
+ const boxes = new Set();
333
+ // An observer of its own rather than CDK's SharedResizeObserver, which filters every batch once per
334
+ // observed element — quadratic for a list whose rows sit directly in the viewport.
335
+ const resizeObserver = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(notify);
336
+ const syncBoxes = () => {
337
+ const current = new Set(this.getContentBoxes());
338
+ boxes.forEach((box) => {
339
+ if (!current.has(box)) {
340
+ resizeObserver?.unobserve(box);
341
+ boxes.delete(box);
342
+ }
343
+ });
344
+ current.forEach((box) => {
345
+ if (!boxes.has(box)) {
346
+ // The border box, so that a padding or border change counts as the resize it is.
347
+ resizeObserver?.observe(box, { box: 'border-box' });
348
+ boxes.add(box);
168
349
  }
169
350
  });
351
+ };
352
+ // Not CDK's ContentObserver: it emits inside NgZone, and every emission would then cost the whole
353
+ // application a change detection pass — usually a second one, right after the render that mutated.
354
+ const mutationObserver = this.mutationObserverFactory.create((records) => {
355
+ const relevant = records.filter((record) => this.affectsContent(record));
356
+ if (!relevant.length) {
357
+ return;
358
+ }
359
+ const root = this.getContentRoot();
360
+ if (relevant.some(({ type, target }) => type === 'childList' && (target === root || target === this.viewportElement))) {
361
+ syncBoxes();
362
+ }
363
+ notify();
364
+ });
365
+ // Attributes too: a class, style or `hidden` toggle inside an inline element grows the content
366
+ // without resizing any box watched here, and it is how the viewport's own `overflow` changes.
367
+ mutationObserver?.observe(this.viewportElement, {
368
+ attributes: true,
369
+ childList: true,
370
+ characterData: true,
371
+ subtree: true
372
+ });
373
+ syncBoxes();
374
+ return () => {
375
+ mutationObserver?.disconnect();
376
+ resizeObserver?.disconnect();
377
+ };
378
+ });
379
+ }
380
+ // `kbq-scrollbar` keeps its content in a wrapper held at the viewport's full height, which never grows
381
+ // with what it holds, so the boxes that do are its children.
382
+ getContentRoot() {
383
+ return this.viewportElement.querySelector(':scope > .kbq-scrollbar__content') ?? this.viewportElement;
384
+ }
385
+ getContentBoxes() {
386
+ return Array.from(this.getContentRoot().children).filter((child) => child.localName !== TRACK_TAG);
387
+ }
388
+ // Skips what cannot change the scrollable size: tracks redrawing their bars, and Angular moving the
389
+ // comment anchors of `@if` and `@for` — the same comment-only records CDK's ContentObserver skips.
390
+ affectsContent({ type, target, addedNodes, removedNodes }) {
391
+ if (target.nodeType === Node.COMMENT_NODE || this.isInsideTrack(target)) {
392
+ return false;
393
+ }
394
+ if (type !== 'childList') {
395
+ return true;
396
+ }
397
+ return [...Array.from(addedNodes), ...Array.from(removedNodes)].some((node) => node.nodeType !== Node.COMMENT_NODE && !this.isInsideTrack(node));
398
+ }
399
+ // This viewport's track or a nested viewport's: tracks move their thumbs on every scroll and never
400
+ // change the size of the content around them. Recognised by structure, not by the element this
401
+ // observer happens to be provided on.
402
+ isInsideTrack(node) {
403
+ for (let current = node; current && current !== this.viewportElement; current = current.parentNode) {
404
+ if (current.localName === TRACK_TAG) {
405
+ return true;
170
406
  }
171
- }, { injector: this.injector });
407
+ }
408
+ return false;
409
+ }
410
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarContentObserver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
411
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarContentObserver }); }
412
+ }
413
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarContentObserver, decorators: [{
414
+ type: Injectable
415
+ }] });
416
+ class KbqScrollbarThumb {
417
+ constructor() {
418
+ this.viewport = inject(KbqScrollbarViewport);
419
+ this.directionality = inject(Directionality);
420
+ this.viewportElement = this.viewport.getNativeElement();
421
+ this.nativeElement = kbqInjectNativeElement();
422
+ this.style = this.nativeElement.style;
423
+ this.contentChanges = inject(KbqScrollbarContentObserver).changes;
424
+ this.orientation = input.required(...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
425
+ merge(fromEvent(this.nativeElement.parentElement, 'mousedown').pipe(filter(({ target }) => target !== this.nativeElement), map((event) => this.getScrolled(event, 0.5, 0.5, this.isRtl()))), fromEvent(this.nativeElement, 'mousedown').pipe(zoneFree(), switchMap((event) => {
426
+ const { ownerDocument } = this.nativeElement;
427
+ const { top, left, height, width } = this.nativeElement.getBoundingClientRect();
428
+ const vertical = (event.clientY - top) / height;
429
+ const horizontal = (event.clientX - left) / width;
430
+ const rtl = this.isRtl();
431
+ return fromEvent(ownerDocument, 'mousemove').pipe(map((event) => this.getScrolled(event, vertical, horizontal, rtl)), takeUntil(fromEvent(ownerDocument, 'mouseup')));
432
+ })))
433
+ .pipe(takeUntilDestroyed())
434
+ .subscribe(([top, left]) => {
435
+ this.viewportElement.style.scrollBehavior = 'auto';
436
+ if (this.orientation() === 'horizontal') {
437
+ this.viewportElement.scrollLeft = left;
438
+ }
439
+ else {
440
+ this.viewportElement.scrollTop = top;
441
+ }
442
+ this.viewportElement.style.scrollBehavior = '';
443
+ });
444
+ merge(this.contentChanges, this.viewport.scrollChanges)
445
+ .pipe(zoneFree(), map(() => this.getDimension()), takeUntilDestroyed())
446
+ .subscribe((dimension) => {
447
+ this.applyPosition(this.getPosition(dimension));
448
+ this.applyValueNow(this.getValueNow(dimension));
449
+ });
450
+ // Wait until Angular has applied `orientation` before calculating the initial ARIA value. Read and written in
451
+ // phases of their own, so that the thumbs rendered together read in one layout rather than each after another's
452
+ // write.
453
+ afterNextRender({
454
+ earlyRead: () => this.getDimension(),
455
+ write: (dimension) => {
456
+ this.applyPosition(this.getPosition(dimension));
457
+ this.applyValueNow(this.getValueNow(dimension));
458
+ }
459
+ });
172
460
  }
173
- ngOnDestroy() {
174
- this.kbqScrollbarDirective()?.scrollbarInstance?.destroy();
461
+ // The DOM fallback covers bare or dynamically updated `dir` attributes that do not update Directionality.
462
+ isRtl() {
463
+ return this.directionality.value === 'rtl' || !!this.viewportElement.closest('[dir="rtl"]');
175
464
  }
176
- /** Wrapper function for native scroll */
177
- scrollTo(options) {
178
- this.contentElement()?.nativeElement.scroll(options);
179
- }
180
- /** @docs-private Implementation of `KbqOverflowShadowSource`. */
181
- getScrollElement() {
182
- return this.contentElement()?.nativeElement ?? null;
183
- }
184
- mergeEvents() {
185
- const defaultListeners = {
186
- initialized: (...args) => this.dispatchEventIfHasObservers(this.onInitialize, args),
187
- updated: (...args) => this.dispatchEventIfHasObservers(this.onUpdate, args),
188
- destroyed: (...args) => this.dispatchEventIfHasObservers(this.onDestroy, args),
189
- scroll: (...args) => this.dispatchEventIfHasObservers(this.onScroll, args)
190
- };
191
- const events = this.events();
192
- if (!events) {
193
- return defaultListeners;
465
+ getScrolled({ clientY, clientX }, offsetY, offsetX, rtl) {
466
+ const { offsetHeight, offsetWidth } = this.nativeElement;
467
+ const { top, left, right, width, height } = this.nativeElement.parentElement.getBoundingClientRect();
468
+ const inline = rtl ? right : left;
469
+ const multiplier = rtl ? -1 : 1;
470
+ const maxTop = this.viewportElement.scrollHeight - height;
471
+ const maxLeft = this.viewportElement.scrollWidth - width;
472
+ const scrolledTop = (clientY - top - offsetHeight * offsetY) / (height - offsetHeight);
473
+ const scrolledLeft = (clientX - inline - offsetWidth * offsetX * multiplier) / (width - offsetWidth);
474
+ return [maxTop * scrolledTop, maxLeft * scrolledLeft];
475
+ }
476
+ applyPosition(style) {
477
+ Object.assign(this.style, style);
478
+ }
479
+ applyValueNow(valueNow) {
480
+ this.nativeElement.setAttribute('aria-valuenow', `${valueNow}`);
481
+ }
482
+ getDimension() {
483
+ const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = this.viewportElement;
484
+ return { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth };
485
+ }
486
+ getPosition(dimension) {
487
+ const thumb = `${this.getThumbFraction(dimension) * 100}%`;
488
+ const view = `${this.getViewFraction(dimension) * 100}%`;
489
+ return this.orientation() === 'vertical'
490
+ ? { top: thumb, height: view }
491
+ : { insetInlineStart: thumb, width: view };
492
+ }
493
+ getValueNow(dimension) {
494
+ const scrolledFraction = this.getScrolledFraction(dimension);
495
+ return Number.isNaN(scrolledFraction) ? 0 : Math.round(Math.abs(scrolledFraction) * 100);
496
+ }
497
+ getThumbFraction(dimension) {
498
+ const compensation = this.getCompensation(dimension) || this.getViewFraction(dimension);
499
+ return Math.abs(this.getScrolledFraction(dimension) * (1 - compensation));
500
+ }
501
+ getViewFraction(dimension) {
502
+ return this.orientation() === 'vertical'
503
+ ? Math.ceil((dimension.clientHeight / dimension.scrollHeight) * 100) / 100
504
+ : Math.ceil((dimension.clientWidth / dimension.scrollWidth) * 100) / 100;
505
+ }
506
+ getScrolledFraction({ scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth }) {
507
+ return this.orientation() === 'vertical'
508
+ ? scrollTop / (scrollHeight - clientHeight)
509
+ : scrollLeft / (scrollWidth - clientWidth);
510
+ }
511
+ getCompensation({ clientHeight, clientWidth, scrollWidth, scrollHeight }) {
512
+ if (((clientHeight * clientHeight) / scrollHeight > MIN_THUMB_BOX_SIZE && this.orientation() === 'vertical') ||
513
+ ((clientWidth * clientWidth) / scrollWidth > MIN_THUMB_BOX_SIZE && this.orientation() === 'horizontal')) {
514
+ return 0;
194
515
  }
195
- // merge default listeners with custom listeners in case of Input binding
516
+ return this.orientation() === 'vertical' ? MIN_THUMB_BOX_SIZE / clientHeight : MIN_THUMB_BOX_SIZE / clientWidth;
517
+ }
518
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarThumb, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
519
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.25", type: KbqScrollbarThumb, isStandalone: true, selector: "[kbqScrollbarThumb]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "role": "scrollbar" }, properties: { "attr.aria-orientation": "orientation()", "attr.aria-controls": "viewportElement.id", "attr.aria-valuemin": "0", "attr.aria-valuemax": "100" } }, exportAs: ["kbqScrollbarThumb"], ngImport: i0 }); }
520
+ }
521
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarThumb, decorators: [{
522
+ type: Directive,
523
+ args: [{
524
+ selector: '[kbqScrollbarThumb]',
525
+ host: {
526
+ role: 'scrollbar',
527
+ '[attr.aria-orientation]': 'orientation()',
528
+ '[attr.aria-controls]': 'viewportElement.id',
529
+ '[attr.aria-valuemin]': '0',
530
+ '[attr.aria-valuemax]': '100'
531
+ },
532
+ exportAs: 'kbqScrollbarThumb'
533
+ }]
534
+ }], ctorParameters: () => [], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: true }] }] } });
535
+ class KbqScrollbarTrack {
536
+ constructor() {
537
+ this.viewport = inject(KbqScrollbarViewport);
538
+ this.viewportElement = this.viewport.getNativeElement();
539
+ this.window = inject(KBQ_WINDOW);
540
+ this.renderer = inject(Renderer2);
541
+ this.ngZone = inject(NgZone);
542
+ this.destroyRef = inject(DestroyRef);
543
+ this.resizeObserver = inject(SharedResizeObserver);
544
+ this.nativeElement = kbqInjectNativeElement();
545
+ this.scheduler = zoneFreeScheduler();
546
+ // Scrolling re-measures too: a viewport that scrolls has something to scroll, whatever the observers
547
+ // missed on the way there.
548
+ this.visibility = toSignal(merge(inject(KbqScrollbarContentObserver).changes, this.viewport.scrollChanges).pipe(map(() => this.scrollbars), startWith([false, false]), distinctUntilChanged((a, b) => a[0] === b[0] && a[1] === b[1]), zoneOptimized()), { requireSync: true });
549
+ this.revealed = toSignal(merge(this.viewport.scrollChanges, this.viewport.flashes).pipe(
550
+ // Hoisted rather than injected inside switchMap, which runs outside an injection context.
551
+ // The scheduler is what keeps the hide timer out of Angular: `scrollChanges` already emits
552
+ // outside the zone, but `flashes` carries whatever zone its caller was in, and a caller
553
+ // inside Angular would otherwise leave NgZone unstable for the whole hideDelay.
554
+ switchMap(() => concat(of(true), timer(this.hideDelay(), this.scheduler).pipe(map(() => false)))), startWith(false), distinctUntilChanged(), zoneOptimized()), { requireSync: true });
555
+ /** Whether the bars, the thumbs and the hover-mode track appear and change color without motion. */
556
+ this.animationsDisabled = kbqAnimationsDisabled();
557
+ this.mode = input.required(...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
558
+ this.hideDelay = input.required(...(ngDevMode ? [{ debugName: "hideDelay" }] : /* istanbul ignore next */ []));
559
+ this.resizeObserver
560
+ .observe(this.viewportElement)
561
+ .pipe(map(() => this.getViewportMetrics()), distinctUntilChanged((a, b) => a.blockSize === b.blockSize &&
562
+ a.inlineSize === b.inlineSize &&
563
+ a.paddingBlockStart === b.paddingBlockStart &&
564
+ a.paddingInlineStart === b.paddingInlineStart),
565
+ // Written once the observer's callback returns, still ahead of the frame: the callback hands one batch
566
+ // to the tracks of every viewport in it, and a write between them makes the next track's read force a
567
+ // layout. Outside Angular, as the write needs no change detection.
568
+ observeOn(zoneFreeScheduler(asapScheduler)), takeUntilDestroyed())
569
+ .subscribe((metrics) => this.applyGeometry(metrics));
570
+ }
571
+ // A drag released over sibling content produces a click on their common ancestor. Capture that
572
+ // single click after mouseup so scrollbar gestures cannot activate the host panel.
573
+ onBarPointerDown(event) {
574
+ event.preventDefault();
575
+ this.ngZone.runOutsideAngular(() => {
576
+ fromEvent(this.window, 'mouseup')
577
+ .pipe(take(1), switchMap(() => fromEvent(this.window, 'click', { capture: true }).pipe(take(1),
578
+ // Drop the listener on the next task when the gesture produces no click.
579
+ takeUntil(timer(0)))), takeUntilDestroyed(this.destroyRef))
580
+ .subscribe((click) => click.stopPropagation());
581
+ });
582
+ }
583
+ get scrollbars() {
584
+ const { clientHeight, scrollHeight, clientWidth, scrollWidth } = this.viewportElement;
585
+ // An overflowing axis is not necessarily a scrollable one: `overflow: hidden` still scrolls
586
+ // programmatically, so the size ratio alone would paint a bar — and hand over a draggable
587
+ // thumb — for an axis the browser itself refuses to give a scrollbar to.
588
+ const { overflowX, overflowY } = this.window.getComputedStyle(this.viewportElement);
589
+ return [
590
+ !NON_SCROLLABLE_OVERFLOW.includes(overflowY) && Math.ceil((clientHeight / scrollHeight) * 100) < 100,
591
+ !NON_SCROLLABLE_OVERFLOW.includes(overflowX) && Math.ceil((clientWidth / scrollWidth) * 100) < 100
592
+ ];
593
+ }
594
+ getViewportMetrics() {
595
+ const element = this.viewportElement;
596
+ const style = this.window.getComputedStyle(element);
196
597
  return {
197
- ...defaultListeners,
198
- ...filterEvents(events, defaultListeners)
598
+ blockSize: element.clientHeight,
599
+ inlineSize: element.clientWidth,
600
+ paddingBlockStart: parseFloat(style.paddingBlockStart) || 0,
601
+ paddingInlineStart: parseFloat(style.paddingInlineStart) || 0
199
602
  };
200
603
  }
201
- dispatchEventIfHasObservers(eventEmitter, args) {
202
- // `observed` is available since RxJS@7.2 because `observers` is being deprecated.
203
- if (eventEmitter.observed || eventEmitter.observers.length > 0) {
204
- // This is required to re-enter the Angular zone to call the event handler in the Angular
205
- // zone too. This will not re-enter the Angular zone if emitter doesn't have any observers,
206
- // for instance, it's being listened: `<overlay-scrollbars (osInitialized)="..."`.
207
- // Events are dispatched outside of the Angular zone because instance is created in the
208
- // `<root>` zone
209
- this.ngZone.run(() => eventEmitter.emit(args));
604
+ // Start margins and insets move the sticky track from the content box to the padded scrollport;
605
+ // end margins cancel its layout contribution.
606
+ applyGeometry({ blockSize, inlineSize, paddingBlockStart, paddingInlineStart }) {
607
+ const setStyle = (property, value) => this.renderer.setStyle(this.nativeElement, property, coerceCssPixelValue(value));
608
+ // Clamped once and reused, so the size and the end margin cancel out by construction. Passing
609
+ // the unclamped value would break that on a zero-sized viewport: CSSOM silently drops the
610
+ // negative size while it accepts the positive margin paired with it, leaving the track a pixel
611
+ // tall inside a scrollport that has no room for it. That pixel changes `clientHeight`, which
612
+ // re-runs this method through the resize observer, which takes the pixel back — forever.
613
+ const trackBlockSize = Math.max(0, blockSize - 1);
614
+ const trackInlineSize = Math.max(0, inlineSize - 1);
615
+ setStyle('blockSize', trackBlockSize);
616
+ setStyle('marginBlockStart', -paddingBlockStart);
617
+ setStyle('marginBlockEnd', paddingBlockStart - trackBlockSize);
618
+ setStyle('insetBlockStart', -paddingBlockStart);
619
+ setStyle('minInlineSize', trackInlineSize);
620
+ setStyle('maxInlineSize', trackInlineSize);
621
+ setStyle('marginInlineStart', -paddingInlineStart);
622
+ setStyle('marginInlineEnd', paddingInlineStart - trackInlineSize);
623
+ setStyle('insetInlineStart', -paddingInlineStart);
624
+ }
625
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarTrack, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
626
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: KbqScrollbarTrack, isStandalone: true, selector: "kbq-scrollbar-track", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "hideDelay", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.kbq-scrollbar-track_hover": "mode() === 'hover'", "class.kbq-scrollbar-track_revealed": "revealed()", "class.kbq-animations-disabled": "animationsDisabled" }, classAttribute: "kbq-scrollbar-track" }, providers: [KbqScrollbarContentObserver], ngImport: i0, template: `
627
+ @if (visibility()[0]) {
628
+ <div
629
+ animate.enter="kbq-scrollbar-track__bar_enter"
630
+ animate.leave="kbq-scrollbar-track__bar_leave"
631
+ class="kbq-scrollbar-track__bar kbq-scrollbar-track__bar_vertical"
632
+ [class.kbq-scrollbar-track__bar_has-horizontal]="visibility()[1]"
633
+ [class.kbq-animations-disabled]="animationsDisabled"
634
+ (mousedown)="onBarPointerDown($event)"
635
+ >
636
+ <div
637
+ kbqScrollbarThumb
638
+ orientation="vertical"
639
+ class="kbq-scrollbar-track__thumb"
640
+ [class.kbq-animations-disabled]="animationsDisabled"
641
+ ></div>
642
+ </div>
643
+ }
644
+ @if (visibility()[1]) {
645
+ <div
646
+ animate.enter="kbq-scrollbar-track__bar_enter"
647
+ animate.leave="kbq-scrollbar-track__bar_leave"
648
+ class="kbq-scrollbar-track__bar kbq-scrollbar-track__bar_horizontal"
649
+ [class.kbq-scrollbar-track__bar_has-vertical]="visibility()[0]"
650
+ [class.kbq-animations-disabled]="animationsDisabled"
651
+ (mousedown)="onBarPointerDown($event)"
652
+ >
653
+ <div
654
+ kbqScrollbarThumb
655
+ orientation="horizontal"
656
+ class="kbq-scrollbar-track__thumb"
657
+ [class.kbq-animations-disabled]="animationsDisabled"
658
+ ></div>
659
+ </div>
210
660
  }
661
+ `, isInline: true, styles: ["@charset \"UTF-8\";:host{position:sticky;z-index:var(--kbq-scrollbar-track-z-index, 1000);display:block;flex-shrink:0;pointer-events:none;overflow:hidden;color:var(--kbq-scrollbar-color, currentColor)}@keyframes kbq-scrollbar-fade{0%{opacity:0}to{opacity:1}}.kbq-scrollbar-track__bar{position:absolute;inset-inline-end:0;background:var(--kbq-scrollbar-track-background, transparent);pointer-events:auto}.kbq-scrollbar-track__bar_enter,.kbq-scrollbar-track__bar_leave{animation:kbq-scrollbar-fade var(--kbq-scrollbar-transition-duration) ease-in-out}.kbq-scrollbar-track__bar_enter.kbq-animations-disabled,.kbq-scrollbar-track__bar_leave.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-scrollbar-track__bar_enter,.kbq-scrollbar-track__bar_leave{animation:none;transition:none}}.kbq-scrollbar-track__bar_leave{animation-direction:reverse}.kbq-scrollbar-track__bar_vertical{inset-block:0;inline-size:var(--kbq-scrollbar-track-size)}.kbq-scrollbar-track__bar_horizontal{inset-block-end:0;inset-inline-start:0;block-size:var(--kbq-scrollbar-track-size)}.kbq-scrollbar-track__bar_has-horizontal{inset-block-end:var(--kbq-scrollbar-track-size)}.kbq-scrollbar-track__bar_has-vertical{inset-inline-end:var(--kbq-scrollbar-track-size)}.kbq-scrollbar-track__thumb{transition:background-color var(--kbq-scrollbar-transition-duration) ease;position:absolute;border:var(--kbq-scrollbar-thumb-gap) solid transparent;border-radius:var(--kbq-size-border-radius);box-sizing:border-box;background-color:var(--kbq-scrollbar-thumb-default-background);background-clip:content-box;cursor:default;-webkit-user-select:none;user-select:none;pointer-events:auto}.kbq-scrollbar-track__thumb.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-scrollbar-track__thumb{animation:none;transition:none}}.kbq-scrollbar-track__thumb:hover{background-color:var(--kbq-scrollbar-thumb-hover-background)}.kbq-scrollbar-track__thumb:active{background-color:var(--kbq-scrollbar-thumb-active-background)}.kbq-scrollbar-track__bar_vertical .kbq-scrollbar-track__thumb{inset-inline:0;min-block-size:calc(var(--kbq-scrollbar-thumb-min-size) + var(--kbq-scrollbar-thumb-gap) * 2)}.kbq-scrollbar-track__bar_horizontal .kbq-scrollbar-track__thumb{inset-block:0;min-inline-size:calc(var(--kbq-scrollbar-thumb-min-size) + var(--kbq-scrollbar-thumb-gap) * 2)}\n"], dependencies: [{ kind: "directive", type: KbqScrollbarThumb, selector: "[kbqScrollbarThumb]", inputs: ["orientation"], exportAs: ["kbqScrollbarThumb"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
662
+ }
663
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarTrack, decorators: [{
664
+ type: Component,
665
+ args: [{ selector: TRACK_TAG, imports: [KbqScrollbarThumb], template: `
666
+ @if (visibility()[0]) {
667
+ <div
668
+ animate.enter="kbq-scrollbar-track__bar_enter"
669
+ animate.leave="kbq-scrollbar-track__bar_leave"
670
+ class="kbq-scrollbar-track__bar kbq-scrollbar-track__bar_vertical"
671
+ [class.kbq-scrollbar-track__bar_has-horizontal]="visibility()[1]"
672
+ [class.kbq-animations-disabled]="animationsDisabled"
673
+ (mousedown)="onBarPointerDown($event)"
674
+ >
675
+ <div
676
+ kbqScrollbarThumb
677
+ orientation="vertical"
678
+ class="kbq-scrollbar-track__thumb"
679
+ [class.kbq-animations-disabled]="animationsDisabled"
680
+ ></div>
681
+ </div>
682
+ }
683
+ @if (visibility()[1]) {
684
+ <div
685
+ animate.enter="kbq-scrollbar-track__bar_enter"
686
+ animate.leave="kbq-scrollbar-track__bar_leave"
687
+ class="kbq-scrollbar-track__bar kbq-scrollbar-track__bar_horizontal"
688
+ [class.kbq-scrollbar-track__bar_has-vertical]="visibility()[0]"
689
+ [class.kbq-animations-disabled]="animationsDisabled"
690
+ (mousedown)="onBarPointerDown($event)"
691
+ >
692
+ <div
693
+ kbqScrollbarThumb
694
+ orientation="horizontal"
695
+ class="kbq-scrollbar-track__thumb"
696
+ [class.kbq-animations-disabled]="animationsDisabled"
697
+ ></div>
698
+ </div>
699
+ }
700
+ `, providers: [KbqScrollbarContentObserver], changeDetection: ChangeDetectionStrategy.OnPush, host: {
701
+ class: 'kbq-scrollbar-track',
702
+ '[class.kbq-scrollbar-track_hover]': "mode() === 'hover'",
703
+ '[class.kbq-scrollbar-track_revealed]': 'revealed()',
704
+ '[class.kbq-animations-disabled]': 'animationsDisabled'
705
+ }, styles: ["@charset \"UTF-8\";:host{position:sticky;z-index:var(--kbq-scrollbar-track-z-index, 1000);display:block;flex-shrink:0;pointer-events:none;overflow:hidden;color:var(--kbq-scrollbar-color, currentColor)}@keyframes kbq-scrollbar-fade{0%{opacity:0}to{opacity:1}}.kbq-scrollbar-track__bar{position:absolute;inset-inline-end:0;background:var(--kbq-scrollbar-track-background, transparent);pointer-events:auto}.kbq-scrollbar-track__bar_enter,.kbq-scrollbar-track__bar_leave{animation:kbq-scrollbar-fade var(--kbq-scrollbar-transition-duration) ease-in-out}.kbq-scrollbar-track__bar_enter.kbq-animations-disabled,.kbq-scrollbar-track__bar_leave.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-scrollbar-track__bar_enter,.kbq-scrollbar-track__bar_leave{animation:none;transition:none}}.kbq-scrollbar-track__bar_leave{animation-direction:reverse}.kbq-scrollbar-track__bar_vertical{inset-block:0;inline-size:var(--kbq-scrollbar-track-size)}.kbq-scrollbar-track__bar_horizontal{inset-block-end:0;inset-inline-start:0;block-size:var(--kbq-scrollbar-track-size)}.kbq-scrollbar-track__bar_has-horizontal{inset-block-end:var(--kbq-scrollbar-track-size)}.kbq-scrollbar-track__bar_has-vertical{inset-inline-end:var(--kbq-scrollbar-track-size)}.kbq-scrollbar-track__thumb{transition:background-color var(--kbq-scrollbar-transition-duration) ease;position:absolute;border:var(--kbq-scrollbar-thumb-gap) solid transparent;border-radius:var(--kbq-size-border-radius);box-sizing:border-box;background-color:var(--kbq-scrollbar-thumb-default-background);background-clip:content-box;cursor:default;-webkit-user-select:none;user-select:none;pointer-events:auto}.kbq-scrollbar-track__thumb.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-scrollbar-track__thumb{animation:none;transition:none}}.kbq-scrollbar-track__thumb:hover{background-color:var(--kbq-scrollbar-thumb-hover-background)}.kbq-scrollbar-track__thumb:active{background-color:var(--kbq-scrollbar-thumb-active-background)}.kbq-scrollbar-track__bar_vertical .kbq-scrollbar-track__thumb{inset-inline:0;min-block-size:calc(var(--kbq-scrollbar-thumb-min-size) + var(--kbq-scrollbar-thumb-gap) * 2)}.kbq-scrollbar-track__bar_horizontal .kbq-scrollbar-track__thumb{inset-block:0;min-inline-size:calc(var(--kbq-scrollbar-thumb-min-size) + var(--kbq-scrollbar-thumb-gap) * 2)}\n"] }]
706
+ }], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: true }] }], hideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideDelay", required: true }] }] } });
707
+ /** Custom scrollbar wrapper: projects content and overlays a scrollbar track over it (created by its {@link KbqScrollbarViewport} host directive). */
708
+ class KbqScrollbar {
709
+ constructor() {
710
+ this.options = inject(KBQ_SCROLLBAR_OPTIONS);
711
+ this.viewport = inject(KbqScrollbarViewport);
712
+ /** Visibility mode for the scrollbar. Defaults to the app-wide {@link KBQ_SCROLLBAR_OPTIONS}. */
713
+ this.mode = input(this.options.mode, { ...(ngDevMode ? { debugName: "mode" } : /* istanbul ignore next */ {}), alias: 'kbqScrollbarMode' });
714
+ /**
715
+ * How long the scroll-revealed `hover`-mode track stays visible after scrolling stops, in milliseconds.
716
+ * Defaults to the app-wide {@link KBQ_SCROLLBAR_OPTIONS}.
717
+ */
718
+ this.hideDelay = input(this.options.hideDelay, { ...(ngDevMode ? { debugName: "hideDelay" } : /* istanbul ignore next */ {}), alias: 'kbqScrollbarHideDelay',
719
+ transform: numberAttribute });
720
+ /** Emits on every native `scroll` event of the viewport. Emits outside Angular's zone — see `CdkScrollable.elementScrolled`. */
721
+ this.scrollChanges = this.viewport.scrollChanges;
722
+ }
723
+ /** The scrollbar's native scrollable element. */
724
+ getNativeElement() {
725
+ return this.viewport.getNativeElement();
726
+ }
727
+ /** Scrolls to the specified offsets. RTL-normalized — see `CdkScrollable.scrollTo`. */
728
+ scrollTo(options) {
729
+ this.viewport.scrollTo(options);
730
+ }
731
+ /** Scrolls to the start of the vertical axis. */
732
+ scrollToTop(behavior) {
733
+ this.viewport.scrollToTop(behavior);
734
+ }
735
+ /** Scrolls to the end of the vertical axis. */
736
+ scrollToBottom(behavior) {
737
+ this.viewport.scrollToBottom(behavior);
738
+ }
739
+ /** Scrolls to the logical start of the horizontal axis — the right edge in RTL, left in LTR. */
740
+ scrollStart(behavior) {
741
+ this.viewport.scrollStart(behavior);
742
+ }
743
+ /** Scrolls to the logical end of the horizontal axis — the left edge in RTL, right in LTR. */
744
+ scrollEnd(behavior) {
745
+ this.viewport.scrollEnd(behavior);
746
+ }
747
+ /** Scrolls `target` (an element, or a selector resolved against this scrollbar) into view. */
748
+ scrollToElement(target, options) {
749
+ this.viewport.scrollToElement(target, options);
750
+ }
751
+ /** Scrolls `target` to the center of the viewport. */
752
+ scrollIntoView(target, behavior) {
753
+ this.viewport.scrollIntoView(target, behavior);
754
+ }
755
+ /** Briefly reveals the scrollbar track — see {@link KbqScrollbarViewport.flashScrollIndicators}. */
756
+ flashScrollIndicators() {
757
+ this.viewport.flashScrollIndicators();
211
758
  }
212
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqScrollbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
213
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.30", type: KbqScrollbar, isStandalone: true, selector: "kbq-scrollbar, [kbq-scrollbar]", inputs: { initializationTarget: { classPropertyName: "initializationTarget", publicName: "initializationTarget", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, events: { classPropertyName: "events", publicName: "events", isSignal: true, isRequired: false, transformFunction: null }, defer: { classPropertyName: "defer", publicName: "defer", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onInitialize: "onInitialize", onUpdate: "onUpdate", onDestroy: "onDestroy", onScroll: "onScroll" }, host: { attributes: { "data-overlayscrollbars-initialize": "" }, classAttribute: "kbq-scrollbar-component" }, providers: [
214
- { provide: KBQ_OVERFLOW_SHADOW_SOURCE, useExisting: forwardRef((() => KbqScrollbar)) }
215
- ], viewQueries: [{ propertyName: "contentElement", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "kbqScrollbarDirective", first: true, predicate: ["content"], descendants: true, read: KbqScrollbarDirective, isSignal: true }], exportAs: ["kbqScrollbar"], ngImport: i0, template: `
216
- <div
217
- #content
218
- data-overlayscrollbars-contents=""
219
- kbqScrollbar
220
- [options]="options()"
221
- [events]="mergeEvents()"
222
- [defer]="defer()"
223
- >
759
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
760
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.25", type: KbqScrollbar, isStandalone: true, selector: "kbq-scrollbar", inputs: { mode: { classPropertyName: "mode", publicName: "kbqScrollbarMode", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "kbqScrollbarHideDelay", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["kbqScrollbar"], hostDirectives: [{ directive: KbqScrollbarViewport, inputs: ["kbqScrollbarMode", "kbqScrollbarMode", "kbqScrollbarHideDelay", "kbqScrollbarHideDelay"] }], ngImport: i0, template: `
761
+ <div class="kbq-scrollbar__content">
224
762
  <ng-content />
225
763
  </div>
226
- `, isInline: true, styles: [".kbq-scrollbar-component .os-scrollbar-vertical{padding:var(--kbq-scrollbar-size-track-padding-vertical) var(--kbq-scrollbar-size-track-padding-horizontal);bottom:var(--kbq-scrollbar-size-track-dimension);width:var(--kbq-scrollbar-size-track-dimension)}.kbq-scrollbar-component .os-scrollbar-vertical .os-scrollbar-handle{transition:opacity .15s,background-color .15s,border-color .15s,width .15s;border:var(--kbq-scrollbar-size-track-padding-horizontal) solid;width:100%;min-height:var(--kbq-scrollbar-size-thumb-min-size)}.kbq-scrollbar-component .os-scrollbar-vertical:hover .os-scrollbar-handle,.kbq-scrollbar-component .os-scrollbar-vertical:active .os-scrollbar-handle{width:100%}.kbq-scrollbar-component .os-scrollbar-horizontal{padding:var(--kbq-scrollbar-size-track-padding-horizontal) var(--kbq-scrollbar-size-track-padding-vertical);right:var(--kbq-scrollbar-size-track-dimension);height:var(--kbq-scrollbar-size-track-dimension)}.kbq-scrollbar-component .os-scrollbar-horizontal .os-scrollbar-handle{transition:opacity .15s,background-color .15s,border-color .15s,height .15s;border:var(--kbq-scrollbar-size-track-padding-horizontal) solid;height:100%;min-width:var(--kbq-scrollbar-size-thumb-min-size)}.kbq-scrollbar-component .os-scrollbar-horizontal:hover .os-scrollbar-handle,.kbq-scrollbar-component .os-scrollbar-horizontal:active .os-scrollbar-handle{height:100%}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:before,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-track{box-sizing:border-box;border-radius:var(--kbq-scrollbar-size-thumb-border-radius)}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-track{border-width:calc((var(--kbq-scrollbar-size-track-dimension) - var(--kbq-scrollbar-size-thumb-width)) / 4)!important;transition:opacity .15s,background-color .15s,border-color .15s}[data-overlayscrollbars-contents]:focus-visible{outline:none}.kbq-scrollbar-component.kbq-hover .os-scrollbar .os-scrollbar-handle:before,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:hover:before{border-color:var(--kbq-scrollbar-thumb-hover-background);background-color:var(--kbq-scrollbar-thumb-hover-background)}.kbq-scrollbar-component.kbq-active .os-scrollbar .os-scrollbar-handle:before,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:active:before{border-color:var(--kbq-scrollbar-thumb-active-background);background-color:var(--kbq-scrollbar-thumb-active-background)}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:before{border-color:var(--kbq-scrollbar-thumb-default-background);background-color:var(--kbq-scrollbar-thumb-default-background)}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-track,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle{border-style:solid;border-color:var(--kbq-scrollbar-track-default-border)!important;background-color:var(--kbq-scrollbar-track-default-background)}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-track:hover,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:hover{border-color:var(--kbq-scrollbar-track-hover-border);background:var(--kbq-scrollbar-track-hover-background)}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-track:active,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:active{border-color:var(--kbq-scrollbar-track-active-border);background:var(--kbq-scrollbar-track-active-background)}.os-size-observer,.os-size-observer-listener{scroll-behavior:auto!important;direction:inherit;pointer-events:none;overflow:hidden;visibility:hidden;box-sizing:border-box}.os-size-observer,.os-size-observer-listener,.os-size-observer-listener-item,.os-size-observer-listener-item-final{writing-mode:horizontal-tb;position:absolute;left:0;top:0}.os-size-observer{z-index:-1;contain:strict;display:flex;flex-direction:row;flex-wrap:nowrap;padding:inherit;border:inherit;box-sizing:inherit;margin:-133px;inset:0;transform:scale(.1)}.os-size-observer:before{content:\"\";flex:none;box-sizing:inherit;padding:10px;width:10px;height:10px}.os-size-observer-appear{animation:os-size-observer-appear-animation 1ms forwards}.os-size-observer-listener{box-sizing:border-box;position:relative;flex:auto;padding:inherit;border:inherit;margin:-133px;transform:scale(10)}.os-size-observer-listener.ltr{margin-right:-266px;margin-left:0}.os-size-observer-listener.rtl{margin-left:-266px;margin-right:0}.os-size-observer-listener:empty:before{content:\"\";width:100%;height:100%}.os-size-observer-listener:empty:before,.os-size-observer-listener>.os-size-observer-listener-item{display:block;position:relative;padding:inherit;border:inherit;box-sizing:content-box;flex:auto}.os-size-observer-listener-scroll{box-sizing:border-box;display:flex}.os-size-observer-listener-item{right:0;bottom:0;overflow:hidden;direction:ltr;flex:none}.os-size-observer-listener-item-final{transition:none}@keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}.os-trinsic-observer{flex:none;box-sizing:border-box;position:relative;max-width:0;max-height:1px;padding:0;margin:0;border:none;overflow:hidden;z-index:-1;height:0;top:calc(100% + 1px);contain:strict}.os-trinsic-observer:not(:empty){height:calc(100% + 1px);top:-1px}.os-trinsic-observer:not(:empty)>.os-size-observer{width:1000%;height:1000%;min-height:1px;min-width:1px}.os-environment{scroll-behavior:auto!important;position:fixed;opacity:0;visibility:hidden;overflow:scroll;height:200px;width:200px;z-index:-1}.os-environment div{width:200%;height:200%;margin:10px 0}.os-environment.os-environment-flexbox-glue{display:flex;flex-direction:row;flex-wrap:nowrap;height:auto;width:auto;min-height:200px;min-width:200px}.os-environment.os-environment-flexbox-glue div{flex:auto;width:auto;height:auto;max-height:100%;max-width:100%;margin:0}.os-environment.os-environment-flexbox-glue-max{max-height:200px}.os-environment.os-environment-flexbox-glue-max div{overflow:visible}.os-environment.os-environment-flexbox-glue-max div:before{content:\"\";display:block;height:999px;width:999px}.os-environment,[data-overlayscrollbars-viewport]{-ms-overflow-style:scrollbar!important}[data-overlayscrollbars-initialize],[data-overlayscrollbars~=scrollbarHidden],[data-overlayscrollbars-viewport~=scrollbarHidden],.os-environment-scrollbar-hidden{scrollbar-width:none!important}[data-overlayscrollbars-initialize]::-webkit-scrollbar,[data-overlayscrollbars-initialize]::-webkit-scrollbar-corner,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar-corner,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar-corner,.os-environment-scrollbar-hidden::-webkit-scrollbar,.os-environment-scrollbar-hidden::-webkit-scrollbar-corner{-webkit-appearance:none!important;appearance:none!important;display:none!important;width:0!important;height:0!important}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars]):not(html):not(body){overflow:auto}html[data-overlayscrollbars]{box-sizing:border-box;margin:0}html[data-overlayscrollbars~=body],html[data-overlayscrollbars~=body]>body{width:100%;height:100%}html[data-overlayscrollbars~=viewport]>body{overflow:visible}[data-overlayscrollbars~=host],[data-overlayscrollbars-padding]{display:flex;align-items:stretch!important;flex-direction:row!important;flex-wrap:nowrap!important}[data-overlayscrollbars-viewport][data-overlayscrollbars-viewport~=arrange]:before{content:\"\";position:absolute;pointer-events:none;z-index:-1;min-width:1px;min-height:1px;width:0;height:0}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]{box-sizing:inherit;position:relative;flex:auto!important;height:auto;width:100%;min-width:0;padding:0;margin:0;border:none;z-index:0;overflow:hidden}[data-overlayscrollbars~=host],[data-overlayscrollbars~=viewport]{position:relative;overflow:hidden}[data-overlayscrollbars~=overflowVisible],[data-overlayscrollbars-padding~=overflowVisible],[data-overlayscrollbars-viewport~=overflowVisible]{overflow:visible}[data-overlayscrollbars-overflow-x=hidden]{overflow-x:hidden;overflow-y:hidden}[data-overlayscrollbars-overflow-x=scroll]{overflow-x:scroll}[data-overlayscrollbars-overflow-y=scroll]{overflow-y:scroll}[data-overlayscrollbars~=scrollbarPressed],[data-overlayscrollbars~=scrollbarPressed] [data-overlayscrollbars-viewport]{scroll-behavior:auto!important}[data-overlayscrollbars-content]{box-sizing:inherit}[data-overlayscrollbars-contents]:not([data-overlayscrollbars-padding]):not([data-overlayscrollbars-viewport]):not([data-overlayscrollbars-content]){display:contents}[data-overlayscrollbars-grid],[data-overlayscrollbars-grid] [data-overlayscrollbars-padding]{display:grid;grid-template:1fr/1fr}[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding],[data-overlayscrollbars-grid]>[data-overlayscrollbars-viewport],[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding]>[data-overlayscrollbars-viewport]{height:auto!important;width:auto!important}.os-scrollbar{box-sizing:border-box;contain:size layout;contain:size layout style;transition:opacity .15s,visibility .15s,top .15s,right .15s,bottom .15s,left .15s;pointer-events:none;position:absolute;opacity:0;visibility:hidden}body>.os-scrollbar{position:fixed;z-index:99999}.os-scrollbar-transitionless{transition:none}.os-scrollbar-track{position:relative;direction:ltr!important;padding:0!important;border:none!important}.os-scrollbar-handle{position:absolute}.os-scrollbar-track,.os-scrollbar-handle{pointer-events:none;width:100%;height:100%}.os-scrollbar.os-scrollbar-track-interactive .os-scrollbar-track,.os-scrollbar.os-scrollbar-handle-interactive .os-scrollbar-handle{pointer-events:auto;touch-action:none}.os-scrollbar-horizontal{bottom:0;left:0}.os-scrollbar-vertical{top:0;right:0}.os-scrollbar-rtl.os-scrollbar-horizontal{right:0}.os-scrollbar-rtl.os-scrollbar-vertical{right:auto;left:0}.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-auto-hide.os-scrollbar-auto-hide-hidden{opacity:0;visibility:hidden}.os-scrollbar-interaction.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-unusable,.os-scrollbar-unusable *,.os-scrollbar-wheel,.os-scrollbar-wheel *{pointer-events:none!important}.os-scrollbar-unusable .os-scrollbar-handle{opacity:0!important;transition:none!important}.os-scrollbar-horizontal .os-scrollbar-handle{bottom:0}.os-scrollbar-vertical .os-scrollbar-handle{right:0}.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle{right:auto;left:0}.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless.os-scrollbar-rtl{left:0;right:0}.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless.os-scrollbar-rtl{top:0;bottom:0}.os-scrollbar .os-scrollbar-handle:before{content:\"\";position:absolute;inset:0;display:block}[data-overlayscrollbars~=updating]>.os-scrollbar,.os-theme-none.os-scrollbar{display:none!important}\n", ":where(.kbq-scrollbar-component){--kbq-scrollbar-size-track-dimension: var(--kbq-size-l);--kbq-scrollbar-size-track-padding-vertical: var(--kbq-size-3xs);--kbq-scrollbar-size-track-padding-horizontal: var(--kbq-size-3xs);--kbq-scrollbar-size-thumb-width: var(--kbq-size-s);--kbq-scrollbar-size-thumb-min-size: var(--kbq-size-xl);--kbq-scrollbar-size-thumb-border-radius: var(--kbq-size-s);--kbq-scrollbar-thumb-default-background: var(--kbq-semantic-contrast-a3, var(--kbq-palette-grey-50-a32));--kbq-scrollbar-thumb-hover-background: var(--kbq-semantic-contrast-a4, var(--kbq-palette-grey-50-a48));--kbq-scrollbar-thumb-active-background: var(--kbq-semantic-contrast-a5, var(--kbq-palette-grey-20-a55));--kbq-scrollbar-thumb-disabled-background: var(--kbq-states-icon-disabled);--kbq-scrollbar-track-default-border: transparent;--kbq-scrollbar-track-default-background: transparent;--kbq-scrollbar-track-hover-border: transparent;--kbq-scrollbar-track-hover-background: transparent;--kbq-scrollbar-track-active-border: transparent;--kbq-scrollbar-track-active-background: transparent}:where(.kbq-dark .kbq-scrollbar-component){--kbq-scrollbar-thumb-default-background: var(--kbq-semantic-dark-contrast-a9, var(--kbq-palette-grey-50-a48));--kbq-scrollbar-thumb-hover-background: var(--kbq-semantic-dark-contrast-a10, var(--kbq-palette-grey-50-a60));--kbq-scrollbar-thumb-active-background: var(--kbq-semantic-dark-contrast-a11, var(--kbq-palette-grey-50-a80))}\n"], dependencies: [{ kind: "directive", type: KbqScrollbarDirective, selector: "[kbqScrollbar]", inputs: ["options", "events", "defer"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
764
+ `, isInline: true, styles: [":host{position:relative;display:flex;flex:1;min-inline-size:0;min-block-size:0;max-block-size:100%;isolation:isolate;overflow:auto}.kbq-scrollbar__content{isolation:isolate;flex:1;flex-basis:auto;inline-size:100%;block-size:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
227
765
  }
228
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqScrollbar, decorators: [{
766
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbar, decorators: [{
229
767
  type: Component,
230
- args: [{ selector: 'kbq-scrollbar, [kbq-scrollbar]', imports: [KbqScrollbarDirective], template: `
231
- <div
232
- #content
233
- data-overlayscrollbars-contents=""
234
- kbqScrollbar
235
- [options]="options()"
236
- [events]="mergeEvents()"
237
- [defer]="defer()"
238
- >
768
+ args: [{ selector: 'kbq-scrollbar', template: `
769
+ <div class="kbq-scrollbar__content">
239
770
  <ng-content />
240
771
  </div>
241
- `, providers: [
242
- { provide: KBQ_OVERFLOW_SHADOW_SOURCE, useExisting: forwardRef((() => KbqScrollbar)) }
243
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
244
- 'data-overlayscrollbars-initialize': '',
245
- class: 'kbq-scrollbar-component'
246
- }, exportAs: 'kbqScrollbar', styles: [".kbq-scrollbar-component .os-scrollbar-vertical{padding:var(--kbq-scrollbar-size-track-padding-vertical) var(--kbq-scrollbar-size-track-padding-horizontal);bottom:var(--kbq-scrollbar-size-track-dimension);width:var(--kbq-scrollbar-size-track-dimension)}.kbq-scrollbar-component .os-scrollbar-vertical .os-scrollbar-handle{transition:opacity .15s,background-color .15s,border-color .15s,width .15s;border:var(--kbq-scrollbar-size-track-padding-horizontal) solid;width:100%;min-height:var(--kbq-scrollbar-size-thumb-min-size)}.kbq-scrollbar-component .os-scrollbar-vertical:hover .os-scrollbar-handle,.kbq-scrollbar-component .os-scrollbar-vertical:active .os-scrollbar-handle{width:100%}.kbq-scrollbar-component .os-scrollbar-horizontal{padding:var(--kbq-scrollbar-size-track-padding-horizontal) var(--kbq-scrollbar-size-track-padding-vertical);right:var(--kbq-scrollbar-size-track-dimension);height:var(--kbq-scrollbar-size-track-dimension)}.kbq-scrollbar-component .os-scrollbar-horizontal .os-scrollbar-handle{transition:opacity .15s,background-color .15s,border-color .15s,height .15s;border:var(--kbq-scrollbar-size-track-padding-horizontal) solid;height:100%;min-width:var(--kbq-scrollbar-size-thumb-min-size)}.kbq-scrollbar-component .os-scrollbar-horizontal:hover .os-scrollbar-handle,.kbq-scrollbar-component .os-scrollbar-horizontal:active .os-scrollbar-handle{height:100%}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:before,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-track{box-sizing:border-box;border-radius:var(--kbq-scrollbar-size-thumb-border-radius)}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-track{border-width:calc((var(--kbq-scrollbar-size-track-dimension) - var(--kbq-scrollbar-size-thumb-width)) / 4)!important;transition:opacity .15s,background-color .15s,border-color .15s}[data-overlayscrollbars-contents]:focus-visible{outline:none}.kbq-scrollbar-component.kbq-hover .os-scrollbar .os-scrollbar-handle:before,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:hover:before{border-color:var(--kbq-scrollbar-thumb-hover-background);background-color:var(--kbq-scrollbar-thumb-hover-background)}.kbq-scrollbar-component.kbq-active .os-scrollbar .os-scrollbar-handle:before,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:active:before{border-color:var(--kbq-scrollbar-thumb-active-background);background-color:var(--kbq-scrollbar-thumb-active-background)}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:before{border-color:var(--kbq-scrollbar-thumb-default-background);background-color:var(--kbq-scrollbar-thumb-default-background)}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-track,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle{border-style:solid;border-color:var(--kbq-scrollbar-track-default-border)!important;background-color:var(--kbq-scrollbar-track-default-background)}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-track:hover,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:hover{border-color:var(--kbq-scrollbar-track-hover-border);background:var(--kbq-scrollbar-track-hover-background)}.kbq-scrollbar-component .os-scrollbar .os-scrollbar-track:active,.kbq-scrollbar-component .os-scrollbar .os-scrollbar-handle:active{border-color:var(--kbq-scrollbar-track-active-border);background:var(--kbq-scrollbar-track-active-background)}.os-size-observer,.os-size-observer-listener{scroll-behavior:auto!important;direction:inherit;pointer-events:none;overflow:hidden;visibility:hidden;box-sizing:border-box}.os-size-observer,.os-size-observer-listener,.os-size-observer-listener-item,.os-size-observer-listener-item-final{writing-mode:horizontal-tb;position:absolute;left:0;top:0}.os-size-observer{z-index:-1;contain:strict;display:flex;flex-direction:row;flex-wrap:nowrap;padding:inherit;border:inherit;box-sizing:inherit;margin:-133px;inset:0;transform:scale(.1)}.os-size-observer:before{content:\"\";flex:none;box-sizing:inherit;padding:10px;width:10px;height:10px}.os-size-observer-appear{animation:os-size-observer-appear-animation 1ms forwards}.os-size-observer-listener{box-sizing:border-box;position:relative;flex:auto;padding:inherit;border:inherit;margin:-133px;transform:scale(10)}.os-size-observer-listener.ltr{margin-right:-266px;margin-left:0}.os-size-observer-listener.rtl{margin-left:-266px;margin-right:0}.os-size-observer-listener:empty:before{content:\"\";width:100%;height:100%}.os-size-observer-listener:empty:before,.os-size-observer-listener>.os-size-observer-listener-item{display:block;position:relative;padding:inherit;border:inherit;box-sizing:content-box;flex:auto}.os-size-observer-listener-scroll{box-sizing:border-box;display:flex}.os-size-observer-listener-item{right:0;bottom:0;overflow:hidden;direction:ltr;flex:none}.os-size-observer-listener-item-final{transition:none}@keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}.os-trinsic-observer{flex:none;box-sizing:border-box;position:relative;max-width:0;max-height:1px;padding:0;margin:0;border:none;overflow:hidden;z-index:-1;height:0;top:calc(100% + 1px);contain:strict}.os-trinsic-observer:not(:empty){height:calc(100% + 1px);top:-1px}.os-trinsic-observer:not(:empty)>.os-size-observer{width:1000%;height:1000%;min-height:1px;min-width:1px}.os-environment{scroll-behavior:auto!important;position:fixed;opacity:0;visibility:hidden;overflow:scroll;height:200px;width:200px;z-index:-1}.os-environment div{width:200%;height:200%;margin:10px 0}.os-environment.os-environment-flexbox-glue{display:flex;flex-direction:row;flex-wrap:nowrap;height:auto;width:auto;min-height:200px;min-width:200px}.os-environment.os-environment-flexbox-glue div{flex:auto;width:auto;height:auto;max-height:100%;max-width:100%;margin:0}.os-environment.os-environment-flexbox-glue-max{max-height:200px}.os-environment.os-environment-flexbox-glue-max div{overflow:visible}.os-environment.os-environment-flexbox-glue-max div:before{content:\"\";display:block;height:999px;width:999px}.os-environment,[data-overlayscrollbars-viewport]{-ms-overflow-style:scrollbar!important}[data-overlayscrollbars-initialize],[data-overlayscrollbars~=scrollbarHidden],[data-overlayscrollbars-viewport~=scrollbarHidden],.os-environment-scrollbar-hidden{scrollbar-width:none!important}[data-overlayscrollbars-initialize]::-webkit-scrollbar,[data-overlayscrollbars-initialize]::-webkit-scrollbar-corner,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar-corner,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar-corner,.os-environment-scrollbar-hidden::-webkit-scrollbar,.os-environment-scrollbar-hidden::-webkit-scrollbar-corner{-webkit-appearance:none!important;appearance:none!important;display:none!important;width:0!important;height:0!important}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars]):not(html):not(body){overflow:auto}html[data-overlayscrollbars]{box-sizing:border-box;margin:0}html[data-overlayscrollbars~=body],html[data-overlayscrollbars~=body]>body{width:100%;height:100%}html[data-overlayscrollbars~=viewport]>body{overflow:visible}[data-overlayscrollbars~=host],[data-overlayscrollbars-padding]{display:flex;align-items:stretch!important;flex-direction:row!important;flex-wrap:nowrap!important}[data-overlayscrollbars-viewport][data-overlayscrollbars-viewport~=arrange]:before{content:\"\";position:absolute;pointer-events:none;z-index:-1;min-width:1px;min-height:1px;width:0;height:0}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]{box-sizing:inherit;position:relative;flex:auto!important;height:auto;width:100%;min-width:0;padding:0;margin:0;border:none;z-index:0;overflow:hidden}[data-overlayscrollbars~=host],[data-overlayscrollbars~=viewport]{position:relative;overflow:hidden}[data-overlayscrollbars~=overflowVisible],[data-overlayscrollbars-padding~=overflowVisible],[data-overlayscrollbars-viewport~=overflowVisible]{overflow:visible}[data-overlayscrollbars-overflow-x=hidden]{overflow-x:hidden;overflow-y:hidden}[data-overlayscrollbars-overflow-x=scroll]{overflow-x:scroll}[data-overlayscrollbars-overflow-y=scroll]{overflow-y:scroll}[data-overlayscrollbars~=scrollbarPressed],[data-overlayscrollbars~=scrollbarPressed] [data-overlayscrollbars-viewport]{scroll-behavior:auto!important}[data-overlayscrollbars-content]{box-sizing:inherit}[data-overlayscrollbars-contents]:not([data-overlayscrollbars-padding]):not([data-overlayscrollbars-viewport]):not([data-overlayscrollbars-content]){display:contents}[data-overlayscrollbars-grid],[data-overlayscrollbars-grid] [data-overlayscrollbars-padding]{display:grid;grid-template:1fr/1fr}[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding],[data-overlayscrollbars-grid]>[data-overlayscrollbars-viewport],[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding]>[data-overlayscrollbars-viewport]{height:auto!important;width:auto!important}.os-scrollbar{box-sizing:border-box;contain:size layout;contain:size layout style;transition:opacity .15s,visibility .15s,top .15s,right .15s,bottom .15s,left .15s;pointer-events:none;position:absolute;opacity:0;visibility:hidden}body>.os-scrollbar{position:fixed;z-index:99999}.os-scrollbar-transitionless{transition:none}.os-scrollbar-track{position:relative;direction:ltr!important;padding:0!important;border:none!important}.os-scrollbar-handle{position:absolute}.os-scrollbar-track,.os-scrollbar-handle{pointer-events:none;width:100%;height:100%}.os-scrollbar.os-scrollbar-track-interactive .os-scrollbar-track,.os-scrollbar.os-scrollbar-handle-interactive .os-scrollbar-handle{pointer-events:auto;touch-action:none}.os-scrollbar-horizontal{bottom:0;left:0}.os-scrollbar-vertical{top:0;right:0}.os-scrollbar-rtl.os-scrollbar-horizontal{right:0}.os-scrollbar-rtl.os-scrollbar-vertical{right:auto;left:0}.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-auto-hide.os-scrollbar-auto-hide-hidden{opacity:0;visibility:hidden}.os-scrollbar-interaction.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-unusable,.os-scrollbar-unusable *,.os-scrollbar-wheel,.os-scrollbar-wheel *{pointer-events:none!important}.os-scrollbar-unusable .os-scrollbar-handle{opacity:0!important;transition:none!important}.os-scrollbar-horizontal .os-scrollbar-handle{bottom:0}.os-scrollbar-vertical .os-scrollbar-handle{right:0}.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle{right:auto;left:0}.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless.os-scrollbar-rtl{left:0;right:0}.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless.os-scrollbar-rtl{top:0;bottom:0}.os-scrollbar .os-scrollbar-handle:before{content:\"\";position:absolute;inset:0;display:block}[data-overlayscrollbars~=updating]>.os-scrollbar,.os-theme-none.os-scrollbar{display:none!important}\n", ":where(.kbq-scrollbar-component){--kbq-scrollbar-size-track-dimension: var(--kbq-size-l);--kbq-scrollbar-size-track-padding-vertical: var(--kbq-size-3xs);--kbq-scrollbar-size-track-padding-horizontal: var(--kbq-size-3xs);--kbq-scrollbar-size-thumb-width: var(--kbq-size-s);--kbq-scrollbar-size-thumb-min-size: var(--kbq-size-xl);--kbq-scrollbar-size-thumb-border-radius: var(--kbq-size-s);--kbq-scrollbar-thumb-default-background: var(--kbq-semantic-contrast-a3, var(--kbq-palette-grey-50-a32));--kbq-scrollbar-thumb-hover-background: var(--kbq-semantic-contrast-a4, var(--kbq-palette-grey-50-a48));--kbq-scrollbar-thumb-active-background: var(--kbq-semantic-contrast-a5, var(--kbq-palette-grey-20-a55));--kbq-scrollbar-thumb-disabled-background: var(--kbq-states-icon-disabled);--kbq-scrollbar-track-default-border: transparent;--kbq-scrollbar-track-default-background: transparent;--kbq-scrollbar-track-hover-border: transparent;--kbq-scrollbar-track-hover-background: transparent;--kbq-scrollbar-track-active-border: transparent;--kbq-scrollbar-track-active-background: transparent}:where(.kbq-dark .kbq-scrollbar-component){--kbq-scrollbar-thumb-default-background: var(--kbq-semantic-dark-contrast-a9, var(--kbq-palette-grey-50-a48));--kbq-scrollbar-thumb-hover-background: var(--kbq-semantic-dark-contrast-a10, var(--kbq-palette-grey-50-a60));--kbq-scrollbar-thumb-active-background: var(--kbq-semantic-dark-contrast-a11, var(--kbq-palette-grey-50-a80))}\n"] }]
247
- }], propDecorators: { contentElement: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }], kbqScrollbarDirective: [{ type: i0.ViewChild, args: ['content', { ...{ read: KbqScrollbarDirective }, isSignal: true }] }], initializationTarget: [{ type: i0.Input, args: [{ isSignal: true, alias: "initializationTarget", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], events: [{ type: i0.Input, args: [{ isSignal: true, alias: "events", required: false }] }], defer: [{ type: i0.Input, args: [{ isSignal: true, alias: "defer", required: false }] }], onInitialize: [{
248
- type: Output
249
- }], onUpdate: [{
250
- type: Output
251
- }], onDestroy: [{
252
- type: Output
253
- }], onScroll: [{
254
- type: Output
255
- }] } });
772
+ `, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [
773
+ { directive: KbqScrollbarViewport, inputs: ['kbqScrollbarMode', 'kbqScrollbarHideDelay'] }
774
+ ], exportAs: 'kbqScrollbar', styles: [":host{position:relative;display:flex;flex:1;min-inline-size:0;min-block-size:0;max-block-size:100%;isolation:isolate;overflow:auto}.kbq-scrollbar__content{isolation:isolate;flex:1;flex-basis:auto;inline-size:100%;block-size:100%}\n"] }]
775
+ }], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqScrollbarMode", required: false }] }], hideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqScrollbarHideDelay", required: false }] }] } });
256
776
 
257
777
  const COMPONENTS = [
778
+ KbqNativeScrollbar,
258
779
  KbqScrollbar,
259
- KbqScrollbarDirective
780
+ KbqScrollbarViewport
260
781
  ];
782
+ /** @docs-private */
261
783
  class KbqScrollbarModule {
262
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqScrollbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
263
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.30", ngImport: i0, type: KbqScrollbarModule, imports: [KbqScrollbar,
264
- KbqScrollbarDirective], exports: [KbqScrollbar,
265
- KbqScrollbarDirective] }); }
266
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqScrollbarModule, providers: [KBQ_SCROLLBAR_OPTIONS_DEFAULT_CONFIG_PROVIDER] }); }
784
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
785
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarModule, imports: [KbqNativeScrollbar,
786
+ KbqScrollbar,
787
+ KbqScrollbarViewport], exports: [KbqNativeScrollbar,
788
+ KbqScrollbar,
789
+ KbqScrollbarViewport] }); }
790
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarModule }); }
267
791
  }
268
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqScrollbarModule, decorators: [{
792
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqScrollbarModule, decorators: [{
269
793
  type: NgModule,
270
794
  args: [{
271
795
  imports: COMPONENTS,
272
- providers: [KBQ_SCROLLBAR_OPTIONS_DEFAULT_CONFIG_PROVIDER],
273
796
  exports: COMPONENTS
274
797
  }]
275
798
  }] });
@@ -278,5 +801,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
278
801
  * Generated bundle index. Do not edit.
279
802
  */
280
803
 
281
- export { KBQ_SCROLLBAR_CONFIG, KBQ_SCROLLBAR_OPTIONS_DEFAULT_CONFIG, KBQ_SCROLLBAR_OPTIONS_DEFAULT_CONFIG_PROVIDER, KbqScrollbar, KbqScrollbarDirective, KbqScrollbarModule };
804
+ export { KBQ_NATIVE_SCROLLBAR_OPTIONS, KBQ_SCROLLBAR_OPTIONS, KbqNativeScrollbar, KbqScrollbar, KbqScrollbarModule, KbqScrollbarViewport, kbqNativeScrollbarOptionsProvider, kbqScrollbarOptionsProvider };
282
805
  //# sourceMappingURL=koobiq-components-scrollbar.mjs.map